[{"data":1,"prerenderedAt":175297},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch8-wen-jian-cao-zuo":3,"wiki-doc-nav":2706},{"id":4,"title":5,"body":6,"description":2699,"extension":2700,"meta":2701,"navigation":485,"path":2702,"seo":2703,"stem":2704,"__hash__":2705},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":8,"toc":2674},"minimark",[9,13,18,22,25,60,64,69,72,120,124,127,179,182,197,200,240,244,247,274,277,347,351,355,358,419,422,443,447,450,518,522,525,581,588,615,619,622,686,690,696,750,753,757,762,831,834,918,922,927,979,982,986,989,992,1000,1003,1049,1052,1098,1102,1108,1158,1161,1208,1211,1252,1255,1317,1321,1324,1436,1439,1593,1596,1666,1670,1673,1676,1822,1825,1905,1908,2085,2089,2092,2103,2106,2327,2331,2595,2599,2634,2638,2670],[10,11,5],"h1",{"id":12},"_8-文件操作",[14,15,17],"h2",{"id":16},"_81-文件操作的意义","8.1 文件操作的意义",[19,20,21],"p",{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,23,24],{},"常见文件类型：",[26,27,28,36,42,48,54],"ol",{},[29,30,31,35],"li",{},[32,33,34],"code",{},".txt","：普通文本。",[29,37,38,41],{},[32,39,40],{},".csv","：表格文本。",[29,43,44,47],{},[32,45,46],{},".json","：结构化数据。",[29,49,50,53],{},[32,51,52],{},".log","：日志文件。",[29,55,56,59],{},[32,57,58],{},".py","：Python 源代码。",[14,61,63],{"id":62},"_82-路径","8.2 路径",[65,66,68],"h3",{"id":67},"_821-相对路径","8.2.1 相对路径",[19,70,71],{},"相对当前运行目录：",[73,74,79],"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-python shiki shiki-themes github-light github-dark","open(\"data.txt\", \"r\", encoding=\"utf-8\")\n","python","",[32,80,81],{"__ignoreMap":78},[82,83,86,90,94,98,101,104,106,110,114,117],"span",{"class":84,"line":85},"line",1,[82,87,89],{"class":88},"sj4cs","open",[82,91,93],{"class":92},"sVt8B","(",[82,95,97],{"class":96},"sZZnC","\"data.txt\"",[82,99,100],{"class":92},", ",[82,102,103],{"class":96},"\"r\"",[82,105,100],{"class":92},[82,107,109],{"class":108},"s4XuR","encoding",[82,111,113],{"class":112},"szBVR","=",[82,115,116],{"class":96},"\"utf-8\"",[82,118,119],{"class":92},")\n",[65,121,123],{"id":122},"_822-绝对路径","8.2.2 绝对路径",[19,125,126],{},"从根目录或盘符开始：",[73,128,130],{"className":75,"code":129,"language":77,"meta":78,"style":78},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[32,131,132,155],{"__ignoreMap":78},[82,133,134,136,138,141,143,145,147,149,151,153],{"class":84,"line":85},[82,135,89],{"class":88},[82,137,93],{"class":92},[82,139,140],{"class":96},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[82,142,100],{"class":92},[82,144,103],{"class":96},[82,146,100],{"class":92},[82,148,109],{"class":108},[82,150,113],{"class":112},[82,152,116],{"class":96},[82,154,119],{"class":92},[82,156,158,160,162,165,167,169,171,173,175,177],{"class":84,"line":157},2,[82,159,89],{"class":88},[82,161,93],{"class":92},[82,163,164],{"class":96},"\"D:\u002Fdata\u002Fdata.txt\"",[82,166,100],{"class":92},[82,168,103],{"class":96},[82,170,100],{"class":92},[82,172,109],{"class":108},[82,174,113],{"class":112},[82,176,116],{"class":96},[82,178,119],{"class":92},[19,180,181],{},"Windows 路径建议写成：",[73,183,185],{"className":75,"code":184,"language":77,"meta":78,"style":78},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[32,186,187],{"__ignoreMap":78},[82,188,189,192,194],{"class":84,"line":85},[82,190,191],{"class":92},"path ",[82,193,113],{"class":112},[82,195,196],{"class":96}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,198,199],{},"或原始字符串：",[73,201,203],{"className":75,"code":202,"language":77,"meta":78,"style":78},"path = r\"D:\\data\\data.txt\"\n",[32,204,205],{"__ignoreMap":78},[82,206,207,209,211,214,217,221,224,227,229,231,234,237],{"class":84,"line":85},[82,208,191],{"class":92},[82,210,113],{"class":112},[82,212,213],{"class":112}," r",[82,215,216],{"class":96},"\"",[82,218,220],{"class":219},"sA_wV","D:",[82,222,223],{"class":88},"\\d",[82,225,226],{"class":219},"ata",[82,228,223],{"class":88},[82,230,226],{"class":219},[82,232,233],{"class":88},".",[82,235,236],{"class":219},"txt",[82,238,239],{"class":96},"\"\n",[14,241,243],{"id":242},"_83-open函数","8.3 open函数",[19,245,246],{},"语法：",[73,248,250],{"className":75,"code":249,"language":77,"meta":78,"style":78},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[32,251,252],{"__ignoreMap":78},[82,253,254,257,260,263,266,268,270,272],{"class":84,"line":85},[82,255,256],{"class":108},"file",[82,258,259],{"class":112}," =",[82,261,262],{"class":88}," open",[82,264,265],{"class":92},"(文件路径, 打开模式, ",[82,267,109],{"class":108},[82,269,113],{"class":112},[82,271,116],{"class":96},[82,273,119],{"class":92},[19,275,276],{},"常见模式：",[278,279,280,293],"table",{},[281,282,283],"thead",{},[284,285,286,290],"tr",{},[287,288,289],"th",{},"模式",[287,291,292],{},"说明",[294,295,296,307,317,327,337],"tbody",{},[284,297,298,304],{},[299,300,301],"td",{},[32,302,303],{},"r",[299,305,306],{},"只读，文件不存在会报错",[284,308,309,314],{},[299,310,311],{},[32,312,313],{},"w",[299,315,316],{},"只写，文件不存在会创建，存在会清空",[284,318,319,324],{},[299,320,321],{},[32,322,323],{},"a",[299,325,326],{},"追加，文件不存在会创建",[284,328,329,334],{},[299,330,331],{},[32,332,333],{},"rb",[299,335,336],{},"二进制只读",[284,338,339,344],{},[299,340,341],{},[32,342,343],{},"wb",[299,345,346],{},"二进制只写",[14,348,350],{"id":349},"_84-读取文件","8.4 读取文件",[65,352,354],{"id":353},"_841-read","8.4.1 read",[19,356,357],{},"一次读取全部内容：",[73,359,361],{"className":75,"code":360,"language":77,"meta":78,"style":78},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[32,362,363,389,402,411],{"__ignoreMap":78},[82,364,365,367,369,371,373,375,377,379,381,383,385,387],{"class":84,"line":85},[82,366,256],{"class":108},[82,368,259],{"class":112},[82,370,262],{"class":88},[82,372,93],{"class":92},[82,374,97],{"class":96},[82,376,100],{"class":92},[82,378,103],{"class":96},[82,380,100],{"class":92},[82,382,109],{"class":108},[82,384,113],{"class":112},[82,386,116],{"class":96},[82,388,119],{"class":92},[82,390,391,394,396,399],{"class":84,"line":157},[82,392,393],{"class":92},"content ",[82,395,113],{"class":112},[82,397,398],{"class":108}," file",[82,400,401],{"class":92},".read()\n",[82,403,405,408],{"class":84,"line":404},3,[82,406,407],{"class":88},"print",[82,409,410],{"class":92},"(content)\n",[82,412,414,416],{"class":84,"line":413},4,[82,415,256],{"class":108},[82,417,418],{"class":92},".close()\n",[19,420,421],{},"可以指定读取字符数：",[73,423,425],{"className":75,"code":424,"language":77,"meta":78,"style":78},"content = file.read(10)\n",[32,426,427],{"__ignoreMap":78},[82,428,429,431,433,435,438,441],{"class":84,"line":85},[82,430,393],{"class":92},[82,432,113],{"class":112},[82,434,398],{"class":108},[82,436,437],{"class":92},".read(",[82,439,440],{"class":88},"10",[82,442,119],{"class":92},[65,444,446],{"id":445},"_842-readline","8.4.2 readline",[19,448,449],{},"一次读取一行：",[73,451,453],{"className":75,"code":452,"language":77,"meta":78,"style":78},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[32,454,455,481,487,499,506,511],{"__ignoreMap":78},[82,456,457,459,461,463,465,467,469,471,473,475,477,479],{"class":84,"line":85},[82,458,256],{"class":108},[82,460,259],{"class":112},[82,462,262],{"class":88},[82,464,93],{"class":92},[82,466,97],{"class":96},[82,468,100],{"class":92},[82,470,103],{"class":96},[82,472,100],{"class":92},[82,474,109],{"class":108},[82,476,113],{"class":112},[82,478,116],{"class":96},[82,480,119],{"class":92},[82,482,483],{"class":84,"line":157},[82,484,486],{"emptyLinePlaceholder":485},true,"\n",[82,488,489,492,494,496],{"class":84,"line":404},[82,490,491],{"class":92},"line ",[82,493,113],{"class":112},[82,495,398],{"class":108},[82,497,498],{"class":92},".readline()\n",[82,500,501,503],{"class":84,"line":413},[82,502,407],{"class":88},[82,504,505],{"class":92},"(line)\n",[82,507,509],{"class":84,"line":508},5,[82,510,486],{"emptyLinePlaceholder":485},[82,512,514,516],{"class":84,"line":513},6,[82,515,256],{"class":108},[82,517,418],{"class":92},[65,519,521],{"id":520},"_843-readlines","8.4.3 readlines",[19,523,524],{},"读取所有行，返回列表：",[73,526,528],{"className":75,"code":527,"language":77,"meta":78,"style":78},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[32,529,530,556,568,575],{"__ignoreMap":78},[82,531,532,534,536,538,540,542,544,546,548,550,552,554],{"class":84,"line":85},[82,533,256],{"class":108},[82,535,259],{"class":112},[82,537,262],{"class":88},[82,539,93],{"class":92},[82,541,97],{"class":96},[82,543,100],{"class":92},[82,545,103],{"class":96},[82,547,100],{"class":92},[82,549,109],{"class":108},[82,551,113],{"class":112},[82,553,116],{"class":96},[82,555,119],{"class":92},[82,557,558,561,563,565],{"class":84,"line":157},[82,559,560],{"class":92},"lines ",[82,562,113],{"class":112},[82,564,398],{"class":108},[82,566,567],{"class":92},".readlines()\n",[82,569,570,572],{"class":84,"line":404},[82,571,407],{"class":88},[82,573,574],{"class":92},"(lines)\n",[82,576,577,579],{"class":84,"line":413},[82,578,256],{"class":108},[82,580,418],{"class":92},[19,582,583,584,587],{},"每一行通常带有换行符，可以用 ",[32,585,586],{},"strip()"," 去掉：",[73,589,591],{"className":75,"code":590,"language":77,"meta":78,"style":78},"for line in lines:\n    print(line.strip())\n",[32,592,593,607],{"__ignoreMap":78},[82,594,595,598,601,604],{"class":84,"line":85},[82,596,597],{"class":112},"for",[82,599,600],{"class":92}," line ",[82,602,603],{"class":112},"in",[82,605,606],{"class":92}," lines:\n",[82,608,609,612],{"class":84,"line":157},[82,610,611],{"class":88},"    print",[82,613,614],{"class":92},"(line.strip())\n",[65,616,618],{"id":617},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,620,621],{},"推荐读取大文件时使用：",[73,623,625],{"className":75,"code":624,"language":77,"meta":78,"style":78},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[32,626,627,653,657,670,676,680],{"__ignoreMap":78},[82,628,629,631,633,635,637,639,641,643,645,647,649,651],{"class":84,"line":85},[82,630,256],{"class":108},[82,632,259],{"class":112},[82,634,262],{"class":88},[82,636,93],{"class":92},[82,638,97],{"class":96},[82,640,100],{"class":92},[82,642,103],{"class":96},[82,644,100],{"class":92},[82,646,109],{"class":108},[82,648,113],{"class":112},[82,650,116],{"class":96},[82,652,119],{"class":92},[82,654,655],{"class":84,"line":157},[82,656,486],{"emptyLinePlaceholder":485},[82,658,659,661,663,665,667],{"class":84,"line":404},[82,660,597],{"class":112},[82,662,600],{"class":92},[82,664,603],{"class":112},[82,666,398],{"class":108},[82,668,669],{"class":92},":\n",[82,671,672,674],{"class":84,"line":413},[82,673,611],{"class":88},[82,675,614],{"class":92},[82,677,678],{"class":84,"line":508},[82,679,486],{"emptyLinePlaceholder":485},[82,681,682,684],{"class":84,"line":513},[82,683,256],{"class":108},[82,685,418],{"class":92},[14,687,689],{"id":688},"_85-with语句","8.5 with语句",[19,691,692,695],{},[32,693,694],{},"with"," 会自动关闭文件，推荐使用。",[73,697,699],{"className":75,"code":698,"language":77,"meta":78,"style":78},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[32,700,701,733,744],{"__ignoreMap":78},[82,702,703,705,707,709,711,713,715,717,719,721,723,726,729,731],{"class":84,"line":85},[82,704,694],{"class":112},[82,706,262],{"class":88},[82,708,93],{"class":92},[82,710,97],{"class":96},[82,712,100],{"class":92},[82,714,103],{"class":96},[82,716,100],{"class":92},[82,718,109],{"class":108},[82,720,113],{"class":112},[82,722,116],{"class":96},[82,724,725],{"class":92},") ",[82,727,728],{"class":112},"as",[82,730,398],{"class":108},[82,732,669],{"class":92},[82,734,735,738,740,742],{"class":84,"line":157},[82,736,737],{"class":92},"    content ",[82,739,113],{"class":112},[82,741,398],{"class":108},[82,743,401],{"class":92},[82,745,746,748],{"class":84,"line":404},[82,747,611],{"class":88},[82,749,410],{"class":92},[19,751,752],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,754,756],{"id":755},"_86-写入文件","8.6 写入文件",[19,758,759,761],{},[32,760,313],{}," 模式会清空原文件。",[73,763,765],{"className":75,"code":764,"language":77,"meta":78,"style":78},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[32,766,767,798,816],{"__ignoreMap":78},[82,768,769,771,773,775,777,779,782,784,786,788,790,792,794,796],{"class":84,"line":85},[82,770,694],{"class":112},[82,772,262],{"class":88},[82,774,93],{"class":92},[82,776,97],{"class":96},[82,778,100],{"class":92},[82,780,781],{"class":96},"\"w\"",[82,783,100],{"class":92},[82,785,109],{"class":108},[82,787,113],{"class":112},[82,789,116],{"class":96},[82,791,725],{"class":92},[82,793,728],{"class":112},[82,795,398],{"class":108},[82,797,669],{"class":92},[82,799,800,803,806,809,812,814],{"class":84,"line":157},[82,801,802],{"class":108},"    file",[82,804,805],{"class":92},".write(",[82,807,808],{"class":96},"\"hello",[82,810,811],{"class":88},"\\n",[82,813,216],{"class":96},[82,815,119],{"class":92},[82,817,818,820,822,825,827,829],{"class":84,"line":404},[82,819,802],{"class":108},[82,821,805],{"class":92},[82,823,824],{"class":96},"\"python",[82,826,811],{"class":88},[82,828,216],{"class":96},[82,830,119],{"class":92},[19,832,833],{},"写入多行：",[73,835,837],{"className":75,"code":836,"language":77,"meta":78,"style":78},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[32,838,839,876,880,911],{"__ignoreMap":78},[82,840,841,843,845,848,851,853,855,857,860,862,864,866,869,871,873],{"class":84,"line":85},[82,842,560],{"class":92},[82,844,113],{"class":112},[82,846,847],{"class":92}," [",[82,849,850],{"class":96},"\"小明,18",[82,852,811],{"class":88},[82,854,216],{"class":96},[82,856,100],{"class":92},[82,858,859],{"class":96},"\"小红,17",[82,861,811],{"class":88},[82,863,216],{"class":96},[82,865,100],{"class":92},[82,867,868],{"class":96},"\"小刚,19",[82,870,811],{"class":88},[82,872,216],{"class":96},[82,874,875],{"class":92},"]\n",[82,877,878],{"class":84,"line":157},[82,879,486],{"emptyLinePlaceholder":485},[82,881,882,884,886,888,891,893,895,897,899,901,903,905,907,909],{"class":84,"line":404},[82,883,694],{"class":112},[82,885,262],{"class":88},[82,887,93],{"class":92},[82,889,890],{"class":96},"\"students.txt\"",[82,892,100],{"class":92},[82,894,781],{"class":96},[82,896,100],{"class":92},[82,898,109],{"class":108},[82,900,113],{"class":112},[82,902,116],{"class":96},[82,904,725],{"class":92},[82,906,728],{"class":112},[82,908,398],{"class":108},[82,910,669],{"class":92},[82,912,913,915],{"class":84,"line":413},[82,914,802],{"class":108},[82,916,917],{"class":92},".writelines(lines)\n",[14,919,921],{"id":920},"_87-追加文件","8.7 追加文件",[19,923,924,926],{},[32,925,323],{}," 模式不会清空原内容，而是在末尾追加。",[73,928,930],{"className":75,"code":929,"language":77,"meta":78,"style":78},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[32,931,932,964],{"__ignoreMap":78},[82,933,934,936,938,940,943,945,948,950,952,954,956,958,960,962],{"class":84,"line":85},[82,935,694],{"class":112},[82,937,262],{"class":88},[82,939,93],{"class":92},[82,941,942],{"class":96},"\"log.txt\"",[82,944,100],{"class":92},[82,946,947],{"class":96},"\"a\"",[82,949,100],{"class":92},[82,951,109],{"class":108},[82,953,113],{"class":112},[82,955,116],{"class":96},[82,957,725],{"class":92},[82,959,728],{"class":112},[82,961,398],{"class":108},[82,963,669],{"class":92},[82,965,966,968,970,973,975,977],{"class":84,"line":157},[82,967,802],{"class":108},[82,969,805],{"class":92},[82,971,972],{"class":96},"\"程序启动",[82,974,811],{"class":88},[82,976,216],{"class":96},[82,978,119],{"class":92},[19,980,981],{},"日志类文件常用追加模式。",[14,983,985],{"id":984},"_88-文件编码","8.8 文件编码",[19,987,988],{},"编码决定文字如何保存为字节。",[19,990,991],{},"常见编码：",[26,993,994,997],{},[29,995,996],{},"UTF-8：推荐。",[29,998,999],{},"GBK：部分 Windows 中文文件常见。",[19,1001,1002],{},"读取文件乱码时，可以尝试：",[73,1004,1006],{"className":75,"code":1005,"language":77,"meta":78,"style":78},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[32,1007,1008,1039],{"__ignoreMap":78},[82,1009,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1031,1033,1035,1037],{"class":84,"line":85},[82,1011,694],{"class":112},[82,1013,262],{"class":88},[82,1015,93],{"class":92},[82,1017,97],{"class":96},[82,1019,100],{"class":92},[82,1021,103],{"class":96},[82,1023,100],{"class":92},[82,1025,109],{"class":108},[82,1027,113],{"class":112},[82,1029,1030],{"class":96},"\"gbk\"",[82,1032,725],{"class":92},[82,1034,728],{"class":112},[82,1036,398],{"class":108},[82,1038,669],{"class":92},[82,1040,1041,1043,1045,1047],{"class":84,"line":157},[82,1042,737],{"class":92},[82,1044,113],{"class":112},[82,1046,398],{"class":108},[82,1048,401],{"class":92},[19,1050,1051],{},"写文件时建议统一 UTF-8：",[73,1053,1055],{"className":75,"code":1054,"language":77,"meta":78,"style":78},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[32,1056,1057,1087],{"__ignoreMap":78},[82,1058,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085],{"class":84,"line":85},[82,1060,694],{"class":112},[82,1062,262],{"class":88},[82,1064,93],{"class":92},[82,1066,97],{"class":96},[82,1068,100],{"class":92},[82,1070,781],{"class":96},[82,1072,100],{"class":92},[82,1074,109],{"class":108},[82,1076,113],{"class":112},[82,1078,116],{"class":96},[82,1080,725],{"class":92},[82,1082,728],{"class":112},[82,1084,398],{"class":108},[82,1086,669],{"class":92},[82,1088,1089,1091,1093,1096],{"class":84,"line":157},[82,1090,802],{"class":108},[82,1092,805],{"class":92},[82,1094,1095],{"class":96},"\"中文内容\"",[82,1097,119],{"class":92},[14,1099,1101],{"id":1100},"_89-pathlib","8.9 pathlib",[19,1103,1104,1107],{},[32,1105,1106],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[73,1109,1111],{"className":75,"code":1110,"language":77,"meta":78,"style":78},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[32,1112,1113,1127,1131,1151],{"__ignoreMap":78},[82,1114,1115,1118,1121,1124],{"class":84,"line":85},[82,1116,1117],{"class":112},"from",[82,1119,1120],{"class":92}," pathlib ",[82,1122,1123],{"class":112},"import",[82,1125,1126],{"class":92}," Path\n",[82,1128,1129],{"class":84,"line":157},[82,1130,486],{"emptyLinePlaceholder":485},[82,1132,1133,1135,1137,1140,1143,1145,1148],{"class":84,"line":404},[82,1134,191],{"class":92},[82,1136,113],{"class":112},[82,1138,1139],{"class":92}," Path(",[82,1141,1142],{"class":96},"\"data\"",[82,1144,725],{"class":92},[82,1146,1147],{"class":112},"\u002F",[82,1149,1150],{"class":96}," \"students.txt\"\n",[82,1152,1153,1155],{"class":84,"line":413},[82,1154,407],{"class":88},[82,1156,1157],{"class":92},"(path)\n",[19,1159,1160],{},"创建目录：",[73,1162,1164],{"className":75,"code":1163,"language":77,"meta":78,"style":78},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[32,1165,1166,1176,1180,1193],{"__ignoreMap":78},[82,1167,1168,1170,1172,1174],{"class":84,"line":85},[82,1169,1117],{"class":112},[82,1171,1120],{"class":92},[82,1173,1123],{"class":112},[82,1175,1126],{"class":92},[82,1177,1178],{"class":84,"line":157},[82,1179,486],{"emptyLinePlaceholder":485},[82,1181,1182,1185,1187,1189,1191],{"class":84,"line":404},[82,1183,1184],{"class":92},"data_dir ",[82,1186,113],{"class":112},[82,1188,1139],{"class":92},[82,1190,1142],{"class":96},[82,1192,119],{"class":92},[82,1194,1195,1198,1201,1203,1206],{"class":84,"line":413},[82,1196,1197],{"class":92},"data_dir.mkdir(",[82,1199,1200],{"class":108},"exist_ok",[82,1202,113],{"class":112},[82,1204,1205],{"class":88},"True",[82,1207,119],{"class":92},[19,1209,1210],{},"判断文件是否存在：",[73,1212,1214],{"className":75,"code":1213,"language":77,"meta":78,"style":78},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[32,1215,1216,1229,1233,1241],{"__ignoreMap":78},[82,1217,1218,1220,1222,1224,1227],{"class":84,"line":85},[82,1219,191],{"class":92},[82,1221,113],{"class":112},[82,1223,1139],{"class":92},[82,1225,1226],{"class":96},"\"data\u002Fstudents.txt\"",[82,1228,119],{"class":92},[82,1230,1231],{"class":84,"line":157},[82,1232,486],{"emptyLinePlaceholder":485},[82,1234,1235,1238],{"class":84,"line":404},[82,1236,1237],{"class":112},"if",[82,1239,1240],{"class":92}," path.exists():\n",[82,1242,1243,1245,1247,1250],{"class":84,"line":413},[82,1244,611],{"class":88},[82,1246,93],{"class":92},[82,1248,1249],{"class":96},"\"文件存在\"",[82,1251,119],{"class":92},[19,1253,1254],{},"读写文本：",[73,1256,1258],{"className":75,"code":1257,"language":77,"meta":78,"style":78},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[32,1259,1260,1272,1276,1294,1311],{"__ignoreMap":78},[82,1261,1262,1264,1266,1268,1270],{"class":84,"line":85},[82,1263,191],{"class":92},[82,1265,113],{"class":112},[82,1267,1139],{"class":92},[82,1269,97],{"class":96},[82,1271,119],{"class":92},[82,1273,1274],{"class":84,"line":157},[82,1275,486],{"emptyLinePlaceholder":485},[82,1277,1278,1281,1284,1286,1288,1290,1292],{"class":84,"line":404},[82,1279,1280],{"class":92},"path.write_text(",[82,1282,1283],{"class":96},"\"hello python\"",[82,1285,100],{"class":92},[82,1287,109],{"class":108},[82,1289,113],{"class":112},[82,1291,116],{"class":96},[82,1293,119],{"class":92},[82,1295,1296,1298,1300,1303,1305,1307,1309],{"class":84,"line":413},[82,1297,393],{"class":92},[82,1299,113],{"class":112},[82,1301,1302],{"class":92}," path.read_text(",[82,1304,109],{"class":108},[82,1306,113],{"class":112},[82,1308,116],{"class":96},[82,1310,119],{"class":92},[82,1312,1313,1315],{"class":84,"line":508},[82,1314,407],{"class":88},[82,1316,410],{"class":92},[14,1318,1320],{"id":1319},"_810-json文件","8.10 JSON文件",[19,1322,1323],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[73,1325,1327],{"className":75,"code":1326,"language":77,"meta":78,"style":78},"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",[32,1328,1329,1336,1340,1350,1364,1376,1386,1392,1397,1428],{"__ignoreMap":78},[82,1330,1331,1333],{"class":84,"line":85},[82,1332,1123],{"class":112},[82,1334,1335],{"class":92}," json\n",[82,1337,1338],{"class":84,"line":157},[82,1339,486],{"emptyLinePlaceholder":485},[82,1341,1342,1345,1347],{"class":84,"line":404},[82,1343,1344],{"class":92},"student ",[82,1346,113],{"class":112},[82,1348,1349],{"class":92}," {\n",[82,1351,1352,1355,1358,1361],{"class":84,"line":413},[82,1353,1354],{"class":96},"    \"name\"",[82,1356,1357],{"class":92},": ",[82,1359,1360],{"class":96},"\"小明\"",[82,1362,1363],{"class":92},",\n",[82,1365,1366,1369,1371,1374],{"class":84,"line":508},[82,1367,1368],{"class":96},"    \"age\"",[82,1370,1357],{"class":92},[82,1372,1373],{"class":88},"18",[82,1375,1363],{"class":92},[82,1377,1378,1381,1383],{"class":84,"line":513},[82,1379,1380],{"class":96},"    \"score\"",[82,1382,1357],{"class":92},[82,1384,1385],{"class":88},"95\n",[82,1387,1389],{"class":84,"line":1388},7,[82,1390,1391],{"class":92},"}\n",[82,1393,1395],{"class":84,"line":1394},8,[82,1396,486],{"emptyLinePlaceholder":485},[82,1398,1400,1403,1405,1408,1411,1413,1416,1418,1421,1423,1426],{"class":84,"line":1399},9,[82,1401,1402],{"class":92},"text ",[82,1404,113],{"class":112},[82,1406,1407],{"class":92}," json.dumps(student, ",[82,1409,1410],{"class":108},"ensure_ascii",[82,1412,113],{"class":112},[82,1414,1415],{"class":88},"False",[82,1417,100],{"class":92},[82,1419,1420],{"class":108},"indent",[82,1422,113],{"class":112},[82,1424,1425],{"class":88},"2",[82,1427,119],{"class":92},[82,1429,1431,1433],{"class":84,"line":1430},10,[82,1432,407],{"class":88},[82,1434,1435],{"class":92},"(text)\n",[19,1437,1438],{},"写入 JSON 文件：",[73,1440,1442],{"className":75,"code":1441,"language":77,"meta":78,"style":78},"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",[32,1443,1444,1450,1454,1464,1498,1529,1533,1537,1568],{"__ignoreMap":78},[82,1445,1446,1448],{"class":84,"line":85},[82,1447,1123],{"class":112},[82,1449,1335],{"class":92},[82,1451,1452],{"class":84,"line":157},[82,1453,486],{"emptyLinePlaceholder":485},[82,1455,1456,1459,1461],{"class":84,"line":404},[82,1457,1458],{"class":92},"students ",[82,1460,113],{"class":112},[82,1462,1463],{"class":92}," [\n",[82,1465,1466,1469,1472,1474,1476,1478,1481,1483,1485,1487,1490,1492,1495],{"class":84,"line":413},[82,1467,1468],{"class":92},"    {",[82,1470,1471],{"class":96},"\"name\"",[82,1473,1357],{"class":92},[82,1475,1360],{"class":96},[82,1477,100],{"class":92},[82,1479,1480],{"class":96},"\"age\"",[82,1482,1357],{"class":92},[82,1484,1373],{"class":88},[82,1486,100],{"class":92},[82,1488,1489],{"class":96},"\"score\"",[82,1491,1357],{"class":92},[82,1493,1494],{"class":88},"95",[82,1496,1497],{"class":92},"},\n",[82,1499,1500,1502,1504,1506,1509,1511,1513,1515,1518,1520,1522,1524,1527],{"class":84,"line":508},[82,1501,1468],{"class":92},[82,1503,1471],{"class":96},[82,1505,1357],{"class":92},[82,1507,1508],{"class":96},"\"小红\"",[82,1510,100],{"class":92},[82,1512,1480],{"class":96},[82,1514,1357],{"class":92},[82,1516,1517],{"class":88},"17",[82,1519,100],{"class":92},[82,1521,1489],{"class":96},[82,1523,1357],{"class":92},[82,1525,1526],{"class":88},"88",[82,1528,1497],{"class":92},[82,1530,1531],{"class":84,"line":513},[82,1532,875],{"class":92},[82,1534,1535],{"class":84,"line":1388},[82,1536,486],{"emptyLinePlaceholder":485},[82,1538,1539,1541,1543,1545,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566],{"class":84,"line":1394},[82,1540,694],{"class":112},[82,1542,262],{"class":88},[82,1544,93],{"class":92},[82,1546,1547],{"class":96},"\"students.json\"",[82,1549,100],{"class":92},[82,1551,781],{"class":96},[82,1553,100],{"class":92},[82,1555,109],{"class":108},[82,1557,113],{"class":112},[82,1559,116],{"class":96},[82,1561,725],{"class":92},[82,1563,728],{"class":112},[82,1565,398],{"class":108},[82,1567,669],{"class":92},[82,1569,1570,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591],{"class":84,"line":1399},[82,1571,1572],{"class":92},"    json.dump(students, ",[82,1574,256],{"class":108},[82,1576,100],{"class":92},[82,1578,1410],{"class":108},[82,1580,113],{"class":112},[82,1582,1415],{"class":88},[82,1584,100],{"class":92},[82,1586,1420],{"class":108},[82,1588,113],{"class":112},[82,1590,1425],{"class":88},[82,1592,119],{"class":92},[19,1594,1595],{},"读取 JSON 文件：",[73,1597,1599],{"className":75,"code":1598,"language":77,"meta":78,"style":78},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[32,1600,1601,1607,1611,1641,1655,1659],{"__ignoreMap":78},[82,1602,1603,1605],{"class":84,"line":85},[82,1604,1123],{"class":112},[82,1606,1335],{"class":92},[82,1608,1609],{"class":84,"line":157},[82,1610,486],{"emptyLinePlaceholder":485},[82,1612,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639],{"class":84,"line":404},[82,1614,694],{"class":112},[82,1616,262],{"class":88},[82,1618,93],{"class":92},[82,1620,1547],{"class":96},[82,1622,100],{"class":92},[82,1624,103],{"class":96},[82,1626,100],{"class":92},[82,1628,109],{"class":108},[82,1630,113],{"class":112},[82,1632,116],{"class":96},[82,1634,725],{"class":92},[82,1636,728],{"class":112},[82,1638,398],{"class":108},[82,1640,669],{"class":92},[82,1642,1643,1646,1648,1651,1653],{"class":84,"line":413},[82,1644,1645],{"class":92},"    students ",[82,1647,113],{"class":112},[82,1649,1650],{"class":92}," json.load(",[82,1652,256],{"class":108},[82,1654,119],{"class":92},[82,1656,1657],{"class":84,"line":508},[82,1658,486],{"emptyLinePlaceholder":485},[82,1660,1661,1663],{"class":84,"line":513},[82,1662,407],{"class":88},[82,1664,1665],{"class":92},"(students)\n",[14,1667,1669],{"id":1668},"_811-csv文件","8.11 CSV文件",[19,1671,1672],{},"CSV 是逗号分隔值，常用于表格数据。",[19,1674,1675],{},"写入 CSV：",[73,1677,1679],{"className":75,"code":1678,"language":77,"meta":78,"style":78},"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",[32,1680,1681,1688,1692,1700,1721,1737,1753,1757,1761,1802,1816],{"__ignoreMap":78},[82,1682,1683,1685],{"class":84,"line":85},[82,1684,1123],{"class":112},[82,1686,1687],{"class":92}," csv\n",[82,1689,1690],{"class":84,"line":157},[82,1691,486],{"emptyLinePlaceholder":485},[82,1693,1694,1696,1698],{"class":84,"line":404},[82,1695,1458],{"class":92},[82,1697,113],{"class":112},[82,1699,1463],{"class":92},[82,1701,1702,1705,1708,1710,1713,1715,1718],{"class":84,"line":413},[82,1703,1704],{"class":92},"    [",[82,1706,1707],{"class":96},"\"姓名\"",[82,1709,100],{"class":92},[82,1711,1712],{"class":96},"\"年龄\"",[82,1714,100],{"class":92},[82,1716,1717],{"class":96},"\"成绩\"",[82,1719,1720],{"class":92},"],\n",[82,1722,1723,1725,1727,1729,1731,1733,1735],{"class":84,"line":508},[82,1724,1704],{"class":92},[82,1726,1360],{"class":96},[82,1728,100],{"class":92},[82,1730,1373],{"class":88},[82,1732,100],{"class":92},[82,1734,1494],{"class":88},[82,1736,1720],{"class":92},[82,1738,1739,1741,1743,1745,1747,1749,1751],{"class":84,"line":513},[82,1740,1704],{"class":92},[82,1742,1508],{"class":96},[82,1744,100],{"class":92},[82,1746,1517],{"class":88},[82,1748,100],{"class":92},[82,1750,1526],{"class":88},[82,1752,1720],{"class":92},[82,1754,1755],{"class":84,"line":1388},[82,1756,875],{"class":92},[82,1758,1759],{"class":84,"line":1394},[82,1760,486],{"emptyLinePlaceholder":485},[82,1762,1763,1765,1767,1769,1772,1774,1776,1778,1780,1782,1784,1786,1789,1791,1794,1796,1798,1800],{"class":84,"line":1399},[82,1764,694],{"class":112},[82,1766,262],{"class":88},[82,1768,93],{"class":92},[82,1770,1771],{"class":96},"\"students.csv\"",[82,1773,100],{"class":92},[82,1775,781],{"class":96},[82,1777,100],{"class":92},[82,1779,109],{"class":108},[82,1781,113],{"class":112},[82,1783,116],{"class":96},[82,1785,100],{"class":92},[82,1787,1788],{"class":108},"newline",[82,1790,113],{"class":112},[82,1792,1793],{"class":96},"\"\"",[82,1795,725],{"class":92},[82,1797,728],{"class":112},[82,1799,398],{"class":108},[82,1801,669],{"class":92},[82,1803,1804,1807,1809,1812,1814],{"class":84,"line":1430},[82,1805,1806],{"class":92},"    writer ",[82,1808,113],{"class":112},[82,1810,1811],{"class":92}," csv.writer(",[82,1813,256],{"class":108},[82,1815,119],{"class":92},[82,1817,1819],{"class":84,"line":1818},11,[82,1820,1821],{"class":92},"    writer.writerows(students)\n",[19,1823,1824],{},"读取 CSV：",[73,1826,1828],{"className":75,"code":1827,"language":77,"meta":78,"style":78},"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",[32,1829,1830,1836,1840,1870,1884,1897],{"__ignoreMap":78},[82,1831,1832,1834],{"class":84,"line":85},[82,1833,1123],{"class":112},[82,1835,1687],{"class":92},[82,1837,1838],{"class":84,"line":157},[82,1839,486],{"emptyLinePlaceholder":485},[82,1841,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868],{"class":84,"line":404},[82,1843,694],{"class":112},[82,1845,262],{"class":88},[82,1847,93],{"class":92},[82,1849,1771],{"class":96},[82,1851,100],{"class":92},[82,1853,103],{"class":96},[82,1855,100],{"class":92},[82,1857,109],{"class":108},[82,1859,113],{"class":112},[82,1861,116],{"class":96},[82,1863,725],{"class":92},[82,1865,728],{"class":112},[82,1867,398],{"class":108},[82,1869,669],{"class":92},[82,1871,1872,1875,1877,1880,1882],{"class":84,"line":413},[82,1873,1874],{"class":92},"    reader ",[82,1876,113],{"class":112},[82,1878,1879],{"class":92}," csv.reader(",[82,1881,256],{"class":108},[82,1883,119],{"class":92},[82,1885,1886,1889,1892,1894],{"class":84,"line":508},[82,1887,1888],{"class":112},"    for",[82,1890,1891],{"class":92}," row ",[82,1893,603],{"class":112},[82,1895,1896],{"class":92}," reader:\n",[82,1898,1899,1902],{"class":84,"line":513},[82,1900,1901],{"class":88},"        print",[82,1903,1904],{"class":92},"(row)\n",[19,1906,1907],{},"使用字典写入：",[73,1909,1911],{"className":75,"code":1910,"language":77,"meta":78,"style":78},"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",[32,1912,1913,1919,1923,1931,1959,1987,1991,1995,2033,2054,2075,2080],{"__ignoreMap":78},[82,1914,1915,1917],{"class":84,"line":85},[82,1916,1123],{"class":112},[82,1918,1687],{"class":92},[82,1920,1921],{"class":84,"line":157},[82,1922,486],{"emptyLinePlaceholder":485},[82,1924,1925,1927,1929],{"class":84,"line":404},[82,1926,1458],{"class":92},[82,1928,113],{"class":112},[82,1930,1463],{"class":92},[82,1932,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957],{"class":84,"line":413},[82,1934,1468],{"class":92},[82,1936,1471],{"class":96},[82,1938,1357],{"class":92},[82,1940,1360],{"class":96},[82,1942,100],{"class":92},[82,1944,1480],{"class":96},[82,1946,1357],{"class":92},[82,1948,1373],{"class":88},[82,1950,100],{"class":92},[82,1952,1489],{"class":96},[82,1954,1357],{"class":92},[82,1956,1494],{"class":88},[82,1958,1497],{"class":92},[82,1960,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985],{"class":84,"line":508},[82,1962,1468],{"class":92},[82,1964,1471],{"class":96},[82,1966,1357],{"class":92},[82,1968,1508],{"class":96},[82,1970,100],{"class":92},[82,1972,1480],{"class":96},[82,1974,1357],{"class":92},[82,1976,1517],{"class":88},[82,1978,100],{"class":92},[82,1980,1489],{"class":96},[82,1982,1357],{"class":92},[82,1984,1526],{"class":88},[82,1986,1497],{"class":92},[82,1988,1989],{"class":84,"line":513},[82,1990,875],{"class":92},[82,1992,1993],{"class":84,"line":1388},[82,1994,486],{"emptyLinePlaceholder":485},[82,1996,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":84,"line":1394},[82,1998,694],{"class":112},[82,2000,262],{"class":88},[82,2002,93],{"class":92},[82,2004,1771],{"class":96},[82,2006,100],{"class":92},[82,2008,781],{"class":96},[82,2010,100],{"class":92},[82,2012,109],{"class":108},[82,2014,113],{"class":112},[82,2016,116],{"class":96},[82,2018,100],{"class":92},[82,2020,1788],{"class":108},[82,2022,113],{"class":112},[82,2024,1793],{"class":96},[82,2026,725],{"class":92},[82,2028,728],{"class":112},[82,2030,398],{"class":108},[82,2032,669],{"class":92},[82,2034,2035,2038,2040,2042,2044,2046,2048,2050,2052],{"class":84,"line":1399},[82,2036,2037],{"class":92},"    fieldnames ",[82,2039,113],{"class":112},[82,2041,847],{"class":92},[82,2043,1471],{"class":96},[82,2045,100],{"class":92},[82,2047,1480],{"class":96},[82,2049,100],{"class":92},[82,2051,1489],{"class":96},[82,2053,875],{"class":92},[82,2055,2056,2058,2060,2063,2065,2067,2070,2072],{"class":84,"line":1430},[82,2057,1806],{"class":92},[82,2059,113],{"class":112},[82,2061,2062],{"class":92}," csv.DictWriter(",[82,2064,256],{"class":108},[82,2066,100],{"class":92},[82,2068,2069],{"class":108},"fieldnames",[82,2071,113],{"class":112},[82,2073,2074],{"class":92},"fieldnames)\n",[82,2076,2077],{"class":84,"line":1818},[82,2078,2079],{"class":92},"    writer.writeheader()\n",[82,2081,2083],{"class":84,"line":2082},12,[82,2084,1821],{"class":92},[14,2086,2088],{"id":2087},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,2090,2091],{},"需求：",[26,2093,2094,2097,2100],{},[29,2095,2096],{},"读取文本文件。",[29,2098,2099],{},"统计每个单词出现次数。",[29,2101,2102],{},"输出出现次数最多的前 10 个单词。",[19,2104,2105],{},"代码：",[73,2107,2109],{"className":75,"code":2108,"language":77,"meta":78,"style":78},"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",[32,2110,2111,2121,2125,2138,2154,2158,2168,2178,2182,2194,2215,2226,2231,2253,2258,2296,2301,2319],{"__ignoreMap":78},[82,2112,2113,2115,2117,2119],{"class":84,"line":85},[82,2114,1117],{"class":112},[82,2116,1120],{"class":92},[82,2118,1123],{"class":112},[82,2120,1126],{"class":92},[82,2122,2123],{"class":84,"line":157},[82,2124,486],{"emptyLinePlaceholder":485},[82,2126,2127,2129,2131,2133,2136],{"class":84,"line":404},[82,2128,191],{"class":92},[82,2130,113],{"class":112},[82,2132,1139],{"class":92},[82,2134,2135],{"class":96},"\"article.txt\"",[82,2137,119],{"class":92},[82,2139,2140,2142,2144,2146,2148,2150,2152],{"class":84,"line":413},[82,2141,393],{"class":92},[82,2143,113],{"class":112},[82,2145,1302],{"class":92},[82,2147,109],{"class":108},[82,2149,113],{"class":112},[82,2151,116],{"class":96},[82,2153,119],{"class":92},[82,2155,2156],{"class":84,"line":508},[82,2157,486],{"emptyLinePlaceholder":485},[82,2159,2160,2163,2165],{"class":84,"line":513},[82,2161,2162],{"class":92},"words ",[82,2164,113],{"class":112},[82,2166,2167],{"class":92}," content.lower().split()\n",[82,2169,2170,2173,2175],{"class":84,"line":1388},[82,2171,2172],{"class":92},"counter ",[82,2174,113],{"class":112},[82,2176,2177],{"class":92}," {}\n",[82,2179,2180],{"class":84,"line":1394},[82,2181,486],{"emptyLinePlaceholder":485},[82,2183,2184,2186,2189,2191],{"class":84,"line":1399},[82,2185,597],{"class":112},[82,2187,2188],{"class":92}," word ",[82,2190,603],{"class":112},[82,2192,2193],{"class":92}," words:\n",[82,2195,2196,2199,2201,2204,2207,2210,2213],{"class":84,"line":1430},[82,2197,2198],{"class":92},"    word ",[82,2200,113],{"class":112},[82,2202,2203],{"class":92}," word.strip(",[82,2205,2206],{"class":96},"\".,!?;:",[82,2208,2209],{"class":88},"\\\"",[82,2211,2212],{"class":96},"'()[]\"",[82,2214,119],{"class":92},[82,2216,2217,2220,2223],{"class":84,"line":1818},[82,2218,2219],{"class":112},"    if",[82,2221,2222],{"class":112}," not",[82,2224,2225],{"class":92}," word:\n",[82,2227,2228],{"class":84,"line":2082},[82,2229,2230],{"class":112},"        continue\n",[82,2232,2234,2237,2239,2242,2245,2247,2250],{"class":84,"line":2233},13,[82,2235,2236],{"class":92},"    counter[word] ",[82,2238,113],{"class":112},[82,2240,2241],{"class":92}," counter.get(word, ",[82,2243,2244],{"class":88},"0",[82,2246,725],{"class":92},[82,2248,2249],{"class":112},"+",[82,2251,2252],{"class":88}," 1\n",[82,2254,2256],{"class":84,"line":2255},14,[82,2257,486],{"emptyLinePlaceholder":485},[82,2259,2261,2264,2266,2269,2272,2275,2278,2281,2284,2287,2290,2292,2294],{"class":84,"line":2260},15,[82,2262,2263],{"class":92},"items ",[82,2265,113],{"class":112},[82,2267,2268],{"class":88}," sorted",[82,2270,2271],{"class":92},"(counter.items(), ",[82,2273,2274],{"class":108},"key",[82,2276,2277],{"class":112},"=lambda",[82,2279,2280],{"class":92}," item: item[",[82,2282,2283],{"class":88},"1",[82,2285,2286],{"class":92},"], ",[82,2288,2289],{"class":108},"reverse",[82,2291,113],{"class":112},[82,2293,1205],{"class":88},[82,2295,119],{"class":92},[82,2297,2299],{"class":84,"line":2298},16,[82,2300,486],{"emptyLinePlaceholder":485},[82,2302,2304,2306,2309,2311,2314,2316],{"class":84,"line":2303},17,[82,2305,597],{"class":112},[82,2307,2308],{"class":92}," word, count ",[82,2310,603],{"class":112},[82,2312,2313],{"class":92}," items[:",[82,2315,440],{"class":88},[82,2317,2318],{"class":92},"]:\n",[82,2320,2322,2324],{"class":84,"line":2321},18,[82,2323,611],{"class":88},[82,2325,2326],{"class":92},"(word, count)\n",[14,2328,2330],{"id":2329},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[73,2332,2334],{"className":75,"code":2333,"language":77,"meta":78,"style":78},"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",[32,2335,2336,2342,2352,2356,2369,2373,2377,2389,2401,2409,2413,2444,2454,2458,2462,2472,2502,2527,2531,2536,2546,2577,2583],{"__ignoreMap":78},[82,2337,2338,2340],{"class":84,"line":85},[82,2339,1123],{"class":112},[82,2341,1335],{"class":92},[82,2343,2344,2346,2348,2350],{"class":84,"line":157},[82,2345,1117],{"class":112},[82,2347,1120],{"class":92},[82,2349,1123],{"class":112},[82,2351,1126],{"class":92},[82,2353,2354],{"class":84,"line":404},[82,2355,486],{"emptyLinePlaceholder":485},[82,2357,2358,2361,2363,2365,2367],{"class":84,"line":413},[82,2359,2360],{"class":88},"DATA_FILE",[82,2362,259],{"class":112},[82,2364,1139],{"class":92},[82,2366,1547],{"class":96},[82,2368,119],{"class":92},[82,2370,2371],{"class":84,"line":508},[82,2372,486],{"emptyLinePlaceholder":485},[82,2374,2375],{"class":84,"line":513},[82,2376,486],{"emptyLinePlaceholder":485},[82,2378,2379,2382,2386],{"class":84,"line":1388},[82,2380,2381],{"class":112},"def",[82,2383,2385],{"class":2384},"sScJk"," load_students",[82,2387,2388],{"class":92},"():\n",[82,2390,2391,2393,2395,2398],{"class":84,"line":1394},[82,2392,2219],{"class":112},[82,2394,2222],{"class":112},[82,2396,2397],{"class":88}," DATA_FILE",[82,2399,2400],{"class":92},".exists():\n",[82,2402,2403,2406],{"class":84,"line":1399},[82,2404,2405],{"class":112},"        return",[82,2407,2408],{"class":92}," []\n",[82,2410,2411],{"class":84,"line":1430},[82,2412,486],{"emptyLinePlaceholder":485},[82,2414,2415,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442],{"class":84,"line":1818},[82,2416,2417],{"class":112},"    with",[82,2419,262],{"class":88},[82,2421,93],{"class":92},[82,2423,2360],{"class":88},[82,2425,100],{"class":92},[82,2427,103],{"class":96},[82,2429,100],{"class":92},[82,2431,109],{"class":108},[82,2433,113],{"class":112},[82,2435,116],{"class":96},[82,2437,725],{"class":92},[82,2439,728],{"class":112},[82,2441,398],{"class":108},[82,2443,669],{"class":92},[82,2445,2446,2448,2450,2452],{"class":84,"line":2082},[82,2447,2405],{"class":112},[82,2449,1650],{"class":92},[82,2451,256],{"class":108},[82,2453,119],{"class":92},[82,2455,2456],{"class":84,"line":2233},[82,2457,486],{"emptyLinePlaceholder":485},[82,2459,2460],{"class":84,"line":2255},[82,2461,486],{"emptyLinePlaceholder":485},[82,2463,2464,2466,2469],{"class":84,"line":2260},[82,2465,2381],{"class":112},[82,2467,2468],{"class":2384}," save_students",[82,2470,2471],{"class":92},"(students):\n",[82,2473,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500],{"class":84,"line":2298},[82,2475,2417],{"class":112},[82,2477,262],{"class":88},[82,2479,93],{"class":92},[82,2481,2360],{"class":88},[82,2483,100],{"class":92},[82,2485,781],{"class":96},[82,2487,100],{"class":92},[82,2489,109],{"class":108},[82,2491,113],{"class":112},[82,2493,116],{"class":96},[82,2495,725],{"class":92},[82,2497,728],{"class":112},[82,2499,398],{"class":108},[82,2501,669],{"class":92},[82,2503,2504,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525],{"class":84,"line":2303},[82,2505,2506],{"class":92},"        json.dump(students, ",[82,2508,256],{"class":108},[82,2510,100],{"class":92},[82,2512,1410],{"class":108},[82,2514,113],{"class":112},[82,2516,1415],{"class":88},[82,2518,100],{"class":92},[82,2520,1420],{"class":108},[82,2522,113],{"class":112},[82,2524,1425],{"class":88},[82,2526,119],{"class":92},[82,2528,2529],{"class":84,"line":2321},[82,2530,486],{"emptyLinePlaceholder":485},[82,2532,2534],{"class":84,"line":2533},19,[82,2535,486],{"emptyLinePlaceholder":485},[82,2537,2539,2541,2543],{"class":84,"line":2538},20,[82,2540,1458],{"class":92},[82,2542,113],{"class":112},[82,2544,2545],{"class":92}," load_students()\n",[82,2547,2549,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574],{"class":84,"line":2548},21,[82,2550,2551],{"class":92},"students.append({",[82,2553,1471],{"class":96},[82,2555,1357],{"class":92},[82,2557,1360],{"class":96},[82,2559,100],{"class":92},[82,2561,1480],{"class":96},[82,2563,1357],{"class":92},[82,2565,1373],{"class":88},[82,2567,100],{"class":92},[82,2569,1489],{"class":96},[82,2571,1357],{"class":92},[82,2573,1494],{"class":88},[82,2575,2576],{"class":92},"})\n",[82,2578,2580],{"class":84,"line":2579},22,[82,2581,2582],{"class":92},"save_students(students)\n",[82,2584,2586,2588,2590,2593],{"class":84,"line":2585},23,[82,2587,407],{"class":88},[82,2589,93],{"class":92},[82,2591,2592],{"class":96},"\"保存成功\"",[82,2594,119],{"class":92},[14,2596,2598],{"id":2597},"_814-易错点","8.14 易错点",[26,2600,2601,2605,2612,2617,2624,2631],{},[29,2602,2603,761],{},[32,2604,313],{},[29,2606,2607,2608,2611],{},"读写中文要指定 ",[32,2609,2610],{},"encoding=\"utf-8\"","。",[29,2613,2614,2615,2611],{},"打开文件后要关闭，推荐使用 ",[32,2616,694],{},[29,2618,2619,2620,2623],{},"读取大文件不要直接 ",[32,2621,2622],{},"read()"," 全部内容。",[29,2625,2626,2627,2630],{},"Windows 写 CSV 时建议加 ",[32,2628,2629],{},"newline=\"\"","，避免空行。",[29,2632,2633],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,2635,2637],{"id":2636},"_815-本章练习","8.15 本章练习",[26,2639,2640,2647,2653,2656,2659],{},[29,2641,2642,2643,2646],{},"写入一个 ",[32,2644,2645],{},"students.txt","，每行保存一个学生姓名。",[29,2648,2649,2650,2652],{},"读取 ",[32,2651,2645],{}," 并输出所有学生。",[29,2654,2655],{},"把学生列表保存为 JSON 文件。",[29,2657,2658],{},"从 JSON 文件读取学生数据，计算平均分。",[29,2660,2661,2662,2665,2666,2669],{},"写一个日志函数 ",[32,2663,2664],{},"write_log(message)","，每次调用向 ",[32,2667,2668],{},"app.log"," 追加一行。",[2671,2672,2673],"style",{},"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":78,"searchDepth":157,"depth":157,"links":2675},[2676,2677,2681,2682,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698],{"id":16,"depth":157,"text":17},{"id":62,"depth":157,"text":63,"children":2678},[2679,2680],{"id":67,"depth":404,"text":68},{"id":122,"depth":404,"text":123},{"id":242,"depth":157,"text":243},{"id":349,"depth":157,"text":350,"children":2683},[2684,2685,2686,2687],{"id":353,"depth":404,"text":354},{"id":445,"depth":404,"text":446},{"id":520,"depth":404,"text":521},{"id":617,"depth":404,"text":618},{"id":688,"depth":157,"text":689},{"id":755,"depth":157,"text":756},{"id":920,"depth":157,"text":921},{"id":984,"depth":157,"text":985},{"id":1100,"depth":157,"text":1101},{"id":1319,"depth":157,"text":1320},{"id":1668,"depth":157,"text":1669},{"id":2087,"depth":157,"text":2088},{"id":2329,"depth":157,"text":2330},{"id":2597,"depth":157,"text":2598},{"id":2636,"depth":157,"text":2637},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":5,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",[2707,7756,8862,10281,13269,14620,16108,17195,25955,25967,26566,26592,26716,26957,27022,27040,27053,27100,27224,27393,27592,27771,27976,28112,28207,28244,28257,28566,29306,30014,30035,31054,32685,32836,32849,32861,33158,52956,52971,52988,53021,55890,79232,95374,95395,95508,95629,96399,97062,97423,97461,97567,97667,97710,97736,97797,99451,99552,99577,100068,100568,101648,101931,102673,103175,103187,105203,106867,108369,110067,111980,113899,115920,119390,119822,120285,121034,123978,124326,124348,124704,128010,128022,128425,128448,128595,128762,128967,129268,129825,130482,132413,134011,134660,136154,137585,138820,140514,142266,144676,144792,145727,145938,146823,148058,148286,148299,149446,151850,154214,157520,159994,161638,163414,165427,168469,170649,172931,175125],{"id":2708,"title":2709,"body":2710,"description":78,"extension":2700,"meta":7751,"navigation":485,"path":7752,"seo":7753,"stem":7754,"__hash__":7755},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2711,"toc":7723},[2712,2715,2719,2722,2726,2737,2741,2745,2748,2751,2754,2757,2760,2786,2790,2793,2796,2799,2802,2852,2856,2874,2876,2890,2893,2901,2904,3747,3754,3771,3775,3861,3865,3871,3957,3961,3999,4003,4067,4071,4075,4082,4093,4097,4102,4106,4111,4115,4120,4124,4128,4133,4388,4393,4531,4536,4792,4795,4803,4807,4812,4915,4918,5223,5232,5333,5336,5339,5342,5345,5605,5610,5748,5751,5929,5932,6060,6063,6215,6219,6224,6227,6238,6246,6249,6355,6359,6363,6368,6418,6423,6428,6452,6457,6510,6513,6518,6695,6700,6985,6990,7387,7391,7396,7453,7458,7466,7469,7608,7611,7720],[10,2713,2709],{"id":2714},"_1基础入门",[14,2716,2718],{"id":2717},"_11注释","1.1注释",[19,2720,2721],{},"\u002F\u002F或者\u002F* *\u002F",[14,2723,2725],{"id":2724},"_12命名","1.2命名",[26,2727,2728,2731,2734],{},[29,2729,2730],{},"字母数字下划线",[29,2732,2733],{},"开头必须是字母或_",[29,2735,2736],{},"不能使用关键词",[14,2738,2740],{"id":2739},"_13数据类型","1.3数据类型",[65,2742,2744],{"id":2743},"_131整形","1.3.1整形",[19,2746,2747],{},"short 短整形 2",[19,2749,2750],{},"int 整形 4",[19,2752,2753],{},"long 长整形 win4 linux32位4 linux64位8",[19,2755,2756],{},"long long 长长整形 8",[19,2758,2759],{},"利用sizeof可以求数据类型占用的内存空间大小",[73,2761,2765],{"className":2762,"code":2763,"language":2764,"meta":78,"style":78},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[32,2766,2767,2779],{"__ignoreMap":78},[82,2768,2769,2772,2774,2777],{"class":84,"line":85},[82,2770,2771],{"class":112},"sizeof",[82,2773,93],{"class":92},[82,2775,2776],{"class":112},"int",[82,2778,119],{"class":92},[82,2780,2781,2783],{"class":84,"line":157},[82,2782,2771],{"class":112},[82,2784,2785],{"class":92},"(num)\n",[65,2787,2789],{"id":2788},"_132浮点型","1.3.2浮点型",[19,2791,2792],{},"float 单精度 4节 7位有效数字",[19,2794,2795],{},"double 双精度 8节 15-16有效数字",[19,2797,2798],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2800,2801],{},"注意点：",[73,2803,2805],{"className":2762,"code":2804,"language":2764,"meta":78,"style":78},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[32,2806,2807,2830],{"__ignoreMap":78},[82,2808,2809,2812,2815,2817,2820,2823,2826],{"class":84,"line":85},[82,2810,2811],{"class":112},"float",[82,2813,2814],{"class":92}," f1",[82,2816,113],{"class":112},[82,2818,2819],{"class":88},"3.14",[82,2821,2822],{"class":112},"f",[82,2824,2825],{"class":92},";",[82,2827,2829],{"class":2828},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[82,2831,2832,2834,2837,2839,2842,2845,2847,2849],{"class":84,"line":157},[82,2833,2811],{"class":112},[82,2835,2836],{"class":92}," f2",[82,2838,113],{"class":112},[82,2840,2841],{"class":88},"3",[82,2843,2844],{"class":112},"e",[82,2846,1425],{"class":88},[82,2848,2825],{"class":92},[82,2850,2851],{"class":2828}," \u002F\u002F科学记数法\n",[65,2853,2855],{"id":2854},"_133字符型","1.3.3字符型",[73,2857,2859],{"className":2762,"code":2858,"language":2764,"meta":78,"style":78},"char ch='a'\n",[32,2860,2861],{"__ignoreMap":78},[82,2862,2863,2866,2869,2871],{"class":84,"line":85},[82,2864,2865],{"class":112},"char",[82,2867,2868],{"class":92}," ch",[82,2870,113],{"class":112},[82,2872,2873],{"class":96},"'a'\n",[19,2875,2801],{},[26,2877,2878,2881,2884,2887],{},[29,2879,2880],{},"在显示字符型变量时，只能单引号，双引号x",[29,2882,2883],{},"单引号内只能一个字符，不能字符串",[29,2885,2886],{},"c和c++字符型变量只占用一个字符",[29,2888,2889],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2891,2892],{},"ASCII码大致由以下两部分组成：",[26,2894,2895,2898],{},[29,2896,2897],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2899,2900],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2902,2903],{},"ASCII码表格：",[278,2905,2906,2947],{},[281,2907,2908],{},[284,2909,2910,2917,2922,2926,2931,2935,2939,2943],{},[287,2911,2912,2916],{},[2913,2914,2915],"strong",{},"ASCII","值",[287,2918,2919],{},[2913,2920,2921],{},"控制字符",[287,2923,2924,2916],{},[2913,2925,2915],{},[287,2927,2928],{},[2913,2929,2930],{},"字符",[287,2932,2933,2916],{},[2913,2934,2915],{},[287,2936,2937],{},[2913,2938,2930],{},[287,2940,2941,2916],{},[2913,2942,2915],{},[287,2944,2945],{},[2913,2946,2930],{},[294,2948,2949,2974,2998,3022,3047,3073,3098,3123,3149,3174,3200,3225,3250,3275,3301,3326,3351,3375,3399,3422,3447,3472,3497,3522,3546,3570,3595,3621,3646,3671,3696,3722],{},[284,2950,2951,2953,2956,2959,2962,2965,2968,2971],{},[299,2952,2244],{},[299,2954,2955],{},"NUT",[299,2957,2958],{},"32",[299,2960,2961],{},"(space)",[299,2963,2964],{},"64",[299,2966,2967],{},"@",[299,2969,2970],{},"96",[299,2972,2973],{},"、",[284,2975,2976,2978,2981,2984,2987,2990,2993,2996],{},[299,2977,2283],{},[299,2979,2980],{},"SOH",[299,2982,2983],{},"33",[299,2985,2986],{},"!",[299,2988,2989],{},"65",[299,2991,2992],{},"A",[299,2994,2995],{},"97",[299,2997,323],{},[284,2999,3000,3002,3005,3008,3010,3013,3016,3019],{},[299,3001,1425],{},[299,3003,3004],{},"STX",[299,3006,3007],{},"34",[299,3009,216],{},[299,3011,3012],{},"66",[299,3014,3015],{},"B",[299,3017,3018],{},"98",[299,3020,3021],{},"b",[284,3023,3024,3026,3029,3032,3035,3038,3041,3044],{},[299,3025,2841],{},[299,3027,3028],{},"ETX",[299,3030,3031],{},"35",[299,3033,3034],{},"#",[299,3036,3037],{},"67",[299,3039,3040],{},"C",[299,3042,3043],{},"99",[299,3045,3046],{},"c",[284,3048,3049,3052,3055,3058,3061,3064,3067,3070],{},[299,3050,3051],{},"4",[299,3053,3054],{},"EOT",[299,3056,3057],{},"36",[299,3059,3060],{},"$",[299,3062,3063],{},"68",[299,3065,3066],{},"D",[299,3068,3069],{},"100",[299,3071,3072],{},"d",[284,3074,3075,3078,3081,3084,3087,3090,3093,3096],{},[299,3076,3077],{},"5",[299,3079,3080],{},"ENQ",[299,3082,3083],{},"37",[299,3085,3086],{},"%",[299,3088,3089],{},"69",[299,3091,3092],{},"E",[299,3094,3095],{},"101",[299,3097,2844],{},[284,3099,3100,3103,3106,3109,3112,3115,3118,3121],{},[299,3101,3102],{},"6",[299,3104,3105],{},"ACK",[299,3107,3108],{},"38",[299,3110,3111],{},"&",[299,3113,3114],{},"70",[299,3116,3117],{},"F",[299,3119,3120],{},"102",[299,3122,2822],{},[284,3124,3125,3128,3131,3134,3137,3140,3143,3146],{},[299,3126,3127],{},"7",[299,3129,3130],{},"BEL",[299,3132,3133],{},"39",[299,3135,3136],{},",",[299,3138,3139],{},"71",[299,3141,3142],{},"G",[299,3144,3145],{},"103",[299,3147,3148],{},"g",[284,3150,3151,3154,3157,3160,3162,3165,3168,3171],{},[299,3152,3153],{},"8",[299,3155,3156],{},"BS",[299,3158,3159],{},"40",[299,3161,93],{},[299,3163,3164],{},"72",[299,3166,3167],{},"H",[299,3169,3170],{},"104",[299,3172,3173],{},"h",[284,3175,3176,3179,3182,3185,3188,3191,3194,3197],{},[299,3177,3178],{},"9",[299,3180,3181],{},"HT",[299,3183,3184],{},"41",[299,3186,3187],{},")",[299,3189,3190],{},"73",[299,3192,3193],{},"I",[299,3195,3196],{},"105",[299,3198,3199],{},"i",[284,3201,3202,3204,3207,3210,3213,3216,3219,3222],{},[299,3203,440],{},[299,3205,3206],{},"LF",[299,3208,3209],{},"42",[299,3211,3212],{},"*",[299,3214,3215],{},"74",[299,3217,3218],{},"J",[299,3220,3221],{},"106",[299,3223,3224],{},"j",[284,3226,3227,3230,3233,3236,3238,3241,3244,3247],{},[299,3228,3229],{},"11",[299,3231,3232],{},"VT",[299,3234,3235],{},"43",[299,3237,2249],{},[299,3239,3240],{},"75",[299,3242,3243],{},"K",[299,3245,3246],{},"107",[299,3248,3249],{},"k",[284,3251,3252,3255,3258,3261,3263,3266,3269,3272],{},[299,3253,3254],{},"12",[299,3256,3257],{},"FF",[299,3259,3260],{},"44",[299,3262,3136],{},[299,3264,3265],{},"76",[299,3267,3268],{},"L",[299,3270,3271],{},"108",[299,3273,3274],{},"l",[284,3276,3277,3280,3283,3286,3289,3292,3295,3298],{},[299,3278,3279],{},"13",[299,3281,3282],{},"CR",[299,3284,3285],{},"45",[299,3287,3288],{},"-",[299,3290,3291],{},"77",[299,3293,3294],{},"M",[299,3296,3297],{},"109",[299,3299,3300],{},"m",[284,3302,3303,3306,3309,3312,3314,3317,3320,3323],{},[299,3304,3305],{},"14",[299,3307,3308],{},"SO",[299,3310,3311],{},"46",[299,3313,233],{},[299,3315,3316],{},"78",[299,3318,3319],{},"N",[299,3321,3322],{},"110",[299,3324,3325],{},"n",[284,3327,3328,3331,3334,3337,3339,3342,3345,3348],{},[299,3329,3330],{},"15",[299,3332,3333],{},"SI",[299,3335,3336],{},"47",[299,3338,1147],{},[299,3340,3341],{},"79",[299,3343,3344],{},"O",[299,3346,3347],{},"111",[299,3349,3350],{},"o",[284,3352,3353,3356,3359,3362,3364,3367,3370,3373],{},[299,3354,3355],{},"16",[299,3357,3358],{},"DLE",[299,3360,3361],{},"48",[299,3363,2244],{},[299,3365,3366],{},"80",[299,3368,3369],{},"P",[299,3371,3372],{},"112",[299,3374,19],{},[284,3376,3377,3379,3382,3385,3387,3390,3393,3396],{},[299,3378,1517],{},[299,3380,3381],{},"DCI",[299,3383,3384],{},"49",[299,3386,2283],{},[299,3388,3389],{},"81",[299,3391,3392],{},"Q",[299,3394,3395],{},"113",[299,3397,3398],{},"q",[284,3400,3401,3403,3406,3409,3411,3414,3417,3420],{},[299,3402,1373],{},[299,3404,3405],{},"DC2",[299,3407,3408],{},"50",[299,3410,1425],{},[299,3412,3413],{},"82",[299,3415,3416],{},"R",[299,3418,3419],{},"114",[299,3421,303],{},[284,3423,3424,3427,3430,3433,3435,3438,3441,3444],{},[299,3425,3426],{},"19",[299,3428,3429],{},"DC3",[299,3431,3432],{},"51",[299,3434,2841],{},[299,3436,3437],{},"83",[299,3439,3440],{},"S",[299,3442,3443],{},"115",[299,3445,3446],{},"s",[284,3448,3449,3452,3455,3458,3460,3463,3466,3469],{},[299,3450,3451],{},"20",[299,3453,3454],{},"DC4",[299,3456,3457],{},"52",[299,3459,3051],{},[299,3461,3462],{},"84",[299,3464,3465],{},"T",[299,3467,3468],{},"116",[299,3470,3471],{},"t",[284,3473,3474,3477,3480,3483,3485,3488,3491,3494],{},[299,3475,3476],{},"21",[299,3478,3479],{},"NAK",[299,3481,3482],{},"53",[299,3484,3077],{},[299,3486,3487],{},"85",[299,3489,3490],{},"U",[299,3492,3493],{},"117",[299,3495,3496],{},"u",[284,3498,3499,3502,3505,3508,3510,3513,3516,3519],{},[299,3500,3501],{},"22",[299,3503,3504],{},"SYN",[299,3506,3507],{},"54",[299,3509,3102],{},[299,3511,3512],{},"86",[299,3514,3515],{},"V",[299,3517,3518],{},"118",[299,3520,3521],{},"v",[284,3523,3524,3527,3530,3533,3535,3538,3541,3544],{},[299,3525,3526],{},"23",[299,3528,3529],{},"TB",[299,3531,3532],{},"55",[299,3534,3127],{},[299,3536,3537],{},"87",[299,3539,3540],{},"W",[299,3542,3543],{},"119",[299,3545,313],{},[284,3547,3548,3551,3554,3557,3559,3561,3564,3567],{},[299,3549,3550],{},"24",[299,3552,3553],{},"CAN",[299,3555,3556],{},"56",[299,3558,3153],{},[299,3560,1526],{},[299,3562,3563],{},"X",[299,3565,3566],{},"120",[299,3568,3569],{},"x",[284,3571,3572,3575,3578,3581,3583,3586,3589,3592],{},[299,3573,3574],{},"25",[299,3576,3577],{},"EM",[299,3579,3580],{},"57",[299,3582,3178],{},[299,3584,3585],{},"89",[299,3587,3588],{},"Y",[299,3590,3591],{},"121",[299,3593,3594],{},"y",[284,3596,3597,3600,3603,3606,3609,3612,3615,3618],{},[299,3598,3599],{},"26",[299,3601,3602],{},"SUB",[299,3604,3605],{},"58",[299,3607,3608],{},":",[299,3610,3611],{},"90",[299,3613,3614],{},"Z",[299,3616,3617],{},"122",[299,3619,3620],{},"z",[284,3622,3623,3626,3629,3632,3634,3637,3640,3643],{},[299,3624,3625],{},"27",[299,3627,3628],{},"ESC",[299,3630,3631],{},"59",[299,3633,2825],{},[299,3635,3636],{},"91",[299,3638,3639],{},"[",[299,3641,3642],{},"123",[299,3644,3645],{},"{",[284,3647,3648,3651,3654,3657,3660,3663,3665,3668],{},[299,3649,3650],{},"28",[299,3652,3653],{},"FS",[299,3655,3656],{},"60",[299,3658,3659],{},"\u003C",[299,3661,3662],{},"92",[299,3664,1147],{},[299,3666,3667],{},"124",[299,3669,3670],{},"|",[284,3672,3673,3676,3679,3682,3684,3687,3690,3693],{},[299,3674,3675],{},"29",[299,3677,3678],{},"GS",[299,3680,3681],{},"61",[299,3683,113],{},[299,3685,3686],{},"93",[299,3688,3689],{},"]",[299,3691,3692],{},"125",[299,3694,3695],{},"}",[284,3697,3698,3701,3704,3707,3710,3713,3716,3719],{},[299,3699,3700],{},"30",[299,3702,3703],{},"RS",[299,3705,3706],{},"62",[299,3708,3709],{},">",[299,3711,3712],{},"94",[299,3714,3715],{},"^",[299,3717,3718],{},"126",[299,3720,3721],{},"`",[284,3723,3724,3727,3730,3733,3736,3738,3741,3744],{},[299,3725,3726],{},"31",[299,3728,3729],{},"US",[299,3731,3732],{},"63",[299,3734,3735],{},"?",[299,3737,1494],{},[299,3739,3740],{},"_",[299,3742,3743],{},"127",[299,3745,3746],{},"DEL",[19,3748,3749,3750,3753],{},"ASCII 码大致由以下",[2913,3751,3752],{},"两部分组","成：",[3755,3756,3757,3764],"ul",{},[29,3758,3759,3760,3763],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2913,3761,3762],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3765,3766,3767,3770],{},"ASCII 打印字符：数字 ",[2913,3768,3769],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[65,3772,3774],{"id":3773},"_134转义字符","1.3.4转义字符",[73,3776,3778],{"className":2762,"code":3777,"language":2764,"meta":78,"style":78},"\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",[32,3779,3780,3785,3801,3815,3820,3833,3838],{"__ignoreMap":78},[82,3781,3782],{"class":84,"line":85},[82,3783,3784],{"class":2828},"\u002F\u002F换行符\n",[82,3786,3787,3790,3793,3796,3798],{"class":84,"line":157},[82,3788,3789],{"class":92},"cout ",[82,3791,3792],{"class":112},"\u003C\u003C",[82,3794,3795],{"class":96},"\"hello world\u002Fn\"",[82,3797,2825],{"class":92},[82,3799,3800],{"class":2828}," \u002F\u002F就等同于如下：\n",[82,3802,3803,3805,3807,3810,3812],{"class":84,"line":404},[82,3804,3789],{"class":92},[82,3806,3792],{"class":112},[82,3808,3809],{"class":96},"\"hello world\"",[82,3811,3792],{"class":112},[82,3813,3814],{"class":92},"endl;\n",[82,3816,3817],{"class":84,"line":413},[82,3818,3819],{"class":2828},"\u002F\u002F反斜杠\n",[82,3821,3822,3824,3826,3829,3831],{"class":84,"line":508},[82,3823,3789],{"class":92},[82,3825,3792],{"class":112},[82,3827,3828],{"class":96},"\"\u002F\u002F\"",[82,3830,3792],{"class":112},[82,3832,3814],{"class":92},[82,3834,3835],{"class":84,"line":513},[82,3836,3837],{"class":2828},"\u002F\u002F水平制表符\n",[82,3839,3840,3842,3844,3847,3850,3853,3855,3858],{"class":84,"line":1388},[82,3841,3789],{"class":92},[82,3843,3792],{"class":112},[82,3845,3846],{"class":96},"\"aaaa",[82,3848,3849],{"class":88},"\\t",[82,3851,3852],{"class":96},"helloworld\"",[82,3854,3792],{"class":112},[82,3856,3857],{"class":92},"endl;",[82,3859,3860],{"class":2828}," \u002F\u002F输出窗口时有对齐效果\n",[65,3862,3864],{"id":3863},"_135字符串型","1.3.5字符串型",[19,3866,3867,3868,3870],{},"char 变量名",[82,3869],{},"=\"字符串值\"",[73,3872,3874],{"className":2762,"code":3873,"language":2764,"meta":78,"style":78},"\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",[32,3875,3876,3881,3886,3891,3896,3910,3923,3928,3933,3944],{"__ignoreMap":78},[82,3877,3878],{"class":84,"line":85},[82,3879,3880],{"class":2828},"\u002F\u002Fc风格字符串\n",[82,3882,3883],{"class":84,"line":157},[82,3884,3885],{"class":2828},"\u002F\u002F注意事项：\n",[82,3887,3888],{"class":84,"line":404},[82,3889,3890],{"class":2828},"\u002F\u002F1.char字符串名[]\n",[82,3892,3893],{"class":84,"line":413},[82,3894,3895],{"class":2828},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[82,3897,3898,3900,3903,3905,3907],{"class":84,"line":508},[82,3899,2865],{"class":112},[82,3901,3902],{"class":92}," str[]",[82,3904,113],{"class":112},[82,3906,3809],{"class":96},[82,3908,3909],{"class":92},";\n",[82,3911,3912,3914,3916,3919,3921],{"class":84,"line":513},[82,3913,3789],{"class":92},[82,3915,3792],{"class":112},[82,3917,3918],{"class":92},"str",[82,3920,3792],{"class":112},[82,3922,3814],{"class":92},[82,3924,3925],{"class":84,"line":1388},[82,3926,3927],{"class":2828},"\u002F\u002Fc++风格字符串\n",[82,3929,3930],{"class":84,"line":1394},[82,3931,3932],{"class":2828},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[82,3934,3935,3938,3940,3942],{"class":84,"line":1399},[82,3936,3937],{"class":92},"string str2",[82,3939,113],{"class":112},[82,3941,3809],{"class":96},[82,3943,3909],{"class":92},[82,3945,3946,3948,3950,3953,3955],{"class":84,"line":1430},[82,3947,3789],{"class":92},[82,3949,3792],{"class":112},[82,3951,3952],{"class":92},"str2",[82,3954,3792],{"class":112},[82,3956,3814],{"class":92},[65,3958,3960],{"id":3959},"_136布尔类型bool","1.3.6布尔类型bool",[73,3962,3964],{"className":2762,"code":3963,"language":2764,"meta":78,"style":78},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[32,3965,3966,3981],{"__ignoreMap":78},[82,3967,3968,3971,3974,3976,3979],{"class":84,"line":85},[82,3969,3970],{"class":112},"bool",[82,3972,3973],{"class":92}," flag",[82,3975,113],{"class":112},[82,3977,3978],{"class":88},"true",[82,3980,3909],{"class":92},[82,3982,3983,3986,3989,3992,3994,3996],{"class":84,"line":157},[82,3984,3985],{"class":92},"cout",[82,3987,3988],{"class":112},"\u003C\u003Csizeof",[82,3990,3991],{"class":92},"(flag)",[82,3993,3792],{"class":112},[82,3995,3857],{"class":92},[82,3997,3998],{"class":2828}," \u002F\u002F查看布尔占内存空间\n",[14,4000,4002],{"id":4001},"_14键盘输入cin","1.4键盘输入cin",[73,4004,4006],{"className":2762,"code":4005,"language":2764,"meta":78,"style":78},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[32,4007,4008,4021,4038,4049],{"__ignoreMap":78},[82,4009,4010,4012,4015,4017,4019],{"class":84,"line":85},[82,4011,2776],{"class":112},[82,4013,4014],{"class":92}," a",[82,4016,113],{"class":112},[82,4018,2244],{"class":88},[82,4020,3909],{"class":92},[82,4022,4023,4025,4027,4030,4032,4034,4036],{"class":84,"line":157},[82,4024,3985],{"class":92},[82,4026,3792],{"class":112},[82,4028,4029],{"class":96},"\"请给整型变量a赋值\"",[82,4031,3792],{"class":112},[82,4033,323],{"class":92},[82,4035,3792],{"class":112},[82,4037,3814],{"class":92},[82,4039,4040,4043,4046],{"class":84,"line":404},[82,4041,4042],{"class":92},"cin ",[82,4044,4045],{"class":112},">>",[82,4047,4048],{"class":92}," a;\n",[82,4050,4051,4053,4055,4058,4061,4063,4065],{"class":84,"line":413},[82,4052,3789],{"class":92},[82,4054,3792],{"class":112},[82,4056,4057],{"class":96}," \"整型变量a=\"",[82,4059,4060],{"class":112}," \u003C\u003C",[82,4062,323],{"class":92},[82,4064,3792],{"class":112},[82,4066,3814],{"class":92},[14,4068,4070],{"id":4069},"_15运算符","1.5运算符",[65,4072,4074],{"id":4073},"_151算术运算符","1.5.1算术运算符",[19,4076,4077,4081],{},[4078,4079],"img",{"alt":78,"src":4080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,4083,4084,4087,4090],{},[29,4085,4086],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,4088,4089],{},"两个小数不可以做取模运算",[29,4091,4092],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[65,4094,4096],{"id":4095},"_152赋值运算符","1.5.2赋值运算符",[19,4098,4099],{},[4078,4100],{"alt":78,"src":4101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[65,4103,4105],{"id":4104},"_153比较运算符","1.5.3比较运算符",[19,4107,4108],{},[4078,4109],{"alt":78,"src":4110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[65,4112,4114],{"id":4113},"_154逻辑运算符","1.5.4逻辑运算符",[19,4116,4117],{},[4078,4118],{"alt":78,"src":4119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4121,4123],{"id":4122},"_16程序流程结构","1.6程序流程结构",[65,4125,4127],{"id":4126},"_161选择结构","1.6.1选择结构",[26,4129,4130],{},[29,4131,4132],{},"if语句\n单行、多行、多条件if语句",[73,4134,4136],{"className":2762,"code":4135,"language":2764,"meta":78,"style":78},"\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",[32,4137,4138,4143,4157,4162,4176,4180,4185,4194,4207,4211,4224,4228,4233,4237,4250,4254,4259,4279,4283,4296,4300,4328,4332,4348,4353,4358,4363,4377,4382],{"__ignoreMap":78},[82,4139,4140],{"class":84,"line":85},[82,4141,4142],{"class":2828},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[82,4144,4145,4147,4150,4152,4155],{"class":84,"line":157},[82,4146,1237],{"class":112},[82,4148,4149],{"class":92},"(score",[82,4151,3709],{"class":112},[82,4153,4154],{"class":88},"600",[82,4156,119],{"class":92},[82,4158,4159],{"class":84,"line":404},[82,4160,4161],{"class":92},"{\n",[82,4163,4164,4167,4169,4172,4174],{"class":84,"line":413},[82,4165,4166],{"class":92},"    cout",[82,4168,3792],{"class":112},[82,4170,4171],{"class":96},"'这是单行if语句'",[82,4173,3792],{"class":112},[82,4175,3814],{"class":92},[82,4177,4178],{"class":84,"line":508},[82,4179,1391],{"class":92},[82,4181,4182],{"class":84,"line":513},[82,4183,4184],{"class":2828},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[82,4186,4187,4189,4191],{"class":84,"line":1388},[82,4188,4042],{"class":92},[82,4190,4045],{"class":112},[82,4192,4193],{"class":92}," score\n",[82,4195,4196,4198,4200,4203,4205],{"class":84,"line":1394},[82,4197,1237],{"class":112},[82,4199,4149],{"class":92},[82,4201,4202],{"class":112},"\u003C=",[82,4204,4154],{"class":88},[82,4206,119],{"class":92},[82,4208,4209],{"class":84,"line":1399},[82,4210,4161],{"class":92},[82,4212,4213,4215,4217,4220,4222],{"class":84,"line":1430},[82,4214,4166],{"class":92},[82,4216,4045],{"class":112},[82,4218,4219],{"class":96},"\"小于等于600\"",[82,4221,3792],{"class":112},[82,4223,3814],{"class":92},[82,4225,4226],{"class":84,"line":1818},[82,4227,1391],{"class":92},[82,4229,4230],{"class":84,"line":2082},[82,4231,4232],{"class":112},"else\n",[82,4234,4235],{"class":84,"line":2233},[82,4236,4161],{"class":92},[82,4238,4239,4241,4243,4246,4248],{"class":84,"line":2255},[82,4240,4166],{"class":92},[82,4242,4045],{"class":112},[82,4244,4245],{"class":96},"\"大于600\"",[82,4247,4045],{"class":112},[82,4249,3814],{"class":92},[82,4251,4252],{"class":84,"line":2260},[82,4253,1391],{"class":92},[82,4255,4256],{"class":84,"line":2298},[82,4257,4258],{"class":2828},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[82,4260,4261,4263,4266,4268,4270,4273,4275,4277],{"class":84,"line":2303},[82,4262,1237],{"class":112},[82,4264,4265],{"class":92}," (",[82,4267,2244],{"class":88},[82,4269,3659],{"class":112},[82,4271,4272],{"class":92},"num",[82,4274,3659],{"class":112},[82,4276,3069],{"class":88},[82,4278,119],{"class":92},[82,4280,4281],{"class":84,"line":2321},[82,4282,4161],{"class":92},[82,4284,4285,4287,4289,4292,4294],{"class":84,"line":2533},[82,4286,4166],{"class":92},[82,4288,3792],{"class":112},[82,4290,4291],{"class":96},"\"小于100\"",[82,4293,3792],{"class":112},[82,4295,3814],{"class":92},[82,4297,4298],{"class":84,"line":2538},[82,4299,1391],{"class":92},[82,4301,4302,4305,4308,4311,4314,4316,4319,4321,4323,4326],{"class":84,"line":2548},[82,4303,4304],{"class":112},"else",[82,4306,4307],{"class":112}," if",[82,4309,4310],{"class":92}," (nmu",[82,4312,4313],{"class":112},">=",[82,4315,3069],{"class":88},[82,4317,4318],{"class":112},"&&",[82,4320,4272],{"class":92},[82,4322,3659],{"class":112},[82,4324,4325],{"class":88},"200",[82,4327,119],{"class":92},[82,4329,4330],{"class":84,"line":2579},[82,4331,4161],{"class":92},[82,4333,4334,4336,4338,4341,4343,4345],{"class":84,"line":2585},[82,4335,4166],{"class":92},[82,4337,3792],{"class":112},[82,4339,4340],{"class":96},"\"不小于100且小于200\"",[82,4342,3792],{"class":112},[82,4344,3857],{"class":92},[82,4346,4347],{"class":2828}," \u002F\u002F可以无限else if,python中是elif：\n",[82,4349,4351],{"class":84,"line":4350},24,[82,4352,1391],{"class":92},[82,4354,4356],{"class":84,"line":4355},25,[82,4357,4232],{"class":112},[82,4359,4361],{"class":84,"line":4360},26,[82,4362,4161],{"class":92},[82,4364,4366,4368,4370,4373,4375],{"class":84,"line":4365},27,[82,4367,4166],{"class":92},[82,4369,3792],{"class":112},[82,4371,4372],{"class":96},"\"不小于200\"",[82,4374,3792],{"class":112},[82,4376,3814],{"class":92},[82,4378,4380],{"class":84,"line":4379},28,[82,4381,1391],{"class":92},[82,4383,4385],{"class":84,"line":4384},29,[82,4386,4387],{"class":2828},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,4389,4390],{"start":157},[29,4391,4392],{},"三目运算符",[73,4394,4396],{"className":2762,"code":4395,"language":2764,"meta":78,"style":78},"\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",[32,4397,4398,4403,4408,4434,4456,4473,4478,4501,4516],{"__ignoreMap":78},[82,4399,4400],{"class":84,"line":85},[82,4401,4402],{"class":2828},"\u002F\u002F创建三个变量a,b,c\n",[82,4404,4405],{"class":84,"line":157},[82,4406,4407],{"class":2828},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[82,4409,4410,4412,4414,4416,4418,4421,4423,4425,4428,4430,4432],{"class":84,"line":404},[82,4411,2776],{"class":112},[82,4413,4014],{"class":92},[82,4415,113],{"class":112},[82,4417,3451],{"class":88},[82,4419,4420],{"class":92},",b",[82,4422,113],{"class":112},[82,4424,440],{"class":88},[82,4426,4427],{"class":92},",c",[82,4429,113],{"class":112},[82,4431,2244],{"class":88},[82,4433,3909],{"class":92},[82,4435,4436,4438,4440,4443,4445,4447,4449,4451,4453],{"class":84,"line":413},[82,4437,3046],{"class":92},[82,4439,113],{"class":112},[82,4441,4442],{"class":92},"(a",[82,4444,3709],{"class":112},[82,4446,3021],{"class":92},[82,4448,3735],{"class":112},[82,4450,323],{"class":92},[82,4452,3608],{"class":112},[82,4454,4455],{"class":92},"b)\n",[82,4457,4458,4460,4462,4465,4467,4469,4471],{"class":84,"line":508},[82,4459,3985],{"class":92},[82,4461,3792],{"class":112},[82,4463,4464],{"class":96},"\"c=\"",[82,4466,3792],{"class":112},[82,4468,3046],{"class":92},[82,4470,3792],{"class":112},[82,4472,3814],{"class":92},[82,4474,4475],{"class":84,"line":513},[82,4476,4477],{"class":2828},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[82,4479,4480,4482,4484,4486,4488,4490,4492,4495,4497,4499],{"class":84,"line":1388},[82,4481,4442],{"class":92},[82,4483,3709],{"class":112},[82,4485,3021],{"class":92},[82,4487,3735],{"class":112},[82,4489,323],{"class":92},[82,4491,3608],{"class":112},[82,4493,4494],{"class":92},"b)",[82,4496,113],{"class":112},[82,4498,3069],{"class":88},[82,4500,3909],{"class":92},[82,4502,4503,4505,4507,4509,4511,4513],{"class":84,"line":1394},[82,4504,3985],{"class":92},[82,4506,3792],{"class":112},[82,4508,323],{"class":92},[82,4510,3792],{"class":112},[82,4512,3857],{"class":92},[82,4514,4515],{"class":2828}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[82,4517,4518,4520,4522,4524,4526,4528],{"class":84,"line":1399},[82,4519,3985],{"class":92},[82,4521,3792],{"class":112},[82,4523,3021],{"class":92},[82,4525,3792],{"class":112},[82,4527,3857],{"class":92},[82,4529,4530],{"class":2828}," \u002F\u002F10   a>b,b还是原值\n",[26,4532,4533],{"start":404},[29,4534,4535],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[73,4537,4539],{"className":2762,"code":4538,"language":2764,"meta":78,"style":78},"\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",[32,4540,4541,4546,4554,4567,4577,4581,4595,4608,4618,4626,4631,4656,4677,4699,4720,4742,4763,4783,4788],{"__ignoreMap":78},[82,4542,4543],{"class":84,"line":85},[82,4544,4545],{"class":2828},"\u002F\u002F案例-电影打分\n",[82,4547,4548,4551],{"class":84,"line":157},[82,4549,4550],{"class":112},"#include",[82,4552,4553],{"class":96},"\u003Ciostream>\n",[82,4555,4556,4559,4562,4565],{"class":84,"line":404},[82,4557,4558],{"class":112},"using",[82,4560,4561],{"class":112}," namespace",[82,4563,4564],{"class":2384}," std",[82,4566,3909],{"class":92},[82,4568,4569,4571,4574],{"class":84,"line":413},[82,4570,2776],{"class":112},[82,4572,4573],{"class":2384}," main",[82,4575,4576],{"class":92},"()\n",[82,4578,4579],{"class":84,"line":508},[82,4580,4161],{"class":92},[82,4582,4583,4586,4589,4591,4593],{"class":84,"line":513},[82,4584,4585],{"class":112},"    int",[82,4587,4588],{"class":92}," score",[82,4590,113],{"class":112},[82,4592,2244],{"class":88},[82,4594,3909],{"class":92},[82,4596,4597,4599,4601,4604,4606],{"class":84,"line":1388},[82,4598,4166],{"class":92},[82,4600,3792],{"class":112},[82,4602,4603],{"class":96},"\"电影打分：\"",[82,4605,3792],{"class":112},[82,4607,3814],{"class":92},[82,4609,4610,4613,4615],{"class":84,"line":1394},[82,4611,4612],{"class":92},"    cin",[82,4614,4045],{"class":112},[82,4616,4617],{"class":92},"score;\n",[82,4619,4620,4623],{"class":84,"line":1399},[82,4621,4622],{"class":112},"    switch",[82,4624,4625],{"class":92},"(score)\n",[82,4627,4628],{"class":84,"line":1430},[82,4629,4630],{"class":92},"    {\n",[82,4632,4633,4636,4639,4642,4644,4647,4649,4651,4654],{"class":84,"line":1818},[82,4634,4635],{"class":112},"        case",[82,4637,4638],{"class":88}," 10",[82,4640,4641],{"class":92},":cout",[82,4643,3792],{"class":112},[82,4645,4646],{"class":96},"\"经典\"",[82,4648,3792],{"class":112},[82,4650,3857],{"class":92},[82,4652,4653],{"class":112},"break",[82,4655,3909],{"class":92},[82,4657,4658,4660,4663,4665,4667,4669,4671,4673,4675],{"class":84,"line":2082},[82,4659,4635],{"class":112},[82,4661,4662],{"class":88}," 9",[82,4664,4641],{"class":92},[82,4666,3792],{"class":112},[82,4668,4646],{"class":96},[82,4670,3792],{"class":112},[82,4672,3857],{"class":92},[82,4674,4653],{"class":112},[82,4676,3909],{"class":92},[82,4678,4679,4681,4684,4686,4688,4691,4693,4695,4697],{"class":84,"line":2233},[82,4680,4635],{"class":112},[82,4682,4683],{"class":88}," 8",[82,4685,4641],{"class":92},[82,4687,3792],{"class":112},[82,4689,4690],{"class":96},"\"非常好\"",[82,4692,3792],{"class":112},[82,4694,3857],{"class":92},[82,4696,4653],{"class":112},[82,4698,3909],{"class":92},[82,4700,4701,4703,4706,4708,4710,4712,4714,4716,4718],{"class":84,"line":2255},[82,4702,4635],{"class":112},[82,4704,4705],{"class":88}," 7",[82,4707,4641],{"class":92},[82,4709,3792],{"class":112},[82,4711,4690],{"class":96},[82,4713,3792],{"class":112},[82,4715,3857],{"class":92},[82,4717,4653],{"class":112},[82,4719,3909],{"class":92},[82,4721,4722,4724,4727,4729,4731,4734,4736,4738,4740],{"class":84,"line":2260},[82,4723,4635],{"class":112},[82,4725,4726],{"class":88}," 6",[82,4728,4641],{"class":92},[82,4730,3792],{"class":112},[82,4732,4733],{"class":96},"\"一般\"",[82,4735,3792],{"class":112},[82,4737,3857],{"class":92},[82,4739,4653],{"class":112},[82,4741,3909],{"class":92},[82,4743,4744,4746,4749,4751,4753,4755,4757,4759,4761],{"class":84,"line":2298},[82,4745,4635],{"class":112},[82,4747,4748],{"class":88}," 5",[82,4750,4641],{"class":92},[82,4752,3792],{"class":112},[82,4754,4733],{"class":96},[82,4756,3792],{"class":112},[82,4758,3857],{"class":92},[82,4760,4653],{"class":112},[82,4762,3909],{"class":92},[82,4764,4765,4768,4770,4772,4775,4777,4779,4781],{"class":84,"line":2303},[82,4766,4767],{"class":112},"        default",[82,4769,4641],{"class":92},[82,4771,3792],{"class":112},[82,4773,4774],{"class":96},"\"烂片\"",[82,4776,3792],{"class":112},[82,4778,3857],{"class":92},[82,4780,4653],{"class":112},[82,4782,3909],{"class":92},[82,4784,4785],{"class":84,"line":2321},[82,4786,4787],{"class":92},"    }\n",[82,4789,4790],{"class":84,"line":2533},[82,4791,1391],{"class":92},[19,4793,4794],{},"if和switch区别：",[3755,4796,4797,4800],{},[29,4798,4799],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4801,4802],{},"switch优点：结构清晰，执行效率高",[65,4804,4806],{"id":4805},"_162循环结构","1.6.2循环结构",[26,4808,4809],{},[29,4810,4811],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[73,4813,4815],{"className":2762,"code":4814,"language":2764,"meta":78,"style":78},"\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",[32,4816,4817,4822,4830,4834,4847,4861,4865,4885,4895,4899,4911],{"__ignoreMap":78},[82,4818,4819],{"class":84,"line":85},[82,4820,4821],{"class":2828},"\u002F\u002F打印0-9数字\n",[82,4823,4824,4826,4828],{"class":84,"line":157},[82,4825,2776],{"class":112},[82,4827,4573],{"class":2384},[82,4829,4576],{"class":92},[82,4831,4832],{"class":84,"line":404},[82,4833,4161],{"class":92},[82,4835,4836,4838,4841,4843,4845],{"class":84,"line":413},[82,4837,4585],{"class":112},[82,4839,4840],{"class":92}," num",[82,4842,113],{"class":112},[82,4844,2244],{"class":88},[82,4846,3909],{"class":92},[82,4848,4849,4852,4855,4857,4859],{"class":84,"line":508},[82,4850,4851],{"class":112},"    while",[82,4853,4854],{"class":92},"(num",[82,4856,3659],{"class":112},[82,4858,440],{"class":88},[82,4860,119],{"class":92},[82,4862,4863],{"class":84,"line":513},[82,4864,4630],{"class":92},[82,4866,4867,4870,4873,4875,4877,4879,4882],{"class":84,"line":1388},[82,4868,4869],{"class":2384},"       std",[82,4871,4872],{"class":92},"::cout",[82,4874,3792],{"class":112},[82,4876,4272],{"class":92},[82,4878,3792],{"class":112},[82,4880,4881],{"class":2384},"std",[82,4883,4884],{"class":92},"::endl;\n",[82,4886,4887,4890,4893],{"class":84,"line":1394},[82,4888,4889],{"class":92},"        num",[82,4891,4892],{"class":112},"++",[82,4894,3909],{"class":92},[82,4896,4897],{"class":84,"line":1399},[82,4898,4787],{"class":92},[82,4900,4901,4904,4906,4909],{"class":84,"line":1430},[82,4902,4903],{"class":2384},"    system",[82,4905,93],{"class":92},[82,4907,4908],{"class":96},"\"pause\"",[82,4910,119],{"class":92},[82,4912,4913],{"class":84,"line":1818},[82,4914,1391],{"class":92},[19,4916,4917],{},"注意：写好循环条件，避免死循环情况",[73,4919,4921],{"className":2762,"code":4920,"language":2764,"meta":78,"style":78},"\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",[32,4922,4923,4928,4935,4942,4952,4960,4964,4969,4996,5000,5005,5013,5040,5045,5050,5063,5073,5077,5087,5092,5105,5110,5124,5129,5144,5148,5161,5165,5170,5174,5188,5196,5201,5207,5213,5218],{"__ignoreMap":78},[82,4924,4925],{"class":84,"line":85},[82,4926,4927],{"class":2828},"\u002F\u002F循环结构-猜数字\n",[82,4929,4930,4932],{"class":84,"line":157},[82,4931,4550],{"class":112},[82,4933,4934],{"class":96}," \u003Ciostream>\n",[82,4936,4937,4939],{"class":84,"line":404},[82,4938,4550],{"class":112},[82,4940,4941],{"class":96}," \u003Cctime>\n",[82,4943,4944,4946,4948,4950],{"class":84,"line":413},[82,4945,4558],{"class":112},[82,4947,4561],{"class":112},[82,4949,4564],{"class":2384},[82,4951,3909],{"class":92},[82,4953,4954,4956,4958],{"class":84,"line":508},[82,4955,2776],{"class":112},[82,4957,4573],{"class":2384},[82,4959,4576],{"class":92},[82,4961,4962],{"class":84,"line":513},[82,4963,4161],{"class":92},[82,4965,4966],{"class":84,"line":1388},[82,4967,4968],{"class":2828},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[82,4970,4971,4974,4977,4980,4983,4985,4988,4990,4993],{"class":84,"line":1394},[82,4972,4973],{"class":2384},"    srand",[82,4975,4976],{"class":92},"((",[82,4978,4979],{"class":112},"unsigned",[82,4981,4982],{"class":112}," int",[82,4984,3187],{"class":92},[82,4986,4987],{"class":2384},"time",[82,4989,93],{"class":92},[82,4991,4992],{"class":88},"NULL",[82,4994,4995],{"class":92},"));\n",[82,4997,4998],{"class":84,"line":1399},[82,4999,486],{"emptyLinePlaceholder":485},[82,5001,5002],{"class":84,"line":1430},[82,5003,5004],{"class":2828},"    \u002F\u002F1.系统生成随机数\n",[82,5006,5007,5010],{"class":84,"line":1818},[82,5008,5009],{"class":2828},"    \u002F\u002Frand()%100",[82,5011,5012],{"class":2828}," \u002F\u002F生成0-99的随机数\n",[82,5014,5015,5017,5019,5021,5024,5027,5029,5031,5033,5035,5037],{"class":84,"line":2082},[82,5016,4585],{"class":112},[82,5018,4840],{"class":92},[82,5020,113],{"class":112},[82,5022,5023],{"class":2384},"rand",[82,5025,5026],{"class":92},"()",[82,5028,3086],{"class":112},[82,5030,3069],{"class":88},[82,5032,2249],{"class":112},[82,5034,2283],{"class":88},[82,5036,2825],{"class":92},[82,5038,5039],{"class":2828}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[82,5041,5042],{"class":84,"line":2233},[82,5043,5044],{"class":2828},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[82,5046,5047],{"class":84,"line":2255},[82,5048,5049],{"class":2828},"    \u002F\u002F2.玩家猜测\n",[82,5051,5052,5054,5057,5059,5061],{"class":84,"line":2260},[82,5053,4585],{"class":112},[82,5055,5056],{"class":92}," val",[82,5058,113],{"class":112},[82,5060,2244],{"class":88},[82,5062,3909],{"class":92},[82,5064,5065,5067,5069,5071],{"class":84,"line":2298},[82,5066,4851],{"class":112},[82,5068,4265],{"class":92},[82,5070,2283],{"class":88},[82,5072,119],{"class":92},[82,5074,5075],{"class":84,"line":2303},[82,5076,4630],{"class":92},[82,5078,5079,5082,5084],{"class":84,"line":2321},[82,5080,5081],{"class":92},"        cin",[82,5083,4045],{"class":112},[82,5085,5086],{"class":92},"val;\n",[82,5088,5089],{"class":84,"line":2533},[82,5090,5091],{"class":2828},"        \u002F\u002F3.判断玩家猜测\n",[82,5093,5094,5097,5100,5102],{"class":84,"line":2538},[82,5095,5096],{"class":112},"        if",[82,5098,5099],{"class":92},"(val",[82,5101,3659],{"class":112},[82,5103,5104],{"class":92},"num) \n",[82,5106,5107],{"class":84,"line":2548},[82,5108,5109],{"class":92},"        {\n",[82,5111,5112,5115,5117,5120,5122],{"class":84,"line":2579},[82,5113,5114],{"class":92},"            cout",[82,5116,3792],{"class":112},[82,5118,5119],{"class":96},"\"猜小了！\"",[82,5121,3792],{"class":112},[82,5123,3814],{"class":92},[82,5125,5126],{"class":84,"line":2585},[82,5127,5128],{"class":92},"        }\n",[82,5130,5131,5134,5136,5139,5141],{"class":84,"line":4350},[82,5132,5133],{"class":112},"        else",[82,5135,4307],{"class":112},[82,5137,5138],{"class":92}," (val",[82,5140,3709],{"class":112},[82,5142,5143],{"class":92},"num)\n",[82,5145,5146],{"class":84,"line":4355},[82,5147,5109],{"class":92},[82,5149,5150,5152,5154,5157,5159],{"class":84,"line":4360},[82,5151,5114],{"class":92},[82,5153,3792],{"class":112},[82,5155,5156],{"class":96},"\"猜大了！\"",[82,5158,3792],{"class":112},[82,5160,3814],{"class":92},[82,5162,5163],{"class":84,"line":4365},[82,5164,5128],{"class":92},[82,5166,5167],{"class":84,"line":4379},[82,5168,5169],{"class":112},"        else\n",[82,5171,5172],{"class":84,"line":4384},[82,5173,5109],{"class":92},[82,5175,5177,5179,5181,5184,5186],{"class":84,"line":5176},30,[82,5178,5114],{"class":92},[82,5180,3792],{"class":112},[82,5182,5183],{"class":96},"\"猜对了！\"",[82,5185,3792],{"class":112},[82,5187,3814],{"class":92},[82,5189,5191,5194],{"class":84,"line":5190},31,[82,5192,5193],{"class":112},"            break",[82,5195,3909],{"class":92},[82,5197,5199],{"class":84,"line":5198},32,[82,5200,5128],{"class":92},[82,5202,5204],{"class":84,"line":5203},33,[82,5205,5206],{"class":2828},"        \u002F\u002F猜对 退出游戏\n",[82,5208,5210],{"class":84,"line":5209},34,[82,5211,5212],{"class":2828},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[82,5214,5216],{"class":84,"line":5215},35,[82,5217,4787],{"class":92},[82,5219,5221],{"class":84,"line":5220},36,[82,5222,1391],{"class":92},[26,5224,5225],{"start":157},[29,5226,5227,5228,5231],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2913,5229,5230],{},"do...while会先执行一次循环语句","，在判断循环语句",[73,5233,5235],{"className":2762,"code":5234,"language":2764,"meta":78,"style":78},"\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",[32,5236,5237,5242,5250,5254,5266,5274,5278,5295,5302,5306,5319,5329],{"__ignoreMap":78},[82,5238,5239],{"class":84,"line":85},[82,5240,5241],{"class":2828},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[82,5243,5244,5246,5248],{"class":84,"line":157},[82,5245,2776],{"class":112},[82,5247,4573],{"class":2384},[82,5249,4576],{"class":92},[82,5251,5252],{"class":84,"line":404},[82,5253,4161],{"class":92},[82,5255,5256,5258,5260,5262,5264],{"class":84,"line":413},[82,5257,4585],{"class":112},[82,5259,4840],{"class":92},[82,5261,113],{"class":112},[82,5263,2244],{"class":88},[82,5265,3909],{"class":92},[82,5267,5268,5271],{"class":84,"line":508},[82,5269,5270],{"class":112},"    do",[82,5272,5273],{"class":92}," \n",[82,5275,5276],{"class":84,"line":513},[82,5277,4630],{"class":92},[82,5279,5280,5283,5285,5287,5289,5291,5293],{"class":84,"line":1388},[82,5281,5282],{"class":2384},"        std",[82,5284,4872],{"class":92},[82,5286,3792],{"class":112},[82,5288,4272],{"class":92},[82,5290,3792],{"class":112},[82,5292,4881],{"class":2384},[82,5294,4884],{"class":92},[82,5296,5297,5299],{"class":84,"line":1394},[82,5298,4889],{"class":92},[82,5300,5301],{"class":112},"++\n",[82,5303,5304],{"class":84,"line":1399},[82,5305,4787],{"class":92},[82,5307,5308,5310,5312,5314,5316],{"class":84,"line":1430},[82,5309,4851],{"class":112},[82,5311,4854],{"class":92},[82,5313,3659],{"class":112},[82,5315,440],{"class":88},[82,5317,5318],{"class":92},");\n",[82,5320,5321,5323,5325,5327],{"class":84,"line":1818},[82,5322,4903],{"class":2384},[82,5324,93],{"class":92},[82,5326,4908],{"class":96},[82,5328,5318],{"class":92},[82,5330,5331],{"class":84,"line":2082},[82,5332,1391],{"class":92},[19,5334,5335],{},"案例-水仙花数",[19,5337,5338],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5340,5341],{},"例如：1^3+5^3+3^3=153",[19,5343,5344],{},"请用do...while语句，求出所有3位数的水仙花数",[73,5346,5348],{"className":2762,"code":5347,"language":2764,"meta":78,"style":78},"#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",[32,5349,5350,5356,5366,5374,5378,5383,5395,5401,5405,5410,5426,5442,5458,5473,5492,5507,5555,5559,5571,5575,5583,5587,5601],{"__ignoreMap":78},[82,5351,5352,5354],{"class":84,"line":85},[82,5353,4550],{"class":112},[82,5355,4934],{"class":96},[82,5357,5358,5360,5362,5364],{"class":84,"line":157},[82,5359,4558],{"class":112},[82,5361,4561],{"class":112},[82,5363,4564],{"class":2384},[82,5365,3909],{"class":92},[82,5367,5368,5370,5372],{"class":84,"line":404},[82,5369,2776],{"class":112},[82,5371,4573],{"class":2384},[82,5373,4576],{"class":92},[82,5375,5376],{"class":84,"line":413},[82,5377,4161],{"class":92},[82,5379,5380],{"class":84,"line":508},[82,5381,5382],{"class":2828},"    \u002F\u002F1.先打印所有三位数字\n",[82,5384,5385,5387,5389,5391,5393],{"class":84,"line":513},[82,5386,4585],{"class":112},[82,5388,4840],{"class":92},[82,5390,113],{"class":112},[82,5392,3069],{"class":88},[82,5394,3909],{"class":92},[82,5396,5397,5399],{"class":84,"line":1388},[82,5398,5270],{"class":112},[82,5400,5273],{"class":92},[82,5402,5403],{"class":84,"line":1394},[82,5404,4630],{"class":92},[82,5406,5407],{"class":84,"line":1399},[82,5408,5409],{"class":2828},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[82,5411,5412,5415,5417,5419,5421,5423],{"class":84,"line":1430},[82,5413,5414],{"class":112},"        int",[82,5416,4014],{"class":92},[82,5418,113],{"class":112},[82,5420,2244],{"class":88},[82,5422,2825],{"class":92},[82,5424,5425],{"class":2828}," \u002F\u002F个位\n",[82,5427,5428,5430,5433,5435,5437,5439],{"class":84,"line":1818},[82,5429,5414],{"class":112},[82,5431,5432],{"class":92}," b",[82,5434,113],{"class":112},[82,5436,2244],{"class":88},[82,5438,2825],{"class":92},[82,5440,5441],{"class":2828}," \u002F\u002F十位\n",[82,5443,5444,5446,5449,5451,5453,5455],{"class":84,"line":2082},[82,5445,5414],{"class":112},[82,5447,5448],{"class":92}," c",[82,5450,113],{"class":112},[82,5452,2244],{"class":88},[82,5454,2825],{"class":92},[82,5456,5457],{"class":2828}," \u002F\u002F百位\n",[82,5459,5460,5463,5465,5467,5469,5471],{"class":84,"line":2233},[82,5461,5462],{"class":92},"        a",[82,5464,113],{"class":112},[82,5466,4272],{"class":92},[82,5468,3086],{"class":112},[82,5470,440],{"class":88},[82,5472,3909],{"class":92},[82,5474,5475,5478,5480,5482,5484,5486,5488,5490],{"class":84,"line":2255},[82,5476,5477],{"class":92},"        b",[82,5479,113],{"class":112},[82,5481,4272],{"class":92},[82,5483,1147],{"class":112},[82,5485,440],{"class":88},[82,5487,3086],{"class":112},[82,5489,440],{"class":88},[82,5491,3909],{"class":92},[82,5493,5494,5497,5499,5501,5503,5505],{"class":84,"line":2260},[82,5495,5496],{"class":92},"        c",[82,5498,113],{"class":112},[82,5500,4272],{"class":92},[82,5502,1147],{"class":112},[82,5504,3069],{"class":88},[82,5506,3909],{"class":92},[82,5508,5509,5511,5513,5515,5517,5519,5521,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541,5543,5546,5549,5552],{"class":84,"line":2298},[82,5510,5096],{"class":112},[82,5512,4442],{"class":92},[82,5514,3212],{"class":112},[82,5516,323],{"class":92},[82,5518,3212],{"class":112},[82,5520,323],{"class":92},[82,5522,2249],{"class":112},[82,5524,3021],{"class":92},[82,5526,3212],{"class":112},[82,5528,3021],{"class":92},[82,5530,3212],{"class":112},[82,5532,3021],{"class":92},[82,5534,2249],{"class":112},[82,5536,3046],{"class":92},[82,5538,3212],{"class":112},[82,5540,3046],{"class":92},[82,5542,3212],{"class":112},[82,5544,5545],{"class":92},"c ",[82,5547,5548],{"class":112},"==",[82,5550,5551],{"class":92}," num)",[82,5553,5554],{"class":2828}," \u002F\u002F如果是水仙花数，才打印\n",[82,5556,5557],{"class":84,"line":2303},[82,5558,5109],{"class":92},[82,5560,5561,5563,5565,5567,5569],{"class":84,"line":2321},[82,5562,5114],{"class":92},[82,5564,3792],{"class":112},[82,5566,4272],{"class":92},[82,5568,3792],{"class":112},[82,5570,3814],{"class":92},[82,5572,5573],{"class":84,"line":2533},[82,5574,5128],{"class":92},[82,5576,5577,5579,5581],{"class":84,"line":2538},[82,5578,4889],{"class":92},[82,5580,4892],{"class":112},[82,5582,3909],{"class":92},[82,5584,5585],{"class":84,"line":2548},[82,5586,4787],{"class":92},[82,5588,5589,5591,5594,5596,5599],{"class":84,"line":2579},[82,5590,4851],{"class":112},[82,5592,5593],{"class":92}," (num ",[82,5595,3659],{"class":112},[82,5597,5598],{"class":88}," 1000",[82,5600,5318],{"class":92},[82,5602,5603],{"class":84,"line":2585},[82,5604,1391],{"class":92},[26,5606,5607],{"start":404},[29,5608,5609],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[73,5611,5613],{"className":2762,"code":5612,"language":2764,"meta":78,"style":78},"\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",[32,5614,5615,5620,5648,5652,5664,5668,5673,5684,5691,5695,5708,5712,5719,5723,5735,5744],{"__ignoreMap":78},[82,5616,5617],{"class":84,"line":85},[82,5618,5619],{"class":2828},"\u002F\u002F从数字0-9打印\n",[82,5621,5622,5624,5626,5628,5631,5633,5635,5638,5640,5642,5644,5646],{"class":84,"line":157},[82,5623,597],{"class":112},[82,5625,93],{"class":92},[82,5627,2776],{"class":112},[82,5629,5630],{"class":92}," i",[82,5632,113],{"class":112},[82,5634,2244],{"class":88},[82,5636,5637],{"class":92},";i",[82,5639,3659],{"class":112},[82,5641,440],{"class":88},[82,5643,5637],{"class":92},[82,5645,4892],{"class":112},[82,5647,119],{"class":92},[82,5649,5650],{"class":84,"line":404},[82,5651,4161],{"class":92},[82,5653,5654,5656,5658,5660,5662],{"class":84,"line":413},[82,5655,4166],{"class":92},[82,5657,3792],{"class":112},[82,5659,3199],{"class":92},[82,5661,3792],{"class":112},[82,5663,3814],{"class":92},[82,5665,5666],{"class":84,"line":508},[82,5667,1391],{"class":92},[82,5669,5670],{"class":84,"line":513},[82,5671,5672],{"class":2828},"\u002F\u002F上式可以进行拆分\n",[82,5674,5675,5677,5679,5681],{"class":84,"line":1388},[82,5676,2776],{"class":112},[82,5678,5630],{"class":92},[82,5680,113],{"class":112},[82,5682,5683],{"class":88},"0\n",[82,5685,5686,5688],{"class":84,"line":1394},[82,5687,597],{"class":112},[82,5689,5690],{"class":92},"(;;;)\n",[82,5692,5693],{"class":84,"line":1399},[82,5694,4161],{"class":92},[82,5696,5697,5699,5702,5704,5706],{"class":84,"line":1430},[82,5698,2219],{"class":112},[82,5700,5701],{"class":92},"(i",[82,5703,4313],{"class":112},[82,5705,440],{"class":88},[82,5707,119],{"class":92},[82,5709,5710],{"class":84,"line":1818},[82,5711,4630],{"class":92},[82,5713,5714,5717],{"class":84,"line":2082},[82,5715,5716],{"class":112},"        break",[82,5718,3909],{"class":92},[82,5720,5721],{"class":84,"line":2233},[82,5722,4787],{"class":92},[82,5724,5725,5727,5729,5731,5733],{"class":84,"line":2255},[82,5726,4166],{"class":92},[82,5728,3792],{"class":112},[82,5730,3199],{"class":92},[82,5732,3792],{"class":112},[82,5734,3814],{"class":92},[82,5736,5737,5740,5742],{"class":84,"line":2260},[82,5738,5739],{"class":92},"    i",[82,5741,4892],{"class":112},[82,5743,3909],{"class":92},[82,5745,5746],{"class":84,"line":2298},[82,5747,1391],{"class":92},[19,5749,5750],{},"小练习",[73,5752,5754],{"className":2762,"code":5753,"language":2764,"meta":78,"style":78},"#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",[32,5755,5756,5762,5772,5780,5784,5789,5794,5821,5825,5830,5835,5876,5880,5893,5897,5901,5905,5917,5921,5925],{"__ignoreMap":78},[82,5757,5758,5760],{"class":84,"line":85},[82,5759,4550],{"class":112},[82,5761,4553],{"class":96},[82,5763,5764,5766,5768,5770],{"class":84,"line":157},[82,5765,4558],{"class":112},[82,5767,4561],{"class":112},[82,5769,4564],{"class":2384},[82,5771,3909],{"class":92},[82,5773,5774,5776,5778],{"class":84,"line":404},[82,5775,2776],{"class":112},[82,5777,4573],{"class":2384},[82,5779,4576],{"class":92},[82,5781,5782],{"class":84,"line":413},[82,5783,4161],{"class":92},[82,5785,5786],{"class":84,"line":508},[82,5787,5788],{"class":2828},"    \u002F\u002F敲桌子案例\n",[82,5790,5791],{"class":84,"line":513},[82,5792,5793],{"class":2828},"    \u002F\u002F1.先输出1-100的数字\n",[82,5795,5796,5798,5800,5802,5804,5806,5808,5811,5813,5815,5817,5819],{"class":84,"line":1388},[82,5797,1888],{"class":112},[82,5799,93],{"class":92},[82,5801,2776],{"class":112},[82,5803,5630],{"class":92},[82,5805,113],{"class":112},[82,5807,2283],{"class":88},[82,5809,5810],{"class":92},"; i",[82,5812,4202],{"class":112},[82,5814,3069],{"class":88},[82,5816,5810],{"class":92},[82,5818,4892],{"class":112},[82,5820,119],{"class":92},[82,5822,5823],{"class":84,"line":1394},[82,5824,4630],{"class":92},[82,5826,5827],{"class":84,"line":1399},[82,5828,5829],{"class":2828},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[82,5831,5832],{"class":84,"line":1430},[82,5833,5834],{"class":2828},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[82,5836,5837,5839,5841,5843,5845,5847,5849,5852,5854,5856,5858,5860,5862,5864,5866,5868,5870,5872,5874],{"class":84,"line":1818},[82,5838,5096],{"class":112},[82,5840,5701],{"class":92},[82,5842,3086],{"class":112},[82,5844,3127],{"class":88},[82,5846,5548],{"class":112},[82,5848,2244],{"class":88},[82,5850,5851],{"class":112}," ||",[82,5853,5630],{"class":92},[82,5855,3086],{"class":112},[82,5857,440],{"class":88},[82,5859,5548],{"class":112},[82,5861,3127],{"class":88},[82,5863,5851],{"class":112},[82,5865,5630],{"class":92},[82,5867,1147],{"class":112},[82,5869,440],{"class":88},[82,5871,5548],{"class":112},[82,5873,3127],{"class":88},[82,5875,119],{"class":92},[82,5877,5878],{"class":84,"line":2082},[82,5879,5109],{"class":92},[82,5881,5882,5884,5886,5889,5891],{"class":84,"line":2233},[82,5883,5114],{"class":92},[82,5885,3792],{"class":112},[82,5887,5888],{"class":96},"\"敲桌子\"",[82,5890,3792],{"class":112},[82,5892,3814],{"class":92},[82,5894,5895],{"class":84,"line":2255},[82,5896,5128],{"class":92},[82,5898,5899],{"class":84,"line":2260},[82,5900,5169],{"class":112},[82,5902,5903],{"class":84,"line":2298},[82,5904,5109],{"class":92},[82,5906,5907,5909,5911,5913,5915],{"class":84,"line":2303},[82,5908,5114],{"class":92},[82,5910,3792],{"class":112},[82,5912,3199],{"class":92},[82,5914,3792],{"class":112},[82,5916,3814],{"class":92},[82,5918,5919],{"class":84,"line":2321},[82,5920,5128],{"class":92},[82,5922,5923],{"class":84,"line":2533},[82,5924,4787],{"class":92},[82,5926,5927],{"class":84,"line":2538},[82,5928,1391],{"class":92},[19,5930,5931],{},"嵌套实现星图",[73,5933,5935],{"className":2762,"code":5934,"language":2764,"meta":78,"style":78},"#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",[32,5936,5937,5943,5953,5961,5965,5991,5995,6024,6028,6039,6043,6052,6056],{"__ignoreMap":78},[82,5938,5939,5941],{"class":84,"line":85},[82,5940,4550],{"class":112},[82,5942,4553],{"class":96},[82,5944,5945,5947,5949,5951],{"class":84,"line":157},[82,5946,4558],{"class":112},[82,5948,4561],{"class":112},[82,5950,4564],{"class":2384},[82,5952,3909],{"class":92},[82,5954,5955,5957,5959],{"class":84,"line":404},[82,5956,2776],{"class":112},[82,5958,4573],{"class":2384},[82,5960,4576],{"class":92},[82,5962,5963],{"class":84,"line":413},[82,5964,4161],{"class":92},[82,5966,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987,5989],{"class":84,"line":508},[82,5968,1888],{"class":112},[82,5970,4265],{"class":92},[82,5972,2776],{"class":112},[82,5974,5630],{"class":92},[82,5976,113],{"class":112},[82,5978,2244],{"class":88},[82,5980,5637],{"class":92},[82,5982,3659],{"class":112},[82,5984,440],{"class":88},[82,5986,5637],{"class":92},[82,5988,4892],{"class":112},[82,5990,119],{"class":92},[82,5992,5993],{"class":84,"line":513},[82,5994,4630],{"class":92},[82,5996,5997,6000,6002,6004,6007,6009,6011,6014,6016,6018,6020,6022],{"class":84,"line":1388},[82,5998,5999],{"class":112},"        for",[82,6001,4265],{"class":92},[82,6003,2776],{"class":112},[82,6005,6006],{"class":92}," j",[82,6008,113],{"class":112},[82,6010,2244],{"class":88},[82,6012,6013],{"class":92},";j",[82,6015,3659],{"class":112},[82,6017,440],{"class":88},[82,6019,6013],{"class":92},[82,6021,4892],{"class":112},[82,6023,119],{"class":92},[82,6025,6026],{"class":84,"line":1394},[82,6027,5109],{"class":92},[82,6029,6030,6032,6034,6037],{"class":84,"line":1399},[82,6031,5114],{"class":92},[82,6033,3792],{"class":112},[82,6035,6036],{"class":96},"\"*\"",[82,6038,3909],{"class":92},[82,6040,6041],{"class":84,"line":1430},[82,6042,5128],{"class":92},[82,6044,6045,6048,6050],{"class":84,"line":1818},[82,6046,6047],{"class":92},"        cout",[82,6049,3792],{"class":112},[82,6051,3814],{"class":92},[82,6053,6054],{"class":84,"line":2082},[82,6055,4787],{"class":92},[82,6057,6058],{"class":84,"line":2233},[82,6059,1391],{"class":92},[19,6061,6062],{},"乘法口诀表",[73,6064,6066],{"className":2762,"code":6065,"language":2764,"meta":78,"style":78},"#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",[32,6067,6068,6074,6084,6092,6096,6122,6126,6151,6155,6195,6199,6207,6211],{"__ignoreMap":78},[82,6069,6070,6072],{"class":84,"line":85},[82,6071,4550],{"class":112},[82,6073,4934],{"class":96},[82,6075,6076,6078,6080,6082],{"class":84,"line":157},[82,6077,4558],{"class":112},[82,6079,4561],{"class":112},[82,6081,4564],{"class":2384},[82,6083,3909],{"class":92},[82,6085,6086,6088,6090],{"class":84,"line":404},[82,6087,2776],{"class":112},[82,6089,4573],{"class":2384},[82,6091,4576],{"class":92},[82,6093,6094],{"class":84,"line":413},[82,6095,4161],{"class":92},[82,6097,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6120],{"class":84,"line":508},[82,6099,1888],{"class":112},[82,6101,93],{"class":92},[82,6103,2776],{"class":112},[82,6105,5630],{"class":92},[82,6107,113],{"class":112},[82,6109,2283],{"class":88},[82,6111,5637],{"class":92},[82,6113,3659],{"class":112},[82,6115,440],{"class":88},[82,6117,5637],{"class":92},[82,6119,4892],{"class":112},[82,6121,119],{"class":92},[82,6123,6124],{"class":84,"line":513},[82,6125,4630],{"class":92},[82,6127,6128,6130,6132,6134,6136,6138,6140,6142,6144,6147,6149],{"class":84,"line":1388},[82,6129,5999],{"class":112},[82,6131,93],{"class":92},[82,6133,2776],{"class":112},[82,6135,6006],{"class":92},[82,6137,113],{"class":112},[82,6139,2283],{"class":88},[82,6141,6013],{"class":92},[82,6143,4202],{"class":112},[82,6145,6146],{"class":92},"i;j",[82,6148,4892],{"class":112},[82,6150,119],{"class":92},[82,6152,6153],{"class":84,"line":1394},[82,6154,5109],{"class":92},[82,6156,6157,6159,6161,6163,6165,6167,6169,6171,6173,6176,6178,6180,6182,6184,6186,6189,6191,6193],{"class":84,"line":1399},[82,6158,5114],{"class":92},[82,6160,3792],{"class":112},[82,6162,3224],{"class":92},[82,6164,3792],{"class":112},[82,6166,6036],{"class":96},[82,6168,3792],{"class":112},[82,6170,3199],{"class":92},[82,6172,3792],{"class":112},[82,6174,6175],{"class":96},"\"=\"",[82,6177,3792],{"class":112},[82,6179,3199],{"class":92},[82,6181,3212],{"class":112},[82,6183,3224],{"class":92},[82,6185,3792],{"class":112},[82,6187,6188],{"class":96},"'",[82,6190,3849],{"class":88},[82,6192,6188],{"class":96},[82,6194,3909],{"class":92},[82,6196,6197],{"class":84,"line":1430},[82,6198,5128],{"class":92},[82,6200,6201,6203,6205],{"class":84,"line":1818},[82,6202,6047],{"class":92},[82,6204,3792],{"class":112},[82,6206,3814],{"class":92},[82,6208,6209],{"class":84,"line":2082},[82,6210,4787],{"class":92},[82,6212,6213],{"class":84,"line":2233},[82,6214,1391],{"class":92},[65,6216,6218],{"id":6217},"_163跳出语句","1.6.3跳出语句",[26,6220,6221],{},[29,6222,6223],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6225,6226],{},"break使用时机：",[3755,6228,6229,6232,6235],{},[29,6230,6231],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,6233,6234],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,6236,6237],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,6239,6240,6243],{"start":157},[29,6241,6242],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,6244,6245],{},"goto语句\n语法：goto 标记;",[19,6247,6248],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[73,6250,6252],{"className":2762,"code":6251,"language":2764,"meta":78,"style":78},"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",[32,6253,6254,6262,6266,6279,6289,6302,6315,6328,6335,6351],{"__ignoreMap":78},[82,6255,6256,6258,6260],{"class":84,"line":85},[82,6257,2776],{"class":112},[82,6259,4573],{"class":2384},[82,6261,4576],{"class":92},[82,6263,6264],{"class":84,"line":157},[82,6265,4161],{"class":92},[82,6267,6268,6270,6272,6275,6277],{"class":84,"line":404},[82,6269,4166],{"class":92},[82,6271,3792],{"class":112},[82,6273,6274],{"class":96},"\"1\"",[82,6276,3792],{"class":112},[82,6278,3814],{"class":92},[82,6280,6281,6284,6287],{"class":84,"line":413},[82,6282,6283],{"class":112},"    goto",[82,6285,6286],{"class":2384}," FLAG",[82,6288,3909],{"class":92},[82,6290,6291,6293,6295,6298,6300],{"class":84,"line":508},[82,6292,4166],{"class":92},[82,6294,3792],{"class":112},[82,6296,6297],{"class":96},"\"2\"",[82,6299,3792],{"class":112},[82,6301,3814],{"class":92},[82,6303,6304,6306,6308,6311,6313],{"class":84,"line":513},[82,6305,4166],{"class":92},[82,6307,3792],{"class":112},[82,6309,6310],{"class":96},"\"3\"",[82,6312,3792],{"class":112},[82,6314,3814],{"class":92},[82,6316,6317,6319,6321,6324,6326],{"class":84,"line":1388},[82,6318,4166],{"class":92},[82,6320,3792],{"class":112},[82,6322,6323],{"class":96},"\"4\"",[82,6325,3792],{"class":112},[82,6327,3814],{"class":92},[82,6329,6330,6333],{"class":84,"line":1394},[82,6331,6332],{"class":2384},"    FLAG",[82,6334,669],{"class":92},[82,6336,6337,6339,6341,6344,6346,6348],{"class":84,"line":1399},[82,6338,4166],{"class":92},[82,6340,3792],{"class":112},[82,6342,6343],{"class":96},"\"5\"",[82,6345,3792],{"class":112},[82,6347,3857],{"class":92},[82,6349,6350],{"class":2828},"\u002F\u002F跳过了2,3,4,直接到5\n",[82,6352,6353],{"class":84,"line":1430},[82,6354,1391],{"class":92},[14,6356,6358],{"id":6357},"_17数组","1.7数组",[65,6360,6362],{"id":6361},"_171一维数组","1.7.1一维数组",[26,6364,6365],{},[29,6366,6367],{},"一维数组定义方式",[278,6369,6370,6380],{},[281,6371,6372],{},[284,6373,6374,6377],{},[287,6375,6376],{},"方式",[287,6378,6379],{},"注意事项",[294,6381,6382,6396,6406],{},[284,6383,6384,6390],{},[299,6385,6386,6387,2825],{},"数据类型 数组名",[82,6388,6389],{},"数组长度",[299,6391,6392,6393,6395],{},"这种方式是先定义再arr",[82,6394,3199],{},"赋值",[284,6397,6398,6403],{},[299,6399,6386,6400,6402],{},[82,6401,6389],{},"={值1,值2....};",[299,6404,6405],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[284,6407,6408,6412],{},[299,6409,6386,6410,6402],{},[82,6411],{},[299,6413,6414,6415,6417],{},"int arr",[82,6416],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,6419,6420],{"start":157},[29,6421,6422],{},"一维数组数组名\n用途：",[3755,6424,6425],{},[29,6426,6427],{},"1.可以统计整个数组在内存中的长度：",[73,6429,6431],{"className":2762,"code":6430,"language":2764,"meta":78,"style":78},"sizeof(arr);\nsizeof(arr[0]);\n",[32,6432,6433,6440],{"__ignoreMap":78},[82,6434,6435,6437],{"class":84,"line":85},[82,6436,2771],{"class":112},[82,6438,6439],{"class":92},"(arr);\n",[82,6441,6442,6444,6447,6449],{"class":84,"line":157},[82,6443,2771],{"class":112},[82,6445,6446],{"class":92},"(arr[",[82,6448,2244],{"class":88},[82,6450,6451],{"class":92},"]);\n",[3755,6453,6454],{},[29,6455,6456],{},"2.可以获取数组在内存中的首地址:",[73,6458,6460],{"className":2762,"code":6459,"language":2764,"meta":78,"style":78},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[32,6461,6462,6467,6480,6485],{"__ignoreMap":78},[82,6463,6464],{"class":84,"line":85},[82,6465,6466],{"class":2828},"\u002F\u002F查看16进制的首地址\n",[82,6468,6469,6471,6473,6476,6478],{"class":84,"line":157},[82,6470,3985],{"class":92},[82,6472,3792],{"class":112},[82,6474,6475],{"class":92},"arr",[82,6477,3792],{"class":112},[82,6479,3814],{"class":92},[82,6481,6482],{"class":84,"line":404},[82,6483,6484],{"class":2828},"\u002F\u002F看10进制数\n",[82,6486,6487,6489,6491,6493,6495,6497,6499,6502,6504,6506,6508],{"class":84,"line":413},[82,6488,3985],{"class":92},[82,6490,3792],{"class":112},[82,6492,93],{"class":92},[82,6494,2776],{"class":112},[82,6496,3187],{"class":92},[82,6498,3111],{"class":112},[82,6500,6501],{"class":92},"arr[",[82,6503,2244],{"class":88},[82,6505,3689],{"class":92},[82,6507,3792],{"class":112},[82,6509,3814],{"class":92},[19,6511,6512],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3755,6514,6515],{},[29,6516,6517],{},"1️⃣五只小猪称体重",[73,6519,6521],{"className":2762,"code":6520,"language":2764,"meta":78,"style":78},"#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",[32,6522,6523,6529,6539,6547,6551,6591,6604,6630,6634,6646,6650,6660,6664,6668,6681,6691],{"__ignoreMap":78},[82,6524,6525,6527],{"class":84,"line":85},[82,6526,4550],{"class":112},[82,6528,4553],{"class":96},[82,6530,6531,6533,6535,6537],{"class":84,"line":157},[82,6532,4558],{"class":112},[82,6534,4561],{"class":112},[82,6536,4564],{"class":2384},[82,6538,3909],{"class":92},[82,6540,6541,6543,6545],{"class":84,"line":404},[82,6542,2776],{"class":112},[82,6544,4573],{"class":2384},[82,6546,4576],{"class":92},[82,6548,6549],{"class":84,"line":413},[82,6550,4161],{"class":92},[82,6552,6553,6555,6558,6560,6562,6564,6566,6569,6571,6574,6576,6578,6580,6583,6585,6588],{"class":84,"line":508},[82,6554,4585],{"class":112},[82,6556,6557],{"class":92}," arr[",[82,6559,3077],{"class":88},[82,6561,3689],{"class":92},[82,6563,113],{"class":112},[82,6565,3645],{"class":92},[82,6567,6568],{"class":88},"300",[82,6570,3136],{"class":92},[82,6572,6573],{"class":88},"350",[82,6575,3136],{"class":92},[82,6577,4325],{"class":88},[82,6579,3136],{"class":92},[82,6581,6582],{"class":88},"400",[82,6584,3136],{"class":92},[82,6586,6587],{"class":88},"250",[82,6589,6590],{"class":92},"};\n",[82,6592,6593,6595,6598,6600,6602],{"class":84,"line":513},[82,6594,4585],{"class":112},[82,6596,6597],{"class":92}," tmp",[82,6599,113],{"class":112},[82,6601,2244],{"class":88},[82,6603,3909],{"class":92},[82,6605,6606,6608,6610,6612,6614,6616,6618,6620,6622,6624,6626,6628],{"class":84,"line":1388},[82,6607,1888],{"class":112},[82,6609,4265],{"class":92},[82,6611,2776],{"class":112},[82,6613,5630],{"class":92},[82,6615,113],{"class":112},[82,6617,2244],{"class":88},[82,6619,5637],{"class":92},[82,6621,3659],{"class":112},[82,6623,3077],{"class":88},[82,6625,5637],{"class":92},[82,6627,4892],{"class":112},[82,6629,119],{"class":92},[82,6631,6632],{"class":84,"line":1394},[82,6633,4630],{"class":92},[82,6635,6636,6638,6641,6643],{"class":84,"line":1399},[82,6637,5096],{"class":112},[82,6639,6640],{"class":92},"(tmp",[82,6642,3659],{"class":112},[82,6644,6645],{"class":92},"arr[i])\n",[82,6647,6648],{"class":84,"line":1430},[82,6649,5109],{"class":92},[82,6651,6652,6655,6657],{"class":84,"line":1818},[82,6653,6654],{"class":92},"            tmp",[82,6656,113],{"class":112},[82,6658,6659],{"class":92},"arr[i];\n",[82,6661,6662],{"class":84,"line":2082},[82,6663,5128],{"class":92},[82,6665,6666],{"class":84,"line":2233},[82,6667,4787],{"class":92},[82,6669,6670,6672,6674,6677,6679],{"class":84,"line":2255},[82,6671,4166],{"class":92},[82,6673,3792],{"class":112},[82,6675,6676],{"class":92},"tmp",[82,6678,3792],{"class":112},[82,6680,3814],{"class":92},[82,6682,6683,6686,6689],{"class":84,"line":2260},[82,6684,6685],{"class":112},"    return",[82,6687,6688],{"class":88}," 0",[82,6690,3909],{"class":92},[82,6692,6693],{"class":84,"line":2298},[82,6694,1391],{"class":92},[3755,6696,6697],{},[29,6698,6699],{},"2️⃣数组元素逆置",[73,6701,6703],{"className":2762,"code":6702,"language":2764,"meta":78,"style":78},"\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",[32,6704,6705,6710,6716,6726,6734,6738,6773,6789,6821,6834,6839,6844,6856,6866,6876,6881,6890,6900,6905,6910,6937,6941,6957,6961,6972,6981],{"__ignoreMap":78},[82,6706,6707],{"class":84,"line":85},[82,6708,6709],{"class":2828},"\u002F\u002F元素逆置\n",[82,6711,6712,6714],{"class":84,"line":157},[82,6713,4550],{"class":112},[82,6715,4553],{"class":96},[82,6717,6718,6720,6722,6724],{"class":84,"line":404},[82,6719,4558],{"class":112},[82,6721,4561],{"class":112},[82,6723,4564],{"class":2384},[82,6725,3909],{"class":92},[82,6727,6728,6730,6732],{"class":84,"line":413},[82,6729,2776],{"class":112},[82,6731,4573],{"class":2384},[82,6733,4576],{"class":92},[82,6735,6736],{"class":84,"line":508},[82,6737,4161],{"class":92},[82,6739,6740,6743,6745,6747,6749,6751,6753,6755,6757,6759,6761,6763,6765,6767,6769,6771],{"class":84,"line":513},[82,6741,6742],{"class":112},"   int",[82,6744,6557],{"class":92},[82,6746,3077],{"class":88},[82,6748,3689],{"class":92},[82,6750,113],{"class":112},[82,6752,3645],{"class":92},[82,6754,2283],{"class":88},[82,6756,3136],{"class":92},[82,6758,1425],{"class":88},[82,6760,3136],{"class":92},[82,6762,2841],{"class":88},[82,6764,3136],{"class":92},[82,6766,3051],{"class":88},[82,6768,3136],{"class":92},[82,6770,3077],{"class":88},[82,6772,6590],{"class":92},[82,6774,6775,6777,6780,6782,6784,6786],{"class":84,"line":1388},[82,6776,6742],{"class":112},[82,6778,6779],{"class":92}," start",[82,6781,113],{"class":112},[82,6783,2244],{"class":88},[82,6785,2825],{"class":92},[82,6787,6788],{"class":2828},"\u002F\u002F起始下标\n",[82,6790,6791,6793,6796,6799,6802,6805,6807,6809,6812,6814,6816,6818],{"class":84,"line":1394},[82,6792,6742],{"class":112},[82,6794,6795],{"class":92}," end",[82,6797,6798],{"class":112},"=sizeof",[82,6800,6801],{"class":92},"(arr)",[82,6803,6804],{"class":112},"\u002Fsizeof",[82,6806,6446],{"class":92},[82,6808,2244],{"class":88},[82,6810,6811],{"class":92},"])",[82,6813,3288],{"class":112},[82,6815,2283],{"class":88},[82,6817,2825],{"class":92},[82,6819,6820],{"class":2828},"\u002F\u002F结束下标\n",[82,6822,6823,6826,6829,6831],{"class":84,"line":1399},[82,6824,6825],{"class":112},"   while",[82,6827,6828],{"class":92}," (start",[82,6830,3659],{"class":112},[82,6832,6833],{"class":92},"end)\n",[82,6835,6836],{"class":84,"line":1430},[82,6837,6838],{"class":92},"   {\n",[82,6840,6841],{"class":84,"line":1818},[82,6842,6843],{"class":2828},"    \u002F\u002F实现元素互换代码\n",[82,6845,6846,6848,6851,6853],{"class":84,"line":2082},[82,6847,4585],{"class":112},[82,6849,6850],{"class":92}," temp",[82,6852,113],{"class":112},[82,6854,6855],{"class":92},"arr[start];\n",[82,6857,6858,6861,6863],{"class":84,"line":2233},[82,6859,6860],{"class":92},"    arr[start]",[82,6862,113],{"class":112},[82,6864,6865],{"class":92},"arr[end];\n",[82,6867,6868,6871,6873],{"class":84,"line":2255},[82,6869,6870],{"class":92},"    arr[end]",[82,6872,113],{"class":112},[82,6874,6875],{"class":92},"temp;\n",[82,6877,6878],{"class":84,"line":2260},[82,6879,6880],{"class":2828},"    \u002F\u002F下标更新\n",[82,6882,6883,6886,6888],{"class":84,"line":2298},[82,6884,6885],{"class":92},"    start",[82,6887,4892],{"class":112},[82,6889,3909],{"class":92},[82,6891,6892,6895,6898],{"class":84,"line":2303},[82,6893,6894],{"class":92},"    end",[82,6896,6897],{"class":112},"--",[82,6899,3909],{"class":92},[82,6901,6902],{"class":84,"line":2321},[82,6903,6904],{"class":92},"   }\n",[82,6906,6907],{"class":84,"line":2533},[82,6908,6909],{"class":2828},"   \u002F\u002F输出逆置后的数组\n",[82,6911,6912,6915,6917,6919,6921,6923,6925,6927,6929,6931,6933,6935],{"class":84,"line":2538},[82,6913,6914],{"class":112},"   for",[82,6916,4265],{"class":92},[82,6918,2776],{"class":112},[82,6920,5630],{"class":92},[82,6922,113],{"class":112},[82,6924,2244],{"class":88},[82,6926,5637],{"class":92},[82,6928,3659],{"class":112},[82,6930,3077],{"class":88},[82,6932,5637],{"class":92},[82,6934,4892],{"class":112},[82,6936,119],{"class":92},[82,6938,6939],{"class":84,"line":2548},[82,6940,6838],{"class":92},[82,6942,6943,6945,6947,6950,6952,6955],{"class":84,"line":2579},[82,6944,4166],{"class":92},[82,6946,3792],{"class":112},[82,6948,6949],{"class":92},"arr[i]",[82,6951,3792],{"class":112},[82,6953,6954],{"class":96},"\" \"",[82,6956,3909],{"class":92},[82,6958,6959],{"class":84,"line":2585},[82,6960,6904],{"class":92},[82,6962,6963,6966,6968,6970],{"class":84,"line":4350},[82,6964,6965],{"class":2384},"   system",[82,6967,93],{"class":92},[82,6969,4908],{"class":96},[82,6971,5318],{"class":92},[82,6973,6974,6977,6979],{"class":84,"line":4355},[82,6975,6976],{"class":112},"   return",[82,6978,6688],{"class":88},[82,6980,3909],{"class":92},[82,6982,6983],{"class":84,"line":4360},[82,6984,1391],{"class":92},[3755,6986,6987],{},[29,6988,6989],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[73,6991,6993],{"className":2762,"code":6992,"language":2764,"meta":78,"style":78},"\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",[32,6994,6995,7000,7006,7016,7024,7028,7080,7093,7119,7123,7137,7141,7146,7151,7181,7185,7190,7224,7228,7233,7253,7258,7270,7286,7301,7306,7310,7314,7327,7353,7357,7371,7375,7383],{"__ignoreMap":78},[82,6996,6997],{"class":84,"line":85},[82,6998,6999],{"class":2828},"\u002F\u002F冒泡排序,升序\n",[82,7001,7002,7004],{"class":84,"line":157},[82,7003,4550],{"class":112},[82,7005,4553],{"class":96},[82,7007,7008,7010,7012,7014],{"class":84,"line":404},[82,7009,4558],{"class":112},[82,7011,4561],{"class":112},[82,7013,4564],{"class":2384},[82,7015,3909],{"class":92},[82,7017,7018,7020,7022],{"class":84,"line":413},[82,7019,2776],{"class":112},[82,7021,4573],{"class":2384},[82,7023,4576],{"class":92},[82,7025,7026],{"class":84,"line":508},[82,7027,4161],{"class":92},[82,7029,7030,7032,7034,7036,7039,7041,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078],{"class":84,"line":513},[82,7031,4585],{"class":112},[82,7033,6557],{"class":92},[82,7035,3178],{"class":88},[82,7037,7038],{"class":92},"] ",[82,7040,113],{"class":112},[82,7042,7043],{"class":92}," {",[82,7045,3051],{"class":88},[82,7047,3136],{"class":92},[82,7049,1425],{"class":88},[82,7051,3136],{"class":92},[82,7053,3153],{"class":88},[82,7055,3136],{"class":92},[82,7057,2244],{"class":88},[82,7059,3136],{"class":92},[82,7061,3077],{"class":88},[82,7063,3136],{"class":92},[82,7065,3127],{"class":88},[82,7067,3136],{"class":92},[82,7069,2283],{"class":88},[82,7071,3136],{"class":92},[82,7073,2841],{"class":88},[82,7075,3136],{"class":92},[82,7077,3178],{"class":88},[82,7079,6590],{"class":92},[82,7081,7082,7084,7086,7089,7091],{"class":84,"line":1388},[82,7083,4166],{"class":92},[82,7085,3792],{"class":112},[82,7087,7088],{"class":96},"\"排序前：\"",[82,7090,3792],{"class":112},[82,7092,3814],{"class":92},[82,7094,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115,7117],{"class":84,"line":1394},[82,7096,1888],{"class":112},[82,7098,4265],{"class":92},[82,7100,2776],{"class":112},[82,7102,5630],{"class":92},[82,7104,113],{"class":112},[82,7106,2244],{"class":88},[82,7108,5637],{"class":92},[82,7110,3659],{"class":112},[82,7112,3178],{"class":88},[82,7114,5637],{"class":92},[82,7116,4892],{"class":112},[82,7118,119],{"class":92},[82,7120,7121],{"class":84,"line":1399},[82,7122,4630],{"class":92},[82,7124,7125,7127,7129,7131,7133,7135],{"class":84,"line":1430},[82,7126,6047],{"class":92},[82,7128,3792],{"class":112},[82,7130,6949],{"class":92},[82,7132,3792],{"class":112},[82,7134,6954],{"class":96},[82,7136,3909],{"class":92},[82,7138,7139],{"class":84,"line":1818},[82,7140,4787],{"class":92},[82,7142,7143],{"class":84,"line":2082},[82,7144,7145],{"class":2828},"    \u002F\u002F开始冒泡排序\n",[82,7147,7148],{"class":84,"line":2233},[82,7149,7150],{"class":2828},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[82,7152,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179],{"class":84,"line":2255},[82,7154,1888],{"class":112},[82,7156,4265],{"class":92},[82,7158,2776],{"class":112},[82,7160,5630],{"class":92},[82,7162,113],{"class":112},[82,7164,2244],{"class":88},[82,7166,5637],{"class":92},[82,7168,3659],{"class":112},[82,7170,3178],{"class":88},[82,7172,3288],{"class":112},[82,7174,2283],{"class":88},[82,7176,5637],{"class":92},[82,7178,4892],{"class":112},[82,7180,119],{"class":92},[82,7182,7183],{"class":84,"line":2260},[82,7184,4630],{"class":92},[82,7186,7187],{"class":84,"line":2298},[82,7188,7189],{"class":2828},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[82,7191,7192,7194,7196,7198,7200,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222],{"class":84,"line":2303},[82,7193,5999],{"class":112},[82,7195,4265],{"class":92},[82,7197,2776],{"class":112},[82,7199,6006],{"class":92},[82,7201,113],{"class":112},[82,7203,2244],{"class":88},[82,7205,6013],{"class":92},[82,7207,3659],{"class":112},[82,7209,3178],{"class":88},[82,7211,3288],{"class":112},[82,7213,3199],{"class":92},[82,7215,3288],{"class":112},[82,7217,2283],{"class":88},[82,7219,6013],{"class":92},[82,7221,4892],{"class":112},[82,7223,119],{"class":92},[82,7225,7226],{"class":84,"line":2321},[82,7227,5109],{"class":92},[82,7229,7230],{"class":84,"line":2533},[82,7231,7232],{"class":2828},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[82,7234,7235,7238,7241,7243,7246,7248,7250],{"class":84,"line":2538},[82,7236,7237],{"class":112},"            if",[82,7239,7240],{"class":92},"(arr[j]",[82,7242,3709],{"class":112},[82,7244,7245],{"class":92},"arr[j",[82,7247,2249],{"class":112},[82,7249,2283],{"class":88},[82,7251,7252],{"class":92},"])\n",[82,7254,7255],{"class":84,"line":2548},[82,7256,7257],{"class":92},"            {\n",[82,7259,7260,7263,7265,7267],{"class":84,"line":2579},[82,7261,7262],{"class":112},"                int",[82,7264,6850],{"class":92},[82,7266,113],{"class":112},[82,7268,7269],{"class":92},"arr[j];\n",[82,7271,7272,7275,7277,7279,7281,7283],{"class":84,"line":2585},[82,7273,7274],{"class":92},"                arr[j]",[82,7276,113],{"class":112},[82,7278,7245],{"class":92},[82,7280,2249],{"class":112},[82,7282,2283],{"class":88},[82,7284,7285],{"class":92},"];\n",[82,7287,7288,7291,7293,7295,7297,7299],{"class":84,"line":4350},[82,7289,7290],{"class":92},"                arr[j",[82,7292,2249],{"class":112},[82,7294,2283],{"class":88},[82,7296,3689],{"class":92},[82,7298,113],{"class":112},[82,7300,6875],{"class":92},[82,7302,7303],{"class":84,"line":4355},[82,7304,7305],{"class":92},"            }\n",[82,7307,7308],{"class":84,"line":4360},[82,7309,5128],{"class":92},[82,7311,7312],{"class":84,"line":4365},[82,7313,4787],{"class":92},[82,7315,7316,7318,7320,7323,7325],{"class":84,"line":4379},[82,7317,4166],{"class":92},[82,7319,3792],{"class":112},[82,7321,7322],{"class":96},"\"排序后：\"",[82,7324,3792],{"class":112},[82,7326,3814],{"class":92},[82,7328,7329,7331,7333,7335,7337,7339,7341,7343,7345,7347,7349,7351],{"class":84,"line":4384},[82,7330,1888],{"class":112},[82,7332,4265],{"class":92},[82,7334,2776],{"class":112},[82,7336,5630],{"class":92},[82,7338,113],{"class":112},[82,7340,2244],{"class":88},[82,7342,5637],{"class":92},[82,7344,3659],{"class":112},[82,7346,3178],{"class":88},[82,7348,5637],{"class":92},[82,7350,4892],{"class":112},[82,7352,119],{"class":92},[82,7354,7355],{"class":84,"line":5176},[82,7356,4630],{"class":92},[82,7358,7359,7361,7363,7365,7367,7369],{"class":84,"line":5190},[82,7360,6047],{"class":92},[82,7362,3792],{"class":112},[82,7364,6949],{"class":92},[82,7366,3792],{"class":112},[82,7368,6954],{"class":96},[82,7370,3909],{"class":92},[82,7372,7373],{"class":84,"line":5198},[82,7374,4787],{"class":92},[82,7376,7377,7379,7381],{"class":84,"line":5203},[82,7378,6685],{"class":112},[82,7380,6688],{"class":88},[82,7382,3909],{"class":92},[82,7384,7385],{"class":84,"line":5209},[82,7386,1391],{"class":92},[65,7388,7390],{"id":7389},"_172二维数组","1.7.2二维数组",[26,7392,7393],{},[29,7394,7395],{},"二维数组的四种定义方式",[278,7397,7398,7407],{},[281,7399,7400],{},[284,7401,7402,7405],{},[287,7403,7404],{},"序号",[287,7406,6376],{},[294,7408,7409,7419,7428,7437,7446],{},[284,7410,7411,7413],{},[299,7412,2283],{},[299,7414,7415,7416,2825],{},"数据类型 数组名[行数]",[82,7417,7418],{},"列数",[284,7420,7421,7423],{},[299,7422,1425],{},[299,7424,7415,7425,7427],{},[82,7426,7418],{},"={ {数据1,数据2}，{数据3，数据4}... }",[284,7429,7430,7432],{},[299,7431,2841],{},[299,7433,7415,7434,7436],{},[82,7435,7418],{},"={数据1,数据2,数据3...}",[284,7438,7439,7441],{},[299,7440,3051],{},[299,7442,7443,7444,7436],{},"数据类型 数组名[]",[82,7445,7418],{},[284,7447,7448,7451],{},[299,7449,7450],{},"注意：不能只省略列数",[299,7452],{},[26,7454,7455],{"start":157},[29,7456,7457],{},"二维数组数组名",[3755,7459,7460,7463],{},[29,7461,7462],{},"1.查看二维数组所占内存空间",[29,7464,7465],{},"2.获取二维数组首地址",[19,7467,7468],{},"已知二维数组，求二维数组的行数与列数",[73,7470,7472],{"className":2762,"code":7471,"language":2764,"meta":78,"style":78},"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",[32,7473,7474,7482,7486,7504,7508,7525,7541,7546,7571,7604],{"__ignoreMap":78},[82,7475,7476,7478,7480],{"class":84,"line":85},[82,7477,2776],{"class":112},[82,7479,4573],{"class":2384},[82,7481,4576],{"class":92},[82,7483,7484],{"class":84,"line":157},[82,7485,4161],{"class":92},[82,7487,7488,7490,7492,7494,7497,7499,7501],{"class":84,"line":404},[82,7489,4585],{"class":112},[82,7491,6557],{"class":92},[82,7493,1425],{"class":88},[82,7495,7496],{"class":92},"][",[82,7498,2841],{"class":88},[82,7500,3689],{"class":92},[82,7502,7503],{"class":112},"=\n",[82,7505,7506],{"class":84,"line":413},[82,7507,4630],{"class":92},[82,7509,7510,7513,7515,7517,7519,7521,7523],{"class":84,"line":508},[82,7511,7512],{"class":92},"        {",[82,7514,2283],{"class":88},[82,7516,3136],{"class":92},[82,7518,1425],{"class":88},[82,7520,3136],{"class":92},[82,7522,2841],{"class":88},[82,7524,1497],{"class":92},[82,7526,7527,7529,7531,7533,7535,7537,7539],{"class":84,"line":513},[82,7528,7512],{"class":92},[82,7530,3051],{"class":88},[82,7532,3136],{"class":92},[82,7534,3077],{"class":88},[82,7536,3136],{"class":92},[82,7538,3102],{"class":88},[82,7540,1391],{"class":92},[82,7542,7543],{"class":84,"line":1388},[82,7544,7545],{"class":92},"    };\n",[82,7547,7548,7550,7552,7555,7557,7559,7561,7563,7565,7567,7569],{"class":84,"line":1394},[82,7549,4166],{"class":92},[82,7551,3792],{"class":112},[82,7553,7554],{"class":96},"\"二维数组的行数\"",[82,7556,3988],{"class":112},[82,7558,6801],{"class":92},[82,7560,6804],{"class":112},[82,7562,6446],{"class":92},[82,7564,2244],{"class":88},[82,7566,6811],{"class":92},[82,7568,3792],{"class":112},[82,7570,3814],{"class":92},[82,7572,7573,7575,7577,7580,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602],{"class":84,"line":1399},[82,7574,4166],{"class":92},[82,7576,3792],{"class":112},[82,7578,7579],{"class":96},"\"二维数组的列数\"",[82,7581,3988],{"class":112},[82,7583,6446],{"class":92},[82,7585,2244],{"class":88},[82,7587,6811],{"class":92},[82,7589,6804],{"class":112},[82,7591,6446],{"class":92},[82,7593,2244],{"class":88},[82,7595,7496],{"class":92},[82,7597,2244],{"class":88},[82,7599,6811],{"class":92},[82,7601,3792],{"class":112},[82,7603,3814],{"class":92},[82,7605,7606],{"class":84,"line":1430},[82,7607,1391],{"class":92},[19,7609,7610],{},"查看二维数组首地址",[73,7612,7614],{"className":2762,"code":7613,"language":2764,"meta":78,"style":78},"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",[32,7615,7616,7633,7659,7684],{"__ignoreMap":78},[82,7617,7618,7620,7622,7625,7627,7629,7631],{"class":84,"line":85},[82,7619,3985],{"class":92},[82,7621,3792],{"class":112},[82,7623,7624],{"class":96},"\"二维数组首地址：\"",[82,7626,3792],{"class":112},[82,7628,6475],{"class":92},[82,7630,3792],{"class":112},[82,7632,3814],{"class":92},[82,7634,7635,7637,7639,7642,7644,7646,7648,7651,7653,7655,7657],{"class":84,"line":157},[82,7636,3985],{"class":92},[82,7638,3792],{"class":112},[82,7640,7641],{"class":96},"\"二维数组第一行的首地址：\"",[82,7643,3792],{"class":112},[82,7645,93],{"class":92},[82,7647,2776],{"class":112},[82,7649,7650],{"class":92},")arr[",[82,7652,2244],{"class":88},[82,7654,3689],{"class":92},[82,7656,3792],{"class":112},[82,7658,3814],{"class":92},[82,7660,7661,7663,7665,7668,7670,7672,7674,7676,7678,7680,7682],{"class":84,"line":404},[82,7662,3985],{"class":92},[82,7664,3792],{"class":112},[82,7666,7667],{"class":96},"\"二维数组第二行的首地址：\"",[82,7669,3792],{"class":112},[82,7671,93],{"class":92},[82,7673,2776],{"class":112},[82,7675,7650],{"class":92},[82,7677,2283],{"class":88},[82,7679,3689],{"class":92},[82,7681,3792],{"class":112},[82,7683,3814],{"class":92},[82,7685,7686,7688,7690,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717],{"class":84,"line":413},[82,7687,3985],{"class":92},[82,7689,3792],{"class":112},[82,7691,7692],{"class":96},"\"二维数组第一个元素的首地址:\"",[82,7694,3792],{"class":112},[82,7696,93],{"class":92},[82,7698,2776],{"class":112},[82,7700,3187],{"class":92},[82,7702,3111],{"class":112},[82,7704,6501],{"class":92},[82,7706,2244],{"class":88},[82,7708,7496],{"class":92},[82,7710,2244],{"class":88},[82,7712,3689],{"class":92},[82,7714,3792],{"class":112},[82,7716,3857],{"class":92},[82,7718,7719],{"class":2828},"\u002F\u002F对于数，要加取址符\n",[2671,7721,7722],{},"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":78,"searchDepth":157,"depth":157,"links":7724},[7725,7726,7727,7735,7736,7742,7747],{"id":2717,"depth":157,"text":2718},{"id":2724,"depth":157,"text":2725},{"id":2739,"depth":157,"text":2740,"children":7728},[7729,7730,7731,7732,7733,7734],{"id":2743,"depth":404,"text":2744},{"id":2788,"depth":404,"text":2789},{"id":2854,"depth":404,"text":2855},{"id":3773,"depth":404,"text":3774},{"id":3863,"depth":404,"text":3864},{"id":3959,"depth":404,"text":3960},{"id":4001,"depth":157,"text":4002},{"id":4069,"depth":157,"text":4070,"children":7737},[7738,7739,7740,7741],{"id":4073,"depth":404,"text":4074},{"id":4095,"depth":404,"text":4096},{"id":4104,"depth":404,"text":4105},{"id":4113,"depth":404,"text":4114},{"id":4122,"depth":157,"text":4123,"children":7743},[7744,7745,7746],{"id":4126,"depth":404,"text":4127},{"id":4805,"depth":404,"text":4806},{"id":6217,"depth":404,"text":6218},{"id":6357,"depth":157,"text":6358,"children":7748},[7749,7750],{"id":6361,"depth":404,"text":6362},{"id":7389,"depth":404,"text":7390},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2709,"description":78},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7757,"title":7758,"body":7759,"description":78,"extension":2700,"meta":8857,"navigation":485,"path":8858,"seo":8859,"stem":8860,"__hash__":8861},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7760,"toc":8849},[7761,7764,7768,7775,7783,7786,7851,7855,7858,7934,7938,7941,7944,7947,8160,8164,8169,8233,8238,8305,8310,8401,8404,8509,8513,8516,8522,8666,8670,8673,8687,8690,8735,8738,8846],[10,7762,7758],{"id":7763},"_2函数",[14,7765,7767],{"id":7766},"_21函数概述","2.1函数概述",[26,7769,7770,7773],{},[29,7771,7772],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,7774,246],{},[73,7776,7781],{"className":7777,"code":7779,"language":7780,"meta":78},[7778],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[32,7782,7779],{"__ignoreMap":78},[19,7784,7785],{},"小案例",[73,7787,7789],{"className":2762,"code":7788,"language":2764,"meta":78,"style":78},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[32,7790,7791,7796,7819,7823,7840,7847],{"__ignoreMap":78},[82,7792,7793],{"class":84,"line":85},[82,7794,7795],{"class":2828},"\u002F\u002Fnum1,num2形参\n",[82,7797,7798,7800,7803,7805,7807,7810,7812,7814,7817],{"class":84,"line":157},[82,7799,2776],{"class":112},[82,7801,7802],{"class":2384}," add",[82,7804,93],{"class":92},[82,7806,2776],{"class":112},[82,7808,7809],{"class":108}," num1",[82,7811,3136],{"class":92},[82,7813,2776],{"class":112},[82,7815,7816],{"class":108}," num2",[82,7818,119],{"class":92},[82,7820,7821],{"class":84,"line":404},[82,7822,4161],{"class":92},[82,7824,7825,7827,7830,7832,7835,7837],{"class":84,"line":413},[82,7826,4585],{"class":112},[82,7828,7829],{"class":92}," sum",[82,7831,113],{"class":112},[82,7833,7834],{"class":92},"num1",[82,7836,2249],{"class":112},[82,7838,7839],{"class":92},"num2;\n",[82,7841,7842,7844],{"class":84,"line":508},[82,7843,6685],{"class":112},[82,7845,7846],{"class":92}," sum;\n",[82,7848,7849],{"class":84,"line":513},[82,7850,1391],{"class":92},[14,7852,7854],{"id":7853},"_22函数调用","2.2函数调用",[19,7856,7857],{},"调用刚刚写的求和函数",[73,7859,7861],{"className":2762,"code":7860,"language":2764,"meta":78,"style":78},"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",[32,7862,7863,7871,7875,7880,7892,7904,7913,7918,7930],{"__ignoreMap":78},[82,7864,7865,7867,7869],{"class":84,"line":85},[82,7866,2776],{"class":112},[82,7868,4573],{"class":2384},[82,7870,4576],{"class":92},[82,7872,7873],{"class":84,"line":157},[82,7874,4161],{"class":92},[82,7876,7877],{"class":84,"line":404},[82,7878,7879],{"class":2828},"    \u002F\u002Fa,b实参\n",[82,7881,7882,7884,7886,7888,7890],{"class":84,"line":413},[82,7883,4585],{"class":112},[82,7885,4014],{"class":92},[82,7887,113],{"class":112},[82,7889,2244],{"class":88},[82,7891,3909],{"class":92},[82,7893,7894,7896,7898,7900,7902],{"class":84,"line":508},[82,7895,4585],{"class":112},[82,7897,5432],{"class":92},[82,7899,113],{"class":112},[82,7901,2244],{"class":88},[82,7903,3909],{"class":92},[82,7905,7906,7908,7910],{"class":84,"line":513},[82,7907,4612],{"class":92},[82,7909,4045],{"class":112},[82,7911,7912],{"class":92},"a,b;\n",[82,7914,7915],{"class":84,"line":1388},[82,7916,7917],{"class":2828},"    \u002F\u002F调用函数时，实参值传给了形参\n",[82,7919,7920,7922,7924,7927],{"class":84,"line":1394},[82,7921,4166],{"class":92},[82,7923,3792],{"class":112},[82,7925,7926],{"class":2384},"add",[82,7928,7929],{"class":92},"(a,b);\n",[82,7931,7932],{"class":84,"line":1399},[82,7933,1391],{"class":92},[14,7935,7937],{"id":7936},"_23值传递","2.3值传递",[19,7939,7940],{},"值传递就是函数调用时实参将数值传给形参",[19,7942,7943],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7945,7946],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[73,7948,7950],{"className":2762,"code":7949,"language":2764,"meta":78,"style":78},"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",[32,7951,7952,7974,7978,7991,8008,8026,8037,8046,8055,8068,8084,8100,8109,8113,8121,8125,8137,8149,8156],{"__ignoreMap":78},[82,7953,7954,7957,7960,7962,7964,7966,7968,7970,7972],{"class":84,"line":85},[82,7955,7956],{"class":112},"void",[82,7958,7959],{"class":2384}," swap",[82,7961,93],{"class":92},[82,7963,2776],{"class":112},[82,7965,7809],{"class":108},[82,7967,3136],{"class":92},[82,7969,2776],{"class":112},[82,7971,7816],{"class":108},[82,7973,119],{"class":92},[82,7975,7976],{"class":84,"line":157},[82,7977,4161],{"class":92},[82,7979,7980,7982,7984,7987,7989],{"class":84,"line":404},[82,7981,4166],{"class":92},[82,7983,3792],{"class":112},[82,7985,7986],{"class":96},"\"交换前：\"",[82,7988,3792],{"class":112},[82,7990,3814],{"class":92},[82,7992,7993,7995,7997,8000,8002,8004,8006],{"class":84,"line":413},[82,7994,4166],{"class":92},[82,7996,3792],{"class":112},[82,7998,7999],{"class":96},"\"num1=\"",[82,8001,3792],{"class":112},[82,8003,7834],{"class":92},[82,8005,3792],{"class":112},[82,8007,3814],{"class":92},[82,8009,8010,8012,8014,8017,8019,8022,8024],{"class":84,"line":508},[82,8011,4166],{"class":92},[82,8013,3792],{"class":112},[82,8015,8016],{"class":96},"\"num2=\"",[82,8018,3792],{"class":112},[82,8020,8021],{"class":92},"num2",[82,8023,3792],{"class":112},[82,8025,3814],{"class":92},[82,8027,8028,8030,8032,8034],{"class":84,"line":513},[82,8029,4585],{"class":112},[82,8031,6850],{"class":92},[82,8033,113],{"class":112},[82,8035,8036],{"class":92},"num1;\n",[82,8038,8039,8042,8044],{"class":84,"line":1388},[82,8040,8041],{"class":92},"    num1",[82,8043,113],{"class":112},[82,8045,7839],{"class":92},[82,8047,8048,8051,8053],{"class":84,"line":1394},[82,8049,8050],{"class":92},"    num2",[82,8052,113],{"class":112},[82,8054,6875],{"class":92},[82,8056,8057,8059,8061,8064,8066],{"class":84,"line":1399},[82,8058,4166],{"class":92},[82,8060,3792],{"class":112},[82,8062,8063],{"class":96},"\"交换后：\"",[82,8065,3792],{"class":112},[82,8067,3814],{"class":92},[82,8069,8070,8072,8074,8076,8078,8080,8082],{"class":84,"line":1430},[82,8071,4166],{"class":92},[82,8073,3792],{"class":112},[82,8075,7999],{"class":96},[82,8077,3792],{"class":112},[82,8079,7834],{"class":92},[82,8081,3792],{"class":112},[82,8083,3814],{"class":92},[82,8085,8086,8088,8090,8092,8094,8096,8098],{"class":84,"line":1818},[82,8087,4166],{"class":92},[82,8089,3792],{"class":112},[82,8091,8016],{"class":96},[82,8093,3792],{"class":112},[82,8095,8021],{"class":92},[82,8097,3792],{"class":112},[82,8099,3814],{"class":92},[82,8101,8102,8104,8106],{"class":84,"line":2082},[82,8103,6685],{"class":112},[82,8105,2825],{"class":92},[82,8107,8108],{"class":2828},"\u002F\u002F或者不写\n",[82,8110,8111],{"class":84,"line":2233},[82,8112,1391],{"class":92},[82,8114,8115,8117,8119],{"class":84,"line":2255},[82,8116,2776],{"class":112},[82,8118,4573],{"class":2384},[82,8120,4576],{"class":92},[82,8122,8123],{"class":84,"line":2260},[82,8124,4161],{"class":92},[82,8126,8127,8129,8131,8133,8135],{"class":84,"line":2298},[82,8128,4585],{"class":112},[82,8130,4014],{"class":92},[82,8132,113],{"class":112},[82,8134,440],{"class":88},[82,8136,3909],{"class":92},[82,8138,8139,8141,8143,8145,8147],{"class":84,"line":2303},[82,8140,4585],{"class":112},[82,8142,5432],{"class":92},[82,8144,113],{"class":112},[82,8146,3451],{"class":88},[82,8148,3909],{"class":92},[82,8150,8151,8154],{"class":84,"line":2321},[82,8152,8153],{"class":2384},"    swap",[82,8155,7929],{"class":92},[82,8157,8158],{"class":84,"line":2533},[82,8159,1391],{"class":92},[14,8161,8163],{"id":8162},"_24函数的常见形式","2.4函数的常见形式",[26,8165,8166],{},[29,8167,8168],{},"无参无返",[73,8170,8172],{"className":2762,"code":8171,"language":2764,"meta":78,"style":78},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[32,8173,8174,8183,8187,8200,8204,8212,8216,8221,8229],{"__ignoreMap":78},[82,8175,8176,8178,8181],{"class":84,"line":85},[82,8177,7956],{"class":112},[82,8179,8180],{"class":2384}," test01",[82,8182,4576],{"class":92},[82,8184,8185],{"class":84,"line":157},[82,8186,4161],{"class":92},[82,8188,8189,8191,8193,8196,8198],{"class":84,"line":404},[82,8190,4166],{"class":92},[82,8192,3792],{"class":112},[82,8194,8195],{"class":96},"\"你好\"",[82,8197,3792],{"class":112},[82,8199,3814],{"class":92},[82,8201,8202],{"class":84,"line":413},[82,8203,1391],{"class":92},[82,8205,8206,8208,8210],{"class":84,"line":508},[82,8207,2776],{"class":112},[82,8209,4573],{"class":2384},[82,8211,4576],{"class":92},[82,8213,8214],{"class":84,"line":513},[82,8215,4161],{"class":92},[82,8217,8218],{"class":84,"line":1388},[82,8219,8220],{"class":2828},"    \u002F\u002F函数调用\n",[82,8222,8223,8226],{"class":84,"line":1394},[82,8224,8225],{"class":2384},"    test01",[82,8227,8228],{"class":92},"();\n",[82,8230,8231],{"class":84,"line":1399},[82,8232,1391],{"class":92},[26,8234,8235],{"start":157},[29,8236,8237],{},"有参无返",[73,8239,8241],{"className":2762,"code":8240,"language":2764,"meta":78,"style":78},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[32,8242,8243,8258,8262,8274,8278,8286,8290,8301],{"__ignoreMap":78},[82,8244,8245,8247,8250,8252,8254,8256],{"class":84,"line":85},[82,8246,7956],{"class":112},[82,8248,8249],{"class":2384}," test02",[82,8251,93],{"class":92},[82,8253,2776],{"class":112},[82,8255,4014],{"class":108},[82,8257,119],{"class":92},[82,8259,8260],{"class":84,"line":157},[82,8261,4161],{"class":92},[82,8263,8264,8266,8268,8270,8272],{"class":84,"line":404},[82,8265,4166],{"class":92},[82,8267,3792],{"class":112},[82,8269,8195],{"class":96},[82,8271,3792],{"class":112},[82,8273,3814],{"class":92},[82,8275,8276],{"class":84,"line":413},[82,8277,1391],{"class":92},[82,8279,8280,8282,8284],{"class":84,"line":508},[82,8281,2776],{"class":112},[82,8283,4573],{"class":2384},[82,8285,4576],{"class":92},[82,8287,8288],{"class":84,"line":513},[82,8289,4161],{"class":92},[82,8291,8292,8295,8297,8299],{"class":84,"line":1388},[82,8293,8294],{"class":2384},"    test02",[82,8296,93],{"class":92},[82,8298,3069],{"class":88},[82,8300,5318],{"class":92},[82,8302,8303],{"class":84,"line":1394},[82,8304,1391],{"class":92},[26,8306,8307],{"start":404},[29,8308,8309],{},"无参有返",[73,8311,8313],{"className":2762,"code":8312,"language":2764,"meta":78,"style":78},"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",[32,8314,8315,8324,8328,8340,8349,8353,8361,8365,8378,8397],{"__ignoreMap":78},[82,8316,8317,8319,8322],{"class":84,"line":85},[82,8318,2776],{"class":112},[82,8320,8321],{"class":2384}," test03",[82,8323,4576],{"class":92},[82,8325,8326],{"class":84,"line":157},[82,8327,4161],{"class":92},[82,8329,8330,8332,8334,8336,8338],{"class":84,"line":404},[82,8331,4166],{"class":92},[82,8333,3792],{"class":112},[82,8335,8195],{"class":96},[82,8337,3792],{"class":112},[82,8339,3814],{"class":92},[82,8341,8342,8344,8347],{"class":84,"line":413},[82,8343,6685],{"class":112},[82,8345,8346],{"class":88}," 100",[82,8348,3909],{"class":92},[82,8350,8351],{"class":84,"line":508},[82,8352,1391],{"class":92},[82,8354,8355,8357,8359],{"class":84,"line":513},[82,8356,2776],{"class":112},[82,8358,4573],{"class":2384},[82,8360,4576],{"class":92},[82,8362,8363],{"class":84,"line":1388},[82,8364,4161],{"class":92},[82,8366,8367,8369,8371,8373,8376],{"class":84,"line":1394},[82,8368,4585],{"class":112},[82,8370,7809],{"class":92},[82,8372,113],{"class":112},[82,8374,8375],{"class":2384},"test03",[82,8377,8228],{"class":92},[82,8379,8380,8382,8384,8386,8388,8390,8392,8394],{"class":84,"line":1399},[82,8381,4166],{"class":92},[82,8383,3792],{"class":112},[82,8385,7999],{"class":96},[82,8387,3792],{"class":112},[82,8389,7834],{"class":92},[82,8391,3792],{"class":112},[82,8393,3857],{"class":92},[82,8395,8396],{"class":2828}," \u002F\u002F100\n",[82,8398,8399],{"class":84,"line":1430},[82,8400,1391],{"class":92},[19,8402,8403],{},"4.有参有返",[73,8405,8407],{"className":2762,"code":8406,"language":2764,"meta":78,"style":78},"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",[32,8408,8409,8424,8428,8441,8447,8451,8460,8464,8476,8490,8505],{"__ignoreMap":78},[82,8410,8411,8413,8416,8418,8420,8422],{"class":84,"line":85},[82,8412,2776],{"class":112},[82,8414,8415],{"class":2384}," test04",[82,8417,93],{"class":92},[82,8419,2776],{"class":112},[82,8421,4014],{"class":108},[82,8423,119],{"class":92},[82,8425,8426],{"class":84,"line":157},[82,8427,4161],{"class":92},[82,8429,8430,8432,8434,8437,8439],{"class":84,"line":404},[82,8431,4166],{"class":92},[82,8433,3792],{"class":112},[82,8435,8436],{"class":96},"\"hello\"",[82,8438,3792],{"class":112},[82,8440,3814],{"class":92},[82,8442,8443,8445],{"class":84,"line":413},[82,8444,6685],{"class":112},[82,8446,4048],{"class":92},[82,8448,8449],{"class":84,"line":508},[82,8450,1391],{"class":92},[82,8452,8453,8455,8458],{"class":84,"line":513},[82,8454,2776],{"class":112},[82,8456,8457],{"class":2384}," mian",[82,8459,4576],{"class":92},[82,8461,8462],{"class":84,"line":1388},[82,8463,4161],{"class":92},[82,8465,8466,8468,8470,8472,8474],{"class":84,"line":1394},[82,8467,4585],{"class":112},[82,8469,5432],{"class":92},[82,8471,113],{"class":112},[82,8473,2283],{"class":88},[82,8475,3909],{"class":92},[82,8477,8478,8480,8482,8484,8487],{"class":84,"line":1399},[82,8479,4585],{"class":112},[82,8481,5448],{"class":92},[82,8483,113],{"class":112},[82,8485,8486],{"class":2384},"test04",[82,8488,8489],{"class":92},"(b);\n",[82,8491,8492,8494,8496,8498,8500,8502],{"class":84,"line":1430},[82,8493,4166],{"class":92},[82,8495,3792],{"class":112},[82,8497,3046],{"class":92},[82,8499,3792],{"class":112},[82,8501,3857],{"class":92},[82,8503,8504],{"class":2828}," \u002F\u002F1\n",[82,8506,8507],{"class":84,"line":1818},[82,8508,1391],{"class":92},[14,8510,8512],{"id":8511},"_25函数的声明","2.5函数的声明",[19,8514,8515],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8517,8518,8519],{},"函数的",[2913,8520,8521],{},"声明可以多次，但是函数的定义只能有一次",[73,8523,8525],{"className":2762,"code":8524,"language":2764,"meta":78,"style":78},"\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",[32,8526,8527,8532,8537,8562,8571,8575,8587,8599,8615,8619,8639,8643,8662],{"__ignoreMap":78},[82,8528,8529],{"class":84,"line":85},[82,8530,8531],{"class":2828},"\u002F\u002F函数声明\n",[82,8533,8534],{"class":84,"line":157},[82,8535,8536],{"class":2828},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[82,8538,8539,8541,8544,8546,8548,8550,8552,8554,8556,8559],{"class":84,"line":404},[82,8540,2776],{"class":112},[82,8542,8543],{"class":2384}," max",[82,8545,93],{"class":92},[82,8547,2776],{"class":112},[82,8549,4014],{"class":108},[82,8551,3136],{"class":92},[82,8553,2776],{"class":112},[82,8555,5432],{"class":108},[82,8557,8558],{"class":92},");",[82,8560,8561],{"class":2828},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[82,8563,8564,8566,8568],{"class":84,"line":413},[82,8565,2776],{"class":112},[82,8567,4573],{"class":2384},[82,8569,8570],{"class":92},"() \n",[82,8572,8573],{"class":84,"line":508},[82,8574,4161],{"class":92},[82,8576,8577,8579,8581,8583,8585],{"class":84,"line":513},[82,8578,4585],{"class":112},[82,8580,4014],{"class":92},[82,8582,113],{"class":112},[82,8584,440],{"class":88},[82,8586,3909],{"class":92},[82,8588,8589,8591,8593,8595,8597],{"class":84,"line":1388},[82,8590,4585],{"class":112},[82,8592,5432],{"class":92},[82,8594,113],{"class":112},[82,8596,3451],{"class":88},[82,8598,3909],{"class":92},[82,8600,8601,8603,8605,8608,8611,8613],{"class":84,"line":1394},[82,8602,4166],{"class":92},[82,8604,3792],{"class":112},[82,8606,8607],{"class":2384},"max",[82,8609,8610],{"class":92},"(a,b)",[82,8612,3792],{"class":112},[82,8614,3814],{"class":92},[82,8616,8617],{"class":84,"line":1399},[82,8618,1391],{"class":92},[82,8620,8621,8623,8625,8627,8629,8631,8633,8635,8637],{"class":84,"line":1430},[82,8622,2776],{"class":112},[82,8624,8543],{"class":2384},[82,8626,93],{"class":92},[82,8628,2776],{"class":112},[82,8630,4014],{"class":108},[82,8632,3136],{"class":92},[82,8634,2776],{"class":112},[82,8636,5432],{"class":108},[82,8638,119],{"class":92},[82,8640,8641],{"class":84,"line":1818},[82,8642,4161],{"class":92},[82,8644,8645,8647,8649,8651,8653,8655,8657,8659],{"class":84,"line":2082},[82,8646,6685],{"class":112},[82,8648,4014],{"class":92},[82,8650,3709],{"class":112},[82,8652,3021],{"class":92},[82,8654,3735],{"class":112},[82,8656,323],{"class":92},[82,8658,3608],{"class":112},[82,8660,8661],{"class":92},"b;\n",[82,8663,8664],{"class":84,"line":2233},[82,8665,1391],{"class":92},[14,8667,8669],{"id":8668},"_26函数的分文件编写","2.6函数的分文件编写",[19,8671,8672],{},"4个步骤：",[3755,8674,8675,8678,8681,8684],{},[29,8676,8677],{},"1.创建后缀名为.h的头文件",[29,8679,8680],{},"2.创建后缀名为.cpp的源文件",[29,8682,8683],{},"3.在头文件中写函数的定义",[29,8685,8686],{},"4.在源文件中写函数的定义\n示例：",[19,8688,8689],{},"头文件：swap.h",[73,8691,8693],{"className":2762,"code":8692,"language":2764,"meta":78,"style":78},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[32,8694,8695,8701,8711,8715],{"__ignoreMap":78},[82,8696,8697,8699],{"class":84,"line":85},[82,8698,4550],{"class":112},[82,8700,4553],{"class":96},[82,8702,8703,8705,8707,8709],{"class":84,"line":157},[82,8704,4558],{"class":112},[82,8706,4561],{"class":112},[82,8708,4564],{"class":2384},[82,8710,3909],{"class":92},[82,8712,8713],{"class":84,"line":404},[82,8714,8531],{"class":2828},[82,8716,8717,8719,8721,8723,8725,8727,8729,8731,8733],{"class":84,"line":413},[82,8718,7956],{"class":112},[82,8720,7959],{"class":2384},[82,8722,93],{"class":92},[82,8724,2776],{"class":112},[82,8726,4014],{"class":108},[82,8728,3136],{"class":92},[82,8730,2776],{"class":112},[82,8732,5432],{"class":108},[82,8734,5318],{"class":92},[19,8736,8737],{},"源文件：swap.cpp",[73,8739,8741],{"className":2762,"code":8740,"language":2764,"meta":78,"style":78},"#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",[32,8742,8743,8750,8755,8775,8779,8790,8799,8808,8825,8842],{"__ignoreMap":78},[82,8744,8745,8747],{"class":84,"line":85},[82,8746,4550],{"class":112},[82,8748,8749],{"class":96}," \"swap.h\"\n",[82,8751,8752],{"class":84,"line":157},[82,8753,8754],{"class":2828},"\u002F\u002F函数的定义\n",[82,8756,8757,8759,8761,8763,8765,8767,8769,8771,8773],{"class":84,"line":404},[82,8758,7956],{"class":112},[82,8760,7959],{"class":2384},[82,8762,93],{"class":92},[82,8764,2776],{"class":112},[82,8766,4014],{"class":108},[82,8768,3136],{"class":92},[82,8770,2776],{"class":112},[82,8772,5432],{"class":108},[82,8774,119],{"class":92},[82,8776,8777],{"class":84,"line":413},[82,8778,4161],{"class":92},[82,8780,8781,8783,8785,8787],{"class":84,"line":508},[82,8782,4585],{"class":112},[82,8784,6850],{"class":92},[82,8786,113],{"class":112},[82,8788,8789],{"class":92},"a;\n",[82,8791,8792,8795,8797],{"class":84,"line":513},[82,8793,8794],{"class":92},"    a",[82,8796,113],{"class":112},[82,8798,8661],{"class":92},[82,8800,8801,8804,8806],{"class":84,"line":1388},[82,8802,8803],{"class":92},"    b",[82,8805,113],{"class":112},[82,8807,6875],{"class":92},[82,8809,8810,8812,8814,8817,8819,8821,8823],{"class":84,"line":1394},[82,8811,4166],{"class":92},[82,8813,3792],{"class":112},[82,8815,8816],{"class":96},"\"a=\"",[82,8818,3792],{"class":112},[82,8820,323],{"class":92},[82,8822,3792],{"class":112},[82,8824,3814],{"class":92},[82,8826,8827,8829,8831,8834,8836,8838,8840],{"class":84,"line":1399},[82,8828,4166],{"class":92},[82,8830,3792],{"class":112},[82,8832,8833],{"class":96},"\"b=\"",[82,8835,3792],{"class":112},[82,8837,3021],{"class":92},[82,8839,3792],{"class":112},[82,8841,3814],{"class":92},[82,8843,8844],{"class":84,"line":1430},[82,8845,1391],{"class":92},[2671,8847,8848],{},"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":78,"searchDepth":157,"depth":157,"links":8850},[8851,8852,8853,8854,8855,8856],{"id":7766,"depth":157,"text":7767},{"id":7853,"depth":157,"text":7854},{"id":7936,"depth":157,"text":7937},{"id":8162,"depth":157,"text":8163},{"id":8511,"depth":157,"text":8512},{"id":8668,"depth":157,"text":8669},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7758,"description":78},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8863,"title":8864,"body":8865,"description":8872,"extension":2700,"meta":10276,"navigation":485,"path":10277,"seo":10278,"stem":10279,"__hash__":10280},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8866,"toc":10266},[8867,8870,8873,8877,9039,9043,9046,9049,9052,9055,9195,9199,9202,9205,9208,9273,9277,9282,9349,9352,9356,9359,9370,9375,9395,9398,9403,9422,9425,9429,9448,9451,9455,9690,9694,9697,9700,9703,9865,9868,9872,9875,9881,10263],[10,8868,8864],{"id":8869},"_3指针",[19,8871,8872],{},"通过指针保存一个地址，指针就是个地址",[14,8874,8876],{"id":8875},"_31定义指针","3.1定义指针",[73,8878,8880],{"className":2762,"code":8879,"language":2764,"meta":78,"style":78},"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",[32,8881,8882,8890,8894,8899,8911,8916,8924,8934,8952,8972,8976,8981,8986,8991,9005,9021,9035],{"__ignoreMap":78},[82,8883,8884,8886,8888],{"class":84,"line":85},[82,8885,2776],{"class":112},[82,8887,4573],{"class":2384},[82,8889,4576],{"class":92},[82,8891,8892],{"class":84,"line":157},[82,8893,4161],{"class":92},[82,8895,8896],{"class":84,"line":404},[82,8897,8898],{"class":2828},"    \u002F\u002F1.定义指针\n",[82,8900,8901,8903,8905,8907,8909],{"class":84,"line":413},[82,8902,4585],{"class":112},[82,8904,4014],{"class":92},[82,8906,113],{"class":112},[82,8908,440],{"class":88},[82,8910,3909],{"class":92},[82,8912,8913],{"class":84,"line":508},[82,8914,8915],{"class":2828},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[82,8917,8918,8921],{"class":84,"line":513},[82,8919,8920],{"class":112},"    int*",[82,8922,8923],{"class":92},"p;\n",[82,8925,8926,8929,8932],{"class":84,"line":1388},[82,8927,8928],{"class":92},"    p",[82,8930,8931],{"class":112},"=&",[82,8933,8789],{"class":92},[82,8935,8936,8938,8940,8943,8946,8948,8950],{"class":84,"line":1394},[82,8937,4166],{"class":92},[82,8939,3792],{"class":112},[82,8941,8942],{"class":96},"\"a的地址为：\"",[82,8944,8945],{"class":112},"\u003C\u003C&",[82,8947,323],{"class":92},[82,8949,3792],{"class":112},[82,8951,3814],{"class":92},[82,8953,8954,8956,8958,8961,8963,8965,8967,8969],{"class":84,"line":1399},[82,8955,4166],{"class":92},[82,8957,3792],{"class":112},[82,8959,8960],{"class":96},"\"指针p为：\"",[82,8962,3792],{"class":112},[82,8964,19],{"class":92},[82,8966,3792],{"class":112},[82,8968,3857],{"class":92},[82,8970,8971],{"class":2828},"\u002F\u002F指针p表示的就是a的地址\n",[82,8973,8974],{"class":84,"line":1430},[82,8975,486],{"emptyLinePlaceholder":485},[82,8977,8978],{"class":84,"line":1818},[82,8979,8980],{"class":2828},"    \u002F\u002F2.使用指针\n",[82,8982,8983],{"class":84,"line":2082},[82,8984,8985],{"class":2828},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[82,8987,8988],{"class":84,"line":2233},[82,8989,8990],{"class":2828},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[82,8992,8993,8996,8998,9000,9003],{"class":84,"line":2255},[82,8994,8995],{"class":112},"    *",[82,8997,19],{"class":92},[82,8999,113],{"class":112},[82,9001,9002],{"class":88},"1000",[82,9004,3909],{"class":92},[82,9006,9007,9009,9012,9014,9016,9018],{"class":84,"line":2260},[82,9008,4166],{"class":92},[82,9010,9011],{"class":112},"\u003C\u003C*",[82,9013,19],{"class":92},[82,9015,3792],{"class":112},[82,9017,3857],{"class":92},[82,9019,9020],{"class":2828},"\u002F\u002F1000\n",[82,9022,9023,9025,9027,9029,9031,9033],{"class":84,"line":2298},[82,9024,4166],{"class":92},[82,9026,3792],{"class":112},[82,9028,323],{"class":92},[82,9030,3792],{"class":112},[82,9032,3857],{"class":92},[82,9034,9020],{"class":2828},[82,9036,9037],{"class":84,"line":2303},[82,9038,1391],{"class":92},[14,9040,9042],{"id":9041},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,9044,9045],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,9047,9048],{},"在32位操作系统下：占用4个字节空间",[19,9050,9051],{},"在64位操作系统下：占用8个字节空间",[19,9053,9054],{},"上方是不管啥数据类型的",[73,9056,9058],{"className":2762,"code":9057,"language":2764,"meta":78,"style":78},"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",[32,9059,9060,9068,9072,9077,9089,9094,9099,9104,9117,9139,9165,9191],{"__ignoreMap":78},[82,9061,9062,9064,9066],{"class":84,"line":85},[82,9063,2776],{"class":112},[82,9065,4573],{"class":2384},[82,9067,4576],{"class":92},[82,9069,9070],{"class":84,"line":157},[82,9071,4161],{"class":92},[82,9073,9074],{"class":84,"line":404},[82,9075,9076],{"class":2828},"    \u002F\u002F指针所占内存空间\n",[82,9078,9079,9081,9083,9085,9087],{"class":84,"line":413},[82,9080,4585],{"class":112},[82,9082,4014],{"class":92},[82,9084,113],{"class":112},[82,9086,440],{"class":88},[82,9088,3909],{"class":92},[82,9090,9091],{"class":84,"line":508},[82,9092,9093],{"class":2828},"    \u002F\u002Fint *p;\n",[82,9095,9096],{"class":84,"line":513},[82,9097,9098],{"class":2828},"    \u002F\u002Fp=&a;\n",[82,9100,9101],{"class":84,"line":1388},[82,9102,9103],{"class":2828},"    \u002F\u002F上述可以写为以下：\n",[82,9105,9106,9108,9111,9113,9115],{"class":84,"line":1394},[82,9107,4585],{"class":112},[82,9109,9110],{"class":112}," *",[82,9112,19],{"class":92},[82,9114,8931],{"class":112},[82,9116,8789],{"class":92},[82,9118,9119,9122,9124,9127,9129,9132,9134,9136],{"class":84,"line":1399},[82,9120,9121],{"class":92},"    cout ",[82,9123,3792],{"class":112},[82,9125,9126],{"class":96},"\"sizeof(int *)\"",[82,9128,3988],{"class":112},[82,9130,9131],{"class":92},"(p)",[82,9133,3792],{"class":112},[82,9135,3857],{"class":92},[82,9137,9138],{"class":2828},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[82,9140,9141,9143,9145,9147,9149,9151,9153,9155,9157,9159,9162],{"class":84,"line":1430},[82,9142,9121],{"class":92},[82,9144,3792],{"class":112},[82,9146,9126],{"class":96},[82,9148,3988],{"class":112},[82,9150,93],{"class":92},[82,9152,2776],{"class":112},[82,9154,9110],{"class":112},[82,9156,3187],{"class":92},[82,9158,3792],{"class":112},[82,9160,9161],{"class":92},"endl",[82,9163,9164],{"class":2828},"  \u002F\u002F4字节(32位的话)\n",[82,9166,9167,9169,9171,9174,9176,9178,9180,9182,9184,9186,9188],{"class":84,"line":1818},[82,9168,9121],{"class":92},[82,9170,3792],{"class":112},[82,9172,9173],{"class":96},"\"sizeof(char *)\"",[82,9175,3988],{"class":112},[82,9177,93],{"class":92},[82,9179,2865],{"class":112},[82,9181,9110],{"class":112},[82,9183,3187],{"class":92},[82,9185,3792],{"class":112},[82,9187,3857],{"class":92},[82,9189,9190],{"class":2828}," \u002F\u002F4字节(32位的话)\n",[82,9192,9193],{"class":84,"line":2082},[82,9194,1391],{"class":92},[14,9196,9198],{"id":9197},"_33空指针","3.3空指针",[19,9200,9201],{},"空指针：指针变量指向内存中编号为0的空间",[19,9203,9204],{},"用途：初始化指针变量",[19,9206,9207],{},"注意：空指针指向的内存是不可以访问的",[73,9209,9211],{"className":2762,"code":9210,"language":2764,"meta":78,"style":78},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[32,9212,9213,9221,9225,9230,9244,9249,9264,9269],{"__ignoreMap":78},[82,9214,9215,9217,9219],{"class":84,"line":85},[82,9216,2776],{"class":112},[82,9218,4573],{"class":2384},[82,9220,4576],{"class":92},[82,9222,9223],{"class":84,"line":157},[82,9224,4161],{"class":92},[82,9226,9227],{"class":84,"line":404},[82,9228,9229],{"class":2828},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[82,9231,9232,9234,9236,9238,9240,9242],{"class":84,"line":413},[82,9233,4585],{"class":112},[82,9235,9110],{"class":112},[82,9237,19],{"class":92},[82,9239,113],{"class":112},[82,9241,4992],{"class":88},[82,9243,3909],{"class":92},[82,9245,9246],{"class":84,"line":508},[82,9247,9248],{"class":2828},"    \u002F\u002F2.空指针不能进行访问\n",[82,9250,9251,9253,9255,9257,9259,9261],{"class":84,"line":513},[82,9252,8995],{"class":112},[82,9254,19],{"class":92},[82,9256,113],{"class":112},[82,9258,3069],{"class":88},[82,9260,2825],{"class":92},[82,9262,9263],{"class":2828},"\u002F\u002F直接报错，压根不能访问\n",[82,9265,9266],{"class":84,"line":1388},[82,9267,9268],{"class":2828},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[82,9270,9271],{"class":84,"line":1394},[82,9272,1391],{"class":92},[14,9274,9276],{"id":9275},"_34野指针","3.4野指针",[19,9278,9279],{},[2913,9280,9281],{},"指针变量指向非法的内存空间",[73,9283,9285],{"className":2762,"code":9284,"language":2764,"meta":78,"style":78},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[32,9286,9287,9295,9299,9328,9333,9345],{"__ignoreMap":78},[82,9288,9289,9291,9293],{"class":84,"line":85},[82,9290,2776],{"class":112},[82,9292,4573],{"class":2384},[82,9294,4576],{"class":92},[82,9296,9297],{"class":84,"line":157},[82,9298,4161],{"class":92},[82,9300,9301,9303,9305,9307,9309,9311,9313,9315,9317,9320,9323,9325],{"class":84,"line":404},[82,9302,4585],{"class":112},[82,9304,9110],{"class":112},[82,9306,19],{"class":92},[82,9308,113],{"class":112},[82,9310,93],{"class":92},[82,9312,2776],{"class":112},[82,9314,9110],{"class":112},[82,9316,3187],{"class":92},[82,9318,9319],{"class":112},"0x",[82,9321,9322],{"class":88},"1100",[82,9324,2825],{"class":92},[82,9326,9327],{"class":2828}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[82,9329,9330],{"class":84,"line":413},[82,9331,9332],{"class":2828},"    \u002F\u002F访问野指针报错\n",[82,9334,9335,9337,9339,9341,9343],{"class":84,"line":508},[82,9336,4166],{"class":92},[82,9338,9011],{"class":112},[82,9340,19],{"class":92},[82,9342,3792],{"class":112},[82,9344,3814],{"class":92},[82,9346,9347],{"class":84,"line":513},[82,9348,1391],{"class":92},[19,9350,9351],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9353,9355],{"id":9354},"_35const修饰指针","3.5const修饰指针",[19,9357,9358],{},"三种情况：",[3755,9360,9361,9364,9367],{},[29,9362,9363],{},"const修饰指针 常量指针",[29,9365,9366],{},"const修饰常量 指针常量",[29,9368,9369],{},"const即修饰指针，又修饰常量",[26,9371,9372],{},[29,9373,9374],{},"常量指针",[73,9376,9378],{"className":2762,"code":9377,"language":2764,"meta":78,"style":78},"const int *p=&a;\n",[32,9379,9380],{"__ignoreMap":78},[82,9381,9382,9385,9387,9389,9391,9393],{"class":84,"line":85},[82,9383,9384],{"class":112},"const",[82,9386,4982],{"class":112},[82,9388,9110],{"class":112},[82,9390,19],{"class":92},[82,9392,8931],{"class":112},[82,9394,8789],{"class":92},[19,9396,9397],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,9399,9400],{"start":157},[29,9401,9402],{},"指针常量",[73,9404,9406],{"className":2762,"code":9405,"language":2764,"meta":78,"style":78},"int *const p=&a;\n",[32,9407,9408],{"__ignoreMap":78},[82,9409,9410,9412,9415,9418,9420],{"class":84,"line":85},[82,9411,2776],{"class":112},[82,9413,9414],{"class":112}," *const",[82,9416,9417],{"class":92}," p",[82,9419,8931],{"class":112},[82,9421,8789],{"class":92},[19,9423,9424],{},"指针的指向不可以改，指针指向的值可以改",[26,9426,9427],{"start":404},[29,9428,9369],{},[73,9430,9432],{"className":2762,"code":9431,"language":2764,"meta":78,"style":78},"const int *const p=&a;\n",[32,9433,9434],{"__ignoreMap":78},[82,9435,9436,9438,9440,9442,9444,9446],{"class":84,"line":85},[82,9437,9384],{"class":112},[82,9439,4982],{"class":112},[82,9441,9414],{"class":112},[82,9443,9417],{"class":92},[82,9445,8931],{"class":112},[82,9447,8789],{"class":92},[19,9449,9450],{},"指针的指向和指针指向的值都不可以改变",[14,9452,9454],{"id":9453},"_36指针和数组","3.6指针和数组",[73,9456,9458],{"className":2762,"code":9457,"language":2764,"meta":78,"style":78},"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",[32,9459,9460,9468,9472,9477,9531,9552,9568,9584,9595,9612,9617,9631,9657,9661,9673,9682,9686],{"__ignoreMap":78},[82,9461,9462,9464,9466],{"class":84,"line":85},[82,9463,2776],{"class":112},[82,9465,4573],{"class":2384},[82,9467,4576],{"class":92},[82,9469,9470],{"class":84,"line":157},[82,9471,4161],{"class":92},[82,9473,9474],{"class":84,"line":404},[82,9475,9476],{"class":2828},"    \u002F\u002F利用指针访问数组中的元素\n",[82,9478,9479,9481,9483,9485,9487,9489,9491,9493,9495,9497,9499,9501,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523,9525,9527,9529],{"class":84,"line":413},[82,9480,4585],{"class":112},[82,9482,6557],{"class":92},[82,9484,440],{"class":88},[82,9486,3689],{"class":92},[82,9488,113],{"class":112},[82,9490,3645],{"class":92},[82,9492,2283],{"class":88},[82,9494,3136],{"class":92},[82,9496,1425],{"class":88},[82,9498,3136],{"class":92},[82,9500,2841],{"class":88},[82,9502,3136],{"class":92},[82,9504,3051],{"class":88},[82,9506,3136],{"class":92},[82,9508,3077],{"class":88},[82,9510,3136],{"class":92},[82,9512,3102],{"class":88},[82,9514,3136],{"class":92},[82,9516,3127],{"class":88},[82,9518,3136],{"class":92},[82,9520,3153],{"class":88},[82,9522,3136],{"class":92},[82,9524,3178],{"class":88},[82,9526,3136],{"class":92},[82,9528,440],{"class":88},[82,9530,6590],{"class":92},[82,9532,9533,9535,9537,9540,9542,9544,9546,9548,9550],{"class":84,"line":508},[82,9534,4166],{"class":92},[82,9536,3792],{"class":112},[82,9538,9539],{"class":96},"\"数组的第一个元素为：\"",[82,9541,3792],{"class":112},[82,9543,6501],{"class":92},[82,9545,2244],{"class":88},[82,9547,3689],{"class":92},[82,9549,3792],{"class":112},[82,9551,3814],{"class":92},[82,9553,9554,9556,9558,9560,9562,9565],{"class":84,"line":513},[82,9555,4585],{"class":112},[82,9557,9110],{"class":112},[82,9559,19],{"class":92},[82,9561,113],{"class":112},[82,9563,9564],{"class":92},"arr;",[82,9566,9567],{"class":2828},"\u002F\u002F注意数才要加取地址符号&\n",[82,9569,9570,9572,9574,9576,9578,9580,9582],{"class":84,"line":1388},[82,9571,4166],{"class":92},[82,9573,3792],{"class":112},[82,9575,9539],{"class":96},[82,9577,9011],{"class":112},[82,9579,19],{"class":92},[82,9581,3792],{"class":112},[82,9583,3814],{"class":92},[82,9585,9586,9588,9590,9592],{"class":84,"line":1394},[82,9587,8928],{"class":92},[82,9589,4892],{"class":112},[82,9591,2825],{"class":92},[82,9593,9594],{"class":2828}," \u002F\u002F让指针向后偏移4个字节\n",[82,9596,9597,9599,9601,9604,9606,9608,9610],{"class":84,"line":1399},[82,9598,4166],{"class":92},[82,9600,3792],{"class":112},[82,9602,9603],{"class":96},"\"数组的第二个元素为：\"",[82,9605,9011],{"class":112},[82,9607,19],{"class":92},[82,9609,3792],{"class":112},[82,9611,3814],{"class":92},[82,9613,9614],{"class":84,"line":1430},[82,9615,9616],{"class":2828},"    \u002F\u002F利用指针遍历数组\n",[82,9618,9619,9621,9623,9626,9628],{"class":84,"line":1818},[82,9620,4585],{"class":112},[82,9622,9110],{"class":112},[82,9624,9625],{"class":92},"p2",[82,9627,113],{"class":112},[82,9629,9630],{"class":92},"arr;\n",[82,9632,9633,9635,9637,9639,9641,9643,9645,9647,9649,9651,9653,9655],{"class":84,"line":2082},[82,9634,1888],{"class":112},[82,9636,4265],{"class":92},[82,9638,2776],{"class":112},[82,9640,5630],{"class":92},[82,9642,113],{"class":112},[82,9644,2244],{"class":88},[82,9646,5637],{"class":92},[82,9648,3659],{"class":112},[82,9650,440],{"class":88},[82,9652,5637],{"class":92},[82,9654,4892],{"class":112},[82,9656,119],{"class":92},[82,9658,9659],{"class":84,"line":2233},[82,9660,4630],{"class":92},[82,9662,9663,9665,9667,9669,9671],{"class":84,"line":2255},[82,9664,6047],{"class":92},[82,9666,9011],{"class":112},[82,9668,9625],{"class":92},[82,9670,3792],{"class":112},[82,9672,3814],{"class":92},[82,9674,9675,9678,9680],{"class":84,"line":2260},[82,9676,9677],{"class":92},"        p2",[82,9679,4892],{"class":112},[82,9681,3909],{"class":92},[82,9683,9684],{"class":84,"line":2298},[82,9685,4787],{"class":92},[82,9687,9688],{"class":84,"line":2303},[82,9689,1391],{"class":92},[14,9691,9693],{"id":9692},"_37指针和函数","3.7指针和函数",[19,9695,9696],{},"利用指针做函数参数，可以修改实参的值",[19,9698,9699],{},"值传递：只改变形参，不改变实参",[19,9701,9702],{},"地址传递：",[73,9704,9706],{"className":2762,"code":9705,"language":2764,"meta":78,"style":78},"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",[32,9707,9708,9733,9737,9749,9760,9770,9774,9782,9786,9798,9810,9815,9831,9846,9861],{"__ignoreMap":78},[82,9709,9710,9712,9714,9716,9718,9720,9723,9725,9727,9729,9731],{"class":84,"line":85},[82,9711,7956],{"class":112},[82,9713,7959],{"class":2384},[82,9715,93],{"class":92},[82,9717,2776],{"class":112},[82,9719,9110],{"class":112},[82,9721,9722],{"class":108},"p1",[82,9724,3136],{"class":92},[82,9726,2776],{"class":112},[82,9728,9110],{"class":112},[82,9730,9625],{"class":108},[82,9732,119],{"class":92},[82,9734,9735],{"class":84,"line":157},[82,9736,4161],{"class":92},[82,9738,9739,9741,9743,9746],{"class":84,"line":404},[82,9740,4585],{"class":112},[82,9742,6850],{"class":92},[82,9744,9745],{"class":112},"=*",[82,9747,9748],{"class":92},"p1;\n",[82,9750,9751,9753,9755,9757],{"class":84,"line":413},[82,9752,8995],{"class":112},[82,9754,9722],{"class":92},[82,9756,9745],{"class":112},[82,9758,9759],{"class":92},"p2;\n",[82,9761,9762,9764,9766,9768],{"class":84,"line":508},[82,9763,8995],{"class":112},[82,9765,9625],{"class":92},[82,9767,113],{"class":112},[82,9769,6875],{"class":92},[82,9771,9772],{"class":84,"line":513},[82,9773,1391],{"class":92},[82,9775,9776,9778,9780],{"class":84,"line":1388},[82,9777,2776],{"class":112},[82,9779,4573],{"class":2384},[82,9781,4576],{"class":92},[82,9783,9784],{"class":84,"line":1394},[82,9785,4161],{"class":92},[82,9787,9788,9790,9792,9794,9796],{"class":84,"line":1399},[82,9789,4585],{"class":112},[82,9791,4014],{"class":92},[82,9793,113],{"class":112},[82,9795,440],{"class":88},[82,9797,3909],{"class":92},[82,9799,9800,9802,9804,9806,9808],{"class":84,"line":1430},[82,9801,4585],{"class":112},[82,9803,5432],{"class":92},[82,9805,113],{"class":112},[82,9807,3451],{"class":88},[82,9809,3909],{"class":92},[82,9811,9812],{"class":84,"line":1818},[82,9813,9814],{"class":2828},"    \u002F\u002F地址传递\n",[82,9816,9817,9819,9821,9823,9826,9828],{"class":84,"line":2082},[82,9818,8153],{"class":2384},[82,9820,93],{"class":92},[82,9822,3111],{"class":112},[82,9824,9825],{"class":92},"a,",[82,9827,3111],{"class":112},[82,9829,9830],{"class":92},"b);\n",[82,9832,9833,9835,9837,9839,9841,9843],{"class":84,"line":2233},[82,9834,4166],{"class":92},[82,9836,3792],{"class":112},[82,9838,323],{"class":92},[82,9840,3792],{"class":112},[82,9842,3857],{"class":92},[82,9844,9845],{"class":2828},"\u002F\u002F20\n",[82,9847,9848,9850,9852,9854,9856,9858],{"class":84,"line":2255},[82,9849,4166],{"class":92},[82,9851,3792],{"class":112},[82,9853,3021],{"class":92},[82,9855,3792],{"class":112},[82,9857,3857],{"class":92},[82,9859,9860],{"class":2828},"\u002F\u002F10\n",[82,9862,9863],{"class":84,"line":2260},[82,9864,1391],{"class":92},[19,9866,9867],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9869,9871],{"id":9870},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9873,9874],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9876,9877,9878,9880],{},"例如数组：int arr",[82,9879,440],{},"={4,3,6,9,1,2,10,8,7,5}",[73,9882,9884],{"className":2762,"code":9883,"language":2764,"meta":78,"style":78},"#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",[32,9885,9886,9892,9902,9926,9930,9961,9965,9999,10003,10021,10025,10036,10051,10066,10070,10074,10078,10082,10086,10094,10098,10103,10157,10169,10181,10186,10194,10198,10203,10228,10232,10246,10255,10259],{"__ignoreMap":78},[82,9887,9888,9890],{"class":84,"line":85},[82,9889,4550],{"class":112},[82,9891,4553],{"class":96},[82,9893,9894,9896,9898,9900],{"class":84,"line":157},[82,9895,4558],{"class":112},[82,9897,4561],{"class":112},[82,9899,4564],{"class":2384},[82,9901,3909],{"class":92},[82,9903,9904,9906,9909,9911,9913,9915,9917,9919,9921,9924],{"class":84,"line":404},[82,9905,7956],{"class":112},[82,9907,9908],{"class":2384}," bubbleSort",[82,9910,93],{"class":92},[82,9912,2776],{"class":112},[82,9914,9110],{"class":112},[82,9916,19],{"class":108},[82,9918,3136],{"class":92},[82,9920,2776],{"class":112},[82,9922,9923],{"class":108}," len",[82,9925,119],{"class":92},[82,9927,9928],{"class":84,"line":413},[82,9929,4161],{"class":92},[82,9931,9932,9934,9936,9938,9940,9942,9944,9946,9948,9951,9953,9955,9957,9959],{"class":84,"line":508},[82,9933,1888],{"class":112},[82,9935,93],{"class":92},[82,9937,2776],{"class":112},[82,9939,5630],{"class":92},[82,9941,113],{"class":112},[82,9943,2244],{"class":88},[82,9945,5637],{"class":92},[82,9947,3659],{"class":112},[82,9949,9950],{"class":92},"len",[82,9952,3288],{"class":112},[82,9954,2283],{"class":88},[82,9956,5637],{"class":92},[82,9958,4892],{"class":112},[82,9960,119],{"class":92},[82,9962,9963],{"class":84,"line":513},[82,9964,4630],{"class":92},[82,9966,9967,9969,9971,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997],{"class":84,"line":1388},[82,9968,5999],{"class":112},[82,9970,93],{"class":92},[82,9972,2776],{"class":112},[82,9974,6006],{"class":92},[82,9976,113],{"class":112},[82,9978,2244],{"class":88},[82,9980,6013],{"class":92},[82,9982,3659],{"class":112},[82,9984,9950],{"class":92},[82,9986,3288],{"class":112},[82,9988,3199],{"class":92},[82,9990,3288],{"class":112},[82,9992,2283],{"class":88},[82,9994,6013],{"class":92},[82,9996,4892],{"class":112},[82,9998,119],{"class":92},[82,10000,10001],{"class":84,"line":1394},[82,10002,5109],{"class":92},[82,10004,10005,10007,10010,10012,10015,10017,10019],{"class":84,"line":1399},[82,10006,7237],{"class":112},[82,10008,10009],{"class":92},"(p[j]",[82,10011,3709],{"class":112},[82,10013,10014],{"class":92},"p[j",[82,10016,2249],{"class":112},[82,10018,2283],{"class":88},[82,10020,7252],{"class":92},[82,10022,10023],{"class":84,"line":1430},[82,10024,7257],{"class":92},[82,10026,10027,10029,10031,10033],{"class":84,"line":1818},[82,10028,7262],{"class":112},[82,10030,6850],{"class":92},[82,10032,113],{"class":112},[82,10034,10035],{"class":92},"p[j];\n",[82,10037,10038,10041,10043,10045,10047,10049],{"class":84,"line":2082},[82,10039,10040],{"class":92},"                p[j]",[82,10042,113],{"class":112},[82,10044,10014],{"class":92},[82,10046,2249],{"class":112},[82,10048,2283],{"class":88},[82,10050,7285],{"class":92},[82,10052,10053,10056,10058,10060,10062,10064],{"class":84,"line":2233},[82,10054,10055],{"class":92},"                p[j",[82,10057,2249],{"class":112},[82,10059,2283],{"class":88},[82,10061,3689],{"class":92},[82,10063,113],{"class":112},[82,10065,6875],{"class":92},[82,10067,10068],{"class":84,"line":2255},[82,10069,7305],{"class":92},[82,10071,10072],{"class":84,"line":2260},[82,10073,5128],{"class":92},[82,10075,10076],{"class":84,"line":2298},[82,10077,4787],{"class":92},[82,10079,10080],{"class":84,"line":2303},[82,10081,1391],{"class":92},[82,10083,10084],{"class":84,"line":2321},[82,10085,486],{"emptyLinePlaceholder":485},[82,10087,10088,10090,10092],{"class":84,"line":2533},[82,10089,2776],{"class":112},[82,10091,4573],{"class":2384},[82,10093,4576],{"class":92},[82,10095,10096],{"class":84,"line":2538},[82,10097,4161],{"class":92},[82,10099,10100],{"class":84,"line":2548},[82,10101,10102],{"class":2828},"    \u002F\u002F 1.创建数组\n",[82,10104,10105,10107,10109,10111,10113,10115,10117,10119,10121,10123,10125,10127,10129,10131,10133,10135,10137,10139,10141,10143,10145,10147,10149,10151,10153,10155],{"class":84,"line":2579},[82,10106,4585],{"class":112},[82,10108,6557],{"class":92},[82,10110,440],{"class":88},[82,10112,3689],{"class":92},[82,10114,113],{"class":112},[82,10116,3645],{"class":92},[82,10118,3051],{"class":88},[82,10120,3136],{"class":92},[82,10122,2841],{"class":88},[82,10124,3136],{"class":92},[82,10126,3102],{"class":88},[82,10128,3136],{"class":92},[82,10130,3178],{"class":88},[82,10132,3136],{"class":92},[82,10134,2283],{"class":88},[82,10136,3136],{"class":92},[82,10138,1425],{"class":88},[82,10140,3136],{"class":92},[82,10142,440],{"class":88},[82,10144,3136],{"class":92},[82,10146,3153],{"class":88},[82,10148,3136],{"class":92},[82,10150,3127],{"class":88},[82,10152,3136],{"class":92},[82,10154,3077],{"class":88},[82,10156,6590],{"class":92},[82,10158,10159,10161,10163,10165,10167],{"class":84,"line":2585},[82,10160,4585],{"class":112},[82,10162,9923],{"class":92},[82,10164,113],{"class":112},[82,10166,440],{"class":88},[82,10168,3909],{"class":92},[82,10170,10171,10173,10175,10177,10179],{"class":84,"line":4350},[82,10172,4585],{"class":112},[82,10174,9110],{"class":112},[82,10176,19],{"class":92},[82,10178,113],{"class":112},[82,10180,9630],{"class":92},[82,10182,10183],{"class":84,"line":4355},[82,10184,10185],{"class":2828},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[82,10187,10188,10191],{"class":84,"line":4360},[82,10189,10190],{"class":2384},"    bubbleSort",[82,10192,10193],{"class":92},"(p,len);\n",[82,10195,10196],{"class":84,"line":4365},[82,10197,486],{"emptyLinePlaceholder":485},[82,10199,10200],{"class":84,"line":4379},[82,10201,10202],{"class":2828},"    \u002F\u002F 3.打印排序后的数组\n",[82,10204,10205,10207,10209,10211,10213,10215,10217,10219,10221,10224,10226],{"class":84,"line":4384},[82,10206,1888],{"class":112},[82,10208,4265],{"class":92},[82,10210,2776],{"class":112},[82,10212,5630],{"class":92},[82,10214,113],{"class":112},[82,10216,2244],{"class":88},[82,10218,5810],{"class":92},[82,10220,3659],{"class":112},[82,10222,10223],{"class":92},"len; i",[82,10225,4892],{"class":112},[82,10227,119],{"class":92},[82,10229,10230],{"class":84,"line":5176},[82,10231,4630],{"class":92},[82,10233,10234,10236,10238,10240,10242,10244],{"class":84,"line":5190},[82,10235,6047],{"class":92},[82,10237,9011],{"class":112},[82,10239,19],{"class":92},[82,10241,3792],{"class":112},[82,10243,1793],{"class":96},[82,10245,3909],{"class":92},[82,10247,10248,10251,10253],{"class":84,"line":5198},[82,10249,10250],{"class":92},"        p",[82,10252,4892],{"class":112},[82,10254,3909],{"class":92},[82,10256,10257],{"class":84,"line":5203},[82,10258,4787],{"class":92},[82,10260,10261],{"class":84,"line":5209},[82,10262,1391],{"class":92},[2671,10264,10265],{},"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":78,"searchDepth":157,"depth":157,"links":10267},[10268,10269,10270,10271,10272,10273,10274,10275],{"id":8875,"depth":157,"text":8876},{"id":9041,"depth":157,"text":9042},{"id":9197,"depth":157,"text":9198},{"id":9275,"depth":157,"text":9276},{"id":9354,"depth":157,"text":9355},{"id":9453,"depth":157,"text":9454},{"id":9692,"depth":157,"text":9693},{"id":9870,"depth":157,"text":9871},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8864,"description":8872},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10282,"title":10283,"body":10284,"description":10291,"extension":2700,"meta":13264,"navigation":485,"path":13265,"seo":13266,"stem":13267,"__hash__":13268},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10285,"toc":13255},[10286,10289,10292,10296,10299,10302,10313,10651,10654,10658,10661,10668,10923,10927,10930,10933,11088,11092,11095,11098,11304,11308,11311,11614,11617,11625,11629,11632,11783,11785,11796,11853,11857,11862,12519,12527,12530,12624,12626,13246,13252],[10,10287,10283],{"id":10288},"_4结构体",[19,10290,10291],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10293,10295],{"id":10294},"_41结构体定义与使用","4.1结构体定义与使用",[19,10297,10298],{},"语法：struct 结构体名 {结构体成员列表}；",[19,10300,10301],{},"通过结构体创建变量的方式：",[3755,10303,10304,10307,10310],{},[29,10305,10306],{},"struct 结构体名 变量名",[29,10308,10309],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,10311,10312],{},"定义结构体时顺便创建变量",[73,10314,10316],{"className":2762,"code":10315,"language":2764,"meta":78,"style":78},"#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",[32,10317,10318,10324,10334,10341,10346,10354,10358,10363,10367,10372,10377,10382,10389,10394,10401,10405,10412,10416,10420,10424,10428,10432,10436,10442,10446,10452,10460,10468,10472,10477,10482,10493,10498,10510,10521,10532,10537,10561,10566,10572,10599,10604,10610,10622,10634,10646],{"__ignoreMap":78},[82,10319,10320,10322],{"class":84,"line":85},[82,10321,4550],{"class":112},[82,10323,4553],{"class":96},[82,10325,10326,10328,10330,10332],{"class":84,"line":157},[82,10327,4558],{"class":112},[82,10329,4561],{"class":112},[82,10331,4564],{"class":2384},[82,10333,3909],{"class":92},[82,10335,10336,10338],{"class":84,"line":404},[82,10337,4550],{"class":112},[82,10339,10340],{"class":96},"\u003Cstring>\n",[82,10342,10343],{"class":84,"line":413},[82,10344,10345],{"class":2828},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[82,10347,10348,10351],{"class":84,"line":508},[82,10349,10350],{"class":112},"struct",[82,10352,10353],{"class":2384}," Student\n",[82,10355,10356],{"class":84,"line":513},[82,10357,4161],{"class":92},[82,10359,10360],{"class":84,"line":1388},[82,10361,10362],{"class":2828},"    \u002F\u002F成员列表\n",[82,10364,10365],{"class":84,"line":1394},[82,10366,486],{"emptyLinePlaceholder":485},[82,10368,10369],{"class":84,"line":1399},[82,10370,10371],{"class":2828},"    \u002F\u002F姓名\n",[82,10373,10374],{"class":84,"line":1430},[82,10375,10376],{"class":92},"    string name;\n",[82,10378,10379],{"class":84,"line":1818},[82,10380,10381],{"class":2828},"    \u002F\u002F年龄\n",[82,10383,10384,10386],{"class":84,"line":2082},[82,10385,4585],{"class":112},[82,10387,10388],{"class":92}," age;\n",[82,10390,10391],{"class":84,"line":2233},[82,10392,10393],{"class":2828},"    \u002F\u002F分数\n",[82,10395,10396,10398],{"class":84,"line":2255},[82,10397,4585],{"class":112},[82,10399,10400],{"class":92}," score;\n",[82,10402,10403],{"class":84,"line":2260},[82,10404,6590],{"class":92},[82,10406,10407,10409],{"class":84,"line":2298},[82,10408,10350],{"class":112},[82,10410,10411],{"class":2384}," School\n",[82,10413,10414],{"class":84,"line":2303},[82,10415,4161],{"class":92},[82,10417,10418],{"class":84,"line":2321},[82,10419,10362],{"class":2828},[82,10421,10422],{"class":84,"line":2533},[82,10423,486],{"emptyLinePlaceholder":485},[82,10425,10426],{"class":84,"line":2538},[82,10427,10371],{"class":2828},[82,10429,10430],{"class":84,"line":2548},[82,10431,10376],{"class":92},[82,10433,10434],{"class":84,"line":2579},[82,10435,10381],{"class":2828},[82,10437,10438,10440],{"class":84,"line":2585},[82,10439,4585],{"class":112},[82,10441,10388],{"class":92},[82,10443,10444],{"class":84,"line":4350},[82,10445,10393],{"class":2828},[82,10447,10448,10450],{"class":84,"line":4355},[82,10449,4585],{"class":112},[82,10451,10400],{"class":92},[82,10453,10454,10457],{"class":84,"line":4360},[82,10455,10456],{"class":92},"} s3;",[82,10458,10459],{"class":2828}," \u002F\u002F创建结构体时就创建了变量\n",[82,10461,10462,10464,10466],{"class":84,"line":4365},[82,10463,2776],{"class":112},[82,10465,4573],{"class":2384},[82,10467,4576],{"class":92},[82,10469,10470],{"class":84,"line":4379},[82,10471,4161],{"class":92},[82,10473,10474],{"class":84,"line":4384},[82,10475,10476],{"class":2828},"    \u002F\u002F2.通过学生类型创建具体学生\n",[82,10478,10479],{"class":84,"line":5176},[82,10480,10481],{"class":2828},"    \u002F\u002F2.1 struct Student s1;\n",[82,10483,10484,10487,10490],{"class":84,"line":5190},[82,10485,10486],{"class":112},"    struct",[82,10488,10489],{"class":2384}," Student",[82,10491,10492],{"class":92}," s1;\n",[82,10494,10495],{"class":84,"line":5198},[82,10496,10497],{"class":2828},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[82,10499,10500,10503,10505,10508],{"class":84,"line":5203},[82,10501,10502],{"class":92},"    s1.name",[82,10504,113],{"class":112},[82,10506,10507],{"class":96},"\"张三\"",[82,10509,3909],{"class":92},[82,10511,10512,10515,10517,10519],{"class":84,"line":5209},[82,10513,10514],{"class":92},"    s1.age",[82,10516,113],{"class":112},[82,10518,1373],{"class":88},[82,10520,3909],{"class":92},[82,10522,10523,10526,10528,10530],{"class":84,"line":5215},[82,10524,10525],{"class":92},"    s1.score",[82,10527,113],{"class":112},[82,10529,3012],{"class":88},[82,10531,3909],{"class":92},[82,10533,10534],{"class":84,"line":5220},[82,10535,10536],{"class":2828},"    \u002F\u002F输出结果\n",[82,10538,10540,10542,10544,10547,10549,10552,10554,10557,10559],{"class":84,"line":10539},37,[82,10541,4166],{"class":92},[82,10543,3792],{"class":112},[82,10545,10546],{"class":92},"s1.name",[82,10548,3792],{"class":112},[82,10550,10551],{"class":92},"s1.age",[82,10553,3792],{"class":112},[82,10555,10556],{"class":92},"s1.score",[82,10558,3792],{"class":112},[82,10560,3814],{"class":92},[82,10562,10564],{"class":84,"line":10563},38,[82,10565,486],{"emptyLinePlaceholder":485},[82,10567,10569],{"class":84,"line":10568},39,[82,10570,10571],{"class":2828},"    \u002F\u002F2.2 struct Student s2={...}\n",[82,10573,10575,10577,10579,10582,10584,10586,10589,10591,10593,10595,10597],{"class":84,"line":10574},40,[82,10576,10486],{"class":112},[82,10578,10489],{"class":2384},[82,10580,10581],{"class":92}," s2",[82,10583,113],{"class":112},[82,10585,3645],{"class":92},[82,10587,10588],{"class":96},"\"王五\"",[82,10590,3136],{"class":92},[82,10592,1373],{"class":88},[82,10594,3136],{"class":92},[82,10596,3012],{"class":88},[82,10598,6590],{"class":92},[82,10600,10602],{"class":84,"line":10601},41,[82,10603,486],{"emptyLinePlaceholder":485},[82,10605,10607],{"class":84,"line":10606},42,[82,10608,10609],{"class":2828},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[82,10611,10613,10616,10618,10620],{"class":84,"line":10612},43,[82,10614,10615],{"class":92},"    s3.name",[82,10617,113],{"class":112},[82,10619,6274],{"class":96},[82,10621,3909],{"class":92},[82,10623,10625,10628,10630,10632],{"class":84,"line":10624},44,[82,10626,10627],{"class":92},"    s3.age",[82,10629,113],{"class":112},[82,10631,1373],{"class":88},[82,10633,3909],{"class":92},[82,10635,10637,10640,10642,10644],{"class":84,"line":10636},45,[82,10638,10639],{"class":92},"    s3.score",[82,10641,113],{"class":112},[82,10643,3451],{"class":88},[82,10645,3909],{"class":92},[82,10647,10649],{"class":84,"line":10648},46,[82,10650,1391],{"class":92},[19,10652,10653],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10655,10657],{"id":10656},"_42结构体数组","4.2结构体数组",[19,10659,10660],{},"将自定义的结构体放入到数组中方便维护",[19,10662,10663,10664,10667],{},"语法：struct 结构体名 数组名",[82,10665,10666],{},"元素个数","={ {}，{},...{} };",[73,10669,10671],{"className":2762,"code":10670,"language":2764,"meta":78,"style":78},"#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",[32,10672,10673,10679,10689,10695,10700,10706,10710,10714,10720,10726,10730,10734,10742,10746,10751,10766,10770,10786,10802,10806,10811,10827,10842,10857,10862,10888,10892,10915,10919],{"__ignoreMap":78},[82,10674,10675,10677],{"class":84,"line":85},[82,10676,4550],{"class":112},[82,10678,4553],{"class":96},[82,10680,10681,10683,10685,10687],{"class":84,"line":157},[82,10682,4558],{"class":112},[82,10684,4561],{"class":112},[82,10686,4564],{"class":2384},[82,10688,3909],{"class":92},[82,10690,10691,10693],{"class":84,"line":404},[82,10692,4550],{"class":112},[82,10694,10340],{"class":96},[82,10696,10697],{"class":84,"line":413},[82,10698,10699],{"class":2828},"\u002F\u002F1.定义结构体\n",[82,10701,10702,10704],{"class":84,"line":508},[82,10703,10350],{"class":112},[82,10705,10353],{"class":2384},[82,10707,10708],{"class":84,"line":513},[82,10709,4161],{"class":92},[82,10711,10712],{"class":84,"line":1388},[82,10713,10376],{"class":92},[82,10715,10716,10718],{"class":84,"line":1394},[82,10717,4585],{"class":112},[82,10719,10388],{"class":92},[82,10721,10722,10724],{"class":84,"line":1399},[82,10723,4585],{"class":112},[82,10725,10400],{"class":92},[82,10727,10728],{"class":84,"line":1430},[82,10729,486],{"emptyLinePlaceholder":485},[82,10731,10732],{"class":84,"line":1818},[82,10733,6590],{"class":92},[82,10735,10736,10738,10740],{"class":84,"line":2082},[82,10737,2776],{"class":112},[82,10739,4573],{"class":2384},[82,10741,4576],{"class":92},[82,10743,10744],{"class":84,"line":2233},[82,10745,4161],{"class":92},[82,10747,10748],{"class":84,"line":2255},[82,10749,10750],{"class":2828},"    \u002F\u002F2.创建结构体数组\n",[82,10752,10753,10755,10757,10760,10762,10764],{"class":84,"line":2260},[82,10754,10486],{"class":112},[82,10756,10489],{"class":2384},[82,10758,10759],{"class":92}," stuArray[",[82,10761,1425],{"class":88},[82,10763,3689],{"class":92},[82,10765,7503],{"class":112},[82,10767,10768],{"class":84,"line":2298},[82,10769,4630],{"class":92},[82,10771,10772,10774,10776,10778,10780,10782,10784],{"class":84,"line":2303},[82,10773,7512],{"class":92},[82,10775,10507],{"class":96},[82,10777,3136],{"class":92},[82,10779,1373],{"class":88},[82,10781,3136],{"class":92},[82,10783,3069],{"class":88},[82,10785,1497],{"class":92},[82,10787,10788,10790,10792,10794,10796,10798,10800],{"class":84,"line":2321},[82,10789,7512],{"class":92},[82,10791,6274],{"class":96},[82,10793,3136],{"class":92},[82,10795,3330],{"class":88},[82,10797,3136],{"class":92},[82,10799,3330],{"class":88},[82,10801,1391],{"class":92},[82,10803,10804],{"class":84,"line":2533},[82,10805,4787],{"class":92},[82,10807,10808],{"class":84,"line":2538},[82,10809,10810],{"class":2828},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[82,10812,10813,10816,10818,10821,10823,10825],{"class":84,"line":2548},[82,10814,10815],{"class":92},"    stuArray[",[82,10817,2283],{"class":88},[82,10819,10820],{"class":92},"].name",[82,10822,113],{"class":112},[82,10824,6297],{"class":96},[82,10826,3909],{"class":92},[82,10828,10829,10831,10833,10836,10838,10840],{"class":84,"line":2579},[82,10830,10815],{"class":92},[82,10832,2283],{"class":88},[82,10834,10835],{"class":92},"].age",[82,10837,113],{"class":112},[82,10839,1425],{"class":88},[82,10841,3909],{"class":92},[82,10843,10844,10846,10848,10851,10853,10855],{"class":84,"line":2585},[82,10845,10815],{"class":92},[82,10847,2283],{"class":88},[82,10849,10850],{"class":92},"].score",[82,10852,113],{"class":112},[82,10854,1425],{"class":88},[82,10856,3909],{"class":92},[82,10858,10859],{"class":84,"line":4350},[82,10860,10861],{"class":2828},"    \u002F\u002F4.遍历结构体数组\n",[82,10863,10864,10866,10868,10870,10872,10874,10876,10878,10880,10882,10884,10886],{"class":84,"line":4355},[82,10865,1888],{"class":112},[82,10867,4265],{"class":92},[82,10869,2776],{"class":112},[82,10871,5630],{"class":92},[82,10873,113],{"class":112},[82,10875,2244],{"class":88},[82,10877,5637],{"class":92},[82,10879,3659],{"class":112},[82,10881,1425],{"class":88},[82,10883,5637],{"class":92},[82,10885,4892],{"class":112},[82,10887,119],{"class":92},[82,10889,10890],{"class":84,"line":4360},[82,10891,4630],{"class":92},[82,10893,10894,10896,10898,10901,10903,10906,10908,10911,10913],{"class":84,"line":4365},[82,10895,6047],{"class":92},[82,10897,3792],{"class":112},[82,10899,10900],{"class":92},"stuArray[i].name",[82,10902,3792],{"class":112},[82,10904,10905],{"class":92},"stuArray[i].age",[82,10907,3792],{"class":112},[82,10909,10910],{"class":92},"stuArray[i].score",[82,10912,3792],{"class":112},[82,10914,3814],{"class":92},[82,10916,10917],{"class":84,"line":4379},[82,10918,4787],{"class":92},[82,10920,10921],{"class":84,"line":4384},[82,10922,1391],{"class":92},[14,10924,10926],{"id":10925},"_43结构体指针","4.3结构体指针",[19,10928,10929],{},"作用：通过指针访问结构体中的成员",[19,10931,10932],{},"利用操作符->可以通过结构体指针访问结构体属性",[73,10934,10936],{"className":2762,"code":10935,"language":2764,"meta":78,"style":78},"#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",[32,10937,10938,10944,10954,10960,10964,10970,10974,10978,10984,10990,10994,11002,11006,11011,11036,11041,11056,11061,11084],{"__ignoreMap":78},[82,10939,10940,10942],{"class":84,"line":85},[82,10941,4550],{"class":112},[82,10943,4553],{"class":96},[82,10945,10946,10948,10950,10952],{"class":84,"line":157},[82,10947,4558],{"class":112},[82,10949,4561],{"class":112},[82,10951,4564],{"class":2384},[82,10953,3909],{"class":92},[82,10955,10956,10958],{"class":84,"line":404},[82,10957,4550],{"class":112},[82,10959,10340],{"class":96},[82,10961,10962],{"class":84,"line":413},[82,10963,10699],{"class":2828},[82,10965,10966,10968],{"class":84,"line":508},[82,10967,10350],{"class":112},[82,10969,10353],{"class":2384},[82,10971,10972],{"class":84,"line":513},[82,10973,4161],{"class":92},[82,10975,10976],{"class":84,"line":1388},[82,10977,10376],{"class":92},[82,10979,10980,10982],{"class":84,"line":1394},[82,10981,4585],{"class":112},[82,10983,10388],{"class":92},[82,10985,10986,10988],{"class":84,"line":1399},[82,10987,4585],{"class":112},[82,10989,10400],{"class":92},[82,10991,10992],{"class":84,"line":1430},[82,10993,6590],{"class":92},[82,10995,10996,10998,11000],{"class":84,"line":1818},[82,10997,2776],{"class":112},[82,10999,4573],{"class":2384},[82,11001,4576],{"class":92},[82,11003,11004],{"class":84,"line":2082},[82,11005,4161],{"class":92},[82,11007,11008],{"class":84,"line":2233},[82,11009,11010],{"class":2828},"    \u002F\u002F创建学生结构体变量\n",[82,11012,11013,11015,11017,11020,11022,11024,11026,11028,11030,11032,11034],{"class":84,"line":2255},[82,11014,10486],{"class":112},[82,11016,10489],{"class":2384},[82,11018,11019],{"class":92}," s",[82,11021,113],{"class":112},[82,11023,3645],{"class":92},[82,11025,10507],{"class":96},[82,11027,3136],{"class":92},[82,11029,1373],{"class":88},[82,11031,3136],{"class":92},[82,11033,4325],{"class":88},[82,11035,6590],{"class":92},[82,11037,11038],{"class":84,"line":2260},[82,11039,11040],{"class":2828},"    \u002F\u002F通过指针指向结构体变量\n",[82,11042,11043,11045,11047,11049,11051,11053],{"class":84,"line":2298},[82,11044,10486],{"class":112},[82,11046,10489],{"class":2384},[82,11048,9110],{"class":112},[82,11050,19],{"class":92},[82,11052,8931],{"class":112},[82,11054,11055],{"class":92},"s\n",[82,11057,11058],{"class":84,"line":2303},[82,11059,11060],{"class":2828},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[82,11062,11063,11065,11067,11070,11072,11075,11077,11080,11082],{"class":84,"line":2321},[82,11064,4166],{"class":92},[82,11066,3792],{"class":112},[82,11068,11069],{"class":92},"p->name",[82,11071,3792],{"class":112},[82,11073,11074],{"class":92},"p->age",[82,11076,3792],{"class":112},[82,11078,11079],{"class":92},"p->score",[82,11081,3792],{"class":112},[82,11083,3814],{"class":92},[82,11085,11086],{"class":84,"line":2533},[82,11087,1391],{"class":92},[14,11089,11091],{"id":11090},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,11093,11094],{},"作用：结构体中的成员可以是另一个结构体",[19,11096,11097],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[73,11099,11101],{"className":2762,"code":11100,"language":2764,"meta":78,"style":78},"#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",[32,11102,11103,11109,11119,11125,11130,11138,11142,11146,11152,11158,11162,11167,11174,11178,11185,11189,11195,11200,11204,11212,11216,11221,11226,11231,11242,11254,11265,11278,11289,11300],{"__ignoreMap":78},[82,11104,11105,11107],{"class":84,"line":85},[82,11106,4550],{"class":112},[82,11108,4553],{"class":96},[82,11110,11111,11113,11115,11117],{"class":84,"line":157},[82,11112,4558],{"class":112},[82,11114,4561],{"class":112},[82,11116,4564],{"class":2384},[82,11118,3909],{"class":92},[82,11120,11121,11123],{"class":84,"line":404},[82,11122,4550],{"class":112},[82,11124,10340],{"class":96},[82,11126,11127],{"class":84,"line":413},[82,11128,11129],{"class":2828},"\u002F\u002F定义学生结构体\n",[82,11131,11132,11134,11136],{"class":84,"line":508},[82,11133,10350],{"class":112},[82,11135,10489],{"class":2384},[82,11137,5273],{"class":92},[82,11139,11140],{"class":84,"line":513},[82,11141,4161],{"class":92},[82,11143,11144],{"class":84,"line":1388},[82,11145,10376],{"class":92},[82,11147,11148,11150],{"class":84,"line":1394},[82,11149,4585],{"class":112},[82,11151,10388],{"class":92},[82,11153,11154,11156],{"class":84,"line":1399},[82,11155,4585],{"class":112},[82,11157,10400],{"class":92},[82,11159,11160],{"class":84,"line":1430},[82,11161,1391],{"class":92},[82,11163,11164],{"class":84,"line":1818},[82,11165,11166],{"class":2828},"\u002F\u002F定义老师结构体\n",[82,11168,11169,11171],{"class":84,"line":2082},[82,11170,10350],{"class":112},[82,11172,11173],{"class":2384}," Teacher\n",[82,11175,11176],{"class":84,"line":2233},[82,11177,4161],{"class":92},[82,11179,11180,11182],{"class":84,"line":2255},[82,11181,4585],{"class":112},[82,11183,11184],{"class":92}," id;\n",[82,11186,11187],{"class":84,"line":2260},[82,11188,10376],{"class":92},[82,11190,11191,11193],{"class":84,"line":2298},[82,11192,4585],{"class":112},[82,11194,10388],{"class":92},[82,11196,11197],{"class":84,"line":2303},[82,11198,11199],{"class":92},"    Student stu;\n",[82,11201,11202],{"class":84,"line":2321},[82,11203,1391],{"class":92},[82,11205,11206,11208,11210],{"class":84,"line":2533},[82,11207,2776],{"class":112},[82,11209,4573],{"class":2384},[82,11211,8570],{"class":92},[82,11213,11214],{"class":84,"line":2538},[82,11215,4161],{"class":92},[82,11217,11218],{"class":84,"line":2548},[82,11219,11220],{"class":2828},"    \u002F\u002F结构体嵌套结构体\n",[82,11222,11223],{"class":84,"line":2579},[82,11224,11225],{"class":2828},"    \u002F\u002F创建老师\n",[82,11227,11228],{"class":84,"line":2585},[82,11229,11230],{"class":92},"    Teacher t;\n",[82,11232,11233,11236,11238,11240],{"class":84,"line":4350},[82,11234,11235],{"class":92},"    t.id",[82,11237,113],{"class":112},[82,11239,3069],{"class":88},[82,11241,3909],{"class":92},[82,11243,11244,11247,11249,11252],{"class":84,"line":4355},[82,11245,11246],{"class":92},"    t.name",[82,11248,113],{"class":112},[82,11250,11251],{"class":96},"\"老王\"",[82,11253,3909],{"class":92},[82,11255,11256,11259,11261,11263],{"class":84,"line":4360},[82,11257,11258],{"class":92},"    t.age",[82,11260,113],{"class":112},[82,11262,1373],{"class":88},[82,11264,3909],{"class":92},[82,11266,11267,11270,11272,11275],{"class":84,"line":4365},[82,11268,11269],{"class":92},"    t.stu.name",[82,11271,113],{"class":112},[82,11273,11274],{"class":96},"\"小王\"",[82,11276,11277],{"class":92},"；\n",[82,11279,11280,11283,11285,11287],{"class":84,"line":4379},[82,11281,11282],{"class":92},"    t.stu.age",[82,11284,113],{"class":112},[82,11286,3451],{"class":88},[82,11288,3909],{"class":92},[82,11290,11291,11294,11296,11298],{"class":84,"line":4384},[82,11292,11293],{"class":92},"    t.stu.score",[82,11295,113],{"class":112},[82,11297,3102],{"class":88},[82,11299,3909],{"class":92},[82,11301,11302],{"class":84,"line":5176},[82,11303,1391],{"class":92},[14,11305,11307],{"id":11306},"_45结构体做函数参数","4.5结构体做函数参数",[19,11309,11310],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[73,11312,11314],{"className":2762,"code":11313,"language":2764,"meta":78,"style":78},"#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",[32,11315,11316,11322,11332,11338,11344,11348,11352,11358,11364,11368,11373,11378,11395,11399,11432,11436,11441,11460,11464,11495,11499,11507,11511,11520,11532,11544,11556,11569,11577,11590,11602,11610],{"__ignoreMap":78},[82,11317,11318,11320],{"class":84,"line":85},[82,11319,4550],{"class":112},[82,11321,4553],{"class":96},[82,11323,11324,11326,11328,11330],{"class":84,"line":157},[82,11325,4558],{"class":112},[82,11327,4561],{"class":112},[82,11329,4564],{"class":2384},[82,11331,3909],{"class":92},[82,11333,11334,11336],{"class":84,"line":404},[82,11335,4550],{"class":112},[82,11337,10340],{"class":96},[82,11339,11340,11342],{"class":84,"line":413},[82,11341,10350],{"class":112},[82,11343,10353],{"class":2384},[82,11345,11346],{"class":84,"line":508},[82,11347,4161],{"class":92},[82,11349,11350],{"class":84,"line":513},[82,11351,10376],{"class":92},[82,11353,11354,11356],{"class":84,"line":1388},[82,11355,4585],{"class":112},[82,11357,10388],{"class":92},[82,11359,11360,11362],{"class":84,"line":1394},[82,11361,4585],{"class":112},[82,11363,10400],{"class":92},[82,11365,11366],{"class":84,"line":1399},[82,11367,6590],{"class":92},[82,11369,11370],{"class":84,"line":1430},[82,11371,11372],{"class":2828},"\u002F\u002F打印学生信息的函数\n",[82,11374,11375],{"class":84,"line":1818},[82,11376,11377],{"class":2828},"\u002F\u002F值传递\n",[82,11379,11380,11382,11385,11387,11389,11391,11393],{"class":84,"line":2082},[82,11381,7956],{"class":112},[82,11383,11384],{"class":2384}," printStudent1",[82,11386,93],{"class":92},[82,11388,10350],{"class":112},[82,11390,10489],{"class":2384},[82,11392,11019],{"class":108},[82,11394,119],{"class":92},[82,11396,11397],{"class":84,"line":2233},[82,11398,4161],{"class":92},[82,11400,11401,11403,11405,11408,11410,11413,11415,11418,11420,11422,11424,11427,11429],{"class":84,"line":2255},[82,11402,9121],{"class":92},[82,11404,3792],{"class":112},[82,11406,11407],{"class":92}," s.name ",[82,11409,3792],{"class":112},[82,11411,11412],{"class":96}," \" \"",[82,11414,4060],{"class":112},[82,11416,11417],{"class":92}," s.age ",[82,11419,3792],{"class":112},[82,11421,11412],{"class":96},[82,11423,4060],{"class":112},[82,11425,11426],{"class":92}," s.score ",[82,11428,3792],{"class":112},[82,11430,11431],{"class":92}," endl;\n",[82,11433,11434],{"class":84,"line":2260},[82,11435,1391],{"class":92},[82,11437,11438],{"class":84,"line":2298},[82,11439,11440],{"class":2828},"\u002F\u002F地址传递\n",[82,11442,11443,11445,11448,11450,11452,11454,11456,11458],{"class":84,"line":2303},[82,11444,7956],{"class":112},[82,11446,11447],{"class":2384}," printStudent2",[82,11449,93],{"class":92},[82,11451,10350],{"class":112},[82,11453,10489],{"class":2384},[82,11455,9110],{"class":112},[82,11457,3446],{"class":108},[82,11459,119],{"class":92},[82,11461,11462],{"class":84,"line":2321},[82,11463,4161],{"class":92},[82,11465,11466,11468,11470,11473,11475,11477,11479,11482,11484,11486,11488,11491,11493],{"class":84,"line":2533},[82,11467,9121],{"class":92},[82,11469,3792],{"class":112},[82,11471,11472],{"class":92}," s->name ",[82,11474,3792],{"class":112},[82,11476,11412],{"class":96},[82,11478,4060],{"class":112},[82,11480,11481],{"class":92}," s->age ",[82,11483,3792],{"class":112},[82,11485,11412],{"class":96},[82,11487,4060],{"class":112},[82,11489,11490],{"class":92}," s->score ",[82,11492,3792],{"class":112},[82,11494,11431],{"class":92},[82,11496,11497],{"class":84,"line":2538},[82,11498,1391],{"class":92},[82,11500,11501,11503,11505],{"class":84,"line":2548},[82,11502,2776],{"class":112},[82,11504,4573],{"class":2384},[82,11506,4576],{"class":92},[82,11508,11509],{"class":84,"line":2579},[82,11510,4161],{"class":92},[82,11512,11513,11515,11517],{"class":84,"line":2585},[82,11514,10486],{"class":112},[82,11516,10489],{"class":2384},[82,11518,11519],{"class":92}," s;\n",[82,11521,11522,11525,11527,11530],{"class":84,"line":4350},[82,11523,11524],{"class":92},"    s.name ",[82,11526,113],{"class":112},[82,11528,11529],{"class":96}," \"张三\"",[82,11531,3909],{"class":92},[82,11533,11534,11537,11539,11542],{"class":84,"line":4355},[82,11535,11536],{"class":92},"    s.age ",[82,11538,113],{"class":112},[82,11540,11541],{"class":88}," 20",[82,11543,3909],{"class":92},[82,11545,11546,11549,11551,11554],{"class":84,"line":4360},[82,11547,11548],{"class":92},"    s.score ",[82,11550,113],{"class":112},[82,11552,11553],{"class":88}," 85",[82,11555,3909],{"class":92},[82,11557,11558,11560,11562,11565,11567],{"class":84,"line":4365},[82,11559,4166],{"class":92},[82,11561,3792],{"class":112},[82,11563,11564],{"class":96},"\"值传递:\"",[82,11566,3792],{"class":112},[82,11568,3814],{"class":92},[82,11570,11571,11574],{"class":84,"line":4379},[82,11572,11573],{"class":2384},"    printStudent1",[82,11575,11576],{"class":92},"(s);\n",[82,11578,11579,11581,11583,11586,11588],{"class":84,"line":4384},[82,11580,4166],{"class":92},[82,11582,3792],{"class":112},[82,11584,11585],{"class":96},"\"地址传递:\"",[82,11587,3792],{"class":112},[82,11589,3814],{"class":92},[82,11591,11592,11595,11597,11599],{"class":84,"line":5176},[82,11593,11594],{"class":2384},"    printStudent2",[82,11596,93],{"class":92},[82,11598,3111],{"class":112},[82,11600,11601],{"class":92},"s); \n",[82,11603,11604,11606,11608],{"class":84,"line":5190},[82,11605,6685],{"class":112},[82,11607,6688],{"class":88},[82,11609,3909],{"class":92},[82,11611,11612],{"class":84,"line":5198},[82,11613,1391],{"class":92},[19,11615,11616],{},"注意：",[3755,11618,11619,11622],{},[29,11620,11621],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,11623,11624],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11626,11628],{"id":11627},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11630,11631],{},"用const防止误操作",[73,11633,11635],{"className":2762,"code":11634,"language":2764,"meta":78,"style":78},"#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",[32,11636,11637,11643,11653,11659,11664,11668,11672,11678,11684,11688,11704,11708,11731,11735,11743,11747,11768,11775,11779],{"__ignoreMap":78},[82,11638,11639,11641],{"class":84,"line":85},[82,11640,4550],{"class":112},[82,11642,4553],{"class":96},[82,11644,11645,11647,11649,11651],{"class":84,"line":157},[82,11646,4558],{"class":112},[82,11648,4561],{"class":112},[82,11650,4564],{"class":2384},[82,11652,3909],{"class":92},[82,11654,11655,11657],{"class":84,"line":404},[82,11656,4550],{"class":112},[82,11658,10340],{"class":96},[82,11660,11661],{"class":84,"line":413},[82,11662,11663],{"class":92},"sctuct Student\n",[82,11665,11666],{"class":84,"line":508},[82,11667,4161],{"class":92},[82,11669,11670],{"class":84,"line":513},[82,11671,10376],{"class":92},[82,11673,11674,11676],{"class":84,"line":1388},[82,11675,4585],{"class":112},[82,11677,10388],{"class":92},[82,11679,11680,11682],{"class":84,"line":1394},[82,11681,4585],{"class":112},[82,11683,10400],{"class":92},[82,11685,11686],{"class":84,"line":1399},[82,11687,6590],{"class":92},[82,11689,11690,11692,11695,11697,11700,11702],{"class":84,"line":1430},[82,11691,7956],{"class":112},[82,11693,11694],{"class":2384}," printStudents",[82,11696,93],{"class":92},[82,11698,11699],{"class":2384},"student",[82,11701,11019],{"class":108},[82,11703,119],{"class":92},[82,11705,11706],{"class":84,"line":1818},[82,11707,4161],{"class":92},[82,11709,11710,11712,11714,11717,11719,11722,11724,11727,11729],{"class":84,"line":2082},[82,11711,4166],{"class":92},[82,11713,3792],{"class":112},[82,11715,11716],{"class":92},"s.name",[82,11718,3792],{"class":112},[82,11720,11721],{"class":92},"s.age",[82,11723,3792],{"class":112},[82,11725,11726],{"class":92},"s.score",[82,11728,3792],{"class":112},[82,11730,3814],{"class":92},[82,11732,11733],{"class":84,"line":2233},[82,11734,1391],{"class":92},[82,11736,11737,11739,11741],{"class":84,"line":2255},[82,11738,2776],{"class":112},[82,11740,4573],{"class":2384},[82,11742,8570],{"class":92},[82,11744,11745],{"class":84,"line":2260},[82,11746,4161],{"class":92},[82,11748,11749,11752,11754,11756,11758,11760,11762,11764,11766],{"class":84,"line":2298},[82,11750,11751],{"class":92},"    Student s",[82,11753,113],{"class":112},[82,11755,3645],{"class":92},[82,11757,10507],{"class":96},[82,11759,3136],{"class":92},[82,11761,1373],{"class":88},[82,11763,3136],{"class":92},[82,11765,1373],{"class":88},[82,11767,6590],{"class":92},[82,11769,11770,11773],{"class":84,"line":2303},[82,11771,11772],{"class":2384},"    printStudent",[82,11774,11576],{"class":92},[82,11776,11777],{"class":84,"line":2321},[82,11778,486],{"emptyLinePlaceholder":485},[82,11780,11781],{"class":84,"line":2533},[82,11782,1391],{"class":92},[19,11784,11616],{},[3755,11786,11787,11790,11793],{},[29,11788,11789],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11791,11792],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11794,11795],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[73,11797,11799],{"className":2762,"code":11798,"language":2764,"meta":78,"style":78},"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",[32,11800,11801,11820,11824,11829,11849],{"__ignoreMap":78},[82,11802,11803,11805,11807,11809,11811,11814,11816,11818],{"class":84,"line":85},[82,11804,7956],{"class":112},[82,11806,11694],{"class":2384},[82,11808,93],{"class":92},[82,11810,9384],{"class":112},[82,11812,11813],{"class":2384}," student",[82,11815,9110],{"class":112},[82,11817,3446],{"class":108},[82,11819,119],{"class":92},[82,11821,11822],{"class":84,"line":157},[82,11823,4161],{"class":92},[82,11825,11826],{"class":84,"line":404},[82,11827,11828],{"class":2828},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[82,11830,11831,11833,11835,11837,11839,11841,11843,11845,11847],{"class":84,"line":413},[82,11832,4166],{"class":92},[82,11834,3792],{"class":112},[82,11836,11716],{"class":92},[82,11838,3792],{"class":112},[82,11840,11721],{"class":92},[82,11842,3792],{"class":112},[82,11844,11726],{"class":92},[82,11846,3792],{"class":112},[82,11848,3814],{"class":92},[82,11850,11851],{"class":84,"line":508},[82,11852,1391],{"class":92},[14,11854,11856],{"id":11855},"_47案例","4.7案例",[26,11858,11859],{},[29,11860,11861],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[73,11863,11865],{"className":2762,"code":11864,"language":2764,"meta":78,"style":78},"#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",[32,11866,11867,11873,11883,11889,11896,11900,11906,11910,11915,11921,11927,11931,11935,11941,11945,11950,11955,11968,11972,11977,12003,12007,12019,12046,12050,12062,12072,12076,12081,12110,12114,12126,12135,12162,12173,12183,12187,12191,12195,12200,12224,12228,12252,12256,12275,12301,12305,12330,12353,12377,12382,12387,12392,12401,12406,12412,12433,12439,12453,12459,12486,12495,12501,12509,12514],{"__ignoreMap":78},[82,11868,11869,11871],{"class":84,"line":85},[82,11870,4550],{"class":112},[82,11872,4553],{"class":96},[82,11874,11875,11877,11879,11881],{"class":84,"line":157},[82,11876,4558],{"class":112},[82,11878,4561],{"class":112},[82,11880,4564],{"class":2384},[82,11882,3909],{"class":92},[82,11884,11885,11887],{"class":84,"line":404},[82,11886,4550],{"class":112},[82,11888,10340],{"class":96},[82,11890,11891,11893],{"class":84,"line":413},[82,11892,4550],{"class":112},[82,11894,11895],{"class":96},"\u003Cctime>\n",[82,11897,11898],{"class":84,"line":508},[82,11899,11129],{"class":2828},[82,11901,11902,11904],{"class":84,"line":513},[82,11903,10350],{"class":112},[82,11905,10353],{"class":2384},[82,11907,11908],{"class":84,"line":1388},[82,11909,4161],{"class":92},[82,11911,11912],{"class":84,"line":1394},[82,11913,11914],{"class":92},"    string sName;\n",[82,11916,11917,11919],{"class":84,"line":1399},[82,11918,4585],{"class":112},[82,11920,10388],{"class":92},[82,11922,11923,11925],{"class":84,"line":1430},[82,11924,4585],{"class":112},[82,11926,10400],{"class":92},[82,11928,11929],{"class":84,"line":1818},[82,11930,6590],{"class":92},[82,11932,11933],{"class":84,"line":2082},[82,11934,11166],{"class":2828},[82,11936,11937,11939],{"class":84,"line":2233},[82,11938,10350],{"class":112},[82,11940,11173],{"class":2384},[82,11942,11943],{"class":84,"line":2255},[82,11944,4161],{"class":92},[82,11946,11947],{"class":84,"line":2260},[82,11948,11949],{"class":92},"    string tName;\n",[82,11951,11952],{"class":84,"line":2298},[82,11953,11954],{"class":2828},"    \u002F\u002F学生数组\n",[82,11956,11957,11959,11961,11964,11966],{"class":84,"line":2303},[82,11958,10486],{"class":112},[82,11960,10489],{"class":2384},[82,11962,11963],{"class":92}," sArray[",[82,11965,3077],{"class":88},[82,11967,7285],{"class":92},[82,11969,11970],{"class":84,"line":2321},[82,11971,6590],{"class":92},[82,11973,11974],{"class":84,"line":2533},[82,11975,11976],{"class":2828},"\u002F\u002F给老师和学生赋值的函数\n",[82,11978,11979,11981,11984,11986,11988,11991,11994,11997,11999,12001],{"class":84,"line":2538},[82,11980,7956],{"class":112},[82,11982,11983],{"class":2384}," allocateSpace",[82,11985,93],{"class":92},[82,11987,10350],{"class":112},[82,11989,11990],{"class":2384}," Teacher",[82,11992,11993],{"class":108}," tArray",[82,11995,11996],{"class":92},"[],",[82,11998,2776],{"class":112},[82,12000,9923],{"class":108},[82,12002,119],{"class":92},[82,12004,12005],{"class":84,"line":2548},[82,12006,4161],{"class":92},[82,12008,12009,12012,12014,12017],{"class":84,"line":2579},[82,12010,12011],{"class":92},"    string nameSeed",[82,12013,113],{"class":112},[82,12015,12016],{"class":96},"\"ABCDE\"",[82,12018,3909],{"class":92},[82,12020,12021,12023,12025,12027,12030,12032,12034,12037,12039,12042,12044],{"class":84,"line":2585},[82,12022,1888],{"class":112},[82,12024,4265],{"class":92},[82,12026,2776],{"class":112},[82,12028,12029],{"class":92}," i ",[82,12031,113],{"class":112},[82,12033,6688],{"class":88},[82,12035,12036],{"class":92},"; i ",[82,12038,3659],{"class":112},[82,12040,12041],{"class":92}," len; i",[82,12043,4892],{"class":112},[82,12045,119],{"class":92},[82,12047,12048],{"class":84,"line":4350},[82,12049,4630],{"class":92},[82,12051,12052,12055,12057,12060],{"class":84,"line":4355},[82,12053,12054],{"class":92},"        tArray[i].tName ",[82,12056,113],{"class":112},[82,12058,12059],{"class":96}," \"Teacher_\"",[82,12061,3909],{"class":92},[82,12063,12064,12066,12069],{"class":84,"line":4360},[82,12065,12054],{"class":92},[82,12067,12068],{"class":112},"+=",[82,12070,12071],{"class":92},"nameSeed[i];\n",[82,12073,12074],{"class":84,"line":4365},[82,12075,486],{"emptyLinePlaceholder":485},[82,12077,12078],{"class":84,"line":4379},[82,12079,12080],{"class":2828},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[82,12082,12083,12085,12087,12089,12092,12094,12096,12099,12101,12103,12106,12108],{"class":84,"line":4384},[82,12084,5999],{"class":112},[82,12086,4265],{"class":92},[82,12088,2776],{"class":112},[82,12090,12091],{"class":92}," j ",[82,12093,113],{"class":112},[82,12095,6688],{"class":88},[82,12097,12098],{"class":92},"; j ",[82,12100,3659],{"class":112},[82,12102,4748],{"class":88},[82,12104,12105],{"class":92},"; j",[82,12107,4892],{"class":112},[82,12109,119],{"class":92},[82,12111,12112],{"class":84,"line":5176},[82,12113,5109],{"class":92},[82,12115,12116,12119,12121,12124],{"class":84,"line":5190},[82,12117,12118],{"class":92},"            tArray[i].sArray[j].sName ",[82,12120,113],{"class":112},[82,12122,12123],{"class":96}," \"Student_\"",[82,12125,3909],{"class":92},[82,12127,12128,12130,12132],{"class":84,"line":5198},[82,12129,12118],{"class":92},[82,12131,12068],{"class":112},[82,12133,12134],{"class":92}," nameSeed[j];\n",[82,12136,12137,12140,12143,12145,12147,12149,12151,12153,12155,12157,12159],{"class":84,"line":5203},[82,12138,12139],{"class":112},"            int",[82,12141,12142],{"class":92}," random",[82,12144,113],{"class":112},[82,12146,5023],{"class":2384},[82,12148,5026],{"class":92},[82,12150,3086],{"class":112},[82,12152,3656],{"class":88},[82,12154,2249],{"class":112},[82,12156,3159],{"class":88},[82,12158,2825],{"class":92},[82,12160,12161],{"class":2828},"\u002F\u002F40~99\n",[82,12163,12164,12167,12169,12171],{"class":84,"line":5209},[82,12165,12166],{"class":92},"            tArray[i].sArray[j].age ",[82,12168,113],{"class":112},[82,12170,11541],{"class":88},[82,12172,3909],{"class":92},[82,12174,12175,12178,12180],{"class":84,"line":5215},[82,12176,12177],{"class":92},"            tArray[i].sArray[j].score ",[82,12179,113],{"class":112},[82,12181,12182],{"class":92}," random;\n",[82,12184,12185],{"class":84,"line":5220},[82,12186,5128],{"class":92},[82,12188,12189],{"class":84,"line":10539},[82,12190,4787],{"class":92},[82,12192,12193],{"class":84,"line":10563},[82,12194,1391],{"class":92},[82,12196,12197],{"class":84,"line":10568},[82,12198,12199],{"class":2828},"\u002F\u002F打印所有信息的函数\n",[82,12201,12202,12204,12207,12209,12211,12213,12215,12218,12220,12222],{"class":84,"line":10574},[82,12203,7956],{"class":112},[82,12205,12206],{"class":2384}," printInfo",[82,12208,93],{"class":92},[82,12210,10350],{"class":112},[82,12212,11990],{"class":2384},[82,12214,11993],{"class":108},[82,12216,12217],{"class":92},"[], ",[82,12219,2776],{"class":112},[82,12221,9923],{"class":108},[82,12223,119],{"class":92},[82,12225,12226],{"class":84,"line":10601},[82,12227,4161],{"class":92},[82,12229,12230,12232,12234,12236,12238,12240,12242,12244,12246,12248,12250],{"class":84,"line":10606},[82,12231,1888],{"class":112},[82,12233,4265],{"class":92},[82,12235,2776],{"class":112},[82,12237,12029],{"class":92},[82,12239,113],{"class":112},[82,12241,6688],{"class":88},[82,12243,12036],{"class":92},[82,12245,3659],{"class":112},[82,12247,12041],{"class":92},[82,12249,4892],{"class":112},[82,12251,119],{"class":92},[82,12253,12254],{"class":84,"line":10612},[82,12255,4630],{"class":92},[82,12257,12258,12261,12263,12266,12268,12271,12273],{"class":84,"line":10624},[82,12259,12260],{"class":92},"        cout ",[82,12262,3792],{"class":112},[82,12264,12265],{"class":96}," \"Teacher: \"",[82,12267,4060],{"class":112},[82,12269,12270],{"class":92}," tArray[i].tName ",[82,12272,3792],{"class":112},[82,12274,11431],{"class":92},[82,12276,12277,12279,12281,12283,12285,12287,12289,12291,12293,12295,12297,12299],{"class":84,"line":10636},[82,12278,5999],{"class":112},[82,12280,4265],{"class":92},[82,12282,2776],{"class":112},[82,12284,12091],{"class":92},[82,12286,113],{"class":112},[82,12288,6688],{"class":88},[82,12290,12098],{"class":92},[82,12292,3659],{"class":112},[82,12294,4748],{"class":88},[82,12296,12105],{"class":92},[82,12298,4892],{"class":112},[82,12300,119],{"class":92},[82,12302,12303],{"class":84,"line":10648},[82,12304,5109],{"class":92},[82,12306,12308,12311,12313,12316,12318,12321,12323,12326,12328],{"class":84,"line":12307},47,[82,12309,12310],{"class":92},"            cout ",[82,12312,3792],{"class":112},[82,12314,12315],{"class":96}," \"",[82,12317,3849],{"class":88},[82,12319,12320],{"class":96},"Student: \"",[82,12322,4060],{"class":112},[82,12324,12325],{"class":92}," tArray[i].sArray[j].sName",[82,12327,3792],{"class":112},[82,12329,3814],{"class":92},[82,12331,12333,12335,12337,12339,12341,12344,12346,12349,12351],{"class":84,"line":12332},48,[82,12334,12310],{"class":92},[82,12336,3792],{"class":112},[82,12338,12315],{"class":96},[82,12340,3849],{"class":88},[82,12342,12343],{"class":96},"Age: \"",[82,12345,4060],{"class":112},[82,12347,12348],{"class":92}," tArray[i].sArray[j].age ",[82,12350,3792],{"class":112},[82,12352,11431],{"class":92},[82,12354,12356,12358,12360,12362,12364,12367,12369,12372,12374],{"class":84,"line":12355},49,[82,12357,12310],{"class":92},[82,12359,3792],{"class":112},[82,12361,12315],{"class":96},[82,12363,3849],{"class":88},[82,12365,12366],{"class":96},"Score: \"",[82,12368,4060],{"class":112},[82,12370,12371],{"class":92}," tArray[i].sArray[j].score ",[82,12373,3792],{"class":112},[82,12375,12376],{"class":92}," endl;   \n",[82,12378,12380],{"class":84,"line":12379},50,[82,12381,5128],{"class":92},[82,12383,12385],{"class":84,"line":12384},51,[82,12386,4787],{"class":92},[82,12388,12390],{"class":84,"line":12389},52,[82,12391,1391],{"class":92},[82,12393,12395,12397,12399],{"class":84,"line":12394},53,[82,12396,2776],{"class":112},[82,12398,4573],{"class":2384},[82,12400,4576],{"class":92},[82,12402,12404],{"class":84,"line":12403},54,[82,12405,4161],{"class":92},[82,12407,12409],{"class":84,"line":12408},55,[82,12410,12411],{"class":2828},"    \u002F\u002F随机数种子\n",[82,12413,12415,12417,12419,12421,12423,12425,12427,12429,12431],{"class":84,"line":12414},56,[82,12416,4973],{"class":2384},[82,12418,4976],{"class":92},[82,12420,4979],{"class":112},[82,12422,4982],{"class":112},[82,12424,3187],{"class":92},[82,12426,4987],{"class":2384},[82,12428,93],{"class":92},[82,12430,4992],{"class":88},[82,12432,4995],{"class":92},[82,12434,12436],{"class":84,"line":12435},57,[82,12437,12438],{"class":2828},"    \u002F\u002F1.创建3名老师的数组\n",[82,12440,12442,12444,12446,12449,12451],{"class":84,"line":12441},58,[82,12443,10486],{"class":112},[82,12445,11990],{"class":2384},[82,12447,12448],{"class":92}," tArray[",[82,12450,2841],{"class":88},[82,12452,7285],{"class":92},[82,12454,12456],{"class":84,"line":12455},59,[82,12457,12458],{"class":2828},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[82,12460,12462,12464,12467,12469,12472,12475,12477,12479,12482,12484],{"class":84,"line":12461},60,[82,12463,4585],{"class":112},[82,12465,12466],{"class":92}," len ",[82,12468,113],{"class":112},[82,12470,12471],{"class":112}," sizeof",[82,12473,12474],{"class":92},"(tArray) ",[82,12476,1147],{"class":112},[82,12478,12471],{"class":112},[82,12480,12481],{"class":92},"(tArray[",[82,12483,2244],{"class":88},[82,12485,6451],{"class":92},[82,12487,12489,12492],{"class":84,"line":12488},61,[82,12490,12491],{"class":2384},"    allocateSpace",[82,12493,12494],{"class":92},"(tArray, len);\n",[82,12496,12498],{"class":84,"line":12497},62,[82,12499,12500],{"class":2828},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[82,12502,12504,12507],{"class":84,"line":12503},63,[82,12505,12506],{"class":2384},"    printInfo",[82,12508,12494],{"class":92},[82,12510,12512],{"class":84,"line":12511},64,[82,12513,486],{"emptyLinePlaceholder":485},[82,12515,12517],{"class":84,"line":12516},65,[82,12518,1391],{"class":92},[26,12520,12521],{"start":157},[29,12522,12523,12526],{},[2913,12524,12525],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12528,12529],{},"五名英雄信息如下：",[73,12531,12535],{"className":12532,"code":12533,"language":12534,"meta":78,"style":78},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[32,12536,12537,12555,12572,12589,12606],{"__ignoreMap":78},[82,12538,12539,12541,12544,12546,12548,12550,12553],{"class":84,"line":85},[82,12540,7512],{"class":92},[82,12542,12543],{"class":96},"\"刘备\"",[82,12545,3136],{"class":92},[82,12547,3526],{"class":88},[82,12549,3136],{"class":92},[82,12551,12552],{"class":96},"\"男\"",[82,12554,1497],{"class":92},[82,12556,12557,12559,12562,12564,12566,12568,12570],{"class":84,"line":157},[82,12558,7512],{"class":92},[82,12560,12561],{"class":96},"\"关羽\"",[82,12563,3136],{"class":92},[82,12565,3501],{"class":88},[82,12567,3136],{"class":92},[82,12569,12552],{"class":96},[82,12571,1497],{"class":92},[82,12573,12574,12576,12579,12581,12583,12585,12587],{"class":84,"line":404},[82,12575,7512],{"class":92},[82,12577,12578],{"class":96},"\"张飞\"",[82,12580,3136],{"class":92},[82,12582,3451],{"class":88},[82,12584,3136],{"class":92},[82,12586,12552],{"class":96},[82,12588,1497],{"class":92},[82,12590,12591,12593,12596,12598,12600,12602,12604],{"class":84,"line":413},[82,12592,7512],{"class":92},[82,12594,12595],{"class":96},"\"赵云\"",[82,12597,3136],{"class":92},[82,12599,3476],{"class":88},[82,12601,3136],{"class":92},[82,12603,12552],{"class":96},[82,12605,1497],{"class":92},[82,12607,12608,12610,12613,12615,12617,12619,12622],{"class":84,"line":508},[82,12609,7512],{"class":92},[82,12611,12612],{"class":96},"\"貂蝉\"",[82,12614,3136],{"class":92},[82,12616,3426],{"class":88},[82,12618,3136],{"class":92},[82,12620,12621],{"class":96},"\"女\"",[82,12623,1497],{"class":92},[19,12625,2105],{},[73,12627,12629],{"className":2762,"code":12628,"language":2764,"meta":78,"style":78},"#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",[32,12630,12631,12637,12647,12653,12660,12664,12668,12674,12679,12683,12688,12711,12715,12740,12744,12777,12782,12811,12816,12831,12857,12877,12882,12887,12891,12895,12900,12922,12926,12950,12954,13016,13020,13024,13032,13036,13041,13052,13056,13072,13088,13104,13120,13136,13140,13160,13182,13187,13200,13207,13212,13218,13223,13236,13242],{"__ignoreMap":78},[82,12632,12633,12635],{"class":84,"line":85},[82,12634,4550],{"class":112},[82,12636,4553],{"class":96},[82,12638,12639,12641,12643,12645],{"class":84,"line":157},[82,12640,4558],{"class":112},[82,12642,4561],{"class":112},[82,12644,4564],{"class":2384},[82,12646,3909],{"class":92},[82,12648,12649,12651],{"class":84,"line":404},[82,12650,4550],{"class":112},[82,12652,10340],{"class":96},[82,12654,12655,12657],{"class":84,"line":413},[82,12656,10350],{"class":112},[82,12658,12659],{"class":2384}," Sanguo\n",[82,12661,12662],{"class":84,"line":508},[82,12663,4161],{"class":92},[82,12665,12666],{"class":84,"line":513},[82,12667,10376],{"class":92},[82,12669,12670,12672],{"class":84,"line":1388},[82,12671,4585],{"class":112},[82,12673,10388],{"class":92},[82,12675,12676],{"class":84,"line":1394},[82,12677,12678],{"class":92},"    string gender;\n",[82,12680,12681],{"class":84,"line":1399},[82,12682,6590],{"class":92},[82,12684,12685],{"class":84,"line":1430},[82,12686,12687],{"class":2828},"\u002F\u002F定义排序函数\n",[82,12689,12690,12692,12694,12696,12699,12701,12703,12705,12707,12709],{"class":84,"line":1818},[82,12691,7956],{"class":112},[82,12693,9908],{"class":2384},[82,12695,93],{"class":92},[82,12697,12698],{"class":2384},"Sanguo",[82,12700,9110],{"class":112},[82,12702,3446],{"class":108},[82,12704,3136],{"class":92},[82,12706,2776],{"class":112},[82,12708,9923],{"class":108},[82,12710,119],{"class":92},[82,12712,12713],{"class":84,"line":2082},[82,12714,4161],{"class":92},[82,12716,12717,12719,12721,12723,12725,12727,12729,12731,12733,12736,12738],{"class":84,"line":2233},[82,12718,1888],{"class":112},[82,12720,93],{"class":92},[82,12722,2776],{"class":112},[82,12724,5630],{"class":92},[82,12726,113],{"class":112},[82,12728,2244],{"class":88},[82,12730,5637],{"class":92},[82,12732,3659],{"class":112},[82,12734,12735],{"class":92},"len;i",[82,12737,4892],{"class":112},[82,12739,119],{"class":92},[82,12741,12742],{"class":84,"line":2255},[82,12743,4630],{"class":92},[82,12745,12746,12749,12751,12753,12755,12757,12759,12761,12763,12765,12767,12769,12771,12773,12775],{"class":84,"line":2260},[82,12747,12748],{"class":112},"     for",[82,12750,4265],{"class":92},[82,12752,2776],{"class":112},[82,12754,6006],{"class":92},[82,12756,113],{"class":112},[82,12758,2244],{"class":88},[82,12760,6013],{"class":92},[82,12762,3659],{"class":112},[82,12764,9950],{"class":92},[82,12766,3288],{"class":112},[82,12768,2283],{"class":88},[82,12770,3288],{"class":112},[82,12772,6146],{"class":92},[82,12774,4892],{"class":112},[82,12776,119],{"class":92},[82,12778,12779],{"class":84,"line":2298},[82,12780,12781],{"class":92},"     {\n",[82,12783,12784,12787,12790,12792,12795,12797,12800,12802,12804,12806,12808],{"class":84,"line":2303},[82,12785,12786],{"class":112},"         if",[82,12788,12789],{"class":92}," ((s",[82,12791,2249],{"class":112},[82,12793,12794],{"class":92},"j)->age ",[82,12796,3709],{"class":112},[82,12798,12799],{"class":92}," (s",[82,12801,2249],{"class":112},[82,12803,3224],{"class":92},[82,12805,2249],{"class":112},[82,12807,2283],{"class":88},[82,12809,12810],{"class":92},")->age)\n",[82,12812,12813],{"class":84,"line":2321},[82,12814,12815],{"class":92},"         {\n",[82,12817,12818,12821,12823,12826,12828],{"class":84,"line":2533},[82,12819,12820],{"class":92},"             Sanguo temp",[82,12822,9745],{"class":112},[82,12824,12825],{"class":92},"(s",[82,12827,2249],{"class":112},[82,12829,12830],{"class":92},"j);\n",[82,12832,12833,12836,12838,12840,12843,12845,12847,12849,12851,12853,12855],{"class":84,"line":2538},[82,12834,12835],{"class":112},"             *",[82,12837,12825],{"class":92},[82,12839,2249],{"class":112},[82,12841,12842],{"class":92},"j)",[82,12844,9745],{"class":112},[82,12846,12825],{"class":92},[82,12848,2249],{"class":112},[82,12850,3224],{"class":92},[82,12852,2249],{"class":112},[82,12854,2283],{"class":88},[82,12856,5318],{"class":92},[82,12858,12859,12861,12863,12865,12867,12869,12871,12873,12875],{"class":84,"line":2548},[82,12860,12835],{"class":112},[82,12862,12825],{"class":92},[82,12864,2249],{"class":112},[82,12866,3224],{"class":92},[82,12868,2249],{"class":112},[82,12870,2283],{"class":88},[82,12872,3187],{"class":92},[82,12874,113],{"class":112},[82,12876,6875],{"class":92},[82,12878,12879],{"class":84,"line":2579},[82,12880,12881],{"class":92},"         }\n",[82,12883,12884],{"class":84,"line":2585},[82,12885,12886],{"class":92},"     }\n",[82,12888,12889],{"class":84,"line":4350},[82,12890,4787],{"class":92},[82,12892,12893],{"class":84,"line":4355},[82,12894,1391],{"class":92},[82,12896,12897],{"class":84,"line":4360},[82,12898,12899],{"class":2828},"\u002F\u002F定义打印函数\n",[82,12901,12902,12904,12906,12908,12910,12912,12914,12916,12918,12920],{"class":84,"line":4365},[82,12903,7956],{"class":112},[82,12905,12206],{"class":2384},[82,12907,93],{"class":92},[82,12909,12698],{"class":2384},[82,12911,9110],{"class":112},[82,12913,3446],{"class":108},[82,12915,3136],{"class":92},[82,12917,2776],{"class":112},[82,12919,9923],{"class":108},[82,12921,119],{"class":92},[82,12923,12924],{"class":84,"line":4379},[82,12925,4161],{"class":92},[82,12927,12928,12930,12932,12934,12936,12938,12940,12942,12944,12946,12948],{"class":84,"line":4384},[82,12929,1888],{"class":112},[82,12931,4265],{"class":92},[82,12933,2776],{"class":112},[82,12935,5630],{"class":92},[82,12937,113],{"class":112},[82,12939,2244],{"class":88},[82,12941,5637],{"class":92},[82,12943,3659],{"class":112},[82,12945,12735],{"class":92},[82,12947,4892],{"class":112},[82,12949,119],{"class":92},[82,12951,12952],{"class":84,"line":5176},[82,12953,4630],{"class":92},[82,12955,12956,12958,12960,12962,12964,12967,12969,12971,12973,12976,12978,12980,12982,12985,12987,12989,12991,12994,12996,12998,13000,13003,13005,13007,13009,13012,13014],{"class":84,"line":5190},[82,12957,6047],{"class":92},[82,12959,3792],{"class":112},[82,12961,216],{"class":96},[82,12963,3849],{"class":88},[82,12965,12966],{"class":96},"姓名：\"",[82,12968,3792],{"class":112},[82,12970,12825],{"class":92},[82,12972,2249],{"class":112},[82,12974,12975],{"class":92},"i)->name",[82,12977,3792],{"class":112},[82,12979,216],{"class":96},[82,12981,3849],{"class":88},[82,12983,12984],{"class":96},"年龄：\"",[82,12986,3792],{"class":112},[82,12988,12825],{"class":92},[82,12990,2249],{"class":112},[82,12992,12993],{"class":92},"i)->age",[82,12995,3792],{"class":112},[82,12997,216],{"class":96},[82,12999,3849],{"class":88},[82,13001,13002],{"class":96},"性别：\"",[82,13004,3792],{"class":112},[82,13006,12825],{"class":92},[82,13008,2249],{"class":112},[82,13010,13011],{"class":92},"i)->gender",[82,13013,3792],{"class":112},[82,13015,3814],{"class":92},[82,13017,13018],{"class":84,"line":5198},[82,13019,4787],{"class":92},[82,13021,13022],{"class":84,"line":5203},[82,13023,1391],{"class":92},[82,13025,13026,13028,13030],{"class":84,"line":5209},[82,13027,2776],{"class":112},[82,13029,4573],{"class":2384},[82,13031,4576],{"class":92},[82,13033,13034],{"class":84,"line":5215},[82,13035,4161],{"class":92},[82,13037,13038],{"class":84,"line":5220},[82,13039,13040],{"class":2828},"    \u002F\u002F定义结构体变量\n",[82,13042,13043,13046,13048,13050],{"class":84,"line":10539},[82,13044,13045],{"class":92},"    Sanguo s1[",[82,13047,3077],{"class":88},[82,13049,3689],{"class":92},[82,13051,7503],{"class":112},[82,13053,13054],{"class":84,"line":10563},[82,13055,4630],{"class":92},[82,13057,13058,13060,13062,13064,13066,13068,13070],{"class":84,"line":10568},[82,13059,7512],{"class":92},[82,13061,12543],{"class":96},[82,13063,3136],{"class":92},[82,13065,3526],{"class":88},[82,13067,3136],{"class":92},[82,13069,12552],{"class":96},[82,13071,1497],{"class":92},[82,13073,13074,13076,13078,13080,13082,13084,13086],{"class":84,"line":10574},[82,13075,7512],{"class":92},[82,13077,12561],{"class":96},[82,13079,3136],{"class":92},[82,13081,3501],{"class":88},[82,13083,3136],{"class":92},[82,13085,12552],{"class":96},[82,13087,1497],{"class":92},[82,13089,13090,13092,13094,13096,13098,13100,13102],{"class":84,"line":10601},[82,13091,7512],{"class":92},[82,13093,12578],{"class":96},[82,13095,3136],{"class":92},[82,13097,3451],{"class":88},[82,13099,3136],{"class":92},[82,13101,12552],{"class":96},[82,13103,1497],{"class":92},[82,13105,13106,13108,13110,13112,13114,13116,13118],{"class":84,"line":10606},[82,13107,7512],{"class":92},[82,13109,12595],{"class":96},[82,13111,3136],{"class":92},[82,13113,3476],{"class":88},[82,13115,3136],{"class":92},[82,13117,12552],{"class":96},[82,13119,1497],{"class":92},[82,13121,13122,13124,13126,13128,13130,13132,13134],{"class":84,"line":10612},[82,13123,7512],{"class":92},[82,13125,12612],{"class":96},[82,13127,3136],{"class":92},[82,13129,3426],{"class":88},[82,13131,3136],{"class":92},[82,13133,12621],{"class":96},[82,13135,1497],{"class":92},[82,13137,13138],{"class":84,"line":10624},[82,13139,7545],{"class":92},[82,13141,13142,13144,13146,13148,13151,13153,13156,13158],{"class":84,"line":10636},[82,13143,4585],{"class":112},[82,13145,9923],{"class":92},[82,13147,6798],{"class":112},[82,13149,13150],{"class":92},"(s1)",[82,13152,6804],{"class":112},[82,13154,13155],{"class":92},"(s1[",[82,13157,2244],{"class":88},[82,13159,6451],{"class":92},[82,13161,13162,13165,13167,13170,13172,13175,13178,13180],{"class":84,"line":10648},[82,13163,13164],{"class":92},"    Sanguo ",[82,13166,3212],{"class":112},[82,13168,13169],{"class":92},"s ",[82,13171,113],{"class":112},[82,13173,13174],{"class":112}," &",[82,13176,13177],{"class":92},"s1[",[82,13179,2244],{"class":88},[82,13181,7285],{"class":92},[82,13183,13184],{"class":84,"line":12307},[82,13185,13186],{"class":2828},"    \u002F\u002F排序前：\n",[82,13188,13189,13191,13193,13196,13198],{"class":84,"line":12332},[82,13190,9121],{"class":92},[82,13192,3792],{"class":112},[82,13194,13195],{"class":96}," \"排序前：\"",[82,13197,4060],{"class":112},[82,13199,11431],{"class":92},[82,13201,13202,13204],{"class":84,"line":12355},[82,13203,12506],{"class":2384},[82,13205,13206],{"class":92},"(s,len);\n",[82,13208,13209],{"class":84,"line":12379},[82,13210,13211],{"class":2828},"    \u002F\u002F调用排序函数\n",[82,13213,13214,13216],{"class":84,"line":12384},[82,13215,10190],{"class":2384},[82,13217,13206],{"class":92},[82,13219,13220],{"class":84,"line":12389},[82,13221,13222],{"class":2828},"    \u002F\u002F排序后\n",[82,13224,13225,13227,13229,13232,13234],{"class":84,"line":12394},[82,13226,9121],{"class":92},[82,13228,3792],{"class":112},[82,13230,13231],{"class":96}," \"排序后：\"",[82,13233,4060],{"class":112},[82,13235,11431],{"class":92},[82,13237,13238,13240],{"class":84,"line":12403},[82,13239,12506],{"class":2384},[82,13241,13206],{"class":92},[82,13243,13244],{"class":84,"line":12408},[82,13245,1391],{"class":92},[19,13247,13248,13249,13251],{},"注意：使用指针时直接用传首地址**&s",[82,13250,2244],{},"**",[2671,13253,13254],{},"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":78,"searchDepth":157,"depth":157,"links":13256},[13257,13258,13259,13260,13261,13262,13263],{"id":10294,"depth":157,"text":10295},{"id":10656,"depth":157,"text":10657},{"id":10925,"depth":157,"text":10926},{"id":11090,"depth":157,"text":11091},{"id":11306,"depth":157,"text":11307},{"id":11627,"depth":157,"text":11628},{"id":11855,"depth":157,"text":11856},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10283,"description":10291},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13270,"title":13271,"body":13272,"description":78,"extension":2700,"meta":14615,"navigation":485,"path":14616,"seo":14617,"stem":14618,"__hash__":14619},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13273,"toc":14609},[13274,13277,13281,13287,13301,13306,13309,13313,13320,13326,13329,13336,13342,13347,13350,13353,13356,13920,13923,13937,13941,13946,13962,14102,14105,14111,14114,14119,14127,14235,14238,14243,14246,14251,14254,14260,14263,14606],[10,13275,13271],{"id":13276},"_5程序内存模型",[14,13278,13280],{"id":13279},"_51内存分区模型","5.1内存分区模型",[19,13282,13283,13284],{},"C++程序在执行时，将内存大方向划分为",[2913,13285,13286],{},"4个区域",[3755,13288,13289,13292,13295,13298],{},[29,13290,13291],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,13293,13294],{},"全局区：存放全局变量和静态变量以及常量",[29,13296,13297],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,13299,13300],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,13302,13303],{},[2913,13304,13305],{},"内存四区意义：",[19,13307,13308],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[65,13310,13312],{"id":13311},"_511程序运行前","5.1.1程序运行前",[19,13314,13315,13316,13319],{},"​\t在程序编译后，生成了exe可执行程序，",[2913,13317,13318],{},"未执行该程序前","分为两个区域",[19,13321,13322,13323],{},"​\t",[2913,13324,13325],{},"代码区：",[19,13327,13328],{},"​\t\t存放 CPU 执行的机器指令",[19,13330,13331,13332,13335],{},"​\t\t代码区是",[2913,13333,13334],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13337,13331,13338,13341],{},[2913,13339,13340],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13343,13322,13344],{},[2913,13345,13346],{},"全局区：",[19,13348,13349],{},"​\t\t全局变量和静态变量存放在此.",[19,13351,13352],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13354,13355],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[73,13357,13359],{"className":2762,"code":13358,"language":2764,"meta":78,"style":78},"\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",[32,13360,13361,13366,13379,13392,13396,13401,13416,13431,13435,13444,13448,13453,13466,13479,13483,13488,13514,13540,13544,13571,13597,13601,13606,13622,13637,13641,13667,13693,13697,13722,13747,13751,13777,13803,13807,13823,13838,13864,13890,13894,13904,13908,13916],{"__ignoreMap":78},[82,13362,13363],{"class":84,"line":85},[82,13364,13365],{"class":2828},"\u002F\u002F全局变量\n",[82,13367,13368,13370,13373,13375,13377],{"class":84,"line":157},[82,13369,2776],{"class":112},[82,13371,13372],{"class":92}," g_a ",[82,13374,113],{"class":112},[82,13376,4638],{"class":88},[82,13378,3909],{"class":92},[82,13380,13381,13383,13386,13388,13390],{"class":84,"line":404},[82,13382,2776],{"class":112},[82,13384,13385],{"class":92}," g_b ",[82,13387,113],{"class":112},[82,13389,4638],{"class":88},[82,13391,3909],{"class":92},[82,13393,13394],{"class":84,"line":413},[82,13395,486],{"emptyLinePlaceholder":485},[82,13397,13398],{"class":84,"line":508},[82,13399,13400],{"class":2828},"\u002F\u002F全局常量\n",[82,13402,13403,13405,13407,13410,13412,13414],{"class":84,"line":513},[82,13404,9384],{"class":112},[82,13406,4982],{"class":112},[82,13408,13409],{"class":92}," c_g_a ",[82,13411,113],{"class":112},[82,13413,4638],{"class":88},[82,13415,3909],{"class":92},[82,13417,13418,13420,13422,13425,13427,13429],{"class":84,"line":1388},[82,13419,9384],{"class":112},[82,13421,4982],{"class":112},[82,13423,13424],{"class":92}," c_g_b ",[82,13426,113],{"class":112},[82,13428,4638],{"class":88},[82,13430,3909],{"class":92},[82,13432,13433],{"class":84,"line":1394},[82,13434,486],{"emptyLinePlaceholder":485},[82,13436,13437,13439,13441],{"class":84,"line":1399},[82,13438,2776],{"class":112},[82,13440,4573],{"class":2384},[82,13442,13443],{"class":92},"() {\n",[82,13445,13446],{"class":84,"line":1430},[82,13447,486],{"emptyLinePlaceholder":485},[82,13449,13450],{"class":84,"line":1818},[82,13451,13452],{"class":2828},"    \u002F\u002F局部变量\n",[82,13454,13455,13457,13460,13462,13464],{"class":84,"line":2082},[82,13456,4585],{"class":112},[82,13458,13459],{"class":92}," a ",[82,13461,113],{"class":112},[82,13463,4638],{"class":88},[82,13465,3909],{"class":92},[82,13467,13468,13470,13473,13475,13477],{"class":84,"line":2233},[82,13469,4585],{"class":112},[82,13471,13472],{"class":92}," b ",[82,13474,113],{"class":112},[82,13476,4638],{"class":88},[82,13478,3909],{"class":92},[82,13480,13481],{"class":84,"line":2255},[82,13482,486],{"emptyLinePlaceholder":485},[82,13484,13485],{"class":84,"line":2260},[82,13486,13487],{"class":2828},"    \u002F\u002F打印地址\n",[82,13489,13490,13492,13494,13497,13499,13501,13503,13505,13507,13510,13512],{"class":84,"line":2298},[82,13491,9121],{"class":92},[82,13493,3792],{"class":112},[82,13495,13496],{"class":96}," \"局部变量a地址为： \"",[82,13498,4060],{"class":112},[82,13500,4265],{"class":92},[82,13502,2776],{"class":112},[82,13504,3187],{"class":92},[82,13506,3111],{"class":112},[82,13508,13509],{"class":92},"a ",[82,13511,3792],{"class":112},[82,13513,11431],{"class":92},[82,13515,13516,13518,13520,13523,13525,13527,13529,13531,13533,13536,13538],{"class":84,"line":2303},[82,13517,9121],{"class":92},[82,13519,3792],{"class":112},[82,13521,13522],{"class":96}," \"局部变量b地址为： \"",[82,13524,4060],{"class":112},[82,13526,4265],{"class":92},[82,13528,2776],{"class":112},[82,13530,3187],{"class":92},[82,13532,3111],{"class":112},[82,13534,13535],{"class":92},"b ",[82,13537,3792],{"class":112},[82,13539,11431],{"class":92},[82,13541,13542],{"class":84,"line":2321},[82,13543,486],{"emptyLinePlaceholder":485},[82,13545,13546,13548,13550,13553,13555,13558,13560,13562,13564,13567,13569],{"class":84,"line":2533},[82,13547,9121],{"class":92},[82,13549,3792],{"class":112},[82,13551,13552],{"class":96}," \"全局变量g_a地址为： \"",[82,13554,4060],{"class":112},[82,13556,13557],{"class":92},"  (",[82,13559,2776],{"class":112},[82,13561,3187],{"class":92},[82,13563,3111],{"class":112},[82,13565,13566],{"class":92},"g_a ",[82,13568,3792],{"class":112},[82,13570,11431],{"class":92},[82,13572,13573,13575,13577,13580,13582,13584,13586,13588,13590,13593,13595],{"class":84,"line":2538},[82,13574,9121],{"class":92},[82,13576,3792],{"class":112},[82,13578,13579],{"class":96}," \"全局变量g_b地址为： \"",[82,13581,4060],{"class":112},[82,13583,13557],{"class":92},[82,13585,2776],{"class":112},[82,13587,3187],{"class":92},[82,13589,3111],{"class":112},[82,13591,13592],{"class":92},"g_b ",[82,13594,3792],{"class":112},[82,13596,11431],{"class":92},[82,13598,13599],{"class":84,"line":2548},[82,13600,486],{"emptyLinePlaceholder":485},[82,13602,13603],{"class":84,"line":2579},[82,13604,13605],{"class":2828},"    \u002F\u002F静态变量\n",[82,13607,13608,13611,13613,13616,13618,13620],{"class":84,"line":2585},[82,13609,13610],{"class":112},"    static",[82,13612,4982],{"class":112},[82,13614,13615],{"class":92}," s_a ",[82,13617,113],{"class":112},[82,13619,4638],{"class":88},[82,13621,3909],{"class":92},[82,13623,13624,13626,13628,13631,13633,13635],{"class":84,"line":4350},[82,13625,13610],{"class":112},[82,13627,4982],{"class":112},[82,13629,13630],{"class":92}," s_b ",[82,13632,113],{"class":112},[82,13634,4638],{"class":88},[82,13636,3909],{"class":92},[82,13638,13639],{"class":84,"line":4355},[82,13640,486],{"emptyLinePlaceholder":485},[82,13642,13643,13645,13647,13650,13652,13654,13656,13658,13660,13663,13665],{"class":84,"line":4360},[82,13644,9121],{"class":92},[82,13646,3792],{"class":112},[82,13648,13649],{"class":96}," \"静态变量s_a地址为： \"",[82,13651,4060],{"class":112},[82,13653,4265],{"class":92},[82,13655,2776],{"class":112},[82,13657,3187],{"class":92},[82,13659,3111],{"class":112},[82,13661,13662],{"class":92},"s_a ",[82,13664,3792],{"class":112},[82,13666,11431],{"class":92},[82,13668,13669,13671,13673,13676,13678,13680,13682,13684,13686,13689,13691],{"class":84,"line":4365},[82,13670,9121],{"class":92},[82,13672,3792],{"class":112},[82,13674,13675],{"class":96}," \"静态变量s_b地址为： \"",[82,13677,4060],{"class":112},[82,13679,4265],{"class":92},[82,13681,2776],{"class":112},[82,13683,3187],{"class":92},[82,13685,3111],{"class":112},[82,13687,13688],{"class":92},"s_b ",[82,13690,3792],{"class":112},[82,13692,11431],{"class":92},[82,13694,13695],{"class":84,"line":4379},[82,13696,486],{"emptyLinePlaceholder":485},[82,13698,13699,13701,13703,13706,13708,13710,13712,13714,13716,13718,13720],{"class":84,"line":4384},[82,13700,9121],{"class":92},[82,13702,3792],{"class":112},[82,13704,13705],{"class":96}," \"字符串常量地址为： \"",[82,13707,4060],{"class":112},[82,13709,4265],{"class":92},[82,13711,2776],{"class":112},[82,13713,3187],{"class":92},[82,13715,3111],{"class":112},[82,13717,3809],{"class":96},[82,13719,4060],{"class":112},[82,13721,11431],{"class":92},[82,13723,13724,13726,13728,13730,13732,13734,13736,13738,13740,13743,13745],{"class":84,"line":5176},[82,13725,9121],{"class":92},[82,13727,3792],{"class":112},[82,13729,13705],{"class":96},[82,13731,4060],{"class":112},[82,13733,4265],{"class":92},[82,13735,2776],{"class":112},[82,13737,3187],{"class":92},[82,13739,3111],{"class":112},[82,13741,13742],{"class":96},"\"hello world1\"",[82,13744,4060],{"class":112},[82,13746,11431],{"class":92},[82,13748,13749],{"class":84,"line":5190},[82,13750,486],{"emptyLinePlaceholder":485},[82,13752,13753,13755,13757,13760,13762,13764,13766,13768,13770,13773,13775],{"class":84,"line":5198},[82,13754,9121],{"class":92},[82,13756,3792],{"class":112},[82,13758,13759],{"class":96}," \"全局常量c_g_a地址为： \"",[82,13761,4060],{"class":112},[82,13763,4265],{"class":92},[82,13765,2776],{"class":112},[82,13767,3187],{"class":92},[82,13769,3111],{"class":112},[82,13771,13772],{"class":92},"c_g_a ",[82,13774,3792],{"class":112},[82,13776,11431],{"class":92},[82,13778,13779,13781,13783,13786,13788,13790,13792,13794,13796,13799,13801],{"class":84,"line":5203},[82,13780,9121],{"class":92},[82,13782,3792],{"class":112},[82,13784,13785],{"class":96}," \"全局常量c_g_b地址为： \"",[82,13787,4060],{"class":112},[82,13789,4265],{"class":92},[82,13791,2776],{"class":112},[82,13793,3187],{"class":92},[82,13795,3111],{"class":112},[82,13797,13798],{"class":92},"c_g_b ",[82,13800,3792],{"class":112},[82,13802,11431],{"class":92},[82,13804,13805],{"class":84,"line":5209},[82,13806,486],{"emptyLinePlaceholder":485},[82,13808,13809,13812,13814,13817,13819,13821],{"class":84,"line":5215},[82,13810,13811],{"class":112},"    const",[82,13813,4982],{"class":112},[82,13815,13816],{"class":92}," c_l_a ",[82,13818,113],{"class":112},[82,13820,4638],{"class":88},[82,13822,3909],{"class":92},[82,13824,13825,13827,13829,13832,13834,13836],{"class":84,"line":5220},[82,13826,13811],{"class":112},[82,13828,4982],{"class":112},[82,13830,13831],{"class":92}," c_l_b ",[82,13833,113],{"class":112},[82,13835,4638],{"class":88},[82,13837,3909],{"class":92},[82,13839,13840,13842,13844,13847,13849,13851,13853,13855,13857,13860,13862],{"class":84,"line":10539},[82,13841,9121],{"class":92},[82,13843,3792],{"class":112},[82,13845,13846],{"class":96}," \"局部常量c_l_a地址为： \"",[82,13848,4060],{"class":112},[82,13850,4265],{"class":92},[82,13852,2776],{"class":112},[82,13854,3187],{"class":92},[82,13856,3111],{"class":112},[82,13858,13859],{"class":92},"c_l_a ",[82,13861,3792],{"class":112},[82,13863,11431],{"class":92},[82,13865,13866,13868,13870,13873,13875,13877,13879,13881,13883,13886,13888],{"class":84,"line":10563},[82,13867,9121],{"class":92},[82,13869,3792],{"class":112},[82,13871,13872],{"class":96}," \"局部常量c_l_b地址为： \"",[82,13874,4060],{"class":112},[82,13876,4265],{"class":92},[82,13878,2776],{"class":112},[82,13880,3187],{"class":92},[82,13882,3111],{"class":112},[82,13884,13885],{"class":92},"c_l_b ",[82,13887,3792],{"class":112},[82,13889,11431],{"class":92},[82,13891,13892],{"class":84,"line":10568},[82,13893,486],{"emptyLinePlaceholder":485},[82,13895,13896,13898,13900,13902],{"class":84,"line":10574},[82,13897,4903],{"class":2384},[82,13899,93],{"class":92},[82,13901,4908],{"class":96},[82,13903,5318],{"class":92},[82,13905,13906],{"class":84,"line":10601},[82,13907,486],{"emptyLinePlaceholder":485},[82,13909,13910,13912,13914],{"class":84,"line":10606},[82,13911,6685],{"class":112},[82,13913,6688],{"class":88},[82,13915,3909],{"class":92},[82,13917,13918],{"class":84,"line":10612},[82,13919,1391],{"class":92},[19,13921,13922],{},"总结：",[3755,13924,13925,13928,13931,13934],{},[29,13926,13927],{},"c++中程序运行前分为全局区和代码区",[29,13929,13930],{},"代码区特点是共享和只读",[29,13932,13933],{},"全局区中存放全局变量、静态变量、常量",[29,13935,13936],{},"常量区中存放const修饰的全局常量和字符串常量",[65,13938,13940],{"id":13939},"_512程序运行后","5.1.2程序运行后",[26,13942,13943],{},[29,13944,13945],{},"栈区：",[3755,13947,13948,13955],{},[29,13949,13950,13951,13954],{},"由编译器自动分配释放, 存放",[2913,13952,13953],{},"函数的参数值,局部变量","等",[29,13956,13957,13958,13961],{},"注意事项：",[2913,13959,13960],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[73,13963,13965],{"className":2762,"code":13964,"language":2764,"meta":78,"style":78},"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",[32,13966,13967,13978,13982,13997,14009,14013,14017,14025,14030,14045,14063,14080,14090,14098],{"__ignoreMap":78},[82,13968,13969,13971,13973,13976],{"class":84,"line":85},[82,13970,2776],{"class":112},[82,13972,9110],{"class":112},[82,13974,13975],{"class":2384}," func",[82,13977,4576],{"class":92},[82,13979,13980],{"class":84,"line":157},[82,13981,4161],{"class":92},[82,13983,13984,13986,13988,13990,13992,13994],{"class":84,"line":404},[82,13985,4585],{"class":112},[82,13987,13459],{"class":92},[82,13989,113],{"class":112},[82,13991,4638],{"class":88},[82,13993,2825],{"class":92},[82,13995,13996],{"class":2828}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[82,13998,13999,14001,14003,14006],{"class":84,"line":413},[82,14000,6685],{"class":112},[82,14002,13174],{"class":112},[82,14004,14005],{"class":92},"a;",[82,14007,14008],{"class":2828}," \u002F\u002F放回局部变量的地址\n",[82,14010,14011],{"class":84,"line":508},[82,14012,1391],{"class":92},[82,14014,14015],{"class":84,"line":513},[82,14016,486],{"emptyLinePlaceholder":485},[82,14018,14019,14021,14023],{"class":84,"line":1388},[82,14020,2776],{"class":112},[82,14022,4573],{"class":2384},[82,14024,13443],{"class":92},[82,14026,14027],{"class":84,"line":1394},[82,14028,14029],{"class":2828},"    \u002F\u002F接受func的返回值\n",[82,14031,14032,14034,14036,14039,14041,14043],{"class":84,"line":1399},[82,14033,4585],{"class":112},[82,14035,9110],{"class":112},[82,14037,14038],{"class":92},"p ",[82,14040,113],{"class":112},[82,14042,13975],{"class":2384},[82,14044,8228],{"class":92},[82,14046,14047,14049,14051,14053,14055,14057,14060],{"class":84,"line":1430},[82,14048,9121],{"class":92},[82,14050,3792],{"class":112},[82,14052,9110],{"class":112},[82,14054,14038],{"class":92},[82,14056,3792],{"class":112},[82,14058,14059],{"class":92}," endl;",[82,14061,14062],{"class":2828}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[82,14064,14065,14067,14069,14071,14073,14075,14077],{"class":84,"line":1818},[82,14066,9121],{"class":92},[82,14068,3792],{"class":112},[82,14070,9110],{"class":112},[82,14072,14038],{"class":92},[82,14074,3792],{"class":112},[82,14076,14059],{"class":92},[82,14078,14079],{"class":2828}," \u002F\u002F第二次这个数据不再保留\n",[82,14081,14082,14084,14086,14088],{"class":84,"line":2082},[82,14083,4903],{"class":2384},[82,14085,93],{"class":92},[82,14087,4908],{"class":96},[82,14089,5318],{"class":92},[82,14091,14092,14094,14096],{"class":84,"line":2233},[82,14093,6685],{"class":112},[82,14095,6688],{"class":88},[82,14097,3909],{"class":92},[82,14099,14100],{"class":84,"line":2255},[82,14101,1391],{"class":92},[19,14103,14104],{},"输出结果：",[19,14106,14107],{},[4078,14108],{"alt":14109,"src":14110},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,14112,14113],{},"总结：不要返回局部变量的地址",[26,14115,14116],{"start":157},[29,14117,14118],{},"堆区",[3755,14120,14121,14124],{},[29,14122,14123],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,14125,14126],{},"在c++中主要利用new在堆区开辟内存",[73,14128,14130],{"className":2762,"code":14129,"language":2764,"meta":78,"style":78},"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",[32,14131,14132,14147,14151,14156,14177,14184,14188,14196,14200,14205,14219,14231],{"__ignoreMap":78},[82,14133,14134,14136,14139,14142,14144],{"class":84,"line":85},[82,14135,2776],{"class":112},[82,14137,14138],{"class":112},"  *",[82,14140,14141],{"class":2384},"func",[82,14143,5026],{"class":92},[82,14145,14146],{"class":2828},"  \u002F\u002F函数返回指针\n",[82,14148,14149],{"class":84,"line":157},[82,14150,4161],{"class":92},[82,14152,14153],{"class":84,"line":404},[82,14154,14155],{"class":2828},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[82,14157,14158,14160,14162,14164,14166,14169,14171,14173,14175],{"class":84,"line":413},[82,14159,6742],{"class":112},[82,14161,9110],{"class":112},[82,14163,19],{"class":92},[82,14165,113],{"class":112},[82,14167,14168],{"class":112}," new",[82,14170,4982],{"class":112},[82,14172,93],{"class":92},[82,14174,440],{"class":88},[82,14176,5318],{"class":92},[82,14178,14179,14181],{"class":84,"line":508},[82,14180,6976],{"class":112},[82,14182,14183],{"class":92}," p;\n",[82,14185,14186],{"class":84,"line":513},[82,14187,1391],{"class":92},[82,14189,14190,14192,14194],{"class":84,"line":1388},[82,14191,2776],{"class":112},[82,14193,4573],{"class":2384},[82,14195,4576],{"class":92},[82,14197,14198],{"class":84,"line":1394},[82,14199,4161],{"class":92},[82,14201,14202],{"class":84,"line":1399},[82,14203,14204],{"class":2828},"    \u002F\u002F在堆区开辟数据\n",[82,14206,14207,14209,14211,14213,14215,14217],{"class":84,"line":1430},[82,14208,4585],{"class":112},[82,14210,9110],{"class":112},[82,14212,19],{"class":92},[82,14214,113],{"class":112},[82,14216,14141],{"class":2384},[82,14218,8228],{"class":92},[82,14220,14221,14223,14225,14227,14229],{"class":84,"line":1818},[82,14222,4166],{"class":92},[82,14224,9011],{"class":112},[82,14226,19],{"class":92},[82,14228,3792],{"class":112},[82,14230,3814],{"class":92},[82,14232,14233],{"class":84,"line":2082},[82,14234,1391],{"class":92},[19,14236,14237],{},"图片展示：",[19,14239,14240],{},[4078,14241],{"alt":14109,"src":14242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14244,14245],{},"堆区内存由程序员管生死！！！",[26,14247,14248],{"start":404},[29,14249,14250],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14252,14253],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14255,14256,14257],{},"​语法：",[32,14258,14259],{}," new 数据类型",[19,14261,14262],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[73,14264,14266],{"className":2762,"code":14265,"language":2764,"meta":78,"style":78},"\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",[32,14267,14268,14273,14283,14287,14292,14297,14319,14323,14331,14335,14349,14361,14373,14385,14390,14395,14406,14410,14415,14423,14427,14432,14454,14480,14484,14502,14506,14532,14536,14548,14552,14557,14562,14570,14574,14578,14586,14590,14596,14602],{"__ignoreMap":78},[82,14269,14270],{"class":84,"line":85},[82,14271,14272],{"class":2828},"\u002F\u002F1.new的基本语法\n",[82,14274,14275,14277,14279,14281],{"class":84,"line":157},[82,14276,2776],{"class":112},[82,14278,9110],{"class":112},[82,14280,14141],{"class":2384},[82,14282,4576],{"class":92},[82,14284,14285],{"class":84,"line":404},[82,14286,4161],{"class":92},[82,14288,14289],{"class":84,"line":413},[82,14290,14291],{"class":2828},"    \u002F\u002F在堆区创建整型数据\n",[82,14293,14294],{"class":84,"line":508},[82,14295,14296],{"class":2828},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[82,14298,14299,14301,14303,14305,14308,14310,14312,14314,14316],{"class":84,"line":513},[82,14300,4585],{"class":112},[82,14302,9110],{"class":112},[82,14304,19],{"class":92},[82,14306,14307],{"class":112},"=new",[82,14309,4982],{"class":112},[82,14311,93],{"class":92},[82,14313,440],{"class":88},[82,14315,8558],{"class":92},[82,14317,14318],{"class":2828},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[82,14320,14321],{"class":84,"line":1388},[82,14322,1391],{"class":92},[82,14324,14325,14327,14329],{"class":84,"line":1394},[82,14326,7956],{"class":112},[82,14328,8180],{"class":2384},[82,14330,4576],{"class":92},[82,14332,14333],{"class":84,"line":1399},[82,14334,4161],{"class":92},[82,14336,14337,14339,14341,14343,14345,14347],{"class":84,"line":1430},[82,14338,4585],{"class":112},[82,14340,9110],{"class":112},[82,14342,19],{"class":92},[82,14344,113],{"class":112},[82,14346,14141],{"class":2384},[82,14348,8228],{"class":92},[82,14350,14351,14353,14355,14357,14359],{"class":84,"line":1818},[82,14352,4166],{"class":92},[82,14354,9011],{"class":112},[82,14356,19],{"class":92},[82,14358,3792],{"class":112},[82,14360,3814],{"class":92},[82,14362,14363,14365,14367,14369,14371],{"class":84,"line":2082},[82,14364,4166],{"class":92},[82,14366,9011],{"class":112},[82,14368,19],{"class":92},[82,14370,3792],{"class":112},[82,14372,3814],{"class":92},[82,14374,14375,14377,14379,14381,14383],{"class":84,"line":2233},[82,14376,4166],{"class":92},[82,14378,9011],{"class":112},[82,14380,19],{"class":92},[82,14382,3792],{"class":112},[82,14384,3814],{"class":92},[82,14386,14387],{"class":84,"line":2255},[82,14388,14389],{"class":2828},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[82,14391,14392],{"class":84,"line":2260},[82,14393,14394],{"class":2828},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[82,14396,14397,14400,14403],{"class":84,"line":2298},[82,14398,14399],{"class":112},"    delete",[82,14401,14402],{"class":92}," p;",[82,14404,14405],{"class":2828},"\u002F\u002F删除这块地址\n",[82,14407,14408],{"class":84,"line":2303},[82,14409,1391],{"class":92},[82,14411,14412],{"class":84,"line":2321},[82,14413,14414],{"class":2828},"\u002F\u002F2.在堆区利用new开辟数组\n",[82,14416,14417,14419,14421],{"class":84,"line":2533},[82,14418,7956],{"class":112},[82,14420,8249],{"class":2384},[82,14422,4576],{"class":92},[82,14424,14425],{"class":84,"line":2538},[82,14426,4161],{"class":92},[82,14428,14429],{"class":84,"line":2548},[82,14430,14431],{"class":2828},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[82,14433,14434,14436,14438,14440,14442,14444,14446,14448,14451],{"class":84,"line":2579},[82,14435,4585],{"class":112},[82,14437,9110],{"class":112},[82,14439,6475],{"class":92},[82,14441,14307],{"class":112},[82,14443,4982],{"class":112},[82,14445,3639],{"class":92},[82,14447,440],{"class":88},[82,14449,14450],{"class":92},"];",[82,14452,14453],{"class":2828},"\u002F\u002F10代表数组有10个元素\n",[82,14455,14456,14458,14460,14462,14464,14466,14468,14470,14472,14474,14476,14478],{"class":84,"line":2585},[82,14457,1888],{"class":112},[82,14459,4265],{"class":92},[82,14461,2776],{"class":112},[82,14463,5630],{"class":92},[82,14465,113],{"class":112},[82,14467,2244],{"class":88},[82,14469,5637],{"class":92},[82,14471,3659],{"class":112},[82,14473,440],{"class":88},[82,14475,5637],{"class":92},[82,14477,4892],{"class":112},[82,14479,119],{"class":92},[82,14481,14482],{"class":84,"line":4350},[82,14483,4630],{"class":92},[82,14485,14486,14489,14491,14493,14495,14497,14499],{"class":84,"line":4355},[82,14487,14488],{"class":92},"        arr[i]",[82,14490,113],{"class":112},[82,14492,3199],{"class":92},[82,14494,2249],{"class":112},[82,14496,3069],{"class":88},[82,14498,2825],{"class":92},[82,14500,14501],{"class":2828},"\u002F\u002F给10个元素赋值100～109\n",[82,14503,14504],{"class":84,"line":4360},[82,14505,4787],{"class":92},[82,14507,14508,14510,14512,14514,14516,14518,14520,14522,14524,14526,14528,14530],{"class":84,"line":4365},[82,14509,1888],{"class":112},[82,14511,4265],{"class":92},[82,14513,2776],{"class":112},[82,14515,5630],{"class":92},[82,14517,113],{"class":112},[82,14519,2244],{"class":88},[82,14521,5637],{"class":92},[82,14523,3659],{"class":112},[82,14525,440],{"class":88},[82,14527,5637],{"class":92},[82,14529,4892],{"class":112},[82,14531,119],{"class":92},[82,14533,14534],{"class":84,"line":4379},[82,14535,4630],{"class":92},[82,14537,14538,14540,14542,14544,14546],{"class":84,"line":4384},[82,14539,6047],{"class":92},[82,14541,3792],{"class":112},[82,14543,6949],{"class":92},[82,14545,3792],{"class":112},[82,14547,3814],{"class":92},[82,14549,14550],{"class":84,"line":5176},[82,14551,4787],{"class":92},[82,14553,14554],{"class":84,"line":5190},[82,14555,14556],{"class":2828},"    \u002F\u002F释放堆区数组\n",[82,14558,14559],{"class":84,"line":5198},[82,14560,14561],{"class":2828},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[82,14563,14564,14567],{"class":84,"line":5203},[82,14565,14566],{"class":112},"    delete[]",[82,14568,14569],{"class":92}," arr;\n",[82,14571,14572],{"class":84,"line":5209},[82,14573,1391],{"class":92},[82,14575,14576],{"class":84,"line":5215},[82,14577,486],{"emptyLinePlaceholder":485},[82,14579,14580,14582,14584],{"class":84,"line":5220},[82,14581,2776],{"class":112},[82,14583,4573],{"class":2384},[82,14585,4576],{"class":92},[82,14587,14588],{"class":84,"line":10539},[82,14589,4161],{"class":92},[82,14591,14592,14594],{"class":84,"line":10563},[82,14593,8225],{"class":2384},[82,14595,8228],{"class":92},[82,14597,14598,14600],{"class":84,"line":10568},[82,14599,8294],{"class":2384},[82,14601,8228],{"class":92},[82,14603,14604],{"class":84,"line":10574},[82,14605,1391],{"class":92},[2671,14607,14608],{},"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":78,"searchDepth":157,"depth":157,"links":14610},[14611],{"id":13279,"depth":157,"text":13280,"children":14612},[14613,14614],{"id":13311,"depth":404,"text":13312},{"id":13939,"depth":404,"text":13940},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13271,"description":78},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14621,"title":14622,"body":14623,"description":78,"extension":2700,"meta":16103,"navigation":485,"path":16104,"seo":16105,"stem":16106,"__hash__":16107},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14624,"toc":16095},[14625,14628,14632,14635,14638,14807,14811,14816,14833,14838,14990,14994,14997,15000,15393,15397,15400,15405,15408,15720,15724,15730,15890,15892,15900,15904,15907,15914,16092],[10,14626,14622],{"id":14627},"_6引用",[14,14629,14631],{"id":14630},"_61引用基本用法","6.1引用基本用法",[19,14633,14634],{},"引用的本质：给变量起别名",[19,14636,14637],{},"语法：数据类型 &别名=原名",[73,14639,14641],{"className":2762,"code":14640,"language":2764,"meta":78,"style":78},"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",[32,14642,14643,14651,14655,14667,14679,14683,14702,14721,14725,14736,14740,14759,14777,14781,14791,14795,14803],{"__ignoreMap":78},[82,14644,14645,14647,14649],{"class":84,"line":85},[82,14646,2776],{"class":112},[82,14648,4573],{"class":2384},[82,14650,13443],{"class":92},[82,14652,14653],{"class":84,"line":157},[82,14654,486],{"emptyLinePlaceholder":485},[82,14656,14657,14659,14661,14663,14665],{"class":84,"line":404},[82,14658,4585],{"class":112},[82,14660,13459],{"class":92},[82,14662,113],{"class":112},[82,14664,4638],{"class":88},[82,14666,3909],{"class":92},[82,14668,14669,14671,14673,14675,14677],{"class":84,"line":413},[82,14670,4585],{"class":112},[82,14672,13174],{"class":112},[82,14674,13535],{"class":92},[82,14676,113],{"class":112},[82,14678,4048],{"class":92},[82,14680,14681],{"class":84,"line":508},[82,14682,486],{"emptyLinePlaceholder":485},[82,14684,14685,14687,14689,14692,14694,14696,14698,14700],{"class":84,"line":513},[82,14686,9121],{"class":92},[82,14688,3792],{"class":112},[82,14690,14691],{"class":96}," \"a = \"",[82,14693,4060],{"class":112},[82,14695,13459],{"class":92},[82,14697,3792],{"class":112},[82,14699,14059],{"class":92},[82,14701,9860],{"class":2828},[82,14703,14704,14706,14708,14711,14713,14715,14717,14719],{"class":84,"line":1388},[82,14705,9121],{"class":92},[82,14707,3792],{"class":112},[82,14709,14710],{"class":96}," \"b = \"",[82,14712,4060],{"class":112},[82,14714,13472],{"class":92},[82,14716,3792],{"class":112},[82,14718,14059],{"class":92},[82,14720,9860],{"class":2828},[82,14722,14723],{"class":84,"line":1394},[82,14724,486],{"emptyLinePlaceholder":485},[82,14726,14727,14730,14732,14734],{"class":84,"line":1399},[82,14728,14729],{"class":92},"    b ",[82,14731,113],{"class":112},[82,14733,8346],{"class":88},[82,14735,3909],{"class":92},[82,14737,14738],{"class":84,"line":1430},[82,14739,486],{"emptyLinePlaceholder":485},[82,14741,14742,14744,14746,14748,14750,14752,14754,14756],{"class":84,"line":1818},[82,14743,9121],{"class":92},[82,14745,3792],{"class":112},[82,14747,14691],{"class":96},[82,14749,4060],{"class":112},[82,14751,13459],{"class":92},[82,14753,3792],{"class":112},[82,14755,14059],{"class":92},[82,14757,14758],{"class":2828},"\u002F\u002F100\n",[82,14760,14761,14763,14765,14767,14769,14771,14773,14775],{"class":84,"line":2082},[82,14762,9121],{"class":92},[82,14764,3792],{"class":112},[82,14766,14710],{"class":96},[82,14768,4060],{"class":112},[82,14770,13472],{"class":92},[82,14772,3792],{"class":112},[82,14774,14059],{"class":92},[82,14776,14758],{"class":2828},[82,14778,14779],{"class":84,"line":2233},[82,14780,486],{"emptyLinePlaceholder":485},[82,14782,14783,14785,14787,14789],{"class":84,"line":2255},[82,14784,4903],{"class":2384},[82,14786,93],{"class":92},[82,14788,4908],{"class":96},[82,14790,5318],{"class":92},[82,14792,14793],{"class":84,"line":2260},[82,14794,486],{"emptyLinePlaceholder":485},[82,14796,14797,14799,14801],{"class":84,"line":2298},[82,14798,6685],{"class":112},[82,14800,6688],{"class":88},[82,14802,3909],{"class":92},[82,14804,14805],{"class":84,"line":2303},[82,14806,1391],{"class":92},[14,14808,14810],{"id":14809},"_62引用的注意事项","6.2引用的注意事项",[26,14812,14813],{},[29,14814,14815],{},"引用必须要初始化",[73,14817,14819],{"className":2762,"code":14818,"language":2764,"meta":78,"style":78},"int &b;\u002F\u002F非常错误！\n",[32,14820,14821],{"__ignoreMap":78},[82,14822,14823,14825,14827,14830],{"class":84,"line":85},[82,14824,2776],{"class":112},[82,14826,13174],{"class":112},[82,14828,14829],{"class":92},"b;",[82,14831,14832],{"class":2828},"\u002F\u002F非常错误！\n",[26,14834,14835],{"start":157},[29,14836,14837],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[73,14839,14841],{"className":2762,"code":14840,"language":2764,"meta":78,"style":78},"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",[32,14842,14843,14851,14863,14875,14883,14899,14912,14930,14948,14968,14978,14986],{"__ignoreMap":78},[82,14844,14845,14847,14849],{"class":84,"line":85},[82,14846,2776],{"class":112},[82,14848,4573],{"class":2384},[82,14850,13443],{"class":92},[82,14852,14853,14855,14857,14859,14861],{"class":84,"line":157},[82,14854,4585],{"class":112},[82,14856,13459],{"class":92},[82,14858,113],{"class":112},[82,14860,4638],{"class":88},[82,14862,3909],{"class":92},[82,14864,14865,14867,14869,14871,14873],{"class":84,"line":404},[82,14866,4585],{"class":112},[82,14868,13472],{"class":92},[82,14870,113],{"class":112},[82,14872,11541],{"class":88},[82,14874,3909],{"class":92},[82,14876,14877,14880],{"class":84,"line":413},[82,14878,14879],{"class":2828},"    \u002F\u002Fint &c;",[82,14881,14882],{"class":2828}," \u002F\u002F错误，引用必须初始化\n",[82,14884,14885,14887,14889,14891,14893,14896],{"class":84,"line":508},[82,14886,4585],{"class":112},[82,14888,13174],{"class":112},[82,14890,5545],{"class":92},[82,14892,113],{"class":112},[82,14894,14895],{"class":92}," a;",[82,14897,14898],{"class":2828}," \u002F\u002F一旦初始化后，就不可以更改\n",[82,14900,14901,14904,14906,14909],{"class":84,"line":513},[82,14902,14903],{"class":92},"    c ",[82,14905,113],{"class":112},[82,14907,14908],{"class":92}," b;",[82,14910,14911],{"class":2828}," \u002F\u002F这是赋值操作，不是更改引用\n",[82,14913,14914,14916,14918,14920,14922,14924,14926,14928],{"class":84,"line":1388},[82,14915,9121],{"class":92},[82,14917,3792],{"class":112},[82,14919,14691],{"class":96},[82,14921,4060],{"class":112},[82,14923,13459],{"class":92},[82,14925,3792],{"class":112},[82,14927,14059],{"class":92},[82,14929,9845],{"class":2828},[82,14931,14932,14934,14936,14938,14940,14942,14944,14946],{"class":84,"line":1394},[82,14933,9121],{"class":92},[82,14935,3792],{"class":112},[82,14937,14710],{"class":96},[82,14939,4060],{"class":112},[82,14941,13472],{"class":92},[82,14943,3792],{"class":112},[82,14945,14059],{"class":92},[82,14947,9845],{"class":2828},[82,14949,14950,14952,14954,14957,14959,14962,14964,14966],{"class":84,"line":1399},[82,14951,9121],{"class":92},[82,14953,3792],{"class":112},[82,14955,14956],{"class":96}," \"c = \"",[82,14958,4060],{"class":112},[82,14960,14961],{"class":92}," c ",[82,14963,3792],{"class":112},[82,14965,14059],{"class":92},[82,14967,9845],{"class":2828},[82,14969,14970,14972,14974,14976],{"class":84,"line":1430},[82,14971,4903],{"class":2384},[82,14973,93],{"class":92},[82,14975,4908],{"class":96},[82,14977,5318],{"class":92},[82,14979,14980,14982,14984],{"class":84,"line":1818},[82,14981,6685],{"class":112},[82,14983,6688],{"class":88},[82,14985,3909],{"class":92},[82,14987,14988],{"class":84,"line":2082},[82,14989,1391],{"class":92},[14,14991,14993],{"id":14992},"_63引用做函数参数","6.3引用做函数参数",[19,14995,14996],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14998,14999],{},"优点：可以简化指针修改实参",[73,15001,15003],{"className":2762,"code":15002,"language":2764,"meta":78,"style":78},"\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",[32,15004,15005,15010,15032,15043,15053,15062,15066,15070,15075,15097,15109,15121,15131,15135,15139,15144,15166,15176,15184,15192,15196,15200,15208,15212,15224,15236,15240,15251,15277,15281,15301,15325,15329,15339,15363,15367,15377,15381,15389],{"__ignoreMap":78},[82,15006,15007],{"class":84,"line":85},[82,15008,15009],{"class":2828},"\u002F\u002F1. 值传递\n",[82,15011,15012,15014,15017,15019,15021,15023,15025,15027,15029],{"class":84,"line":157},[82,15013,7956],{"class":112},[82,15015,15016],{"class":2384}," mySwap01",[82,15018,93],{"class":92},[82,15020,2776],{"class":112},[82,15022,4014],{"class":108},[82,15024,100],{"class":92},[82,15026,2776],{"class":112},[82,15028,5432],{"class":108},[82,15030,15031],{"class":92},") {\n",[82,15033,15034,15036,15039,15041],{"class":84,"line":404},[82,15035,4585],{"class":112},[82,15037,15038],{"class":92}," temp ",[82,15040,113],{"class":112},[82,15042,4048],{"class":92},[82,15044,15045,15048,15050],{"class":84,"line":413},[82,15046,15047],{"class":92},"    a ",[82,15049,113],{"class":112},[82,15051,15052],{"class":92}," b;\n",[82,15054,15055,15057,15059],{"class":84,"line":508},[82,15056,14729],{"class":92},[82,15058,113],{"class":112},[82,15060,15061],{"class":92}," temp;\n",[82,15063,15064],{"class":84,"line":513},[82,15065,1391],{"class":92},[82,15067,15068],{"class":84,"line":1388},[82,15069,486],{"emptyLinePlaceholder":485},[82,15071,15072],{"class":84,"line":1394},[82,15073,15074],{"class":2828},"\u002F\u002F2. 地址传递\n",[82,15076,15077,15079,15082,15084,15087,15089,15091,15093,15095],{"class":84,"line":1399},[82,15078,7956],{"class":112},[82,15080,15081],{"class":2384}," mySwap02",[82,15083,93],{"class":92},[82,15085,15086],{"class":112},"int*",[82,15088,4014],{"class":108},[82,15090,100],{"class":92},[82,15092,15086],{"class":112},[82,15094,5432],{"class":108},[82,15096,15031],{"class":92},[82,15098,15099,15101,15103,15105,15107],{"class":84,"line":1430},[82,15100,4585],{"class":112},[82,15102,15038],{"class":92},[82,15104,113],{"class":112},[82,15106,9110],{"class":112},[82,15108,8789],{"class":92},[82,15110,15111,15113,15115,15117,15119],{"class":84,"line":1818},[82,15112,8995],{"class":112},[82,15114,13509],{"class":92},[82,15116,113],{"class":112},[82,15118,9110],{"class":112},[82,15120,8661],{"class":92},[82,15122,15123,15125,15127,15129],{"class":84,"line":2082},[82,15124,8995],{"class":112},[82,15126,13535],{"class":92},[82,15128,113],{"class":112},[82,15130,15061],{"class":92},[82,15132,15133],{"class":84,"line":2233},[82,15134,1391],{"class":92},[82,15136,15137],{"class":84,"line":2255},[82,15138,486],{"emptyLinePlaceholder":485},[82,15140,15141],{"class":84,"line":2260},[82,15142,15143],{"class":2828},"\u002F\u002F3. 引用传递\n",[82,15145,15146,15148,15151,15153,15156,15158,15160,15162,15164],{"class":84,"line":2298},[82,15147,7956],{"class":112},[82,15149,15150],{"class":2384}," mySwap03",[82,15152,93],{"class":92},[82,15154,15155],{"class":112},"int&",[82,15157,4014],{"class":108},[82,15159,100],{"class":92},[82,15161,15155],{"class":112},[82,15163,5432],{"class":108},[82,15165,15031],{"class":92},[82,15167,15168,15170,15172,15174],{"class":84,"line":2303},[82,15169,4585],{"class":112},[82,15171,15038],{"class":92},[82,15173,113],{"class":112},[82,15175,4048],{"class":92},[82,15177,15178,15180,15182],{"class":84,"line":2321},[82,15179,15047],{"class":92},[82,15181,113],{"class":112},[82,15183,15052],{"class":92},[82,15185,15186,15188,15190],{"class":84,"line":2533},[82,15187,14729],{"class":92},[82,15189,113],{"class":112},[82,15191,15061],{"class":92},[82,15193,15194],{"class":84,"line":2538},[82,15195,1391],{"class":92},[82,15197,15198],{"class":84,"line":2548},[82,15199,486],{"emptyLinePlaceholder":485},[82,15201,15202,15204,15206],{"class":84,"line":2579},[82,15203,2776],{"class":112},[82,15205,4573],{"class":2384},[82,15207,13443],{"class":92},[82,15209,15210],{"class":84,"line":2585},[82,15211,486],{"emptyLinePlaceholder":485},[82,15213,15214,15216,15218,15220,15222],{"class":84,"line":4350},[82,15215,4585],{"class":112},[82,15217,13459],{"class":92},[82,15219,113],{"class":112},[82,15221,4638],{"class":88},[82,15223,3909],{"class":92},[82,15225,15226,15228,15230,15232,15234],{"class":84,"line":4355},[82,15227,4585],{"class":112},[82,15229,13472],{"class":92},[82,15231,113],{"class":112},[82,15233,11541],{"class":88},[82,15235,3909],{"class":92},[82,15237,15238],{"class":84,"line":4360},[82,15239,486],{"emptyLinePlaceholder":485},[82,15241,15242,15245,15248],{"class":84,"line":4365},[82,15243,15244],{"class":2384},"    mySwap01",[82,15246,15247],{"class":92},"(a, b);",[82,15249,15250],{"class":2828},"\u002F\u002F值传递，形参不会修饰实参\n",[82,15252,15253,15255,15257,15260,15262,15264,15266,15269,15271,15273,15275],{"class":84,"line":4379},[82,15254,9121],{"class":92},[82,15256,3792],{"class":112},[82,15258,15259],{"class":96}," \"a:\"",[82,15261,4060],{"class":112},[82,15263,13459],{"class":92},[82,15265,3792],{"class":112},[82,15267,15268],{"class":96}," \" b:\"",[82,15270,4060],{"class":112},[82,15272,13472],{"class":92},[82,15274,3792],{"class":112},[82,15276,11431],{"class":92},[82,15278,15279],{"class":84,"line":4384},[82,15280,486],{"emptyLinePlaceholder":485},[82,15282,15283,15286,15288,15290,15293,15295,15298],{"class":84,"line":5176},[82,15284,15285],{"class":2384},"    mySwap02",[82,15287,93],{"class":92},[82,15289,3111],{"class":112},[82,15291,15292],{"class":92},"a, ",[82,15294,3111],{"class":112},[82,15296,15297],{"class":92},"b);",[82,15299,15300],{"class":2828},"\u002F\u002F地址传递，形参会修饰实参\n",[82,15302,15303,15305,15307,15309,15311,15313,15315,15317,15319,15321,15323],{"class":84,"line":5190},[82,15304,9121],{"class":92},[82,15306,3792],{"class":112},[82,15308,15259],{"class":96},[82,15310,4060],{"class":112},[82,15312,13459],{"class":92},[82,15314,3792],{"class":112},[82,15316,15268],{"class":96},[82,15318,4060],{"class":112},[82,15320,13472],{"class":92},[82,15322,3792],{"class":112},[82,15324,11431],{"class":92},[82,15326,15327],{"class":84,"line":5198},[82,15328,486],{"emptyLinePlaceholder":485},[82,15330,15331,15334,15336],{"class":84,"line":5203},[82,15332,15333],{"class":2384},"    mySwap03",[82,15335,15247],{"class":92},[82,15337,15338],{"class":2828},"\u002F\u002F引用传递，形参会修饰实参\n",[82,15340,15341,15343,15345,15347,15349,15351,15353,15355,15357,15359,15361],{"class":84,"line":5209},[82,15342,9121],{"class":92},[82,15344,3792],{"class":112},[82,15346,15259],{"class":96},[82,15348,4060],{"class":112},[82,15350,13459],{"class":92},[82,15352,3792],{"class":112},[82,15354,15268],{"class":96},[82,15356,4060],{"class":112},[82,15358,13472],{"class":92},[82,15360,3792],{"class":112},[82,15362,11431],{"class":92},[82,15364,15365],{"class":84,"line":5215},[82,15366,486],{"emptyLinePlaceholder":485},[82,15368,15369,15371,15373,15375],{"class":84,"line":5220},[82,15370,4903],{"class":2384},[82,15372,93],{"class":92},[82,15374,4908],{"class":96},[82,15376,5318],{"class":92},[82,15378,15379],{"class":84,"line":10539},[82,15380,486],{"emptyLinePlaceholder":485},[82,15382,15383,15385,15387],{"class":84,"line":10563},[82,15384,6685],{"class":112},[82,15386,6688],{"class":88},[82,15388,3909],{"class":92},[82,15390,15391],{"class":84,"line":10568},[82,15392,1391],{"class":92},[14,15394,15396],{"id":15395},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15398,15399],{},"作用：引用是可以作为函数的返回值存在的",[19,15401,11616,15402],{},[2913,15403,15404],{},"不要返回局部变量引用",[19,15406,15407],{},"用法：函数调用作为左值",[73,15409,15411],{"className":12532,"code":15410,"language":12534,"meta":78,"style":78},"\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",[32,15412,15413,15418,15426,15441,15447,15451,15455,15460,15468,15485,15491,15495,15499,15507,15511,15516,15530,15550,15569,15573,15578,15591,15611,15629,15633,15649,15653,15672,15690,15694,15704,15708,15716],{"__ignoreMap":78},[82,15414,15415],{"class":84,"line":85},[82,15416,15417],{"class":2828},"\u002F\u002F返回局部变量引用\n",[82,15419,15420,15422,15424],{"class":84,"line":157},[82,15421,15155],{"class":112},[82,15423,8180],{"class":2384},[82,15425,13443],{"class":92},[82,15427,15428,15430,15432,15434,15436,15438],{"class":84,"line":404},[82,15429,4585],{"class":112},[82,15431,13459],{"class":92},[82,15433,113],{"class":112},[82,15435,4638],{"class":88},[82,15437,2825],{"class":92},[82,15439,15440],{"class":2828}," \u002F\u002F局部变量\n",[82,15442,15443,15445],{"class":84,"line":413},[82,15444,6685],{"class":112},[82,15446,4048],{"class":92},[82,15448,15449],{"class":84,"line":508},[82,15450,1391],{"class":92},[82,15452,15453],{"class":84,"line":513},[82,15454,486],{"emptyLinePlaceholder":485},[82,15456,15457],{"class":84,"line":1388},[82,15458,15459],{"class":2828},"\u002F\u002F返回静态变量引用\n",[82,15461,15462,15464,15466],{"class":84,"line":1394},[82,15463,15155],{"class":112},[82,15465,8249],{"class":2384},[82,15467,13443],{"class":92},[82,15469,15470,15472,15474,15476,15478,15480,15482],{"class":84,"line":1399},[82,15471,13610],{"class":112},[82,15473,4982],{"class":112},[82,15475,13459],{"class":92},[82,15477,113],{"class":112},[82,15479,11541],{"class":88},[82,15481,2825],{"class":92},[82,15483,15484],{"class":2828},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[82,15486,15487,15489],{"class":84,"line":1430},[82,15488,6685],{"class":112},[82,15490,4048],{"class":92},[82,15492,15493],{"class":84,"line":1818},[82,15494,1391],{"class":92},[82,15496,15497],{"class":84,"line":2082},[82,15498,486],{"emptyLinePlaceholder":485},[82,15500,15501,15503,15505],{"class":84,"line":2233},[82,15502,2776],{"class":112},[82,15504,4573],{"class":2384},[82,15506,13443],{"class":92},[82,15508,15509],{"class":84,"line":2255},[82,15510,486],{"emptyLinePlaceholder":485},[82,15512,15513],{"class":84,"line":2260},[82,15514,15515],{"class":2828},"    \u002F\u002F不能返回局部变量的引用\n",[82,15517,15518,15521,15524,15526,15528],{"class":84,"line":2298},[82,15519,15520],{"class":112},"    int&",[82,15522,15523],{"class":92}," ref ",[82,15525,113],{"class":112},[82,15527,8180],{"class":2384},[82,15529,8228],{"class":92},[82,15531,15532,15534,15536,15539,15541,15543,15545,15547],{"class":84,"line":2303},[82,15533,9121],{"class":92},[82,15535,3792],{"class":112},[82,15537,15538],{"class":96}," \"ref = \"",[82,15540,4060],{"class":112},[82,15542,15523],{"class":92},[82,15544,3792],{"class":112},[82,15546,14059],{"class":92},[82,15548,15549],{"class":2828},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[82,15551,15552,15554,15556,15558,15560,15562,15564,15566],{"class":84,"line":2321},[82,15553,9121],{"class":92},[82,15555,3792],{"class":112},[82,15557,15538],{"class":96},[82,15559,4060],{"class":112},[82,15561,15523],{"class":92},[82,15563,3792],{"class":112},[82,15565,14059],{"class":92},[82,15567,15568],{"class":2828},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[82,15570,15571],{"class":84,"line":2533},[82,15572,486],{"emptyLinePlaceholder":485},[82,15574,15575],{"class":84,"line":2538},[82,15576,15577],{"class":2828},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[82,15579,15580,15582,15585,15587,15589],{"class":84,"line":2548},[82,15581,15520],{"class":112},[82,15583,15584],{"class":92}," ref2 ",[82,15586,113],{"class":112},[82,15588,8249],{"class":2384},[82,15590,8228],{"class":92},[82,15592,15593,15595,15597,15600,15602,15604,15606,15608],{"class":84,"line":2579},[82,15594,9121],{"class":92},[82,15596,3792],{"class":112},[82,15598,15599],{"class":96}," \"ref2 = \"",[82,15601,4060],{"class":112},[82,15603,15584],{"class":92},[82,15605,3792],{"class":112},[82,15607,14059],{"class":92},[82,15609,15610],{"class":2828}," \u002F\u002F20\n",[82,15612,15613,15615,15617,15619,15621,15623,15625,15627],{"class":84,"line":2585},[82,15614,9121],{"class":92},[82,15616,3792],{"class":112},[82,15618,15599],{"class":96},[82,15620,4060],{"class":112},[82,15622,15584],{"class":92},[82,15624,3792],{"class":112},[82,15626,14059],{"class":92},[82,15628,15610],{"class":2828},[82,15630,15631],{"class":84,"line":4350},[82,15632,486],{"emptyLinePlaceholder":485},[82,15634,15635,15637,15640,15642,15644,15646],{"class":84,"line":4355},[82,15636,8294],{"class":2384},[82,15638,15639],{"class":92},"() ",[82,15641,113],{"class":112},[82,15643,5598],{"class":88},[82,15645,2825],{"class":92},[82,15647,15648],{"class":2828},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[82,15650,15651],{"class":84,"line":4360},[82,15652,486],{"emptyLinePlaceholder":485},[82,15654,15655,15657,15659,15661,15663,15665,15667,15669],{"class":84,"line":4365},[82,15656,9121],{"class":92},[82,15658,3792],{"class":112},[82,15660,15599],{"class":96},[82,15662,4060],{"class":112},[82,15664,15584],{"class":92},[82,15666,3792],{"class":112},[82,15668,14059],{"class":92},[82,15670,15671],{"class":2828}," \u002F\u002F1000\n",[82,15673,15674,15676,15678,15680,15682,15684,15686,15688],{"class":84,"line":4379},[82,15675,9121],{"class":92},[82,15677,3792],{"class":112},[82,15679,15599],{"class":96},[82,15681,4060],{"class":112},[82,15683,15584],{"class":92},[82,15685,3792],{"class":112},[82,15687,14059],{"class":92},[82,15689,15671],{"class":2828},[82,15691,15692],{"class":84,"line":4384},[82,15693,486],{"emptyLinePlaceholder":485},[82,15695,15696,15698,15700,15702],{"class":84,"line":5176},[82,15697,4903],{"class":2384},[82,15699,93],{"class":92},[82,15701,4908],{"class":96},[82,15703,5318],{"class":92},[82,15705,15706],{"class":84,"line":5190},[82,15707,486],{"emptyLinePlaceholder":485},[82,15709,15710,15712,15714],{"class":84,"line":5198},[82,15711,6685],{"class":112},[82,15713,6688],{"class":88},[82,15715,3909],{"class":92},[82,15717,15718],{"class":84,"line":5203},[82,15719,1391],{"class":92},[14,15721,15723],{"id":15722},"_65引用的本质","6.5引用的本质",[19,15725,15726,15727],{},"本质：",[2913,15728,15729],{},"引用的本质在c++内部实现是一个指针常量.",[73,15731,15733],{"className":2762,"code":15732,"language":2764,"meta":78,"style":78},"\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",[32,15734,15735,15740,15756,15770,15774,15783,15795,15800,15805,15816,15829,15833,15849,15866,15870,15878,15886],{"__ignoreMap":78},[82,15736,15737],{"class":84,"line":85},[82,15738,15739],{"class":2828},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[82,15741,15742,15744,15746,15748,15750,15753],{"class":84,"line":157},[82,15743,7956],{"class":112},[82,15745,13975],{"class":2384},[82,15747,93],{"class":92},[82,15749,15155],{"class":112},[82,15751,15752],{"class":108}," ref",[82,15754,15755],{"class":92},"){\n",[82,15757,15758,15761,15763,15765,15767],{"class":84,"line":404},[82,15759,15760],{"class":92},"    ref ",[82,15762,113],{"class":112},[82,15764,8346],{"class":88},[82,15766,2825],{"class":92},[82,15768,15769],{"class":2828}," \u002F\u002F ref是引用，转换为*ref = 100\n",[82,15771,15772],{"class":84,"line":413},[82,15773,1391],{"class":92},[82,15775,15776,15778,15780],{"class":84,"line":508},[82,15777,2776],{"class":112},[82,15779,4573],{"class":2384},[82,15781,15782],{"class":92},"(){\n",[82,15784,15785,15787,15789,15791,15793],{"class":84,"line":513},[82,15786,4585],{"class":112},[82,15788,13459],{"class":92},[82,15790,113],{"class":112},[82,15792,4638],{"class":88},[82,15794,3909],{"class":92},[82,15796,15797],{"class":84,"line":1388},[82,15798,15799],{"class":92},"    \n",[82,15801,15802],{"class":84,"line":1394},[82,15803,15804],{"class":2828},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[82,15806,15807,15809,15811,15813],{"class":84,"line":1399},[82,15808,15520],{"class":112},[82,15810,15523],{"class":92},[82,15812,113],{"class":112},[82,15814,15815],{"class":92}," a; \n",[82,15817,15818,15820,15822,15824,15826],{"class":84,"line":1430},[82,15819,15760],{"class":92},[82,15821,113],{"class":112},[82,15823,11541],{"class":88},[82,15825,2825],{"class":92},[82,15827,15828],{"class":2828}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[82,15830,15831],{"class":84,"line":1818},[82,15832,15799],{"class":92},[82,15834,15835,15837,15839,15841,15843,15845,15847],{"class":84,"line":2082},[82,15836,9121],{"class":92},[82,15838,3792],{"class":112},[82,15840,15259],{"class":96},[82,15842,4060],{"class":112},[82,15844,13459],{"class":92},[82,15846,3792],{"class":112},[82,15848,11431],{"class":92},[82,15850,15851,15853,15855,15858,15860,15862,15864],{"class":84,"line":2233},[82,15852,9121],{"class":92},[82,15854,3792],{"class":112},[82,15856,15857],{"class":96}," \"ref:\"",[82,15859,4060],{"class":112},[82,15861,15523],{"class":92},[82,15863,3792],{"class":112},[82,15865,11431],{"class":92},[82,15867,15868],{"class":84,"line":2255},[82,15869,15799],{"class":92},[82,15871,15872,15875],{"class":84,"line":2260},[82,15873,15874],{"class":2384},"    func",[82,15876,15877],{"class":92},"(a);\n",[82,15879,15880,15882,15884],{"class":84,"line":2298},[82,15881,6685],{"class":112},[82,15883,6688],{"class":88},[82,15885,3909],{"class":92},[82,15887,15888],{"class":84,"line":2303},[82,15889,1391],{"class":92},[19,15891,13922],{},[26,15893,15894,15897],{},[29,15895,15896],{},"引用的本质，就是一个指针常量",[29,15898,15899],{},"引用一旦初始化，就不可以发生改变",[14,15901,15903],{"id":15902},"_66常量引用","6.6常量引用",[19,15905,15906],{},"作用：常量引用主要用来修饰形参",[19,15908,15909,15910,15913],{},"在函数形参列表中，可以加",[2913,15911,15912],{},"const修饰形参","，防止形参改变实参",[73,15915,15917],{"className":2762,"code":15916,"language":2764,"meta":78,"style":78},"\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",[32,15918,15919,15924,15929,15948,15953,15966,15970,15974,15982,15986,15991,15996,16010,16014,16022,16034,16038,16043,16055,16062,16066,16076,16080,16088],{"__ignoreMap":78},[82,15920,15921],{"class":84,"line":85},[82,15922,15923],{"class":2828},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[82,15925,15926],{"class":84,"line":157},[82,15927,15928],{"class":2828},"\u002F\u002F加上const就不能修改实参的\n",[82,15930,15931,15933,15936,15938,15940,15943,15946],{"class":84,"line":404},[82,15932,7956],{"class":112},[82,15934,15935],{"class":2384}," showValue",[82,15937,93],{"class":92},[82,15939,9384],{"class":112},[82,15941,15942],{"class":112}," int&",[82,15944,15945],{"class":108}," v",[82,15947,15031],{"class":92},[82,15949,15950],{"class":84,"line":413},[82,15951,15952],{"class":2828},"    \u002F\u002Fv += 100;\n",[82,15954,15955,15957,15959,15962,15964],{"class":84,"line":508},[82,15956,9121],{"class":92},[82,15958,3792],{"class":112},[82,15960,15961],{"class":92}," v ",[82,15963,3792],{"class":112},[82,15965,11431],{"class":92},[82,15967,15968],{"class":84,"line":513},[82,15969,1391],{"class":92},[82,15971,15972],{"class":84,"line":1388},[82,15973,486],{"emptyLinePlaceholder":485},[82,15975,15976,15978,15980],{"class":84,"line":1394},[82,15977,2776],{"class":112},[82,15979,4573],{"class":2384},[82,15981,13443],{"class":92},[82,15983,15984],{"class":84,"line":1399},[82,15985,486],{"emptyLinePlaceholder":485},[82,15987,15988],{"class":84,"line":1430},[82,15989,15990],{"class":2828},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[82,15992,15993],{"class":84,"line":1818},[82,15994,15995],{"class":2828},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[82,15997,15998,16000,16002,16004,16006,16008],{"class":84,"line":2082},[82,15999,13811],{"class":112},[82,16001,15942],{"class":112},[82,16003,15523],{"class":92},[82,16005,113],{"class":112},[82,16007,4638],{"class":88},[82,16009,3909],{"class":92},[82,16011,16012],{"class":84,"line":2233},[82,16013,486],{"emptyLinePlaceholder":485},[82,16015,16016,16019],{"class":84,"line":2255},[82,16017,16018],{"class":2828},"    \u002F\u002Fref = 100;",[82,16020,16021],{"class":2828},"  \u002F\u002F加入const后不可以修改变量\n",[82,16023,16024,16026,16028,16030,16032],{"class":84,"line":2260},[82,16025,9121],{"class":92},[82,16027,3792],{"class":112},[82,16029,15523],{"class":92},[82,16031,3792],{"class":112},[82,16033,11431],{"class":92},[82,16035,16036],{"class":84,"line":2298},[82,16037,486],{"emptyLinePlaceholder":485},[82,16039,16040],{"class":84,"line":2303},[82,16041,16042],{"class":2828},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[82,16044,16045,16047,16049,16051,16053],{"class":84,"line":2321},[82,16046,4585],{"class":112},[82,16048,13459],{"class":92},[82,16050,113],{"class":112},[82,16052,4638],{"class":88},[82,16054,3909],{"class":92},[82,16056,16057,16060],{"class":84,"line":2533},[82,16058,16059],{"class":2384},"    showValue",[82,16061,15877],{"class":92},[82,16063,16064],{"class":84,"line":2538},[82,16065,486],{"emptyLinePlaceholder":485},[82,16067,16068,16070,16072,16074],{"class":84,"line":2548},[82,16069,4903],{"class":2384},[82,16071,93],{"class":92},[82,16073,4908],{"class":96},[82,16075,5318],{"class":92},[82,16077,16078],{"class":84,"line":2579},[82,16079,486],{"emptyLinePlaceholder":485},[82,16081,16082,16084,16086],{"class":84,"line":2585},[82,16083,6685],{"class":112},[82,16085,6688],{"class":88},[82,16087,3909],{"class":92},[82,16089,16090],{"class":84,"line":4350},[82,16091,1391],{"class":92},[2671,16093,16094],{},"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":78,"searchDepth":157,"depth":157,"links":16096},[16097,16098,16099,16100,16101,16102],{"id":14630,"depth":157,"text":14631},{"id":14809,"depth":157,"text":14810},{"id":14992,"depth":157,"text":14993},{"id":15395,"depth":157,"text":15396},{"id":15722,"depth":157,"text":15723},{"id":15902,"depth":157,"text":15903},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14622,"description":78},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16109,"title":16110,"body":16111,"description":78,"extension":2700,"meta":17190,"navigation":485,"path":17191,"seo":17192,"stem":17193,"__hash__":17194},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16112,"toc":17182},[16113,16116,16120,16123,16128,16358,16360,16371,16375,16378,16386,16490,16493,16497,16500,16504,16507,16512,16534,16540,16867,16870,16874,16882,17179],[10,16114,16110],{"id":16115},"_7函数高级部分",[14,16117,16119],{"id":16118},"_71函数默认参数","7.1函数默认参数",[19,16121,16122],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,16124,246,16125],{},[32,16126,16127],{}," 返回值类型  函数名 （参数= 默认值）{}",[73,16129,16131],{"className":2762,"code":16130,"language":2764,"meta":78,"style":78},"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",[32,16132,16133,16167,16182,16186,16190,16195,16200,16229,16249,16259,16263,16267,16275,16279,16306,16328,16332,16342,16346,16354],{"__ignoreMap":78},[82,16134,16135,16137,16139,16141,16143,16145,16147,16149,16151,16153,16155,16157,16159,16161,16163,16165],{"class":84,"line":85},[82,16136,2776],{"class":112},[82,16138,13975],{"class":2384},[82,16140,93],{"class":92},[82,16142,2776],{"class":112},[82,16144,4014],{"class":108},[82,16146,100],{"class":92},[82,16148,2776],{"class":112},[82,16150,5432],{"class":108},[82,16152,259],{"class":112},[82,16154,4638],{"class":88},[82,16156,100],{"class":92},[82,16158,2776],{"class":112},[82,16160,5448],{"class":108},[82,16162,259],{"class":112},[82,16164,4638],{"class":88},[82,16166,15031],{"class":92},[82,16168,16169,16171,16173,16175,16177,16179],{"class":84,"line":157},[82,16170,6685],{"class":112},[82,16172,13459],{"class":92},[82,16174,2249],{"class":112},[82,16176,13472],{"class":92},[82,16178,2249],{"class":112},[82,16180,16181],{"class":92}," c;\n",[82,16183,16184],{"class":84,"line":404},[82,16185,1391],{"class":92},[82,16187,16188],{"class":84,"line":413},[82,16189,486],{"emptyLinePlaceholder":485},[82,16191,16192],{"class":84,"line":508},[82,16193,16194],{"class":2828},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[82,16196,16197],{"class":84,"line":513},[82,16198,16199],{"class":2828},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[82,16201,16202,16204,16207,16209,16211,16213,16215,16217,16219,16221,16223,16225,16227],{"class":84,"line":1388},[82,16203,2776],{"class":112},[82,16205,16206],{"class":2384}," func2",[82,16208,93],{"class":92},[82,16210,2776],{"class":112},[82,16212,4014],{"class":108},[82,16214,259],{"class":112},[82,16216,4638],{"class":88},[82,16218,100],{"class":92},[82,16220,2776],{"class":112},[82,16222,5432],{"class":108},[82,16224,259],{"class":112},[82,16226,4638],{"class":88},[82,16228,5318],{"class":92},[82,16230,16231,16233,16235,16237,16239,16241,16243,16245,16247],{"class":84,"line":1394},[82,16232,2776],{"class":112},[82,16234,16206],{"class":2384},[82,16236,93],{"class":92},[82,16238,2776],{"class":112},[82,16240,4014],{"class":108},[82,16242,100],{"class":92},[82,16244,2776],{"class":112},[82,16246,5432],{"class":108},[82,16248,15031],{"class":92},[82,16250,16251,16253,16255,16257],{"class":84,"line":1399},[82,16252,6685],{"class":112},[82,16254,13459],{"class":92},[82,16256,2249],{"class":112},[82,16258,15052],{"class":92},[82,16260,16261],{"class":84,"line":1430},[82,16262,1391],{"class":92},[82,16264,16265],{"class":84,"line":1818},[82,16266,486],{"emptyLinePlaceholder":485},[82,16268,16269,16271,16273],{"class":84,"line":2082},[82,16270,2776],{"class":112},[82,16272,4573],{"class":2384},[82,16274,13443],{"class":92},[82,16276,16277],{"class":84,"line":2233},[82,16278,486],{"emptyLinePlaceholder":485},[82,16280,16281,16283,16285,16288,16290,16292,16294,16296,16298,16300,16302,16304],{"class":84,"line":2255},[82,16282,9121],{"class":92},[82,16284,3792],{"class":112},[82,16286,16287],{"class":96}," \"ret = \"",[82,16289,4060],{"class":112},[82,16291,13975],{"class":2384},[82,16293,93],{"class":92},[82,16295,3451],{"class":88},[82,16297,100],{"class":92},[82,16299,3451],{"class":88},[82,16301,725],{"class":92},[82,16303,3792],{"class":112},[82,16305,11431],{"class":92},[82,16307,16308,16310,16312,16314,16316,16318,16320,16322,16324,16326],{"class":84,"line":2260},[82,16309,9121],{"class":92},[82,16311,3792],{"class":112},[82,16313,16287],{"class":96},[82,16315,4060],{"class":112},[82,16317,13975],{"class":2384},[82,16319,93],{"class":92},[82,16321,3069],{"class":88},[82,16323,725],{"class":92},[82,16325,3792],{"class":112},[82,16327,11431],{"class":92},[82,16329,16330],{"class":84,"line":2298},[82,16331,486],{"emptyLinePlaceholder":485},[82,16333,16334,16336,16338,16340],{"class":84,"line":2303},[82,16335,4903],{"class":2384},[82,16337,93],{"class":92},[82,16339,4908],{"class":96},[82,16341,5318],{"class":92},[82,16343,16344],{"class":84,"line":2321},[82,16345,486],{"emptyLinePlaceholder":485},[82,16347,16348,16350,16352],{"class":84,"line":2533},[82,16349,6685],{"class":112},[82,16351,6688],{"class":88},[82,16353,3909],{"class":92},[82,16355,16356],{"class":84,"line":2538},[82,16357,1391],{"class":92},[19,16359,13922],{},[26,16361,16362,16365,16368],{},[29,16363,16364],{},"我传就用我；没传就用你",[29,16366,16367],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,16369,16370],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16372,16374],{"id":16373},"_72函数的占位参数","7.2函数的占位参数",[19,16376,16377],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16379,16380,16382,16383],{},[2913,16381,246],{}," ",[32,16384,16385],{},"返回值类型 函数名 (数据类型){}",[73,16387,16389],{"className":2762,"code":16388,"language":2764,"meta":78,"style":78},"\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",[32,16390,16391,16396,16414,16427,16431,16439,16443,16460,16464,16474,16478,16486],{"__ignoreMap":78},[82,16392,16393],{"class":84,"line":85},[82,16394,16395],{"class":2828},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[82,16397,16398,16400,16402,16404,16406,16408,16410,16412],{"class":84,"line":157},[82,16399,7956],{"class":112},[82,16401,13975],{"class":2384},[82,16403,93],{"class":92},[82,16405,2776],{"class":112},[82,16407,4014],{"class":108},[82,16409,100],{"class":92},[82,16411,2776],{"class":112},[82,16413,15031],{"class":92},[82,16415,16416,16418,16420,16423,16425],{"class":84,"line":404},[82,16417,9121],{"class":92},[82,16419,3792],{"class":112},[82,16421,16422],{"class":96}," \"this is func\"",[82,16424,4060],{"class":112},[82,16426,11431],{"class":92},[82,16428,16429],{"class":84,"line":413},[82,16430,1391],{"class":92},[82,16432,16433,16435,16437],{"class":84,"line":508},[82,16434,2776],{"class":112},[82,16436,4573],{"class":2384},[82,16438,13443],{"class":92},[82,16440,16441],{"class":84,"line":513},[82,16442,486],{"emptyLinePlaceholder":485},[82,16444,16445,16447,16449,16451,16453,16455,16457],{"class":84,"line":1388},[82,16446,15874],{"class":2384},[82,16448,93],{"class":92},[82,16450,440],{"class":88},[82,16452,3136],{"class":92},[82,16454,440],{"class":88},[82,16456,8558],{"class":92},[82,16458,16459],{"class":2828}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[82,16461,16462],{"class":84,"line":1394},[82,16463,486],{"emptyLinePlaceholder":485},[82,16465,16466,16468,16470,16472],{"class":84,"line":1399},[82,16467,4903],{"class":2384},[82,16469,93],{"class":92},[82,16471,4908],{"class":96},[82,16473,5318],{"class":92},[82,16475,16476],{"class":84,"line":1430},[82,16477,486],{"emptyLinePlaceholder":485},[82,16479,16480,16482,16484],{"class":84,"line":1818},[82,16481,6685],{"class":112},[82,16483,6688],{"class":88},[82,16485,3909],{"class":92},[82,16487,16488],{"class":84,"line":2082},[82,16489,1391],{"class":92},[19,16491,16492],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16494,16496],{"id":16495},"_73函数重载","7.3函数重载",[19,16498,16499],{},"意思是函数名是可以相同的",[65,16501,16503],{"id":16502},"_731基本语法","7.3.1基本语法",[19,16505,16506],{},"作用：函数名可以相同，提高复用性",[19,16508,16509],{},[2913,16510,16511],{},"函数重载满足条件：",[3755,16513,16514,16517,16520],{},[29,16515,16516],{},"同一个作用域下",[29,16518,16519],{},"函数名称相同",[29,16521,16522,16523,16526,16527,16530,16531],{},"函数参数",[2913,16524,16525],{},"类型不同","  或者 ",[2913,16528,16529],{},"个数不同"," 或者 ",[2913,16532,16533],{},"顺序不同",[19,16535,16536,16539],{},[2913,16537,16538],{},"注意:","  函数的返回值不可以作为函数重载的条件",[73,16541,16543],{"className":12532,"code":16542,"language":12534,"meta":78,"style":78},"\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",[32,16544,16545,16550,16558,16562,16575,16579,16593,16597,16610,16614,16629,16633,16646,16650,16671,16675,16688,16692,16712,16716,16729,16733,16737,16742,16747,16752,16757,16762,16766,16770,16778,16782,16788,16798,16808,16822,16837,16841,16851,16855,16863],{"__ignoreMap":78},[82,16546,16547],{"class":84,"line":85},[82,16548,16549],{"class":2828},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[82,16551,16552,16554,16556],{"class":84,"line":157},[82,16553,7956],{"class":112},[82,16555,13975],{"class":2384},[82,16557,4576],{"class":92},[82,16559,16560],{"class":84,"line":404},[82,16561,4161],{"class":92},[82,16563,16564,16566,16568,16571,16573],{"class":84,"line":413},[82,16565,9121],{"class":92},[82,16567,3792],{"class":112},[82,16569,16570],{"class":96}," \"func 的调用！\"",[82,16572,4060],{"class":112},[82,16574,11431],{"class":92},[82,16576,16577],{"class":84,"line":508},[82,16578,1391],{"class":92},[82,16580,16581,16583,16585,16587,16589,16591],{"class":84,"line":513},[82,16582,7956],{"class":112},[82,16584,13975],{"class":2384},[82,16586,93],{"class":92},[82,16588,2776],{"class":112},[82,16590,4014],{"class":108},[82,16592,119],{"class":92},[82,16594,16595],{"class":84,"line":1388},[82,16596,4161],{"class":92},[82,16598,16599,16601,16603,16606,16608],{"class":84,"line":1394},[82,16600,9121],{"class":92},[82,16602,3792],{"class":112},[82,16604,16605],{"class":96}," \"func (int a) 的调用！\"",[82,16607,4060],{"class":112},[82,16609,11431],{"class":92},[82,16611,16612],{"class":84,"line":1399},[82,16613,1391],{"class":92},[82,16615,16616,16618,16620,16622,16625,16627],{"class":84,"line":1430},[82,16617,7956],{"class":112},[82,16619,13975],{"class":2384},[82,16621,93],{"class":92},[82,16623,16624],{"class":112},"double",[82,16626,4014],{"class":108},[82,16628,119],{"class":92},[82,16630,16631],{"class":84,"line":1818},[82,16632,4161],{"class":92},[82,16634,16635,16637,16639,16642,16644],{"class":84,"line":2082},[82,16636,9121],{"class":92},[82,16638,3792],{"class":112},[82,16640,16641],{"class":96}," \"func (double a)的调用！\"",[82,16643,4060],{"class":112},[82,16645,11431],{"class":92},[82,16647,16648],{"class":84,"line":2233},[82,16649,1391],{"class":92},[82,16651,16652,16654,16656,16658,16660,16662,16665,16667,16669],{"class":84,"line":2255},[82,16653,7956],{"class":112},[82,16655,13975],{"class":2384},[82,16657,93],{"class":92},[82,16659,2776],{"class":112},[82,16661,4014],{"class":108},[82,16663,16664],{"class":92}," ,",[82,16666,16624],{"class":112},[82,16668,5432],{"class":108},[82,16670,119],{"class":92},[82,16672,16673],{"class":84,"line":2260},[82,16674,4161],{"class":92},[82,16676,16677,16679,16681,16684,16686],{"class":84,"line":2298},[82,16678,9121],{"class":92},[82,16680,3792],{"class":112},[82,16682,16683],{"class":96}," \"func (int a ,double b) 的调用！\"",[82,16685,4060],{"class":112},[82,16687,11431],{"class":92},[82,16689,16690],{"class":84,"line":2303},[82,16691,1391],{"class":92},[82,16693,16694,16696,16698,16700,16702,16704,16706,16708,16710],{"class":84,"line":2321},[82,16695,7956],{"class":112},[82,16697,13975],{"class":2384},[82,16699,93],{"class":92},[82,16701,16624],{"class":112},[82,16703,4014],{"class":108},[82,16705,16664],{"class":92},[82,16707,2776],{"class":112},[82,16709,5432],{"class":108},[82,16711,119],{"class":92},[82,16713,16714],{"class":84,"line":2533},[82,16715,4161],{"class":92},[82,16717,16718,16720,16722,16725,16727],{"class":84,"line":2538},[82,16719,9121],{"class":92},[82,16721,3792],{"class":112},[82,16723,16724],{"class":96}," \"func (double a ,int b)的调用！\"",[82,16726,4060],{"class":112},[82,16728,11431],{"class":92},[82,16730,16731],{"class":84,"line":2548},[82,16732,1391],{"class":92},[82,16734,16735],{"class":84,"line":2579},[82,16736,486],{"emptyLinePlaceholder":485},[82,16738,16739],{"class":84,"line":2585},[82,16740,16741],{"class":2828},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[82,16743,16744],{"class":84,"line":4350},[82,16745,16746],{"class":2828},"\u002F\u002Fint func(double a, int b)\n",[82,16748,16749],{"class":84,"line":4355},[82,16750,16751],{"class":2828},"\u002F\u002F{\n",[82,16753,16754],{"class":84,"line":4360},[82,16755,16756],{"class":2828},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[82,16758,16759],{"class":84,"line":4365},[82,16760,16761],{"class":2828},"\u002F\u002F}\n",[82,16763,16764],{"class":84,"line":4379},[82,16765,486],{"emptyLinePlaceholder":485},[82,16767,16768],{"class":84,"line":4384},[82,16769,486],{"emptyLinePlaceholder":485},[82,16771,16772,16774,16776],{"class":84,"line":5176},[82,16773,2776],{"class":112},[82,16775,4573],{"class":2384},[82,16777,13443],{"class":92},[82,16779,16780],{"class":84,"line":5190},[82,16781,486],{"emptyLinePlaceholder":485},[82,16783,16784,16786],{"class":84,"line":5198},[82,16785,15874],{"class":2384},[82,16787,8228],{"class":92},[82,16789,16790,16792,16794,16796],{"class":84,"line":5203},[82,16791,15874],{"class":2384},[82,16793,93],{"class":92},[82,16795,440],{"class":88},[82,16797,5318],{"class":92},[82,16799,16800,16802,16804,16806],{"class":84,"line":5209},[82,16801,15874],{"class":2384},[82,16803,93],{"class":92},[82,16805,2819],{"class":88},[82,16807,5318],{"class":92},[82,16809,16810,16812,16814,16816,16818,16820],{"class":84,"line":5215},[82,16811,15874],{"class":2384},[82,16813,93],{"class":92},[82,16815,440],{"class":88},[82,16817,3136],{"class":92},[82,16819,2819],{"class":88},[82,16821,5318],{"class":92},[82,16823,16824,16826,16828,16830,16833,16835],{"class":84,"line":5220},[82,16825,15874],{"class":2384},[82,16827,93],{"class":92},[82,16829,2819],{"class":88},[82,16831,16832],{"class":92}," , ",[82,16834,440],{"class":88},[82,16836,5318],{"class":92},[82,16838,16839],{"class":84,"line":10539},[82,16840,15799],{"class":92},[82,16842,16843,16845,16847,16849],{"class":84,"line":10563},[82,16844,4903],{"class":2384},[82,16846,93],{"class":92},[82,16848,4908],{"class":96},[82,16850,5318],{"class":92},[82,16852,16853],{"class":84,"line":10568},[82,16854,486],{"emptyLinePlaceholder":485},[82,16856,16857,16859,16861],{"class":84,"line":10574},[82,16858,6685],{"class":112},[82,16860,6688],{"class":88},[82,16862,3909],{"class":92},[82,16864,16865],{"class":84,"line":10601},[82,16866,1391],{"class":92},[19,16868,16869],{},"重点：函数返回值不可以作为函数重载条件！",[65,16871,16873],{"id":16872},"_732注意事项","7.3.2注意事项",[3755,16875,16876,16879],{},[29,16877,16878],{},"引用作为重载条件!!!",[29,16880,16881],{},"函数重载碰到函数默认参数",[73,16883,16885],{"className":2762,"code":16884,"language":2764,"meta":78,"style":78},"\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",[32,16886,16887,16892,16897,16901,16917,16921,16934,16938,16942,16960,16964,16977,16981,16985,16989,16994,16998,17022,17026,17039,17043,17047,17061,17065,17078,17082,17086,17094,17098,17110,17120,17133,17137,17141,17149,17153,17163,17167,17175],{"__ignoreMap":78},[82,16888,16889],{"class":84,"line":85},[82,16890,16891],{"class":2828},"\u002F\u002F函数重载注意事项\n",[82,16893,16894],{"class":84,"line":157},[82,16895,16896],{"class":2828},"\u002F\u002F1、引用作为重载条件\n",[82,16898,16899],{"class":84,"line":404},[82,16900,486],{"emptyLinePlaceholder":485},[82,16902,16903,16905,16907,16909,16911,16913,16915],{"class":84,"line":413},[82,16904,7956],{"class":112},[82,16906,13975],{"class":2384},[82,16908,93],{"class":92},[82,16910,2776],{"class":112},[82,16912,13174],{"class":112},[82,16914,323],{"class":108},[82,16916,119],{"class":92},[82,16918,16919],{"class":84,"line":508},[82,16920,4161],{"class":92},[82,16922,16923,16925,16927,16930,16932],{"class":84,"line":513},[82,16924,9121],{"class":92},[82,16926,3792],{"class":112},[82,16928,16929],{"class":96}," \"func (int &a) 调用 \"",[82,16931,4060],{"class":112},[82,16933,11431],{"class":92},[82,16935,16936],{"class":84,"line":1388},[82,16937,1391],{"class":92},[82,16939,16940],{"class":84,"line":1394},[82,16941,486],{"emptyLinePlaceholder":485},[82,16943,16944,16946,16948,16950,16952,16954,16956,16958],{"class":84,"line":1399},[82,16945,7956],{"class":112},[82,16947,13975],{"class":2384},[82,16949,93],{"class":92},[82,16951,9384],{"class":112},[82,16953,4982],{"class":112},[82,16955,13174],{"class":112},[82,16957,323],{"class":108},[82,16959,119],{"class":92},[82,16961,16962],{"class":84,"line":1430},[82,16963,4161],{"class":92},[82,16965,16966,16968,16970,16973,16975],{"class":84,"line":1818},[82,16967,9121],{"class":92},[82,16969,3792],{"class":112},[82,16971,16972],{"class":96}," \"func (const int &a) 调用 \"",[82,16974,4060],{"class":112},[82,16976,11431],{"class":92},[82,16978,16979],{"class":84,"line":2082},[82,16980,1391],{"class":92},[82,16982,16983],{"class":84,"line":2233},[82,16984,486],{"emptyLinePlaceholder":485},[82,16986,16987],{"class":84,"line":2255},[82,16988,486],{"emptyLinePlaceholder":485},[82,16990,16991],{"class":84,"line":2260},[82,16992,16993],{"class":2828},"\u002F\u002F2、函数重载碰到函数默认参数\n",[82,16995,16996],{"class":84,"line":2298},[82,16997,486],{"emptyLinePlaceholder":485},[82,16999,17000,17002,17004,17006,17008,17010,17012,17014,17016,17018,17020],{"class":84,"line":2303},[82,17001,7956],{"class":112},[82,17003,16206],{"class":2384},[82,17005,93],{"class":92},[82,17007,2776],{"class":112},[82,17009,4014],{"class":108},[82,17011,100],{"class":92},[82,17013,2776],{"class":112},[82,17015,5432],{"class":108},[82,17017,259],{"class":112},[82,17019,4638],{"class":88},[82,17021,119],{"class":92},[82,17023,17024],{"class":84,"line":2321},[82,17025,4161],{"class":92},[82,17027,17028,17030,17032,17035,17037],{"class":84,"line":2533},[82,17029,9121],{"class":92},[82,17031,3792],{"class":112},[82,17033,17034],{"class":96}," \"func2(int a, int b = 10) 调用\"",[82,17036,4060],{"class":112},[82,17038,11431],{"class":92},[82,17040,17041],{"class":84,"line":2538},[82,17042,1391],{"class":92},[82,17044,17045],{"class":84,"line":2548},[82,17046,486],{"emptyLinePlaceholder":485},[82,17048,17049,17051,17053,17055,17057,17059],{"class":84,"line":2579},[82,17050,7956],{"class":112},[82,17052,16206],{"class":2384},[82,17054,93],{"class":92},[82,17056,2776],{"class":112},[82,17058,4014],{"class":108},[82,17060,119],{"class":92},[82,17062,17063],{"class":84,"line":2585},[82,17064,4161],{"class":92},[82,17066,17067,17069,17071,17074,17076],{"class":84,"line":4350},[82,17068,9121],{"class":92},[82,17070,3792],{"class":112},[82,17072,17073],{"class":96}," \"func2(int a) 调用\"",[82,17075,4060],{"class":112},[82,17077,11431],{"class":92},[82,17079,17080],{"class":84,"line":4355},[82,17081,1391],{"class":92},[82,17083,17084],{"class":84,"line":4360},[82,17085,486],{"emptyLinePlaceholder":485},[82,17087,17088,17090,17092],{"class":84,"line":4365},[82,17089,2776],{"class":112},[82,17091,4573],{"class":2384},[82,17093,13443],{"class":92},[82,17095,17096],{"class":84,"line":4379},[82,17097,15799],{"class":92},[82,17099,17100,17102,17104,17106,17108],{"class":84,"line":4384},[82,17101,4585],{"class":112},[82,17103,13459],{"class":92},[82,17105,113],{"class":112},[82,17107,4638],{"class":88},[82,17109,3909],{"class":92},[82,17111,17112,17114,17117],{"class":84,"line":5176},[82,17113,15874],{"class":2384},[82,17115,17116],{"class":92},"(a);",[82,17118,17119],{"class":2828}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[82,17121,17122,17124,17126,17128,17130],{"class":84,"line":5190},[82,17123,15874],{"class":2384},[82,17125,93],{"class":92},[82,17127,440],{"class":88},[82,17129,8558],{"class":92},[82,17131,17132],{"class":2828},"\u002F\u002F调用有const   10是个常量\n",[82,17134,17135],{"class":84,"line":5198},[82,17136,486],{"emptyLinePlaceholder":485},[82,17138,17139],{"class":84,"line":5203},[82,17140,486],{"emptyLinePlaceholder":485},[82,17142,17143,17146],{"class":84,"line":5209},[82,17144,17145],{"class":2828},"    \u002F\u002Ffunc2(10);",[82,17147,17148],{"class":2828}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[82,17150,17151],{"class":84,"line":5215},[82,17152,486],{"emptyLinePlaceholder":485},[82,17154,17155,17157,17159,17161],{"class":84,"line":5220},[82,17156,4903],{"class":2384},[82,17158,93],{"class":92},[82,17160,4908],{"class":96},[82,17162,5318],{"class":92},[82,17164,17165],{"class":84,"line":10539},[82,17166,486],{"emptyLinePlaceholder":485},[82,17168,17169,17171,17173],{"class":84,"line":10563},[82,17170,6685],{"class":112},[82,17172,6688],{"class":88},[82,17174,3909],{"class":92},[82,17176,17177],{"class":84,"line":10568},[82,17178,1391],{"class":92},[2671,17180,17181],{},"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":78,"searchDepth":157,"depth":157,"links":17183},[17184,17185,17186],{"id":16118,"depth":157,"text":16119},{"id":16373,"depth":157,"text":16374},{"id":16495,"depth":157,"text":16496,"children":17187},[17188,17189],{"id":16502,"depth":404,"text":16503},{"id":16872,"depth":404,"text":16873},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16110,"description":78},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17196,"title":17197,"body":17198,"description":25949,"extension":2700,"meta":25950,"navigation":485,"path":25951,"seo":25952,"stem":25953,"__hash__":25954},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17199,"toc":25930},[17200,17203,17209,17216,17221,17224,17227,17230,17234,17238,17241,17244,17252,17257,17260,17267,17272,17430,17433,17686,17689,17692,17695,17700,17703,17706,17717,17722,17958,17962,17972,17975,17983,18130,18134,18137,18140,18144,18588,18592,18600,18608,19520,19527,19532,20159,20162,20165,20168,20287,20290,20377,20380,20506,20509,20603,20606,20959,20963,20971,20975,20982,20985,20988,20999,21005,21010,21022,21030,21050,21058,21075,21261,21264,21268,21271,21274,21277,21280,21283,21286,21289,21749,21755,21759,21762,21773,22360,22363,22852,22856,22859,22862,22865,22868,22871,22879,23275,23279,23282,23285,23732,23735,23738,23743,23746,23751,23754,23758,23761,23763,23769,23772,24078,24088,24129,24133,24136,24138,24171,24174,24481,24483,24498,24501,24524,24533,24539,24542,24546,24549,24552,24557,24568,24573,24581,24586,24716,24719,24722,24897,24902,25114,25118,25121,25235,25240,25479,25483,25487,25490,25493,25498,25603,25606,25609,25612,25616,25727,25730,25733,25738,25790,25793,25796,25801,25847,25850,25855,25923,25925,25928],[10,17201,17197],{"id":17202},"_8类和对象",[19,17204,17205,17206],{},"C++面向对象的三大特性为",[2913,17207,17208],{},"封装、继承、多态",[19,17210,17211,17212,17215],{},"C++认为",[2913,17213,17214],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17217,17218],{},[2913,17219,17220],{},"例如：",[19,17222,17223],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17225,17226],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17228,17229],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17231,17233],{"id":17232},"_81封装","8.1封装",[65,17235,17237],{"id":17236},"_811封装的意义","8.1.1封装的意义",[19,17239,17240],{},"封装是C++面向对象三大特性之一",[19,17242,17243],{},"封装的意义：",[3755,17245,17246,17249],{},[29,17247,17248],{},"将属性和行为作为一个整体，表现生活中的事物",[29,17250,17251],{},"将属性和行为加以权限控制",[19,17253,17254],{},[2913,17255,17256],{},"封装意义一：",[19,17258,17259],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17261,17262,16382,17264],{},[2913,17263,246],{},[32,17265,17266],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,17268,17269],{},[29,17270,17271],{},"**示例1：**设计一个圆类，求圆的周长",[73,17273,17275],{"className":2762,"code":17274,"language":2764,"meta":78,"style":78},"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",[32,17276,17277,17285,17289,17294,17299,17304,17309,17316,17321,17331,17335,17352,17356,17360,17368,17372,17377,17382,17387,17392,17403,17426],{"__ignoreMap":78},[82,17278,17279,17282],{"class":84,"line":85},[82,17280,17281],{"class":112},"class",[82,17283,17284],{"class":2384}," Circle\n",[82,17286,17287],{"class":84,"line":157},[82,17288,4161],{"class":92},[82,17290,17291],{"class":84,"line":404},[82,17292,17293],{"class":2828},"    \u002F\u002F访问权限\n",[82,17295,17296],{"class":84,"line":413},[82,17297,17298],{"class":2828},"    \u002F\u002F公共权限\n",[82,17300,17301],{"class":84,"line":508},[82,17302,17303],{"class":112},"public:\n",[82,17305,17306],{"class":84,"line":513},[82,17307,17308],{"class":2828},"    \u002F\u002F属性\n",[82,17310,17311,17313],{"class":84,"line":1388},[82,17312,4585],{"class":112},[82,17314,17315],{"class":92}," m_r;\n",[82,17317,17318],{"class":84,"line":1394},[82,17319,17320],{"class":2828},"    \u002F\u002F行为\n",[82,17322,17323,17326,17329],{"class":84,"line":1399},[82,17324,17325],{"class":112},"    double",[82,17327,17328],{"class":2384}," calculateZC",[82,17330,4576],{"class":92},[82,17332,17333],{"class":84,"line":1430},[82,17334,4630],{"class":92},[82,17336,17337,17339,17342,17344,17347,17349],{"class":84,"line":1818},[82,17338,2405],{"class":112},[82,17340,17341],{"class":88}," 2",[82,17343,3212],{"class":112},[82,17345,17346],{"class":92},"PI",[82,17348,3212],{"class":112},[82,17350,17351],{"class":92},"m_r;\n",[82,17353,17354],{"class":84,"line":2082},[82,17355,4787],{"class":92},[82,17357,17358],{"class":84,"line":2233},[82,17359,6590],{"class":92},[82,17361,17362,17364,17366],{"class":84,"line":2255},[82,17363,2776],{"class":112},[82,17365,4573],{"class":2384},[82,17367,4576],{"class":92},[82,17369,17370],{"class":84,"line":2260},[82,17371,4161],{"class":92},[82,17373,17374],{"class":84,"line":2298},[82,17375,17376],{"class":2828},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[82,17378,17379],{"class":84,"line":2303},[82,17380,17381],{"class":2828},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[82,17383,17384],{"class":84,"line":2321},[82,17385,17386],{"class":92},"    Circle c1;\n",[82,17388,17389],{"class":84,"line":2533},[82,17390,17391],{"class":2828},"    \u002F\u002F给圆对象 的属性进行赋值\n",[82,17393,17394,17397,17399,17401],{"class":84,"line":2538},[82,17395,17396],{"class":92},"    c1.m_r",[82,17398,113],{"class":112},[82,17400,440],{"class":88},[82,17402,3909],{"class":92},[82,17404,17405,17407,17409,17412,17414,17417,17420,17422,17424],{"class":84,"line":2548},[82,17406,4166],{"class":92},[82,17408,3792],{"class":112},[82,17410,17411],{"class":96},"\"圆的周长\"",[82,17413,3792],{"class":112},[82,17415,17416],{"class":92},"c1.",[82,17418,17419],{"class":2384},"calculateZC",[82,17421,5026],{"class":92},[82,17423,3792],{"class":112},[82,17425,3814],{"class":92},[82,17427,17428],{"class":84,"line":2579},[82,17429,1391],{"class":92},[19,17431,17432],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[73,17434,17436],{"className":2762,"code":17435,"language":2764,"meta":78,"style":78},"#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",[32,17437,17438,17444,17454,17460,17466,17470,17474,17479,17486,17491,17509,17513,17523,17527,17532,17548,17552,17562,17566,17571,17579,17583,17615,17619,17623,17631,17635,17640,17645,17659,17673,17682],{"__ignoreMap":78},[82,17439,17440,17442],{"class":84,"line":85},[82,17441,4550],{"class":112},[82,17443,4553],{"class":96},[82,17445,17446,17448,17450,17452],{"class":84,"line":157},[82,17447,4558],{"class":112},[82,17449,4561],{"class":112},[82,17451,4564],{"class":2384},[82,17453,3909],{"class":92},[82,17455,17456,17458],{"class":84,"line":404},[82,17457,4550],{"class":112},[82,17459,10340],{"class":96},[82,17461,17462,17464],{"class":84,"line":413},[82,17463,17281],{"class":112},[82,17465,10353],{"class":2384},[82,17467,17468],{"class":84,"line":508},[82,17469,4161],{"class":92},[82,17471,17472],{"class":84,"line":513},[82,17473,17303],{"class":112},[82,17475,17476],{"class":84,"line":1388},[82,17477,17478],{"class":92},"    string m_name;\n",[82,17480,17481,17483],{"class":84,"line":1394},[82,17482,4585],{"class":112},[82,17484,17485],{"class":92}," m_id;\n",[82,17487,17488],{"class":84,"line":1399},[82,17489,17490],{"class":2828},"    \u002F\u002F赋值姓名\n",[82,17492,17493,17496,17499,17501,17504,17507],{"class":84,"line":1430},[82,17494,17495],{"class":112},"    void",[82,17497,17498],{"class":2384}," setName",[82,17500,93],{"class":92},[82,17502,17503],{"class":2384},"string",[82,17505,17506],{"class":108}," name",[82,17508,119],{"class":92},[82,17510,17511],{"class":84,"line":1818},[82,17512,4630],{"class":92},[82,17514,17515,17518,17520],{"class":84,"line":2082},[82,17516,17517],{"class":92},"        m_name",[82,17519,113],{"class":112},[82,17521,17522],{"class":92},"name;\n",[82,17524,17525],{"class":84,"line":2233},[82,17526,4787],{"class":92},[82,17528,17529],{"class":84,"line":2255},[82,17530,17531],{"class":2828},"    \u002F\u002F赋值学号\n",[82,17533,17534,17536,17539,17541,17543,17546],{"class":84,"line":2260},[82,17535,17495],{"class":112},[82,17537,17538],{"class":2384}," setId",[82,17540,93],{"class":92},[82,17542,2776],{"class":112},[82,17544,17545],{"class":108}," id",[82,17547,119],{"class":92},[82,17549,17550],{"class":84,"line":2298},[82,17551,4630],{"class":92},[82,17553,17554,17557,17559],{"class":84,"line":2303},[82,17555,17556],{"class":92},"        m_id",[82,17558,113],{"class":112},[82,17560,17561],{"class":92},"id;\n",[82,17563,17564],{"class":84,"line":2321},[82,17565,4787],{"class":92},[82,17567,17568],{"class":84,"line":2533},[82,17569,17570],{"class":2828},"    \u002F\u002F打印学生信息\n",[82,17572,17573,17575,17577],{"class":84,"line":2538},[82,17574,17495],{"class":112},[82,17576,12206],{"class":2384},[82,17578,4576],{"class":92},[82,17580,17581],{"class":84,"line":2548},[82,17582,4630],{"class":92},[82,17584,17585,17587,17589,17592,17594,17597,17599,17601,17603,17606,17608,17611,17613],{"class":84,"line":2579},[82,17586,6047],{"class":92},[82,17588,3792],{"class":112},[82,17590,17591],{"class":96},"\"姓名：\"",[82,17593,3792],{"class":112},[82,17595,17596],{"class":92},"m_name",[82,17598,3792],{"class":112},[82,17600,6954],{"class":96},[82,17602,3792],{"class":112},[82,17604,17605],{"class":96},"\"学号：\"",[82,17607,3792],{"class":112},[82,17609,17610],{"class":92},"m_id",[82,17612,3792],{"class":112},[82,17614,3814],{"class":92},[82,17616,17617],{"class":84,"line":2585},[82,17618,4787],{"class":92},[82,17620,17621],{"class":84,"line":4350},[82,17622,6590],{"class":92},[82,17624,17625,17627,17629],{"class":84,"line":4355},[82,17626,2776],{"class":112},[82,17628,4573],{"class":2384},[82,17630,4576],{"class":92},[82,17632,17633],{"class":84,"line":4360},[82,17634,4161],{"class":92},[82,17636,17637],{"class":84,"line":4365},[82,17638,17639],{"class":2828},"    \u002F\u002F实例化\n",[82,17641,17642],{"class":84,"line":4379},[82,17643,17644],{"class":92},"    Student s1;\n",[82,17646,17647,17650,17653,17655,17657],{"class":84,"line":4384},[82,17648,17649],{"class":92},"    s1.",[82,17651,17652],{"class":2384},"setName",[82,17654,93],{"class":92},[82,17656,10507],{"class":96},[82,17658,5318],{"class":92},[82,17660,17661,17663,17666,17668,17671],{"class":84,"line":5176},[82,17662,17649],{"class":92},[82,17664,17665],{"class":2384},"setId",[82,17667,93],{"class":92},[82,17669,17670],{"class":88},"123456",[82,17672,5318],{"class":92},[82,17674,17675,17677,17680],{"class":84,"line":5190},[82,17676,17649],{"class":92},[82,17678,17679],{"class":2384},"printInfo",[82,17681,8228],{"class":92},[82,17683,17684],{"class":84,"line":5198},[82,17685,1391],{"class":92},[19,17687,17688],{},"类中的属性和行为统称为成员",[19,17690,17691],{},"属性：成员属性(成员变量)",[19,17693,17694],{},"方法：成员函数(成员方法)",[19,17696,17697],{},[2913,17698,17699],{},"封装意义二：",[19,17701,17702],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17704,17705],{},"访问权限有三种：",[26,17707,17708,17711,17714],{},[29,17709,17710],{},"public        公共权限",[29,17712,17713],{},"protected 保护权限",[29,17715,17716],{},"private      私有权限",[19,17718,17719],{},[2913,17720,17721],{},"示例：",[73,17723,17725],{"className":12532,"code":17724,"language":12534,"meta":78,"style":78},"\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",[32,17726,17727,17732,17737,17742,17747,17751,17758,17762,17767,17771,17776,17780,17785,17790,17795,17799,17804,17809,17816,17820,17824,17832,17836,17847,17859,17871,17875,17879,17883,17891,17895,17900,17912,17920,17928,17932,17942,17946,17954],{"__ignoreMap":78},[82,17728,17729],{"class":84,"line":85},[82,17730,17731],{"class":2828},"\u002F\u002F三种权限\n",[82,17733,17734],{"class":84,"line":157},[82,17735,17736],{"class":2828},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[82,17738,17739],{"class":84,"line":404},[82,17740,17741],{"class":2828},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[82,17743,17744],{"class":84,"line":413},[82,17745,17746],{"class":2828},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[82,17748,17749],{"class":84,"line":508},[82,17750,486],{"emptyLinePlaceholder":485},[82,17752,17753,17755],{"class":84,"line":513},[82,17754,17281],{"class":112},[82,17756,17757],{"class":2384}," Person\n",[82,17759,17760],{"class":84,"line":1388},[82,17761,4161],{"class":92},[82,17763,17764],{"class":84,"line":1394},[82,17765,17766],{"class":2828},"    \u002F\u002F姓名  公共权限\n",[82,17768,17769],{"class":84,"line":1399},[82,17770,17303],{"class":112},[82,17772,17773],{"class":84,"line":1430},[82,17774,17775],{"class":92},"    string m_Name;\n",[82,17777,17778],{"class":84,"line":1818},[82,17779,486],{"emptyLinePlaceholder":485},[82,17781,17782],{"class":84,"line":2082},[82,17783,17784],{"class":2828},"    \u002F\u002F汽车  保护权限\n",[82,17786,17787],{"class":84,"line":2233},[82,17788,17789],{"class":112},"protected:\n",[82,17791,17792],{"class":84,"line":2255},[82,17793,17794],{"class":92},"    string m_Car;\n",[82,17796,17797],{"class":84,"line":2260},[82,17798,486],{"emptyLinePlaceholder":485},[82,17800,17801],{"class":84,"line":2298},[82,17802,17803],{"class":2828},"    \u002F\u002F银行卡密码  私有权限\n",[82,17805,17806],{"class":84,"line":2303},[82,17807,17808],{"class":112},"private:\n",[82,17810,17811,17813],{"class":84,"line":2321},[82,17812,4585],{"class":112},[82,17814,17815],{"class":92}," m_Password;\n",[82,17817,17818],{"class":84,"line":2533},[82,17819,486],{"emptyLinePlaceholder":485},[82,17821,17822],{"class":84,"line":2538},[82,17823,17303],{"class":112},[82,17825,17826,17828,17830],{"class":84,"line":2548},[82,17827,17495],{"class":112},[82,17829,13975],{"class":2384},[82,17831,4576],{"class":92},[82,17833,17834],{"class":84,"line":2579},[82,17835,4630],{"class":92},[82,17837,17838,17841,17843,17845],{"class":84,"line":2585},[82,17839,17840],{"class":92},"        m_Name ",[82,17842,113],{"class":112},[82,17844,11529],{"class":96},[82,17846,3909],{"class":92},[82,17848,17849,17852,17854,17857],{"class":84,"line":4350},[82,17850,17851],{"class":92},"        m_Car ",[82,17853,113],{"class":112},[82,17855,17856],{"class":96}," \"拖拉机\"",[82,17858,3909],{"class":92},[82,17860,17861,17864,17866,17869],{"class":84,"line":4355},[82,17862,17863],{"class":92},"        m_Password ",[82,17865,113],{"class":112},[82,17867,17868],{"class":88}," 123456",[82,17870,3909],{"class":92},[82,17872,17873],{"class":84,"line":4360},[82,17874,4787],{"class":92},[82,17876,17877],{"class":84,"line":4365},[82,17878,6590],{"class":92},[82,17880,17881],{"class":84,"line":4379},[82,17882,486],{"emptyLinePlaceholder":485},[82,17884,17885,17887,17889],{"class":84,"line":4384},[82,17886,2776],{"class":112},[82,17888,4573],{"class":2384},[82,17890,13443],{"class":92},[82,17892,17893],{"class":84,"line":5176},[82,17894,486],{"emptyLinePlaceholder":485},[82,17896,17897],{"class":84,"line":5190},[82,17898,17899],{"class":92},"    Person p;\n",[82,17901,17902,17905,17907,17910],{"class":84,"line":5198},[82,17903,17904],{"class":92},"    p.m_Name ",[82,17906,113],{"class":112},[82,17908,17909],{"class":96}," \"李四\"",[82,17911,3909],{"class":92},[82,17913,17914,17917],{"class":84,"line":5203},[82,17915,17916],{"class":2828},"    \u002F\u002Fp.m_Car = \"奔驰\";",[82,17918,17919],{"class":2828},"  \u002F\u002F保护权限类外访问不到\n",[82,17921,17922,17925],{"class":84,"line":5209},[82,17923,17924],{"class":2828},"    \u002F\u002Fp.m_Password = 123;",[82,17926,17927],{"class":2828}," \u002F\u002F私有权限类外访问不到\n",[82,17929,17930],{"class":84,"line":5215},[82,17931,486],{"emptyLinePlaceholder":485},[82,17933,17934,17936,17938,17940],{"class":84,"line":5220},[82,17935,4903],{"class":2384},[82,17937,93],{"class":92},[82,17939,4908],{"class":96},[82,17941,5318],{"class":92},[82,17943,17944],{"class":84,"line":10539},[82,17945,486],{"emptyLinePlaceholder":485},[82,17947,17948,17950,17952],{"class":84,"line":10563},[82,17949,6685],{"class":112},[82,17951,6688],{"class":88},[82,17953,3909],{"class":92},[82,17955,17956],{"class":84,"line":10568},[82,17957,1391],{"class":92},[65,17959,17961],{"id":17960},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17963,17964,17965,17968,17969],{},"在C++中 struct和class唯一的",[2913,17966,17967],{},"区别","就在于 ",[2913,17970,17971],{},"默认的访问权限不同",[19,17973,17974],{},"区别：",[3755,17976,17977,17980],{},[29,17978,17979],{},"struct 默认权限为公共",[29,17981,17982],{},"class   默认权限为私有",[73,17984,17986],{"className":12532,"code":17985,"language":12534,"meta":78,"style":78},"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",[32,17987,17988,17995,17999,18009,18013,18017,18024,18028,18038,18042,18046,18054,18058,18063,18077,18081,18086,18100,18104,18114,18118,18126],{"__ignoreMap":78},[82,17989,17990,17992],{"class":84,"line":85},[82,17991,17281],{"class":112},[82,17993,17994],{"class":2384}," C1\n",[82,17996,17997],{"class":84,"line":157},[82,17998,4161],{"class":92},[82,18000,18001,18003,18006],{"class":84,"line":404},[82,18002,4585],{"class":112},[82,18004,18005],{"class":92},"  m_A;",[82,18007,18008],{"class":2828}," \u002F\u002F默认是私有权限\n",[82,18010,18011],{"class":84,"line":413},[82,18012,6590],{"class":92},[82,18014,18015],{"class":84,"line":508},[82,18016,486],{"emptyLinePlaceholder":485},[82,18018,18019,18021],{"class":84,"line":513},[82,18020,10350],{"class":112},[82,18022,18023],{"class":2384}," C2\n",[82,18025,18026],{"class":84,"line":1388},[82,18027,4161],{"class":92},[82,18029,18030,18032,18035],{"class":84,"line":1394},[82,18031,4585],{"class":112},[82,18033,18034],{"class":92}," m_A;",[82,18036,18037],{"class":2828},"  \u002F\u002F默认是公共权限\n",[82,18039,18040],{"class":84,"line":1399},[82,18041,6590],{"class":92},[82,18043,18044],{"class":84,"line":1430},[82,18045,486],{"emptyLinePlaceholder":485},[82,18047,18048,18050,18052],{"class":84,"line":1818},[82,18049,2776],{"class":112},[82,18051,4573],{"class":2384},[82,18053,13443],{"class":92},[82,18055,18056],{"class":84,"line":2082},[82,18057,486],{"emptyLinePlaceholder":485},[82,18059,18060],{"class":84,"line":2233},[82,18061,18062],{"class":92},"    C1 c1;\n",[82,18064,18065,18068,18070,18072,18074],{"class":84,"line":2255},[82,18066,18067],{"class":92},"    c1.m_A ",[82,18069,113],{"class":112},[82,18071,4638],{"class":88},[82,18073,2825],{"class":92},[82,18075,18076],{"class":2828}," \u002F\u002F错误，访问权限是私有\n",[82,18078,18079],{"class":84,"line":2260},[82,18080,486],{"emptyLinePlaceholder":485},[82,18082,18083],{"class":84,"line":2298},[82,18084,18085],{"class":92},"    C2 c2;\n",[82,18087,18088,18091,18093,18095,18097],{"class":84,"line":2303},[82,18089,18090],{"class":92},"    c2.m_A ",[82,18092,113],{"class":112},[82,18094,4638],{"class":88},[82,18096,2825],{"class":92},[82,18098,18099],{"class":2828}," \u002F\u002F正确，访问权限是公共\n",[82,18101,18102],{"class":84,"line":2321},[82,18103,486],{"emptyLinePlaceholder":485},[82,18105,18106,18108,18110,18112],{"class":84,"line":2533},[82,18107,4903],{"class":2384},[82,18109,93],{"class":92},[82,18111,4908],{"class":96},[82,18113,5318],{"class":92},[82,18115,18116],{"class":84,"line":2538},[82,18117,486],{"emptyLinePlaceholder":485},[82,18119,18120,18122,18124],{"class":84,"line":2548},[82,18121,6685],{"class":112},[82,18123,6688],{"class":88},[82,18125,3909],{"class":92},[82,18127,18128],{"class":84,"line":2579},[82,18129,1391],{"class":92},[65,18131,18133],{"id":18132},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,18135,18136],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,18138,18139],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,18141,18142],{},[2913,18143,17721],{},[73,18145,18147],{"className":12532,"code":18146,"language":12534,"meta":78,"style":78},"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",[32,18148,18149,18158,18162,18166,18171,18185,18194,18198,18208,18212,18219,18223,18227,18231,18236,18245,18252,18256,18261,18277,18300,18313,18320,18324,18333,18337,18341,18346,18362,18372,18376,18380,18384,18392,18396,18406,18410,18418,18422,18426,18434,18438,18442,18447,18460,18483,18487,18492,18505,18527,18531,18536,18550,18558,18562,18572,18576,18584],{"__ignoreMap":78},[82,18150,18151,18153,18156],{"class":84,"line":85},[82,18152,17281],{"class":112},[82,18154,18155],{"class":2384}," Person",[82,18157,1349],{"class":92},[82,18159,18160],{"class":84,"line":157},[82,18161,17303],{"class":112},[82,18163,18164],{"class":84,"line":404},[82,18165,486],{"emptyLinePlaceholder":485},[82,18167,18168],{"class":84,"line":413},[82,18169,18170],{"class":2828},"    \u002F\u002F姓名设置可读可写\n",[82,18172,18173,18175,18177,18179,18181,18183],{"class":84,"line":508},[82,18174,17495],{"class":112},[82,18176,17498],{"class":2384},[82,18178,93],{"class":92},[82,18180,17503],{"class":2384},[82,18182,17506],{"class":108},[82,18184,15031],{"class":92},[82,18186,18187,18189,18191],{"class":84,"line":513},[82,18188,17840],{"class":92},[82,18190,113],{"class":112},[82,18192,18193],{"class":92}," name;\n",[82,18195,18196],{"class":84,"line":1388},[82,18197,4787],{"class":92},[82,18199,18200,18203,18206],{"class":84,"line":1394},[82,18201,18202],{"class":2384},"    string",[82,18204,18205],{"class":2384}," getName",[82,18207,4576],{"class":92},[82,18209,18210],{"class":84,"line":1399},[82,18211,4630],{"class":92},[82,18213,18214,18216],{"class":84,"line":1430},[82,18215,2405],{"class":112},[82,18217,18218],{"class":92}," m_Name;\n",[82,18220,18221],{"class":84,"line":1818},[82,18222,4787],{"class":92},[82,18224,18225],{"class":84,"line":2082},[82,18226,486],{"emptyLinePlaceholder":485},[82,18228,18229],{"class":84,"line":2233},[82,18230,486],{"emptyLinePlaceholder":485},[82,18232,18233],{"class":84,"line":2255},[82,18234,18235],{"class":2828},"    \u002F\u002F获取年龄 \n",[82,18237,18238,18240,18243],{"class":84,"line":2260},[82,18239,4585],{"class":112},[82,18241,18242],{"class":2384}," getAge",[82,18244,13443],{"class":92},[82,18246,18247,18249],{"class":84,"line":2298},[82,18248,2405],{"class":112},[82,18250,18251],{"class":92}," m_Age;\n",[82,18253,18254],{"class":84,"line":2303},[82,18255,4787],{"class":92},[82,18257,18258],{"class":84,"line":2321},[82,18259,18260],{"class":2828},"    \u002F\u002F设置年龄\n",[82,18262,18263,18265,18268,18270,18272,18275],{"class":84,"line":2533},[82,18264,17495],{"class":112},[82,18266,18267],{"class":2384}," setAge",[82,18269,93],{"class":92},[82,18271,2776],{"class":112},[82,18273,18274],{"class":108}," age",[82,18276,15031],{"class":92},[82,18278,18279,18281,18284,18286,18288,18290,18293,18295,18298],{"class":84,"line":2538},[82,18280,5096],{"class":112},[82,18282,18283],{"class":92}," (age ",[82,18285,3659],{"class":112},[82,18287,6688],{"class":88},[82,18289,5851],{"class":112},[82,18291,18292],{"class":92}," age ",[82,18294,3709],{"class":112},[82,18296,18297],{"class":88}," 150",[82,18299,15031],{"class":92},[82,18301,18302,18304,18306,18309,18311],{"class":84,"line":2548},[82,18303,12310],{"class":92},[82,18305,3792],{"class":112},[82,18307,18308],{"class":96}," \"你个老妖精!\"",[82,18310,4060],{"class":112},[82,18312,11431],{"class":92},[82,18314,18315,18318],{"class":84,"line":2579},[82,18316,18317],{"class":112},"            return",[82,18319,3909],{"class":92},[82,18321,18322],{"class":84,"line":2585},[82,18323,5128],{"class":92},[82,18325,18326,18329,18331],{"class":84,"line":4350},[82,18327,18328],{"class":92},"        m_Age ",[82,18330,113],{"class":112},[82,18332,10388],{"class":92},[82,18334,18335],{"class":84,"line":4355},[82,18336,4787],{"class":92},[82,18338,18339],{"class":84,"line":4360},[82,18340,486],{"emptyLinePlaceholder":485},[82,18342,18343],{"class":84,"line":4365},[82,18344,18345],{"class":2828},"    \u002F\u002F情人设置为只写\n",[82,18347,18348,18350,18353,18355,18357,18360],{"class":84,"line":4379},[82,18349,17495],{"class":112},[82,18351,18352],{"class":2384}," setLover",[82,18354,93],{"class":92},[82,18356,17503],{"class":2384},[82,18358,18359],{"class":108}," lover",[82,18361,15031],{"class":92},[82,18363,18364,18367,18369],{"class":84,"line":4384},[82,18365,18366],{"class":92},"        m_Lover ",[82,18368,113],{"class":112},[82,18370,18371],{"class":92}," lover;\n",[82,18373,18374],{"class":84,"line":5176},[82,18375,4787],{"class":92},[82,18377,18378],{"class":84,"line":5190},[82,18379,486],{"emptyLinePlaceholder":485},[82,18381,18382],{"class":84,"line":5198},[82,18383,17808],{"class":112},[82,18385,18386,18389],{"class":84,"line":5203},[82,18387,18388],{"class":92},"    string m_Name;",[82,18390,18391],{"class":2828}," \u002F\u002F可读可写  姓名\n",[82,18393,18394],{"class":84,"line":5209},[82,18395,15799],{"class":92},[82,18397,18398,18400,18403],{"class":84,"line":5215},[82,18399,4585],{"class":112},[82,18401,18402],{"class":92}," m_Age;",[82,18404,18405],{"class":2828}," \u002F\u002F只读  年龄\n",[82,18407,18408],{"class":84,"line":5220},[82,18409,486],{"emptyLinePlaceholder":485},[82,18411,18412,18415],{"class":84,"line":10539},[82,18413,18414],{"class":92},"    string m_Lover;",[82,18416,18417],{"class":2828}," \u002F\u002F只写  情人\n",[82,18419,18420],{"class":84,"line":10563},[82,18421,6590],{"class":92},[82,18423,18424],{"class":84,"line":10568},[82,18425,486],{"emptyLinePlaceholder":485},[82,18427,18428,18430,18432],{"class":84,"line":10574},[82,18429,2776],{"class":112},[82,18431,4573],{"class":2384},[82,18433,13443],{"class":92},[82,18435,18436],{"class":84,"line":10601},[82,18437,486],{"emptyLinePlaceholder":485},[82,18439,18440],{"class":84,"line":10606},[82,18441,17899],{"class":92},[82,18443,18444],{"class":84,"line":10612},[82,18445,18446],{"class":2828},"    \u002F\u002F姓名设置\n",[82,18448,18449,18452,18454,18456,18458],{"class":84,"line":10624},[82,18450,18451],{"class":92},"    p.",[82,18453,17652],{"class":2384},[82,18455,93],{"class":92},[82,18457,10507],{"class":96},[82,18459,5318],{"class":92},[82,18461,18462,18464,18466,18469,18471,18474,18477,18479,18481],{"class":84,"line":10636},[82,18463,9121],{"class":92},[82,18465,3792],{"class":112},[82,18467,18468],{"class":96}," \"姓名： \"",[82,18470,4060],{"class":112},[82,18472,18473],{"class":92}," p.",[82,18475,18476],{"class":2384},"getName",[82,18478,15639],{"class":92},[82,18480,3792],{"class":112},[82,18482,11431],{"class":92},[82,18484,18485],{"class":84,"line":10648},[82,18486,486],{"emptyLinePlaceholder":485},[82,18488,18489],{"class":84,"line":12307},[82,18490,18491],{"class":2828},"    \u002F\u002F年龄设置\n",[82,18493,18494,18496,18499,18501,18503],{"class":84,"line":12332},[82,18495,18451],{"class":92},[82,18497,18498],{"class":2384},"setAge",[82,18500,93],{"class":92},[82,18502,3408],{"class":88},[82,18504,5318],{"class":92},[82,18506,18507,18509,18511,18514,18516,18518,18521,18523,18525],{"class":84,"line":12355},[82,18508,9121],{"class":92},[82,18510,3792],{"class":112},[82,18512,18513],{"class":96}," \"年龄： \"",[82,18515,4060],{"class":112},[82,18517,18473],{"class":92},[82,18519,18520],{"class":2384},"getAge",[82,18522,15639],{"class":92},[82,18524,3792],{"class":112},[82,18526,11431],{"class":92},[82,18528,18529],{"class":84,"line":12379},[82,18530,486],{"emptyLinePlaceholder":485},[82,18532,18533],{"class":84,"line":12384},[82,18534,18535],{"class":2828},"    \u002F\u002F情人设置\n",[82,18537,18538,18540,18543,18545,18548],{"class":84,"line":12389},[82,18539,18451],{"class":92},[82,18541,18542],{"class":2384},"setLover",[82,18544,93],{"class":92},[82,18546,18547],{"class":96},"\"苍井\"",[82,18549,5318],{"class":92},[82,18551,18552,18555],{"class":84,"line":12394},[82,18553,18554],{"class":2828},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[82,18556,18557],{"class":2828},"  \u002F\u002F只写属性，不可以读取\n",[82,18559,18560],{"class":84,"line":12403},[82,18561,486],{"emptyLinePlaceholder":485},[82,18563,18564,18566,18568,18570],{"class":84,"line":12408},[82,18565,4903],{"class":2384},[82,18567,93],{"class":92},[82,18569,4908],{"class":96},[82,18571,5318],{"class":92},[82,18573,18574],{"class":84,"line":12414},[82,18575,486],{"emptyLinePlaceholder":485},[82,18577,18578,18580,18582],{"class":84,"line":12435},[82,18579,6685],{"class":112},[82,18581,6688],{"class":88},[82,18583,3909],{"class":92},[82,18585,18586],{"class":84,"line":12441},[82,18587,1391],{"class":92},[65,18589,18591],{"id":18590},"_814封装案例","8.1.4封装案例",[26,18593,18594],{},[29,18595,18596,18599],{},[2913,18597,18598],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3755,18601,18602,18605],{},[29,18603,18604],{},"求出立方体的面积和体积",[29,18606,18607],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[73,18609,18611],{"className":2762,"code":18610,"language":2764,"meta":78,"style":78},"#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",[32,18612,18613,18619,18629,18636,18640,18644,18649,18679,18683,18693,18703,18713,18717,18726,18730,18766,18770,18779,18783,18799,18803,18808,18817,18821,18828,18832,18841,18845,18852,18856,18865,18869,18876,18880,18885,18902,18906,18952,18956,18965,18969,18973,18977,18986,18990,18994,18999,19003,19009,19015,19021,19025,19029,19034,19056,19060,19114,19118,19126,19130,19135,19140,19153,19160,19176,19187,19193,19216,19222,19245,19259,19279,19285,19296,19319,19341,19346,19352,19366,19379,19384,19398,19403,19409,19414,19428,19433,19438,19452,19464,19469,19482,19487,19492,19497,19510,19515],{"__ignoreMap":78},[82,18614,18615,18617],{"class":84,"line":85},[82,18616,4550],{"class":112},[82,18618,4553],{"class":96},[82,18620,18621,18623,18625,18627],{"class":84,"line":157},[82,18622,4558],{"class":112},[82,18624,4561],{"class":112},[82,18626,4564],{"class":2384},[82,18628,3909],{"class":92},[82,18630,18631,18633],{"class":84,"line":404},[82,18632,17281],{"class":112},[82,18634,18635],{"class":2384}," Cube\n",[82,18637,18638],{"class":84,"line":413},[82,18639,4161],{"class":92},[82,18641,18642],{"class":84,"line":508},[82,18643,17303],{"class":112},[82,18645,18646],{"class":84,"line":513},[82,18647,18648],{"class":2828},"    \u002F\u002F输入长宽高\n",[82,18650,18651,18653,18656,18658,18660,18663,18665,18667,18670,18672,18674,18677],{"class":84,"line":1388},[82,18652,17495],{"class":112},[82,18654,18655],{"class":2384}," setLwh",[82,18657,93],{"class":92},[82,18659,2776],{"class":112},[82,18661,18662],{"class":108}," l",[82,18664,3136],{"class":92},[82,18666,2776],{"class":112},[82,18668,18669],{"class":108}," w",[82,18671,3136],{"class":92},[82,18673,2776],{"class":112},[82,18675,18676],{"class":108}," h",[82,18678,119],{"class":92},[82,18680,18681],{"class":84,"line":1394},[82,18682,4630],{"class":92},[82,18684,18685,18688,18690],{"class":84,"line":1399},[82,18686,18687],{"class":92},"        m_L",[82,18689,113],{"class":112},[82,18691,18692],{"class":92},"l;\n",[82,18694,18695,18698,18700],{"class":84,"line":1430},[82,18696,18697],{"class":92},"        m_W",[82,18699,113],{"class":112},[82,18701,18702],{"class":92},"w;\n",[82,18704,18705,18708,18710],{"class":84,"line":1818},[82,18706,18707],{"class":92},"        m_H",[82,18709,113],{"class":112},[82,18711,18712],{"class":92},"h;\n",[82,18714,18715],{"class":84,"line":2082},[82,18716,4787],{"class":92},[82,18718,18719,18721,18724],{"class":84,"line":2233},[82,18720,4585],{"class":112},[82,18722,18723],{"class":2384}," mianji",[82,18725,4576],{"class":92},[82,18727,18728],{"class":84,"line":2255},[82,18729,4630],{"class":92},[82,18731,18732,18734,18736,18738,18741,18743,18746,18748,18751,18753,18756,18758,18761,18763],{"class":84,"line":2260},[82,18733,2405],{"class":112},[82,18735,17341],{"class":88},[82,18737,3212],{"class":112},[82,18739,18740],{"class":92},"(m_L",[82,18742,3212],{"class":112},[82,18744,18745],{"class":92},"m_W ",[82,18747,2249],{"class":112},[82,18749,18750],{"class":92}," m_L",[82,18752,3212],{"class":112},[82,18754,18755],{"class":92},"m_H ",[82,18757,2249],{"class":112},[82,18759,18760],{"class":92}," m_W",[82,18762,3212],{"class":112},[82,18764,18765],{"class":92},"m_H);\n",[82,18767,18768],{"class":84,"line":2298},[82,18769,4787],{"class":92},[82,18771,18772,18774,18777],{"class":84,"line":2303},[82,18773,4585],{"class":112},[82,18775,18776],{"class":2384}," tiji",[82,18778,4576],{"class":92},[82,18780,18781],{"class":84,"line":2321},[82,18782,4630],{"class":92},[82,18784,18785,18787,18789,18791,18794,18796],{"class":84,"line":2533},[82,18786,2405],{"class":112},[82,18788,18750],{"class":92},[82,18790,3212],{"class":112},[82,18792,18793],{"class":92},"m_W",[82,18795,3212],{"class":112},[82,18797,18798],{"class":92},"m_H;\n",[82,18800,18801],{"class":84,"line":2538},[82,18802,4787],{"class":92},[82,18804,18805],{"class":84,"line":2548},[82,18806,18807],{"class":2828},"    \u002F\u002F获取长宽高\n",[82,18809,18810,18812,18815],{"class":84,"line":2579},[82,18811,4585],{"class":112},[82,18813,18814],{"class":2384}," getLength",[82,18816,4576],{"class":92},[82,18818,18819],{"class":84,"line":2585},[82,18820,4630],{"class":92},[82,18822,18823,18825],{"class":84,"line":4350},[82,18824,2405],{"class":112},[82,18826,18827],{"class":92}," m_L;\n",[82,18829,18830],{"class":84,"line":4355},[82,18831,4787],{"class":92},[82,18833,18834,18836,18839],{"class":84,"line":4360},[82,18835,4585],{"class":112},[82,18837,18838],{"class":2384}," getWidth",[82,18840,4576],{"class":92},[82,18842,18843],{"class":84,"line":4365},[82,18844,4630],{"class":92},[82,18846,18847,18849],{"class":84,"line":4379},[82,18848,2405],{"class":112},[82,18850,18851],{"class":92}," m_W;\n",[82,18853,18854],{"class":84,"line":4384},[82,18855,4787],{"class":92},[82,18857,18858,18860,18863],{"class":84,"line":5176},[82,18859,4585],{"class":112},[82,18861,18862],{"class":2384}," getHeight",[82,18864,4576],{"class":92},[82,18866,18867],{"class":84,"line":5190},[82,18868,4630],{"class":92},[82,18870,18871,18873],{"class":84,"line":5198},[82,18872,2405],{"class":112},[82,18874,18875],{"class":92}," m_H;\n",[82,18877,18878],{"class":84,"line":5203},[82,18879,4787],{"class":92},[82,18881,18882],{"class":84,"line":5209},[82,18883,18884],{"class":2828},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[82,18886,18887,18890,18893,18895,18898,18900],{"class":84,"line":5215},[82,18888,18889],{"class":112},"    bool",[82,18891,18892],{"class":2384}," isEqual",[82,18894,93],{"class":92},[82,18896,18897],{"class":2384},"Cube",[82,18899,5448],{"class":108},[82,18901,119],{"class":92},[82,18903,18904],{"class":84,"line":5220},[82,18905,4630],{"class":92},[82,18907,18908,18910,18913,18916,18918,18920,18923,18925,18928,18931,18933,18935,18938,18940,18942,18945,18947,18949],{"class":84,"line":10539},[82,18909,5096],{"class":112},[82,18911,18912],{"class":92}," (c.",[82,18914,18915],{"class":2384},"getLength",[82,18917,15639],{"class":92},[82,18919,5548],{"class":112},[82,18921,18922],{"class":92}," m_L ",[82,18924,4318],{"class":112},[82,18926,18927],{"class":92}," c.",[82,18929,18930],{"class":2384},"getWidth",[82,18932,15639],{"class":92},[82,18934,5548],{"class":112},[82,18936,18937],{"class":92}," m_W ",[82,18939,4318],{"class":112},[82,18941,18927],{"class":92},[82,18943,18944],{"class":2384},"getHeight",[82,18946,15639],{"class":92},[82,18948,5548],{"class":112},[82,18950,18951],{"class":92}," m_H)\n",[82,18953,18954],{"class":84,"line":10563},[82,18955,5109],{"class":92},[82,18957,18958,18960,18963],{"class":84,"line":10568},[82,18959,18317],{"class":112},[82,18961,18962],{"class":88}," true",[82,18964,3909],{"class":92},[82,18966,18967],{"class":84,"line":10574},[82,18968,5128],{"class":92},[82,18970,18971],{"class":84,"line":10601},[82,18972,5169],{"class":112},[82,18974,18975],{"class":84,"line":10606},[82,18976,5109],{"class":92},[82,18978,18979,18981,18984],{"class":84,"line":10612},[82,18980,18317],{"class":112},[82,18982,18983],{"class":88}," false",[82,18985,3909],{"class":92},[82,18987,18988],{"class":84,"line":10624},[82,18989,5128],{"class":92},[82,18991,18992],{"class":84,"line":10636},[82,18993,4787],{"class":92},[82,18995,18996],{"class":84,"line":10648},[82,18997,18998],{"class":2828},"    \u002F\u002F私有属性\n",[82,19000,19001],{"class":84,"line":12307},[82,19002,17808],{"class":112},[82,19004,19005,19007],{"class":84,"line":12332},[82,19006,4585],{"class":112},[82,19008,18827],{"class":92},[82,19010,19011,19013],{"class":84,"line":12355},[82,19012,4585],{"class":112},[82,19014,18851],{"class":92},[82,19016,19017,19019],{"class":84,"line":12379},[82,19018,4585],{"class":112},[82,19020,18875],{"class":92},[82,19022,19023],{"class":84,"line":12384},[82,19024,486],{"emptyLinePlaceholder":485},[82,19026,19027],{"class":84,"line":12389},[82,19028,6590],{"class":92},[82,19030,19031],{"class":84,"line":12394},[82,19032,19033],{"class":2828},"\u002F\u002F全局函数判断两个立方体是否相等\n",[82,19035,19036,19038,19040,19042,19044,19047,19049,19051,19054],{"class":84,"line":12403},[82,19037,3970],{"class":112},[82,19039,18892],{"class":2384},[82,19041,93],{"class":92},[82,19043,18897],{"class":2384},[82,19045,19046],{"class":108}," c1",[82,19048,3136],{"class":92},[82,19050,18897],{"class":2384},[82,19052,19053],{"class":108}," c2",[82,19055,119],{"class":92},[82,19057,19058],{"class":84,"line":12408},[82,19059,4161],{"class":92},[82,19061,19062,19064,19067,19069,19071,19073,19076,19078,19081,19083,19085,19087,19089,19091,19093,19095,19097,19099,19101,19103,19105,19107,19109,19111],{"class":84,"line":12414},[82,19063,6685],{"class":112},[82,19065,19066],{"class":92}," (c1.",[82,19068,18915],{"class":2384},[82,19070,15639],{"class":92},[82,19072,5548],{"class":112},[82,19074,19075],{"class":92}," c2.",[82,19077,18915],{"class":2384},[82,19079,19080],{"class":92},"()) ",[82,19082,4318],{"class":112},[82,19084,19066],{"class":92},[82,19086,18930],{"class":2384},[82,19088,15639],{"class":92},[82,19090,5548],{"class":112},[82,19092,19075],{"class":92},[82,19094,18930],{"class":2384},[82,19096,19080],{"class":92},[82,19098,4318],{"class":112},[82,19100,19066],{"class":92},[82,19102,18944],{"class":2384},[82,19104,15639],{"class":92},[82,19106,5548],{"class":112},[82,19108,19075],{"class":92},[82,19110,18944],{"class":2384},[82,19112,19113],{"class":92},"());\n",[82,19115,19116],{"class":84,"line":12435},[82,19117,1391],{"class":92},[82,19119,19120,19122,19124],{"class":84,"line":12441},[82,19121,2776],{"class":112},[82,19123,4573],{"class":2384},[82,19125,4576],{"class":92},[82,19127,19128],{"class":84,"line":12455},[82,19129,4161],{"class":92},[82,19131,19132],{"class":84,"line":12461},[82,19133,19134],{"class":92},"    Cube c1;\n",[82,19136,19137],{"class":84,"line":12488},[82,19138,19139],{"class":2828},"    \u002F\u002F输入立方体的长宽高\n",[82,19141,19142,19144,19146,19149,19151],{"class":84,"line":12497},[82,19143,4166],{"class":92},[82,19145,3792],{"class":112},[82,19147,19148],{"class":96},"\"请输入第一个立方体的长、宽、高：\"",[82,19150,3792],{"class":112},[82,19152,3814],{"class":92},[82,19154,19155,19157],{"class":84,"line":12503},[82,19156,4585],{"class":112},[82,19158,19159],{"class":92}," l,w,h,l1,w1,h1;\n",[82,19161,19162,19164,19166,19168,19170,19172,19174],{"class":84,"line":12511},[82,19163,4612],{"class":92},[82,19165,4045],{"class":112},[82,19167,3274],{"class":92},[82,19169,4045],{"class":112},[82,19171,313],{"class":92},[82,19173,4045],{"class":112},[82,19175,18712],{"class":92},[82,19177,19178,19181,19184],{"class":84,"line":12516},[82,19179,19180],{"class":92},"    c1.",[82,19182,19183],{"class":2384},"setLwh",[82,19185,19186],{"class":92},"(l,w,h);\n",[82,19188,19190],{"class":84,"line":19189},66,[82,19191,19192],{"class":2828},"    \u002F\u002F面积\n",[82,19194,19196,19198,19200,19203,19205,19207,19210,19212,19214],{"class":84,"line":19195},67,[82,19197,4166],{"class":92},[82,19199,3792],{"class":112},[82,19201,19202],{"class":96},"\"立方体的表面积为：\"",[82,19204,3792],{"class":112},[82,19206,17416],{"class":92},[82,19208,19209],{"class":2384},"mianji",[82,19211,5026],{"class":92},[82,19213,3792],{"class":112},[82,19215,3814],{"class":92},[82,19217,19219],{"class":84,"line":19218},68,[82,19220,19221],{"class":2828},"    \u002F\u002F体积\n",[82,19223,19225,19227,19229,19232,19234,19236,19239,19241,19243],{"class":84,"line":19224},69,[82,19226,4166],{"class":92},[82,19228,3792],{"class":112},[82,19230,19231],{"class":96},"\"立方体的体积为：\"",[82,19233,3792],{"class":112},[82,19235,17416],{"class":92},[82,19237,19238],{"class":2384},"tiji",[82,19240,5026],{"class":92},[82,19242,3792],{"class":112},[82,19244,3814],{"class":92},[82,19246,19248,19250,19252,19255,19257],{"class":84,"line":19247},70,[82,19249,4166],{"class":92},[82,19251,3792],{"class":112},[82,19253,19254],{"class":96},"\"请输入第二个立方体的长、宽、高：\"",[82,19256,3792],{"class":112},[82,19258,3814],{"class":92},[82,19260,19262,19264,19266,19269,19271,19274,19276],{"class":84,"line":19261},71,[82,19263,4612],{"class":92},[82,19265,4045],{"class":112},[82,19267,19268],{"class":92},"l1",[82,19270,4045],{"class":112},[82,19272,19273],{"class":92},"w1",[82,19275,4045],{"class":112},[82,19277,19278],{"class":92},"h1;\n",[82,19280,19282],{"class":84,"line":19281},72,[82,19283,19284],{"class":92},"    Cube c2;\n",[82,19286,19288,19291,19293],{"class":84,"line":19287},73,[82,19289,19290],{"class":92},"    c2.",[82,19292,19183],{"class":2384},[82,19294,19295],{"class":92},"(l1,w1,h1);\n",[82,19297,19299,19301,19303,19306,19308,19311,19313,19315,19317],{"class":84,"line":19298},74,[82,19300,4166],{"class":92},[82,19302,3792],{"class":112},[82,19304,19305],{"class":96},"\"第二个立方体的表面积为：\"",[82,19307,3792],{"class":112},[82,19309,19310],{"class":92},"c2.",[82,19312,19209],{"class":2384},[82,19314,5026],{"class":92},[82,19316,3792],{"class":112},[82,19318,3814],{"class":92},[82,19320,19322,19324,19326,19329,19331,19333,19335,19337,19339],{"class":84,"line":19321},75,[82,19323,4166],{"class":92},[82,19325,3792],{"class":112},[82,19327,19328],{"class":96},"\"第二个立方体的体积为：\"",[82,19330,3792],{"class":112},[82,19332,19310],{"class":92},[82,19334,19238],{"class":2384},[82,19336,5026],{"class":92},[82,19338,3792],{"class":112},[82,19340,3814],{"class":92},[82,19342,19344],{"class":84,"line":19343},76,[82,19345,486],{"emptyLinePlaceholder":485},[82,19347,19349],{"class":84,"line":19348},77,[82,19350,19351],{"class":2828},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[82,19353,19355,19357,19359,19362,19364],{"class":84,"line":19354},78,[82,19356,4166],{"class":92},[82,19358,3792],{"class":112},[82,19360,19361],{"class":96},"\"内部函数判断结果：\"",[82,19363,3792],{"class":112},[82,19365,3814],{"class":92},[82,19367,19369,19371,19373,19376],{"class":84,"line":19368},79,[82,19370,2219],{"class":112},[82,19372,19066],{"class":92},[82,19374,19375],{"class":2384},"isEqual",[82,19377,19378],{"class":92},"(c2))\n",[82,19380,19382],{"class":84,"line":19381},80,[82,19383,4630],{"class":92},[82,19385,19387,19389,19391,19394,19396],{"class":84,"line":19386},81,[82,19388,6047],{"class":92},[82,19390,3792],{"class":112},[82,19392,19393],{"class":96},"\"两个立方体相等\"",[82,19395,3792],{"class":112},[82,19397,3814],{"class":92},[82,19399,19401],{"class":84,"line":19400},82,[82,19402,4787],{"class":92},[82,19404,19406],{"class":84,"line":19405},83,[82,19407,19408],{"class":112},"    else\n",[82,19410,19412],{"class":84,"line":19411},84,[82,19413,4630],{"class":92},[82,19415,19417,19419,19421,19424,19426],{"class":84,"line":19416},85,[82,19418,6047],{"class":92},[82,19420,3792],{"class":112},[82,19422,19423],{"class":96},"\"两个立方体不相等\"",[82,19425,3792],{"class":112},[82,19427,3814],{"class":92},[82,19429,19431],{"class":84,"line":19430},86,[82,19432,4787],{"class":92},[82,19434,19436],{"class":84,"line":19435},87,[82,19437,486],{"emptyLinePlaceholder":485},[82,19439,19441,19443,19445,19448,19450],{"class":84,"line":19440},88,[82,19442,4166],{"class":92},[82,19444,3792],{"class":112},[82,19446,19447],{"class":96},"\"全局函数判断结果：\"",[82,19449,3792],{"class":112},[82,19451,3814],{"class":92},[82,19453,19455,19457,19459,19461],{"class":84,"line":19454},89,[82,19456,2219],{"class":112},[82,19458,4265],{"class":92},[82,19460,19375],{"class":2384},[82,19462,19463],{"class":92},"(c1, c2))\n",[82,19465,19467],{"class":84,"line":19466},90,[82,19468,4630],{"class":92},[82,19470,19472,19474,19476,19478,19480],{"class":84,"line":19471},91,[82,19473,6047],{"class":92},[82,19475,3792],{"class":112},[82,19477,19393],{"class":96},[82,19479,3792],{"class":112},[82,19481,3814],{"class":92},[82,19483,19485],{"class":84,"line":19484},92,[82,19486,4787],{"class":92},[82,19488,19490],{"class":84,"line":19489},93,[82,19491,19408],{"class":112},[82,19493,19495],{"class":84,"line":19494},94,[82,19496,4630],{"class":92},[82,19498,19500,19502,19504,19506,19508],{"class":84,"line":19499},95,[82,19501,6047],{"class":92},[82,19503,3792],{"class":112},[82,19505,19423],{"class":96},[82,19507,3792],{"class":112},[82,19509,3814],{"class":92},[82,19511,19513],{"class":84,"line":19512},96,[82,19514,4787],{"class":92},[82,19516,19518],{"class":84,"line":19517},97,[82,19519,1391],{"class":92},[26,19521,19522],{"start":157},[29,19523,19524],{},[2913,19525,19526],{},"练习案例2：点和圆的关系",[3755,19528,19529],{},[29,19530,19531],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[73,19533,19535],{"className":2762,"code":19534,"language":2764,"meta":78,"style":78},"#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",[32,19536,19537,19543,19553,19560,19567,19571,19575,19580,19614,19619,19635,19649,19653,19657,19664,19671,19675,19681,19685,19689,19693,19714,19737,19742,19756,19771,19775,19779,19785,19790,19795,19799,19825,19829,19859,19887,19915,19932,19936,19949,19953,19957,19961,19974,19978,19982,19990,19994,19998,20002,20007,20011,20022,20029,20038,20048,20059,20066,20079,20090,20100,20111,20118,20132,20137,20147,20155],{"__ignoreMap":78},[82,19538,19539,19541],{"class":84,"line":85},[82,19540,4550],{"class":112},[82,19542,4553],{"class":96},[82,19544,19545,19547,19549,19551],{"class":84,"line":157},[82,19546,4558],{"class":112},[82,19548,4561],{"class":112},[82,19550,4564],{"class":2384},[82,19552,3909],{"class":92},[82,19554,19555,19557],{"class":84,"line":404},[82,19556,4550],{"class":112},[82,19558,19559],{"class":96},"\u003Ccmath>\n",[82,19561,19562,19564],{"class":84,"line":413},[82,19563,17281],{"class":112},[82,19565,19566],{"class":2384}," Point\n",[82,19568,19569],{"class":84,"line":508},[82,19570,4161],{"class":92},[82,19572,19573],{"class":84,"line":513},[82,19574,17303],{"class":112},[82,19576,19577],{"class":84,"line":1388},[82,19578,19579],{"class":2828},"    \u002F\u002F赋值\n",[82,19581,19582,19584,19587,19589,19591,19594,19596,19598,19601,19604,19606,19609,19611],{"class":84,"line":1394},[82,19583,17495],{"class":112},[82,19585,19586],{"class":2384}," setPoint",[82,19588,93],{"class":92},[82,19590,16624],{"class":112},[82,19592,19593],{"class":108}," x",[82,19595,100],{"class":92},[82,19597,16624],{"class":112},[82,19599,19600],{"class":108}," y",[82,19602,19603],{"class":92},") { m_x ",[82,19605,113],{"class":112},[82,19607,19608],{"class":92}," x; m_y ",[82,19610,113],{"class":112},[82,19612,19613],{"class":92}," y; }\n",[82,19615,19616],{"class":84,"line":1399},[82,19617,19618],{"class":2828},"    \u002F\u002F获取坐标\n",[82,19620,19621,19623,19626,19629,19632],{"class":84,"line":1430},[82,19622,17325],{"class":112},[82,19624,19625],{"class":2384}," getX",[82,19627,19628],{"class":92},"() { ",[82,19630,19631],{"class":112},"return",[82,19633,19634],{"class":92}," m_x; }\n",[82,19636,19637,19639,19642,19644,19646],{"class":84,"line":1818},[82,19638,17325],{"class":112},[82,19640,19641],{"class":2384}," getY",[82,19643,19628],{"class":92},[82,19645,19631],{"class":112},[82,19647,19648],{"class":92}," m_y; }\n",[82,19650,19651],{"class":84,"line":2082},[82,19652,486],{"emptyLinePlaceholder":485},[82,19654,19655],{"class":84,"line":2233},[82,19656,17808],{"class":112},[82,19658,19659,19661],{"class":84,"line":2255},[82,19660,17325],{"class":112},[82,19662,19663],{"class":92}," m_x;\n",[82,19665,19666,19668],{"class":84,"line":2260},[82,19667,17325],{"class":112},[82,19669,19670],{"class":92}," m_y;\n",[82,19672,19673],{"class":84,"line":2298},[82,19674,6590],{"class":92},[82,19676,19677,19679],{"class":84,"line":2303},[82,19678,17281],{"class":112},[82,19680,17284],{"class":2384},[82,19682,19683],{"class":84,"line":2321},[82,19684,4161],{"class":92},[82,19686,19687],{"class":84,"line":2533},[82,19688,17303],{"class":112},[82,19690,19691],{"class":84,"line":2538},[82,19692,19579],{"class":2828},[82,19694,19695,19697,19700,19702,19704,19706,19709,19711],{"class":84,"line":2548},[82,19696,17495],{"class":112},[82,19698,19699],{"class":2384}," setRadius",[82,19701,93],{"class":92},[82,19703,16624],{"class":112},[82,19705,213],{"class":108},[82,19707,19708],{"class":92},") { m_r ",[82,19710,113],{"class":112},[82,19712,19713],{"class":92}," r; }\n",[82,19715,19716,19718,19721,19723,19726,19729,19732,19734],{"class":84,"line":2579},[82,19717,17495],{"class":112},[82,19719,19720],{"class":2384}," setCenter",[82,19722,93],{"class":92},[82,19724,19725],{"class":2384},"Point",[82,19727,19728],{"class":108}," center",[82,19730,19731],{"class":92},") { m_center ",[82,19733,113],{"class":112},[82,19735,19736],{"class":92}," center; }\n",[82,19738,19739],{"class":84,"line":2585},[82,19740,19741],{"class":2828},"    \u002F\u002F获取属性\n",[82,19743,19744,19746,19749,19751,19753],{"class":84,"line":4350},[82,19745,17325],{"class":112},[82,19747,19748],{"class":2384}," getRadius",[82,19750,19628],{"class":92},[82,19752,19631],{"class":112},[82,19754,19755],{"class":92}," m_r; }\n",[82,19757,19758,19761,19764,19766,19768],{"class":84,"line":4355},[82,19759,19760],{"class":2384},"    Point",[82,19762,19763],{"class":2384}," getCenter",[82,19765,19628],{"class":92},[82,19767,19631],{"class":112},[82,19769,19770],{"class":92}," m_center; }\n",[82,19772,19773],{"class":84,"line":4360},[82,19774,486],{"emptyLinePlaceholder":485},[82,19776,19777],{"class":84,"line":4365},[82,19778,17808],{"class":112},[82,19780,19781,19783],{"class":84,"line":4379},[82,19782,17325],{"class":112},[82,19784,17315],{"class":92},[82,19786,19787],{"class":84,"line":4384},[82,19788,19789],{"class":2828},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[82,19791,19792],{"class":84,"line":5176},[82,19793,19794],{"class":92},"    Point m_center;\n",[82,19796,19797],{"class":84,"line":5190},[82,19798,6590],{"class":92},[82,19800,19801,19803,19806,19808,19811,19813,19815,19817,19819,19821,19823],{"class":84,"line":5198},[82,19802,7956],{"class":112},[82,19804,19805],{"class":2384}," isInCircle",[82,19807,93],{"class":92},[82,19809,19810],{"class":2384},"Circle",[82,19812,13174],{"class":112},[82,19814,3046],{"class":108},[82,19816,3136],{"class":92},[82,19818,19725],{"class":2384},[82,19820,13174],{"class":112},[82,19822,19],{"class":108},[82,19824,119],{"class":92},[82,19826,19827],{"class":84,"line":5203},[82,19828,4161],{"class":92},[82,19830,19831,19833,19836,19838,19840,19843,19846,19849,19851,19853,19855,19857],{"class":84,"line":5209},[82,19832,17325],{"class":112},[82,19834,19835],{"class":92}," dx ",[82,19837,113],{"class":112},[82,19839,18927],{"class":92},[82,19841,19842],{"class":2384},"getCenter",[82,19844,19845],{"class":92},"().",[82,19847,19848],{"class":2384},"getX",[82,19850,15639],{"class":92},[82,19852,3288],{"class":112},[82,19854,18473],{"class":92},[82,19856,19848],{"class":2384},[82,19858,8228],{"class":92},[82,19860,19861,19863,19866,19868,19870,19872,19874,19877,19879,19881,19883,19885],{"class":84,"line":5215},[82,19862,17325],{"class":112},[82,19864,19865],{"class":92}," dy ",[82,19867,113],{"class":112},[82,19869,18927],{"class":92},[82,19871,19842],{"class":2384},[82,19873,19845],{"class":92},[82,19875,19876],{"class":2384},"getY",[82,19878,15639],{"class":92},[82,19880,3288],{"class":112},[82,19882,18473],{"class":92},[82,19884,19876],{"class":2384},[82,19886,8228],{"class":92},[82,19888,19889,19891,19894,19896,19899,19902,19904,19906,19908,19910,19912],{"class":84,"line":5220},[82,19890,17325],{"class":112},[82,19892,19893],{"class":92}," distance ",[82,19895,113],{"class":112},[82,19897,19898],{"class":2384}," sqrt",[82,19900,19901],{"class":92},"(dx ",[82,19903,3212],{"class":112},[82,19905,19835],{"class":92},[82,19907,2249],{"class":112},[82,19909,19865],{"class":92},[82,19911,3212],{"class":112},[82,19913,19914],{"class":92}," dy);\n",[82,19916,19917,19919,19922,19924,19926,19929],{"class":84,"line":10539},[82,19918,2219],{"class":112},[82,19920,19921],{"class":92}," (distance ",[82,19923,3659],{"class":112},[82,19925,18927],{"class":92},[82,19927,19928],{"class":2384},"getRadius",[82,19930,19931],{"class":92},"())\n",[82,19933,19934],{"class":84,"line":10563},[82,19935,4630],{"class":92},[82,19937,19938,19940,19942,19945,19947],{"class":84,"line":10568},[82,19939,12260],{"class":92},[82,19941,3792],{"class":112},[82,19943,19944],{"class":96}," \"点在圆内\"",[82,19946,4060],{"class":112},[82,19948,11431],{"class":92},[82,19950,19951],{"class":84,"line":10574},[82,19952,4787],{"class":92},[82,19954,19955],{"class":84,"line":10601},[82,19956,19408],{"class":112},[82,19958,19959],{"class":84,"line":10606},[82,19960,4630],{"class":92},[82,19962,19963,19965,19967,19970,19972],{"class":84,"line":10612},[82,19964,12260],{"class":92},[82,19966,3792],{"class":112},[82,19968,19969],{"class":96}," \"点在圆外\"",[82,19971,4060],{"class":112},[82,19973,11431],{"class":92},[82,19975,19976],{"class":84,"line":10624},[82,19977,4787],{"class":92},[82,19979,19980],{"class":84,"line":10636},[82,19981,1391],{"class":92},[82,19983,19984,19986,19988],{"class":84,"line":10648},[82,19985,2776],{"class":112},[82,19987,4573],{"class":2384},[82,19989,4576],{"class":92},[82,19991,19992],{"class":84,"line":12307},[82,19993,4161],{"class":92},[82,19995,19996],{"class":84,"line":12332},[82,19997,17639],{"class":2828},[82,19999,20000],{"class":84,"line":12355},[82,20001,17386],{"class":92},[82,20003,20004],{"class":84,"line":12379},[82,20005,20006],{"class":92},"    Point p1;\n",[82,20008,20009],{"class":84,"line":12384},[82,20010,19579],{"class":2828},[82,20012,20013,20015,20017,20020],{"class":84,"line":12389},[82,20014,4166],{"class":92},[82,20016,3792],{"class":112},[82,20018,20019],{"class":96},"\"请输入圆的半径：\"",[82,20021,3909],{"class":92},[82,20023,20024,20026],{"class":84,"line":12394},[82,20025,17325],{"class":112},[82,20027,20028],{"class":92}," r;\n",[82,20030,20031,20033,20035],{"class":84,"line":12403},[82,20032,4612],{"class":92},[82,20034,4045],{"class":112},[82,20036,20037],{"class":92},"r;\n",[82,20039,20040,20042,20045],{"class":84,"line":12408},[82,20041,19180],{"class":92},[82,20043,20044],{"class":2384},"setRadius",[82,20046,20047],{"class":92},"(r);\n",[82,20049,20050,20052,20054,20057],{"class":84,"line":12414},[82,20051,4166],{"class":92},[82,20053,3792],{"class":112},[82,20055,20056],{"class":96},"\"请输入圆心坐标：\"",[82,20058,3909],{"class":92},[82,20060,20061,20063],{"class":84,"line":12435},[82,20062,17325],{"class":112},[82,20064,20065],{"class":92}," x, y;\n",[82,20067,20068,20070,20072,20074,20076],{"class":84,"line":12441},[82,20069,4612],{"class":92},[82,20071,4045],{"class":112},[82,20073,3569],{"class":92},[82,20075,4045],{"class":112},[82,20077,20078],{"class":92},"y;\n",[82,20080,20081,20084,20087],{"class":84,"line":12455},[82,20082,20083],{"class":92},"    p1.",[82,20085,20086],{"class":2384},"setPoint",[82,20088,20089],{"class":92},"(x, y);\n",[82,20091,20092,20094,20097],{"class":84,"line":12461},[82,20093,19180],{"class":92},[82,20095,20096],{"class":2384},"setCenter",[82,20098,20099],{"class":92},"(p1);\n",[82,20101,20102,20104,20106,20109],{"class":84,"line":12488},[82,20103,4166],{"class":92},[82,20105,3792],{"class":112},[82,20107,20108],{"class":96},"\"请输入测试点坐标：\"",[82,20110,3909],{"class":92},[82,20112,20113,20115],{"class":84,"line":12497},[82,20114,17325],{"class":112},[82,20116,20117],{"class":92}," x1, y1;\n",[82,20119,20120,20122,20124,20127,20129],{"class":84,"line":12503},[82,20121,4612],{"class":92},[82,20123,4045],{"class":112},[82,20125,20126],{"class":92},"x1",[82,20128,4045],{"class":112},[82,20130,20131],{"class":92},"y1;\n",[82,20133,20134],{"class":84,"line":12511},[82,20135,20136],{"class":92},"    Point p2;\n",[82,20138,20139,20142,20144],{"class":84,"line":12516},[82,20140,20141],{"class":92},"    p2.",[82,20143,20086],{"class":2384},[82,20145,20146],{"class":92},"(x1, y1);\n",[82,20148,20149,20152],{"class":84,"line":19189},[82,20150,20151],{"class":2384},"    isInCircle",[82,20153,20154],{"class":92},"(c1, p2);\n",[82,20156,20157],{"class":84,"line":19195},[82,20158,1391],{"class":92},[19,20160,20161],{},"在类中可以让另一个类作为本来的成员",[19,20163,20164],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,20166,20167],{},"创建point.h",[73,20169,20171],{"className":2762,"code":20170,"language":2764,"meta":78,"style":78},"#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",[32,20172,20173,20184,20190,20200,20206,20210,20215,20219,20223,20243,20247,20255,20263,20267,20271,20277,20283],{"__ignoreMap":78},[82,20174,20175,20178,20181],{"class":84,"line":85},[82,20176,20177],{"class":112},"#pragma",[82,20179,20180],{"class":2384}," once",[82,20182,20183],{"class":2828}," \u002F\u002F防止头文件重复包含\n",[82,20185,20186,20188],{"class":84,"line":157},[82,20187,4550],{"class":112},[82,20189,4553],{"class":96},[82,20191,20192,20194,20196,20198],{"class":84,"line":404},[82,20193,4558],{"class":112},[82,20195,4561],{"class":112},[82,20197,4564],{"class":2384},[82,20199,3909],{"class":92},[82,20201,20202,20204],{"class":84,"line":413},[82,20203,17281],{"class":112},[82,20205,19566],{"class":2384},[82,20207,20208],{"class":84,"line":508},[82,20209,4161],{"class":92},[82,20211,20212],{"class":84,"line":513},[82,20213,20214],{"class":2828},"\u002F\u002F做好声明与变量定义就可以\n",[82,20216,20217],{"class":84,"line":1388},[82,20218,17303],{"class":112},[82,20220,20221],{"class":84,"line":1394},[82,20222,19579],{"class":2828},[82,20224,20225,20227,20229,20231,20233,20235,20237,20239,20241],{"class":84,"line":1399},[82,20226,17495],{"class":112},[82,20228,19586],{"class":2384},[82,20230,93],{"class":92},[82,20232,16624],{"class":112},[82,20234,19593],{"class":108},[82,20236,100],{"class":92},[82,20238,16624],{"class":112},[82,20240,19600],{"class":108},[82,20242,5318],{"class":92},[82,20244,20245],{"class":84,"line":1430},[82,20246,19618],{"class":2828},[82,20248,20249,20251,20253],{"class":84,"line":1818},[82,20250,17325],{"class":112},[82,20252,19625],{"class":2384},[82,20254,8228],{"class":92},[82,20256,20257,20259,20261],{"class":84,"line":2082},[82,20258,17325],{"class":112},[82,20260,19641],{"class":2384},[82,20262,8228],{"class":92},[82,20264,20265],{"class":84,"line":2233},[82,20266,486],{"emptyLinePlaceholder":485},[82,20268,20269],{"class":84,"line":2255},[82,20270,17808],{"class":112},[82,20272,20273,20275],{"class":84,"line":2260},[82,20274,17325],{"class":112},[82,20276,19663],{"class":92},[82,20278,20279,20281],{"class":84,"line":2298},[82,20280,17325],{"class":112},[82,20282,19670],{"class":92},[82,20284,20285],{"class":84,"line":2303},[82,20286,6590],{"class":92},[19,20288,20289],{},"创建point.cpp",[73,20291,20293],{"className":2762,"code":20292,"language":2764,"meta":78,"style":78},"#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",[32,20294,20295,20302,20307,20341,20345,20361],{"__ignoreMap":78},[82,20296,20297,20299],{"class":84,"line":85},[82,20298,4550],{"class":112},[82,20300,20301],{"class":96},"\u003Cpoint.h>\n",[82,20303,20304],{"class":84,"line":157},[82,20305,20306],{"class":2828},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[82,20308,20309,20311,20314,20317,20319,20321,20323,20325,20327,20329,20331,20333,20335,20337,20339],{"class":84,"line":404},[82,20310,17495],{"class":112},[82,20312,20313],{"class":2384}," Point",[82,20315,20316],{"class":92},"::",[82,20318,20086],{"class":2384},[82,20320,93],{"class":92},[82,20322,16624],{"class":112},[82,20324,19593],{"class":108},[82,20326,100],{"class":92},[82,20328,16624],{"class":112},[82,20330,19600],{"class":108},[82,20332,19603],{"class":92},[82,20334,113],{"class":112},[82,20336,19608],{"class":92},[82,20338,113],{"class":112},[82,20340,19613],{"class":92},[82,20342,20343],{"class":84,"line":413},[82,20344,19618],{"class":2828},[82,20346,20347,20349,20351,20353,20355,20357,20359],{"class":84,"line":508},[82,20348,17325],{"class":112},[82,20350,20313],{"class":2384},[82,20352,20316],{"class":92},[82,20354,19848],{"class":2384},[82,20356,19628],{"class":92},[82,20358,19631],{"class":112},[82,20360,19634],{"class":92},[82,20362,20363,20365,20367,20369,20371,20373,20375],{"class":84,"line":513},[82,20364,17325],{"class":112},[82,20366,20313],{"class":2384},[82,20368,20316],{"class":92},[82,20370,19876],{"class":2384},[82,20372,19628],{"class":92},[82,20374,19631],{"class":112},[82,20376,19648],{"class":92},[19,20378,20379],{},"创建circle.h",[73,20381,20383],{"className":2762,"code":20382,"language":2764,"meta":78,"style":78},"#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",[32,20384,20385,20392,20398,20408,20414,20420,20424,20428,20432,20446,20460,20464,20472,20480,20484,20488,20494,20498,20502],{"__ignoreMap":78},[82,20386,20387,20389],{"class":84,"line":85},[82,20388,20177],{"class":112},[82,20390,20391],{"class":2384}," once\n",[82,20393,20394,20396],{"class":84,"line":157},[82,20395,4550],{"class":112},[82,20397,4553],{"class":96},[82,20399,20400,20402,20404,20406],{"class":84,"line":404},[82,20401,4558],{"class":112},[82,20403,4561],{"class":112},[82,20405,4564],{"class":2384},[82,20407,3909],{"class":92},[82,20409,20410,20412],{"class":84,"line":413},[82,20411,4550],{"class":112},[82,20413,20301],{"class":96},[82,20415,20416,20418],{"class":84,"line":508},[82,20417,17281],{"class":112},[82,20419,17284],{"class":2384},[82,20421,20422],{"class":84,"line":513},[82,20423,4161],{"class":92},[82,20425,20426],{"class":84,"line":1388},[82,20427,17303],{"class":112},[82,20429,20430],{"class":84,"line":1394},[82,20431,19579],{"class":2828},[82,20433,20434,20436,20438,20440,20442,20444],{"class":84,"line":1399},[82,20435,17495],{"class":112},[82,20437,19699],{"class":2384},[82,20439,93],{"class":92},[82,20441,16624],{"class":112},[82,20443,213],{"class":108},[82,20445,5318],{"class":92},[82,20447,20448,20450,20452,20454,20456,20458],{"class":84,"line":1430},[82,20449,17495],{"class":112},[82,20451,19720],{"class":2384},[82,20453,93],{"class":92},[82,20455,19725],{"class":2384},[82,20457,19728],{"class":108},[82,20459,5318],{"class":92},[82,20461,20462],{"class":84,"line":1818},[82,20463,19741],{"class":2828},[82,20465,20466,20468,20470],{"class":84,"line":2082},[82,20467,17325],{"class":112},[82,20469,19748],{"class":2384},[82,20471,8228],{"class":92},[82,20473,20474,20476,20478],{"class":84,"line":2233},[82,20475,19760],{"class":2384},[82,20477,19763],{"class":2384},[82,20479,8228],{"class":92},[82,20481,20482],{"class":84,"line":2255},[82,20483,486],{"emptyLinePlaceholder":485},[82,20485,20486],{"class":84,"line":2260},[82,20487,17808],{"class":112},[82,20489,20490,20492],{"class":84,"line":2298},[82,20491,17325],{"class":112},[82,20493,17315],{"class":92},[82,20495,20496],{"class":84,"line":2303},[82,20497,19789],{"class":2828},[82,20499,20500],{"class":84,"line":2321},[82,20501,19794],{"class":92},[82,20503,20504],{"class":84,"line":2533},[82,20505,6590],{"class":92},[19,20507,20508],{},"创建circle.cpp",[73,20510,20512],{"className":2762,"code":20511,"language":2764,"meta":78,"style":78},"#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",[32,20513,20514,20521,20544,20566,20571,20587],{"__ignoreMap":78},[82,20515,20516,20518],{"class":84,"line":85},[82,20517,4550],{"class":112},[82,20519,20520],{"class":96},"\u003Ccircle.h>\n",[82,20522,20523,20525,20528,20530,20532,20534,20536,20538,20540,20542],{"class":84,"line":157},[82,20524,7956],{"class":112},[82,20526,20527],{"class":2384}," Circle",[82,20529,20316],{"class":92},[82,20531,20044],{"class":2384},[82,20533,93],{"class":92},[82,20535,16624],{"class":112},[82,20537,213],{"class":108},[82,20539,19708],{"class":92},[82,20541,113],{"class":112},[82,20543,19713],{"class":92},[82,20545,20546,20548,20550,20552,20554,20556,20558,20560,20562,20564],{"class":84,"line":404},[82,20547,7956],{"class":112},[82,20549,20527],{"class":2384},[82,20551,20316],{"class":92},[82,20553,20096],{"class":2384},[82,20555,93],{"class":92},[82,20557,19725],{"class":2384},[82,20559,19728],{"class":108},[82,20561,19731],{"class":92},[82,20563,113],{"class":112},[82,20565,19736],{"class":92},[82,20567,20568],{"class":84,"line":413},[82,20569,20570],{"class":2828},"\u002F\u002F获取属性\n",[82,20572,20573,20575,20577,20579,20581,20583,20585],{"class":84,"line":508},[82,20574,16624],{"class":112},[82,20576,20527],{"class":2384},[82,20578,20316],{"class":92},[82,20580,19928],{"class":2384},[82,20582,19628],{"class":92},[82,20584,19631],{"class":112},[82,20586,19755],{"class":92},[82,20588,20589,20591,20593,20595,20597,20599,20601],{"class":84,"line":513},[82,20590,19725],{"class":2384},[82,20592,20527],{"class":2384},[82,20594,20316],{"class":92},[82,20596,19842],{"class":2384},[82,20598,19628],{"class":92},[82,20600,19631],{"class":112},[82,20602,19770],{"class":92},[19,20604,20605],{},"使用封装的类",[73,20607,20609],{"className":2762,"code":20608,"language":2764,"meta":78,"style":78},"#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",[32,20610,20611,20617,20627,20633,20639,20663,20667,20693,20719,20743,20757,20761,20773,20777,20781,20785,20797,20801,20805,20813,20817,20821,20825,20829,20833,20843,20849,20857,20865,20875,20881,20893,20901,20909,20919,20925,20937,20941,20949,20955],{"__ignoreMap":78},[82,20612,20613,20615],{"class":84,"line":85},[82,20614,4550],{"class":112},[82,20616,4553],{"class":96},[82,20618,20619,20621,20623,20625],{"class":84,"line":157},[82,20620,4558],{"class":112},[82,20622,4561],{"class":112},[82,20624,4564],{"class":2384},[82,20626,3909],{"class":92},[82,20628,20629,20631],{"class":84,"line":404},[82,20630,4550],{"class":112},[82,20632,20520],{"class":96},[82,20634,20635,20637],{"class":84,"line":413},[82,20636,4550],{"class":112},[82,20638,20301],{"class":96},[82,20640,20641,20643,20645,20647,20649,20651,20653,20655,20657,20659,20661],{"class":84,"line":508},[82,20642,7956],{"class":112},[82,20644,19805],{"class":2384},[82,20646,93],{"class":92},[82,20648,19810],{"class":2384},[82,20650,13174],{"class":112},[82,20652,3046],{"class":108},[82,20654,3136],{"class":92},[82,20656,19725],{"class":2384},[82,20658,13174],{"class":112},[82,20660,19],{"class":108},[82,20662,119],{"class":92},[82,20664,20665],{"class":84,"line":513},[82,20666,4161],{"class":92},[82,20668,20669,20671,20673,20675,20677,20679,20681,20683,20685,20687,20689,20691],{"class":84,"line":1388},[82,20670,17325],{"class":112},[82,20672,19835],{"class":92},[82,20674,113],{"class":112},[82,20676,18927],{"class":92},[82,20678,19842],{"class":2384},[82,20680,19845],{"class":92},[82,20682,19848],{"class":2384},[82,20684,15639],{"class":92},[82,20686,3288],{"class":112},[82,20688,18473],{"class":92},[82,20690,19848],{"class":2384},[82,20692,8228],{"class":92},[82,20694,20695,20697,20699,20701,20703,20705,20707,20709,20711,20713,20715,20717],{"class":84,"line":1394},[82,20696,17325],{"class":112},[82,20698,19865],{"class":92},[82,20700,113],{"class":112},[82,20702,18927],{"class":92},[82,20704,19842],{"class":2384},[82,20706,19845],{"class":92},[82,20708,19876],{"class":2384},[82,20710,15639],{"class":92},[82,20712,3288],{"class":112},[82,20714,18473],{"class":92},[82,20716,19876],{"class":2384},[82,20718,8228],{"class":92},[82,20720,20721,20723,20725,20727,20729,20731,20733,20735,20737,20739,20741],{"class":84,"line":1399},[82,20722,17325],{"class":112},[82,20724,19893],{"class":92},[82,20726,113],{"class":112},[82,20728,19898],{"class":2384},[82,20730,19901],{"class":92},[82,20732,3212],{"class":112},[82,20734,19835],{"class":92},[82,20736,2249],{"class":112},[82,20738,19865],{"class":92},[82,20740,3212],{"class":112},[82,20742,19914],{"class":92},[82,20744,20745,20747,20749,20751,20753,20755],{"class":84,"line":1430},[82,20746,2219],{"class":112},[82,20748,19921],{"class":92},[82,20750,3659],{"class":112},[82,20752,18927],{"class":92},[82,20754,19928],{"class":2384},[82,20756,19931],{"class":92},[82,20758,20759],{"class":84,"line":1818},[82,20760,4630],{"class":92},[82,20762,20763,20765,20767,20769,20771],{"class":84,"line":2082},[82,20764,12260],{"class":92},[82,20766,3792],{"class":112},[82,20768,19944],{"class":96},[82,20770,4060],{"class":112},[82,20772,11431],{"class":92},[82,20774,20775],{"class":84,"line":2233},[82,20776,4787],{"class":92},[82,20778,20779],{"class":84,"line":2255},[82,20780,19408],{"class":112},[82,20782,20783],{"class":84,"line":2260},[82,20784,4630],{"class":92},[82,20786,20787,20789,20791,20793,20795],{"class":84,"line":2298},[82,20788,12260],{"class":92},[82,20790,3792],{"class":112},[82,20792,19969],{"class":96},[82,20794,4060],{"class":112},[82,20796,11431],{"class":92},[82,20798,20799],{"class":84,"line":2303},[82,20800,4787],{"class":92},[82,20802,20803],{"class":84,"line":2321},[82,20804,1391],{"class":92},[82,20806,20807,20809,20811],{"class":84,"line":2533},[82,20808,2776],{"class":112},[82,20810,4573],{"class":2384},[82,20812,4576],{"class":92},[82,20814,20815],{"class":84,"line":2538},[82,20816,4161],{"class":92},[82,20818,20819],{"class":84,"line":2548},[82,20820,17639],{"class":2828},[82,20822,20823],{"class":84,"line":2579},[82,20824,17386],{"class":92},[82,20826,20827],{"class":84,"line":2585},[82,20828,20006],{"class":92},[82,20830,20831],{"class":84,"line":4350},[82,20832,19579],{"class":2828},[82,20834,20835,20837,20839,20841],{"class":84,"line":4355},[82,20836,4166],{"class":92},[82,20838,3792],{"class":112},[82,20840,20019],{"class":96},[82,20842,3909],{"class":92},[82,20844,20845,20847],{"class":84,"line":4360},[82,20846,17325],{"class":112},[82,20848,20028],{"class":92},[82,20850,20851,20853,20855],{"class":84,"line":4365},[82,20852,4612],{"class":92},[82,20854,4045],{"class":112},[82,20856,20037],{"class":92},[82,20858,20859,20861,20863],{"class":84,"line":4379},[82,20860,19180],{"class":92},[82,20862,20044],{"class":2384},[82,20864,20047],{"class":92},[82,20866,20867,20869,20871,20873],{"class":84,"line":4384},[82,20868,4166],{"class":92},[82,20870,3792],{"class":112},[82,20872,20056],{"class":96},[82,20874,3909],{"class":92},[82,20876,20877,20879],{"class":84,"line":5176},[82,20878,17325],{"class":112},[82,20880,20065],{"class":92},[82,20882,20883,20885,20887,20889,20891],{"class":84,"line":5190},[82,20884,4612],{"class":92},[82,20886,4045],{"class":112},[82,20888,3569],{"class":92},[82,20890,4045],{"class":112},[82,20892,20078],{"class":92},[82,20894,20895,20897,20899],{"class":84,"line":5198},[82,20896,20083],{"class":92},[82,20898,20086],{"class":2384},[82,20900,20089],{"class":92},[82,20902,20903,20905,20907],{"class":84,"line":5203},[82,20904,19180],{"class":92},[82,20906,20096],{"class":2384},[82,20908,20099],{"class":92},[82,20910,20911,20913,20915,20917],{"class":84,"line":5209},[82,20912,4166],{"class":92},[82,20914,3792],{"class":112},[82,20916,20108],{"class":96},[82,20918,3909],{"class":92},[82,20920,20921,20923],{"class":84,"line":5215},[82,20922,17325],{"class":112},[82,20924,20117],{"class":92},[82,20926,20927,20929,20931,20933,20935],{"class":84,"line":5220},[82,20928,4612],{"class":92},[82,20930,4045],{"class":112},[82,20932,20126],{"class":92},[82,20934,4045],{"class":112},[82,20936,20131],{"class":92},[82,20938,20939],{"class":84,"line":10539},[82,20940,20136],{"class":92},[82,20942,20943,20945,20947],{"class":84,"line":10563},[82,20944,20141],{"class":92},[82,20946,20086],{"class":2384},[82,20948,20146],{"class":92},[82,20950,20951,20953],{"class":84,"line":10568},[82,20952,20151],{"class":2384},[82,20954,20154],{"class":92},[82,20956,20957],{"class":84,"line":10574},[82,20958,1391],{"class":92},[14,20960,20962],{"id":20961},"_82对象的初始化清理","8.2对象的初始化清理",[3755,20964,20965,20968],{},[29,20966,20967],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20969,20970],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[65,20972,20974],{"id":20973},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20976,20977,20978,20981],{},"对象的",[2913,20979,20980],{},"初始化和清理","也是两个非常重要的安全问题",[19,20983,20984],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20986,20987],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20989,20990,20991,20994,20995,20998],{},"c++利用了",[2913,20992,20993],{},"构造函数","和",[2913,20996,20997],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,21000,21001,21002],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2913,21003,21004],{},"我们不提供构造和析构，编译器会提供",[19,21006,21007],{},[2913,21008,21009],{},"编译器提供的构造函数和析构函数是空实现。",[3755,21011,21012,21015],{},[29,21013,21014],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,21016,21017,21018,21021],{},"析构函数：主要作用在于对象",[2913,21019,21020],{},"销毁前","系统自动调用，执行一些清理工作。",[19,21023,21024,21027],{},[2913,21025,21026],{},"构造函数语法：",[32,21028,21029],{},"类名(){}",[26,21031,21032,21035,21038,21041,21044],{},[29,21033,21034],{},"构造函数，没有返回值也不写void",[29,21036,21037],{},"函数名称与类名相同",[29,21039,21040],{},"构造函数可以有参数，因此可以发生重载",[29,21042,21043],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,21045,21046,21047,3187],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[32,21048,21049],{},"Person(){}",[19,21051,21052,16382,21055],{},[2913,21053,21054],{},"析构函数语法：",[32,21056,21057],{},"~类名(){}",[26,21059,21060,21063,21066,21072],{},[29,21061,21062],{},"析构函数，没有返回值也不写void",[29,21064,21065],{},"函数名称与类名相同,在名称前加上符号  ~",[29,21067,21068,21069],{},"析构函数不可以有参数，因此",[2913,21070,21071],{},"不可以发生重载",[29,21073,21074],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[73,21076,21078],{"className":2762,"code":21077,"language":2764,"meta":78,"style":78},"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",[32,21079,21080,21086,21090,21094,21099,21106,21110,21123,21127,21132,21139,21143,21156,21160,21164,21168,21172,21180,21184,21192,21196,21200,21208,21212,21217,21221,21228,21232,21245,21249,21257],{"__ignoreMap":78},[82,21081,21082,21084],{"class":84,"line":85},[82,21083,17281],{"class":112},[82,21085,17757],{"class":2384},[82,21087,21088],{"class":84,"line":157},[82,21089,4161],{"class":92},[82,21091,21092],{"class":84,"line":404},[82,21093,17303],{"class":112},[82,21095,21096],{"class":84,"line":413},[82,21097,21098],{"class":2828},"    \u002F\u002F构造函数\n",[82,21100,21101,21104],{"class":84,"line":508},[82,21102,21103],{"class":2384},"    Person",[82,21105,4576],{"class":92},[82,21107,21108],{"class":84,"line":513},[82,21109,4630],{"class":92},[82,21111,21112,21114,21116,21119,21121],{"class":84,"line":1388},[82,21113,12260],{"class":92},[82,21115,3792],{"class":112},[82,21117,21118],{"class":96}," \"Person的构造函数调用\"",[82,21120,4060],{"class":112},[82,21122,11431],{"class":92},[82,21124,21125],{"class":84,"line":1394},[82,21126,4787],{"class":92},[82,21128,21129],{"class":84,"line":1399},[82,21130,21131],{"class":2828},"    \u002F\u002F析构函数\n",[82,21133,21134,21137],{"class":84,"line":1430},[82,21135,21136],{"class":2384},"    ~Person",[82,21138,4576],{"class":92},[82,21140,21141],{"class":84,"line":1818},[82,21142,4630],{"class":92},[82,21144,21145,21147,21149,21152,21154],{"class":84,"line":2082},[82,21146,12260],{"class":92},[82,21148,3792],{"class":112},[82,21150,21151],{"class":96}," \"Person的析构函数调用\"",[82,21153,4060],{"class":112},[82,21155,11431],{"class":92},[82,21157,21158],{"class":84,"line":2233},[82,21159,4787],{"class":92},[82,21161,21162],{"class":84,"line":2255},[82,21163,486],{"emptyLinePlaceholder":485},[82,21165,21166],{"class":84,"line":2260},[82,21167,6590],{"class":92},[82,21169,21170],{"class":84,"line":2298},[82,21171,486],{"emptyLinePlaceholder":485},[82,21173,21174,21176,21178],{"class":84,"line":2303},[82,21175,7956],{"class":112},[82,21177,8180],{"class":2384},[82,21179,4576],{"class":92},[82,21181,21182],{"class":84,"line":2321},[82,21183,4161],{"class":92},[82,21185,21186,21189],{"class":84,"line":2533},[82,21187,21188],{"class":92},"    Person p;",[82,21190,21191],{"class":2828},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[82,21193,21194],{"class":84,"line":2538},[82,21195,1391],{"class":92},[82,21197,21198],{"class":84,"line":2548},[82,21199,486],{"emptyLinePlaceholder":485},[82,21201,21202,21204,21206],{"class":84,"line":2579},[82,21203,2776],{"class":112},[82,21205,4573],{"class":2384},[82,21207,13443],{"class":92},[82,21209,21210],{"class":84,"line":2585},[82,21211,15799],{"class":92},[82,21213,21214],{"class":84,"line":4350},[82,21215,21216],{"class":2828},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[82,21218,21219],{"class":84,"line":4355},[82,21220,486],{"emptyLinePlaceholder":485},[82,21222,21223,21225],{"class":84,"line":4360},[82,21224,21188],{"class":92},[82,21226,21227],{"class":2828},"\u002F\u002F只有构造函数\n",[82,21229,21230],{"class":84,"line":4365},[82,21231,486],{"emptyLinePlaceholder":485},[82,21233,21234,21236,21238,21240,21242],{"class":84,"line":4379},[82,21235,4903],{"class":2384},[82,21237,93],{"class":92},[82,21239,4908],{"class":96},[82,21241,8558],{"class":92},[82,21243,21244],{"class":2828},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[82,21246,21247],{"class":84,"line":4384},[82,21248,486],{"emptyLinePlaceholder":485},[82,21250,21251,21253,21255],{"class":84,"line":5176},[82,21252,6685],{"class":112},[82,21254,6688],{"class":88},[82,21256,3909],{"class":92},[82,21258,21259],{"class":84,"line":5190},[82,21260,1391],{"class":92},[19,21262,21263],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[65,21265,21267],{"id":21266},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,21269,21270],{},"两种分类方式：",[19,21272,21273],{},"​\t按参数分为： 有参构造和无参构造",[19,21275,21276],{},"​\t按类型分为： 普通构造和拷贝构造",[19,21278,21279],{},"三种调用方式：",[19,21281,21282],{},"​\t括号法",[19,21284,21285],{},"​\t显示法",[19,21287,21288],{},"​\t隐式转换法",[73,21290,21292],{"className":2762,"code":21291,"language":2764,"meta":78,"style":78},"#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",[32,21293,21294,21300,21310,21315,21320,21325,21330,21334,21342,21346,21350,21354,21360,21364,21377,21381,21393,21397,21406,21419,21423,21427,21433,21437,21450,21454,21459,21475,21479,21484,21493,21506,21510,21516,21520,21525,21533,21537,21542,21546,21554,21558,21563,21568,21573,21578,21583,21587,21592,21597,21602,21607,21611,21616,21621,21637,21649,21654,21658,21663,21668,21673,21677,21682,21696,21709,21713,21721,21725,21731,21737,21745],{"__ignoreMap":78},[82,21295,21296,21298],{"class":84,"line":85},[82,21297,4550],{"class":112},[82,21299,4553],{"class":96},[82,21301,21302,21304,21306,21308],{"class":84,"line":157},[82,21303,4558],{"class":112},[82,21305,4561],{"class":112},[82,21307,4564],{"class":2384},[82,21309,3909],{"class":92},[82,21311,21312],{"class":84,"line":404},[82,21313,21314],{"class":2828},"\u002F\u002F1.构造函数的分类及调用\n",[82,21316,21317],{"class":84,"line":413},[82,21318,21319],{"class":2828},"\u002F\u002F分类\n",[82,21321,21322],{"class":84,"line":508},[82,21323,21324],{"class":2828},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[82,21326,21327],{"class":84,"line":513},[82,21328,21329],{"class":2828},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[82,21331,21332],{"class":84,"line":1388},[82,21333,486],{"emptyLinePlaceholder":485},[82,21335,21336,21338,21340],{"class":84,"line":1394},[82,21337,17281],{"class":112},[82,21339,18155],{"class":2384},[82,21341,5273],{"class":92},[82,21343,21344],{"class":84,"line":1399},[82,21345,4161],{"class":92},[82,21347,21348],{"class":84,"line":1430},[82,21349,17303],{"class":112},[82,21351,21352],{"class":84,"line":1818},[82,21353,21098],{"class":2828},[82,21355,21356,21358],{"class":84,"line":2082},[82,21357,21103],{"class":2384},[82,21359,4576],{"class":92},[82,21361,21362],{"class":84,"line":2233},[82,21363,4630],{"class":92},[82,21365,21366,21368,21370,21373,21375],{"class":84,"line":2255},[82,21367,6047],{"class":92},[82,21369,3792],{"class":112},[82,21371,21372],{"class":96},"\"Person构造函数无参构造\"",[82,21374,3792],{"class":112},[82,21376,3814],{"class":92},[82,21378,21379],{"class":84,"line":2260},[82,21380,4787],{"class":92},[82,21382,21383,21385,21387,21389,21391],{"class":84,"line":2298},[82,21384,21103],{"class":2384},[82,21386,93],{"class":92},[82,21388,2776],{"class":112},[82,21390,4014],{"class":108},[82,21392,119],{"class":92},[82,21394,21395],{"class":84,"line":2303},[82,21396,4630],{"class":92},[82,21398,21399,21402,21404],{"class":84,"line":2321},[82,21400,21401],{"class":92},"        age",[82,21403,113],{"class":112},[82,21405,8789],{"class":92},[82,21407,21408,21410,21412,21415,21417],{"class":84,"line":2533},[82,21409,6047],{"class":92},[82,21411,3792],{"class":112},[82,21413,21414],{"class":96},"\"Person构造函数有参构造\"",[82,21416,3792],{"class":112},[82,21418,3814],{"class":92},[82,21420,21421],{"class":84,"line":2538},[82,21422,4787],{"class":92},[82,21424,21425],{"class":84,"line":2548},[82,21426,21131],{"class":2828},[82,21428,21429,21431],{"class":84,"line":2579},[82,21430,21136],{"class":2384},[82,21432,4576],{"class":92},[82,21434,21435],{"class":84,"line":2585},[82,21436,4630],{"class":92},[82,21438,21439,21441,21443,21446,21448],{"class":84,"line":4350},[82,21440,6047],{"class":92},[82,21442,3792],{"class":112},[82,21444,21445],{"class":96},"\"Person析构函数被调用\"",[82,21447,3792],{"class":112},[82,21449,3814],{"class":92},[82,21451,21452],{"class":84,"line":4355},[82,21453,4787],{"class":92},[82,21455,21456],{"class":84,"line":4360},[82,21457,21458],{"class":2828},"    \u002F\u002F拷贝构造函数\n",[82,21460,21461,21463,21465,21467,21469,21471,21473],{"class":84,"line":4365},[82,21462,21103],{"class":2384},[82,21464,93],{"class":92},[82,21466,9384],{"class":112},[82,21468,18155],{"class":2384},[82,21470,13174],{"class":112},[82,21472,19],{"class":108},[82,21474,119],{"class":92},[82,21476,21477],{"class":84,"line":4379},[82,21478,4630],{"class":92},[82,21480,21481],{"class":84,"line":4384},[82,21482,21483],{"class":2828},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[82,21485,21486,21488,21490],{"class":84,"line":5176},[82,21487,21401],{"class":92},[82,21489,113],{"class":112},[82,21491,21492],{"class":92},"p.age;\n",[82,21494,21495,21497,21499,21502,21504],{"class":84,"line":5190},[82,21496,6047],{"class":92},[82,21498,3792],{"class":112},[82,21500,21501],{"class":96},"\"Person拷贝构造函数被调用\"",[82,21503,3792],{"class":112},[82,21505,3814],{"class":92},[82,21507,21508],{"class":84,"line":5198},[82,21509,4787],{"class":92},[82,21511,21512,21514],{"class":84,"line":5203},[82,21513,4585],{"class":112},[82,21515,10388],{"class":92},[82,21517,21518],{"class":84,"line":5209},[82,21519,6590],{"class":92},[82,21521,21522],{"class":84,"line":5215},[82,21523,21524],{"class":2828},"\u002F\u002F调用\n",[82,21526,21527,21529,21531],{"class":84,"line":5220},[82,21528,7956],{"class":112},[82,21530,8180],{"class":2384},[82,21532,4576],{"class":92},[82,21534,21535],{"class":84,"line":10539},[82,21536,4161],{"class":92},[82,21538,21539],{"class":84,"line":10563},[82,21540,21541],{"class":2828},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[82,21543,21544],{"class":84,"line":10568},[82,21545,1391],{"class":92},[82,21547,21548,21550,21552],{"class":84,"line":10574},[82,21549,7956],{"class":112},[82,21551,8249],{"class":2384},[82,21553,4576],{"class":92},[82,21555,21556],{"class":84,"line":10601},[82,21557,4161],{"class":92},[82,21559,21560],{"class":84,"line":10606},[82,21561,21562],{"class":2828},"    \u002F\u002F1.括号法\n",[82,21564,21565],{"class":84,"line":10612},[82,21566,21567],{"class":2828},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[82,21569,21570],{"class":84,"line":10624},[82,21571,21572],{"class":2828},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[82,21574,21575],{"class":84,"line":10636},[82,21576,21577],{"class":2828},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[82,21579,21580],{"class":84,"line":10648},[82,21581,21582],{"class":2828},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[82,21584,21585],{"class":84,"line":12307},[82,21586,486],{"emptyLinePlaceholder":485},[82,21588,21589],{"class":84,"line":12332},[82,21590,21591],{"class":2828},"    \u002F\u002F注意事项\n",[82,21593,21594],{"class":84,"line":12355},[82,21595,21596],{"class":2828},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[82,21598,21599],{"class":84,"line":12379},[82,21600,21601],{"class":2828},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[82,21603,21604],{"class":84,"line":12384},[82,21605,21606],{"class":2828},"    \u002F\u002F Person p4();\n",[82,21608,21609],{"class":84,"line":12389},[82,21610,486],{"emptyLinePlaceholder":485},[82,21612,21613],{"class":84,"line":12394},[82,21614,21615],{"class":2828},"    \u002F\u002F2.显示法\n",[82,21617,21618],{"class":84,"line":12403},[82,21619,21620],{"class":92},"    Person p1;\n",[82,21622,21623,21626,21628,21631,21633,21635],{"class":84,"line":12408},[82,21624,21625],{"class":92},"    Person p2",[82,21627,113],{"class":112},[82,21629,21630],{"class":2384},"Person",[82,21632,93],{"class":92},[82,21634,440],{"class":88},[82,21636,5318],{"class":92},[82,21638,21639,21642,21644,21646],{"class":84,"line":12414},[82,21640,21641],{"class":92},"    Person p3",[82,21643,113],{"class":112},[82,21645,21630],{"class":2384},[82,21647,21648],{"class":92},"(p2);\n",[82,21650,21651],{"class":84,"line":12435},[82,21652,21653],{"class":2828},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[82,21655,21656],{"class":84,"line":12441},[82,21657,486],{"emptyLinePlaceholder":485},[82,21659,21660],{"class":84,"line":12455},[82,21661,21662],{"class":2828},"    \u002F\u002F 注意事项2\n",[82,21664,21665],{"class":84,"line":12461},[82,21666,21667],{"class":2828},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[82,21669,21670],{"class":84,"line":12488},[82,21671,21672],{"class":2828},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[82,21674,21675],{"class":84,"line":12497},[82,21676,486],{"emptyLinePlaceholder":485},[82,21678,21679],{"class":84,"line":12503},[82,21680,21681],{"class":2828},"    \u002F\u002F3.隐士转换法\n",[82,21683,21684,21687,21689,21691,21693],{"class":84,"line":12511},[82,21685,21686],{"class":92},"    Person p4",[82,21688,113],{"class":112},[82,21690,440],{"class":88},[82,21692,2825],{"class":92},[82,21694,21695],{"class":2828},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[82,21697,21698,21701,21703,21706],{"class":84,"line":12516},[82,21699,21700],{"class":92},"    Person p5",[82,21702,113],{"class":112},[82,21704,21705],{"class":92},"p4;",[82,21707,21708],{"class":2828}," \u002F\u002F 这里会调用拷贝构造函数\n",[82,21710,21711],{"class":84,"line":19189},[82,21712,1391],{"class":92},[82,21714,21715,21717,21719],{"class":84,"line":19195},[82,21716,2776],{"class":112},[82,21718,4573],{"class":2384},[82,21720,4576],{"class":92},[82,21722,21723],{"class":84,"line":19218},[82,21724,4161],{"class":92},[82,21726,21727,21729],{"class":84,"line":19224},[82,21728,8225],{"class":2384},[82,21730,8228],{"class":92},[82,21732,21733,21735],{"class":84,"line":19247},[82,21734,8294],{"class":2384},[82,21736,8228],{"class":92},[82,21738,21739,21741,21743],{"class":84,"line":19261},[82,21740,6685],{"class":112},[82,21742,6688],{"class":88},[82,21744,3909],{"class":92},[82,21746,21747],{"class":84,"line":19281},[82,21748,1391],{"class":92},[19,21750,21751,21754],{},[2913,21752,21753],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[65,21756,21758],{"id":21757},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21760,21761],{},"C++中拷贝构造函数调用时机通常有三种情况",[3755,21763,21764,21767,21770],{},[29,21765,21766],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,21768,21769],{},"值传递的方式给函数参数传值",[29,21771,21772],{},"以值方式返回局部对象",[73,21774,21776],{"className":2762,"code":21775,"language":2764,"meta":78,"style":78},"#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",[32,21777,21778,21784,21794,21798,21803,21807,21812,21817,21822,21828,21832,21836,21842,21846,21859,21863,21868,21880,21884,21892,21905,21909,21913,21929,21933,21942,21955,21959,21965,21969,21981,21985,21991,21995,21999,22007,22011,22024,22032,22050,22054,22059,22064,22079,22083,22096,22100,22108,22112,22116,22124,22128,22133,22142,22146,22150,22175,22185,22189,22197,22201,22212,22237,22241,22245,22249,22257,22261,22266,22271,22278,22283,22288,22293,22298,22302,22307,22311,22316,22320,22325,22330,22334,22338,22343,22348,22356],{"__ignoreMap":78},[82,21779,21780,21782],{"class":84,"line":85},[82,21781,4550],{"class":112},[82,21783,4553],{"class":96},[82,21785,21786,21788,21790,21792],{"class":84,"line":157},[82,21787,4558],{"class":112},[82,21789,4561],{"class":112},[82,21791,4564],{"class":2384},[82,21793,3909],{"class":92},[82,21795,21796],{"class":84,"line":404},[82,21797,486],{"emptyLinePlaceholder":485},[82,21799,21800],{"class":84,"line":413},[82,21801,21802],{"class":2828},"\u002F\u002F拷贝构造函数调用时机\n",[82,21804,21805],{"class":84,"line":508},[82,21806,486],{"emptyLinePlaceholder":485},[82,21808,21809],{"class":84,"line":513},[82,21810,21811],{"class":2828},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[82,21813,21814],{"class":84,"line":1388},[82,21815,21816],{"class":2828},"\u002F\u002F2.值传递的方式给函数参数传值\n",[82,21818,21819],{"class":84,"line":1394},[82,21820,21821],{"class":2828},"\u002F\u002F3.以值方式返回局部对象\n",[82,21823,21824,21826],{"class":84,"line":1399},[82,21825,17281],{"class":112},[82,21827,17757],{"class":2384},[82,21829,21830],{"class":84,"line":1430},[82,21831,4161],{"class":92},[82,21833,21834],{"class":84,"line":1818},[82,21835,17303],{"class":112},[82,21837,21838,21840],{"class":84,"line":2082},[82,21839,21103],{"class":2384},[82,21841,4576],{"class":92},[82,21843,21844],{"class":84,"line":2233},[82,21845,4630],{"class":92},[82,21847,21848,21850,21852,21855,21857],{"class":84,"line":2255},[82,21849,12260],{"class":92},[82,21851,3792],{"class":112},[82,21853,21854],{"class":96}," \"Person的默认构造函数调用\"",[82,21856,4060],{"class":112},[82,21858,11431],{"class":92},[82,21860,21861],{"class":84,"line":2260},[82,21862,4787],{"class":92},[82,21864,21865],{"class":84,"line":2298},[82,21866,21867],{"class":2828},"    \u002F\u002F有参构造\n",[82,21869,21870,21872,21874,21876,21878],{"class":84,"line":2303},[82,21871,21103],{"class":2384},[82,21873,93],{"class":92},[82,21875,2776],{"class":112},[82,21877,18274],{"class":108},[82,21879,119],{"class":92},[82,21881,21882],{"class":84,"line":2321},[82,21883,4630],{"class":92},[82,21885,21886,21888,21890],{"class":84,"line":2533},[82,21887,18328],{"class":92},[82,21889,113],{"class":112},[82,21891,10388],{"class":92},[82,21893,21894,21896,21898,21901,21903],{"class":84,"line":2538},[82,21895,12260],{"class":92},[82,21897,3792],{"class":112},[82,21899,21900],{"class":96}," \"Person的有参构造函数调用\"",[82,21902,4060],{"class":112},[82,21904,11431],{"class":92},[82,21906,21907],{"class":84,"line":2548},[82,21908,4787],{"class":92},[82,21910,21911],{"class":84,"line":2579},[82,21912,21458],{"class":2828},[82,21914,21915,21917,21919,21921,21923,21925,21927],{"class":84,"line":2585},[82,21916,21103],{"class":2384},[82,21918,93],{"class":92},[82,21920,9384],{"class":112},[82,21922,18155],{"class":2384},[82,21924,13174],{"class":112},[82,21926,19],{"class":108},[82,21928,119],{"class":92},[82,21930,21931],{"class":84,"line":4350},[82,21932,4630],{"class":92},[82,21934,21935,21937,21939],{"class":84,"line":4355},[82,21936,18328],{"class":92},[82,21938,113],{"class":112},[82,21940,21941],{"class":92}," p.m_Age;\n",[82,21943,21944,21946,21948,21951,21953],{"class":84,"line":4360},[82,21945,12260],{"class":92},[82,21947,3792],{"class":112},[82,21949,21950],{"class":96}," \"Person的拷贝构造函数调用\"",[82,21952,4060],{"class":112},[82,21954,11431],{"class":92},[82,21956,21957],{"class":84,"line":4365},[82,21958,4787],{"class":92},[82,21960,21961,21963],{"class":84,"line":4379},[82,21962,21136],{"class":2384},[82,21964,4576],{"class":92},[82,21966,21967],{"class":84,"line":4384},[82,21968,4630],{"class":92},[82,21970,21971,21973,21975,21977,21979],{"class":84,"line":5176},[82,21972,12260],{"class":92},[82,21974,3792],{"class":112},[82,21976,21151],{"class":96},[82,21978,4060],{"class":112},[82,21980,11431],{"class":92},[82,21982,21983],{"class":84,"line":5190},[82,21984,4787],{"class":92},[82,21986,21987,21989],{"class":84,"line":5198},[82,21988,4585],{"class":112},[82,21990,18251],{"class":92},[82,21992,21993],{"class":84,"line":5203},[82,21994,6590],{"class":92},[82,21996,21997],{"class":84,"line":5209},[82,21998,21811],{"class":2828},[82,22000,22001,22003,22005],{"class":84,"line":5215},[82,22002,7956],{"class":112},[82,22004,8180],{"class":2384},[82,22006,4576],{"class":92},[82,22008,22009],{"class":84,"line":5220},[82,22010,4161],{"class":92},[82,22012,22013,22016,22018,22020,22022],{"class":84,"line":10539},[82,22014,22015],{"class":92},"    Person ",[82,22017,9722],{"class":2384},[82,22019,93],{"class":92},[82,22021,3451],{"class":88},[82,22023,5318],{"class":92},[82,22025,22026,22028,22030],{"class":84,"line":10563},[82,22027,22015],{"class":92},[82,22029,9625],{"class":2384},[82,22031,20099],{"class":92},[82,22033,22034,22036,22038,22041,22043,22046,22048],{"class":84,"line":10568},[82,22035,4166],{"class":92},[82,22037,3792],{"class":112},[82,22039,22040],{"class":96},"\"P2的年龄为：\"",[82,22042,3792],{"class":112},[82,22044,22045],{"class":92},"p2.m_Age",[82,22047,3792],{"class":112},[82,22049,3814],{"class":92},[82,22051,22052],{"class":84,"line":10574},[82,22053,1391],{"class":92},[82,22055,22056],{"class":84,"line":10601},[82,22057,22058],{"class":2828},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[82,22060,22061],{"class":84,"line":10606},[82,22062,22063],{"class":2828},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[82,22065,22066,22068,22071,22073,22075,22077],{"class":84,"line":10612},[82,22067,7956],{"class":112},[82,22069,22070],{"class":2384}," doWork",[82,22072,93],{"class":92},[82,22074,21630],{"class":2384},[82,22076,9417],{"class":108},[82,22078,119],{"class":92},[82,22080,22081],{"class":84,"line":10624},[82,22082,4161],{"class":92},[82,22084,22085,22087,22089,22092,22094],{"class":84,"line":10636},[82,22086,9121],{"class":92},[82,22088,3792],{"class":112},[82,22090,22091],{"class":96}," \"doWork函数调用\"",[82,22093,4060],{"class":112},[82,22095,11431],{"class":92},[82,22097,22098],{"class":84,"line":10648},[82,22099,1391],{"class":92},[82,22101,22102,22104,22106],{"class":84,"line":12307},[82,22103,7956],{"class":112},[82,22105,8249],{"class":2384},[82,22107,4576],{"class":92},[82,22109,22110],{"class":84,"line":12332},[82,22111,4161],{"class":92},[82,22113,22114],{"class":84,"line":12355},[82,22115,17899],{"class":92},[82,22117,22118,22121],{"class":84,"line":12379},[82,22119,22120],{"class":2384},"    doWork",[82,22122,22123],{"class":92},"(p);\n",[82,22125,22126],{"class":84,"line":12384},[82,22127,1391],{"class":92},[82,22129,22130],{"class":84,"line":12389},[82,22131,22132],{"class":2828},"\u002F\u002F 3.以值方式返回局部对象\n",[82,22134,22135,22137,22140],{"class":84,"line":12394},[82,22136,21630],{"class":2384},[82,22138,22139],{"class":2384}," doWork2",[82,22141,4576],{"class":92},[82,22143,22144],{"class":84,"line":12403},[82,22145,4161],{"class":92},[82,22147,22148],{"class":84,"line":12408},[82,22149,21620],{"class":92},[82,22151,22152,22154,22156,22158,22160,22162,22164,22166,22168,22170,22172],{"class":84,"line":12414},[82,22153,4166],{"class":92},[82,22155,3792],{"class":112},[82,22157,93],{"class":92},[82,22159,2776],{"class":112},[82,22161,9110],{"class":112},[82,22163,3187],{"class":92},[82,22165,3111],{"class":112},[82,22167,9722],{"class":92},[82,22169,3792],{"class":112},[82,22171,3857],{"class":92},[82,22173,22174],{"class":2828},"\u002F\u002F打印p1的地址\n",[82,22176,22177,22179,22182],{"class":84,"line":12435},[82,22178,6685],{"class":112},[82,22180,22181],{"class":92}," p1;",[82,22183,22184],{"class":2828},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[82,22186,22187],{"class":84,"line":12441},[82,22188,1391],{"class":92},[82,22190,22191,22193,22195],{"class":84,"line":12455},[82,22192,7956],{"class":112},[82,22194,8321],{"class":2384},[82,22196,4576],{"class":92},[82,22198,22199],{"class":84,"line":12461},[82,22200,4161],{"class":92},[82,22202,22203,22206,22208,22210],{"class":84,"line":12488},[82,22204,22205],{"class":92},"    Person p ",[82,22207,113],{"class":112},[82,22209,22139],{"class":2384},[82,22211,8228],{"class":92},[82,22213,22214,22216,22218,22220,22222,22224,22226,22228,22230,22232,22234],{"class":84,"line":12497},[82,22215,4166],{"class":92},[82,22217,3792],{"class":112},[82,22219,93],{"class":92},[82,22221,2776],{"class":112},[82,22223,9110],{"class":112},[82,22225,3187],{"class":92},[82,22227,3111],{"class":112},[82,22229,19],{"class":92},[82,22231,3792],{"class":112},[82,22233,3857],{"class":92},[82,22235,22236],{"class":2828},"\u002F\u002F打印p的地址\n",[82,22238,22239],{"class":84,"line":12503},[82,22240,1391],{"class":92},[82,22242,22243],{"class":84,"line":12511},[82,22244,486],{"emptyLinePlaceholder":485},[82,22246,22247],{"class":84,"line":12516},[82,22248,486],{"emptyLinePlaceholder":485},[82,22250,22251,22253,22255],{"class":84,"line":19189},[82,22252,2776],{"class":112},[82,22254,4573],{"class":2384},[82,22256,4576],{"class":92},[82,22258,22259],{"class":84,"line":19195},[82,22260,4161],{"class":92},[82,22262,22263],{"class":84,"line":19218},[82,22264,22265],{"class":2828},"    \u002F\u002F test01();\n",[82,22267,22268],{"class":84,"line":19224},[82,22269,22270],{"class":2828},"    \u002F\u002F test02();\n",[82,22272,22273,22276],{"class":84,"line":19247},[82,22274,22275],{"class":2384},"    test03",[82,22277,8228],{"class":92},[82,22279,22280],{"class":84,"line":19261},[82,22281,22282],{"class":2828},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[82,22284,22285],{"class":84,"line":19281},[82,22286,22287],{"class":2828},"\u002F\u002F 输出结果如下：\n",[82,22289,22290],{"class":84,"line":19287},[82,22291,22292],{"class":2828},"\u002F\u002F Person的默认构造函数调用\n",[82,22294,22295],{"class":84,"line":19298},[82,22296,22297],{"class":2828},"\u002F\u002F 0x7fffffffceec\n",[82,22299,22300],{"class":84,"line":19321},[82,22301,22297],{"class":2828},[82,22303,22304],{"class":84,"line":19343},[82,22305,22306],{"class":2828},"\u002F\u002F Person的析构函数调用\n",[82,22308,22309],{"class":84,"line":19348},[82,22310,486],{"emptyLinePlaceholder":485},[82,22312,22313],{"class":84,"line":19354},[82,22314,22315],{"class":2828},"\u002F\u002F 之前的输出结果如下：\n",[82,22317,22318],{"class":84,"line":19368},[82,22319,22292],{"class":2828},[82,22321,22322],{"class":84,"line":19381},[82,22323,22324],{"class":2828},"\u002F\u002F 地址\n",[82,22326,22327],{"class":84,"line":19386},[82,22328,22329],{"class":2828},"\u002F\u002F Person的拷贝构造函数调用\n",[82,22331,22332],{"class":84,"line":19400},[82,22333,22306],{"class":2828},[82,22335,22336],{"class":84,"line":19405},[82,22337,22324],{"class":2828},[82,22339,22340],{"class":84,"line":19411},[82,22341,22342],{"class":2828},"\u002F\u002F (这两次输出的地址也是不同的) \n",[82,22344,22345],{"class":84,"line":19416},[82,22346,22347],{"class":2828},"\u002F\u002F Person的析构函数调用     \n",[82,22349,22350,22352,22354],{"class":84,"line":19430},[82,22351,6685],{"class":112},[82,22353,6688],{"class":88},[82,22355,3909],{"class":92},[82,22357,22358],{"class":84,"line":19435},[82,22359,1391],{"class":92},[19,22361,22362],{},"简化版理解",[73,22364,22366],{"className":2762,"code":22365,"language":2764,"meta":78,"style":78},"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",[32,22367,22368,22376,22380,22386,22399,22410,22414,22426,22439,22447,22451,22467,22480,22489,22493,22498,22504,22517,22521,22525,22532,22536,22540,22545,22553,22557,22573,22586,22599,22603,22608,22616,22620,22624,22629,22634,22650,22658,22665,22671,22675,22679,22684,22692,22696,22700,22723,22730,22734,22738,22746,22750,22760,22782,22786,22790,22794,22802,22806,22811,22816,22822,22826,22836,22840,22848],{"__ignoreMap":78},[82,22369,22370,22372,22374],{"class":84,"line":85},[82,22371,17281],{"class":112},[82,22373,18155],{"class":2384},[82,22375,1349],{"class":92},[82,22377,22378],{"class":84,"line":157},[82,22379,17303],{"class":112},[82,22381,22382,22384],{"class":84,"line":404},[82,22383,21103],{"class":2384},[82,22385,13443],{"class":92},[82,22387,22388,22390,22392,22395,22397],{"class":84,"line":413},[82,22389,12260],{"class":92},[82,22391,3792],{"class":112},[82,22393,22394],{"class":96}," \"无参构造函数!\"",[82,22396,4060],{"class":112},[82,22398,11431],{"class":92},[82,22400,22401,22404,22406,22408],{"class":84,"line":508},[82,22402,22403],{"class":92},"        mAge ",[82,22405,113],{"class":112},[82,22407,6688],{"class":88},[82,22409,3909],{"class":92},[82,22411,22412],{"class":84,"line":513},[82,22413,4787],{"class":92},[82,22415,22416,22418,22420,22422,22424],{"class":84,"line":1388},[82,22417,21103],{"class":2384},[82,22419,93],{"class":92},[82,22421,2776],{"class":112},[82,22423,18274],{"class":108},[82,22425,15031],{"class":92},[82,22427,22428,22430,22432,22435,22437],{"class":84,"line":1394},[82,22429,12260],{"class":92},[82,22431,3792],{"class":112},[82,22433,22434],{"class":96}," \"有参构造函数!\"",[82,22436,4060],{"class":112},[82,22438,11431],{"class":92},[82,22440,22441,22443,22445],{"class":84,"line":1399},[82,22442,22403],{"class":92},[82,22444,113],{"class":112},[82,22446,10388],{"class":92},[82,22448,22449],{"class":84,"line":1430},[82,22450,4787],{"class":92},[82,22452,22453,22455,22457,22459,22461,22463,22465],{"class":84,"line":1818},[82,22454,21103],{"class":2384},[82,22456,93],{"class":92},[82,22458,9384],{"class":112},[82,22460,18155],{"class":2384},[82,22462,3111],{"class":112},[82,22464,9417],{"class":108},[82,22466,15031],{"class":92},[82,22468,22469,22471,22473,22476,22478],{"class":84,"line":2082},[82,22470,12260],{"class":92},[82,22472,3792],{"class":112},[82,22474,22475],{"class":96}," \"拷贝构造函数!\"",[82,22477,4060],{"class":112},[82,22479,11431],{"class":92},[82,22481,22482,22484,22486],{"class":84,"line":2233},[82,22483,22403],{"class":92},[82,22485,113],{"class":112},[82,22487,22488],{"class":92}," p.mAge;\n",[82,22490,22491],{"class":84,"line":2255},[82,22492,4787],{"class":92},[82,22494,22495],{"class":84,"line":2260},[82,22496,22497],{"class":2828},"    \u002F\u002F析构函数在释放内存之前调用\n",[82,22499,22500,22502],{"class":84,"line":2298},[82,22501,21136],{"class":2384},[82,22503,13443],{"class":92},[82,22505,22506,22508,22510,22513,22515],{"class":84,"line":2303},[82,22507,12260],{"class":92},[82,22509,3792],{"class":112},[82,22511,22512],{"class":96}," \"析构函数!\"",[82,22514,4060],{"class":112},[82,22516,11431],{"class":92},[82,22518,22519],{"class":84,"line":2321},[82,22520,4787],{"class":92},[82,22522,22523],{"class":84,"line":2533},[82,22524,17303],{"class":112},[82,22526,22527,22529],{"class":84,"line":2538},[82,22528,4585],{"class":112},[82,22530,22531],{"class":92}," mAge;\n",[82,22533,22534],{"class":84,"line":2548},[82,22535,6590],{"class":92},[82,22537,22538],{"class":84,"line":2579},[82,22539,486],{"emptyLinePlaceholder":485},[82,22541,22542],{"class":84,"line":2585},[82,22543,22544],{"class":2828},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[82,22546,22547,22549,22551],{"class":84,"line":4350},[82,22548,7956],{"class":112},[82,22550,8180],{"class":2384},[82,22552,13443],{"class":92},[82,22554,22555],{"class":84,"line":4355},[82,22556,486],{"emptyLinePlaceholder":485},[82,22558,22559,22561,22564,22566,22568,22570],{"class":84,"line":4360},[82,22560,22015],{"class":92},[82,22562,22563],{"class":2384},"man",[82,22565,93],{"class":92},[82,22567,3069],{"class":88},[82,22569,8558],{"class":92},[82,22571,22572],{"class":2828}," \u002F\u002Fp对象已经创建完毕\n",[82,22574,22575,22577,22580,22583],{"class":84,"line":4365},[82,22576,22015],{"class":92},[82,22578,22579],{"class":2384},"newman",[82,22581,22582],{"class":92},"(man);",[82,22584,22585],{"class":2828}," \u002F\u002F调用拷贝构造函数\n",[82,22587,22588,22591,22593,22596],{"class":84,"line":4379},[82,22589,22590],{"class":92},"    Person newman2 ",[82,22592,113],{"class":112},[82,22594,22595],{"class":92}," man;",[82,22597,22598],{"class":2828}," \u002F\u002F拷贝构造\n",[82,22600,22601],{"class":84,"line":4384},[82,22602,486],{"emptyLinePlaceholder":485},[82,22604,22605],{"class":84,"line":5176},[82,22606,22607],{"class":2828},"    \u002F\u002FPerson newman3;\n",[82,22609,22610,22613],{"class":84,"line":5190},[82,22611,22612],{"class":2828},"    \u002F\u002Fnewman3 = man;",[82,22614,22615],{"class":2828}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[82,22617,22618],{"class":84,"line":5198},[82,22619,1391],{"class":92},[82,22621,22622],{"class":84,"line":5203},[82,22623,486],{"emptyLinePlaceholder":485},[82,22625,22626],{"class":84,"line":5209},[82,22627,22628],{"class":2828},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[82,22630,22631],{"class":84,"line":5215},[82,22632,22633],{"class":2828},"\u002F\u002F相当于Person p1 = p;\n",[82,22635,22636,22638,22640,22642,22644,22647],{"class":84,"line":5220},[82,22637,7956],{"class":112},[82,22639,22070],{"class":2384},[82,22641,93],{"class":92},[82,22643,21630],{"class":2384},[82,22645,22646],{"class":108}," p1",[82,22648,22649],{"class":92},") {}\n",[82,22651,22652,22654,22656],{"class":84,"line":10539},[82,22653,7956],{"class":112},[82,22655,8249],{"class":2384},[82,22657,13443],{"class":92},[82,22659,22660,22662],{"class":84,"line":10563},[82,22661,21188],{"class":92},[82,22663,22664],{"class":2828}," \u002F\u002F无参构造函数\n",[82,22666,22667,22669],{"class":84,"line":10568},[82,22668,22120],{"class":2384},[82,22670,22123],{"class":92},[82,22672,22673],{"class":84,"line":10574},[82,22674,1391],{"class":92},[82,22676,22677],{"class":84,"line":10601},[82,22678,486],{"emptyLinePlaceholder":485},[82,22680,22681],{"class":84,"line":10606},[82,22682,22683],{"class":2828},"\u002F\u002F3. 以值方式返回局部对象\n",[82,22685,22686,22688,22690],{"class":84,"line":10612},[82,22687,21630],{"class":2384},[82,22689,22139],{"class":2384},[82,22691,4576],{"class":92},[82,22693,22694],{"class":84,"line":10624},[82,22695,4161],{"class":92},[82,22697,22698],{"class":84,"line":10636},[82,22699,21620],{"class":92},[82,22701,22702,22704,22706,22708,22710,22712,22714,22716,22719,22721],{"class":84,"line":10648},[82,22703,9121],{"class":92},[82,22705,3792],{"class":112},[82,22707,4265],{"class":92},[82,22709,2776],{"class":112},[82,22711,9110],{"class":112},[82,22713,3187],{"class":92},[82,22715,3111],{"class":112},[82,22717,22718],{"class":92},"p1 ",[82,22720,3792],{"class":112},[82,22722,11431],{"class":92},[82,22724,22725,22727],{"class":84,"line":12307},[82,22726,6685],{"class":112},[82,22728,22729],{"class":92}," p1;\n",[82,22731,22732],{"class":84,"line":12332},[82,22733,1391],{"class":92},[82,22735,22736],{"class":84,"line":12355},[82,22737,486],{"emptyLinePlaceholder":485},[82,22739,22740,22742,22744],{"class":84,"line":12379},[82,22741,7956],{"class":112},[82,22743,8321],{"class":2384},[82,22745,4576],{"class":92},[82,22747,22748],{"class":84,"line":12384},[82,22749,4161],{"class":92},[82,22751,22752,22754,22756,22758],{"class":84,"line":12389},[82,22753,22205],{"class":92},[82,22755,113],{"class":112},[82,22757,22139],{"class":2384},[82,22759,8228],{"class":92},[82,22761,22762,22764,22766,22768,22770,22772,22774,22776,22778,22780],{"class":84,"line":12394},[82,22763,9121],{"class":92},[82,22765,3792],{"class":112},[82,22767,4265],{"class":92},[82,22769,2776],{"class":112},[82,22771,9110],{"class":112},[82,22773,3187],{"class":92},[82,22775,3111],{"class":112},[82,22777,14038],{"class":92},[82,22779,3792],{"class":112},[82,22781,11431],{"class":92},[82,22783,22784],{"class":84,"line":12403},[82,22785,1391],{"class":92},[82,22787,22788],{"class":84,"line":12408},[82,22789,486],{"emptyLinePlaceholder":485},[82,22791,22792],{"class":84,"line":12414},[82,22793,486],{"emptyLinePlaceholder":485},[82,22795,22796,22798,22800],{"class":84,"line":12435},[82,22797,2776],{"class":112},[82,22799,4573],{"class":2384},[82,22801,13443],{"class":92},[82,22803,22804],{"class":84,"line":12441},[82,22805,486],{"emptyLinePlaceholder":485},[82,22807,22808],{"class":84,"line":12455},[82,22809,22810],{"class":2828},"    \u002F\u002Ftest01();\n",[82,22812,22813],{"class":84,"line":12461},[82,22814,22815],{"class":2828},"    \u002F\u002Ftest02();\n",[82,22817,22818,22820],{"class":84,"line":12488},[82,22819,22275],{"class":2384},[82,22821,8228],{"class":92},[82,22823,22824],{"class":84,"line":12497},[82,22825,486],{"emptyLinePlaceholder":485},[82,22827,22828,22830,22832,22834],{"class":84,"line":12503},[82,22829,4903],{"class":2384},[82,22831,93],{"class":92},[82,22833,4908],{"class":96},[82,22835,5318],{"class":92},[82,22837,22838],{"class":84,"line":12511},[82,22839,486],{"emptyLinePlaceholder":485},[82,22841,22842,22844,22846],{"class":84,"line":12516},[82,22843,6685],{"class":112},[82,22845,6688],{"class":88},[82,22847,3909],{"class":92},[82,22849,22850],{"class":84,"line":19189},[82,22851,1391],{"class":92},[65,22853,22855],{"id":22854},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22857,22858],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22860,22861],{},"1．默认构造函数(无参，函数体为空)",[19,22863,22864],{},"2．默认析构函数(无参，函数体为空)",[19,22866,22867],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22869,22870],{},"构造函数调用规则如下：",[3755,22872,22873,22876],{},[29,22874,22875],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22877,22878],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[73,22880,22882],{"className":2762,"code":22881,"language":2764,"meta":78,"style":78},"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",[32,22883,22884,22892,22896,22901,22907,22919,22923,22928,22940,22949,22961,22965,22969,22985,22994,23006,23010,23014,23020,23032,23036,23040,23046,23050,23054,23062,23066,23078,23083,23091,23095,23113,23117,23121,23129,23133,23138,23146,23161,23174,23178,23183,23190,23206,23219,23223,23227,23235,23239,23245,23249,23259,23263,23271],{"__ignoreMap":78},[82,22885,22886,22888,22890],{"class":84,"line":85},[82,22887,17281],{"class":112},[82,22889,18155],{"class":2384},[82,22891,1349],{"class":92},[82,22893,22894],{"class":84,"line":157},[82,22895,17303],{"class":112},[82,22897,22898],{"class":84,"line":404},[82,22899,22900],{"class":2828},"    \u002F\u002F无参（默认）构造函数\n",[82,22902,22903,22905],{"class":84,"line":413},[82,22904,21103],{"class":2384},[82,22906,13443],{"class":92},[82,22908,22909,22911,22913,22915,22917],{"class":84,"line":508},[82,22910,12260],{"class":92},[82,22912,3792],{"class":112},[82,22914,22394],{"class":96},[82,22916,4060],{"class":112},[82,22918,11431],{"class":92},[82,22920,22921],{"class":84,"line":513},[82,22922,4787],{"class":92},[82,22924,22925],{"class":84,"line":1388},[82,22926,22927],{"class":2828},"    \u002F\u002F有参构造函数\n",[82,22929,22930,22932,22934,22936,22938],{"class":84,"line":1394},[82,22931,21103],{"class":2384},[82,22933,93],{"class":92},[82,22935,2776],{"class":112},[82,22937,4014],{"class":108},[82,22939,15031],{"class":92},[82,22941,22942,22945,22947],{"class":84,"line":1399},[82,22943,22944],{"class":92},"        age ",[82,22946,113],{"class":112},[82,22948,4048],{"class":92},[82,22950,22951,22953,22955,22957,22959],{"class":84,"line":1430},[82,22952,12260],{"class":92},[82,22954,3792],{"class":112},[82,22956,22434],{"class":96},[82,22958,4060],{"class":112},[82,22960,11431],{"class":92},[82,22962,22963],{"class":84,"line":1818},[82,22964,4787],{"class":92},[82,22966,22967],{"class":84,"line":2082},[82,22968,21458],{"class":2828},[82,22970,22971,22973,22975,22977,22979,22981,22983],{"class":84,"line":2233},[82,22972,21103],{"class":2384},[82,22974,93],{"class":92},[82,22976,9384],{"class":112},[82,22978,18155],{"class":2384},[82,22980,3111],{"class":112},[82,22982,9417],{"class":108},[82,22984,15031],{"class":92},[82,22986,22987,22989,22991],{"class":84,"line":2255},[82,22988,22944],{"class":92},[82,22990,113],{"class":112},[82,22992,22993],{"class":92}," p.age;\n",[82,22995,22996,22998,23000,23002,23004],{"class":84,"line":2260},[82,22997,12260],{"class":92},[82,22999,3792],{"class":112},[82,23001,22475],{"class":96},[82,23003,4060],{"class":112},[82,23005,11431],{"class":92},[82,23007,23008],{"class":84,"line":2298},[82,23009,4787],{"class":92},[82,23011,23012],{"class":84,"line":2303},[82,23013,21131],{"class":2828},[82,23015,23016,23018],{"class":84,"line":2321},[82,23017,21136],{"class":2384},[82,23019,13443],{"class":92},[82,23021,23022,23024,23026,23028,23030],{"class":84,"line":2533},[82,23023,12260],{"class":92},[82,23025,3792],{"class":112},[82,23027,22512],{"class":96},[82,23029,4060],{"class":112},[82,23031,11431],{"class":92},[82,23033,23034],{"class":84,"line":2538},[82,23035,4787],{"class":92},[82,23037,23038],{"class":84,"line":2548},[82,23039,17303],{"class":112},[82,23041,23042,23044],{"class":84,"line":2579},[82,23043,4585],{"class":112},[82,23045,10388],{"class":92},[82,23047,23048],{"class":84,"line":2585},[82,23049,6590],{"class":92},[82,23051,23052],{"class":84,"line":4350},[82,23053,486],{"emptyLinePlaceholder":485},[82,23055,23056,23058,23060],{"class":84,"line":4355},[82,23057,7956],{"class":112},[82,23059,8180],{"class":2384},[82,23061,4576],{"class":92},[82,23063,23064],{"class":84,"line":4360},[82,23065,4161],{"class":92},[82,23067,23068,23070,23072,23074,23076],{"class":84,"line":4365},[82,23069,22015],{"class":92},[82,23071,9722],{"class":2384},[82,23073,93],{"class":92},[82,23075,1373],{"class":88},[82,23077,5318],{"class":92},[82,23079,23080],{"class":84,"line":4379},[82,23081,23082],{"class":2828},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[82,23084,23085,23087,23089],{"class":84,"line":4384},[82,23086,22015],{"class":92},[82,23088,9625],{"class":2384},[82,23090,20099],{"class":92},[82,23092,23093],{"class":84,"line":5176},[82,23094,486],{"emptyLinePlaceholder":485},[82,23096,23097,23099,23101,23104,23106,23109,23111],{"class":84,"line":5190},[82,23098,9121],{"class":92},[82,23100,3792],{"class":112},[82,23102,23103],{"class":96}," \"p2的年龄为： \"",[82,23105,4060],{"class":112},[82,23107,23108],{"class":92}," p2.age ",[82,23110,3792],{"class":112},[82,23112,11431],{"class":92},[82,23114,23115],{"class":84,"line":5198},[82,23116,1391],{"class":92},[82,23118,23119],{"class":84,"line":5203},[82,23120,486],{"emptyLinePlaceholder":485},[82,23122,23123,23125,23127],{"class":84,"line":5209},[82,23124,7956],{"class":112},[82,23126,8249],{"class":2384},[82,23128,4576],{"class":92},[82,23130,23131],{"class":84,"line":5215},[82,23132,4161],{"class":92},[82,23134,23135],{"class":84,"line":5220},[82,23136,23137],{"class":2828},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[82,23139,23140,23143],{"class":84,"line":10539},[82,23141,23142],{"class":92},"    Person p1;",[82,23144,23145],{"class":2828}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[82,23147,23148,23150,23152,23154,23156,23158],{"class":84,"line":10563},[82,23149,22015],{"class":92},[82,23151,9625],{"class":2384},[82,23153,93],{"class":92},[82,23155,440],{"class":88},[82,23157,8558],{"class":92},[82,23159,23160],{"class":2828}," \u002F\u002F用户提供的有参\n",[82,23162,23163,23165,23168,23171],{"class":84,"line":10568},[82,23164,22015],{"class":92},[82,23166,23167],{"class":2384},"p3",[82,23169,23170],{"class":92},"(p2);",[82,23172,23173],{"class":2828}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[82,23175,23176],{"class":84,"line":10574},[82,23177,486],{"emptyLinePlaceholder":485},[82,23179,23180],{"class":84,"line":10601},[82,23181,23182],{"class":2828},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[82,23184,23185,23188],{"class":84,"line":10606},[82,23186,23187],{"class":92},"    Person p4;",[82,23189,23145],{"class":2828},[82,23191,23192,23194,23197,23199,23201,23203],{"class":84,"line":10612},[82,23193,22015],{"class":92},[82,23195,23196],{"class":2384},"p5",[82,23198,93],{"class":92},[82,23200,440],{"class":88},[82,23202,8558],{"class":92},[82,23204,23205],{"class":2828}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[82,23207,23208,23210,23213,23216],{"class":84,"line":10624},[82,23209,22015],{"class":92},[82,23211,23212],{"class":2384},"p6",[82,23214,23215],{"class":92},"(p5);",[82,23217,23218],{"class":2828}," \u002F\u002F用户自己提供拷贝构造\n",[82,23220,23221],{"class":84,"line":10636},[82,23222,1391],{"class":92},[82,23224,23225],{"class":84,"line":10648},[82,23226,486],{"emptyLinePlaceholder":485},[82,23228,23229,23231,23233],{"class":84,"line":12307},[82,23230,2776],{"class":112},[82,23232,4573],{"class":2384},[82,23234,13443],{"class":92},[82,23236,23237],{"class":84,"line":12332},[82,23238,486],{"emptyLinePlaceholder":485},[82,23240,23241,23243],{"class":84,"line":12355},[82,23242,8225],{"class":2384},[82,23244,8228],{"class":92},[82,23246,23247],{"class":84,"line":12379},[82,23248,486],{"emptyLinePlaceholder":485},[82,23250,23251,23253,23255,23257],{"class":84,"line":12384},[82,23252,4903],{"class":2384},[82,23254,93],{"class":92},[82,23256,4908],{"class":96},[82,23258,5318],{"class":92},[82,23260,23261],{"class":84,"line":12389},[82,23262,486],{"emptyLinePlaceholder":485},[82,23264,23265,23267,23269],{"class":84,"line":12394},[82,23266,6685],{"class":112},[82,23268,6688],{"class":88},[82,23270,3909],{"class":92},[82,23272,23273],{"class":84,"line":12403},[82,23274,1391],{"class":92},[65,23276,23278],{"id":23277},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,23280,23281],{},"浅拷贝：简单的赋值拷贝操作",[19,23283,23284],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[73,23286,23288],{"className":2762,"code":23287,"language":2764,"meta":78,"style":78},"#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",[32,23289,23290,23296,23306,23312,23316,23320,23325,23331,23335,23348,23352,23356,23363,23367,23377,23392,23405,23409,23414,23419,23435,23439,23452,23457,23462,23467,23476,23481,23496,23500,23504,23508,23514,23518,23523,23538,23542,23553,23567,23571,23580,23584,23590,23602,23606,23614,23618,23635,23666,23674,23702,23706,23710,23718,23722,23728],{"__ignoreMap":78},[82,23291,23292,23294],{"class":84,"line":85},[82,23293,4550],{"class":112},[82,23295,4553],{"class":96},[82,23297,23298,23300,23302,23304],{"class":84,"line":157},[82,23299,4558],{"class":112},[82,23301,4561],{"class":112},[82,23303,4564],{"class":2384},[82,23305,3909],{"class":92},[82,23307,23308,23310],{"class":84,"line":404},[82,23309,17281],{"class":112},[82,23311,17757],{"class":2384},[82,23313,23314],{"class":84,"line":413},[82,23315,4161],{"class":92},[82,23317,23318],{"class":84,"line":508},[82,23319,17303],{"class":112},[82,23321,23322],{"class":84,"line":513},[82,23323,23324],{"class":2828},"    \u002F\u002F默认构造函数\n",[82,23326,23327,23329],{"class":84,"line":1388},[82,23328,21103],{"class":2384},[82,23330,4576],{"class":92},[82,23332,23333],{"class":84,"line":1394},[82,23334,4630],{"class":92},[82,23336,23337,23339,23341,23344,23346],{"class":84,"line":1399},[82,23338,6047],{"class":92},[82,23340,3792],{"class":112},[82,23342,23343],{"class":96},"\"默认构造函数\"",[82,23345,3792],{"class":112},[82,23347,3814],{"class":92},[82,23349,23350],{"class":84,"line":1430},[82,23351,4787],{"class":92},[82,23353,23354],{"class":84,"line":1818},[82,23355,22927],{"class":2828},[82,23357,23358,23360],{"class":84,"line":2082},[82,23359,21136],{"class":2384},[82,23361,23362],{"class":92},"(int age,int height)\n",[82,23364,23365],{"class":84,"line":2233},[82,23366,4630],{"class":92},[82,23368,23369,23372,23374],{"class":84,"line":2255},[82,23370,23371],{"class":92},"        m_Age",[82,23373,113],{"class":112},[82,23375,23376],{"class":92},"age;\n",[82,23378,23379,23382,23384,23386,23389],{"class":84,"line":2260},[82,23380,23381],{"class":92},"        m_Height",[82,23383,14307],{"class":112},[82,23385,4982],{"class":112},[82,23387,23388],{"class":92},"(height);",[82,23390,23391],{"class":2828},"\u002F\u002F放到堆区\n",[82,23393,23394,23396,23398,23401,23403],{"class":84,"line":2298},[82,23395,6047],{"class":92},[82,23397,3792],{"class":112},[82,23399,23400],{"class":96},"\"有参构造函数\"",[82,23402,3792],{"class":112},[82,23404,3814],{"class":92},[82,23406,23407],{"class":84,"line":2303},[82,23408,4787],{"class":92},[82,23410,23411],{"class":84,"line":2321},[82,23412,23413],{"class":2828},"    \u002F\u002F深拷贝解决上述问题\n",[82,23415,23416],{"class":84,"line":2533},[82,23417,23418],{"class":2828},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[82,23420,23421,23423,23425,23427,23429,23431,23433],{"class":84,"line":2538},[82,23422,21103],{"class":2384},[82,23424,93],{"class":92},[82,23426,9384],{"class":112},[82,23428,18155],{"class":2384},[82,23430,13174],{"class":112},[82,23432,19],{"class":108},[82,23434,119],{"class":92},[82,23436,23437],{"class":84,"line":2548},[82,23438,4630],{"class":92},[82,23440,23441,23443,23445,23448,23450],{"class":84,"line":2579},[82,23442,6047],{"class":92},[82,23444,3792],{"class":112},[82,23446,23447],{"class":96},"\"拷贝构造函数\"",[82,23449,3792],{"class":112},[82,23451,3814],{"class":92},[82,23453,23454],{"class":84,"line":2585},[82,23455,23456],{"class":2828},"        \u002F\u002F编译器默认的写如下注释部分\n",[82,23458,23459],{"class":84,"line":4350},[82,23460,23461],{"class":2828},"        \u002F\u002Fm_Age=p.m_Age;\n",[82,23463,23464],{"class":84,"line":4355},[82,23465,23466],{"class":2828},"        \u002F\u002Fm_Height=p.m_Height;\n",[82,23468,23469,23471,23473],{"class":84,"line":4360},[82,23470,23371],{"class":92},[82,23472,113],{"class":112},[82,23474,23475],{"class":92},"p.m_Age;\n",[82,23477,23478],{"class":84,"line":4365},[82,23479,23480],{"class":2828},"        \u002F\u002F深拷贝操作\n",[82,23482,23483,23485,23487,23489,23491,23493],{"class":84,"line":4379},[82,23484,23381],{"class":92},[82,23486,14307],{"class":112},[82,23488,4982],{"class":112},[82,23490,93],{"class":92},[82,23492,3212],{"class":112},[82,23494,23495],{"class":92},"p.m_Height);\n",[82,23497,23498],{"class":84,"line":4384},[82,23499,4787],{"class":92},[82,23501,23502],{"class":84,"line":5176},[82,23503,486],{"emptyLinePlaceholder":485},[82,23505,23506],{"class":84,"line":5190},[82,23507,21131],{"class":2828},[82,23509,23510,23512],{"class":84,"line":5198},[82,23511,21136],{"class":2384},[82,23513,4576],{"class":92},[82,23515,23516],{"class":84,"line":5203},[82,23517,4630],{"class":92},[82,23519,23520],{"class":84,"line":5209},[82,23521,23522],{"class":2828},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[82,23524,23525,23527,23530,23533,23536],{"class":84,"line":5215},[82,23526,5096],{"class":112},[82,23528,23529],{"class":92},"(m_Height ",[82,23531,23532],{"class":112},"!=",[82,23534,23535],{"class":88}," NULL",[82,23537,119],{"class":92},[82,23539,23540],{"class":84,"line":5220},[82,23541,5109],{"class":92},[82,23543,23544,23547,23550],{"class":84,"line":10539},[82,23545,23546],{"class":112},"            delete",[82,23548,23549],{"class":92}," m_Height;",[82,23551,23552],{"class":2828}," \u002F\u002F释放堆区内存\n",[82,23554,23555,23558,23560,23562,23564],{"class":84,"line":10563},[82,23556,23557],{"class":92},"            m_Height",[82,23559,113],{"class":112},[82,23561,4992],{"class":88},[82,23563,2825],{"class":92},[82,23565,23566],{"class":2828}," \u002F\u002F防止野指针\n",[82,23568,23569],{"class":84,"line":10568},[82,23570,5128],{"class":92},[82,23572,23573,23575,23577],{"class":84,"line":10574},[82,23574,6047],{"class":92},[82,23576,3792],{"class":112},[82,23578,23579],{"class":96},"\"Person的析构函数调用\"\n",[82,23581,23582],{"class":84,"line":10601},[82,23583,4787],{"class":92},[82,23585,23586,23588],{"class":84,"line":10606},[82,23587,4585],{"class":112},[82,23589,18251],{"class":92},[82,23591,23592,23594,23596,23599],{"class":84,"line":10612},[82,23593,4585],{"class":112},[82,23595,9110],{"class":112},[82,23597,23598],{"class":92},"m_Height;",[82,23600,23601],{"class":2828}," \u002F\u002F定义一个指针，指向身高\n",[82,23603,23604],{"class":84,"line":10624},[82,23605,6590],{"class":92},[82,23607,23608,23610,23612],{"class":84,"line":10636},[82,23609,7956],{"class":112},[82,23611,8180],{"class":2384},[82,23613,4576],{"class":92},[82,23615,23616],{"class":84,"line":10648},[82,23617,4161],{"class":92},[82,23619,23620,23622,23624,23626,23628,23630,23633],{"class":84,"line":12307},[82,23621,22015],{"class":92},[82,23623,9722],{"class":2384},[82,23625,93],{"class":92},[82,23627,1373],{"class":88},[82,23629,3136],{"class":92},[82,23631,23632],{"class":88},"160",[82,23634,5318],{"class":92},[82,23636,23637,23639,23641,23644,23646,23649,23651,23654,23656,23659,23661,23663],{"class":84,"line":12332},[82,23638,4166],{"class":92},[82,23640,3792],{"class":112},[82,23642,23643],{"class":96},"\"p1的年龄为:\"",[82,23645,3792],{"class":112},[82,23647,23648],{"class":92},"p1.m_Age",[82,23650,3792],{"class":112},[82,23652,23653],{"class":96},"\"身高为：\"",[82,23655,9011],{"class":112},[82,23657,23658],{"class":92},"p1.m_Height",[82,23660,3792],{"class":112},[82,23662,3857],{"class":92},[82,23664,23665],{"class":2828},"  \u002F\u002F18\n",[82,23667,23668,23670,23672],{"class":84,"line":12355},[82,23669,22015],{"class":92},[82,23671,9625],{"class":2384},[82,23673,20099],{"class":92},[82,23675,23676,23678,23680,23683,23685,23687,23689,23691,23693,23696,23698,23700],{"class":84,"line":12379},[82,23677,4166],{"class":92},[82,23679,3792],{"class":112},[82,23681,23682],{"class":96},"\"p2的年龄为：\"",[82,23684,3792],{"class":112},[82,23686,22045],{"class":92},[82,23688,3792],{"class":112},[82,23690,23653],{"class":96},[82,23692,9011],{"class":112},[82,23694,23695],{"class":92},"p2.m_Height",[82,23697,3792],{"class":112},[82,23699,3857],{"class":92},[82,23701,23665],{"class":2828},[82,23703,23704],{"class":84,"line":12384},[82,23705,15799],{"class":92},[82,23707,23708],{"class":84,"line":12389},[82,23709,1391],{"class":92},[82,23711,23712,23714,23716],{"class":84,"line":12394},[82,23713,2776],{"class":112},[82,23715,4573],{"class":2384},[82,23717,4576],{"class":92},[82,23719,23720],{"class":84,"line":12403},[82,23721,4161],{"class":92},[82,23723,23724,23726],{"class":84,"line":12408},[82,23725,8225],{"class":2384},[82,23727,8228],{"class":92},[82,23729,23730],{"class":84,"line":12414},[82,23731,1391],{"class":92},[19,23733,23734],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23736,23737],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23739,23740],{},[4078,23741],{"alt":78,"src":23742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23744,23745],{},"浅拷贝问题要使用深拷贝来解决",[19,23747,23748],{},[4078,23749],{"alt":78,"src":23750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23752,23753],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[65,23755,23757],{"id":23756},"_826初始化列表","8.2.6初始化列表",[19,23759,23760],{},"作用：初始化属性",[19,23762,246],{},[73,23764,23767],{"className":23765,"code":23766,"language":7780},[7778],"构造函数():属性1(值1),属性2(值2).....{}\n",[32,23768,23766],{"__ignoreMap":78},[19,23770,23771],{},"例子",[73,23773,23775],{"className":2762,"code":23774,"language":2764,"meta":78,"style":78},"#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",[32,23776,23777,23783,23793,23799,23803,23808,23812,23817,23822,23827,23832,23837,23842,23846,23851,23856,23899,23908,23926,23944,23962,23966,23970,23977,23984,23991,23995,23999,24007,24011,24015,24035,24044,24048,24052,24062,24066,24074],{"__ignoreMap":78},[82,23778,23779,23781],{"class":84,"line":85},[82,23780,4550],{"class":112},[82,23782,4553],{"class":96},[82,23784,23785,23787,23789,23791],{"class":84,"line":157},[82,23786,4558],{"class":112},[82,23788,4561],{"class":112},[82,23790,4564],{"class":2384},[82,23792,3909],{"class":92},[82,23794,23795,23797],{"class":84,"line":404},[82,23796,17281],{"class":112},[82,23798,17757],{"class":2384},[82,23800,23801],{"class":84,"line":413},[82,23802,4161],{"class":92},[82,23804,23805],{"class":84,"line":508},[82,23806,23807],{"class":112},"    public:\n",[82,23809,23810],{"class":84,"line":513},[82,23811,486],{"emptyLinePlaceholder":485},[82,23813,23814],{"class":84,"line":1388},[82,23815,23816],{"class":2828},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[82,23818,23819],{"class":84,"line":1394},[82,23820,23821],{"class":2828},"    \u002F\u002FPerson(int a, int b, int c) {\n",[82,23823,23824],{"class":84,"line":1399},[82,23825,23826],{"class":2828},"    \u002F\u002F  m_A = a;\n",[82,23828,23829],{"class":84,"line":1430},[82,23830,23831],{"class":2828},"    \u002F\u002F  m_B = b;\n",[82,23833,23834],{"class":84,"line":1818},[82,23835,23836],{"class":2828},"    \u002F\u002F  m_C = c;\n",[82,23838,23839],{"class":84,"line":2082},[82,23840,23841],{"class":2828},"    \u002F\u002F}\n",[82,23843,23844],{"class":84,"line":2233},[82,23845,486],{"emptyLinePlaceholder":485},[82,23847,23848],{"class":84,"line":2255},[82,23849,23850],{"class":2828},"    \u002F\u002F初始化列表方式初始化\n",[82,23852,23853],{"class":84,"line":2260},[82,23854,23855],{"class":2828},"    \u002F\u002F使用有参构造函数\n",[82,23857,23858,23860,23862,23864,23866,23868,23870,23872,23874,23876,23878,23881,23884,23887,23890,23893,23896],{"class":84,"line":2298},[82,23859,21103],{"class":2384},[82,23861,93],{"class":92},[82,23863,2776],{"class":112},[82,23865,4014],{"class":108},[82,23867,100],{"class":92},[82,23869,2776],{"class":112},[82,23871,5432],{"class":108},[82,23873,100],{"class":92},[82,23875,2776],{"class":112},[82,23877,5448],{"class":108},[82,23879,23880],{"class":92},") :",[82,23882,23883],{"class":2384},"m_A",[82,23885,23886],{"class":92},"(a), ",[82,23888,23889],{"class":2384},"m_B",[82,23891,23892],{"class":92},"(b), ",[82,23894,23895],{"class":2384},"m_C",[82,23897,23898],{"class":92},"(c) {}\n",[82,23900,23901,23903,23906],{"class":84,"line":2303},[82,23902,17495],{"class":112},[82,23904,23905],{"class":2384}," PrintPerson",[82,23907,13443],{"class":92},[82,23909,23910,23912,23914,23917,23919,23922,23924],{"class":84,"line":2321},[82,23911,12260],{"class":92},[82,23913,3792],{"class":112},[82,23915,23916],{"class":96}," \"mA:\"",[82,23918,4060],{"class":112},[82,23920,23921],{"class":92}," m_A ",[82,23923,3792],{"class":112},[82,23925,11431],{"class":92},[82,23927,23928,23930,23932,23935,23937,23940,23942],{"class":84,"line":2533},[82,23929,12260],{"class":92},[82,23931,3792],{"class":112},[82,23933,23934],{"class":96}," \"mB:\"",[82,23936,4060],{"class":112},[82,23938,23939],{"class":92}," m_B ",[82,23941,3792],{"class":112},[82,23943,11431],{"class":92},[82,23945,23946,23948,23950,23953,23955,23958,23960],{"class":84,"line":2538},[82,23947,12260],{"class":92},[82,23949,3792],{"class":112},[82,23951,23952],{"class":96}," \"mC:\"",[82,23954,4060],{"class":112},[82,23956,23957],{"class":92}," m_C ",[82,23959,3792],{"class":112},[82,23961,11431],{"class":92},[82,23963,23964],{"class":84,"line":2548},[82,23965,4787],{"class":92},[82,23967,23968],{"class":84,"line":2579},[82,23969,17808],{"class":112},[82,23971,23972,23974],{"class":84,"line":2585},[82,23973,4585],{"class":112},[82,23975,23976],{"class":92}," m_A;\n",[82,23978,23979,23981],{"class":84,"line":4350},[82,23980,4585],{"class":112},[82,23982,23983],{"class":92}," m_B;\n",[82,23985,23986,23988],{"class":84,"line":4355},[82,23987,4585],{"class":112},[82,23989,23990],{"class":92}," m_C;\n",[82,23992,23993],{"class":84,"line":4360},[82,23994,6590],{"class":92},[82,23996,23997],{"class":84,"line":4365},[82,23998,486],{"emptyLinePlaceholder":485},[82,24000,24001,24003,24005],{"class":84,"line":4379},[82,24002,2776],{"class":112},[82,24004,4573],{"class":2384},[82,24006,8570],{"class":92},[82,24008,24009],{"class":84,"line":4384},[82,24010,4161],{"class":92},[82,24012,24013],{"class":84,"line":5176},[82,24014,486],{"emptyLinePlaceholder":485},[82,24016,24017,24019,24021,24023,24025,24027,24029,24031,24033],{"class":84,"line":5190},[82,24018,22015],{"class":92},[82,24020,19],{"class":2384},[82,24022,93],{"class":92},[82,24024,2283],{"class":88},[82,24026,100],{"class":92},[82,24028,1425],{"class":88},[82,24030,100],{"class":92},[82,24032,2841],{"class":88},[82,24034,5318],{"class":92},[82,24036,24037,24039,24042],{"class":84,"line":5198},[82,24038,18451],{"class":92},[82,24040,24041],{"class":2384},"PrintPerson",[82,24043,8228],{"class":92},[82,24045,24046],{"class":84,"line":5203},[82,24047,486],{"emptyLinePlaceholder":485},[82,24049,24050],{"class":84,"line":5209},[82,24051,486],{"emptyLinePlaceholder":485},[82,24053,24054,24056,24058,24060],{"class":84,"line":5215},[82,24055,4903],{"class":2384},[82,24057,93],{"class":92},[82,24059,4908],{"class":96},[82,24061,5318],{"class":92},[82,24063,24064],{"class":84,"line":5220},[82,24065,486],{"emptyLinePlaceholder":485},[82,24067,24068,24070,24072],{"class":84,"line":10539},[82,24069,6685],{"class":112},[82,24071,6688],{"class":88},[82,24073,3909],{"class":92},[82,24075,24076],{"class":84,"line":10563},[82,24077,1391],{"class":92},[19,24079,24080,24081,24084,24085],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2913,24082,24083],{},"参数名就是定义的对象属性","，",[2913,24086,24087],{},"属性后面的值为有参构造函数的形参",[73,24089,24091],{"className":2762,"code":24090,"language":2764,"meta":78,"style":78},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[32,24092,24093],{"__ignoreMap":78},[82,24094,24095,24097,24099,24101,24104,24106,24109,24111,24114,24116,24119,24121,24124,24126],{"class":84,"line":85},[82,24096,21630],{"class":2384},[82,24098,93],{"class":92},[82,24100,2776],{"class":112},[82,24102,24103],{"class":92}," a.",[82,24105,2776],{"class":112},[82,24107,24108],{"class":92}," b,",[82,24110,2776],{"class":112},[82,24112,24113],{"class":92}," b):",[82,24115,23883],{"class":2384},[82,24117,24118],{"class":92},"(a),",[82,24120,23889],{"class":2384},[82,24122,24123],{"class":92},"(c),",[82,24125,23895],{"class":2384},[82,24127,24128],{"class":92},"(b) {}\n",[65,24130,24132],{"id":24131},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,24134,24135],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,24137,17220],{},[73,24139,24141],{"className":2762,"code":24140,"language":2764,"meta":78,"style":78},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[32,24142,24143,24148,24153,24157,24162,24166],{"__ignoreMap":78},[82,24144,24145],{"class":84,"line":85},[82,24146,24147],{"class":92},"A{};\n",[82,24149,24150],{"class":84,"line":157},[82,24151,24152],{"class":92},"B\n",[82,24154,24155],{"class":84,"line":404},[82,24156,4161],{"class":92},[82,24158,24159],{"class":84,"line":413},[82,24160,24161],{"class":92},"    A a;\n",[82,24163,24164],{"class":84,"line":508},[82,24165,1391],{"class":92},[82,24167,24168],{"class":84,"line":513},[82,24169,24170],{"class":2828},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,24172,24173],{},"案例",[73,24175,24177],{"className":2762,"code":24176,"language":2764,"meta":78,"style":78},"\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",[32,24178,24179,24184,24191,24195,24200,24205,24219,24223,24233,24244,24248,24255,24259,24272,24276,24281,24286,24290,24296,24300,24304,24308,24339,24343,24354,24358,24364,24368,24381,24385,24389,24393,24398,24403,24407,24415,24419,24436,24455,24459,24467,24471,24477],{"__ignoreMap":78},[82,24180,24181],{"class":84,"line":85},[82,24182,24183],{"class":2828},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[82,24185,24186,24188],{"class":84,"line":157},[82,24187,17281],{"class":112},[82,24189,24190],{"class":2384}," Phone\n",[82,24192,24193],{"class":84,"line":404},[82,24194,4161],{"class":92},[82,24196,24197],{"class":84,"line":413},[82,24198,24199],{"class":92},"public：\n",[82,24201,24202],{"class":84,"line":508},[82,24203,24204],{"class":2828},"    \u002F\u002F 赋值(构造函数)\n",[82,24206,24207,24210,24212,24214,24217],{"class":84,"line":513},[82,24208,24209],{"class":2384},"    Phone",[82,24211,93],{"class":92},[82,24213,17503],{"class":2384},[82,24215,24216],{"class":108}," pName",[82,24218,119],{"class":92},[82,24220,24221],{"class":84,"line":1388},[82,24222,4630],{"class":92},[82,24224,24225,24228,24230],{"class":84,"line":1394},[82,24226,24227],{"class":92},"        m_pName",[82,24229,113],{"class":112},[82,24231,24232],{"class":92},"pName;\n",[82,24234,24235,24237,24239,24242],{"class":84,"line":1399},[82,24236,6047],{"class":92},[82,24238,3792],{"class":112},[82,24240,24241],{"class":96},"\"Phone的构造函数调用\"",[82,24243,3909],{"class":92},[82,24245,24246],{"class":84,"line":1430},[82,24247,4787],{"class":92},[82,24249,24250,24253],{"class":84,"line":1818},[82,24251,24252],{"class":2384},"    ~Phone",[82,24254,4576],{"class":92},[82,24256,24257],{"class":84,"line":2082},[82,24258,4630],{"class":92},[82,24260,24261,24263,24265,24268,24270],{"class":84,"line":2233},[82,24262,6047],{"class":92},[82,24264,3792],{"class":112},[82,24266,24267],{"class":96},"\"Phone析构函数调用\"",[82,24269,3792],{"class":112},[82,24271,3814],{"class":92},[82,24273,24274],{"class":84,"line":2255},[82,24275,4787],{"class":92},[82,24277,24278],{"class":84,"line":2260},[82,24279,24280],{"class":2828},"    \u002F\u002F\n",[82,24282,24283],{"class":84,"line":2298},[82,24284,24285],{"class":92},"    string m_PName;\n",[82,24287,24288],{"class":84,"line":2303},[82,24289,6590],{"class":92},[82,24291,24292,24294],{"class":84,"line":2321},[82,24293,17281],{"class":112},[82,24295,17757],{"class":2384},[82,24297,24298],{"class":84,"line":2533},[82,24299,4161],{"class":92},[82,24301,24302],{"class":84,"line":2538},[82,24303,17303],{"class":112},[82,24305,24306],{"class":84,"line":2548},[82,24307,19579],{"class":2828},[82,24309,24310,24312,24314,24316,24318,24320,24322,24325,24328,24330,24333,24336],{"class":84,"line":2579},[82,24311,21103],{"class":2384},[82,24313,93],{"class":92},[82,24315,17503],{"class":2384},[82,24317,17506],{"class":108},[82,24319,3136],{"class":92},[82,24321,17503],{"class":2384},[82,24323,24324],{"class":108}," pname",[82,24326,24327],{"class":92},"):",[82,24329,17596],{"class":2384},[82,24331,24332],{"class":92},"(name),m_phone.",[82,24334,24335],{"class":2384},"m_PName",[82,24337,24338],{"class":92},"(pname) \n",[82,24340,24341],{"class":84,"line":2585},[82,24342,4630],{"class":92},[82,24344,24345,24347,24349,24352],{"class":84,"line":4350},[82,24346,6047],{"class":92},[82,24348,3792],{"class":112},[82,24350,24351],{"class":96},"\"Person的构造函数调用\"",[82,24353,3909],{"class":92},[82,24355,24356],{"class":84,"line":4355},[82,24357,4787],{"class":92},[82,24359,24360,24362],{"class":84,"line":4360},[82,24361,21136],{"class":2384},[82,24363,4576],{"class":92},[82,24365,24366],{"class":84,"line":4365},[82,24367,4630],{"class":92},[82,24369,24370,24372,24374,24377,24379],{"class":84,"line":4379},[82,24371,6047],{"class":92},[82,24373,3792],{"class":112},[82,24375,24376],{"class":96},"\"Person析构函数调用\"",[82,24378,3792],{"class":112},[82,24380,3814],{"class":92},[82,24382,24383],{"class":84,"line":4384},[82,24384,4787],{"class":92},[82,24386,24387],{"class":84,"line":5176},[82,24388,10371],{"class":2828},[82,24390,24391],{"class":84,"line":5190},[82,24392,17478],{"class":92},[82,24394,24395],{"class":84,"line":5198},[82,24396,24397],{"class":2828},"    \u002F\u002F手机\n",[82,24399,24400],{"class":84,"line":5203},[82,24401,24402],{"class":92},"    Phone m_Phone;\n",[82,24404,24405],{"class":84,"line":5209},[82,24406,6590],{"class":92},[82,24408,24409,24411,24413],{"class":84,"line":5215},[82,24410,7956],{"class":112},[82,24412,8180],{"class":2384},[82,24414,4576],{"class":92},[82,24416,24417],{"class":84,"line":5220},[82,24418,4161],{"class":92},[82,24420,24421,24423,24425,24427,24429,24431,24434],{"class":84,"line":10539},[82,24422,22015],{"class":92},[82,24424,19],{"class":2384},[82,24426,93],{"class":92},[82,24428,10507],{"class":96},[82,24430,3136],{"class":92},[82,24432,24433],{"class":96},"\"安卓\"",[82,24435,5318],{"class":92},[82,24437,24438,24440,24442,24445,24447,24450,24452],{"class":84,"line":10563},[82,24439,4166],{"class":92},[82,24441,3792],{"class":112},[82,24443,24444],{"class":92},"p.Name",[82,24446,3792],{"class":112},[82,24448,24449],{"class":96},"\"拿着：\"",[82,24451,3792],{"class":112},[82,24453,24454],{"class":92},"p.m_phone.m_PName;\n",[82,24456,24457],{"class":84,"line":10568},[82,24458,1391],{"class":92},[82,24460,24461,24463,24465],{"class":84,"line":10574},[82,24462,2776],{"class":112},[82,24464,4573],{"class":2384},[82,24466,4576],{"class":92},[82,24468,24469],{"class":84,"line":10601},[82,24470,4161],{"class":92},[82,24472,24473,24475],{"class":84,"line":10606},[82,24474,8225],{"class":2384},[82,24476,8228],{"class":92},[82,24478,24479],{"class":84,"line":10612},[82,24480,1391],{"class":92},[19,24482,11616],{},[73,24484,24486],{"className":2762,"code":24485,"language":2764,"meta":78,"style":78},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[32,24487,24488,24493],{"__ignoreMap":78},[82,24489,24490],{"class":84,"line":85},[82,24491,24492],{"class":2828},"    \u002F\u002F不需要写这个：\n",[82,24494,24495],{"class":84,"line":157},[82,24496,24497],{"class":2828},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24499,24500],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[73,24502,24504],{"className":2762,"code":24503,"language":2764,"meta":78,"style":78},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[32,24505,24506],{"__ignoreMap":78},[82,24507,24508,24510,24513,24515,24518,24521],{"class":84,"line":85},[82,24509,21630],{"class":2384},[82,24511,24512],{"class":92},"(string name.string pname):",[82,24514,17596],{"class":2384},[82,24516,24517],{"class":92},"(name),",[82,24519,24520],{"class":2384},"m_phone",[82,24522,24523],{"class":92},"(pname) {}\n",[19,24525,24526,24527,113,24530],{},"采用的是隐式转换法，实际为如下：\n",[32,24528,24529],{},"m_phone(pname)",[32,24531,24532],{},"Phone m_phone=pname",[19,24534,24535,24538],{},[2913,24536,24537],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24540,24541],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[65,24543,24545],{"id":24544},"_828静态对象","8.2.8静态对象",[19,24547,24548],{},"静态对象在成员对象前static，称为静态对象",[19,24550,24551],{},"静态对象分为两类：",[26,24553,24554],{},[29,24555,24556],{},"静态成员变量",[3755,24558,24559,24562,24565],{},[29,24560,24561],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,24563,24564],{},"②在编译阶段分配内存",[29,24566,24567],{},"③类内声明，类外初始化",[26,24569,24570],{"start":157},[29,24571,24572],{},"静态成员函数",[3755,24574,24575,24578],{},[29,24576,24577],{},"①所有对象共享同一个函数",[29,24579,24580],{},"②静态成员函数只能访问静态成员变量",[24582,24583,24585],"h4",{"id":24584},"_8281静态成员变量","8.2.8.1静态成员变量",[73,24587,24589],{"className":2762,"code":24588,"language":2764,"meta":78,"style":78},"#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",[32,24590,24591,24597,24607,24613,24617,24621,24626,24631,24636,24644,24648,24652,24656,24664,24668,24672,24677,24690,24694,24702,24706,24712],{"__ignoreMap":78},[82,24592,24593,24595],{"class":84,"line":85},[82,24594,4550],{"class":112},[82,24596,4553],{"class":96},[82,24598,24599,24601,24603,24605],{"class":84,"line":157},[82,24600,4558],{"class":112},[82,24602,4561],{"class":112},[82,24604,4564],{"class":2384},[82,24606,3909],{"class":92},[82,24608,24609,24611],{"class":84,"line":404},[82,24610,17281],{"class":112},[82,24612,17757],{"class":2384},[82,24614,24615],{"class":84,"line":413},[82,24616,4161],{"class":92},[82,24618,24619],{"class":84,"line":508},[82,24620,17303],{"class":112},[82,24622,24623],{"class":84,"line":513},[82,24624,24625],{"class":2828},"    \u002F\u002F非静态成员变量\n",[82,24627,24628],{"class":84,"line":1388},[82,24629,24630],{"class":2828},"    \u002F\u002F int m_A;\n",[82,24632,24633],{"class":84,"line":1394},[82,24634,24635],{"class":2828},"    \u002F\u002F定义静态成员变量\n",[82,24637,24638,24640,24642],{"class":84,"line":1399},[82,24639,13610],{"class":112},[82,24641,4982],{"class":112},[82,24643,23976],{"class":92},[82,24645,24646],{"class":84,"line":1430},[82,24647,486],{"emptyLinePlaceholder":485},[82,24649,24650],{"class":84,"line":1818},[82,24651,486],{"emptyLinePlaceholder":485},[82,24653,24654],{"class":84,"line":2082},[82,24655,6590],{"class":92},[82,24657,24658,24660,24662],{"class":84,"line":2233},[82,24659,7956],{"class":112},[82,24661,8180],{"class":2384},[82,24663,4576],{"class":92},[82,24665,24666],{"class":84,"line":2255},[82,24667,4161],{"class":92},[82,24669,24670],{"class":84,"line":2260},[82,24671,17899],{"class":92},[82,24673,24674],{"class":84,"line":2298},[82,24675,24676],{"class":2828},"    \u002F\u002F输出类成员变量这块内存\n",[82,24678,24679,24681,24683,24686,24688],{"class":84,"line":2303},[82,24680,4166],{"class":92},[82,24682,3792],{"class":112},[82,24684,24685],{"class":92},"p.m_A",[82,24687,3792],{"class":112},[82,24689,3814],{"class":92},[82,24691,24692],{"class":84,"line":2321},[82,24693,1391],{"class":92},[82,24695,24696,24698,24700],{"class":84,"line":2533},[82,24697,2776],{"class":112},[82,24699,4573],{"class":2384},[82,24701,4576],{"class":92},[82,24703,24704],{"class":84,"line":2538},[82,24705,4161],{"class":92},[82,24707,24708,24710],{"class":84,"line":2548},[82,24709,8225],{"class":2384},[82,24711,4576],{"class":92},[82,24713,24714],{"class":84,"line":2579},[82,24715,1391],{"class":92},[19,24717,24718],{},"此时输出是报错的：无法解析外部命令",[19,24720,24721],{},"解决这一问题：必须用到类内声明，类外初始化操作",[73,24723,24725],{"className":2762,"code":24724,"language":2764,"meta":78,"style":78},"#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",[32,24726,24727,24733,24743,24749,24753,24757,24762,24770,24774,24779,24794,24802,24806,24810,24815,24820,24832,24837,24848,24853,24858,24871,24875,24883,24887,24893],{"__ignoreMap":78},[82,24728,24729,24731],{"class":84,"line":85},[82,24730,4550],{"class":112},[82,24732,4553],{"class":96},[82,24734,24735,24737,24739,24741],{"class":84,"line":157},[82,24736,4558],{"class":112},[82,24738,4561],{"class":112},[82,24740,4564],{"class":2384},[82,24742,3909],{"class":92},[82,24744,24745,24747],{"class":84,"line":404},[82,24746,17281],{"class":112},[82,24748,17757],{"class":2384},[82,24750,24751],{"class":84,"line":413},[82,24752,4161],{"class":92},[82,24754,24755],{"class":84,"line":508},[82,24756,17303],{"class":112},[82,24758,24759],{"class":84,"line":513},[82,24760,24761],{"class":2828},"    \u002F\u002F类内声明\n",[82,24763,24764,24766,24768],{"class":84,"line":1388},[82,24765,13610],{"class":112},[82,24767,4982],{"class":112},[82,24769,23976],{"class":92},[82,24771,24772],{"class":84,"line":1394},[82,24773,6590],{"class":92},[82,24775,24776],{"class":84,"line":1399},[82,24777,24778],{"class":2828},"\u002F\u002F类外初始化\n",[82,24780,24781,24783,24785,24788,24790,24792],{"class":84,"line":1430},[82,24782,2776],{"class":112},[82,24784,18155],{"class":2384},[82,24786,24787],{"class":92},"::m_A",[82,24789,113],{"class":112},[82,24791,440],{"class":88},[82,24793,3909],{"class":92},[82,24795,24796,24798,24800],{"class":84,"line":1818},[82,24797,7956],{"class":112},[82,24799,8180],{"class":2384},[82,24801,4576],{"class":92},[82,24803,24804],{"class":84,"line":2082},[82,24805,4161],{"class":92},[82,24807,24808],{"class":84,"line":2233},[82,24809,17899],{"class":92},[82,24811,24812],{"class":84,"line":2255},[82,24813,24814],{"class":2828},"    \u002F\u002F访问变量的原内存空间\n",[82,24816,24817],{"class":84,"line":2260},[82,24818,24819],{"class":2828},"    \u002F\u002F100\n",[82,24821,24822,24824,24826,24828,24830],{"class":84,"line":2298},[82,24823,4166],{"class":92},[82,24825,3792],{"class":112},[82,24827,24685],{"class":92},[82,24829,3792],{"class":112},[82,24831,3814],{"class":92},[82,24833,24834],{"class":84,"line":2303},[82,24835,24836],{"class":92},"    Person p2;\n",[82,24838,24839,24842,24844,24846],{"class":84,"line":2321},[82,24840,24841],{"class":92},"    p2.m_A",[82,24843,113],{"class":112},[82,24845,4325],{"class":88},[82,24847,3909],{"class":92},[82,24849,24850],{"class":84,"line":2533},[82,24851,24852],{"class":2828},"    \u002F\u002F继续访问这片空间\n",[82,24854,24855],{"class":84,"line":2538},[82,24856,24857],{"class":2828},"    \u002F\u002F200\n",[82,24859,24860,24862,24864,24867,24869],{"class":84,"line":2548},[82,24861,4166],{"class":92},[82,24863,3792],{"class":112},[82,24865,24866],{"class":92},"p2.m_A",[82,24868,3792],{"class":112},[82,24870,3814],{"class":92},[82,24872,24873],{"class":84,"line":2579},[82,24874,1391],{"class":92},[82,24876,24877,24879,24881],{"class":84,"line":2585},[82,24878,2776],{"class":112},[82,24880,4573],{"class":2384},[82,24882,4576],{"class":92},[82,24884,24885],{"class":84,"line":4350},[82,24886,4161],{"class":92},[82,24888,24889,24891],{"class":84,"line":4355},[82,24890,8225],{"class":2384},[82,24892,8228],{"class":92},[82,24894,24895],{"class":84,"line":4360},[82,24896,1391],{"class":92},[19,24898,24899],{},[2913,24900,24901],{},"静态变量的访问",[73,24903,24905],{"className":2762,"code":24904,"language":2764,"meta":78,"style":78},"#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",[32,24906,24907,24913,24923,24929,24933,24937,24941,24949,24953,24958,24966,24970,24974,24988,25003,25011,25015,25020,25025,25030,25035,25047,25052,25057,25071,25088,25092,25100,25104,25110],{"__ignoreMap":78},[82,24908,24909,24911],{"class":84,"line":85},[82,24910,4550],{"class":112},[82,24912,4553],{"class":96},[82,24914,24915,24917,24919,24921],{"class":84,"line":157},[82,24916,4558],{"class":112},[82,24918,4561],{"class":112},[82,24920,4564],{"class":2384},[82,24922,3909],{"class":92},[82,24924,24925,24927],{"class":84,"line":404},[82,24926,17281],{"class":112},[82,24928,17757],{"class":2384},[82,24930,24931],{"class":84,"line":413},[82,24932,4161],{"class":92},[82,24934,24935],{"class":84,"line":508},[82,24936,17303],{"class":112},[82,24938,24939],{"class":84,"line":513},[82,24940,24761],{"class":2828},[82,24942,24943,24945,24947],{"class":84,"line":1388},[82,24944,13610],{"class":112},[82,24946,4982],{"class":112},[82,24948,23976],{"class":92},[82,24950,24951],{"class":84,"line":1394},[82,24952,17808],{"class":112},[82,24954,24955],{"class":84,"line":1399},[82,24956,24957],{"class":2828},"    \u002F\u002F静态成员变量也是有访问权限的\n",[82,24959,24960,24962,24964],{"class":84,"line":1430},[82,24961,13610],{"class":112},[82,24963,4982],{"class":112},[82,24965,23983],{"class":92},[82,24967,24968],{"class":84,"line":1818},[82,24969,6590],{"class":92},[82,24971,24972],{"class":84,"line":2082},[82,24973,24778],{"class":2828},[82,24975,24976,24978,24980,24982,24984,24986],{"class":84,"line":2233},[82,24977,2776],{"class":112},[82,24979,18155],{"class":2384},[82,24981,24787],{"class":92},[82,24983,113],{"class":112},[82,24985,440],{"class":88},[82,24987,3909],{"class":92},[82,24989,24990,24992,24994,24997,24999,25001],{"class":84,"line":2255},[82,24991,2776],{"class":112},[82,24993,18155],{"class":2384},[82,24995,24996],{"class":92},"::m_B",[82,24998,113],{"class":112},[82,25000,3451],{"class":88},[82,25002,3909],{"class":92},[82,25004,25005,25007,25009],{"class":84,"line":2260},[82,25006,7956],{"class":112},[82,25008,8249],{"class":2384},[82,25010,4576],{"class":92},[82,25012,25013],{"class":84,"line":2298},[82,25014,4161],{"class":92},[82,25016,25017],{"class":84,"line":2303},[82,25018,25019],{"class":2828},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[82,25021,25022],{"class":84,"line":2321},[82,25023,25024],{"class":2828},"    \u002F\u002F静态成员变量有两种访问方式：\n",[82,25026,25027],{"class":84,"line":2533},[82,25028,25029],{"class":2828},"    \u002F\u002F1.通过对象进行访问\n",[82,25031,25032],{"class":84,"line":2538},[82,25033,25034],{"class":92},"    Person p;  \n",[82,25036,25037,25039,25041,25043,25045],{"class":84,"line":2548},[82,25038,4166],{"class":92},[82,25040,3792],{"class":112},[82,25042,24685],{"class":92},[82,25044,3792],{"class":112},[82,25046,3814],{"class":92},[82,25048,25049],{"class":84,"line":2579},[82,25050,25051],{"class":2828},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[82,25053,25054],{"class":84,"line":2585},[82,25055,25056],{"class":2828},"    \u002F\u002F2.通过类名进行访问\n",[82,25058,25059,25061,25063,25065,25067,25069],{"class":84,"line":4350},[82,25060,4166],{"class":92},[82,25062,3792],{"class":112},[82,25064,21630],{"class":2384},[82,25066,24787],{"class":92},[82,25068,3792],{"class":112},[82,25070,3814],{"class":92},[82,25072,25073,25075,25077,25079,25081,25083,25085],{"class":84,"line":4355},[82,25074,4166],{"class":92},[82,25076,3792],{"class":112},[82,25078,21630],{"class":2384},[82,25080,24996],{"class":92},[82,25082,3792],{"class":112},[82,25084,3857],{"class":92},[82,25086,25087],{"class":2828}," \u002F\u002F没有访问权限，报错\n",[82,25089,25090],{"class":84,"line":4360},[82,25091,1391],{"class":92},[82,25093,25094,25096,25098],{"class":84,"line":4365},[82,25095,2776],{"class":112},[82,25097,4573],{"class":2384},[82,25099,4576],{"class":92},[82,25101,25102],{"class":84,"line":4379},[82,25103,4161],{"class":92},[82,25105,25106,25108],{"class":84,"line":4384},[82,25107,8294],{"class":2384},[82,25109,8228],{"class":92},[82,25111,25112],{"class":84,"line":5176},[82,25113,1391],{"class":92},[24582,25115,25117],{"id":25116},"_8282静态成员函数","8.2.8.2静态成员函数",[19,25119,25120],{},"1.静态成员函数定义与访问",[73,25122,25124],{"className":2762,"code":25123,"language":2764,"meta":78,"style":78},"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",[32,25125,25126,25132,25136,25140,25145,25156,25160,25174,25178,25182,25190,25194,25199,25204,25208,25216,25221,25231],{"__ignoreMap":78},[82,25127,25128,25130],{"class":84,"line":85},[82,25129,17281],{"class":112},[82,25131,17757],{"class":2384},[82,25133,25134],{"class":84,"line":157},[82,25135,4161],{"class":92},[82,25137,25138],{"class":84,"line":404},[82,25139,17303],{"class":112},[82,25141,25142],{"class":84,"line":413},[82,25143,25144],{"class":2828},"    \u002F\u002F在公共权限下定义静态成员函数\n",[82,25146,25147,25149,25152,25154],{"class":84,"line":508},[82,25148,13610],{"class":112},[82,25150,25151],{"class":112}," void",[82,25153,13975],{"class":2384},[82,25155,4576],{"class":92},[82,25157,25158],{"class":84,"line":513},[82,25159,4630],{"class":92},[82,25161,25162,25165,25167,25170,25172],{"class":84,"line":1388},[82,25163,25164],{"class":92},"        coout",[82,25166,3792],{"class":112},[82,25168,25169],{"class":96},"\"静态成员函数的调用\"",[82,25171,3792],{"class":112},[82,25173,3814],{"class":92},[82,25175,25176],{"class":84,"line":1394},[82,25177,4787],{"class":92},[82,25179,25180],{"class":84,"line":1399},[82,25181,6590],{"class":92},[82,25183,25184,25186,25188],{"class":84,"line":1430},[82,25185,7956],{"class":112},[82,25187,8180],{"class":2384},[82,25189,4576],{"class":92},[82,25191,25192],{"class":84,"line":1818},[82,25193,4161],{"class":92},[82,25195,25196],{"class":84,"line":2082},[82,25197,25198],{"class":2828},"    \u002F\u002F静态成员函数的调用方式:\n",[82,25200,25201],{"class":84,"line":2233},[82,25202,25203],{"class":2828},"    \u002F\u002F1.通过对象访问\n",[82,25205,25206],{"class":84,"line":2255},[82,25207,17899],{"class":92},[82,25209,25210,25212,25214],{"class":84,"line":2260},[82,25211,18451],{"class":92},[82,25213,14141],{"class":2384},[82,25215,8228],{"class":92},[82,25217,25218],{"class":84,"line":2298},[82,25219,25220],{"class":2828},"    \u002F\u002F2.通过类名访问\n",[82,25222,25223,25225,25227,25229],{"class":84,"line":2303},[82,25224,21103],{"class":2384},[82,25226,20316],{"class":92},[82,25228,14141],{"class":2384},[82,25230,8228],{"class":92},[82,25232,25233],{"class":84,"line":2321},[82,25234,1391],{"class":92},[26,25236,25237],{"start":157},[29,25238,25239],{},"静态成员函数只能访问静态成员变量",[73,25241,25243],{"className":2762,"code":25242,"language":2764,"meta":78,"style":78},"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",[32,25244,25245,25251,25255,25259,25263,25273,25277,25291,25296,25308,25312,25323,25333,25337,25341,25345,25355,25359,25372,25376,25380,25384,25388,25402,25410,25414,25418,25422,25426,25434,25438,25448,25453,25457,25465,25469,25475],{"__ignoreMap":78},[82,25246,25247,25249],{"class":84,"line":85},[82,25248,17281],{"class":112},[82,25250,17757],{"class":2384},[82,25252,25253],{"class":84,"line":157},[82,25254,4161],{"class":92},[82,25256,25257],{"class":84,"line":404},[82,25258,17303],{"class":112},[82,25260,25261],{"class":84,"line":413},[82,25262,25144],{"class":2828},[82,25264,25265,25267,25269,25271],{"class":84,"line":508},[82,25266,13610],{"class":112},[82,25268,25151],{"class":112},[82,25270,13975],{"class":2384},[82,25272,4576],{"class":92},[82,25274,25275],{"class":84,"line":513},[82,25276,4630],{"class":92},[82,25278,25279,25282,25284,25286,25288],{"class":84,"line":1388},[82,25280,25281],{"class":92},"        m_A",[82,25283,113],{"class":112},[82,25285,3069],{"class":88},[82,25287,2825],{"class":92},[82,25289,25290],{"class":2828}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[82,25292,25293],{"class":84,"line":1394},[82,25294,25295],{"class":2828},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[82,25297,25298,25300,25302,25304,25306],{"class":84,"line":1399},[82,25299,25164],{"class":92},[82,25301,3792],{"class":112},[82,25303,25169],{"class":96},[82,25305,3792],{"class":112},[82,25307,3814],{"class":92},[82,25309,25310],{"class":84,"line":1430},[82,25311,4787],{"class":92},[82,25313,25314,25316,25318,25320],{"class":84,"line":1818},[82,25315,13610],{"class":112},[82,25317,4982],{"class":112},[82,25319,18034],{"class":92},[82,25321,25322],{"class":2828}," \u002F\u002F静态成员变量\n",[82,25324,25325,25327,25330],{"class":84,"line":2082},[82,25326,4585],{"class":112},[82,25328,25329],{"class":92}," m_B;",[82,25331,25332],{"class":2828}," \u002F\u002F非静态成员变量\n",[82,25334,25335],{"class":84,"line":2233},[82,25336,486],{"emptyLinePlaceholder":485},[82,25338,25339],{"class":84,"line":2255},[82,25340,17808],{"class":112},[82,25342,25343],{"class":84,"line":2260},[82,25344,24957],{"class":2828},[82,25346,25347,25349,25351,25353],{"class":84,"line":2298},[82,25348,13610],{"class":112},[82,25350,25151],{"class":112},[82,25352,16206],{"class":2384},[82,25354,4576],{"class":92},[82,25356,25357],{"class":84,"line":2303},[82,25358,4630],{"class":92},[82,25360,25361,25363,25365,25368,25370],{"class":84,"line":2321},[82,25362,6047],{"class":92},[82,25364,3792],{"class":112},[82,25366,25367],{"class":96},"\"这是私有权限下的静态函数调用\"",[82,25369,3792],{"class":112},[82,25371,3814],{"class":92},[82,25373,25374],{"class":84,"line":2533},[82,25375,4787],{"class":92},[82,25377,25378],{"class":84,"line":2538},[82,25379,486],{"emptyLinePlaceholder":485},[82,25381,25382],{"class":84,"line":2548},[82,25383,486],{"emptyLinePlaceholder":485},[82,25385,25386],{"class":84,"line":2579},[82,25387,6590],{"class":92},[82,25389,25390,25392,25394,25396,25398,25400],{"class":84,"line":2585},[82,25391,2776],{"class":112},[82,25393,18155],{"class":2384},[82,25395,24787],{"class":92},[82,25397,113],{"class":112},[82,25399,2244],{"class":88},[82,25401,3909],{"class":92},[82,25403,25404,25406,25408],{"class":84,"line":4350},[82,25405,7956],{"class":112},[82,25407,8180],{"class":2384},[82,25409,4576],{"class":92},[82,25411,25412],{"class":84,"line":4355},[82,25413,4161],{"class":92},[82,25415,25416],{"class":84,"line":4360},[82,25417,25198],{"class":2828},[82,25419,25420],{"class":84,"line":4365},[82,25421,25203],{"class":2828},[82,25423,25424],{"class":84,"line":4379},[82,25425,17899],{"class":92},[82,25427,25428,25430,25432],{"class":84,"line":4384},[82,25429,18451],{"class":92},[82,25431,14141],{"class":2384},[82,25433,8228],{"class":92},[82,25435,25436],{"class":84,"line":5176},[82,25437,25220],{"class":2828},[82,25439,25440,25442,25444,25446],{"class":84,"line":5190},[82,25441,21103],{"class":2384},[82,25443,20316],{"class":92},[82,25445,14141],{"class":2384},[82,25447,8228],{"class":92},[82,25449,25450],{"class":84,"line":5198},[82,25451,25452],{"class":2828},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[82,25454,25455],{"class":84,"line":5203},[82,25456,1391],{"class":92},[82,25458,25459,25461,25463],{"class":84,"line":5209},[82,25460,2776],{"class":112},[82,25462,4573],{"class":2384},[82,25464,4576],{"class":92},[82,25466,25467],{"class":84,"line":5215},[82,25468,4161],{"class":92},[82,25470,25471,25473],{"class":84,"line":5220},[82,25472,8225],{"class":2384},[82,25474,8228],{"class":92},[82,25476,25477],{"class":84,"line":10539},[82,25478,1391],{"class":92},[65,25480,25482],{"id":25481},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24582,25484,25486],{"id":25485},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25488,25489],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25491,25492],{},"只有非静态成员变量才属于类的对象上",[25494,25495,25497],"h5",{"id":25496},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[73,25499,25501],{"className":2762,"code":25500,"language":2764,"meta":78,"style":78},"#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",[32,25502,25503,25510,25520,25526,25530,25534,25538,25546,25550,25554,25577,25581,25589,25593,25599],{"__ignoreMap":78},[82,25504,25505,25507],{"class":84,"line":85},[82,25506,4550],{"class":112},[82,25508,25509],{"class":96},"\u003Ciostraem>\n",[82,25511,25512,25514,25516,25518],{"class":84,"line":157},[82,25513,4558],{"class":112},[82,25515,4561],{"class":112},[82,25517,4564],{"class":2384},[82,25519,3909],{"class":92},[82,25521,25522,25524],{"class":84,"line":404},[82,25523,17281],{"class":112},[82,25525,17757],{"class":2384},[82,25527,25528],{"class":84,"line":413},[82,25529,4161],{"class":92},[82,25531,25532],{"class":84,"line":508},[82,25533,486],{"emptyLinePlaceholder":485},[82,25535,25536],{"class":84,"line":513},[82,25537,6590],{"class":92},[82,25539,25540,25542,25544],{"class":84,"line":1388},[82,25541,7956],{"class":112},[82,25543,8180],{"class":2384},[82,25545,4576],{"class":92},[82,25547,25548],{"class":84,"line":1394},[82,25549,4161],{"class":92},[82,25551,25552],{"class":84,"line":1399},[82,25553,17899],{"class":92},[82,25555,25556,25558,25560,25563,25565,25568,25570,25572,25574],{"class":84,"line":1430},[82,25557,4166],{"class":92},[82,25559,3792],{"class":112},[82,25561,25562],{"class":96},"\"size of p=\"",[82,25564,3792],{"class":112},[82,25566,25567],{"class":2384},"sizeoif",[82,25569,9131],{"class":92},[82,25571,3792],{"class":112},[82,25573,3857],{"class":92},[82,25575,25576],{"class":2828}," \u002F\u002F查看这个空类的占用的内存空间\n",[82,25578,25579],{"class":84,"line":1818},[82,25580,1391],{"class":92},[82,25582,25583,25585,25587],{"class":84,"line":2082},[82,25584,2776],{"class":112},[82,25586,4573],{"class":2384},[82,25588,4576],{"class":92},[82,25590,25591],{"class":84,"line":2233},[82,25592,4161],{"class":92},[82,25594,25595,25597],{"class":84,"line":2255},[82,25596,8225],{"class":2384},[82,25598,8228],{"class":92},[82,25600,25601],{"class":84,"line":2260},[82,25602,1391],{"class":92},[19,25604,25605],{},"输出结果为：size of p=1",[19,25607,25608],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25610,25611],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25494,25613,25615],{"id":25614},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[73,25617,25619],{"className":2762,"code":25618,"language":2764,"meta":78,"style":78},"#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",[32,25620,25621,25627,25637,25645,25649,25658,25662,25670,25674,25678,25697,25701,25705,25713,25717,25723],{"__ignoreMap":78},[82,25622,25623,25625],{"class":84,"line":85},[82,25624,4550],{"class":112},[82,25626,4553],{"class":96},[82,25628,25629,25631,25633,25635],{"class":84,"line":157},[82,25630,4558],{"class":112},[82,25632,4561],{"class":112},[82,25634,4564],{"class":2384},[82,25636,3909],{"class":92},[82,25638,25639,25641,25643],{"class":84,"line":404},[82,25640,17281],{"class":112},[82,25642,18155],{"class":2384},[82,25644,5273],{"class":92},[82,25646,25647],{"class":84,"line":413},[82,25648,4161],{"class":92},[82,25650,25651,25653,25655],{"class":84,"line":508},[82,25652,4585],{"class":112},[82,25654,18034],{"class":92},[82,25656,25657],{"class":2828},"\u002F\u002F非静态成员变量\n",[82,25659,25660],{"class":84,"line":513},[82,25661,6590],{"class":92},[82,25663,25664,25666,25668],{"class":84,"line":1388},[82,25665,7956],{"class":112},[82,25667,8180],{"class":2384},[82,25669,4576],{"class":92},[82,25671,25672],{"class":84,"line":1394},[82,25673,4161],{"class":92},[82,25675,25676],{"class":84,"line":1399},[82,25677,17899],{"class":92},[82,25679,25680,25682,25684,25686,25688,25690,25692,25694],{"class":84,"line":1430},[82,25681,4166],{"class":92},[82,25683,3792],{"class":112},[82,25685,25562],{"class":96},[82,25687,3988],{"class":112},[82,25689,9131],{"class":92},[82,25691,3792],{"class":112},[82,25693,3857],{"class":92},[82,25695,25696],{"class":2828}," \u002F\u002F查看不是空对象时占用多少内存\n",[82,25698,25699],{"class":84,"line":1818},[82,25700,486],{"emptyLinePlaceholder":485},[82,25702,25703],{"class":84,"line":2082},[82,25704,1391],{"class":92},[82,25706,25707,25709,25711],{"class":84,"line":2233},[82,25708,2776],{"class":112},[82,25710,4573],{"class":2384},[82,25712,4576],{"class":92},[82,25714,25715],{"class":84,"line":2255},[82,25716,4161],{"class":92},[82,25718,25719,25721],{"class":84,"line":2260},[82,25720,8225],{"class":2384},[82,25722,8228],{"class":92},[82,25724,25725],{"class":84,"line":2298},[82,25726,1391],{"class":92},[19,25728,25729],{},"输出结果：size of p=4",[19,25731,25732],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,25734,25735],{},[29,25736,25737],{},"如果加上非静态成员变量，Person类修改如下",[73,25739,25741],{"className":2762,"code":25740,"language":2764,"meta":78,"style":78},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[32,25742,25743,25749,25753,25759,25767,25771,25776],{"__ignoreMap":78},[82,25744,25745,25747],{"class":84,"line":85},[82,25746,17281],{"class":112},[82,25748,17757],{"class":2384},[82,25750,25751],{"class":84,"line":157},[82,25752,4161],{"class":92},[82,25754,25755,25757],{"class":84,"line":404},[82,25756,4585],{"class":112},[82,25758,23976],{"class":92},[82,25760,25761,25763,25765],{"class":84,"line":413},[82,25762,13610],{"class":112},[82,25764,4982],{"class":112},[82,25766,23983],{"class":92},[82,25768,25769],{"class":84,"line":508},[82,25770,6590],{"class":92},[82,25772,25773],{"class":84,"line":513},[82,25774,25775],{"class":2828},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[82,25777,25778,25780,25782,25784,25786,25788],{"class":84,"line":1388},[82,25779,2776],{"class":112},[82,25781,18155],{"class":2384},[82,25783,24996],{"class":92},[82,25785,113],{"class":112},[82,25787,2244],{"class":88},[82,25789,3909],{"class":92},[19,25791,25792],{},"输出结果：4",[19,25794,25795],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25797,25798],{"start":157},[29,25799,25800],{},"加上非静态成员函数",[73,25802,25804],{"className":2762,"code":25803,"language":2764,"meta":78,"style":78},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[32,25805,25806,25813,25817,25823,25831,25835,25839,25843],{"__ignoreMap":78},[82,25807,25808,25810],{"class":84,"line":85},[82,25809,17281],{"class":112},[82,25811,25812],{"class":2384},"  Person\n",[82,25814,25815],{"class":84,"line":157},[82,25816,4161],{"class":92},[82,25818,25819,25821],{"class":84,"line":404},[82,25820,4585],{"class":112},[82,25822,23976],{"class":92},[82,25824,25825,25827,25829],{"class":84,"line":413},[82,25826,17495],{"class":112},[82,25828,13975],{"class":2384},[82,25830,4576],{"class":92},[82,25832,25833],{"class":84,"line":508},[82,25834,4630],{"class":92},[82,25836,25837],{"class":84,"line":513},[82,25838,486],{"emptyLinePlaceholder":485},[82,25840,25841],{"class":84,"line":1388},[82,25842,4787],{"class":92},[82,25844,25845],{"class":84,"line":1394},[82,25846,6590],{"class":92},[19,25848,25849],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25851,25852],{"start":404},[29,25853,25854],{},"加上静态成员函数",[73,25856,25858],{"className":2762,"code":25857,"language":2764,"meta":78,"style":78},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[32,25859,25860,25866,25870,25876,25884,25888,25892,25896,25907,25911,25915,25919],{"__ignoreMap":78},[82,25861,25862,25864],{"class":84,"line":85},[82,25863,17281],{"class":112},[82,25865,25812],{"class":2384},[82,25867,25868],{"class":84,"line":157},[82,25869,4161],{"class":92},[82,25871,25872,25874],{"class":84,"line":404},[82,25873,4585],{"class":112},[82,25875,23976],{"class":92},[82,25877,25878,25880,25882],{"class":84,"line":413},[82,25879,17495],{"class":112},[82,25881,13975],{"class":2384},[82,25883,4576],{"class":92},[82,25885,25886],{"class":84,"line":508},[82,25887,4630],{"class":92},[82,25889,25890],{"class":84,"line":513},[82,25891,486],{"emptyLinePlaceholder":485},[82,25893,25894],{"class":84,"line":1388},[82,25895,4787],{"class":92},[82,25897,25898,25900,25902,25905],{"class":84,"line":1394},[82,25899,13610],{"class":112},[82,25901,25151],{"class":112},[82,25903,25904],{"class":2384}," func1",[82,25906,4576],{"class":92},[82,25908,25909],{"class":84,"line":1399},[82,25910,4630],{"class":92},[82,25912,25913],{"class":84,"line":1430},[82,25914,486],{"emptyLinePlaceholder":485},[82,25916,25917],{"class":84,"line":1818},[82,25918,4787],{"class":92},[82,25920,25921],{"class":84,"line":2082},[82,25922,6590],{"class":92},[19,25924,25792],{},[19,25926,25927],{},"解释：静态成员函数也不属于类上",[2671,25929,10265],{},{"title":78,"searchDepth":157,"depth":157,"links":25931},[25932,25938],{"id":17232,"depth":157,"text":17233,"children":25933},[25934,25935,25936,25937],{"id":17236,"depth":404,"text":17237},{"id":17960,"depth":404,"text":17961},{"id":18132,"depth":404,"text":18133},{"id":18590,"depth":404,"text":18591},{"id":20961,"depth":157,"text":20962,"children":25939},[25940,25941,25942,25943,25944,25945,25946,25947,25948],{"id":20973,"depth":404,"text":20974},{"id":21266,"depth":404,"text":21267},{"id":21757,"depth":404,"text":21758},{"id":22854,"depth":404,"text":22855},{"id":23277,"depth":404,"text":23278},{"id":23756,"depth":404,"text":23757},{"id":24131,"depth":404,"text":24132},{"id":24544,"depth":404,"text":24545},{"id":25481,"depth":404,"text":25482},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17197,"description":25949},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25956,"title":2764,"body":25957,"description":2699,"extension":2700,"meta":25961,"navigation":485,"path":25963,"seo":25964,"stem":25965,"__hash__":25966},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25958,"toc":25959},[],{"title":78,"searchDepth":157,"depth":157,"links":25960},[],{"category":25962},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2764,"description":2699},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25968,"title":25969,"body":25970,"description":78,"extension":2700,"meta":26561,"navigation":485,"path":26562,"seo":26563,"stem":26564,"__hash__":26565},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25971,"toc":26543},[25972,25975,25979,25982,25985,25988,26006,26011,26014,26017,26020,26023,26028,26031,26036,26039,26042,26046,26049,26052,26058,26061,26079,26083,26087,26090,26095,26098,26102,26105,26118,26121,26125,26128,26131,26134,26159,26162,26171,26182,26197,26229,26233,26240,26248,26252,26255,26258,26263,26267,26270,26273,26278,26281,26285,26288,26291,26296,26299,26303,26308,26312,26379,26383,26386,26389,26392,26395,26398,26404,26425,26428,26442,26451,26455,26458,26461,26466,26469,26474,26479,26482,26485,26490,26495,26498,26503,26508,26511,26516,26521,26524,26527,26532,26535,26540],[10,25973,25969],{"id":25974},"_1强化学习基本认识",[14,25976,25978],{"id":25977},"_11什么是强化学习","1.1.什么是强化学习",[19,25980,25981],{},"强化学习有两部分组成：智能体和环境；",[19,25983,25984],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25986,25987],{},"强化学习与监督学习的区别:",[26,25989,25990,25993,25996,25999],{},[29,25991,25992],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25994,25995],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25997,25998],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,26000,26001,26002,26005],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2913,26003,26004],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,26007,26008],{},[4078,26009],{"alt":78,"src":26010},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,26012,26013],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,26015,26016],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,26018,26019],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,26021,26022],{},"获取奖励",[19,26024,26025],{},[4078,26026],{"alt":78,"src":26027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,26029,26030],{},"强化学习可以分成标准强化学习和深度强化学习",[19,26032,26033],{},[4078,26034],{"alt":78,"src":26035},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,26037,26038],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,26040,26041],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26043,26045],{"id":26044},"_12强化学习应用场景","1.2.强化学习应用场景",[19,26047,26048],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,26050,26051],{},"具身智能中的应用",[19,26053,26054,26057],{},[2913,26055,26056],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,26059,26060],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,26062,26063,26064,26067,26068,26071,26072,26075,26076],{},"机器人是",[2913,26065,26066],{},"躯体","，深度学习是",[2913,26069,26070],{},"神经元****网络","，VLA是",[2913,26073,26074],{},"通用的行为逻辑","，而强化学习是",[2913,26077,26078],{},"教练",[14,26080,26082],{"id":26081},"_13序列决策","1.3.序列决策",[65,26084,26086],{"id":26085},"_131智能体与环境","1.3.1.智能体与环境",[19,26088,26089],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,26091,26092],{},[4078,26093],{"alt":78,"src":26094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,26096,26097],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[65,26099,26101],{"id":26100},"_132奖励","1.3.2.奖励",[19,26103,26104],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,26106,26107,26108,26117],{},"取某个策略的表现如何。强化学习的目的就是",[2913,26109,26110,26111,26116],{},"最大化",[2913,26112,26113],{},[2913,26114,26115],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,26119,26120],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[65,26122,26124],{"id":26123},"_133序列决策","1.3.3.序列决策",[19,26126,26127],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,26129,26130],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,26132,26133],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,26135,26136,26140,26141,26143,26144,26146,26147,26149,26150,16382,26153,16382,26156],{},[26137,26138,26139],"em",{},"Ht"," = ",[26137,26142,3350],{},"1*, a",[26137,26145,2283],{},", r",[26137,26148,2283],{},", . . . ,* ",[26137,26151,26152],{},"ot",[26137,26154,26155],{},", at ,",[26137,26157,26158],{},"rt",[19,26160,26161],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,26163,26164,26140,26167,4265,26169,3187],{},[26137,26165,26166],{},"st",[26137,26168,2822],{},[26137,26170,26139],{},[19,26172,26173,26174,26177,26178,26181],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2913,26175,26176],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2913,26179,26180],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,26183,26184,26185,26188,26189,26192,26193,26196],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2913,26186,26187],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2913,26190,26191],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[26137,26194,26195],{},"S, A, T, R, Ω, O, γ",")。",[19,26198,26199,26200,26202,26203,26205,26206,93,26208,26211,26212,26214,26215,93,26218,26221,26222,26224,26225,26228],{},"其中 ",[26137,26201,3440],{}," 表示状态空间，为隐变量，",[26137,26204,2992],{}," 为动作空间，",[26137,26207,3465],{},[26137,26209,26210],{},"s ′ |s, a",") 为状态转移概率，",[26137,26213,3416],{}," 为奖励函数，",[26137,26216,26217],{},"Ω",[26137,26219,26220],{},"o|s, a",") 为观测概率，",[26137,26223,3344],{}," 为观测空间，",[26137,26226,26227],{},"γ"," 为折扣因子。",[14,26230,26232],{"id":26231},"_14动作空间","1.4.动作空间",[19,26234,26235,26236,26239],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2913,26237,26238],{},"动作空间"," ，动作空间分为:",[26,26241,26242,26245],{},[29,26243,26244],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,26246,26247],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26249,26251],{"id":26250},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26253,26254],{},"由策略、价值函数、模型三部分组成",[19,26256,26257],{},"这三者组成马尔可夫决策过程",[19,26259,26260],{},[4078,26261],{"alt":78,"src":26262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[65,26264,26266],{"id":26265},"_151策略","1.5.1.策略",[19,26268,26269],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,26271,26272],{},"策略可分为两种：",[19,26274,26275],{},[4078,26276],{"alt":78,"src":26277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,26279,26280],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[65,26282,26284],{"id":26283},"_152价值函数","1.5.2.价值函数",[19,26286,26287],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,26289,26290],{},"价值函数中有一个折扣因子，类似于存款利息",[19,26292,26293],{},[4078,26294],{"alt":78,"src":26295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,26297,26298],{},"进入某个状态采取的最优动作可以通过Q函数得到",[65,26300,26302],{"id":26301},"_153模型","1.5.3.模型",[19,26304,26305],{},[4078,26306],{"alt":78,"src":26307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26309,26311],{"id":26310},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[278,26313,26314,26325],{},[281,26315,26316],{},[284,26317,26318,26322],{},[287,26319,26321],{"align":26320},"left","类型",[287,26323,26324],{"align":26320},"特点",[294,26326,26327,26337,26347,26357,26369],{},[284,26328,26329,26334],{},[299,26330,26331],{"align":26320},[2913,26332,26333],{},"基于价值的智能体",[299,26335,26336],{"align":26320},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[284,26338,26339,26344],{},[299,26340,26341],{"align":26320},[2913,26342,26343],{},"基于策略的智能体",[299,26345,26346],{"align":26320},"直接学习策略，没有学习价值函数",[284,26348,26349,26354],{},[299,26350,26351],{"align":26320},[2913,26352,26353],{},"演员-评论员智能体",[299,26355,26356],{"align":26320},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[284,26358,26359,26364],{},[299,26360,26361],{"align":26320},[2913,26362,26363],{},"有模型强化学习智能体",[299,26365,26366],{"align":26320},[4078,26367],{"alt":78,"src":26368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[284,26370,26371,26376],{},[299,26372,26373],{"align":26320},[2913,26374,26375],{},"免模型强化学习智能体",[299,26377,26378],{"align":26320},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26380,26382],{"id":26381},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26384,26385],{},"学习和规划是序列决策的两个基本问题",[19,26387,26388],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26390,26391],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26393,26394],{},"强化学习用到的库：Gym",[19,26396,26397],{},"Gym可以检验强化学习算法的优劣",[19,26399,26400,26403],{},[2913,26401,26402],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[73,26405,26409],{"className":26406,"code":26407,"language":26408,"meta":78,"style":78},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[32,26410,26411],{"__ignoreMap":78},[82,26412,26413,26416,26419,26422],{"class":84,"line":85},[82,26414,26415],{"class":2384},"pip",[82,26417,26418],{"class":96}," install",[82,26420,26421],{"class":96}," gym==",[82,26423,26424],{"class":88},"0.25.2\n",[19,26426,26427],{},"显示图形界面需要",[73,26429,26431],{"className":26406,"code":26430,"language":26408,"meta":78,"style":78},"pip install pygame\n",[32,26432,26433],{"__ignoreMap":78},[82,26434,26435,26437,26439],{"class":84,"line":85},[82,26436,26415],{"class":2384},[82,26438,26418],{"class":96},[82,26440,26441],{"class":96}," pygame\n",[19,26443,26444,26445],{},"有关Gym库的相关文档介绍：",[323,26446,26450],{"href":26447,"rel":26448},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26449],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26452,26454],{"id":26453},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26456,26457],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26459,26460],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26462,26463],{},[4078,26464],{"alt":78,"src":26465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26467,26468],{},"折扣率需要自己来设定",[19,26470,26471],{},[4078,26472],{"alt":78,"src":26473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,26475,26476],{},[29,26477,26478],{},"状态转移函数：",[19,26480,26481],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26483,26484],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26486,26487],{},[4078,26488],{"alt":78,"src":26489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,26491,26492],{"start":157},[29,26493,26494],{},"动作价值函数：",[19,26496,26497],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26499,26500],{},[4078,26501],{"alt":78,"src":26502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,26504,26505],{"start":404},[29,26506,26507],{},"最优动作价值函数：",[19,26509,26510],{},"这个函数是对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,26512,26513],{},[4078,26514],{"alt":78,"src":26515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,26517,26518],{"start":413},[29,26519,26520],{},"状态价值函数:",[19,26522,26523],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26525,26526],{},"它衡量的是“一个具体动作”的长期价值",[19,26528,26529],{},[4078,26530],{"alt":78,"src":26531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26533,26534],{},"几个价值函数之间的比较：",[19,26536,26537],{},[4078,26538],{"alt":78,"src":26539},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2671,26541,26542],{},"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":78,"searchDepth":157,"depth":157,"links":26544},[26545,26546,26547,26552,26553,26558,26559,26560],{"id":25977,"depth":157,"text":25978},{"id":26044,"depth":157,"text":26045},{"id":26081,"depth":157,"text":26082,"children":26548},[26549,26550,26551],{"id":26085,"depth":404,"text":26086},{"id":26100,"depth":404,"text":26101},{"id":26123,"depth":404,"text":26124},{"id":26231,"depth":157,"text":26232},{"id":26250,"depth":157,"text":26251,"children":26554},[26555,26556,26557],{"id":26265,"depth":404,"text":26266},{"id":26283,"depth":404,"text":26284},{"id":26301,"depth":404,"text":26302},{"id":26310,"depth":157,"text":26311},{"id":26381,"depth":157,"text":26382},{"id":26453,"depth":157,"text":26454},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25969,"description":78},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26567,"title":26568,"body":26569,"description":26576,"extension":2700,"meta":26587,"navigation":485,"path":26588,"seo":26589,"stem":26590,"__hash__":26591},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26570,"toc":26585},[26571,26574,26577,26582],[10,26572,26568],{"id":26573},"_2马尔可夫决策过程",[19,26575,26576],{},"这是强化学习的基本框架",[19,26578,26579],{},[4078,26580],{"alt":78,"src":26581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26583,26584],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":78,"searchDepth":157,"depth":157,"links":26586},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26568,"description":26576},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26593,"title":26594,"body":26595,"description":78,"extension":2700,"meta":26711,"navigation":485,"path":26712,"seo":26713,"stem":26714,"__hash__":26715},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26596,"toc":26706},[26597,26600,26604,26607,26612,26617,26620,26625,26628,26633,26636,26640,26645,26648,26653,26658,26663,26666,26670,26675,26678,26683,26688,26693,26698,26701],[10,26598,26594],{"id":26599},"_3动作价值函数",[14,26601,26603],{"id":26602},"_31dqn","3.1.DQN",[19,26605,26606],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26608,26609],{},[4078,26610],{"alt":78,"src":26611},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26613,26614],{},[4078,26615],{"alt":78,"src":26616},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26618,26619],{},"DQN算法的描述：",[19,26621,26622],{},[4078,26623],{"alt":78,"src":26624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26626,26627],{},"这里的Dense指的是全连接层",[19,26629,26630],{},[4078,26631],{"alt":78,"src":26632},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26634,26635],{},"当前观测的状态为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,26637,26639],{"id":26638},"_32dqn的举例","3.2.DQN的举例",[19,26641,26642],{},[4078,26643],{"alt":78,"src":26644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26646,26647],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26649,26650],{},[4078,26651],{"alt":78,"src":26652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26654,26655],{},[4078,26656],{"alt":78,"src":26657},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26659,26660],{},[4078,26661],{"alt":78,"src":26662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26664,26665],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26667,26669],{"id":26668},"_33td算法","3.3.TD算法",[19,26671,26672],{},[4078,26673],{"alt":78,"src":26674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26676,26677],{},"强化学习TD算法公式的粗略解释：",[19,26679,26680],{},[4078,26681],{"alt":78,"src":26682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26684,26685],{},[4078,26686],{"alt":78,"src":26687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26689,26690],{},[4078,26691],{"alt":78,"src":26692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26694,26695],{},[4078,26696],{"alt":78,"src":26697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26699,26700],{},"TD算法总结：",[19,26702,26703],{},[4078,26704],{"alt":78,"src":26705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":78,"searchDepth":157,"depth":157,"links":26707},[26708,26709,26710],{"id":26602,"depth":157,"text":26603},{"id":26638,"depth":157,"text":26639},{"id":26668,"depth":157,"text":26669},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26594,"description":78},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26717,"title":26718,"body":26719,"description":78,"extension":2700,"meta":26952,"navigation":485,"path":26953,"seo":26954,"stem":26955,"__hash__":26956},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26720,"toc":26948},[26721,26724,26728,26731,26734,26739,26744,26747,26752,26757,26760,26765,26768,26773,26776,26781,26784,26789,26792,26797,26802,26805,26810,26813,26816,26821,26824,26829,26834,26838,26841,26844,26849,26854,26857,26862,26867,26870,26875,26878,26881,26886,26889,26894,26897,26902,26907,26910,26915,26920,26923,26928,26931,26936,26939],[10,26722,26718],{"id":26723},"_4策略学习",[14,26725,26727],{"id":26726},"_41概念描述","4.1.概念描述",[19,26729,26730],{},"用神经网络（策略网络）近似策略函数",[19,26732,26733],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26735,26736],{},[4078,26737],{"alt":78,"src":26738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26740,26741],{},[4078,26742],{"alt":78,"src":26743},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26745,26746],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26748,26749],{},[4078,26750],{"alt":78,"src":26751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26753,26754],{},[4078,26755],{"alt":78,"src":26756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26758,26759],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26761,26762],{},[4078,26763],{"alt":78,"src":26764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26766,26767],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26769,26770],{},[4078,26771],{"alt":78,"src":26772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26774,26775],{},"改进theta要用到策略梯度算法",[19,26777,26778],{},[4078,26779],{"alt":78,"src":26780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26782,26783],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26785,26786],{},[4078,26787],{"alt":78,"src":26788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26790,26791],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26793,26794],{},[4078,26795],{"alt":78,"src":26796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26798,26799],{},[4078,26800],{"alt":78,"src":26801},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26803,26804],{},"梯度公式总结：",[19,26806,26807],{},[4078,26808],{"alt":78,"src":26809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26811,26812],{},"两个公式的分别应用场景：",[19,26814,26815],{},"对于离散的动作：",[19,26817,26818],{},[4078,26819],{"alt":78,"src":26820},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26822,26823],{},"对于连续的动作：",[19,26825,26826],{},[4078,26827],{"alt":78,"src":26828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26830,26831],{},[4078,26832],{"alt":78,"src":26833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26835,26837],{"id":26836},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26839,26840],{},"使用蒙特卡洛来近似计算策略梯度",[19,26842,26843],{},"蒙特卡洛法的解释如下：",[19,26845,26846],{},[4078,26847],{"alt":78,"src":26848},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26850,26851],{},[4078,26852],{"alt":78,"src":26853},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26855,26856],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26858,26859],{},[29,26860,26861],{},"方法一：reinforce算法",[19,26863,26864],{},[4078,26865],{"alt":78,"src":26866},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26868,26869],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26871,26872],{"start":157},[29,26873,26874],{},"方法二：actor-critic算法",[19,26876,26877],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26879,26880],{},"两个网络的构建：",[19,26882,26883],{},[4078,26884],{"alt":78,"src":26885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26887,26888],{},"actor网路：",[19,26890,26891],{},[4078,26892],{"alt":78,"src":26893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26895,26896],{},"critic网络",[19,26898,26899],{},[4078,26900],{"alt":78,"src":26901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26903,26904],{"start":404},[29,26905,26906],{},"网络的训练",[19,26908,26909],{},"网络描述",[19,26911,26912],{},[4078,26913],{"alt":78,"src":26914},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26916,26917],{},[4078,26918],{"alt":78,"src":26919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26921,26922],{},"TD算法更新梯度：",[19,26924,26925],{},[4078,26926],{"alt":78,"src":26927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26929,26930],{},"策略网络更新梯度：",[19,26932,26933],{},[4078,26934],{"alt":78,"src":26935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26937,26938],{},"训练整个流程的具体描述：",[19,26940,26941,26944,26945],{},[4078,26942],{"alt":78,"src":26943},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[4078,26946],{"alt":78,"src":26947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":78,"searchDepth":157,"depth":157,"links":26949},[26950,26951],{"id":26726,"depth":157,"text":26727},{"id":26836,"depth":157,"text":26837},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26718,"description":78},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26958,"title":26959,"body":26960,"description":26967,"extension":2700,"meta":27017,"navigation":485,"path":27018,"seo":27019,"stem":27020,"__hash__":27021},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26961,"toc":27013},[26962,26965,26968,26972,26975,26980,26984,26987,26992,26995,27000,27005,27008],[10,26963,26959],{"id":26964},"_5alphago算法",[19,26966,26967],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26969,26971],{"id":26970},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26973,26974],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26976,26977],{},[4078,26978],{"alt":78,"src":26979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26981,26983],{"id":26982},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26985,26986],{},"采用强化学习的方式训练策略网络",[19,26988,26989],{},[4078,26990],{"alt":78,"src":26991},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26993,26994],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26996,26997],{},[4078,26998],{"alt":78,"src":26999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,27001,27002],{},[4078,27003],{"alt":78,"src":27004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,27006,27007],{},"强化学习训练策略网络的总结：",[19,27009,27010],{},[4078,27011],{"alt":78,"src":27012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":78,"searchDepth":157,"depth":157,"links":27014},[27015,27016],{"id":26970,"depth":157,"text":26971},{"id":26982,"depth":157,"text":26983},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26959,"description":26967},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27023,"title":27024,"body":27025,"description":27032,"extension":2700,"meta":27035,"navigation":485,"path":27036,"seo":27037,"stem":27038,"__hash__":27039},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27026,"toc":27033},[27027,27030],[10,27028,27024],{"id":27029},"_6价值网络",[19,27031,27032],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":78,"searchDepth":157,"depth":157,"links":27034},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27024,"description":27032},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27041,"title":27042,"body":27043,"description":27047,"extension":2700,"meta":27048,"navigation":485,"path":27049,"seo":27050,"stem":27051,"__hash__":27052},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27044,"toc":27045},[],{"title":78,"searchDepth":157,"depth":157,"links":27046},[],"记录自己的强化学习笔记。",{"category":25962},"\u002Fwiki\u002F2025-12-04",{"title":27042,"description":27047},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27054,"title":27055,"body":27056,"description":2699,"extension":2700,"meta":27095,"navigation":485,"path":27096,"seo":27097,"stem":27098,"__hash__":27099},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27057,"toc":27093},[27058,27061,27064,27070,27073,27079,27082,27087,27090],[10,27059,27055],{"id":27060},"_1-项目概览与官方资源",[19,27062,27063],{},"官方文档：",[19,27065,27066],{},[323,27067,27068],{"href":27068,"rel":27069},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26449],[19,27071,27072],{},"官方代码仓库：",[19,27074,27075],{},[323,27076,27077],{"href":27077,"rel":27078},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26449],[19,27080,27081],{},"复现大体流程：",[19,27083,27084],{},[4078,27085],{"alt":78,"src":27086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,27088,27089],{},"本教程的目标是打通这条链路：",[19,27091,27092],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":78,"searchDepth":157,"depth":157,"links":27094},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27055,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27101,"title":27102,"body":27103,"description":2699,"extension":2700,"meta":27219,"navigation":485,"path":27220,"seo":27221,"stem":27222,"__hash__":27223},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27104,"toc":27214},[27105,27108,27112,27115,27122,27126,27129,27138,27148,27152,27182,27185,27211],[10,27106,27102],{"id":27107},"_2-环境准备与设备连接",[14,27109,27111],{"id":27110},"_21-系统与环境","2.1 系统与环境",[19,27113,27114],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,27116,27117,27118,27121],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[32,27119,27120],{},"lerobot"," 依赖。",[14,27123,27125],{"id":27124},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,27127,27128],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[73,27130,27132],{"className":26406,"code":27131,"language":26408,"meta":78,"style":78},"lerobot-find-out\n",[32,27133,27134],{"__ignoreMap":78},[82,27135,27136],{"class":84,"line":85},[82,27137,27131],{"class":2384},[19,27139,27140,27141,2973,27144,27147],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[32,27142,27143],{},"\u002Fdev\u002FttyACM0",[32,27145,27146],{},"\u002Fdev\u002FttyACM1","）。",[14,27149,27151],{"id":27150},"_23-串口授权","2.3 串口授权",[73,27153,27155],{"className":26406,"code":27154,"language":26408,"meta":78,"style":78},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[32,27156,27157,27171],{"__ignoreMap":78},[82,27158,27159,27162,27165,27168],{"class":84,"line":85},[82,27160,27161],{"class":2384},"sudo",[82,27163,27164],{"class":96}," chmod",[82,27166,27167],{"class":88}," 666",[82,27169,27170],{"class":96}," \u002Fdev\u002FttyACM0\n",[82,27172,27173,27175,27177,27179],{"class":84,"line":157},[82,27174,27161],{"class":2384},[82,27176,27164],{"class":96},[82,27178,27167],{"class":88},[82,27180,27181],{"class":96}," \u002Fdev\u002FttyACM1\n",[19,27183,27184],{},"说明：",[3755,27186,27187,27192,27198,27208],{},[29,27188,27189,27191],{},[32,27190,27161],{},"：以 root 权限执行命令。",[29,27193,27194,27197],{},[32,27195,27196],{},"chmod","：修改设备节点权限。",[29,27199,27200,27203,27204,27207],{},[32,27201,27202],{},"666","：",[32,27205,27206],{},"rw-rw-rw-","，所有用户可读写。",[29,27209,27210],{},"串口号必须替换为你机器上的真实端口。",[2671,27212,27213],{},"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":78,"searchDepth":157,"depth":157,"links":27215},[27216,27217,27218],{"id":27110,"depth":157,"text":27111},{"id":27124,"depth":157,"text":27125},{"id":27150,"depth":157,"text":27151},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27102,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27225,"title":27226,"body":27227,"description":2699,"extension":2700,"meta":27388,"navigation":485,"path":27389,"seo":27390,"stem":27391,"__hash__":27392},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27228,"toc":27384},[27229,27233,27237,27243,27246,27303,27306,27310,27313,27381],[10,27230,27232],{"id":27231},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27234,27236],{"id":27235},"_31-配置电机-id","3.1 配置电机 ID",[19,27238,27239,27240,27242],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[32,27241,2283],{},"，需要改成机械臂链路里不冲突的编号。",[19,27244,27245],{},"方式一：用 LeRobot 命令逐步写入。",[73,27247,27249],{"className":26406,"code":27248,"language":26408,"meta":78,"style":78},"# 主臂舵机配置 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",[32,27250,27251,27256,27264,27271,27276,27280,27285,27291,27298],{"__ignoreMap":78},[82,27252,27253],{"class":84,"line":85},[82,27254,27255],{"class":2828},"# 主臂舵机配置 ID\n",[82,27257,27258,27261],{"class":84,"line":157},[82,27259,27260],{"class":2384},"lerobot-setup-motors",[82,27262,27263],{"class":88}," \\\n",[82,27265,27266,27269],{"class":84,"line":404},[82,27267,27268],{"class":88},"  --teleop.type=so101_leader",[82,27270,27263],{"class":88},[82,27272,27273],{"class":84,"line":413},[82,27274,27275],{"class":88},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[82,27277,27278],{"class":84,"line":508},[82,27279,486],{"emptyLinePlaceholder":485},[82,27281,27282],{"class":84,"line":513},[82,27283,27284],{"class":2828},"# 从臂舵机配置 ID\n",[82,27286,27287,27289],{"class":84,"line":1388},[82,27288,27260],{"class":2384},[82,27290,27263],{"class":88},[82,27292,27293,27296],{"class":84,"line":1394},[82,27294,27295],{"class":88},"  --robot.type=so101_follower",[82,27297,27263],{"class":88},[82,27299,27300],{"class":84,"line":1399},[82,27301,27302],{"class":88},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,27304,27305],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27307,27309],{"id":27308},"_32-机械臂校准","3.2 机械臂校准",[19,27311,27312],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[73,27314,27316],{"className":26406,"code":27315,"language":26408,"meta":78,"style":78},"# 主臂校准\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",[32,27317,27318,27323,27330,27336,27343,27348,27352,27357,27363,27369,27376],{"__ignoreMap":78},[82,27319,27320],{"class":84,"line":85},[82,27321,27322],{"class":2828},"# 主臂校准\n",[82,27324,27325,27328],{"class":84,"line":157},[82,27326,27327],{"class":2384},"lerobot-calibrate",[82,27329,27263],{"class":88},[82,27331,27332,27334],{"class":84,"line":404},[82,27333,27268],{"class":88},[82,27335,27263],{"class":88},[82,27337,27338,27341],{"class":84,"line":413},[82,27339,27340],{"class":88},"  --teleop.port=\u002Fdev\u002FttyACM0",[82,27342,27263],{"class":88},[82,27344,27345],{"class":84,"line":508},[82,27346,27347],{"class":88},"  --teleop.id=my_awesome_leader_arm\n",[82,27349,27350],{"class":84,"line":513},[82,27351,486],{"emptyLinePlaceholder":485},[82,27353,27354],{"class":84,"line":1388},[82,27355,27356],{"class":2828},"# 从臂校准\n",[82,27358,27359,27361],{"class":84,"line":1394},[82,27360,27327],{"class":2384},[82,27362,27263],{"class":88},[82,27364,27365,27367],{"class":84,"line":1399},[82,27366,27295],{"class":88},[82,27368,27263],{"class":88},[82,27370,27371,27374],{"class":84,"line":1430},[82,27372,27373],{"class":88},"  --robot.port=\u002Fdev\u002FttyACM1",[82,27375,27263],{"class":88},[82,27377,27378],{"class":84,"line":1818},[82,27379,27380],{"class":88},"  --robot.id=my_awesome_follower_arm\n",[2671,27382,27383],{},"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":78,"searchDepth":157,"depth":157,"links":27385},[27386,27387],{"id":27235,"depth":157,"text":27236},{"id":27308,"depth":157,"text":27309},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27226,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27394,"title":27395,"body":27396,"description":2699,"extension":2700,"meta":27587,"navigation":485,"path":27588,"seo":27589,"stem":27590,"__hash__":27591},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27397,"toc":27583},[27398,27401,27405,27452,27456,27469,27532,27535,27580],[10,27399,27395],{"id":27400},"_4-遥操与相机接入",[14,27402,27404],{"id":27403},"_41-不带相机遥操","4.1 不带相机遥操",[73,27406,27408],{"className":26406,"code":27407,"language":26408,"meta":78,"style":78},"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",[32,27409,27410,27417,27423,27429,27436,27442,27448],{"__ignoreMap":78},[82,27411,27412,27415],{"class":84,"line":85},[82,27413,27414],{"class":2384},"lerobot-teleoperate",[82,27416,27263],{"class":88},[82,27418,27419,27421],{"class":84,"line":157},[82,27420,27295],{"class":88},[82,27422,27263],{"class":88},[82,27424,27425,27427],{"class":84,"line":404},[82,27426,27373],{"class":88},[82,27428,27263],{"class":88},[82,27430,27431,27434],{"class":84,"line":413},[82,27432,27433],{"class":88},"  --robot.id=my_awesome_follower_arm",[82,27435,27263],{"class":88},[82,27437,27438,27440],{"class":84,"line":508},[82,27439,27268],{"class":88},[82,27441,27263],{"class":88},[82,27443,27444,27446],{"class":84,"line":513},[82,27445,27340],{"class":88},[82,27447,27263],{"class":88},[82,27449,27450],{"class":84,"line":1388},[82,27451,27347],{"class":88},[14,27453,27455],{"id":27454},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[73,27457,27459],{"className":26406,"code":27458,"language":26408,"meta":78,"style":78},"lerobot-find-cameras opencv\n",[32,27460,27461],{"__ignoreMap":78},[82,27462,27463,27466],{"class":84,"line":85},[82,27464,27465],{"class":2384},"lerobot-find-cameras",[82,27467,27468],{"class":96}," opencv\n",[73,27470,27472],{"className":26406,"code":27471,"language":26408,"meta":78,"style":78},"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",[32,27473,27474,27480,27486,27492,27498,27508,27514,27520,27527],{"__ignoreMap":78},[82,27475,27476,27478],{"class":84,"line":85},[82,27477,27414],{"class":2384},[82,27479,27263],{"class":88},[82,27481,27482,27484],{"class":84,"line":157},[82,27483,27295],{"class":88},[82,27485,27263],{"class":88},[82,27487,27488,27490],{"class":84,"line":404},[82,27489,27373],{"class":88},[82,27491,27263],{"class":88},[82,27493,27494,27496],{"class":84,"line":413},[82,27495,27433],{"class":88},[82,27497,27263],{"class":88},[82,27499,27500,27503,27506],{"class":84,"line":508},[82,27501,27502],{"class":88},"  --robot.cameras=",[82,27504,27505],{"class":96},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[82,27507,27263],{"class":88},[82,27509,27510,27512],{"class":84,"line":513},[82,27511,27268],{"class":88},[82,27513,27263],{"class":88},[82,27515,27516,27518],{"class":84,"line":1388},[82,27517,27340],{"class":88},[82,27519,27263],{"class":88},[82,27521,27522,27525],{"class":84,"line":1394},[82,27523,27524],{"class":88},"  --teleop.id=my_awesome_leader_arm",[82,27526,27263],{"class":88},[82,27528,27529],{"class":84,"line":1399},[82,27530,27531],{"class":88},"  --display_data=true\n",[19,27533,27534],{},"相机参数说明：",[3755,27536,27537,27543,27549,27558,27568,27574],{},[29,27538,27539,27542],{},[32,27540,27541],{},"front","：相机名称。",[29,27544,27545,27548],{},[32,27546,27547],{},"type: opencv","：相机驱动类型。",[29,27550,27551,27554,27555,27147],{},[32,27552,27553],{},"index_or_path","：设备编号或设备路径（如 ",[32,27556,27557],{},"\u002Fdev\u002Fvideo4",[29,27559,27560,27563,27564,27567],{},[32,27561,27562],{},"width"," \u002F ",[32,27565,27566],{},"height","：图像分辨率。",[29,27569,27570,27573],{},[32,27571,27572],{},"fps","：采样帧率。",[29,27575,27576,27579],{},[32,27577,27578],{},"--display_data=true","：启用实时可视化。",[2671,27581,27582],{},"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":78,"searchDepth":157,"depth":157,"links":27584},[27585,27586],{"id":27403,"depth":157,"text":27404},{"id":27454,"depth":157,"text":27455},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27395,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27593,"title":27594,"body":27595,"description":2699,"extension":2700,"meta":27766,"navigation":485,"path":27767,"seo":27768,"stem":27769,"__hash__":27770},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27596,"toc":27761},[27597,27601,27605,27610,27615,27618,27660,27666,27670,27718,27723,27727,27730,27738,27743,27748,27753,27758],[10,27598,27600],{"id":27599},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27602,27604],{"id":27603},"_51-生成访问令牌","5.1 生成访问令牌",[19,27606,27607],{},[4078,27608],{"alt":78,"src":27609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27611,27612],{},[4078,27613],{"alt":78,"src":27614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27616,27617],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[73,27619,27621],{"className":26406,"code":27620,"language":26408,"meta":78,"style":78},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[32,27622,27623,27636],{"__ignoreMap":78},[82,27624,27625,27628,27631,27633],{"class":84,"line":85},[82,27626,27627],{"class":112},"export",[82,27629,27630],{"class":92}," HF_TOKEN",[82,27632,113],{"class":112},[82,27634,27635],{"class":96},"\"your_huggingface_token\"\n",[82,27637,27638,27641,27644,27647,27650,27652,27655,27657],{"class":84,"line":157},[82,27639,27640],{"class":2384},"hf",[82,27642,27643],{"class":96}," auth",[82,27645,27646],{"class":96}," login",[82,27648,27649],{"class":88}," --token",[82,27651,12315],{"class":96},[82,27653,27654],{"class":92},"$HF_TOKEN",[82,27656,216],{"class":96},[82,27658,27659],{"class":88}," --add-to-git-credential\n",[19,27661,27662,27665],{},[32,27663,27664],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27667,27669],{"id":27668},"_52-验证登录","5.2 验证登录",[73,27671,27673],{"className":26406,"code":27672,"language":26408,"meta":78,"style":78},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[32,27674,27675,27706],{"__ignoreMap":78},[82,27676,27677,27680,27682,27685,27687,27689,27692,27695,27698,27701,27704],{"class":84,"line":85},[82,27678,27679],{"class":92},"HF_USER",[82,27681,113],{"class":112},[82,27683,27684],{"class":92},"$(",[82,27686,27640],{"class":2384},[82,27688,27643],{"class":96},[82,27690,27691],{"class":96}," whoami",[82,27693,27694],{"class":112}," |",[82,27696,27697],{"class":2384}," head",[82,27699,27700],{"class":88}," -n",[82,27702,27703],{"class":88}," 1",[82,27705,119],{"class":92},[82,27707,27708,27711,27713,27716],{"class":84,"line":157},[82,27709,27710],{"class":88},"echo",[82,27712,12315],{"class":96},[82,27714,27715],{"class":92},"$HF_USER",[82,27717,239],{"class":96},[19,27719,27720],{},[4078,27721],{"alt":78,"src":27722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27724,27726],{"id":27725},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27728,27729],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3755,27731,27732,27735],{},[29,27733,27734],{},"Dataset Repo（用于上传演示数据）",[29,27736,27737],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27739,27740],{},[4078,27741],{"alt":78,"src":27742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27744,27745],{},[4078,27746],{"alt":78,"src":27747},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27749,27750],{},[4078,27751],{"alt":78,"src":27752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27754,27755],{},[4078,27756],{"alt":78,"src":27757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2671,27759,27760],{},"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":78,"searchDepth":157,"depth":157,"links":27762},[27763,27764,27765],{"id":27603,"depth":157,"text":27604},{"id":27668,"depth":157,"text":27669},{"id":27725,"depth":157,"text":27726},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27594,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27772,"title":27773,"body":27774,"description":2699,"extension":2700,"meta":27971,"navigation":485,"path":27972,"seo":27973,"stem":27974,"__hash__":27975},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27775,"toc":27966},[27776,27780,27784,27880,27888,27893,27897,27913,27916,27920,27963],[10,27777,27779],{"id":27778},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27781,27783],{"id":27782},"_61-录制示教数据","6.1 录制示教数据",[73,27785,27787],{"className":26406,"code":27786,"language":26408,"meta":78,"style":78},"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",[32,27788,27789,27796,27802,27808,27814,27823,27829,27835,27841,27848,27858,27865,27875],{"__ignoreMap":78},[82,27790,27791,27794],{"class":84,"line":85},[82,27792,27793],{"class":2384},"lerobot-record",[82,27795,27263],{"class":88},[82,27797,27798,27800],{"class":84,"line":157},[82,27799,27295],{"class":88},[82,27801,27263],{"class":88},[82,27803,27804,27806],{"class":84,"line":404},[82,27805,27373],{"class":88},[82,27807,27263],{"class":88},[82,27809,27810,27812],{"class":84,"line":413},[82,27811,27433],{"class":88},[82,27813,27263],{"class":88},[82,27815,27816,27818,27821],{"class":84,"line":508},[82,27817,27502],{"class":88},[82,27819,27820],{"class":96},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[82,27822,27263],{"class":88},[82,27824,27825,27827],{"class":84,"line":513},[82,27826,27268],{"class":88},[82,27828,27263],{"class":88},[82,27830,27831,27833],{"class":84,"line":1388},[82,27832,27340],{"class":88},[82,27834,27263],{"class":88},[82,27836,27837,27839],{"class":84,"line":1394},[82,27838,27524],{"class":88},[82,27840,27263],{"class":88},[82,27842,27843,27846],{"class":84,"line":1399},[82,27844,27845],{"class":88},"  --display_data=true",[82,27847,27263],{"class":88},[82,27849,27850,27853,27856],{"class":84,"line":1430},[82,27851,27852],{"class":88},"  --dataset.repo_id=",[82,27854,27855],{"class":96},"\"Embodied-AI-6\u002Fso101_test\"",[82,27857,27263],{"class":88},[82,27859,27860,27863],{"class":84,"line":1818},[82,27861,27862],{"class":88},"  --dataset.num_episodes=10",[82,27864,27263],{"class":88},[82,27866,27867,27870,27873],{"class":84,"line":2082},[82,27868,27869],{"class":88},"  --dataset.single_task=",[82,27871,27872],{"class":96},"\"Grab the green cube\"",[82,27874,27263],{"class":88},[82,27876,27877],{"class":84,"line":2233},[82,27878,27879],{"class":88},"  --resume=true\n",[3755,27881,27882],{},[29,27883,27884,27887],{},[32,27885,27886],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27889,27890],{},[4078,27891],{"alt":78,"src":27892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27894,27896],{"id":27895},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[73,27898,27900],{"className":26406,"code":27899,"language":26408,"meta":78,"style":78},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[32,27901,27902],{"__ignoreMap":78},[82,27903,27904,27907,27910],{"class":84,"line":85},[82,27905,27906],{"class":2384},"rm",[82,27908,27909],{"class":88}," -rf",[82,27911,27912],{"class":96}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27914,27915],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27917,27919],{"id":27918},"_63-回放指定-episode","6.3 回放指定 episode",[73,27921,27923],{"className":26406,"code":27922,"language":26408,"meta":78,"style":78},"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",[32,27924,27925,27932,27938,27944,27950,27958],{"__ignoreMap":78},[82,27926,27927,27930],{"class":84,"line":85},[82,27928,27929],{"class":2384},"lerobot-replay",[82,27931,27263],{"class":88},[82,27933,27934,27936],{"class":84,"line":157},[82,27935,27295],{"class":88},[82,27937,27263],{"class":88},[82,27939,27940,27942],{"class":84,"line":404},[82,27941,27373],{"class":88},[82,27943,27263],{"class":88},[82,27945,27946,27948],{"class":84,"line":413},[82,27947,27433],{"class":88},[82,27949,27263],{"class":88},[82,27951,27952,27954,27956],{"class":84,"line":508},[82,27953,27852],{"class":88},[82,27955,27855],{"class":96},[82,27957,27263],{"class":88},[82,27959,27960],{"class":84,"line":513},[82,27961,27962],{"class":88},"  --dataset.episode=0\n",[2671,27964,27965],{},"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":78,"searchDepth":157,"depth":157,"links":27967},[27968,27969,27970],{"id":27782,"depth":157,"text":27783},{"id":27895,"depth":157,"text":27896},{"id":27918,"depth":157,"text":27919},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27773,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27977,"title":27978,"body":27979,"description":2699,"extension":2700,"meta":28107,"navigation":485,"path":28108,"seo":28109,"stem":28110,"__hash__":28111},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27980,"toc":28105},[27981,27985,28048,28051,28098,28103],[10,27982,27984],{"id":27983},"_7-act-模型训练","7. ACT 模型训练",[73,27986,27988],{"className":26406,"code":27987,"language":26408,"meta":78,"style":78},"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",[32,27989,27990,27997,28005,28012,28019,28026,28033,28040],{"__ignoreMap":78},[82,27991,27992,27995],{"class":84,"line":85},[82,27993,27994],{"class":2384},"lerobot-train",[82,27996,27263],{"class":88},[82,27998,27999,28001,28003],{"class":84,"line":157},[82,28000,27852],{"class":88},[82,28002,27855],{"class":96},[82,28004,27263],{"class":88},[82,28006,28007,28010],{"class":84,"line":404},[82,28008,28009],{"class":88},"  --policy.type=act",[82,28011,27263],{"class":88},[82,28013,28014,28017],{"class":84,"line":413},[82,28015,28016],{"class":88},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[82,28018,27263],{"class":88},[82,28020,28021,28024],{"class":84,"line":508},[82,28022,28023],{"class":88},"  --job_name=act_so101_test",[82,28025,27263],{"class":88},[82,28027,28028,28031],{"class":84,"line":513},[82,28029,28030],{"class":88},"  --policy.device=cuda",[82,28032,27263],{"class":88},[82,28034,28035,28038],{"class":84,"line":1388},[82,28036,28037],{"class":88},"  --wandb.enable=false",[82,28039,27263],{"class":88},[82,28041,28042,28045],{"class":84,"line":1394},[82,28043,28044],{"class":88},"  --policy.repo_id=",[82,28046,28047],{"class":96},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,28049,28050],{},"参数说明：",[3755,28052,28053,28059,28065,28071,28077,28086,28092],{},[29,28054,28055,28058],{},[32,28056,28057],{},"--dataset.repo_id","：训练数据集仓库。",[29,28060,28061,28064],{},[32,28062,28063],{},"--policy.type=act","：策略模型类型为 ACT。",[29,28066,28067,28070],{},[32,28068,28069],{},"--output_dir","：本地训练输出目录。",[29,28072,28073,28076],{},[32,28074,28075],{},"--job_name","：训练任务名称。",[29,28078,28079,28082,28083,27147],{},[32,28080,28081],{},"--policy.device","：训练设备（如 ",[32,28084,28085],{},"cuda",[29,28087,28088,28091],{},[32,28089,28090],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,28093,28094,28097],{},[32,28095,28096],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,28099,28100],{},[4078,28101],{"alt":78,"src":28102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2671,28104,27965],{},{"title":78,"searchDepth":157,"depth":157,"links":28106},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27978,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28113,"title":28114,"body":28115,"description":2699,"extension":2700,"meta":28202,"navigation":485,"path":28203,"seo":28204,"stem":28205,"__hash__":28206},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28116,"toc":28200},[28117,28120,28123,28190,28198],[10,28118,28114],{"id":28119},"_8-策略部署与自动采集",[19,28121,28122],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[73,28124,28126],{"className":26406,"code":28125,"language":26408,"meta":78,"style":78},"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",[32,28127,28128,28134,28140,28146,28154,28160,28167,28175,28183],{"__ignoreMap":78},[82,28129,28130,28132],{"class":84,"line":85},[82,28131,27793],{"class":2384},[82,28133,27263],{"class":88},[82,28135,28136,28138],{"class":84,"line":157},[82,28137,27295],{"class":88},[82,28139,27263],{"class":88},[82,28141,28142,28144],{"class":84,"line":404},[82,28143,27373],{"class":88},[82,28145,27263],{"class":88},[82,28147,28148,28150,28152],{"class":84,"line":413},[82,28149,27502],{"class":88},[82,28151,27820],{"class":96},[82,28153,27263],{"class":88},[82,28155,28156,28158],{"class":84,"line":508},[82,28157,27433],{"class":88},[82,28159,27263],{"class":88},[82,28161,28162,28165],{"class":84,"line":513},[82,28163,28164],{"class":88},"  --display_data=false",[82,28166,27263],{"class":88},[82,28168,28169,28171,28173],{"class":84,"line":1388},[82,28170,27852],{"class":88},[82,28172,27855],{"class":96},[82,28174,27263],{"class":88},[82,28176,28177,28179,28181],{"class":84,"line":1394},[82,28178,27869],{"class":88},[82,28180,27872],{"class":96},[82,28182,27263],{"class":88},[82,28184,28185,28188],{"class":84,"line":1399},[82,28186,28187],{"class":88},"  --policy.path=",[82,28189,28047],{"class":96},[3755,28191,28192],{},[29,28193,28194,28197],{},[32,28195,28196],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2671,28199,27965],{},{"title":78,"searchDepth":157,"depth":157,"links":28201},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28114,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28208,"title":28209,"body":28210,"description":2699,"extension":2700,"meta":28239,"navigation":485,"path":28240,"seo":28241,"stem":28242,"__hash__":28243},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28211,"toc":28237},[28212,28216,28219,28225,28228,28234],[10,28213,28215],{"id":28214},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28217,28218],{},"项目地址：",[19,28220,28221],{},[323,28222,28223],{"href":28223,"rel":28224},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26449],[19,28226,28227],{},"参考教程：",[19,28229,28230],{},[323,28231,28232],{"href":28232,"rel":28233},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26449],[19,28235,28236],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":78,"searchDepth":157,"depth":157,"links":28238},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28209,"description":2699},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28245,"title":28246,"body":28247,"description":28251,"extension":2700,"meta":28252,"navigation":485,"path":28253,"seo":28254,"stem":28255,"__hash__":28256},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28248,"toc":28249},[],{"title":78,"searchDepth":157,"depth":157,"links":28250},[],"act复现",{"category":25962},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28246,"description":28251},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28258,"title":28259,"body":28260,"description":78,"extension":2700,"meta":28561,"navigation":485,"path":28562,"seo":28563,"stem":28564,"__hash__":28565},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28261,"toc":28553},[28262,28265,28269,28279,28286,28293,28296,28303,28306,28309,28313,28325,28329,28375,28378,28381,28384,28387,28390,28394,28432,28438,28442,28495,28500,28503,28506,28511,28514,28519,28522,28525,28529,28532,28535,28539],[10,28263,28259],{"id":28264},"_1简介",[65,28266,28268],{"id":28267},"_11什么是-docker","1.1什么是 Docker？",[19,28270,28271,28272,28275,28276],{},"Docker 是一个开源的 ",[2913,28273,28274],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2913,28277,28278],{},"一次构建，到处运行。",[19,28280,28281,28282,28285],{},"“ ",[2913,28283,28284],{},"一次构建，到处运行"," ”也就是说：",[26,28287,28288],{},[29,28289,28290],{},[2913,28291,28292],{},"之前：",[19,28294,28295],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,28297,28298],{},[29,28299,28300],{},[2913,28301,28302],{},"使用docker后：",[19,28304,28305],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,28307,28308],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[65,28310,28312],{"id":28311},"_12它是怎么工作的","1.2.它是怎么工作的？",[3755,28314,28315,28318],{},[29,28316,28317],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,28319,28320,28321,28324],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2913,28322,28323],{},"无论在哪运行都一样稳定"," 。",[65,28326,28328],{"id":28327},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[278,28330,28331,28341],{},[281,28332,28333],{},[284,28334,28335,28338],{},[287,28336,28337],{"align":26320},"概念",[287,28339,28340],{"align":26320},"解释",[294,28342,28343,28351,28359,28367],{},[284,28344,28345,28348],{},[299,28346,28347],{"align":26320},"镜像",[299,28349,28350],{"align":26320},"Image，运行容器的模板，像是一个应用快照",[284,28352,28353,28356],{},[299,28354,28355],{"align":26320},"容器",[299,28357,28358],{"align":26320},"Container，运行中的镜像实例，有自己的文件系统、网络等",[284,28360,28361,28364],{},[299,28362,28363],{"align":26320},"Dockerfile",[299,28365,28366],{"align":26320},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[284,28368,28369,28372],{},[299,28370,28371],{"align":26320},"仓库",[299,28373,28374],{"align":26320},"Registry，存放镜像的地方，比如 Docker Hub",[19,28376,28377],{},"抽象化理解:",[19,28379,28380],{},"Docker镜像≈C++类",[19,28382,28383],{},"Docker容器≈C++类实例(即对象)",[19,28385,28386],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28388,28389],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[65,28391,28393],{"id":28392},"_14类比理解","1.4.类比理解",[278,28395,28396,28406],{},[281,28397,28398],{},[284,28399,28400,28403],{},[287,28401,28402],{"align":26320},"传统部署",[287,28404,28405],{"align":26320},"Docker部署",[294,28407,28408,28416,28424],{},[284,28409,28410,28413],{},[299,28411,28412],{"align":26320},"手动安装依赖、调试版本不一致问题",[299,28414,28415],{"align":26320},"一次打包环境和代码",[284,28417,28418,28421],{},[299,28419,28420],{"align":26320},"程序“裸奔”跑在系统上",[299,28422,28423],{"align":26320},"程序“穿着容器”隔离运行",[284,28425,28426,28429],{},[299,28427,28428],{"align":26320},"容易“在我电脑上能跑”",[299,28430,28431],{"align":26320},"保证“无论在哪都能跑”",[19,28433,28434,28435],{},"就像快递包裹： ",[2913,28436,28437],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[65,28439,28441],{"id":28440},"_15docker-的核心优势","1.5.Docker 的核心优势",[278,28443,28444,28453],{},[281,28445,28446],{},[284,28447,28448,28451],{},[287,28449,28450],{"align":26320},"优势",[287,28452,292],{"align":26320},[294,28454,28455,28463,28471,28479,28487],{},[284,28456,28457,28460],{},[299,28458,28459],{"align":26320},"轻量级",[299,28461,28462],{"align":26320},"基于系统内核共享，启动速度快，占资源少",[284,28464,28465,28468],{},[299,28466,28467],{"align":26320},"跨平台",[299,28469,28470],{"align":26320},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[284,28472,28473,28476],{},[299,28474,28475],{"align":26320},"易于迁移部署",[299,28477,28478],{"align":26320},"应用和环境一起封装，不怕依赖不一致",[284,28480,28481,28484],{},[299,28482,28483],{"align":26320},"易于版本控制",[299,28485,28486],{"align":26320},"镜像版本可控，支持回滚",[284,28488,28489,28492],{},[299,28490,28491],{"align":26320},"生态丰富",[299,28493,28494],{"align":26320},"Docker Hub 上有成千上万的现成镜像可用",[26,28496,28497],{},[29,28498,28499],{},"在Linux上可以几乎实现无性能损失。",[19,28501,28502],{},"docker里的发行版和本机共用Linux内核。",[19,28504,28505],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,28507,28508],{},[29,28509,28510],{},"可以快速部署在绝大多数Linux发行版",[19,28512,28513],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,28515,28516],{},[29,28517,28518],{},"配置环境简单",[19,28520,28521],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28523,28524],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,28526,28527],{},[29,28528,28491],{},[19,28530,28531],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28533,28534],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[65,28536,28538],{"id":28537},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3755,28540,28541,28544,28547,28550],{},[29,28542,28543],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,28545,28546],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,28548,28549],{},"微服务架构：每个服务一个容器，灵活组合",[29,28551,28552],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":78,"searchDepth":157,"depth":157,"links":28554},[28555,28556,28557,28558,28559,28560],{"id":28267,"depth":404,"text":28268},{"id":28311,"depth":404,"text":28312},{"id":28327,"depth":404,"text":28328},{"id":28392,"depth":404,"text":28393},{"id":28440,"depth":404,"text":28441},{"id":28537,"depth":404,"text":28538},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28259,"description":78},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28567,"title":28568,"body":28569,"description":78,"extension":2700,"meta":29301,"navigation":485,"path":29302,"seo":29303,"stem":29304,"__hash__":29305},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28570,"toc":29296},[28571,28574,28578,28581,28584,28590,28596,28600,28609,28612,28668,28671,28722,28725,28808,28811,28848,28852,28863,28876,28883,28886,28966,28969,29019,29022,29045,29049,29056,29059,29075,29081,29084,29100,29106,29109,29125,29139,29145,29165,29171,29174,29186,29192,29195,29209,29215,29218,29238,29243,29246,29249,29253,29256,29259,29262,29269,29272,29275,29278,29283,29288,29293],[10,28572,28568],{"id":28573},"_2安装docker",[65,28575,28577],{"id":28576},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28579,28580],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28582,28583],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28585,28586],{},[323,28587,28588],{"href":28588,"rel":28589},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26449],[19,28591,28592],{},[323,28593,28594],{"href":28594,"rel":28595},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26449],[24582,28597,28599],{"id":28598},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28601,28602,28603,28608],{},"以下内容根据 ",[323,28604,28607],{"href":28605,"rel":28606},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26449],"官方文档"," 修改而来。",[19,28610,28611],{},"如果你过去安装过 docker，先删掉：",[73,28613,28615],{"className":26406,"code":28614,"language":26408,"meta":78,"style":78},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[32,28616,28617],{"__ignoreMap":78},[82,28618,28619,28621,28624,28626,28629,28632,28635,28638,28641,28644,28647,28650,28653,28656,28659,28662,28665],{"class":84,"line":85},[82,28620,597],{"class":112},[82,28622,28623],{"class":92}," pkg ",[82,28625,603],{"class":112},[82,28627,28628],{"class":96}," docker.io",[82,28630,28631],{"class":96}," docker-doc",[82,28633,28634],{"class":96}," docker-compose",[82,28636,28637],{"class":96}," docker-compose-v2",[82,28639,28640],{"class":96}," podman-docker",[82,28642,28643],{"class":96}," containerd",[82,28645,28646],{"class":96}," runc",[82,28648,28649],{"class":92},"; ",[82,28651,28652],{"class":112},"do",[82,28654,28655],{"class":2384}," sudo",[82,28657,28658],{"class":96}," apt-get",[82,28660,28661],{"class":96}," remove",[82,28663,28664],{"class":92}," $pkg; ",[82,28666,28667],{"class":112},"done\n",[19,28669,28670],{},"首先安装依赖和GPG：",[73,28672,28676],{"className":28673,"code":28674,"language":28675,"meta":78,"style":78},"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",[32,28677,28678,28683,28688,28693,28698,28703,28708,28712,28717],{"__ignoreMap":78},[82,28679,28680],{"class":84,"line":85},[82,28681,28682],{},"# Add Docker's official GPG key:\n",[82,28684,28685],{"class":84,"line":157},[82,28686,28687],{},"sudo apt-get update\n",[82,28689,28690],{"class":84,"line":404},[82,28691,28692],{},"sudo apt-get install ca-certificates curl\n",[82,28694,28695],{"class":84,"line":413},[82,28696,28697],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[82,28699,28700],{"class":84,"line":508},[82,28701,28702],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[82,28704,28705],{"class":84,"line":513},[82,28706,28707],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[82,28709,28710],{"class":84,"line":1388},[82,28711,486],{"emptyLinePlaceholder":485},[82,28713,28714],{"class":84,"line":1394},[82,28715,28716],{},"# 如果上面这行报错就弄下面这行\n",[82,28718,28719],{"class":84,"line":1399},[82,28720,28721],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28723,28724],{},"信任 Docker 的 GPG 公钥并添加仓库：",[73,28726,28728],{"className":26406,"code":28727,"language":26408,"meta":78,"style":78},"# 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",[32,28729,28730,28735,28741,28758,28791],{"__ignoreMap":78},[82,28731,28732],{"class":84,"line":85},[82,28733,28734],{"class":2828},"# Add the repository to Apt sources:\n",[82,28736,28737,28739],{"class":84,"line":157},[82,28738,27710],{"class":88},[82,28740,27263],{"class":88},[82,28742,28743,28746,28749,28752,28755],{"class":84,"line":404},[82,28744,28745],{"class":96},"  \"deb [arch=$(",[82,28747,28748],{"class":2384},"dpkg",[82,28750,28751],{"class":88}," --print-architecture",[82,28753,28754],{"class":96},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[82,28756,28757],{"class":88},"\\\n",[82,28759,28760,28763,28765,28767,28770,28773,28775,28777,28780,28782,28784,28787,28789],{"class":84,"line":413},[82,28761,28762],{"class":96},"  \"",[82,28764,27684],{"class":92},[82,28766,233],{"class":88},[82,28768,28769],{"class":96}," \u002Fetc\u002Fos-release",[82,28771,28772],{"class":92}," && ",[82,28774,27710],{"class":88},[82,28776,12315],{"class":96},[82,28778,28779],{"class":92},"$VERSION_CODENAME",[82,28781,216],{"class":96},[82,28783,3187],{"class":92},[82,28785,28786],{"class":96},"\" stable\"",[82,28788,27694],{"class":112},[82,28790,27263],{"class":88},[82,28792,28793,28796,28799,28802,28805],{"class":84,"line":508},[82,28794,28795],{"class":2384},"  sudo",[82,28797,28798],{"class":96}," tee",[82,28800,28801],{"class":96}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[82,28803,28804],{"class":112}," >",[82,28806,28807],{"class":96}," \u002Fdev\u002Fnull\n",[19,28809,28810],{},"最后安装",[73,28812,28814],{"className":26406,"code":28813,"language":26408,"meta":78,"style":78},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,28815,28816,28825],{"__ignoreMap":78},[82,28817,28818,28820,28822],{"class":84,"line":85},[82,28819,27161],{"class":2384},[82,28821,28658],{"class":96},[82,28823,28824],{"class":96}," update\n",[82,28826,28827,28829,28831,28833,28836,28839,28842,28845],{"class":84,"line":157},[82,28828,27161],{"class":2384},[82,28830,28658],{"class":96},[82,28832,26418],{"class":96},[82,28834,28835],{"class":96}," docker-ce",[82,28837,28838],{"class":96}," docker-ce-cli",[82,28840,28841],{"class":96}," containerd.io",[82,28843,28844],{"class":96}," docker-buildx-plugin",[82,28846,28847],{"class":96}," docker-compose-plugin\n",[24582,28849,28851],{"id":28850},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28853,28854,28855,28858,28859,28862],{},"查看自己自己包管理工具版本（dnf是 ",[2913,28856,28857],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2913,28860,28861],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[73,28864,28866],{"className":26406,"code":28865,"language":26408,"meta":78,"style":78},"dnf --version\n",[32,28867,28868],{"__ignoreMap":78},[82,28869,28870,28873],{"class":84,"line":85},[82,28871,28872],{"class":2384},"dnf",[82,28874,28875],{"class":88}," --version\n",[19,28877,28602,28878,28882],{},[323,28879,28607],{"href":28880,"rel":28881},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26449]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28884,28885],{},"如果你之前安装过 docker，请先删掉",[73,28887,28889],{"className":26406,"code":28888,"language":26408,"meta":78,"style":78},"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",[32,28890,28891,28905,28912,28919,28926,28933,28940,28947,28954,28961],{"__ignoreMap":78},[82,28892,28893,28895,28898,28900,28903],{"class":84,"line":85},[82,28894,27161],{"class":2384},[82,28896,28897],{"class":96}," dnf",[82,28899,28661],{"class":96},[82,28901,28902],{"class":96}," docker",[82,28904,27263],{"class":88},[82,28906,28907,28910],{"class":84,"line":157},[82,28908,28909],{"class":96},"                  docker-client",[82,28911,27263],{"class":88},[82,28913,28914,28917],{"class":84,"line":404},[82,28915,28916],{"class":96},"                  docker-client-latest",[82,28918,27263],{"class":88},[82,28920,28921,28924],{"class":84,"line":413},[82,28922,28923],{"class":96},"                  docker-common",[82,28925,27263],{"class":88},[82,28927,28928,28931],{"class":84,"line":508},[82,28929,28930],{"class":96},"                  docker-latest",[82,28932,27263],{"class":88},[82,28934,28935,28938],{"class":84,"line":513},[82,28936,28937],{"class":96},"                  docker-latest-logrotate",[82,28939,27263],{"class":88},[82,28941,28942,28945],{"class":84,"line":1388},[82,28943,28944],{"class":96},"                  docker-logrotate",[82,28946,27263],{"class":88},[82,28948,28949,28952],{"class":84,"line":1394},[82,28950,28951],{"class":96},"                  docker-selinux",[82,28953,27263],{"class":88},[82,28955,28956,28959],{"class":84,"line":1399},[82,28957,28958],{"class":96},"                  docker-engine-selinux",[82,28960,27263],{"class":88},[82,28962,28963],{"class":84,"line":1430},[82,28964,28965],{"class":96},"                  docker-engine\n",[19,28967,28968],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[73,28970,28972],{"className":26406,"code":28971,"language":26408,"meta":78,"style":78},"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",[32,28973,28974,28988,29003],{"__ignoreMap":78},[82,28975,28976,28978,28980,28983,28985],{"class":84,"line":85},[82,28977,27161],{"class":2384},[82,28979,28897],{"class":96},[82,28981,28982],{"class":88}," -y",[82,28984,26418],{"class":96},[82,28986,28987],{"class":96}," dnf-plugins-core\n",[82,28989,28990,28992,28994,28997,29000],{"class":84,"line":157},[82,28991,27161],{"class":2384},[82,28993,28897],{"class":96},[82,28995,28996],{"class":96}," config-manager",[82,28998,28999],{"class":96}," addrepo",[82,29001,29002],{"class":88}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[82,29004,29005,29007,29010,29013,29016],{"class":84,"line":404},[82,29006,27161],{"class":2384},[82,29008,29009],{"class":96}," sed",[82,29011,29012],{"class":88}," -i",[82,29014,29015],{"class":96}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[82,29017,29018],{"class":96}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,29020,29021],{},"最后安装：",[73,29023,29025],{"className":26406,"code":29024,"language":26408,"meta":78,"style":78},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,29026,29027],{"__ignoreMap":78},[82,29028,29029,29031,29033,29035,29037,29039,29041,29043],{"class":84,"line":85},[82,29030,27161],{"class":2384},[82,29032,28897],{"class":96},[82,29034,26418],{"class":96},[82,29036,28835],{"class":96},[82,29038,28838],{"class":96},[82,29040,28841],{"class":96},[82,29042,28844],{"class":96},[82,29044,28847],{"class":96},[65,29046,29048],{"id":29047},"_22配置环境","2.2.配置环境",[24582,29050,29052,29055],{"id":29051},"_221检查-docker-服务状态",[2913,29053,29054],{},"2.2.1.检查 Docker 服务状态"," ：",[19,29057,29058],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[73,29060,29062],{"className":26406,"code":29061,"language":26408,"meta":78,"style":78},"systemctl status docker\n",[32,29063,29064],{"__ignoreMap":78},[82,29065,29066,29069,29072],{"class":84,"line":85},[82,29067,29068],{"class":2384},"systemctl",[82,29070,29071],{"class":96}," status",[82,29073,29074],{"class":96}," docker\n",[24582,29076,29078,29055],{"id":29077},"_222启动-docker-服务",[2913,29079,29080],{},"2.2.2.启动 Docker 服务",[19,29082,29083],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[73,29085,29087],{"className":26406,"code":29086,"language":26408,"meta":78,"style":78},"sudo systemctl start docker\n",[32,29088,29089],{"__ignoreMap":78},[82,29090,29091,29093,29096,29098],{"class":84,"line":85},[82,29092,27161],{"class":2384},[82,29094,29095],{"class":96}," systemctl",[82,29097,6779],{"class":96},[82,29099,29074],{"class":96},[24582,29101,29103,29055],{"id":29102},"_223设置-docker-开机自启",[2913,29104,29105],{},"2.2.3.设置 Docker 开机自启",[19,29107,29108],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[73,29110,29112],{"className":26406,"code":29111,"language":26408,"meta":78,"style":78},"sudo systemctl enable docker\n",[32,29113,29114],{"__ignoreMap":78},[82,29115,29116,29118,29120,29123],{"class":84,"line":85},[82,29117,27161],{"class":2384},[82,29119,29095],{"class":96},[82,29121,29122],{"class":96}," enable",[82,29124,29074],{"class":96},[24582,29126,29128,16382,29131,16382,29136,29055],{"id":29127},"_224将用户添加到-docker-组",[2913,29129,29130],{},"2.2.4.将用户添加到",[2913,29132,29133],{},[32,29134,29135],{},"docker",[2913,29137,29138],{},"组",[19,29140,29141,29142,29144],{},"使用以下命令将当前用户添加到 ",[32,29143,29135],{}," 组：",[73,29146,29148],{"className":26406,"code":29147,"language":26408,"meta":78,"style":78},"sudo usermod -aG docker $USER\n",[32,29149,29150],{"__ignoreMap":78},[82,29151,29152,29154,29157,29160,29162],{"class":84,"line":85},[82,29153,27161],{"class":2384},[82,29155,29156],{"class":96}," usermod",[82,29158,29159],{"class":88}," -aG",[82,29161,28902],{"class":96},[82,29163,29164],{"class":92}," $USER\n",[24582,29166,29168,29055],{"id":29167},"_225退出并重新登录",[2913,29169,29170],{},"2.2.5.退出并重新登录",[19,29172,29173],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[73,29175,29177],{"className":26406,"code":29176,"language":26408,"meta":78,"style":78},"newgrp docker\n",[32,29178,29179],{"__ignoreMap":78},[82,29180,29181,29184],{"class":84,"line":85},[82,29182,29183],{"class":2384},"newgrp",[82,29185,29074],{"class":96},[24582,29187,29189,29055],{"id":29188},"_226重新启动-docker-服务如果需要",[2913,29190,29191],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,29193,29194],{},"确保 Docker 服务正在运行，可以使用以下命令：",[73,29196,29197],{"className":26406,"code":29086,"language":26408,"meta":78,"style":78},[32,29198,29199],{"__ignoreMap":78},[82,29200,29201,29203,29205,29207],{"class":84,"line":85},[82,29202,27161],{"class":2384},[82,29204,29095],{"class":96},[82,29206,6779],{"class":96},[82,29208,29074],{"class":96},[24582,29210,29212,29055],{"id":29211},"_227重启电脑后检查-docker-服务状态",[2913,29213,29214],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29216,29217],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[73,29219,29221],{"className":26406,"code":29220,"language":26408,"meta":78,"style":78},"sudo reboot\nsystemctl status docker\n",[32,29222,29223,29230],{"__ignoreMap":78},[82,29224,29225,29227],{"class":84,"line":85},[82,29226,27161],{"class":2384},[82,29228,29229],{"class":96}," reboot\n",[82,29231,29232,29234,29236],{"class":84,"line":157},[82,29233,29068],{"class":2384},[82,29235,29071],{"class":96},[82,29237,29074],{"class":96},[19,29239,29240],{},[4078,29241],{"alt":78,"src":29242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29244,29245],{},"第三行显示enabled说明开机自启动成功",[19,29247,29248],{},"按q退出",[65,29250,29252],{"id":29251},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29254,29255],{},"优先使用linux来使用docker是比较好的",[19,29257,29258],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29260,29261],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29263,29264,29265],{},"官方下载安装:",[323,29266,29267],{"href":29267,"rel":29268},"https:\u002F\u002Fwww.docker.com\u002F",[26449],[19,29270,29271],{},"Windows的Docker显卡直通与USB直通:",[19,29273,29274],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29276,29277],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,29279,29280],{},[4078,29281],{"alt":78,"src":29282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,29284,29285],{},[4078,29286],{"alt":78,"src":29287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,29289,29290],{},[4078,29291],{"alt":78,"src":29292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2671,29294,29295],{},"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":78,"searchDepth":157,"depth":157,"links":29297},[29298,29299,29300],{"id":28576,"depth":404,"text":28577},{"id":29047,"depth":404,"text":29048},{"id":29251,"depth":404,"text":29252},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28568,"description":78},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29307,"title":29308,"body":29309,"description":29316,"extension":2700,"meta":30009,"navigation":485,"path":30010,"seo":30011,"stem":30012,"__hash__":30013},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29310,"toc":30003},[29311,29314,29317,29321,29326,29331,29334,29362,29367,29376,29379,29384,29388,29395,29400,29406,29410,29413,29417,29422,29514,29519,29537,29542,29563,29568,29584,29588,29593,29622,29627,29673,29678,29722,29730,29747,29752,29768,29773,29787,29790,29793,29796,29799,29828,29831,29836,29840,29843,29846,29852,29855,29858,29861,29923,29930,29935,29938,29956,29960,29963,29980,29983,29986,30000],[10,29312,29308],{"id":29313},"_3docker直通",[19,29315,29316],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[65,29318,29320],{"id":29319},"_31usb直通","3.1.USB直通",[19,29322,29323],{},[4078,29324],{"alt":78,"src":29325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,29327,29328],{},[29,29329,29330],{},"方法一(不是很推荐新手)：",[19,29332,29333],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[73,29335,29337],{"className":26406,"code":29336,"language":26408,"meta":78,"style":78},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[32,29338,29339,29347,29352],{"__ignoreMap":78},[82,29340,29341,29344],{"class":84,"line":85},[82,29342,29343],{"class":2384},"ls",[82,29345,29346],{"class":96}," \u002Fdev\n",[82,29348,29349],{"class":84,"line":157},[82,29350,29351],{"class":2828},"#例如\n",[82,29353,29354,29357,29359],{"class":84,"line":404},[82,29355,29356],{"class":92},"--device",[82,29358,113],{"class":112},[82,29360,29361],{"class":96},"\u002Fdev\u002Ftty_USB0\n",[26,29363,29364],{"start":157},[29,29365,29366],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[73,29368,29370],{"className":26406,"code":29369,"language":26408,"meta":78,"style":78},"--privileged\n",[32,29371,29372],{"__ignoreMap":78},[82,29373,29374],{"class":84,"line":85},[82,29375,29369],{"class":2384},[19,29377,29378],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29380,29381],{},[4078,29382],{"alt":78,"src":29383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[65,29385,29387],{"id":29386},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29389,29390,29391,29394],{},"NVIDIA Container Toolkit使用户 ",[2913,29392,29393],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29396,29397],{},[4078,29398],{"alt":78,"src":29399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29401,29402],{},[323,29403,29404],{"href":29404,"rel":29405},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26449],[24582,29407,29409],{"id":29408},"_321安装","3.2.1.安装",[19,29411,29412],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25494,29414,29416],{"id":29415},"_3211ubuntu","3.2.1.1.Ubuntu",[26,29418,29419],{},[29,29420,29421],{},"配置存储库 并更新",[73,29423,29425],{"className":26406,"code":29424,"language":26408,"meta":78,"style":78},"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",[32,29426,29427,29456,29476,29488,29500,29506],{"__ignoreMap":78},[82,29428,29429,29432,29435,29438,29440,29442,29445,29448,29451,29454],{"class":84,"line":85},[82,29430,29431],{"class":2384},"curl",[82,29433,29434],{"class":88}," -fsSL",[82,29436,29437],{"class":96}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[82,29439,27694],{"class":112},[82,29441,28655],{"class":2384},[82,29443,29444],{"class":96}," gpg",[82,29446,29447],{"class":88}," --dearmor",[82,29449,29450],{"class":88}," -o",[82,29452,29453],{"class":96}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[82,29455,27263],{"class":88},[82,29457,29458,29461,29463,29466,29469,29472,29474],{"class":84,"line":157},[82,29459,29460],{"class":92},"  && ",[82,29462,29431],{"class":2384},[82,29464,29465],{"class":88}," -s",[82,29467,29468],{"class":88}," -L",[82,29470,29471],{"class":96}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[82,29473,27694],{"class":112},[82,29475,27263],{"class":88},[82,29477,29478,29481,29484,29486],{"class":84,"line":404},[82,29479,29480],{"class":2384},"    sed",[82,29482,29483],{"class":96}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[82,29485,27694],{"class":112},[82,29487,27263],{"class":88},[82,29489,29490,29493,29495,29498],{"class":84,"line":413},[82,29491,29492],{"class":2384},"    sudo",[82,29494,28798],{"class":96},[82,29496,29497],{"class":96}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[82,29499,27263],{"class":88},[82,29501,29502,29504],{"class":84,"line":508},[82,29503,29460],{"class":92},[82,29505,28757],{"class":88},[82,29507,29508,29510,29512],{"class":84,"line":513},[82,29509,29492],{"class":2384},[82,29511,28658],{"class":96},[82,29513,28824],{"class":96},[26,29515,29516],{"start":157},[29,29517,29518],{},"安装nvidia-docker2",[73,29520,29522],{"className":26406,"code":29521,"language":26408,"meta":78,"style":78},"sudo apt-get install -y nvidia-docker2\n",[32,29523,29524],{"__ignoreMap":78},[82,29525,29526,29528,29530,29532,29534],{"class":84,"line":85},[82,29527,27161],{"class":2384},[82,29529,28658],{"class":96},[82,29531,26418],{"class":96},[82,29533,28982],{"class":88},[82,29535,29536],{"class":96}," nvidia-docker2\n",[26,29538,29539],{"start":404},[29,29540,29541],{},"使用nvidia-ctk命令配置container runtime",[73,29543,29545],{"className":26406,"code":29544,"language":26408,"meta":78,"style":78},"sudo nvidia-ctk runtime configure --runtime=docker\n",[32,29546,29547],{"__ignoreMap":78},[82,29548,29549,29551,29554,29557,29560],{"class":84,"line":85},[82,29550,27161],{"class":2384},[82,29552,29553],{"class":96}," nvidia-ctk",[82,29555,29556],{"class":96}," runtime",[82,29558,29559],{"class":96}," configure",[82,29561,29562],{"class":88}," --runtime=docker\n",[26,29564,29565],{"start":413},[29,29566,29567],{},"重启docker服务:",[73,29569,29571],{"className":26406,"code":29570,"language":26408,"meta":78,"style":78},"sudo systemctl restart docker\n",[32,29572,29573],{"__ignoreMap":78},[82,29574,29575,29577,29579,29582],{"class":84,"line":85},[82,29576,27161],{"class":2384},[82,29578,29095],{"class":96},[82,29580,29581],{"class":96}," restart",[82,29583,29074],{"class":96},[25494,29585,29587],{"id":29586},"_3212fedora","3.2.1.2.Fedora",[26,29589,29590],{},[29,29591,29592],{},"配置存储库",[73,29594,29596],{"className":26406,"code":29595,"language":26408,"meta":78,"style":78},"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",[32,29597,29598,29613],{"__ignoreMap":78},[82,29599,29600,29602,29604,29606,29609,29611],{"class":84,"line":85},[82,29601,29431],{"class":2384},[82,29603,29465],{"class":88},[82,29605,29468],{"class":88},[82,29607,29608],{"class":96}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[82,29610,27694],{"class":112},[82,29612,27263],{"class":88},[82,29614,29615,29617,29619],{"class":84,"line":157},[82,29616,27161],{"class":2384},[82,29618,28798],{"class":96},[82,29620,29621],{"class":96}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,29623,29624],{"start":157},[29,29625,29626],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[73,29628,29630],{"className":26406,"code":29629,"language":26408,"meta":78,"style":78},"# 如果是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",[32,29631,29632,29637,29651,29655,29660],{"__ignoreMap":78},[82,29633,29634],{"class":84,"line":85},[82,29635,29636],{"class":2828},"# 如果是RHEL或者Rocky（DNF4）\n",[82,29638,29639,29641,29643,29645,29648],{"class":84,"line":157},[82,29640,27161],{"class":2384},[82,29642,28897],{"class":96},[82,29644,28996],{"class":96},[82,29646,29647],{"class":88}," --add-repo",[82,29649,29650],{"class":96}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[82,29652,29653],{"class":84,"line":404},[82,29654,486],{"emptyLinePlaceholder":485},[82,29656,29657],{"class":84,"line":413},[82,29658,29659],{"class":2828},"# 如果是Feodra41+（DNF5）\n",[82,29661,29662,29664,29666,29668,29670],{"class":84,"line":508},[82,29663,27161],{"class":2384},[82,29665,28897],{"class":96},[82,29667,28996],{"class":96},[82,29669,28999],{"class":96},[82,29671,29672],{"class":88}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,29674,29675],{"start":404},[29,29676,29677],{},"安装NVIDIA Container Toolki包",[73,29679,29681],{"className":26406,"code":29680,"language":26408,"meta":78,"style":78},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[32,29682,29683,29688,29701,29705,29710],{"__ignoreMap":78},[82,29684,29685],{"class":84,"line":85},[82,29686,29687],{"class":2828},"# 如果是RHEL或者Rocky\n",[82,29689,29690,29692,29694,29696,29698],{"class":84,"line":157},[82,29691,27161],{"class":2384},[82,29693,28897],{"class":96},[82,29695,26418],{"class":96},[82,29697,28982],{"class":88},[82,29699,29700],{"class":96}," nvidia-container-toolkit\n",[82,29702,29703],{"class":84,"line":404},[82,29704,486],{"emptyLinePlaceholder":485},[82,29706,29707],{"class":84,"line":413},[82,29708,29709],{"class":2828},"# 如果是Fedora\n",[82,29711,29712,29714,29716,29718,29720],{"class":84,"line":508},[82,29713,27161],{"class":2384},[82,29715,28897],{"class":96},[82,29717,26418],{"class":96},[82,29719,28982],{"class":88},[82,29721,29700],{"class":96},[26,29723,29724],{"start":413},[29,29725,29726,29727,29729],{},"安装nvidia-docker2 ： 在Fedora上使用",[32,29728,28872],{},"进行安装",[73,29731,29733],{"className":26406,"code":29732,"language":26408,"meta":78,"style":78},"sudo dnf install -y nvidia-docker2\n",[32,29734,29735],{"__ignoreMap":78},[82,29736,29737,29739,29741,29743,29745],{"class":84,"line":85},[82,29738,27161],{"class":2384},[82,29740,28897],{"class":96},[82,29742,26418],{"class":96},[82,29744,28982],{"class":88},[82,29746,29536],{"class":96},[26,29748,29749],{"start":508},[29,29750,29751],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[73,29753,29754],{"className":26406,"code":29544,"language":26408,"meta":78,"style":78},[32,29755,29756],{"__ignoreMap":78},[82,29757,29758,29760,29762,29764,29766],{"class":84,"line":85},[82,29759,27161],{"class":2384},[82,29761,29553],{"class":96},[82,29763,29556],{"class":96},[82,29765,29559],{"class":96},[82,29767,29562],{"class":88},[26,29769,29770],{"start":513},[29,29771,29772],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[73,29774,29775],{"className":26406,"code":29570,"language":26408,"meta":78,"style":78},[32,29776,29777],{"__ignoreMap":78},[82,29778,29779,29781,29783,29785],{"class":84,"line":85},[82,29780,27161],{"class":2384},[82,29782,29095],{"class":96},[82,29784,29581],{"class":96},[82,29786,29074],{"class":96},[19,29788,29789],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29791,29792],{},"方法：",[19,29794,29795],{},"1️⃣nvidia-smi",[19,29797,29798],{},"2️⃣运行nvidia cuda 容器进行测试",[73,29800,29802],{"className":26406,"code":29801,"language":26408,"meta":78,"style":78},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[32,29803,29804],{"__ignoreMap":78},[82,29805,29806,29808,29810,29813,29816,29819,29822,29825],{"class":84,"line":85},[82,29807,27161],{"class":2384},[82,29809,28902],{"class":96},[82,29811,29812],{"class":96}," run",[82,29814,29815],{"class":88}," --rm",[82,29817,29818],{"class":88}," --gpus",[82,29820,29821],{"class":96}," all",[82,29823,29824],{"class":96}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[82,29826,29827],{"class":96}," nvidia-smi\n",[19,29829,29830],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29832,29833],{},[4078,29834],{"alt":78,"src":29835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[65,29837,29839],{"id":29838},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29841,29842],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29844,29845],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29847,29848],{},[323,29849,29850],{"href":29850,"rel":29851},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26449],[19,29853,29854],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29856,29857],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29859,29860],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[278,29862,29863,29879],{},[281,29864,29865],{},[284,29866,29867,29870,29873,29876],{},[287,29868,29869],{"align":26320},"镜像类型",[287,29871,29872],{"align":26320},"适用场景",[287,29874,29875],{"align":26320},"示例标签",[287,29877,29878],{"align":26320},"大小",[294,29880,29881,29895,29909],{},[284,29882,29883,29886,29889,29892],{},[299,29884,29885],{"align":26320},"base",[299,29887,29888],{"align":26320},"仅需 CUDA 运行时库",[299,29890,29891],{"align":26320},"12.4.0-base-ubuntu22.04",[299,29893,29894],{"align":26320},"~240MB",[284,29896,29897,29900,29903,29906],{},[299,29898,29899],{"align":26320},"runtime",[299,29901,29902],{"align":26320},"部署编译后的应用（含数学库）",[299,29904,29905],{"align":26320},"12.4.0-runtime-ubuntu22.04",[299,29907,29908],{"align":26320},"~2GB",[284,29910,29911,29914,29917,29920],{},[299,29912,29913],{"align":26320},"devel",[299,29915,29916],{"align":26320},"开发环境（含编译工具）",[299,29918,29919],{"align":26320},"12.4.0-devel-ubuntu22.04",[299,29921,29922],{"align":26320},"~3GB",[19,29924,29925,29926,29929],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[32,29927,29928],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29931,29932],{},[4078,29933],{"alt":78,"src":29934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29936,29937],{},"在dockerfile里就可以开头这么写：",[73,29939,29941],{"className":26406,"code":29940,"language":26408,"meta":78,"style":78},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[32,29942,29943,29948],{"__ignoreMap":78},[82,29944,29945],{"class":84,"line":85},[82,29946,29947],{"class":2828},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[82,29949,29950,29953],{"class":84,"line":157},[82,29951,29952],{"class":2384},"FROM",[82,29954,29955],{"class":96}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[65,29957,29959],{"id":29958},"_34配置以太网","3.4.配置以太网",[19,29961,29962],{},"指定网络模式",[73,29964,29966],{"className":26406,"code":29965,"language":26408,"meta":78,"style":78},"--net=host \\\n",[32,29967,29968],{"__ignoreMap":78},[82,29969,29970,29973,29975,29978],{"class":84,"line":85},[82,29971,29972],{"class":92},"--net",[82,29974,113],{"class":112},[82,29976,29977],{"class":96},"host",[82,29979,27263],{"class":2384},[19,29981,29982],{},"启动参数里加上这行即可。具体在下方",[19,29984,29985],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3755,29987,29988,29991,29994,29997],{},[29,29989,29990],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29992,29993],{},"--net=host:容器使用宿主机的网络",[29,29995,29996],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29998,29999],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2671,30001,30002],{},"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":78,"searchDepth":157,"depth":157,"links":30004},[30005,30006,30007,30008],{"id":29319,"depth":404,"text":29320},{"id":29386,"depth":404,"text":29387},{"id":29838,"depth":404,"text":29839},{"id":29958,"depth":404,"text":29959},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29308,"description":29316},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30015,"title":30016,"body":30017,"description":30024,"extension":2700,"meta":30030,"navigation":485,"path":30031,"seo":30032,"stem":30033,"__hash__":30034},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30018,"toc":30028},[30019,30022,30025],[10,30020,30016],{"id":30021},"_4dockerhub换源",[19,30023,30024],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,30026,30027],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":78,"searchDepth":157,"depth":157,"links":30029},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30016,"description":30024},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30036,"title":30037,"body":30038,"description":78,"extension":2700,"meta":31049,"navigation":485,"path":31050,"seo":31051,"stem":31052,"__hash__":31053},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30039,"toc":31044},[30040,30043,30047,30053,30057,30060,30400,30403,30406,30409,30414,30419,30422,30425,30428,30431,30450,30453,30464,30470,30652,30662,30678,30941,30943,30967,30982,30991,31041],[10,30041,30037],{"id":30042},"_5docker命令学习",[65,30044,30046],{"id":30045},"_51参考文档","5.1.参考文档",[19,30048,30049],{},[323,30050,30051],{"href":30051,"rel":30052},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26449],[65,30054,30056],{"id":30055},"_52常用命令","5.2.常用命令",[19,30058,30059],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[278,30061,30062,30075],{},[281,30063,30064],{},[284,30065,30066,30069,30072],{},[287,30067,30068],{"align":26320},"命令",[287,30070,30071],{"align":26320},"描述",[287,30073,30074],{"align":26320},"示例",[294,30076,30077,30088,30099,30110,30121,30132,30143,30154,30164,30175,30186,30197,30207,30218,30229,30240,30250,30260,30270,30280,30291,30302,30313,30324,30335,30346,30356,30367,30378,30389],{},[284,30078,30079,30082,30085],{},[299,30080,30081],{"align":26320},"docker run",[299,30083,30084],{"align":26320},"创建并启动一个新的容器。",[299,30086,30087],{"align":26320},"docker run -it ubuntu bash",[284,30089,30090,30093,30096],{},[299,30091,30092],{"align":26320},"docker build",[299,30094,30095],{"align":26320},"通过指定的 Dockerfile 创建一个新的镜像。",[299,30097,30098],{"align":26320},"docker build -t myimage .",[284,30100,30101,30104,30107],{},[299,30102,30103],{"align":26320},"docker pull",[299,30105,30106],{"align":26320},"从 Docker 仓库拉取镜像。",[299,30108,30109],{"align":26320},"docker pull ubuntu",[284,30111,30112,30115,30118],{},[299,30113,30114],{"align":26320},"docker push",[299,30116,30117],{"align":26320},"将本地镜像推送到 Docker 仓库。",[299,30119,30120],{"align":26320},"docker push myimage",[284,30122,30123,30126,30129],{},[299,30124,30125],{"align":26320},"docker stop",[299,30127,30128],{"align":26320},"停止一个正在运行的容器。",[299,30130,30131],{"align":26320},"docker stop container_id",[284,30133,30134,30137,30140],{},[299,30135,30136],{"align":26320},"docker start",[299,30138,30139],{"align":26320},"启动一个已经存在的容器。",[299,30141,30142],{"align":26320},"docker start container_id",[284,30144,30145,30148,30151],{},[299,30146,30147],{"align":26320},"docker restart",[299,30149,30150],{"align":26320},"重新启动容器。",[299,30152,30153],{"align":26320},"docker restart container_id",[284,30155,30156,30159,30162],{},[299,30157,30158],{"align":26320},"docker ps",[299,30160,30161],{"align":26320},"列出当前正在运行的容器。",[299,30163,30158],{"align":26320},[284,30165,30166,30169,30172],{},[299,30167,30168],{"align":26320},"docker rm",[299,30170,30171],{"align":26320},"删除一个或多个停止的容器。",[299,30173,30174],{"align":26320},"docker rm container_id",[284,30176,30177,30180,30183],{},[299,30178,30179],{"align":26320},"docker exec",[299,30181,30182],{"align":26320},"在一个正在运行的容器中执行命令。",[299,30184,30185],{"align":26320},"docker exec -it container_id bash",[284,30187,30188,30191,30194],{},[299,30189,30190],{"align":26320},"docker logs",[299,30192,30193],{"align":26320},"查看容器的日志输出。",[299,30195,30196],{"align":26320},"docker logs container_id",[284,30198,30199,30202,30205],{},[299,30200,30201],{"align":26320},"docker images",[299,30203,30204],{"align":26320},"列出本地所有镜像。",[299,30206,30201],{"align":26320},[284,30208,30209,30212,30215],{},[299,30210,30211],{"align":26320},"docker rmi",[299,30213,30214],{"align":26320},"删除一个或多个镜像。",[299,30216,30217],{"align":26320},"docker rmi myimage",[284,30219,30220,30223,30226],{},[299,30221,30222],{"align":26320},"docker network",[299,30224,30225],{"align":26320},"管理 Docker 网络。",[299,30227,30228],{"align":26320},"docker network ls",[284,30230,30231,30234,30237],{},[299,30232,30233],{"align":26320},"docker volume",[299,30235,30236],{"align":26320},"管理 Docker 数据卷。",[299,30238,30239],{"align":26320},"docker volume ls",[284,30241,30242,30245,30248],{},[299,30243,30244],{"align":26320},"docker-compose up",[299,30246,30247],{"align":26320},"启动 docker-compose.yml 中定义的所有服务。",[299,30249,30244],{"align":26320},[284,30251,30252,30255,30258],{},[299,30253,30254],{"align":26320},"docker-compose down",[299,30256,30257],{"align":26320},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[299,30259,30254],{"align":26320},[284,30261,30262,30265,30268],{},[299,30263,30264],{"align":26320},"docker info",[299,30266,30267],{"align":26320},"显示 Docker 系统的详细信息。",[299,30269,30264],{"align":26320},[284,30271,30272,30275,30278],{},[299,30273,30274],{"align":26320},"docker stats",[299,30276,30277],{"align":26320},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[299,30279,30274],{"align":26320},[284,30281,30282,30285,30288],{},[299,30283,30284],{"align":26320},"docker inspect",[299,30286,30287],{"align":26320},"查看容器或镜像的详细信息（JSON 格式）。",[299,30289,30290],{"align":26320},"docker inspect container_id",[284,30292,30293,30296,30299],{},[299,30294,30295],{"align":26320},"docker save",[299,30297,30298],{"align":26320},"将一个镜像保存为 tar 文件。",[299,30300,30301],{"align":26320},"docker save -o myimage.tar myimage",[284,30303,30304,30307,30310],{},[299,30305,30306],{"align":26320},"docker load",[299,30308,30309],{"align":26320},"从 tar 文件中加载镜像。",[299,30311,30312],{"align":26320},"docker load -i myimage.tar",[284,30314,30315,30318,30321],{},[299,30316,30317],{"align":26320},"docker tag",[299,30319,30320],{"align":26320},"为镜像添加标签（tag）。",[299,30322,30323],{"align":26320},"docker tag myimage myimage:v1",[284,30325,30326,30329,30332],{},[299,30327,30328],{"align":26320},"docker buildx build",[299,30330,30331],{"align":26320},"使用 Buildx 构建多架构镜像。",[299,30333,30334],{"align":26320},"docker buildx build -t myimage .",[284,30336,30337,30340,30343],{},[299,30338,30339],{"align":26320},"docker buildx create",[299,30341,30342],{"align":26320},"创建一个新的 Buildx 构建实例。",[299,30344,30345],{"align":26320},"docker buildx create –use",[284,30347,30348,30351,30354],{},[299,30349,30350],{"align":26320},"docker buildx ls",[299,30352,30353],{"align":26320},"列出所有可用的 Buildx 构建实例。",[299,30355,30350],{"align":26320},[284,30357,30358,30361,30364],{},[299,30359,30360],{"align":26320},"docker buildx use",[299,30362,30363],{"align":26320},"设置当前的 Buildx 构建实例。",[299,30365,30366],{"align":26320},"docker buildx use mybuilder",[284,30368,30369,30372,30375],{},[299,30370,30371],{"align":26320},"docker buildx bake",[299,30373,30374],{"align":26320},"使用 Bake 文件批量构建镜像。",[299,30376,30377],{"align":26320},"docker buildx bake -f bake.hcl",[284,30379,30380,30383,30386],{},[299,30381,30382],{"align":26320},"docker buildx build –push",[299,30384,30385],{"align":26320},"构建镜像并推送到镜像仓库。",[299,30387,30388],{"align":26320},"docker buildx build –push -t myimage .",[284,30390,30391,30394,30397],{},[299,30392,30393],{"align":26320},"docker buildx build –platform",[299,30395,30396],{"align":26320},"构建镜像并为多个平台生成支持。",[299,30398,30399],{"align":26320},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30401,30402],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30404,30405],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30407,30408],{},"docker images 可以查看已经下载的镜像",[19,30410,30411],{},[4078,30412],{"alt":78,"src":30413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30415,30416],{},[2913,30417,30418],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30420,30421],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30423,30424],{},"docker container logs 查看容器日志",[19,30426,30427],{},"docker top 查看容器里的进程",[19,30429,30430],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[73,30432,30434],{"className":26406,"code":30433,"language":26408,"meta":78,"style":78},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[32,30435,30436],{"__ignoreMap":78},[82,30437,30438,30441,30444,30447],{"class":84,"line":85},[82,30439,30440],{"class":2384},"如：docker",[82,30442,30443],{"class":96}," cp",[82,30445,30446],{"class":96}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[82,30448,30449],{"class":96}," \u002Fmydata\u002Fnginx\n",[19,30451,30452],{},"docker run时在启动容器的时候会有几个常用的选项：",[3755,30454,30455,30458,30461],{},[29,30456,30457],{},"-d选项：表示后台运行",[29,30459,30460],{},"-P选项：随机端口映射",[29,30462,30463],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[65,30465,30467],{"id":30466},"_53run命令的参数非常重要",[2913,30468,30469],{},"5.3.run命令的参数（非常重要）",[278,30471,30472,30485],{},[281,30473,30474],{},[284,30475,30476,30479,30482],{},[287,30477,30478],{"align":26320},"参数\u002F配置",[287,30480,30481],{"align":26320},"功能说明",[287,30483,30484],{"align":26320},"重要性与参考依据",[294,30486,30487,30498,30509,30520,30531,30542,30553,30564,30575,30586,30597,30608,30619,30630,30641],{},[284,30488,30489,30492,30495],{},[299,30490,30491],{"align":26320},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[299,30493,30494],{"align":26320},"指定容器名称，便于后续管理",[299,30496,30497],{"align":26320},"替代随机生成的容器名。",[284,30499,30500,30503,30506],{},[299,30501,30502],{"align":26320},"–gpus all",[299,30504,30505],{"align":26320},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[299,30507,30508],{"align":26320},"用于CUDA加速等GPU依赖任务。",[284,30510,30511,30514,30517],{},[299,30512,30513],{"align":26320},"-e NVIDIA_DRIVER_CAPABILITIES=all",[299,30515,30516],{"align":26320},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[299,30518,30519],{"align":26320},"确保容器内GPU功能完整67。",[284,30521,30522,30525,30528],{},[299,30523,30524],{"align":26320},"-dit",[299,30526,30527],{"align":26320},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[299,30529,30530],{"align":26320},"允许容器在后台运行并支持交互操作。",[284,30532,30533,30536,30539],{},[299,30534,30535],{"align":26320},"–privileged",[299,30537,30538],{"align":26320},"赋予容器完全主机权限（可访问设备、内核模块等）",[299,30540,30541],{"align":26320},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[284,30543,30544,30547,30550],{},[299,30545,30546],{"align":26320},"–net=host",[299,30548,30549],{"align":26320},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[299,30551,30552],{"align":26320},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[284,30554,30555,30558,30561],{},[299,30556,30557],{"align":26320},"–group-add audio–group-add video–group-add dialout",[299,30559,30560],{"align":26320},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[299,30562,30563],{"align":26320},"避免权限问题（如避免无法调用摄像头、麦克风）。",[284,30565,30566,30569,30572],{},[299,30567,30568],{"align":26320},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[299,30570,30571],{"align":26320},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[299,30573,30574],{"align":26320},"支持容器内运行图形界面应用（如OpenCV可视化）。",[284,30576,30577,30580,30583],{},[299,30578,30579],{"align":26320},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[299,30581,30582],{"align":26320},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[299,30584,30585],{"align":26320},"实现容器内图形显示。",[284,30587,30588,30591,30594],{},[299,30589,30590],{"align":26320},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[299,30592,30593],{"align":26320},"挂载X11认证文件（只读）",[299,30595,30596],{"align":26320},"确保容器有权连接宿主机显示服务。",[284,30598,30599,30602,30605],{},[299,30600,30601],{"align":26320},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[299,30603,30604],{"align":26320},"挂载Wayland显示协议相关目录",[299,30606,30607],{"align":26320},"支持Wayland协议的图形显示。",[284,30609,30610,30613,30616],{},[299,30611,30612],{"align":26320},"–ulimit nofile=1024:524288",[299,30614,30615],{"align":26320},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[299,30617,30618],{"align":26320},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[284,30620,30621,30624,30627],{},[299,30622,30623],{"align":26320},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[299,30625,30626],{"align":26320},"挂载宿主机用户目录到容器内同名路径",[299,30628,30629],{"align":26320},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[284,30631,30632,30635,30638],{},[299,30633,30634],{"align":26320},"-w \u002Fhome\u002Ftungchiahui",[299,30636,30637],{"align":26320},"设置容器启动后的默认工作目录",[299,30639,30640],{"align":26320},"直接进入项目路径，方便执行命令2324。",[284,30642,30643,30646,30649],{},[299,30644,30645],{"align":26320},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[299,30647,30648],{"align":26320},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[299,30650,30651],{"align":26320},"提供预配置的深度学习与机器人开发环境。",[19,30653,30654,30655,30657,30658,30661],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[32,30656,27161],{},"加不加",[32,30659,30660],{},"sudo -E","都无所谓。",[19,30663,30664,30665,30667,30668,30670,30671,30674,30675,30677],{},"用户已经被加到docker组了，不用",[32,30666,27161],{},"也行跑，其次，",[32,30669,27161],{},"运行的话，你的",[32,30672,30673],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[32,30676,30673],{},"更不可能变了。",[73,30679,30681],{"className":26406,"code":30680,"language":26408,"meta":78,"style":78},"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",[32,30682,30683,30696,30706,30716,30728,30735,30742,30749,30759,30768,30777,30791,30803,30815,30824,30834,30843,30858,30891,30918,30929,30936],{"__ignoreMap":78},[82,30684,30685,30687,30689,30691,30694],{"class":84,"line":85},[82,30686,27161],{"class":2384},[82,30688,28902],{"class":96},[82,30690,29812],{"class":96},[82,30692,30693],{"class":88}," --name=ros_opencv_cuda",[82,30695,27263],{"class":88},[82,30697,30698,30701,30704],{"class":84,"line":157},[82,30699,30700],{"class":92},"--gpus ",[82,30702,30703],{"class":96},"all",[82,30705,27263],{"class":88},[82,30707,30708,30711,30714],{"class":84,"line":404},[82,30709,30710],{"class":92},"-e ",[82,30712,30713],{"class":96},"NVIDIA_DRIVER_CAPABILITIES=all",[82,30715,27263],{"class":88},[82,30717,30718,30720,30723,30726],{"class":84,"line":413},[82,30719,30710],{"class":92},[82,30721,30722],{"class":96},"DISPLAY=",[82,30724,30725],{"class":92},"$DISPLAY ",[82,30727,28757],{"class":88},[82,30729,30730,30733],{"class":84,"line":508},[82,30731,30732],{"class":92},"-dit ",[82,30734,28757],{"class":88},[82,30736,30737,30740],{"class":84,"line":513},[82,30738,30739],{"class":92},"--privileged ",[82,30741,28757],{"class":88},[82,30743,30744,30747],{"class":84,"line":1388},[82,30745,30746],{"class":92},"--net=host ",[82,30748,28757],{"class":88},[82,30750,30751,30754,30757],{"class":84,"line":1394},[82,30752,30753],{"class":92},"--group-add ",[82,30755,30756],{"class":96},"audio",[82,30758,27263],{"class":88},[82,30760,30761,30763,30766],{"class":84,"line":1399},[82,30762,30753],{"class":92},[82,30764,30765],{"class":96},"video",[82,30767,27263],{"class":88},[82,30769,30770,30772,30775],{"class":84,"line":1430},[82,30771,30753],{"class":92},[82,30773,30774],{"class":96},"dialout",[82,30776,27263],{"class":88},[82,30778,30779,30781,30784,30786,30789],{"class":84,"line":1818},[82,30780,30710],{"class":92},[82,30782,30783],{"class":96},"XAUTHORITY=",[82,30785,30673],{"class":92},[82,30787,30788],{"class":96},"\u002F.Xauthority",[82,30790,27263],{"class":88},[82,30792,30793,30795,30798,30801],{"class":84,"line":2082},[82,30794,30710],{"class":92},[82,30796,30797],{"class":96},"WAYLAND_DISPLAY=",[82,30799,30800],{"class":92},"$WAYLAND_DISPLAY ",[82,30802,28757],{"class":88},[82,30804,30805,30807,30810,30813],{"class":84,"line":2233},[82,30806,30710],{"class":92},[82,30808,30809],{"class":96},"XDG_RUNTIME_DIR=",[82,30811,30812],{"class":92},"$XDG_RUNTIME_DIR ",[82,30814,28757],{"class":88},[82,30816,30817,30819,30822],{"class":84,"line":2255},[82,30818,30710],{"class":92},[82,30820,30821],{"class":96},"QT_QPA_PLATFORM=xcb",[82,30823,27263],{"class":88},[82,30825,30826,30829,30832],{"class":84,"line":2260},[82,30827,30828],{"class":92},"-v ",[82,30830,30831],{"class":96},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[82,30833,27263],{"class":88},[82,30835,30836,30838,30841],{"class":84,"line":2298},[82,30837,30828],{"class":92},[82,30839,30840],{"class":96},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[82,30842,27263],{"class":88},[82,30844,30845,30848,30851,30853,30856],{"class":84,"line":2303},[82,30846,30847],{"class":92},"-v $HOME",[82,30849,30850],{"class":96},"\u002F.Xauthority:",[82,30852,30673],{"class":92},[82,30854,30855],{"class":96},"\u002F.Xauthority:ro",[82,30857,27263],{"class":88},[82,30859,30860,30862,30865,30867,30870,30873,30875,30878,30880,30882,30884,30886,30889],{"class":84,"line":2321},[82,30861,30828],{"class":92},[82,30863,30864],{"class":96},"\u002Frun\u002Fuser\u002F",[82,30866,27684],{"class":92},[82,30868,30869],{"class":2384},"id",[82,30871,30872],{"class":88}," -u",[82,30874,3187],{"class":92},[82,30876,30877],{"class":96},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[82,30879,27684],{"class":92},[82,30881,30869],{"class":2384},[82,30883,30872],{"class":88},[82,30885,3187],{"class":92},[82,30887,30888],{"class":96},"\u002Fwayland-0",[82,30890,27263],{"class":88},[82,30892,30893,30895,30897,30899,30901,30903,30905,30908,30910,30912,30914,30916],{"class":84,"line":2533},[82,30894,30828],{"class":92},[82,30896,30864],{"class":96},[82,30898,27684],{"class":92},[82,30900,30869],{"class":2384},[82,30902,30872],{"class":88},[82,30904,3187],{"class":92},[82,30906,30907],{"class":96},":\u002Frun\u002Fuser\u002F",[82,30909,27684],{"class":92},[82,30911,30869],{"class":2384},[82,30913,30872],{"class":88},[82,30915,725],{"class":92},[82,30917,28757],{"class":88},[82,30919,30920,30922,30924,30927],{"class":84,"line":2538},[82,30921,30847],{"class":92},[82,30923,3608],{"class":96},[82,30925,30926],{"class":92},"$HOME ",[82,30928,28757],{"class":88},[82,30930,30931,30934],{"class":84,"line":2548},[82,30932,30933],{"class":92},"-w $HOME ",[82,30935,28757],{"class":88},[82,30937,30938],{"class":84,"line":2579},[82,30939,30940],{"class":92},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30942,11616],{},[26,30944,30945,30953,30956,30959],{},[29,30946,30947,16382,30949,30952],{},[32,30948,30713],{},[32,30950,30951],{},"--gpus all","没有英伟达显卡请注释。",[29,30954,30955],{},"--name后面请自己为容器起名。",[29,30957,30958],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30960,30961,30962,2611],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[26137,30963,30964],{},[2913,30965,30966],{},"请不要加",[73,30968,30970],{"className":26406,"code":30969,"language":26408,"meta":78,"style":78},"--ulimit nofile=1024:524288 \\\n",[32,30971,30972],{"__ignoreMap":78},[82,30973,30974,30977,30980],{"class":84,"line":85},[82,30975,30976],{"class":2384},"--ulimit",[82,30978,30979],{"class":96}," nofile=1024:524288",[82,30981,27263],{"class":88},[19,30983,30984,30985,30990],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[26137,30986,30987],{},[2913,30988,30989],{},"不建议","**.**",[73,30992,30994],{"className":26406,"code":30993,"language":26408,"meta":78,"style":78},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[32,30995,30996,31023,31032],{"__ignoreMap":78},[82,30997,30998,31001,31004,31006,31008,31010,31012,31014,31016,31019,31021],{"class":84,"line":85},[82,30999,31000],{"class":2384},"--user",[82,31002,31003],{"class":92}," $(",[82,31005,30869],{"class":2384},[82,31007,30872],{"class":88},[82,31009,3187],{"class":92},[82,31011,3608],{"class":96},[82,31013,27684],{"class":92},[82,31015,30869],{"class":2384},[82,31017,31018],{"class":88}," -g",[82,31020,725],{"class":92},[82,31022,28757],{"class":88},[82,31024,31025,31027,31030],{"class":84,"line":157},[82,31026,30828],{"class":92},[82,31028,31029],{"class":96},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[82,31031,27263],{"class":88},[82,31033,31034,31036,31039],{"class":84,"line":404},[82,31035,30828],{"class":92},[82,31037,31038],{"class":96},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[82,31040,27263],{"class":88},[2671,31042,31043],{},"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":78,"searchDepth":157,"depth":157,"links":31045},[31046,31047,31048],{"id":30045,"depth":404,"text":30046},{"id":30055,"depth":404,"text":30056},{"id":30466,"depth":404,"text":30469},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30037,"description":78},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31055,"title":31056,"body":31057,"description":78,"extension":2700,"meta":32680,"navigation":485,"path":32681,"seo":32682,"stem":32683,"__hash__":32684},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31058,"toc":32675},[31059,31062,31066,31069,31291,31295,31299,31302,31408,31413,31416,31421,31424,31429,31432,31437,31440,31452,31455,31460,31467,31495,31502,31578,31583,31586,31609,31611,31686,31691,31694,31698,31706,31711,31716,31720,31731,31737,31740,31743,31767,31770,31773,31801,31804,31807,32272,32275,32280,32285,32289,32312,32317,32321,32325,32328,32331,32334,32361,32364,32367,32385,32388,32391,32413,32421,32426,32431,32435,32438,32441,32444,32447,32492,32495,32513,32516,32521,32524,32545,32548,32604,32607,32612,32616,32619,32626,32629,32632,32637,32640,32656,32659,32672],[10,31060,31056],{"id":31061},"_6手动创建docker镜像",[65,31063,31065],{"id":31064},"_61dockerfile","6.1.DockerFile",[19,31067,31068],{},"常用命令：",[278,31070,31071,31082],{},[281,31072,31073],{},[284,31074,31075,31078,31080],{},[287,31076,31077],{"align":26320},"指令",[287,31079,292],{"align":26320},[287,31081,30074],{"align":26320},[294,31083,31084,31094,31110,31121,31132,31143,31154,31165,31176,31190,31204,31215,31229,31240,31251,31265,31280],{},[284,31085,31086,31088,31091],{},[299,31087,29952],{"align":26320},[299,31089,31090],{"align":26320},"指定基础镜像，是 Dockerfile 的起点",[299,31092,31093],{"align":26320},"FROM ubuntu:22.04",[284,31095,31096,31099,31102],{},[299,31097,31098],{"align":26320},"LABEL",[299,31100,31101],{"align":26320},"添加元数据（如作者、版本等）",[299,31103,31104,31105,31109],{"align":26320},"LABEL maintainer=”",[323,31106,31108],{"href":31107},"mailto:you@example.com","you@example.com","”",[284,31111,31112,31115,31118],{},[299,31113,31114],{"align":26320},"ENV",[299,31116,31117],{"align":26320},"设置环境变量",[299,31119,31120],{"align":26320},"ENV PORT=8080",[284,31122,31123,31126,31129],{},[299,31124,31125],{"align":26320},"ARG",[299,31127,31128],{"align":26320},"构建参数，只在构建期间可用",[299,31130,31131],{"align":26320},"ARG VERSION=1.0",[284,31133,31134,31137,31140],{},[299,31135,31136],{"align":26320},"RUN",[299,31138,31139],{"align":26320},"构建镜像时运行命令",[299,31141,31142],{"align":26320},"RUN apt-get update && apt-get install -y curl",[284,31144,31145,31148,31151],{},[299,31146,31147],{"align":26320},"COPY",[299,31149,31150],{"align":26320},"复制文件到镜像中",[299,31152,31153],{"align":26320},"COPY . \u002Fapp",[284,31155,31156,31159,31162],{},[299,31157,31158],{"align":26320},"ADD",[299,31160,31161],{"align":26320},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[299,31163,31164],{"align":26320},"ADD archive.tar.gz \u002Fdata\u002F",[284,31166,31167,31170,31173],{},[299,31168,31169],{"align":26320},"WORKDIR",[299,31171,31172],{"align":26320},"设置工作目录",[299,31174,31175],{"align":26320},"WORKDIR \u002Fopt",[284,31177,31178,31181,31184],{},[299,31179,31180],{"align":26320},"CMD",[299,31182,31183],{"align":26320},"设置容器启动时默认命令（可被 docker run 覆盖）",[299,31185,31186,31187],{"align":26320},"CMD ",[82,31188,31189],{},"“node”, “index.js”",[284,31191,31192,31195,31198],{},[299,31193,31194],{"align":26320},"ENTRYPOINT",[299,31196,31197],{"align":26320},"设置容器启动时固定命令（通常用于 CLI 工具等）",[299,31199,31200,31201],{"align":26320},"ENTRYPOINT ",[82,31202,31203],{},"“python3”",[284,31205,31206,31209,31212],{},[299,31207,31208],{"align":26320},"EXPOSE",[299,31210,31211],{"align":26320},"声明镜像内服务监听的端口（不会自动映射）",[299,31213,31214],{"align":26320},"EXPOSE 80",[284,31216,31217,31220,31223],{},[299,31218,31219],{"align":26320},"VOLUME",[299,31221,31222],{"align":26320},"声明数据卷挂载点",[299,31224,31225,31226],{"align":26320},"VOLUME ",[82,31227,31228],{},"“\u002Fdata”",[284,31230,31231,31234,31237],{},[299,31232,31233],{"align":26320},"USER",[299,31235,31236],{"align":26320},"设置后续命令执行的用户",[299,31238,31239],{"align":26320},"USER appuser",[284,31241,31242,31245,31248],{},[299,31243,31244],{"align":26320},"ONBUILD",[299,31246,31247],{"align":26320},"当镜像作为其他镜像基础镜像时触发的构建指令",[299,31249,31250],{"align":26320},"ONBUILD COPY . \u002Fsrc",[284,31252,31253,31256,31259],{},[299,31254,31255],{"align":26320},"SHELL",[299,31257,31258],{"align":26320},"更改默认 shell，比如将 sh -c 改为 bash -c",[299,31260,31261,31262],{"align":26320},"SHELL ",[82,31263,31264],{},"“\u002Fbin\u002Fbash”, “-c”",[284,31266,31267,31270,31273],{},[299,31268,31269],{"align":26320},"HEALTHCHECK",[299,31271,31272],{"align":26320},"定义容器运行时的健康检查命令",[299,31274,31275,31276],{"align":26320},"`HEALTHCHECK CMD curl –fail ",[323,31277,31278],{"href":31278,"rel":31279},"http:\u002F\u002Flocalhost:8080",[26449],[284,31281,31282,31285,31288],{},[299,31283,31284],{"align":26320},"STOPSIGNAL",[299,31286,31287],{"align":26320},"容器停止时发送的信号",[299,31289,31290],{"align":26320},"STOPSIGNAL SIGKILL",[65,31292,31294],{"id":31293},"_62自己创建容器","6.2.自己创建容器",[24582,31296,31298],{"id":31297},"_621手动创建","6.2.1.手动创建",[19,31300,31301],{},"在x86电脑上编译x86的：",[73,31303,31305],{"className":26406,"code":31304,"language":26408,"meta":78,"style":78},"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",[32,31306,31307,31323,31327,31340,31344,31357,31361,31374,31378,31391,31395],{"__ignoreMap":78},[82,31308,31309,31311,31314,31317,31320],{"class":84,"line":85},[82,31310,29135],{"class":2384},[82,31312,31313],{"class":96}," build",[82,31315,31316],{"class":88}," -t",[82,31318,31319],{"class":96}," ros-melodic-cuda118-cudnn8-bionic:latest",[82,31321,31322],{"class":96}," .\n",[82,31324,31325],{"class":84,"line":157},[82,31326,486],{"emptyLinePlaceholder":485},[82,31328,31329,31331,31333,31335,31338],{"class":84,"line":404},[82,31330,29135],{"class":2384},[82,31332,31313],{"class":96},[82,31334,31316],{"class":88},[82,31336,31337],{"class":96}," ros-noetic-focal:latest",[82,31339,31322],{"class":96},[82,31341,31342],{"class":84,"line":413},[82,31343,486],{"emptyLinePlaceholder":485},[82,31345,31346,31348,31350,31352,31355],{"class":84,"line":508},[82,31347,29135],{"class":2384},[82,31349,31313],{"class":96},[82,31351,31316],{"class":88},[82,31353,31354],{"class":96}," ros-humble-jammy:latest",[82,31356,31322],{"class":96},[82,31358,31359],{"class":84,"line":513},[82,31360,486],{"emptyLinePlaceholder":485},[82,31362,31363,31365,31367,31369,31372],{"class":84,"line":1388},[82,31364,29135],{"class":2384},[82,31366,31313],{"class":96},[82,31368,31316],{"class":88},[82,31370,31371],{"class":96}," ros-jazzy-noble:latest",[82,31373,31322],{"class":96},[82,31375,31376],{"class":84,"line":1394},[82,31377,486],{"emptyLinePlaceholder":485},[82,31379,31380,31382,31384,31386,31389],{"class":84,"line":1399},[82,31381,29135],{"class":2384},[82,31383,31313],{"class":96},[82,31385,31316],{"class":88},[82,31387,31388],{"class":96}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[82,31390,31322],{"class":96},[82,31392,31393],{"class":84,"line":1430},[82,31394,486],{"emptyLinePlaceholder":485},[82,31396,31397,31399,31401,31403,31406],{"class":84,"line":1818},[82,31398,29135],{"class":2384},[82,31400,31313],{"class":96},[82,31402,31316],{"class":88},[82,31404,31405],{"class":96}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[82,31407,31322],{"class":96},[19,31409,31410],{},[4078,31411],{"alt":78,"src":31412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31414,31415],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31417,31418],{},[4078,31419],{"alt":78,"src":31420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31422,31423],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,31425,31426],{},[29,31427,31428],{},"创建 Docker Hub 账户",[19,31430,31431],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,31433,31434],{"start":157},[29,31435,31436],{},"登录 Docker Hub",[19,31438,31439],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[73,31441,31443],{"className":26406,"code":31442,"language":26408,"meta":78,"style":78},"docker login\n",[32,31444,31445],{"__ignoreMap":78},[82,31446,31447,31449],{"class":84,"line":85},[82,31448,29135],{"class":2384},[82,31450,31451],{"class":96}," login\n",[19,31453,31454],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,31456,31457],{},[29,31458,31459],{},"为你的镜像打标签",[19,31461,31462,31463,31466],{},"Docker Hub 使用 ",[32,31464,31465],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[73,31468,31470],{"className":26406,"code":31469,"language":26408,"meta":78,"style":78},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[32,31471,31472],{"__ignoreMap":78},[82,31473,31474,31476,31479,31481,31484,31487,31490,31492],{"class":84,"line":85},[82,31475,29135],{"class":2384},[82,31477,31478],{"class":96}," tag",[82,31480,31371],{"class":96},[82,31482,31483],{"class":112}," \u003C",[82,31485,31486],{"class":96},"你的用户",[82,31488,31489],{"class":92},"名",[82,31491,3709],{"class":112},[82,31493,31494],{"class":96},"\u002Fros-jazzy-noble:latest\n",[19,31496,31497,31498,31501],{},"例如，如果你的 Docker Hub 用户名是 ",[32,31499,31500],{},"tungchiahui","，你应该执行：",[73,31503,31505],{"className":26406,"code":31504,"language":26408,"meta":78,"style":78},"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",[32,31506,31507,31518,31522,31533,31537,31548,31552,31563,31567],{"__ignoreMap":78},[82,31508,31509,31511,31513,31515],{"class":84,"line":85},[82,31510,29135],{"class":2384},[82,31512,31478],{"class":96},[82,31514,31337],{"class":96},[82,31516,31517],{"class":96}," tungchiahui\u002Fros-noetic-focal:latest\n",[82,31519,31520],{"class":84,"line":157},[82,31521,486],{"emptyLinePlaceholder":485},[82,31523,31524,31526,31528,31530],{"class":84,"line":404},[82,31525,29135],{"class":2384},[82,31527,31478],{"class":96},[82,31529,31354],{"class":96},[82,31531,31532],{"class":96}," tungchiahui\u002Fros-humble-jammy:latest\n",[82,31534,31535],{"class":84,"line":413},[82,31536,486],{"emptyLinePlaceholder":485},[82,31538,31539,31541,31543,31545],{"class":84,"line":508},[82,31540,29135],{"class":2384},[82,31542,31478],{"class":96},[82,31544,31371],{"class":96},[82,31546,31547],{"class":96}," tungchiahui\u002Fros-jazzy-noble:latest\n",[82,31549,31550],{"class":84,"line":513},[82,31551,486],{"emptyLinePlaceholder":485},[82,31553,31554,31556,31558,31560],{"class":84,"line":1388},[82,31555,29135],{"class":2384},[82,31557,31478],{"class":96},[82,31559,31388],{"class":96},[82,31561,31562],{"class":96}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[82,31564,31565],{"class":84,"line":1394},[82,31566,486],{"emptyLinePlaceholder":485},[82,31568,31569,31571,31573,31575],{"class":84,"line":1399},[82,31570,29135],{"class":2384},[82,31572,31478],{"class":96},[82,31574,31405],{"class":96},[82,31576,31577],{"class":96}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,31579,31580],{"start":157},[29,31581,31582],{},"推送镜像到 Docker Hub",[19,31584,31585],{},"使用以下命令将镜像推送到 Docker Hub：",[73,31587,31589],{"className":26406,"code":31588,"language":26408,"meta":78,"style":78},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[32,31590,31591],{"__ignoreMap":78},[82,31592,31593,31595,31598,31600,31602,31604,31606],{"class":84,"line":85},[82,31594,29135],{"class":2384},[82,31596,31597],{"class":96}," push",[82,31599,31483],{"class":112},[82,31601,31486],{"class":96},[82,31603,31489],{"class":92},[82,31605,3709],{"class":112},[82,31607,31608],{"class":96},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31610,17220],{},[73,31612,31614],{"className":26406,"code":31613,"language":26408,"meta":78,"style":78},"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",[32,31615,31616,31624,31628,31636,31640,31648,31652,31661,31665,31673,31677],{"__ignoreMap":78},[82,31617,31618,31620,31622],{"class":84,"line":85},[82,31619,29135],{"class":2384},[82,31621,31597],{"class":96},[82,31623,31517],{"class":96},[82,31625,31626],{"class":84,"line":157},[82,31627,486],{"emptyLinePlaceholder":485},[82,31629,31630,31632,31634],{"class":84,"line":404},[82,31631,29135],{"class":2384},[82,31633,31597],{"class":96},[82,31635,31532],{"class":96},[82,31637,31638],{"class":84,"line":413},[82,31639,486],{"emptyLinePlaceholder":485},[82,31641,31642,31644,31646],{"class":84,"line":508},[82,31643,29135],{"class":2384},[82,31645,31597],{"class":96},[82,31647,31547],{"class":96},[82,31649,31650],{"class":84,"line":513},[82,31651,486],{"emptyLinePlaceholder":485},[82,31653,31654,31656,31658],{"class":84,"line":1388},[82,31655,29135],{"class":2384},[82,31657,31597],{"class":96},[82,31659,31660],{"class":96}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[82,31662,31663],{"class":84,"line":1394},[82,31664,486],{"emptyLinePlaceholder":485},[82,31666,31667,31669,31671],{"class":84,"line":1399},[82,31668,29135],{"class":2384},[82,31670,31597],{"class":96},[82,31672,31577],{"class":96},[82,31674,31675],{"class":84,"line":1430},[82,31676,486],{"emptyLinePlaceholder":485},[82,31678,31679,31681,31683],{"class":84,"line":1818},[82,31680,29135],{"class":2384},[82,31682,31597],{"class":96},[82,31684,31685],{"class":96}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,31687,31688],{"start":404},[29,31689,31690],{},"验证推送成功",[19,31692,31693],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31695,31696],{},[2913,31697,6379],{},[3755,31699,31700,31703],{},[29,31701,31702],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,31704,31705],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31707,31708],{},[4078,31709],{"alt":78,"src":31710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31712,31713],{},[4078,31714],{"alt":78,"src":31715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24582,31717,31719],{"id":31718},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31721,31722,31723,31726,31727,31730],{},"如果您想在 ",[2913,31724,31725],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2913,31728,31729],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31732,31733,31734],{},"1. ",[2913,31735,31736],{},"启用 Docker 跨平台构建",[19,31738,31739],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31741,31742],{},"第一步：启用 buildx（只需执行一次）",[73,31744,31746],{"className":26406,"code":31745,"language":26408,"meta":78,"style":78},"docker buildx create --name multiarch_builder --use\n",[32,31747,31748],{"__ignoreMap":78},[82,31749,31750,31752,31755,31758,31761,31764],{"class":84,"line":85},[82,31751,29135],{"class":2384},[82,31753,31754],{"class":96}," buildx",[82,31756,31757],{"class":96}," create",[82,31759,31760],{"class":88}," --name",[82,31762,31763],{"class":96}," multiarch_builder",[82,31765,31766],{"class":88}," --use\n",[19,31768,31769],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31771,31772],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[73,31774,31776],{"className":26406,"code":31775,"language":26408,"meta":78,"style":78},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[32,31777,31778],{"__ignoreMap":78},[82,31779,31780,31782,31784,31786,31789,31792,31795,31798],{"class":84,"line":85},[82,31781,29135],{"class":2384},[82,31783,29812],{"class":96},[82,31785,29815],{"class":88},[82,31787,31788],{"class":88}," --privileged",[82,31790,31791],{"class":96}," multiarch\u002Fqemu-user-static",[82,31793,31794],{"class":88}," --reset",[82,31796,31797],{"class":88}," -p",[82,31799,31800],{"class":96}," yes\n",[19,31802,31803],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31805,31806],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[73,31808,31810],{"className":26406,"code":31809,"language":26408,"meta":78,"style":78},"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",[32,31811,31812,31854,31858,31863,31873,31883,31892,31898,31902,31906,31916,31924,31933,31939,31943,31947,31957,31965,31974,31980,31984,31988,31998,32006,32015,32021,32025,32029,32039,32047,32056,32062,32066,32070,32080,32088,32097,32103,32107,32111,32121,32129,32138,32144,32148,32152,32162,32170,32179,32185,32189,32193,32203,32211,32220,32226,32230,32234,32245,32253,32262,32268],{"__ignoreMap":78},[82,31813,31814,31816,31818,31820,31823,31826,31828,31830,31833,31835,31837,31839,31841,31844,31847,31849,31852],{"class":84,"line":85},[82,31815,29135],{"class":2384},[82,31817,31754],{"class":96},[82,31819,31313],{"class":96},[82,31821,31822],{"class":88}," --platform",[82,31824,31825],{"class":96}," linux\u002Famd64,linux\u002Farm64",[82,31827,31316],{"class":88},[82,31829,31483],{"class":112},[82,31831,31832],{"class":96},"你的镜像",[82,31834,31489],{"class":92},[82,31836,3709],{"class":112},[82,31838,3608],{"class":96},[82,31840,3659],{"class":112},[82,31842,31843],{"class":96},"标",[82,31845,31846],{"class":92},"签",[82,31848,3709],{"class":112},[82,31850,31851],{"class":88}," --push",[82,31853,31322],{"class":96},[82,31855,31856],{"class":84,"line":157},[82,31857,486],{"emptyLinePlaceholder":485},[82,31859,31860],{"class":84,"line":404},[82,31861,31862],{"class":2828},"# 例子：\n",[82,31864,31865,31867,31869,31871],{"class":84,"line":413},[82,31866,29135],{"class":2384},[82,31868,31754],{"class":96},[82,31870,31313],{"class":96},[82,31872,27263],{"class":88},[82,31874,31875,31878,31881],{"class":84,"line":508},[82,31876,31877],{"class":92},"--platform ",[82,31879,31880],{"class":96},"linux\u002Famd64,linux\u002Farm64",[82,31882,27263],{"class":88},[82,31884,31885,31887,31890],{"class":84,"line":513},[82,31886,31316],{"class":88},[82,31888,31889],{"class":96}," tungchiahui\u002Fros:noetic-focal",[82,31891,27263],{"class":88},[82,31893,31894,31896],{"class":84,"line":1388},[82,31895,31851],{"class":88},[82,31897,27263],{"class":88},[82,31899,31900],{"class":84,"line":1394},[82,31901,31322],{"class":96},[82,31903,31904],{"class":84,"line":1399},[82,31905,486],{"emptyLinePlaceholder":485},[82,31907,31908,31910,31912,31914],{"class":84,"line":1430},[82,31909,29135],{"class":2384},[82,31911,31754],{"class":96},[82,31913,31313],{"class":96},[82,31915,27263],{"class":88},[82,31917,31918,31920,31922],{"class":84,"line":1818},[82,31919,31877],{"class":92},[82,31921,31880],{"class":96},[82,31923,27263],{"class":88},[82,31925,31926,31928,31931],{"class":84,"line":2082},[82,31927,31316],{"class":88},[82,31929,31930],{"class":96}," tungchiahui\u002Fros:humble-jammy",[82,31932,27263],{"class":88},[82,31934,31935,31937],{"class":84,"line":2233},[82,31936,31851],{"class":88},[82,31938,27263],{"class":88},[82,31940,31941],{"class":84,"line":2255},[82,31942,31322],{"class":96},[82,31944,31945],{"class":84,"line":2260},[82,31946,486],{"emptyLinePlaceholder":485},[82,31948,31949,31951,31953,31955],{"class":84,"line":2298},[82,31950,29135],{"class":2384},[82,31952,31754],{"class":96},[82,31954,31313],{"class":96},[82,31956,27263],{"class":88},[82,31958,31959,31961,31963],{"class":84,"line":2303},[82,31960,31877],{"class":92},[82,31962,31880],{"class":96},[82,31964,27263],{"class":88},[82,31966,31967,31969,31972],{"class":84,"line":2321},[82,31968,31316],{"class":88},[82,31970,31971],{"class":96}," tungchiahui\u002Fros:jazzy-noble",[82,31973,27263],{"class":88},[82,31975,31976,31978],{"class":84,"line":2533},[82,31977,31851],{"class":88},[82,31979,27263],{"class":88},[82,31981,31982],{"class":84,"line":2538},[82,31983,31322],{"class":96},[82,31985,31986],{"class":84,"line":2548},[82,31987,486],{"emptyLinePlaceholder":485},[82,31989,31990,31992,31994,31996],{"class":84,"line":2579},[82,31991,28902],{"class":2384},[82,31993,31754],{"class":96},[82,31995,31313],{"class":96},[82,31997,27263],{"class":88},[82,31999,32000,32002,32004],{"class":84,"line":2585},[82,32001,31877],{"class":92},[82,32003,31880],{"class":96},[82,32005,27263],{"class":88},[82,32007,32008,32010,32013],{"class":84,"line":4350},[82,32009,31316],{"class":88},[82,32011,32012],{"class":96}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[82,32014,27263],{"class":88},[82,32016,32017,32019],{"class":84,"line":4355},[82,32018,31851],{"class":88},[82,32020,27263],{"class":88},[82,32022,32023],{"class":84,"line":4360},[82,32024,31322],{"class":96},[82,32026,32027],{"class":84,"line":4365},[82,32028,486],{"emptyLinePlaceholder":485},[82,32030,32031,32033,32035,32037],{"class":84,"line":4379},[82,32032,29135],{"class":2384},[82,32034,31754],{"class":96},[82,32036,31313],{"class":96},[82,32038,27263],{"class":88},[82,32040,32041,32043,32045],{"class":84,"line":4384},[82,32042,31877],{"class":92},[82,32044,31880],{"class":96},[82,32046,27263],{"class":88},[82,32048,32049,32051,32054],{"class":84,"line":5176},[82,32050,31316],{"class":88},[82,32052,32053],{"class":96}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[82,32055,27263],{"class":88},[82,32057,32058,32060],{"class":84,"line":5190},[82,32059,31851],{"class":88},[82,32061,27263],{"class":88},[82,32063,32064],{"class":84,"line":5198},[82,32065,31322],{"class":96},[82,32067,32068],{"class":84,"line":5203},[82,32069,486],{"emptyLinePlaceholder":485},[82,32071,32072,32074,32076,32078],{"class":84,"line":5209},[82,32073,28902],{"class":2384},[82,32075,31754],{"class":96},[82,32077,31313],{"class":96},[82,32079,27263],{"class":88},[82,32081,32082,32084,32086],{"class":84,"line":5215},[82,32083,31877],{"class":92},[82,32085,31880],{"class":96},[82,32087,27263],{"class":88},[82,32089,32090,32092,32095],{"class":84,"line":5220},[82,32091,31316],{"class":88},[82,32093,32094],{"class":96}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[82,32096,27263],{"class":88},[82,32098,32099,32101],{"class":84,"line":10539},[82,32100,31851],{"class":88},[82,32102,27263],{"class":88},[82,32104,32105],{"class":84,"line":10563},[82,32106,31322],{"class":96},[82,32108,32109],{"class":84,"line":10568},[82,32110,486],{"emptyLinePlaceholder":485},[82,32112,32113,32115,32117,32119],{"class":84,"line":10574},[82,32114,29135],{"class":2384},[82,32116,31754],{"class":96},[82,32118,31313],{"class":96},[82,32120,27263],{"class":88},[82,32122,32123,32125,32127],{"class":84,"line":10601},[82,32124,31877],{"class":92},[82,32126,31880],{"class":96},[82,32128,27263],{"class":88},[82,32130,32131,32133,32136],{"class":84,"line":10606},[82,32132,31316],{"class":88},[82,32134,32135],{"class":96}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[82,32137,27263],{"class":88},[82,32139,32140,32142],{"class":84,"line":10612},[82,32141,31851],{"class":88},[82,32143,27263],{"class":88},[82,32145,32146],{"class":84,"line":10624},[82,32147,31322],{"class":96},[82,32149,32150],{"class":84,"line":10636},[82,32151,486],{"emptyLinePlaceholder":485},[82,32153,32154,32156,32158,32160],{"class":84,"line":10648},[82,32155,29135],{"class":2384},[82,32157,31754],{"class":96},[82,32159,31313],{"class":96},[82,32161,27263],{"class":88},[82,32163,32164,32166,32168],{"class":84,"line":12307},[82,32165,31877],{"class":92},[82,32167,31880],{"class":96},[82,32169,27263],{"class":88},[82,32171,32172,32174,32177],{"class":84,"line":12332},[82,32173,31316],{"class":88},[82,32175,32176],{"class":96}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[82,32178,27263],{"class":88},[82,32180,32181,32183],{"class":84,"line":12355},[82,32182,31851],{"class":88},[82,32184,27263],{"class":88},[82,32186,32187],{"class":84,"line":12379},[82,32188,31322],{"class":96},[82,32190,32191],{"class":84,"line":12384},[82,32192,486],{"emptyLinePlaceholder":485},[82,32194,32195,32197,32199,32201],{"class":84,"line":12389},[82,32196,28902],{"class":2384},[82,32198,31754],{"class":96},[82,32200,31313],{"class":96},[82,32202,27263],{"class":88},[82,32204,32205,32207,32209],{"class":84,"line":12394},[82,32206,31877],{"class":92},[82,32208,31880],{"class":96},[82,32210,27263],{"class":88},[82,32212,32213,32215,32218],{"class":84,"line":12403},[82,32214,31316],{"class":88},[82,32216,32217],{"class":96}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[82,32219,27263],{"class":88},[82,32221,32222,32224],{"class":84,"line":12408},[82,32223,31851],{"class":88},[82,32225,27263],{"class":88},[82,32227,32228],{"class":84,"line":12414},[82,32229,31322],{"class":96},[82,32231,32232],{"class":84,"line":12435},[82,32233,486],{"emptyLinePlaceholder":485},[82,32235,32236,32239,32241,32243],{"class":84,"line":12441},[82,32237,32238],{"class":2384},"  docker",[82,32240,31754],{"class":96},[82,32242,31313],{"class":96},[82,32244,27263],{"class":88},[82,32246,32247,32249,32251],{"class":84,"line":12455},[82,32248,31877],{"class":92},[82,32250,31880],{"class":96},[82,32252,27263],{"class":88},[82,32254,32255,32257,32260],{"class":84,"line":12461},[82,32256,31316],{"class":88},[82,32258,32259],{"class":96}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[82,32261,27263],{"class":88},[82,32263,32264,32266],{"class":84,"line":12488},[82,32265,31851],{"class":88},[82,32267,27263],{"class":88},[82,32269,32270],{"class":84,"line":12497},[82,32271,31322],{"class":96},[19,32273,32274],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32276,32277],{},[4078,32278],{"alt":78,"src":32279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,32281,32282],{},[4078,32283],{"alt":78,"src":32284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24582,32286,32288],{"id":32287},"_623清除构建缓存","6.2.3.清除构建缓存",[73,32290,32292],{"className":26406,"code":32291,"language":26408,"meta":78,"style":78},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[32,32293,32294,32299],{"__ignoreMap":78},[82,32295,32296],{"class":84,"line":85},[82,32297,32298],{"class":2828},"# 清理BuildKit构建缓存\n",[82,32300,32301,32303,32306,32309],{"class":84,"line":157},[82,32302,29135],{"class":2384},[82,32304,32305],{"class":96}," builder",[82,32307,32308],{"class":96}," prune",[82,32310,32311],{"class":88}," -f\n",[19,32313,32314],{},[4078,32315],{"alt":78,"src":32316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[65,32318,32320],{"id":32319},"_63补充","6.3.补充",[24582,32322,32324],{"id":32323},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32326,32327],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32329,32330],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32332,32333],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[73,32335,32337],{"className":26406,"code":32336,"language":26408,"meta":78,"style":78},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[32,32338,32339,32346],{"__ignoreMap":78},[82,32340,32341,32343],{"class":84,"line":85},[82,32342,29952],{"class":2384},[82,32344,32345],{"class":96}," nginx\n",[82,32347,32348,32350,32353,32356,32358],{"class":84,"line":157},[82,32349,31136],{"class":2384},[82,32351,32352],{"class":96}," echo",[82,32354,32355],{"class":96}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[82,32357,28804],{"class":112},[82,32359,32360],{"class":96}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32362,32363],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32365,32366],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[73,32368,32370],{"className":26406,"code":32369,"language":26408,"meta":78,"style":78},"docker build -t nginx:tuling .\n",[32,32371,32372],{"__ignoreMap":78},[82,32373,32374,32376,32378,32380,32383],{"class":84,"line":85},[82,32375,29135],{"class":2384},[82,32377,31313],{"class":96},[82,32379,31316],{"class":88},[82,32381,32382],{"class":96}," nginx:tuling",[82,32384,31322],{"class":96},[19,32386,32387],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32389,32390],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[73,32392,32394],{"className":26406,"code":32393,"language":26408,"meta":78,"style":78},"docker run -d -p 92:80 nginx:tuling\n",[32,32395,32396],{"__ignoreMap":78},[82,32397,32398,32400,32402,32405,32407,32410],{"class":84,"line":85},[82,32399,29135],{"class":2384},[82,32401,29812],{"class":96},[82,32403,32404],{"class":88}," -d",[82,32406,31797],{"class":88},[82,32408,32409],{"class":96}," 92:80",[82,32411,32412],{"class":96}," nginx:tuling\n",[19,32414,32415,32416],{},"4、访问 ",[323,32417,32420],{"href":32418,"rel":32419},"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",[26449],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32422,32423],{},[4078,32424],{"alt":78,"src":32425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32427,32428],{},[4078,32429],{"alt":78,"src":32430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24582,32432,32434],{"id":32433},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32436,32437],{},"只需要知道大体流程即可",[19,32439,32440],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32442,32443],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32445,32446],{},"2、在Dockerfile中添加以下内容",[73,32448,32450],{"className":28673,"code":32449,"language":28675,"meta":78,"style":78},"# 基于哪个镜像\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",[32,32451,32452,32457,32462,32467,32472,32477,32482,32487],{"__ignoreMap":78},[82,32453,32454],{"class":84,"line":85},[82,32455,32456],{},"# 基于哪个镜像\n",[82,32458,32459],{"class":84,"line":157},[82,32460,32461],{},"From java:8\n",[82,32463,32464],{"class":84,"line":404},[82,32465,32466],{},"# 复制文件到容器\n",[82,32468,32469],{"class":84,"line":413},[82,32470,32471],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[82,32473,32474],{"class":84,"line":508},[82,32475,32476],{},"# 声明需要暴露的端口\n",[82,32478,32479],{"class":84,"line":513},[82,32480,32481],{},"EXPOSE 8877\n",[82,32483,32484],{"class":84,"line":1388},[82,32485,32486],{},"# 配置容器启动后执行的命令\n",[82,32488,32489],{"class":84,"line":1394},[82,32490,32491],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32493,32494],{},"3、使用docker build命令构建镜像",[73,32496,32498],{"className":26406,"code":32497,"language":26408,"meta":78,"style":78},"docker build -t tulingmall-member:0.0.5 .\n",[32,32499,32500],{"__ignoreMap":78},[82,32501,32502,32504,32506,32508,32511],{"class":84,"line":85},[82,32503,29135],{"class":2384},[82,32505,31313],{"class":96},[82,32507,31316],{"class":88},[82,32509,32510],{"class":96}," tulingmall-member:0.0.5",[82,32512,31322],{"class":96},[19,32514,32515],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32517,32518],{},[4078,32519],{"alt":78,"src":32520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32522,32523],{},"4、启动镜像，加-d可在后台启动",[73,32525,32527],{"className":26406,"code":32526,"language":26408,"meta":78,"style":78},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[32,32528,32529],{"__ignoreMap":78},[82,32530,32531,32533,32535,32537,32539,32542],{"class":84,"line":85},[82,32532,29135],{"class":2384},[82,32534,29812],{"class":96},[82,32536,32404],{"class":88},[82,32538,31797],{"class":88},[82,32540,32541],{"class":96}," 8877:8877",[82,32543,32544],{"class":96}," tulingmall-member:0.0.5\n",[19,32546,32547],{},"加上JVM参数：",[73,32549,32551],{"className":26406,"code":32550,"language":26408,"meta":78,"style":78},"# --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",[32,32552,32553,32558,32573,32583,32592,32599],{"__ignoreMap":78},[82,32554,32555],{"class":84,"line":85},[82,32556,32557],{"class":2828},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[82,32559,32560,32562,32564,32567,32569,32571],{"class":84,"line":157},[82,32561,29135],{"class":2384},[82,32563,29812],{"class":96},[82,32565,32566],{"class":88},"  -d",[82,32568,31797],{"class":88},[82,32570,32541],{"class":96},[82,32572,27263],{"class":88},[82,32574,32575,32577,32580],{"class":84,"line":404},[82,32576,30710],{"class":92},[82,32578,32579],{"class":96},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[82,32581,32582],{"class":88},"  \\\n",[82,32584,32585,32587,32590],{"class":84,"line":413},[82,32586,30710],{"class":92},[82,32588,32589],{"class":96},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[82,32591,32582],{"class":88},[82,32593,32594,32597],{"class":84,"line":508},[82,32595,32596],{"class":92},"--cap-add=SYS_PTRACE  ",[82,32598,28757],{"class":88},[82,32600,32601],{"class":84,"line":513},[82,32602,32603],{"class":92},"tulingmall-member:0.0.5\n",[19,32605,32606],{},"5、访问会员服务接口",[19,32608,32609],{},[4078,32610],{"alt":78,"src":32611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24582,32613,32615],{"id":32614},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32617,32618],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32620,32621,32622],{},"阿里云docker镜像仓库：",[323,32623,32624],{"href":32624,"rel":32625},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26449],[19,32627,32628],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32630,32631],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32633,32634],{},[4078,32635],{"alt":78,"src":32636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32638,32639],{},"要把镜像推送到镜像仓库",[73,32641,32643],{"className":26406,"code":32642,"language":26408,"meta":78,"style":78},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,32644,32645],{"__ignoreMap":78},[82,32646,32647,32649,32651,32653],{"class":84,"line":85},[82,32648,29135],{"class":2384},[82,32650,31478],{"class":96},[82,32652,32510],{"class":96},[82,32654,32655],{"class":96}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32657,32658],{},"最后将镜像推送到远程仓库",[73,32660,32662],{"className":26406,"code":32661,"language":26408,"meta":78,"style":78},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,32663,32664],{"__ignoreMap":78},[82,32665,32666,32668,32670],{"class":84,"line":85},[82,32667,29135],{"class":2384},[82,32669,31597],{"class":96},[82,32671,32655],{"class":96},[2671,32673,32674],{},"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":78,"searchDepth":157,"depth":157,"links":32676},[32677,32678,32679],{"id":31064,"depth":404,"text":31065},{"id":31293,"depth":404,"text":31294},{"id":32319,"depth":404,"text":32320},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31056,"description":78},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32686,"title":32687,"body":32688,"description":78,"extension":2700,"meta":32831,"navigation":485,"path":32832,"seo":32833,"stem":32834,"__hash__":32835},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32689,"toc":32829},[32690,32693,32698,32703,32706,32711,32716,32719,32724,32729,32732,32737,32740,32743,32746,32749,32752,32755,32775,32797,32800,32803,32823,32826],[10,32691,32687],{"id":32692},"_7vscode远程开发",[26,32694,32695],{},[29,32696,32697],{},"插件1：微软Docker工具",[19,32699,32700],{},[4078,32701],{"alt":78,"src":32702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32704,32705],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32707,32708],{},[4078,32709],{"alt":78,"src":32710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,32712,32713],{"start":157},[29,32714,32715],{},"插件2：微软Docker远程开发工具",[19,32717,32718],{},"下面这是远程开发的插件。",[19,32720,32721],{},[4078,32722],{"alt":78,"src":32723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32725,32726],{},[4078,32727],{"alt":78,"src":32728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32730,32731],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32733,32734],{},[4078,32735],{"alt":78,"src":32736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32738,32739],{},"安装完拓展之后，vscode进行链接：",[19,32741,32742],{},"1.按ctrl+shift+p",[19,32744,32745],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32747,32748],{},"3.选择目前运行的容器",[19,32750,32751],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32753,32754],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[73,32756,32758],{"className":26406,"code":32757,"language":26408,"meta":78,"style":78},"docker run -v 主机目录:容器目录 image-name\n",[32,32759,32760],{"__ignoreMap":78},[82,32761,32762,32764,32766,32769,32772],{"class":84,"line":85},[82,32763,29135],{"class":2384},[82,32765,29812],{"class":96},[82,32767,32768],{"class":88}," -v",[82,32770,32771],{"class":96}," 主机目录:容器目录",[82,32773,32774],{"class":96}," image-name\n",[73,32776,32778],{"className":26406,"code":32777,"language":26408,"meta":78,"style":78},"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",[32,32779,32780],{"__ignoreMap":78},[82,32781,32782,32784,32786,32789,32791,32794],{"class":84,"line":85},[82,32783,29135],{"class":2384},[82,32785,29812],{"class":96},[82,32787,32788],{"class":88}," -it",[82,32790,32768],{"class":88},[82,32792,32793],{"class":96}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[82,32795,32796],{"class":96}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32798,32799],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32801,32802],{},"查看挂载情况：",[73,32804,32806],{"className":26406,"code":32805,"language":26408,"meta":78,"style":78},"mount | grep -i project\n",[32,32807,32808],{"__ignoreMap":78},[82,32809,32810,32813,32815,32818,32820],{"class":84,"line":85},[82,32811,32812],{"class":2384},"mount",[82,32814,27694],{"class":112},[82,32816,32817],{"class":2384}," grep",[82,32819,29012],{"class":88},[82,32821,32822],{"class":96}," project\n",[19,32824,32825],{},"也可以通过ls来进行查看",[2671,32827,32828],{},"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":78,"searchDepth":157,"depth":157,"links":32830},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32687,"description":78},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32837,"title":32838,"body":32839,"description":2699,"extension":2700,"meta":32843,"navigation":485,"path":32845,"seo":32846,"stem":32847,"__hash__":32848},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32840,"toc":32841},[],{"title":78,"searchDepth":157,"depth":157,"links":32842},[],{"category":32844},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32838,"description":2699},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32850,"title":32851,"body":32852,"description":2699,"extension":2700,"meta":32856,"navigation":485,"path":32857,"seo":32858,"stem":32859,"__hash__":32860},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32853,"toc":32854},[],{"title":78,"searchDepth":157,"depth":157,"links":32855},[],{"category":32844},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32851,"description":2699},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32862,"title":32863,"body":32864,"description":2699,"extension":2700,"meta":33153,"navigation":485,"path":33154,"seo":33155,"stem":33156,"__hash__":33157},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32865,"toc":33151},[32866,32869,32877,32892,32897,32948,32951,32957,33140,33145,33148],[10,32867,32863],{"id":32868},"_1验证深度学习环境",[19,32870,32871,32872],{},"关于环境的安装，看",[323,32873,32876],{"href":32874,"rel":32875},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26449],"Pytorch-->深度学习",[19,32878,32879,32880,32883,32884,32887,32888,32891],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[32,32881,32882],{},"pytorch-cuda=12.4"," 是一个“ ",[2913,32885,32886],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2913,32889,32890],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32893,32894],{},[4078,32895],{"alt":78,"src":32896},"\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",[73,32898,32900],{"className":26406,"code":32899,"language":26408,"meta":78,"style":78},"# 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",[32,32901,32902,32907],{"__ignoreMap":78},[82,32903,32904],{"class":84,"line":85},[82,32905,32906],{"class":2828},"# CUDA 12.4\n",[82,32908,32909,32912,32914,32917,32920,32923,32926,32929,32931,32934,32937,32940,32943,32945],{"class":84,"line":157},[82,32910,32911],{"class":2384},"conda",[82,32913,26418],{"class":96},[82,32915,32916],{"class":96}," pytorch==",[82,32918,32919],{"class":88},"2.5.1",[82,32921,32922],{"class":96}," torchvision==",[82,32924,32925],{"class":88},"0.20.1",[82,32927,32928],{"class":96}," torchaudio==",[82,32930,32919],{"class":88},[82,32932,32933],{"class":96}," pytorch-cuda=",[82,32935,32936],{"class":88},"12.4",[82,32938,32939],{"class":88}," -c",[82,32941,32942],{"class":96}," pytorch",[82,32944,32939],{"class":88},[82,32946,32947],{"class":96}," nvidia\n",[19,32949,32950],{},"）：",[19,32952,32953],{},[323,32954,32955],{"href":32955,"rel":32956},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26449],[73,32958,32960],{"className":75,"code":32959,"language":77,"meta":78,"style":78},"# 对深度学习环境进行测试\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",[32,32961,32962,32967,32974,32979,32989,33004,33009,33019,33056,33063,33075,33091,33096,33106,33118,33128],{"__ignoreMap":78},[82,32963,32964],{"class":84,"line":85},[82,32965,32966],{"class":2828},"# 对深度学习环境进行测试\n",[82,32968,32969,32971],{"class":84,"line":157},[82,32970,1123],{"class":112},[82,32972,32973],{"class":92}," torch\n",[82,32975,32976],{"class":84,"line":404},[82,32977,32978],{"class":2828},"# 查看cuda是否被激活\n",[82,32980,32981,32984,32986],{"class":84,"line":413},[82,32982,32983],{"class":92},"flag",[82,32985,113],{"class":112},[82,32987,32988],{"class":92},"torch.cuda.is_available()\n",[82,32990,32991,32993,32995,32998,33001],{"class":84,"line":508},[82,32992,407],{"class":88},[82,32994,93],{"class":92},[82,32996,32997],{"class":96},"\"cuda:\"",[82,32999,33000],{"class":92},", flag)   ",[82,33002,33003],{"class":2828},"#返回true的话说明被激活\n",[82,33005,33006],{"class":84,"line":513},[82,33007,33008],{"class":2828},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[82,33010,33011,33014,33016],{"class":84,"line":1388},[82,33012,33013],{"class":92},"ngpu",[82,33015,113],{"class":112},[82,33017,33018],{"class":88},"1\n",[82,33020,33021,33024,33026,33029,33032,33034,33037,33040,33043,33045,33047,33049,33051,33054],{"class":84,"line":1394},[82,33022,33023],{"class":92},"device",[82,33025,113],{"class":112},[82,33027,33028],{"class":92},"torch.device(",[82,33030,33031],{"class":96},"\"cuda:0\"",[82,33033,4307],{"class":112},[82,33035,33036],{"class":92},"(torch.cuda.is_available() ",[82,33038,33039],{"class":112},"and",[82,33041,33042],{"class":92}," ngpu",[82,33044,3709],{"class":112},[82,33046,2244],{"class":88},[82,33048,725],{"class":92},[82,33050,4304],{"class":112},[82,33052,33053],{"class":96}," \"cpu\"",[82,33055,119],{"class":92},[82,33057,33058,33060],{"class":84,"line":1399},[82,33059,407],{"class":88},[82,33061,33062],{"class":92},"(device)\n",[82,33064,33065,33067,33070,33072],{"class":84,"line":1430},[82,33066,407],{"class":88},[82,33068,33069],{"class":92},"(torch.cuda.get_device_name(",[82,33071,2244],{"class":88},[82,33073,33074],{"class":92},"))\n",[82,33076,33077,33079,33082,33084,33086,33088],{"class":84,"line":1818},[82,33078,407],{"class":88},[82,33080,33081],{"class":92},"(torch.rand(",[82,33083,2841],{"class":88},[82,33085,3136],{"class":92},[82,33087,2841],{"class":88},[82,33089,33090],{"class":92},").cuda())\n",[82,33092,33093],{"class":84,"line":2082},[82,33094,33095],{"class":2828},"# 查看cuda和cudnn的版本\n",[82,33097,33098,33101,33103],{"class":84,"line":2233},[82,33099,33100],{"class":92},"cuda_version",[82,33102,113],{"class":112},[82,33104,33105],{"class":92},"torch.version.cuda\n",[82,33107,33108,33110,33112,33115],{"class":84,"line":2255},[82,33109,407],{"class":88},[82,33111,93],{"class":92},[82,33113,33114],{"class":96},"\"cuda version\"",[82,33116,33117],{"class":92},",cuda_version)\n",[82,33119,33120,33123,33125],{"class":84,"line":2260},[82,33121,33122],{"class":92},"cudnn_version",[82,33124,113],{"class":112},[82,33126,33127],{"class":92},"torch.backends.cudnn.version()\n",[82,33129,33130,33132,33134,33137],{"class":84,"line":2298},[82,33131,407],{"class":88},[82,33133,93],{"class":92},[82,33135,33136],{"class":96},"\"cudnn version\"",[82,33138,33139],{"class":92},",cudnn_version)\n",[19,33141,33142],{},[4078,33143],{"alt":78,"src":33144},"\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,33146,33147],{},"cuda:0 指的是一块显卡",[2671,33149,33150],{},"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":78,"searchDepth":157,"depth":157,"links":33152},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32863,"description":2699},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33159,"title":33160,"body":33161,"description":2699,"extension":2700,"meta":52951,"navigation":485,"path":52952,"seo":52953,"stem":52954,"__hash__":52955},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33162,"toc":52945},[33163,33166,33170,33174,33177,33182,33187,33190,33195,33200,33205,33208,33212,33217,33221,33226,33229,33234,33237,33240,33243,33246,33251,33254,33259,33264,33269,33274,33277,33281,33284,33289,33891,33896,33899,33904,33907,33910,34371,34374,34377,34380,34383,36430,36433,36438,36443,37236,37239,37244,38022,38026,39685,39689,40403,40407,40411,40416,40421,40426,40429,40434,40439,40444,40449,40454,40458,40463,41744,41749,41752,41755,41758,41913,41916,41919,43135,43140,43835,43839,43843,43848,43853,43856,43861,43866,43871,43876,43881,43886,43891,43896,43901,43906,43911,43916,43921,43926,43931,43936,43941,43946,43951,43956,43961,43966,43971,43976,43981,43986,43991,43996,44001,44006,44010,44014,44017,45495,45499,47146,47150,47844,47848,47851,47854,48397,48400,48404,48407,49804,49808,49811,50389,52175,52179,52182,52942],[10,33164,33160],{"id":33165},"_2经典神经网络",[65,33167,33169],{"id":33168},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24582,33171,33173],{"id":33172},"_211原理介绍","2.1.1.原理介绍",[19,33175,33176],{},"LeNet-5",[26,33178,33179],{},[29,33180,33181],{},"原理",[19,33183,33184],{},[4078,33185],{"alt":78,"src":33186},"\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,33188,33189],{},"B是batch批次；C是channel通道",[26,33191,33192],{"start":157},[29,33193,33194],{},"网络参数详细",[19,33196,33197],{},[4078,33198],{"alt":78,"src":33199},"\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,33201,33202],{},[4078,33203],{"alt":78,"src":33204},"\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,33206,33207],{},"AlexNet",[26,33209,33210],{},[29,33211,33181],{},[19,33213,33214],{},[4078,33215],{"alt":78,"src":33216},"\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",[26,33218,33219],{"start":157},[29,33220,33194],{},[19,33222,33223],{},[4078,33224],{"alt":78,"src":33225},"\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,33227,33228],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33230,33231],{},[4078,33232],{"alt":78,"src":33233},"\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,33235,33236],{},"数据处理中的图像增强操作:",[19,33238,33239],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33241,33242],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33244,33245],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33247,33248],{},[4078,33249],{"alt":78,"src":33250},"\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,33252,33253],{},"提升网络精确度的方法：LRN正则化",[19,33255,33256],{},[4078,33257],{"alt":78,"src":33258},"\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,33260,33261],{},[4078,33262],{"alt":78,"src":33263},"\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",[26,33265,33266],{"start":404},[29,33267,33268],{},"AlexNet的总结",[19,33270,33271],{},[4078,33272],{"alt":78,"src":33273},"\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,33275,33276],{},"比LeNet模型要深一丢丢",[24582,33278,33280],{"id":33279},"_212代码实现","2.1.2.代码实现",[19,33282,33283],{},"（1）LeNet",[26,33285,33286],{},[29,33287,33288],{},"模型搭建",[73,33290,33292],{"className":75,"code":33291,"language":77,"meta":78,"style":78},"# 导入库\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",[32,33293,33294,33299,33305,33310,33322,33327,33339,33343,33363,33368,33373,33384,33389,33408,33412,33417,33466,33478,33483,33512,33547,33574,33579,33591,33596,33616,33635,33654,33658,33663,33673,33690,33701,33716,33727,33738,33753,33768,33779,33786,33790,33804,33809,33832,33837,33842,33847,33851,33856,33861,33871],{"__ignoreMap":78},[82,33295,33296],{"class":84,"line":85},[82,33297,33298],{"class":2828},"# 导入库\n",[82,33300,33301,33303],{"class":84,"line":157},[82,33302,1123],{"class":112},[82,33304,32973],{"class":92},[82,33306,33307],{"class":84,"line":404},[82,33308,33309],{"class":2828},"# 导入神经网络层\n",[82,33311,33312,33314,33317,33319],{"class":84,"line":413},[82,33313,1117],{"class":112},[82,33315,33316],{"class":92}," torch ",[82,33318,1123],{"class":112},[82,33320,33321],{"class":92}," nn\n",[82,33323,33324],{"class":84,"line":508},[82,33325,33326],{"class":2828},"# 导入展示神经网络参数的包\n",[82,33328,33329,33331,33334,33336],{"class":84,"line":513},[82,33330,1117],{"class":112},[82,33332,33333],{"class":92}," torchsummary ",[82,33335,1123],{"class":112},[82,33337,33338],{"class":92}," summary\n",[82,33340,33341],{"class":84,"line":1388},[82,33342,486],{"emptyLinePlaceholder":485},[82,33344,33345,33347,33350,33352,33355,33357,33360],{"class":84,"line":1394},[82,33346,17281],{"class":112},[82,33348,33349],{"class":2384}," LeNet",[82,33351,93],{"class":92},[82,33353,33354],{"class":2384},"nn",[82,33356,233],{"class":92},[82,33358,33359],{"class":2384},"Module",[82,33361,33362],{"class":92},"):\n",[82,33364,33365],{"class":84,"line":1399},[82,33366,33367],{"class":2828},"    # 模型初始化:\n",[82,33369,33370],{"class":84,"line":1430},[82,33371,33372],{"class":2828},"    # 定义一些网络层和激活函数\n",[82,33374,33375,33378,33381],{"class":84,"line":1818},[82,33376,33377],{"class":112},"    def",[82,33379,33380],{"class":88}," __init__",[82,33382,33383],{"class":92},"(self):\n",[82,33385,33386],{"class":84,"line":2082},[82,33387,33388],{"class":2828},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[82,33390,33391,33394,33397,33400,33403,33406],{"class":84,"line":2233},[82,33392,33393],{"class":88},"        super",[82,33395,33396],{"class":92},"(LeNet,",[82,33398,33399],{"class":88},"self",[82,33401,33402],{"class":92},").",[82,33404,33405],{"class":88},"__init__",[82,33407,4576],{"class":92},[82,33409,33410],{"class":84,"line":2255},[82,33411,486],{"emptyLinePlaceholder":485},[82,33413,33414],{"class":84,"line":2260},[82,33415,33416],{"class":2828},"        # 定义网络层\n",[82,33418,33419,33422,33425,33427,33430,33433,33435,33437,33439,33442,33444,33446,33448,33451,33453,33455,33457,33460,33462,33464],{"class":84,"line":2298},[82,33420,33421],{"class":88},"        self",[82,33423,33424],{"class":92},".c1",[82,33426,113],{"class":112},[82,33428,33429],{"class":92},"nn.Conv2d(",[82,33431,33432],{"class":108},"in_channels",[82,33434,113],{"class":112},[82,33436,2283],{"class":88},[82,33438,3136],{"class":92},[82,33440,33441],{"class":108},"out_channels",[82,33443,113],{"class":112},[82,33445,3102],{"class":88},[82,33447,3136],{"class":92},[82,33449,33450],{"class":108},"kernel_size",[82,33452,113],{"class":112},[82,33454,3077],{"class":88},[82,33456,3136],{"class":92},[82,33458,33459],{"class":108},"padding",[82,33461,113],{"class":112},[82,33463,1425],{"class":88},[82,33465,119],{"class":92},[82,33467,33468,33470,33473,33475],{"class":84,"line":2303},[82,33469,33421],{"class":88},[82,33471,33472],{"class":92},".sig",[82,33474,113],{"class":112},[82,33476,33477],{"class":92},"nn.Sigmoid()\n",[82,33479,33480],{"class":84,"line":2321},[82,33481,33482],{"class":2828},"        # 定义池化\n",[82,33484,33485,33487,33490,33492,33495,33497,33499,33501,33503,33506,33508,33510],{"class":84,"line":2533},[82,33486,33421],{"class":88},[82,33488,33489],{"class":92},".s2",[82,33491,113],{"class":112},[82,33493,33494],{"class":92},"nn.AvgPool2d(",[82,33496,33450],{"class":108},[82,33498,113],{"class":112},[82,33500,1425],{"class":88},[82,33502,3136],{"class":92},[82,33504,33505],{"class":108},"stride",[82,33507,113],{"class":112},[82,33509,1425],{"class":88},[82,33511,119],{"class":92},[82,33513,33514,33516,33519,33521,33523,33525,33527,33529,33531,33533,33535,33537,33539,33541,33543,33545],{"class":84,"line":2538},[82,33515,33421],{"class":88},[82,33517,33518],{"class":92},".c3",[82,33520,113],{"class":112},[82,33522,33429],{"class":92},[82,33524,33432],{"class":108},[82,33526,113],{"class":112},[82,33528,3102],{"class":88},[82,33530,3136],{"class":92},[82,33532,33441],{"class":108},[82,33534,113],{"class":112},[82,33536,3355],{"class":88},[82,33538,3136],{"class":92},[82,33540,33450],{"class":108},[82,33542,113],{"class":112},[82,33544,3077],{"class":88},[82,33546,119],{"class":92},[82,33548,33549,33551,33554,33556,33558,33560,33562,33564,33566,33568,33570,33572],{"class":84,"line":2548},[82,33550,33421],{"class":88},[82,33552,33553],{"class":92},".s4",[82,33555,113],{"class":112},[82,33557,33494],{"class":92},[82,33559,33450],{"class":108},[82,33561,113],{"class":112},[82,33563,1425],{"class":88},[82,33565,3136],{"class":92},[82,33567,33505],{"class":108},[82,33569,113],{"class":112},[82,33571,1425],{"class":88},[82,33573,119],{"class":92},[82,33575,33576],{"class":84,"line":2579},[82,33577,33578],{"class":2828},"        # 定义平展层\n",[82,33580,33581,33583,33586,33588],{"class":84,"line":2585},[82,33582,33421],{"class":88},[82,33584,33585],{"class":92},".flatten",[82,33587,113],{"class":112},[82,33589,33590],{"class":92},"nn.Flatten()\n",[82,33592,33593],{"class":84,"line":4350},[82,33594,33595],{"class":2828},"        # 定义全连接层\n",[82,33597,33598,33600,33603,33605,33608,33610,33612,33614],{"class":84,"line":4355},[82,33599,33421],{"class":88},[82,33601,33602],{"class":92},".f5",[82,33604,113],{"class":112},[82,33606,33607],{"class":92},"nn.Linear(",[82,33609,6582],{"class":88},[82,33611,3136],{"class":92},[82,33613,3566],{"class":88},[82,33615,119],{"class":92},[82,33617,33618,33620,33623,33625,33627,33629,33631,33633],{"class":84,"line":4360},[82,33619,33421],{"class":88},[82,33621,33622],{"class":92},".f6",[82,33624,113],{"class":112},[82,33626,33607],{"class":92},[82,33628,3566],{"class":88},[82,33630,3136],{"class":92},[82,33632,3462],{"class":88},[82,33634,119],{"class":92},[82,33636,33637,33639,33642,33644,33646,33648,33650,33652],{"class":84,"line":4365},[82,33638,33421],{"class":88},[82,33640,33641],{"class":92},".f7",[82,33643,113],{"class":112},[82,33645,33607],{"class":92},[82,33647,3462],{"class":88},[82,33649,3136],{"class":92},[82,33651,440],{"class":88},[82,33653,119],{"class":92},[82,33655,33656],{"class":84,"line":4379},[82,33657,486],{"emptyLinePlaceholder":485},[82,33659,33660],{"class":84,"line":4384},[82,33661,33662],{"class":2828},"    # 写工具->写前向传播\n",[82,33664,33665,33667,33670],{"class":84,"line":5176},[82,33666,33377],{"class":112},[82,33668,33669],{"class":2384}," forward",[82,33671,33672],{"class":92},"(self,x):\n",[82,33674,33675,33678,33680,33682,33685,33687],{"class":84,"line":5190},[82,33676,33677],{"class":92},"        x",[82,33679,113],{"class":112},[82,33681,33399],{"class":88},[82,33683,33684],{"class":92},".sig(",[82,33686,33399],{"class":88},[82,33688,33689],{"class":92},".c1(x))\n",[82,33691,33692,33694,33696,33698],{"class":84,"line":5198},[82,33693,33677],{"class":92},[82,33695,113],{"class":112},[82,33697,33399],{"class":88},[82,33699,33700],{"class":92},".s2(x)\n",[82,33702,33703,33705,33707,33709,33711,33713],{"class":84,"line":5203},[82,33704,33677],{"class":92},[82,33706,113],{"class":112},[82,33708,33399],{"class":88},[82,33710,33684],{"class":92},[82,33712,33399],{"class":88},[82,33714,33715],{"class":92},".c3(x))\n",[82,33717,33718,33720,33722,33724],{"class":84,"line":5209},[82,33719,33677],{"class":92},[82,33721,113],{"class":112},[82,33723,33399],{"class":88},[82,33725,33726],{"class":92},".s4(x)\n",[82,33728,33729,33731,33733,33735],{"class":84,"line":5215},[82,33730,33677],{"class":92},[82,33732,113],{"class":112},[82,33734,33399],{"class":88},[82,33736,33737],{"class":92},".flatten(x)\n",[82,33739,33740,33742,33744,33746,33748,33750],{"class":84,"line":5220},[82,33741,33677],{"class":92},[82,33743,113],{"class":112},[82,33745,33399],{"class":88},[82,33747,33684],{"class":92},[82,33749,33399],{"class":88},[82,33751,33752],{"class":92},".f5(x))\n",[82,33754,33755,33757,33759,33761,33763,33765],{"class":84,"line":10539},[82,33756,33677],{"class":92},[82,33758,113],{"class":112},[82,33760,33399],{"class":88},[82,33762,33684],{"class":92},[82,33764,33399],{"class":88},[82,33766,33767],{"class":92},".f6(x))\n",[82,33769,33770,33772,33774,33776],{"class":84,"line":10563},[82,33771,33677],{"class":92},[82,33773,113],{"class":112},[82,33775,33399],{"class":88},[82,33777,33778],{"class":92},".f7(x)\n",[82,33780,33781,33783],{"class":84,"line":10568},[82,33782,2405],{"class":112},[82,33784,33785],{"class":92}," x\n",[82,33787,33788],{"class":84,"line":10574},[82,33789,486],{"emptyLinePlaceholder":485},[82,33791,33792,33794,33797,33799,33802],{"class":84,"line":10601},[82,33793,1237],{"class":112},[82,33795,33796],{"class":88}," __name__",[82,33798,5548],{"class":112},[82,33800,33801],{"class":96},"\"__main__\"",[82,33803,669],{"class":92},[82,33805,33806],{"class":84,"line":10606},[82,33807,33808],{"class":2828},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[82,33810,33811,33814,33816,33818,33821,33823,33826,33828,33830],{"class":84,"line":10612},[82,33812,33813],{"class":92},"    device",[82,33815,113],{"class":112},[82,33817,33028],{"class":92},[82,33819,33820],{"class":96},"\"cuda\"",[82,33822,4307],{"class":112},[82,33824,33825],{"class":92}," torch.cuda.is_available() ",[82,33827,4304],{"class":112},[82,33829,33053],{"class":96},[82,33831,119],{"class":92},[82,33833,33834],{"class":84,"line":10624},[82,33835,33836],{"class":2828},"    # 如果就是想指定用cpu用下方代码:\n",[82,33838,33839],{"class":84,"line":10636},[82,33840,33841],{"class":2828},"    # device=\"cpu\"\n",[82,33843,33844],{"class":84,"line":10648},[82,33845,33846],{"class":2828},"    # print(device)\n",[82,33848,33849],{"class":84,"line":12307},[82,33850,486],{"emptyLinePlaceholder":485},[82,33852,33853],{"class":84,"line":12332},[82,33854,33855],{"class":2828},"    # 实例化模型\n",[82,33857,33858],{"class":84,"line":12355},[82,33859,33860],{"class":2828},"    # 将模型放到设备中去运行\n",[82,33862,33863,33866,33868],{"class":84,"line":12379},[82,33864,33865],{"class":92},"    model",[82,33867,113],{"class":112},[82,33869,33870],{"class":92},"LeNet().to(device)\n",[82,33872,33873,33875,33878,33880,33882,33884,33886,33888],{"class":84,"line":12384},[82,33874,611],{"class":88},[82,33876,33877],{"class":92},"(summary(model,(",[82,33879,2283],{"class":88},[82,33881,3136],{"class":92},[82,33883,3650],{"class":88},[82,33885,3136],{"class":92},[82,33887,3650],{"class":88},[82,33889,33890],{"class":92},")))\n",[19,33892,33893],{},[4078,33894],{"alt":78,"src":33895},"\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,33897,33898],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33900,33901],{"start":157},[29,33902,33903],{},"训练",[19,33905,33906],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33908,33909],{},"在训练之前可以将数据展示看一下",[73,33911,33913],{"className":75,"code":33912,"language":77,"meta":78,"style":78},"# 建立画图的函数，用于展示数据\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",[32,33914,33915,33920,33925,33937,33949,33961,33966,33978,33983,33995,34000,34012,34016,34020,34040,34051,34056,34077,34088,34092,34097,34115,34126,34131,34142,34147,34158,34162,34167,34182,34195,34200,34205,34218,34231,34244,34249,34253,34258,34278,34295,34315,34328,34341,34351,34366],{"__ignoreMap":78},[82,33916,33917],{"class":84,"line":85},[82,33918,33919],{"class":2828},"# 建立画图的函数，用于展示数据\n",[82,33921,33922],{"class":84,"line":157},[82,33923,33924],{"class":2828},"# torchvision中包含很多内置的数据集\n",[82,33926,33927,33929,33932,33934],{"class":84,"line":404},[82,33928,1117],{"class":112},[82,33930,33931],{"class":92}," sklearn.externals.array_api_compat.torch ",[82,33933,1123],{"class":112},[82,33935,33936],{"class":92}," squeeze\n",[82,33938,33939,33941,33944,33946],{"class":84,"line":413},[82,33940,1117],{"class":112},[82,33942,33943],{"class":92}," torchvision.datasets ",[82,33945,1123],{"class":112},[82,33947,33948],{"class":92}," FashionMNIST\n",[82,33950,33951,33953,33956,33958],{"class":84,"line":508},[82,33952,1123],{"class":112},[82,33954,33955],{"class":92}," numpy ",[82,33957,728],{"class":112},[82,33959,33960],{"class":92}," np\n",[82,33962,33963],{"class":84,"line":513},[82,33964,33965],{"class":2828},"# 引入处理数据集的包\n",[82,33967,33968,33970,33973,33975],{"class":84,"line":1388},[82,33969,1117],{"class":112},[82,33971,33972],{"class":92}," torchvision ",[82,33974,1123],{"class":112},[82,33976,33977],{"class":92}," transforms\n",[82,33979,33980],{"class":84,"line":1394},[82,33981,33982],{"class":2828},"# 从torch库中引入数据处理的包\n",[82,33984,33985,33987,33990,33992],{"class":84,"line":1399},[82,33986,1123],{"class":112},[82,33988,33989],{"class":92}," torch.utils.data ",[82,33991,728],{"class":112},[82,33993,33994],{"class":92}," Data\n",[82,33996,33997],{"class":84,"line":1430},[82,33998,33999],{"class":2828},"# 导入画图的库\n",[82,34001,34002,34004,34007,34009],{"class":84,"line":1818},[82,34003,1123],{"class":112},[82,34005,34006],{"class":92}," matplotlib.pyplot ",[82,34008,728],{"class":112},[82,34010,34011],{"class":92}," plt\n",[82,34013,34014],{"class":84,"line":2082},[82,34015,486],{"emptyLinePlaceholder":485},[82,34017,34018],{"class":84,"line":2233},[82,34019,486],{"emptyLinePlaceholder":485},[82,34021,34022,34025,34027,34030,34033,34035,34038],{"class":84,"line":2255},[82,34023,34024],{"class":92},"train_data",[82,34026,113],{"class":112},[82,34028,34029],{"class":92},"FashionMNIST(",[82,34031,34032],{"class":108},"root",[82,34034,113],{"class":112},[82,34036,34037],{"class":96},"'.\u002Fdata'",[82,34039,1363],{"class":92},[82,34041,34042,34045,34047,34049],{"class":84,"line":2260},[82,34043,34044],{"class":108},"                        train",[82,34046,113],{"class":112},[82,34048,1205],{"class":88},[82,34050,1363],{"class":92},[82,34052,34053],{"class":84,"line":2298},[82,34054,34055],{"class":2828},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[82,34057,34058,34061,34063,34066,34069,34071,34074],{"class":84,"line":2303},[82,34059,34060],{"class":108},"                        transform",[82,34062,113],{"class":112},[82,34064,34065],{"class":92},"transforms.Compose([transforms.Resize(",[82,34067,34068],{"class":108},"size",[82,34070,113],{"class":112},[82,34072,34073],{"class":88},"224",[82,34075,34076],{"class":92},"),transforms.ToTensor()]),\n",[82,34078,34079,34082,34084,34086],{"class":84,"line":2321},[82,34080,34081],{"class":108},"                        download",[82,34083,113],{"class":112},[82,34085,1205],{"class":88},[82,34087,119],{"class":92},[82,34089,34090],{"class":84,"line":2533},[82,34091,486],{"emptyLinePlaceholder":485},[82,34093,34094],{"class":84,"line":2538},[82,34095,34096],{"class":2828},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[82,34098,34099,34102,34104,34107,34110,34112],{"class":84,"line":2548},[82,34100,34101],{"class":92},"train_loader",[82,34103,113],{"class":112},[82,34105,34106],{"class":92},"Data.DataLoader(",[82,34108,34109],{"class":108},"dataset",[82,34111,113],{"class":112},[82,34113,34114],{"class":92},"train_data,\n",[82,34116,34117,34120,34122,34124],{"class":84,"line":2579},[82,34118,34119],{"class":108},"                             batch_size",[82,34121,113],{"class":112},[82,34123,2964],{"class":88},[82,34125,1363],{"class":92},[82,34127,34128],{"class":84,"line":2585},[82,34129,34130],{"class":2828},"                             # 数据是否打乱\n",[82,34132,34133,34136,34138,34140],{"class":84,"line":4350},[82,34134,34135],{"class":108},"                             shuffle",[82,34137,113],{"class":112},[82,34139,1205],{"class":88},[82,34141,1363],{"class":92},[82,34143,34144],{"class":84,"line":4355},[82,34145,34146],{"class":2828},"                             # 规定加载数据的进程\n",[82,34148,34149,34152,34154,34156],{"class":84,"line":4360},[82,34150,34151],{"class":108},"                             num_workers",[82,34153,113],{"class":112},[82,34155,2244],{"class":88},[82,34157,119],{"class":92},[82,34159,34160],{"class":84,"line":4365},[82,34161,486],{"emptyLinePlaceholder":485},[82,34163,34164],{"class":84,"line":4379},[82,34165,34166],{"class":2828},"# 获得一个batch的数据\n",[82,34168,34169,34171,34174,34176,34179],{"class":84,"line":4384},[82,34170,597],{"class":112},[82,34172,34173],{"class":92}," step,(b_x,b_y) ",[82,34175,603],{"class":112},[82,34177,34178],{"class":88}," enumerate",[82,34180,34181],{"class":92},"(train_loader):\n",[82,34183,34184,34186,34189,34191,34193],{"class":84,"line":5176},[82,34185,2219],{"class":112},[82,34187,34188],{"class":92}," step ",[82,34190,3709],{"class":112},[82,34192,6688],{"class":88},[82,34194,669],{"class":92},[82,34196,34197],{"class":84,"line":5190},[82,34198,34199],{"class":112},"        break\n",[82,34201,34202],{"class":84,"line":5198},[82,34203,34204],{"class":2828},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[82,34206,34207,34210,34212,34215],{"class":84,"line":5203},[82,34208,34209],{"class":92},"batch_x",[82,34211,113],{"class":112},[82,34213,34214],{"class":92},"b_x.squeeze().numpy()  ",[82,34216,34217],{"class":2828},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[82,34219,34220,34223,34225,34228],{"class":84,"line":5209},[82,34221,34222],{"class":92},"batch_y",[82,34224,113],{"class":112},[82,34226,34227],{"class":92},"b_y.numpy()   ",[82,34229,34230],{"class":2828},"#将张量转换成功numpy数组\n",[82,34232,34233,34236,34238,34241],{"class":84,"line":5215},[82,34234,34235],{"class":92},"class_label",[82,34237,113],{"class":112},[82,34239,34240],{"class":92},"train_data.classes  ",[82,34242,34243],{"class":2828},"#训练集标签\n",[82,34245,34246],{"class":84,"line":5220},[82,34247,34248],{"class":2828},"# print(class_label)\n",[82,34250,34251],{"class":84,"line":10539},[82,34252,486],{"emptyLinePlaceholder":485},[82,34254,34255],{"class":84,"line":10563},[82,34256,34257],{"class":2828},"# 可视化一个batch的图像\n",[82,34259,34260,34263,34266,34268,34270,34272,34274,34276],{"class":84,"line":10568},[82,34261,34262],{"class":92},"plt.figure(",[82,34264,34265],{"class":108},"figsize",[82,34267,113],{"class":112},[82,34269,93],{"class":92},[82,34271,3254],{"class":88},[82,34273,3136],{"class":92},[82,34275,3077],{"class":88},[82,34277,33074],{"class":92},[82,34279,34280,34282,34285,34287,34290,34292],{"class":84,"line":10574},[82,34281,597],{"class":112},[82,34283,34284],{"class":92}," ii ",[82,34286,603],{"class":112},[82,34288,34289],{"class":92}," np.arange(",[82,34291,9950],{"class":88},[82,34293,34294],{"class":92},"(batch_y)):\n",[82,34296,34297,34300,34302,34304,34306,34309,34311,34313],{"class":84,"line":10601},[82,34298,34299],{"class":92},"    plt.subplot(",[82,34301,3051],{"class":88},[82,34303,3136],{"class":92},[82,34305,3355],{"class":88},[82,34307,34308],{"class":92},",ii ",[82,34310,2249],{"class":112},[82,34312,27703],{"class":88},[82,34314,119],{"class":92},[82,34316,34317,34320,34323,34325],{"class":84,"line":10606},[82,34318,34319],{"class":92},"    plt.imshow(batch_x[ii,:,:],",[82,34321,34322],{"class":108},"cmap",[82,34324,113],{"class":112},[82,34326,34327],{"class":92},"plt.cm.gray)\n",[82,34329,34330,34333,34335,34337,34339],{"class":84,"line":10612},[82,34331,34332],{"class":92},"    plt.title(class_label[batch_y[ii]],",[82,34334,34068],{"class":108},[82,34336,113],{"class":112},[82,34338,440],{"class":88},[82,34340,119],{"class":92},[82,34342,34343,34346,34349],{"class":84,"line":10624},[82,34344,34345],{"class":92},"    plt.axis(",[82,34347,34348],{"class":96},"\"off\"",[82,34350,119],{"class":92},[82,34352,34353,34356,34359,34361,34364],{"class":84,"line":10636},[82,34354,34355],{"class":92},"    plt.subplots_adjust(",[82,34357,34358],{"class":108},"wspace",[82,34360,113],{"class":112},[82,34362,34363],{"class":88},"0.05",[82,34365,119],{"class":92},[82,34367,34368],{"class":84,"line":10648},[82,34369,34370],{"class":92},"plt.show()\n",[19,34372,34373],{},"用matplotlib进行展示的过程可以后续再补",[19,34375,34376],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34378,34379],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34381,34382],{},"模型训练：",[73,34384,34386],{"className":75,"code":34385,"language":77,"meta":78,"style":78},"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",[32,34387,34388,34395,34402,34406,34418,34424,34435,34445,34455,34465,34475,34480,34492,34502,34506,34510,34515,34524,34537,34548,34565,34576,34615,34631,34643,34654,34659,34670,34686,34697,34708,34719,34726,34730,34735,34740,34744,34749,34759,34780,34784,34788,34793,34798,34803,34823,34827,34832,34842,34846,34851,34860,34865,34870,34875,34885,34889,34893,34898,34903,34913,34918,34928,34933,34942,34947,34956,34961,34970,34974,34979,34989,34993,34997,35002,35017,35044,35059,35063,35068,35073,35082,35087,35096,35101,35110,35115,35124,35129,35138,35143,35152,35157,35170,35175,35185,35190,35200,35206,35212,35218,35224,35235,35241,35261,35267,35278,35284,35290,35296,35302,35308,35314,35320,35340,35346,35362,35368,35382,35388,35403,35409,35418,35424,35433,35439,35445,35454,35460,35471,35477,35496,35502,35513,35519,35539,35555,35561,35575,35581,35587,35598,35604,35610,35620,35626,35637,35643,35653,35658,35664,35713,35760,35765,35771,35790,35796,35815,35821,35827,35837,35842,35848,35864,35909,35915,35921,35927,35938,35944,35950,35956,35974,35988,35997,36006,36015,36024,36030,36036,36044,36049,36055,36066,36072,36092,36098,36104,36110,36127,36133,36139,36145,36151,36157,36184,36208,36214,36220,36226,36237,36248,36254,36271,36294,36317,36323,36328,36337,36347,36353,36358,36364,36377,36383,36394,36405,36424],{"__ignoreMap":78},[82,34389,34390,34392],{"class":84,"line":85},[82,34391,1123],{"class":112},[82,34393,34394],{"class":92}," copy\n",[82,34396,34397,34399],{"class":84,"line":157},[82,34398,1123],{"class":112},[82,34400,34401],{"class":92}," time\n",[82,34403,34404],{"class":84,"line":404},[82,34405,486],{"emptyLinePlaceholder":485},[82,34407,34408,34410,34413,34415],{"class":84,"line":413},[82,34409,1123],{"class":112},[82,34411,34412],{"class":92}," pandas ",[82,34414,728],{"class":112},[82,34416,34417],{"class":92}," pd\n",[82,34419,34420,34422],{"class":84,"line":508},[82,34421,1123],{"class":112},[82,34423,32973],{"class":92},[82,34425,34426,34428,34430,34432],{"class":84,"line":513},[82,34427,1117],{"class":112},[82,34429,33989],{"class":92},[82,34431,1123],{"class":112},[82,34433,34434],{"class":92}," Dataset\n",[82,34436,34437,34439,34441,34443],{"class":84,"line":1388},[82,34438,1117],{"class":112},[82,34440,33943],{"class":92},[82,34442,1123],{"class":112},[82,34444,33948],{"class":92},[82,34446,34447,34449,34451,34453],{"class":84,"line":1394},[82,34448,1117],{"class":112},[82,34450,33972],{"class":92},[82,34452,1123],{"class":112},[82,34454,33977],{"class":92},[82,34456,34457,34459,34461,34463],{"class":84,"line":1399},[82,34458,1123],{"class":112},[82,34460,33989],{"class":92},[82,34462,728],{"class":112},[82,34464,33994],{"class":92},[82,34466,34467,34469,34471,34473],{"class":84,"line":1430},[82,34468,1123],{"class":112},[82,34470,34006],{"class":92},[82,34472,728],{"class":112},[82,34474,34011],{"class":92},[82,34476,34477],{"class":84,"line":1818},[82,34478,34479],{"class":2828},"# 导入模型\n",[82,34481,34482,34484,34487,34489],{"class":84,"line":2082},[82,34483,1117],{"class":112},[82,34485,34486],{"class":92}," model ",[82,34488,1123],{"class":112},[82,34490,34491],{"class":92}," LeNet\n",[82,34493,34494,34496,34498,34500],{"class":84,"line":2233},[82,34495,1117],{"class":112},[82,34497,33316],{"class":92},[82,34499,1123],{"class":112},[82,34501,33321],{"class":92},[82,34503,34504],{"class":84,"line":2255},[82,34505,486],{"emptyLinePlaceholder":485},[82,34507,34508],{"class":84,"line":2260},[82,34509,486],{"emptyLinePlaceholder":485},[82,34511,34512],{"class":84,"line":2298},[82,34513,34514],{"class":2828},"# 处理训练集与验证集函数--->划分数据集\n",[82,34516,34517,34519,34522],{"class":84,"line":2303},[82,34518,2381],{"class":112},[82,34520,34521],{"class":2384}," train_val_data_process",[82,34523,2388],{"class":92},[82,34525,34526,34529,34531,34533,34535],{"class":84,"line":2321},[82,34527,34528],{"class":92},"    train_data",[82,34530,113],{"class":112},[82,34532,34029],{"class":92},[82,34534,34037],{"class":96},[82,34536,1363],{"class":92},[82,34538,34539,34542,34544,34546],{"class":84,"line":2533},[82,34540,34541],{"class":108},"                            train",[82,34543,113],{"class":112},[82,34545,1205],{"class":88},[82,34547,1363],{"class":92},[82,34549,34550,34553,34555,34557,34559,34561,34563],{"class":84,"line":2538},[82,34551,34552],{"class":108},"                            transform",[82,34554,113],{"class":112},[82,34556,34065],{"class":92},[82,34558,34068],{"class":108},[82,34560,113],{"class":112},[82,34562,3650],{"class":88},[82,34564,34076],{"class":92},[82,34566,34567,34570,34572,34574],{"class":84,"line":2548},[82,34568,34569],{"class":108},"                            download",[82,34571,113],{"class":112},[82,34573,1205],{"class":88},[82,34575,119],{"class":92},[82,34577,34578,34581,34583,34586,34589,34591,34594,34596,34598,34601,34603,34605,34608,34610,34612],{"class":84,"line":2579},[82,34579,34580],{"class":92},"    train_data,val_data",[82,34582,113],{"class":112},[82,34584,34585],{"class":92},"Data.random_split(train_data,[",[82,34587,34588],{"class":88},"round",[82,34590,93],{"class":92},[82,34592,34593],{"class":88},"0.8",[82,34595,3212],{"class":112},[82,34597,9950],{"class":88},[82,34599,34600],{"class":92},"(train_data)),",[82,34602,34588],{"class":88},[82,34604,93],{"class":92},[82,34606,34607],{"class":88},"0.2",[82,34609,3212],{"class":112},[82,34611,9950],{"class":88},[82,34613,34614],{"class":92},"(train_data))])\n",[82,34616,34617,34620,34622,34625,34627,34629],{"class":84,"line":2585},[82,34618,34619],{"class":92},"    train_dataloader ",[82,34621,113],{"class":112},[82,34623,34624],{"class":92}," Data.DataLoader(",[82,34626,34109],{"class":108},[82,34628,113],{"class":112},[82,34630,34114],{"class":92},[82,34632,34633,34636,34638,34641],{"class":84,"line":4350},[82,34634,34635],{"class":108},"                                       batch_size",[82,34637,113],{"class":112},[82,34639,34640],{"class":88},"128",[82,34642,1363],{"class":92},[82,34644,34645,34648,34650,34652],{"class":84,"line":4355},[82,34646,34647],{"class":108},"                                       shuffle",[82,34649,113],{"class":112},[82,34651,1205],{"class":88},[82,34653,1363],{"class":92},[82,34655,34656],{"class":84,"line":4360},[82,34657,34658],{"class":2828},"                                       # 规定8个进程\n",[82,34660,34661,34664,34666,34668],{"class":84,"line":4365},[82,34662,34663],{"class":108},"                                       num_workers",[82,34665,113],{"class":112},[82,34667,3153],{"class":88},[82,34669,119],{"class":92},[82,34671,34672,34675,34677,34679,34681,34683],{"class":84,"line":4379},[82,34673,34674],{"class":92},"    val_dataloader",[82,34676,113],{"class":112},[82,34678,34106],{"class":92},[82,34680,34109],{"class":108},[82,34682,113],{"class":112},[82,34684,34685],{"class":92},"val_data,\n",[82,34687,34688,34691,34693,34695],{"class":84,"line":4384},[82,34689,34690],{"class":108},"                                   batch_size",[82,34692,113],{"class":112},[82,34694,34640],{"class":88},[82,34696,1363],{"class":92},[82,34698,34699,34702,34704,34706],{"class":84,"line":5176},[82,34700,34701],{"class":108},"                                   shuffle",[82,34703,113],{"class":112},[82,34705,1205],{"class":88},[82,34707,1363],{"class":92},[82,34709,34710,34713,34715,34717],{"class":84,"line":5190},[82,34711,34712],{"class":108},"                                   num_workers",[82,34714,113],{"class":112},[82,34716,3153],{"class":88},[82,34718,119],{"class":92},[82,34720,34721,34723],{"class":84,"line":5198},[82,34722,6685],{"class":112},[82,34724,34725],{"class":92}," train_dataloader,val_dataloader\n",[82,34727,34728],{"class":84,"line":5203},[82,34729,486],{"emptyLinePlaceholder":485},[82,34731,34732],{"class":84,"line":5209},[82,34733,34734],{"class":2828},"# 验证是否出错\n",[82,34736,34737],{"class":84,"line":5215},[82,34738,34739],{"class":2828},"# train_val_data_process()\n",[82,34741,34742],{"class":84,"line":5220},[82,34743,486],{"emptyLinePlaceholder":485},[82,34745,34746],{"class":84,"line":10539},[82,34747,34748],{"class":2828},"# 定义模型训练函数\n",[82,34750,34751,34753,34756],{"class":84,"line":10563},[82,34752,2381],{"class":112},[82,34754,34755],{"class":2384}," train_model_process",[82,34757,34758],{"class":92},"(model,train_dataloader,val_dataloader,num_epochs):\n",[82,34760,34761,34763,34765,34767,34769,34771,34773,34775,34778],{"class":84,"line":10568},[82,34762,33813],{"class":92},[82,34764,113],{"class":112},[82,34766,33028],{"class":92},[82,34768,33820],{"class":96},[82,34770,4307],{"class":112},[82,34772,33825],{"class":92},[82,34774,4304],{"class":112},[82,34776,34777],{"class":96}," 'cpu'",[82,34779,119],{"class":92},[82,34781,34782],{"class":84,"line":10574},[82,34783,486],{"emptyLinePlaceholder":485},[82,34785,34786],{"class":84,"line":10601},[82,34787,486],{"emptyLinePlaceholder":485},[82,34789,34790],{"class":84,"line":10606},[82,34791,34792],{"class":2828},"    # 定义优化器\n",[82,34794,34795],{"class":84,"line":10612},[82,34796,34797],{"class":2828},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[82,34799,34800],{"class":84,"line":10624},[82,34801,34802],{"class":2828},"    # lr为学习率\n",[82,34804,34805,34808,34810,34813,34816,34818,34821],{"class":84,"line":10636},[82,34806,34807],{"class":92},"    optimizer",[82,34809,113],{"class":112},[82,34811,34812],{"class":92},"torch.optim.Adam(model.parameters(),",[82,34814,34815],{"class":108},"lr",[82,34817,113],{"class":112},[82,34819,34820],{"class":88},"0.001",[82,34822,119],{"class":92},[82,34824,34825],{"class":84,"line":10648},[82,34826,486],{"emptyLinePlaceholder":485},[82,34828,34829],{"class":84,"line":12307},[82,34830,34831],{"class":2828},"    # 定义损失函数使用交叉熵损失函数\n",[82,34833,34834,34837,34839],{"class":84,"line":12332},[82,34835,34836],{"class":92},"    criterion",[82,34838,113],{"class":112},[82,34840,34841],{"class":92},"nn.CrossEntropyLoss()\n",[82,34843,34844],{"class":84,"line":12355},[82,34845,486],{"emptyLinePlaceholder":485},[82,34847,34848],{"class":84,"line":12379},[82,34849,34850],{"class":2828},"    # 将模型放到GPU中进行训练\n",[82,34852,34853,34855,34857],{"class":84,"line":12384},[82,34854,33865],{"class":92},[82,34856,113],{"class":112},[82,34858,34859],{"class":92},"model.to(device)\n",[82,34861,34862],{"class":84,"line":12389},[82,34863,34864],{"class":2828},"    # 复制当前模型的参数\n",[82,34866,34867],{"class":84,"line":12394},[82,34868,34869],{"class":2828},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[82,34871,34872],{"class":84,"line":12403},[82,34873,34874],{"class":2828},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[82,34876,34877,34880,34882],{"class":84,"line":12408},[82,34878,34879],{"class":92},"    best_model_wts",[82,34881,113],{"class":112},[82,34883,34884],{"class":92},"copy.deepcopy(model.state_dict())\n",[82,34886,34887],{"class":84,"line":12414},[82,34888,486],{"emptyLinePlaceholder":485},[82,34890,34891],{"class":84,"line":12435},[82,34892,486],{"emptyLinePlaceholder":485},[82,34894,34895],{"class":84,"line":12441},[82,34896,34897],{"class":2828},"    # 初始化参数\n",[82,34899,34900],{"class":84,"line":12455},[82,34901,34902],{"class":2828},"    # 最高准确度\n",[82,34904,34905,34908,34910],{"class":84,"line":12461},[82,34906,34907],{"class":92},"    best_acc",[82,34909,113],{"class":112},[82,34911,34912],{"class":88},"0.0\n",[82,34914,34915],{"class":84,"line":12488},[82,34916,34917],{"class":2828},"    # 训练集损失列表\n",[82,34919,34920,34923,34925],{"class":84,"line":12497},[82,34921,34922],{"class":92},"    train_loss_all",[82,34924,113],{"class":112},[82,34926,34927],{"class":92},"[]\n",[82,34929,34930],{"class":84,"line":12503},[82,34931,34932],{"class":2828},"    # 验证集函数列表\n",[82,34934,34935,34938,34940],{"class":84,"line":12511},[82,34936,34937],{"class":92},"    val_loss_all",[82,34939,113],{"class":112},[82,34941,34927],{"class":92},[82,34943,34944],{"class":84,"line":12516},[82,34945,34946],{"class":2828},"    # 训练集准确度列表\n",[82,34948,34949,34952,34954],{"class":84,"line":19189},[82,34950,34951],{"class":92},"    train_acc_all",[82,34953,113],{"class":112},[82,34955,34927],{"class":92},[82,34957,34958],{"class":84,"line":19195},[82,34959,34960],{"class":2828},"    # 验证集准确度列表\n",[82,34962,34963,34966,34968],{"class":84,"line":19218},[82,34964,34965],{"class":92},"    val_acc_all",[82,34967,113],{"class":112},[82,34969,34927],{"class":92},[82,34971,34972],{"class":84,"line":19224},[82,34973,486],{"emptyLinePlaceholder":485},[82,34975,34976],{"class":84,"line":19247},[82,34977,34978],{"class":2828},"    # 保存当前时间--->方便看每轮训练的时间\n",[82,34980,34981,34984,34986],{"class":84,"line":19261},[82,34982,34983],{"class":92},"    since",[82,34985,113],{"class":112},[82,34987,34988],{"class":92},"time.time()\n",[82,34990,34991],{"class":84,"line":19281},[82,34992,486],{"emptyLinePlaceholder":485},[82,34994,34995],{"class":84,"line":19287},[82,34996,486],{"emptyLinePlaceholder":485},[82,34998,34999],{"class":84,"line":19298},[82,35000,35001],{"class":2828},"    # 准备工作完成--->开始训练模型\n",[82,35003,35004,35006,35009,35011,35014],{"class":84,"line":19321},[82,35005,1888],{"class":112},[82,35007,35008],{"class":92}," epoch ",[82,35010,603],{"class":112},[82,35012,35013],{"class":88}," range",[82,35015,35016],{"class":92},"(num_epochs):\n",[82,35018,35019,35021,35023,35026,35029,35031,35033,35035,35038,35040,35042],{"class":84,"line":19343},[82,35020,1901],{"class":88},[82,35022,93],{"class":92},[82,35024,35025],{"class":96},"\"Epoch ",[82,35027,35028],{"class":88},"{}",[82,35030,1147],{"class":96},[82,35032,35028],{"class":88},[82,35034,216],{"class":96},[82,35036,35037],{"class":92},".format(epoch,num_epochs",[82,35039,3288],{"class":112},[82,35041,2283],{"class":88},[82,35043,33074],{"class":92},[82,35045,35046,35048,35050,35053,35055,35057],{"class":84,"line":19348},[82,35047,1901],{"class":88},[82,35049,93],{"class":92},[82,35051,35052],{"class":96},"\"-\"",[82,35054,3212],{"class":112},[82,35056,440],{"class":88},[82,35058,119],{"class":92},[82,35060,35061],{"class":84,"line":19354},[82,35062,486],{"emptyLinePlaceholder":485},[82,35064,35065],{"class":84,"line":19368},[82,35066,35067],{"class":2828},"        # 初始化参数\n",[82,35069,35070],{"class":84,"line":19381},[82,35071,35072],{"class":2828},"        # 训练集损失函数\n",[82,35074,35075,35078,35080],{"class":84,"line":19386},[82,35076,35077],{"class":92},"        train_loss",[82,35079,113],{"class":112},[82,35081,34912],{"class":88},[82,35083,35084],{"class":84,"line":19400},[82,35085,35086],{"class":2828},"        # 训练集准确度\n",[82,35088,35089,35092,35094],{"class":84,"line":19405},[82,35090,35091],{"class":92},"        train_corrects",[82,35093,113],{"class":112},[82,35095,5683],{"class":88},[82,35097,35098],{"class":84,"line":19411},[82,35099,35100],{"class":2828},"        # 验证集损失函数\n",[82,35102,35103,35106,35108],{"class":84,"line":19416},[82,35104,35105],{"class":92},"        val_loss",[82,35107,113],{"class":112},[82,35109,34912],{"class":88},[82,35111,35112],{"class":84,"line":19430},[82,35113,35114],{"class":2828},"        # 验证集准确度\n",[82,35116,35117,35120,35122],{"class":84,"line":19435},[82,35118,35119],{"class":92},"        val_corrects",[82,35121,113],{"class":112},[82,35123,5683],{"class":88},[82,35125,35126],{"class":84,"line":19440},[82,35127,35128],{"class":2828},"        # 训练集样本数量\n",[82,35130,35131,35134,35136],{"class":84,"line":19454},[82,35132,35133],{"class":92},"        train_num",[82,35135,113],{"class":112},[82,35137,5683],{"class":88},[82,35139,35140],{"class":84,"line":19466},[82,35141,35142],{"class":2828},"        # 验证集样本数量\n",[82,35144,35145,35148,35150],{"class":84,"line":19471},[82,35146,35147],{"class":92},"        val_num",[82,35149,113],{"class":112},[82,35151,5683],{"class":88},[82,35153,35154],{"class":84,"line":19484},[82,35155,35156],{"class":2828},"        # 将数据放到设备,并开始训练\n",[82,35158,35159,35161,35163,35165,35167],{"class":84,"line":19489},[82,35160,5999],{"class":112},[82,35162,34173],{"class":92},[82,35164,603],{"class":112},[82,35166,34178],{"class":88},[82,35168,35169],{"class":92},"(train_dataloader):\n",[82,35171,35172],{"class":84,"line":19494},[82,35173,35174],{"class":2828},"            # 将特征放入到训练设备\n",[82,35176,35177,35180,35182],{"class":84,"line":19499},[82,35178,35179],{"class":92},"            b_x",[82,35181,113],{"class":112},[82,35183,35184],{"class":92},"b_x.to(device)\n",[82,35186,35187],{"class":84,"line":19512},[82,35188,35189],{"class":2828},"            # 将标签放入到训练设备当中\n",[82,35191,35192,35195,35197],{"class":84,"line":19517},[82,35193,35194],{"class":92},"            b_y",[82,35196,113],{"class":112},[82,35198,35199],{"class":92},"b_y.to(device)\n",[82,35201,35203],{"class":84,"line":35202},98,[82,35204,35205],{"class":2828},"            # 设置模型为训练模式\n",[82,35207,35209],{"class":84,"line":35208},99,[82,35210,35211],{"class":92},"            model.train()\n",[82,35213,35215],{"class":84,"line":35214},100,[82,35216,35217],{"class":2828},"            # 将数据放到模型当中,开始前向传播\n",[82,35219,35221],{"class":84,"line":35220},101,[82,35222,35223],{"class":2828},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[82,35225,35227,35230,35232],{"class":84,"line":35226},102,[82,35228,35229],{"class":92},"            output",[82,35231,113],{"class":112},[82,35233,35234],{"class":92},"model(b_x)\n",[82,35236,35238],{"class":84,"line":35237},103,[82,35239,35240],{"class":2828},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[82,35242,35244,35247,35249,35252,35255,35257,35259],{"class":84,"line":35243},104,[82,35245,35246],{"class":92},"            pre_lab",[82,35248,113],{"class":112},[82,35250,35251],{"class":92},"torch.argmax(output,",[82,35253,35254],{"class":108},"dim",[82,35256,113],{"class":112},[82,35258,2283],{"class":88},[82,35260,119],{"class":92},[82,35262,35264],{"class":84,"line":35263},105,[82,35265,35266],{"class":2828},"            # 计算每一个batch的损失函数\n",[82,35268,35270,35273,35275],{"class":84,"line":35269},106,[82,35271,35272],{"class":92},"            loss",[82,35274,113],{"class":112},[82,35276,35277],{"class":92},"criterion(output,b_y)\n",[82,35279,35281],{"class":84,"line":35280},107,[82,35282,35283],{"class":2828},"            # 将梯度初始化为0\n",[82,35285,35287],{"class":84,"line":35286},108,[82,35288,35289],{"class":92},"            optimizer.zero_grad()\n",[82,35291,35293],{"class":84,"line":35292},109,[82,35294,35295],{"class":2828},"            # 梯度置为0后再进行反向传播\n",[82,35297,35299],{"class":84,"line":35298},110,[82,35300,35301],{"class":92},"            loss.backward()\n",[82,35303,35305],{"class":84,"line":35304},111,[82,35306,35307],{"class":2828},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[82,35309,35311],{"class":84,"line":35310},112,[82,35312,35313],{"class":92},"            optimizer.step()\n",[82,35315,35317],{"class":84,"line":35316},113,[82,35318,35319],{"class":2828},"            # loss.item()指的是batch的平均损失\n",[82,35321,35323,35326,35328,35331,35333,35336,35338],{"class":84,"line":35322},114,[82,35324,35325],{"class":92},"            train_loss",[82,35327,12068],{"class":112},[82,35329,35330],{"class":92},"loss.item()",[82,35332,3212],{"class":112},[82,35334,35335],{"class":92},"b_x.size(",[82,35337,2244],{"class":88},[82,35339,119],{"class":92},[82,35341,35343],{"class":84,"line":35342},115,[82,35344,35345],{"class":2828},"            # 计算每个批次中正确预测的数量\n",[82,35347,35349,35352,35354,35357,35359],{"class":84,"line":35348},116,[82,35350,35351],{"class":92},"            train_corrects",[82,35353,12068],{"class":112},[82,35355,35356],{"class":92},"torch.sum(pre_lab",[82,35358,5548],{"class":112},[82,35360,35361],{"class":92},"b_y.data)\n",[82,35363,35365],{"class":84,"line":35364},117,[82,35366,35367],{"class":2828},"            # 计算目前为止一共处理了多少样本\n",[82,35369,35371,35374,35376,35378,35380],{"class":84,"line":35370},118,[82,35372,35373],{"class":92},"            train_num",[82,35375,12068],{"class":112},[82,35377,35335],{"class":92},[82,35379,2244],{"class":88},[82,35381,119],{"class":92},[82,35383,35385],{"class":84,"line":35384},119,[82,35386,35387],{"class":2828},"        # 验证数据\n",[82,35389,35391,35393,35396,35398,35400],{"class":84,"line":35390},120,[82,35392,5999],{"class":112},[82,35394,35395],{"class":92}," step ,(b_x,b_y) ",[82,35397,603],{"class":112},[82,35399,34178],{"class":88},[82,35401,35402],{"class":92},"(val_dataloader):\n",[82,35404,35406],{"class":84,"line":35405},121,[82,35407,35408],{"class":2828},"            # 将特征放到验证设备当中\n",[82,35410,35412,35414,35416],{"class":84,"line":35411},122,[82,35413,35179],{"class":92},[82,35415,113],{"class":112},[82,35417,35184],{"class":92},[82,35419,35421],{"class":84,"line":35420},123,[82,35422,35423],{"class":2828},"            # 将标签放到放到训练设备当中\n",[82,35425,35427,35429,35431],{"class":84,"line":35426},124,[82,35428,35194],{"class":92},[82,35430,113],{"class":112},[82,35432,35199],{"class":92},[82,35434,35436],{"class":84,"line":35435},125,[82,35437,35438],{"class":2828},"            # 开启验证模式，设置模型为评估模式\n",[82,35440,35442],{"class":84,"line":35441},126,[82,35443,35444],{"class":92},"            model.eval()\n",[82,35446,35448,35451],{"class":84,"line":35447},127,[82,35449,35450],{"class":112},"            with",[82,35452,35453],{"class":92}," torch.no_grad():\n",[82,35455,35457],{"class":84,"line":35456},128,[82,35458,35459],{"class":2828},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[82,35461,35463,35466,35468],{"class":84,"line":35462},129,[82,35464,35465],{"class":92},"                output ",[82,35467,113],{"class":112},[82,35469,35470],{"class":92}," model(b_x)\n",[82,35472,35474],{"class":84,"line":35473},130,[82,35475,35476],{"class":2828},"                # 查找每一行中最大值对应的下标\n",[82,35478,35480,35483,35485,35488,35490,35492,35494],{"class":84,"line":35479},131,[82,35481,35482],{"class":92},"                pre_lab ",[82,35484,113],{"class":112},[82,35486,35487],{"class":92}," torch.argmax(output, ",[82,35489,35254],{"class":108},[82,35491,113],{"class":112},[82,35493,2283],{"class":88},[82,35495,119],{"class":92},[82,35497,35499],{"class":84,"line":35498},132,[82,35500,35501],{"class":2828},"                # 计算验证集上的当前 batch 损失\n",[82,35503,35505,35508,35510],{"class":84,"line":35504},133,[82,35506,35507],{"class":92},"                val_batch_loss ",[82,35509,113],{"class":112},[82,35511,35512],{"class":92}," criterion(output, b_y)\n",[82,35514,35516],{"class":84,"line":35515},134,[82,35517,35518],{"class":2828},"                # 对损失函数进行累加（按样本数加权）\n",[82,35520,35522,35525,35527,35530,35532,35535,35537],{"class":84,"line":35521},135,[82,35523,35524],{"class":92},"                val_loss ",[82,35526,12068],{"class":112},[82,35528,35529],{"class":92}," val_batch_loss.item() ",[82,35531,3212],{"class":112},[82,35533,35534],{"class":92}," b_x.size(",[82,35536,2244],{"class":88},[82,35538,119],{"class":92},[82,35540,35542,35545,35547,35550,35552],{"class":84,"line":35541},136,[82,35543,35544],{"class":92},"                val_corrects ",[82,35546,12068],{"class":112},[82,35548,35549],{"class":92}," torch.sum(pre_lab ",[82,35551,5548],{"class":112},[82,35553,35554],{"class":92}," b_y.data)\n",[82,35556,35558],{"class":84,"line":35557},137,[82,35559,35560],{"class":2828},"                # 当前用于验证的样本数量\n",[82,35562,35564,35567,35569,35571,35573],{"class":84,"line":35563},138,[82,35565,35566],{"class":92},"            val_num ",[82,35568,12068],{"class":112},[82,35570,35534],{"class":92},[82,35572,2244],{"class":88},[82,35574,119],{"class":92},[82,35576,35578],{"class":84,"line":35577},139,[82,35579,35580],{"class":2828},"        # 计算并保存每一次迭代的loss值和准确率\n",[82,35582,35584],{"class":84,"line":35583},140,[82,35585,35586],{"class":2828},"        # 计算并保存训练集的loss值\n",[82,35588,35590,35593,35595],{"class":84,"line":35589},141,[82,35591,35592],{"class":92},"        train_loss_all.append(train_loss",[82,35594,1147],{"class":112},[82,35596,35597],{"class":92},"train_num)\n",[82,35599,35601],{"class":84,"line":35600},142,[82,35602,35603],{"class":2828},"        # 取双精度\n",[82,35605,35607],{"class":84,"line":35606},143,[82,35608,35609],{"class":2828},"        # 计算并保存训练集的准确率\n",[82,35611,35613,35616,35618],{"class":84,"line":35612},144,[82,35614,35615],{"class":92},"        train_acc_all.append(train_corrects.double().item()",[82,35617,1147],{"class":112},[82,35619,35597],{"class":92},[82,35621,35623],{"class":84,"line":35622},145,[82,35624,35625],{"class":2828},"        # 计算并保存验证集的loss值\n",[82,35627,35629,35632,35634],{"class":84,"line":35628},146,[82,35630,35631],{"class":92},"        val_loss_all.append(val_loss",[82,35633,1147],{"class":112},[82,35635,35636],{"class":92},"val_num)\n",[82,35638,35640],{"class":84,"line":35639},147,[82,35641,35642],{"class":2828},"        # 计算并保存验证集的准确率\n",[82,35644,35646,35649,35651],{"class":84,"line":35645},148,[82,35647,35648],{"class":92},"        val_acc_all.append(val_corrects.double().item()",[82,35650,1147],{"class":112},[82,35652,35636],{"class":92},[82,35654,35656],{"class":84,"line":35655},149,[82,35657,486],{"emptyLinePlaceholder":485},[82,35659,35661],{"class":84,"line":35660},150,[82,35662,35663],{"class":2828},"        # 打印训练一轮的loss值和准确率\n",[82,35665,35667,35669,35671,35673,35675,35678,35680,35683,35685,35688,35690,35692,35694,35696,35699,35701,35703,35706,35708,35710],{"class":84,"line":35666},151,[82,35668,1901],{"class":88},[82,35670,93],{"class":92},[82,35672,6188],{"class":96},[82,35674,35028],{"class":88},[82,35676,35677],{"class":96},"train loss:",[82,35679,3645],{"class":88},[82,35681,35682],{"class":112},":.4f",[82,35684,3695],{"class":88},[82,35686,35687],{"class":96}," train acc:",[82,35689,3645],{"class":88},[82,35691,35682],{"class":112},[82,35693,3695],{"class":88},[82,35695,6188],{"class":96},[82,35697,35698],{"class":92},".format(epoch,train_loss_all[",[82,35700,3288],{"class":112},[82,35702,2283],{"class":88},[82,35704,35705],{"class":92},"],train_acc_all[",[82,35707,3288],{"class":112},[82,35709,2283],{"class":88},[82,35711,35712],{"class":92},"]))\n",[82,35714,35716,35718,35720,35722,35724,35727,35729,35731,35733,35736,35738,35740,35742,35744,35747,35749,35751,35754,35756,35758],{"class":84,"line":35715},152,[82,35717,1901],{"class":88},[82,35719,93],{"class":92},[82,35721,6188],{"class":96},[82,35723,35028],{"class":88},[82,35725,35726],{"class":96},"val loss:",[82,35728,3645],{"class":88},[82,35730,35682],{"class":112},[82,35732,3695],{"class":88},[82,35734,35735],{"class":96}," val acc:",[82,35737,3645],{"class":88},[82,35739,35682],{"class":112},[82,35741,3695],{"class":88},[82,35743,6188],{"class":96},[82,35745,35746],{"class":92},".format(epoch,val_loss_all[",[82,35748,3288],{"class":112},[82,35750,2283],{"class":88},[82,35752,35753],{"class":92},"],val_acc_all[",[82,35755,3288],{"class":112},[82,35757,2283],{"class":88},[82,35759,35712],{"class":92},[82,35761,35763],{"class":84,"line":35762},153,[82,35764,486],{"emptyLinePlaceholder":485},[82,35766,35768],{"class":84,"line":35767},154,[82,35769,35770],{"class":2828},"        # 判断准确度--->保存最优模型\n",[82,35772,35774,35776,35779,35781,35783,35785,35787],{"class":84,"line":35773},155,[82,35775,5096],{"class":112},[82,35777,35778],{"class":92}," val_acc_all[",[82,35780,3288],{"class":112},[82,35782,2283],{"class":88},[82,35784,3689],{"class":92},[82,35786,3709],{"class":112},[82,35788,35789],{"class":92},"best_acc:\n",[82,35791,35793],{"class":84,"line":35792},156,[82,35794,35795],{"class":2828},"            # 保存当前模型准确度\n",[82,35797,35799,35802,35804,35806,35809,35811,35813],{"class":84,"line":35798},157,[82,35800,35801],{"class":92},"            best_acc:",[82,35803,2811],{"class":88},[82,35805,113],{"class":112},[82,35807,35808],{"class":92},"val_acc_all[",[82,35810,3288],{"class":112},[82,35812,2283],{"class":88},[82,35814,875],{"class":92},[82,35816,35818],{"class":84,"line":35817},158,[82,35819,35820],{"class":2828},"            # 保存当前的准确度\n",[82,35822,35824],{"class":84,"line":35823},159,[82,35825,35826],{"class":2828},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[82,35828,35830,35833,35835],{"class":84,"line":35829},160,[82,35831,35832],{"class":92},"            best_model_wts",[82,35834,113],{"class":112},[82,35836,34884],{"class":92},[82,35838,35840],{"class":84,"line":35839},161,[82,35841,486],{"emptyLinePlaceholder":485},[82,35843,35845],{"class":84,"line":35844},162,[82,35846,35847],{"class":2828},"        # 计算耗时\n",[82,35849,35851,35854,35856,35859,35861],{"class":84,"line":35850},163,[82,35852,35853],{"class":92},"        time_use",[82,35855,113],{"class":112},[82,35857,35858],{"class":92},"time.time()",[82,35860,3288],{"class":112},[82,35862,35863],{"class":92},"since\n",[82,35865,35867,35869,35871,35874,35876,35879,35881,35883,35885,35887,35889,35892,35895,35898,35900,35903,35905,35907],{"class":84,"line":35866},164,[82,35868,1901],{"class":88},[82,35870,93],{"class":92},[82,35872,35873],{"class":96},"'训练和验证耗费的时间",[82,35875,3645],{"class":88},[82,35877,35878],{"class":112},":.0f",[82,35880,3695],{"class":88},[82,35882,3300],{"class":96},[82,35884,3645],{"class":88},[82,35886,35878],{"class":112},[82,35888,3695],{"class":88},[82,35890,35891],{"class":96},"s'",[82,35893,35894],{"class":92},".format(time_use",[82,35896,35897],{"class":112},"\u002F\u002F",[82,35899,3656],{"class":88},[82,35901,35902],{"class":92},",time_use",[82,35904,3086],{"class":112},[82,35906,3656],{"class":88},[82,35908,33074],{"class":92},[82,35910,35912],{"class":84,"line":35911},165,[82,35913,35914],{"class":2828},"    # 选择最优参数\n",[82,35916,35918],{"class":84,"line":35917},166,[82,35919,35920],{"class":2828},"    # 加载最高准确率下的模型参数\n",[82,35922,35924],{"class":84,"line":35923},167,[82,35925,35926],{"class":2828},"    # model.load_state_dict(best_model_wts)\n",[82,35928,35930,35933,35936],{"class":84,"line":35929},168,[82,35931,35932],{"class":92},"    torch.save(model.state_dict(best_model_wts), ",[82,35934,35935],{"class":96},"'.\u002Fbest_model.pth'",[82,35937,119],{"class":92},[82,35939,35941],{"class":84,"line":35940},169,[82,35942,35943],{"class":2828},"    # 或者写成\n",[82,35945,35947],{"class":84,"line":35946},170,[82,35948,35949],{"class":2828},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[82,35951,35953],{"class":84,"line":35952},171,[82,35954,35955],{"class":2828},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[82,35957,35959,35962,35964,35967,35970,35972],{"class":84,"line":35958},172,[82,35960,35961],{"class":92},"    train_process",[82,35963,113],{"class":112},[82,35965,35966],{"class":92},"pd.DataFrame(",[82,35968,35969],{"class":108},"data",[82,35971,113],{"class":112},[82,35973,4161],{"class":92},[82,35975,35977,35980,35982,35985],{"class":84,"line":35976},173,[82,35978,35979],{"class":96},"        \"epoch\"",[82,35981,3608],{"class":92},[82,35983,35984],{"class":88},"range",[82,35986,35987],{"class":92},"(num_epochs),\n",[82,35989,35991,35994],{"class":84,"line":35990},174,[82,35992,35993],{"class":96},"        \"train_loss_all\"",[82,35995,35996],{"class":92},":train_loss_all,\n",[82,35998,36000,36003],{"class":84,"line":35999},175,[82,36001,36002],{"class":96},"        \"val_loss_all\"",[82,36004,36005],{"class":92},":val_loss_all,\n",[82,36007,36009,36012],{"class":84,"line":36008},176,[82,36010,36011],{"class":96},"        \"train_acc_all\"",[82,36013,36014],{"class":92},":train_acc_all,\n",[82,36016,36018,36021],{"class":84,"line":36017},177,[82,36019,36020],{"class":96},"        \"val_acc_all\"",[82,36022,36023],{"class":92},":val_acc_all\n",[82,36025,36027],{"class":84,"line":36026},178,[82,36028,36029],{"class":92},"    })\n",[82,36031,36033],{"class":84,"line":36032},179,[82,36034,36035],{"class":2828},"    # 返回训练保存的过程\n",[82,36037,36039,36041],{"class":84,"line":36038},180,[82,36040,6685],{"class":112},[82,36042,36043],{"class":92}," train_process\n",[82,36045,36047],{"class":84,"line":36046},181,[82,36048,486],{"emptyLinePlaceholder":485},[82,36050,36052],{"class":84,"line":36051},182,[82,36053,36054],{"class":2828},"# 将loss值和精度按照图片的形式展示出来\n",[82,36056,36058,36060,36063],{"class":84,"line":36057},183,[82,36059,2381],{"class":112},[82,36061,36062],{"class":2384}," matplot_acc_loss",[82,36064,36065],{"class":92},"(train_process):\n",[82,36067,36069],{"class":84,"line":36068},184,[82,36070,36071],{"class":2828},"    # 设置图的大小\n",[82,36073,36075,36078,36080,36082,36084,36086,36088,36090],{"class":84,"line":36074},185,[82,36076,36077],{"class":92},"    plt.figure(",[82,36079,34265],{"class":108},[82,36081,113],{"class":112},[82,36083,93],{"class":92},[82,36085,3254],{"class":88},[82,36087,3136],{"class":92},[82,36089,3051],{"class":88},[82,36091,33074],{"class":92},[82,36093,36095],{"class":84,"line":36094},186,[82,36096,36097],{"class":2828},"    # 设置图中有几张图\n",[82,36099,36101],{"class":84,"line":36100},187,[82,36102,36103],{"class":2828},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[82,36105,36107],{"class":84,"line":36106},188,[82,36108,36109],{"class":2828},"    # ①loss图\n",[82,36111,36113,36115,36117,36119,36121,36123,36125],{"class":84,"line":36112},189,[82,36114,34299],{"class":92},[82,36116,2283],{"class":88},[82,36118,3136],{"class":92},[82,36120,1425],{"class":88},[82,36122,3136],{"class":92},[82,36124,2283],{"class":88},[82,36126,119],{"class":92},[82,36128,36130],{"class":84,"line":36129},190,[82,36131,36132],{"class":2828},"    # 补充:\n",[82,36134,36136],{"class":84,"line":36135},191,[82,36137,36138],{"class":2828},"    # plt.subplot(nrows, ncols, index)\n",[82,36140,36142],{"class":84,"line":36141},192,[82,36143,36144],{"class":2828},"    # nrows：行数\n",[82,36146,36148],{"class":84,"line":36147},193,[82,36149,36150],{"class":2828},"    # ncols：列数\n",[82,36152,36154],{"class":84,"line":36153},194,[82,36155,36156],{"class":2828},"    # index：目前选中第几个子图（从1开始）\n",[82,36158,36160,36163,36166,36169,36172,36174,36177,36179,36182],{"class":84,"line":36159},195,[82,36161,36162],{"class":92},"    plt.plot(train_process[",[82,36164,36165],{"class":96},"\"epoch\"",[82,36167,36168],{"class":92},"],train_process.train_loss_all,",[82,36170,36171],{"class":96},"'ro-'",[82,36173,3136],{"class":92},[82,36175,36176],{"class":108},"label",[82,36178,113],{"class":112},[82,36180,36181],{"class":96},"'train loss'",[82,36183,119],{"class":92},[82,36185,36187,36189,36191,36194,36197,36199,36201,36203,36206],{"class":84,"line":36186},196,[82,36188,36162],{"class":92},[82,36190,36165],{"class":96},[82,36192,36193],{"class":92},"],train_process.val_loss_all,",[82,36195,36196],{"class":96},"'bs--'",[82,36198,3136],{"class":92},[82,36200,36176],{"class":108},[82,36202,113],{"class":112},[82,36204,36205],{"class":96},"'val loss'",[82,36207,119],{"class":92},[82,36209,36211],{"class":84,"line":36210},197,[82,36212,36213],{"class":2828},"    # 添加一个图例\n",[82,36215,36217],{"class":84,"line":36216},198,[82,36218,36219],{"class":92},"    plt.legend()\n",[82,36221,36223],{"class":84,"line":36222},199,[82,36224,36225],{"class":2828},"    # 给轴添加标签\n",[82,36227,36229,36232,36235],{"class":84,"line":36228},200,[82,36230,36231],{"class":92},"    plt.xlabel(",[82,36233,36234],{"class":96},"'epoch'",[82,36236,119],{"class":92},[82,36238,36240,36243,36246],{"class":84,"line":36239},201,[82,36241,36242],{"class":92},"    plt.ylabel(",[82,36244,36245],{"class":96},"'loss'",[82,36247,119],{"class":92},[82,36249,36251],{"class":84,"line":36250},202,[82,36252,36253],{"class":2828},"    # ②准确度图\n",[82,36255,36257,36259,36261,36263,36265,36267,36269],{"class":84,"line":36256},203,[82,36258,34299],{"class":92},[82,36260,2283],{"class":88},[82,36262,3136],{"class":92},[82,36264,1425],{"class":88},[82,36266,3136],{"class":92},[82,36268,1425],{"class":88},[82,36270,119],{"class":92},[82,36272,36274,36276,36278,36281,36283,36285,36287,36289,36292],{"class":84,"line":36273},204,[82,36275,36162],{"class":92},[82,36277,36165],{"class":96},[82,36279,36280],{"class":92},"],train_process.train_acc_all,",[82,36282,36171],{"class":96},[82,36284,3136],{"class":92},[82,36286,36176],{"class":108},[82,36288,113],{"class":112},[82,36290,36291],{"class":96},"'train acc'",[82,36293,119],{"class":92},[82,36295,36297,36299,36301,36304,36306,36308,36310,36312,36315],{"class":84,"line":36296},205,[82,36298,36162],{"class":92},[82,36300,36165],{"class":96},[82,36302,36303],{"class":92},"],train_process.val_acc_all,",[82,36305,36196],{"class":96},[82,36307,3136],{"class":92},[82,36309,36176],{"class":108},[82,36311,113],{"class":112},[82,36313,36314],{"class":96},"'val acc'",[82,36316,119],{"class":92},[82,36318,36320],{"class":84,"line":36319},206,[82,36321,36322],{"class":2828},"    # 添加图例\n",[82,36324,36326],{"class":84,"line":36325},207,[82,36327,36219],{"class":92},[82,36329,36331,36333,36335],{"class":84,"line":36330},208,[82,36332,36231],{"class":92},[82,36334,36165],{"class":96},[82,36336,119],{"class":92},[82,36338,36340,36342,36345],{"class":84,"line":36339},209,[82,36341,36242],{"class":92},[82,36343,36344],{"class":96},"\"acc\"",[82,36346,119],{"class":92},[82,36348,36350],{"class":84,"line":36349},210,[82,36351,36352],{"class":92},"    plt.show()\n",[82,36354,36356],{"class":84,"line":36355},211,[82,36357,486],{"emptyLinePlaceholder":485},[82,36359,36361],{"class":84,"line":36360},212,[82,36362,36363],{"class":2828},"# 正式开始训练:\n",[82,36365,36367,36369,36371,36373,36375],{"class":84,"line":36366},213,[82,36368,1237],{"class":112},[82,36370,33796],{"class":88},[82,36372,5548],{"class":112},[82,36374,33801],{"class":96},[82,36376,669],{"class":92},[82,36378,36380],{"class":84,"line":36379},214,[82,36381,36382],{"class":2828},"    # 将模型实例化\n",[82,36384,36386,36389,36391],{"class":84,"line":36385},215,[82,36387,36388],{"class":92},"    LeNet",[82,36390,113],{"class":112},[82,36392,36393],{"class":92},"LeNet()\n",[82,36395,36397,36400,36402],{"class":84,"line":36396},216,[82,36398,36399],{"class":92},"    train_dataloader,val_dataloader",[82,36401,113],{"class":112},[82,36403,36404],{"class":92},"train_val_data_process()\n",[82,36406,36408,36410,36412,36415,36418,36420,36422],{"class":84,"line":36407},217,[82,36409,35961],{"class":92},[82,36411,113],{"class":112},[82,36413,36414],{"class":92},"train_model_process(LeNet,train_dataloader,val_dataloader,",[82,36416,36417],{"class":108},"num_epochs",[82,36419,113],{"class":112},[82,36421,3451],{"class":88},[82,36423,119],{"class":92},[82,36425,36427],{"class":84,"line":36426},218,[82,36428,36429],{"class":92},"    matplot_acc_loss(train_process)\n",[19,36431,36432],{},"画图的补充点学习：",[19,36434,36435],{},[4078,36436],{"alt":78,"src":36437},"\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",[26,36439,36440],{"start":404},[29,36441,36442],{},"测试",[73,36444,36446],{"className":75,"code":36445,"language":77,"meta":78,"style":78},"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",[32,36447,36448,36454,36464,36476,36486,36491,36501,36511,36515,36520,36529,36546,36557,36574,36585,36601,36606,36617,36628,36639,36646,36650,36655,36665,36670,36687,36695,36699,36704,36713,36722,36726,36731,36736,36741,36747,36752,36764,36774,36784,36789,36793,36798,36807,36812,36828,36833,36838,36843,36857,36862,36876,36880,36885,36900,36905,36917,36921,36926,36938,36943,36951,36956,36961,36971,36976,36985,36990,36995,36999,37004,37009,37025,37033,37038,37043,37102,37108,37113,37124,37132,37140,37144,37149,37153,37158,37166,37171,37187,37192,37202,37212],{"__ignoreMap":78},[82,36449,36450,36452],{"class":84,"line":85},[82,36451,1123],{"class":112},[82,36453,32973],{"class":92},[82,36455,36456,36458,36460,36462],{"class":84,"line":157},[82,36457,1123],{"class":112},[82,36459,33989],{"class":92},[82,36461,728],{"class":112},[82,36463,33994],{"class":92},[82,36465,36466,36468,36471,36473],{"class":84,"line":404},[82,36467,1117],{"class":112},[82,36469,36470],{"class":92}," jupyter_client.consoleapp ",[82,36472,1123],{"class":112},[82,36474,36475],{"class":92}," classes\n",[82,36477,36478,36480,36482,36484],{"class":84,"line":413},[82,36479,1117],{"class":112},[82,36481,33972],{"class":92},[82,36483,1123],{"class":112},[82,36485,33977],{"class":92},[82,36487,36488],{"class":84,"line":508},[82,36489,36490],{"class":2828},"# 导入数据集\n",[82,36492,36493,36495,36497,36499],{"class":84,"line":513},[82,36494,1117],{"class":112},[82,36496,33943],{"class":92},[82,36498,1123],{"class":112},[82,36500,33948],{"class":92},[82,36502,36503,36505,36507,36509],{"class":84,"line":1388},[82,36504,1117],{"class":112},[82,36506,34486],{"class":92},[82,36508,1123],{"class":112},[82,36510,34491],{"class":92},[82,36512,36513],{"class":84,"line":1394},[82,36514,486],{"emptyLinePlaceholder":485},[82,36516,36517],{"class":84,"line":1399},[82,36518,36519],{"class":2828},"# 测试数据处理\n",[82,36521,36522,36524,36527],{"class":84,"line":1430},[82,36523,2381],{"class":112},[82,36525,36526],{"class":2384}," test_data_process",[82,36528,2388],{"class":92},[82,36530,36531,36534,36536,36538,36540,36542,36544],{"class":84,"line":1818},[82,36532,36533],{"class":92},"    test_data",[82,36535,113],{"class":112},[82,36537,34029],{"class":92},[82,36539,34032],{"class":108},[82,36541,113],{"class":112},[82,36543,34037],{"class":96},[82,36545,1363],{"class":92},[82,36547,36548,36551,36553,36555],{"class":84,"line":2082},[82,36549,36550],{"class":108},"                           train",[82,36552,113],{"class":112},[82,36554,1415],{"class":88},[82,36556,1363],{"class":92},[82,36558,36559,36562,36564,36566,36568,36570,36572],{"class":84,"line":2233},[82,36560,36561],{"class":108},"                           transform",[82,36563,113],{"class":112},[82,36565,34065],{"class":92},[82,36567,34068],{"class":108},[82,36569,113],{"class":112},[82,36571,3650],{"class":88},[82,36573,34076],{"class":92},[82,36575,36576,36579,36581,36583],{"class":84,"line":2255},[82,36577,36578],{"class":108},"                           download",[82,36580,113],{"class":112},[82,36582,1205],{"class":88},[82,36584,119],{"class":92},[82,36586,36587,36590,36592,36594,36596,36598],{"class":84,"line":2260},[82,36588,36589],{"class":92},"    test_dataloader",[82,36591,113],{"class":112},[82,36593,34106],{"class":92},[82,36595,34109],{"class":108},[82,36597,113],{"class":112},[82,36599,36600],{"class":92},"test_data,\n",[82,36602,36603],{"class":84,"line":2298},[82,36604,36605],{"class":2828},"                                    # 这里是一张一张进行测试\n",[82,36607,36608,36611,36613,36615],{"class":84,"line":2303},[82,36609,36610],{"class":108},"                                    batch_size",[82,36612,113],{"class":112},[82,36614,2283],{"class":88},[82,36616,1363],{"class":92},[82,36618,36619,36622,36624,36626],{"class":84,"line":2321},[82,36620,36621],{"class":108},"                                    shuffle",[82,36623,113],{"class":112},[82,36625,1205],{"class":88},[82,36627,1363],{"class":92},[82,36629,36630,36633,36635,36637],{"class":84,"line":2533},[82,36631,36632],{"class":108},"                                    num_workers",[82,36634,113],{"class":112},[82,36636,2244],{"class":88},[82,36638,119],{"class":92},[82,36640,36641,36643],{"class":84,"line":2538},[82,36642,6685],{"class":112},[82,36644,36645],{"class":92}," test_dataloader\n",[82,36647,36648],{"class":84,"line":2548},[82,36649,486],{"emptyLinePlaceholder":485},[82,36651,36652],{"class":84,"line":2579},[82,36653,36654],{"class":2828},"# 定义模型测试函数\n",[82,36656,36657,36659,36662],{"class":84,"line":2585},[82,36658,2381],{"class":112},[82,36660,36661],{"class":2384}," test_model_process",[82,36663,36664],{"class":92},"(model,test_dataloader):\n",[82,36666,36667],{"class":84,"line":4350},[82,36668,36669],{"class":2828},"    # 将模型放到设备当中，先进行判断\n",[82,36671,36672,36674,36676,36678,36680,36682,36684],{"class":84,"line":4355},[82,36673,33813],{"class":92},[82,36675,113],{"class":112},[82,36677,33820],{"class":96},[82,36679,4307],{"class":112},[82,36681,33825],{"class":92},[82,36683,4304],{"class":112},[82,36685,36686],{"class":96}," \"cpu\"\n",[82,36688,36689,36691,36693],{"class":84,"line":4360},[82,36690,33865],{"class":92},[82,36692,113],{"class":112},[82,36694,34859],{"class":92},[82,36696,36697],{"class":84,"line":4365},[82,36698,486],{"emptyLinePlaceholder":485},[82,36700,36701],{"class":84,"line":4379},[82,36702,36703],{"class":2828},"    # 设置初始化参数\n",[82,36705,36706,36709,36711],{"class":84,"line":4384},[82,36707,36708],{"class":92},"    test_corrects",[82,36710,113],{"class":112},[82,36712,34912],{"class":88},[82,36714,36715,36718,36720],{"class":84,"line":5176},[82,36716,36717],{"class":92},"    test_num",[82,36719,113],{"class":112},[82,36721,5683],{"class":88},[82,36723,36724],{"class":84,"line":5190},[82,36725,486],{"emptyLinePlaceholder":485},[82,36727,36728],{"class":84,"line":5198},[82,36729,36730],{"class":2828},"    # 进行模型测试\n",[82,36732,36733],{"class":84,"line":5203},[82,36734,36735],{"class":2828},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[82,36737,36738],{"class":84,"line":5209},[82,36739,36740],{"class":2828},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[82,36742,36743,36745],{"class":84,"line":5215},[82,36744,2417],{"class":112},[82,36746,35453],{"class":92},[82,36748,36749],{"class":84,"line":5220},[82,36750,36751],{"class":2828},"        # 从数据中进行\n",[82,36753,36754,36756,36759,36761],{"class":84,"line":10539},[82,36755,5999],{"class":112},[82,36757,36758],{"class":92}," test_data_x,test_data_y ",[82,36760,603],{"class":112},[82,36762,36763],{"class":92}," test_dataloader:\n",[82,36765,36766,36769,36771],{"class":84,"line":10563},[82,36767,36768],{"class":92},"            test_data_x",[82,36770,113],{"class":112},[82,36772,36773],{"class":92},"test_data_x.to(device)\n",[82,36775,36776,36779,36781],{"class":84,"line":10568},[82,36777,36778],{"class":92},"            test_data_y",[82,36780,113],{"class":112},[82,36782,36783],{"class":92},"test_data_y.to(device)\n",[82,36785,36786],{"class":84,"line":10574},[82,36787,36788],{"class":2828},"            # 设置为验证模式\n",[82,36790,36791],{"class":84,"line":10601},[82,36792,35444],{"class":92},[82,36794,36795],{"class":84,"line":10606},[82,36796,36797],{"class":2828},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[82,36799,36800,36802,36804],{"class":84,"line":10612},[82,36801,35229],{"class":92},[82,36803,113],{"class":112},[82,36805,36806],{"class":92},"model(test_data_x)\n",[82,36808,36809],{"class":84,"line":10624},[82,36810,36811],{"class":2828},"            # 查找每一行中最大值对应的下标\n",[82,36813,36814,36816,36818,36820,36822,36824,36826],{"class":84,"line":10636},[82,36815,35246],{"class":92},[82,36817,113],{"class":112},[82,36819,35251],{"class":92},[82,36821,35254],{"class":108},[82,36823,113],{"class":112},[82,36825,2283],{"class":88},[82,36827,119],{"class":92},[82,36829,36830],{"class":84,"line":10648},[82,36831,36832],{"class":2828},"            # 计算正确率\n",[82,36834,36835],{"class":84,"line":12307},[82,36836,36837],{"class":2828},"            # .data表示是一个不带梯度信息的tensor\n",[82,36839,36840],{"class":84,"line":12332},[82,36841,36842],{"class":2828},"            # 如果预测正确，则准确度test_corrects加1\n",[82,36844,36845,36848,36850,36852,36854],{"class":84,"line":12355},[82,36846,36847],{"class":92},"            test_corrects",[82,36849,12068],{"class":112},[82,36851,35356],{"class":92},[82,36853,5548],{"class":112},[82,36855,36856],{"class":92},"test_data_y.data)\n",[82,36858,36859],{"class":84,"line":12379},[82,36860,36861],{"class":2828},"            # 将所有的测试样本进行累计\n",[82,36863,36864,36867,36869,36872,36874],{"class":84,"line":12384},[82,36865,36866],{"class":92},"            test_num",[82,36868,12068],{"class":112},[82,36870,36871],{"class":92},"test_data_x.size(",[82,36873,2244],{"class":88},[82,36875,119],{"class":92},[82,36877,36878],{"class":84,"line":12389},[82,36879,486],{"emptyLinePlaceholder":485},[82,36881,36882],{"class":84,"line":12394},[82,36883,36884],{"class":2828},"        # 计算准确度\n",[82,36886,36887,36890,36892,36895,36897],{"class":84,"line":12403},[82,36888,36889],{"class":92},"        test_acc",[82,36891,113],{"class":112},[82,36893,36894],{"class":92},"test_corrects.double().item()",[82,36896,1147],{"class":112},[82,36898,36899],{"class":92},"test_num\n",[82,36901,36902],{"class":84,"line":12408},[82,36903,36904],{"class":2828},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[82,36906,36907,36909,36911,36914],{"class":84,"line":12414},[82,36908,1901],{"class":88},[82,36910,93],{"class":92},[82,36912,36913],{"class":96},"\"测试的准确率：\"",[82,36915,36916],{"class":92},",test_acc)\n",[82,36918,36919],{"class":84,"line":12435},[82,36920,486],{"emptyLinePlaceholder":485},[82,36922,36923],{"class":84,"line":12441},[82,36924,36925],{"class":2828},"# 实现模型的测试功能\n",[82,36927,36928,36930,36932,36934,36936],{"class":84,"line":12455},[82,36929,1237],{"class":112},[82,36931,33796],{"class":88},[82,36933,5548],{"class":112},[82,36935,33801],{"class":96},[82,36937,669],{"class":92},[82,36939,36940],{"class":84,"line":12461},[82,36941,36942],{"class":2828},"    # 加载模型\n",[82,36944,36945,36947,36949],{"class":84,"line":12488},[82,36946,33865],{"class":92},[82,36948,113],{"class":112},[82,36950,36393],{"class":92},[82,36952,36953],{"class":84,"line":12497},[82,36954,36955],{"class":2828},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[82,36957,36958],{"class":84,"line":12503},[82,36959,36960],{"class":2828},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[82,36962,36963,36966,36969],{"class":84,"line":12511},[82,36964,36965],{"class":92},"    model.load_state_dict(torch.load(",[82,36967,36968],{"class":96},"'best_model.pth'",[82,36970,33074],{"class":92},[82,36972,36973],{"class":84,"line":12516},[82,36974,36975],{"class":2828},"    # 数据加载\n",[82,36977,36978,36980,36982],{"class":84,"line":19189},[82,36979,36589],{"class":92},[82,36981,113],{"class":112},[82,36983,36984],{"class":92},"test_data_process()\n",[82,36986,36987],{"class":84,"line":19195},[82,36988,36989],{"class":2828},"    # 加载模型测试的函数\n",[82,36991,36992],{"class":84,"line":19218},[82,36993,36994],{"class":92},"    test_model_process(model,test_dataloader)\n",[82,36996,36997],{"class":84,"line":19224},[82,36998,486],{"emptyLinePlaceholder":485},[82,37000,37001],{"class":84,"line":19247},[82,37002,37003],{"class":2828},"    # 验证集推理实现：\n",[82,37005,37006],{"class":84,"line":19261},[82,37007,37008],{"class":2828},"    # 加载数据加载的更详细一些\n",[82,37010,37011,37013,37015,37017,37019,37021,37023],{"class":84,"line":19281},[82,37012,33813],{"class":92},[82,37014,113],{"class":112},[82,37016,33820],{"class":96},[82,37018,4307],{"class":112},[82,37020,33825],{"class":92},[82,37022,4304],{"class":112},[82,37024,36686],{"class":96},[82,37026,37027,37029,37031],{"class":84,"line":19287},[82,37028,33865],{"class":92},[82,37030,113],{"class":112},[82,37032,34859],{"class":92},[82,37034,37035],{"class":84,"line":19298},[82,37036,37037],{"class":2828},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[82,37039,37040],{"class":84,"line":19321},[82,37041,37042],{"class":2828},"    # 顺序不可改变\n",[82,37044,37045,37048,37050,37052,37055,37057,37060,37062,37065,37067,37070,37072,37075,37077,37080,37082,37085,37087,37090,37092,37095,37097,37100],{"class":84,"line":19343},[82,37046,37047],{"class":92},"    classes",[82,37049,113],{"class":112},[82,37051,3639],{"class":92},[82,37053,37054],{"class":96},"'T-shirt\u002Ftop'",[82,37056,3136],{"class":92},[82,37058,37059],{"class":96},"'Trouser'",[82,37061,3136],{"class":92},[82,37063,37064],{"class":96},"'Pullover'",[82,37066,3136],{"class":92},[82,37068,37069],{"class":96},"'Dress'",[82,37071,3136],{"class":92},[82,37073,37074],{"class":96},"'Coat'",[82,37076,3136],{"class":92},[82,37078,37079],{"class":96},"'Sandal'",[82,37081,3136],{"class":92},[82,37083,37084],{"class":96},"'Shirt'",[82,37086,3136],{"class":92},[82,37088,37089],{"class":96},"'Sneaker'",[82,37091,3136],{"class":92},[82,37093,37094],{"class":96},"'Bag'",[82,37096,3136],{"class":92},[82,37098,37099],{"class":96},"'Ankle boot'",[82,37101,875],{"class":92},[82,37103,37104,37106],{"class":84,"line":19348},[82,37105,2417],{"class":112},[82,37107,35453],{"class":92},[82,37109,37110],{"class":84,"line":19354},[82,37111,37112],{"class":2828},"        # 将数据和标签都放到设备当中\n",[82,37114,37115,37117,37120,37122],{"class":84,"line":19368},[82,37116,5999],{"class":112},[82,37118,37119],{"class":92}," b_x,b_y ",[82,37121,603],{"class":112},[82,37123,36763],{"class":92},[82,37125,37126,37128,37130],{"class":84,"line":19381},[82,37127,35179],{"class":92},[82,37129,113],{"class":112},[82,37131,35184],{"class":92},[82,37133,37134,37136,37138],{"class":84,"line":19386},[82,37135,35194],{"class":92},[82,37137,113],{"class":112},[82,37139,35199],{"class":92},[82,37141,37142],{"class":84,"line":19400},[82,37143,486],{"emptyLinePlaceholder":485},[82,37145,37146],{"class":84,"line":19405},[82,37147,37148],{"class":2828},"            # 设置模型为验证模式\n",[82,37150,37151],{"class":84,"line":19411},[82,37152,35444],{"class":92},[82,37154,37155],{"class":84,"line":19416},[82,37156,37157],{"class":2828},"            # 模型推理结果\n",[82,37159,37160,37162,37164],{"class":84,"line":19430},[82,37161,35229],{"class":92},[82,37163,113],{"class":112},[82,37165,35234],{"class":92},[82,37167,37168],{"class":84,"line":19435},[82,37169,37170],{"class":2828},"            # 获取最大下标，最大下标就是类别号\n",[82,37172,37173,37175,37177,37179,37181,37183,37185],{"class":84,"line":19440},[82,37174,35246],{"class":92},[82,37176,113],{"class":112},[82,37178,35251],{"class":92},[82,37180,35254],{"class":108},[82,37182,113],{"class":112},[82,37184,2283],{"class":88},[82,37186,119],{"class":92},[82,37188,37189],{"class":84,"line":19454},[82,37190,37191],{"class":2828},"            # 取出张量中的数值\n",[82,37193,37194,37197,37199],{"class":84,"line":19466},[82,37195,37196],{"class":92},"            result",[82,37198,113],{"class":112},[82,37200,37201],{"class":92},"pre_lab.item()\n",[82,37203,37204,37207,37209],{"class":84,"line":19471},[82,37205,37206],{"class":92},"            label",[82,37208,113],{"class":112},[82,37210,37211],{"class":92},"b_y.item()\n",[82,37213,37214,37217,37219,37222,37225,37228,37230,37233],{"class":84,"line":19484},[82,37215,37216],{"class":88},"            print",[82,37218,93],{"class":92},[82,37220,37221],{"class":96},"\"预测值：\"",[82,37223,37224],{"class":92},",classes[result],",[82,37226,37227],{"class":96},"\"------\"",[82,37229,3136],{"class":92},[82,37231,37232],{"class":96},"\"真实值：\"",[82,37234,37235],{"class":92},",classes[label])\n",[19,37237,37238],{},"（2）AlexNet",[26,37240,37241],{},[29,37242,37243],{},"神经网络构建",[73,37245,37247],{"className":75,"code":37246,"language":77,"meta":78,"style":78},"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",[32,37248,37249,37255,37265,37275,37287,37291,37308,37316,37331,37343,37385,37412,37455,37481,37525,37568,37611,37638,37642,37652,37657,37685,37704,37723,37727,37732,37740,37755,37765,37779,37789,37804,37819,37834,37845,37849,37854,37864,37879,37884,37898,37913,37925,37930,37941,37946,37952,37957,37969,37989,37994,38003],{"__ignoreMap":78},[82,37250,37251,37253],{"class":84,"line":85},[82,37252,1123],{"class":112},[82,37254,32973],{"class":92},[82,37256,37257,37259,37261,37263],{"class":84,"line":157},[82,37258,1117],{"class":112},[82,37260,33316],{"class":92},[82,37262,1123],{"class":112},[82,37264,33321],{"class":92},[82,37266,37267,37269,37271,37273],{"class":84,"line":404},[82,37268,1117],{"class":112},[82,37270,33333],{"class":92},[82,37272,1123],{"class":112},[82,37274,33338],{"class":92},[82,37276,37277,37279,37282,37284],{"class":84,"line":413},[82,37278,1123],{"class":112},[82,37280,37281],{"class":92}," torch.nn.functional ",[82,37283,728],{"class":112},[82,37285,37286],{"class":92}," F\n",[82,37288,37289],{"class":84,"line":508},[82,37290,486],{"emptyLinePlaceholder":485},[82,37292,37293,37295,37298,37300,37302,37304,37306],{"class":84,"line":513},[82,37294,17281],{"class":112},[82,37296,37297],{"class":2384}," AlexNet",[82,37299,93],{"class":92},[82,37301,33354],{"class":2384},[82,37303,233],{"class":92},[82,37305,33359],{"class":2384},[82,37307,33362],{"class":92},[82,37309,37310,37312,37314],{"class":84,"line":1388},[82,37311,33377],{"class":112},[82,37313,33380],{"class":88},[82,37315,33383],{"class":92},[82,37317,37318,37320,37323,37325,37327,37329],{"class":84,"line":1394},[82,37319,33393],{"class":88},[82,37321,37322],{"class":92},"(AlexNet,",[82,37324,33399],{"class":88},[82,37326,33402],{"class":92},[82,37328,33405],{"class":88},[82,37330,4576],{"class":92},[82,37332,37333,37335,37338,37340],{"class":84,"line":1399},[82,37334,33421],{"class":88},[82,37336,37337],{"class":92},".ReLu",[82,37339,113],{"class":112},[82,37341,37342],{"class":92},"nn.ReLU()\n",[82,37344,37345,37347,37349,37351,37353,37355,37357,37359,37361,37363,37365,37367,37369,37371,37373,37375,37377,37379,37381,37383],{"class":84,"line":1430},[82,37346,33421],{"class":88},[82,37348,33424],{"class":92},[82,37350,113],{"class":112},[82,37352,33429],{"class":92},[82,37354,33432],{"class":108},[82,37356,113],{"class":112},[82,37358,2283],{"class":88},[82,37360,3136],{"class":92},[82,37362,33441],{"class":108},[82,37364,113],{"class":112},[82,37366,2970],{"class":88},[82,37368,3136],{"class":92},[82,37370,33450],{"class":108},[82,37372,113],{"class":112},[82,37374,3229],{"class":88},[82,37376,3136],{"class":92},[82,37378,33505],{"class":108},[82,37380,113],{"class":112},[82,37382,3051],{"class":88},[82,37384,119],{"class":92},[82,37386,37387,37389,37391,37393,37396,37398,37400,37402,37404,37406,37408,37410],{"class":84,"line":1818},[82,37388,33421],{"class":88},[82,37390,33489],{"class":92},[82,37392,113],{"class":112},[82,37394,37395],{"class":92},"nn.MaxPool2d(",[82,37397,33450],{"class":108},[82,37399,113],{"class":112},[82,37401,2841],{"class":88},[82,37403,3136],{"class":92},[82,37405,33505],{"class":108},[82,37407,113],{"class":112},[82,37409,1425],{"class":88},[82,37411,119],{"class":92},[82,37413,37414,37416,37418,37420,37422,37424,37426,37428,37430,37432,37434,37437,37439,37441,37443,37445,37447,37449,37451,37453],{"class":84,"line":2082},[82,37415,33421],{"class":88},[82,37417,33518],{"class":92},[82,37419,113],{"class":112},[82,37421,33429],{"class":92},[82,37423,33432],{"class":108},[82,37425,113],{"class":112},[82,37427,2970],{"class":88},[82,37429,3136],{"class":92},[82,37431,33441],{"class":108},[82,37433,113],{"class":112},[82,37435,37436],{"class":88},"256",[82,37438,3136],{"class":92},[82,37440,33450],{"class":108},[82,37442,113],{"class":112},[82,37444,3077],{"class":88},[82,37446,3136],{"class":92},[82,37448,33459],{"class":108},[82,37450,113],{"class":112},[82,37452,1425],{"class":88},[82,37454,119],{"class":92},[82,37456,37457,37459,37461,37463,37465,37467,37469,37471,37473,37475,37477,37479],{"class":84,"line":2233},[82,37458,33421],{"class":88},[82,37460,33553],{"class":92},[82,37462,113],{"class":112},[82,37464,37395],{"class":92},[82,37466,33450],{"class":108},[82,37468,113],{"class":112},[82,37470,2841],{"class":88},[82,37472,3136],{"class":92},[82,37474,33505],{"class":108},[82,37476,113],{"class":112},[82,37478,1425],{"class":88},[82,37480,119],{"class":92},[82,37482,37483,37485,37488,37490,37492,37494,37496,37498,37500,37502,37504,37507,37509,37511,37513,37515,37517,37519,37521,37523],{"class":84,"line":2255},[82,37484,33421],{"class":88},[82,37486,37487],{"class":92},".c5",[82,37489,113],{"class":112},[82,37491,33429],{"class":92},[82,37493,33432],{"class":108},[82,37495,113],{"class":112},[82,37497,37436],{"class":88},[82,37499,3136],{"class":92},[82,37501,33441],{"class":108},[82,37503,113],{"class":112},[82,37505,37506],{"class":88},"384",[82,37508,3136],{"class":92},[82,37510,33450],{"class":108},[82,37512,113],{"class":112},[82,37514,2841],{"class":88},[82,37516,3136],{"class":92},[82,37518,33459],{"class":108},[82,37520,113],{"class":112},[82,37522,2283],{"class":88},[82,37524,119],{"class":92},[82,37526,37527,37529,37532,37534,37536,37538,37540,37542,37544,37546,37548,37550,37552,37554,37556,37558,37560,37562,37564,37566],{"class":84,"line":2260},[82,37528,33421],{"class":88},[82,37530,37531],{"class":92},".c6",[82,37533,113],{"class":112},[82,37535,33429],{"class":92},[82,37537,33432],{"class":108},[82,37539,113],{"class":112},[82,37541,37506],{"class":88},[82,37543,3136],{"class":92},[82,37545,33441],{"class":108},[82,37547,113],{"class":112},[82,37549,37506],{"class":88},[82,37551,3136],{"class":92},[82,37553,33450],{"class":108},[82,37555,113],{"class":112},[82,37557,2841],{"class":88},[82,37559,3136],{"class":92},[82,37561,33459],{"class":108},[82,37563,113],{"class":112},[82,37565,2283],{"class":88},[82,37567,119],{"class":92},[82,37569,37570,37572,37575,37577,37579,37581,37583,37585,37587,37589,37591,37593,37595,37597,37599,37601,37603,37605,37607,37609],{"class":84,"line":2298},[82,37571,33421],{"class":88},[82,37573,37574],{"class":92},".c7",[82,37576,113],{"class":112},[82,37578,33429],{"class":92},[82,37580,33432],{"class":108},[82,37582,113],{"class":112},[82,37584,37506],{"class":88},[82,37586,3136],{"class":92},[82,37588,33441],{"class":108},[82,37590,113],{"class":112},[82,37592,37436],{"class":88},[82,37594,3136],{"class":92},[82,37596,33450],{"class":108},[82,37598,113],{"class":112},[82,37600,2841],{"class":88},[82,37602,3136],{"class":92},[82,37604,33459],{"class":108},[82,37606,113],{"class":112},[82,37608,2283],{"class":88},[82,37610,119],{"class":92},[82,37612,37613,37615,37618,37620,37622,37624,37626,37628,37630,37632,37634,37636],{"class":84,"line":2303},[82,37614,33421],{"class":88},[82,37616,37617],{"class":92},".s8",[82,37619,113],{"class":112},[82,37621,37395],{"class":92},[82,37623,33450],{"class":108},[82,37625,113],{"class":112},[82,37627,2841],{"class":88},[82,37629,3136],{"class":92},[82,37631,33505],{"class":108},[82,37633,113],{"class":112},[82,37635,1425],{"class":88},[82,37637,119],{"class":92},[82,37639,37640],{"class":84,"line":2321},[82,37641,33578],{"class":2828},[82,37643,37644,37646,37648,37650],{"class":84,"line":2533},[82,37645,33421],{"class":88},[82,37647,33585],{"class":92},[82,37649,113],{"class":112},[82,37651,33590],{"class":92},[82,37653,37654],{"class":84,"line":2538},[82,37655,37656],{"class":2828},"       # 定义全连接层\n",[82,37658,37659,37661,37664,37666,37668,37670,37672,37674,37676,37678,37680,37683],{"class":84,"line":2548},[82,37660,33421],{"class":88},[82,37662,37663],{"class":92},".f1",[82,37665,113],{"class":112},[82,37667,33607],{"class":92},[82,37669,3102],{"class":88},[82,37671,3212],{"class":112},[82,37673,3102],{"class":88},[82,37675,3212],{"class":112},[82,37677,37436],{"class":88},[82,37679,3136],{"class":92},[82,37681,37682],{"class":88},"4096",[82,37684,119],{"class":92},[82,37686,37687,37689,37692,37694,37696,37698,37700,37702],{"class":84,"line":2579},[82,37688,33421],{"class":88},[82,37690,37691],{"class":92},".f2",[82,37693,113],{"class":112},[82,37695,33607],{"class":92},[82,37697,37682],{"class":88},[82,37699,3136],{"class":92},[82,37701,37682],{"class":88},[82,37703,119],{"class":92},[82,37705,37706,37708,37711,37713,37715,37717,37719,37721],{"class":84,"line":2585},[82,37707,33421],{"class":88},[82,37709,37710],{"class":92},".f3",[82,37712,113],{"class":112},[82,37714,33607],{"class":92},[82,37716,37682],{"class":88},[82,37718,3136],{"class":92},[82,37720,440],{"class":88},[82,37722,119],{"class":92},[82,37724,37725],{"class":84,"line":4350},[82,37726,486],{"emptyLinePlaceholder":485},[82,37728,37729],{"class":84,"line":4355},[82,37730,37731],{"class":2828},"    # 定义前向传播\n",[82,37733,37734,37736,37738],{"class":84,"line":4360},[82,37735,33377],{"class":112},[82,37737,33669],{"class":2384},[82,37739,33672],{"class":92},[82,37741,37742,37744,37746,37748,37751,37753],{"class":84,"line":4365},[82,37743,33677],{"class":92},[82,37745,113],{"class":112},[82,37747,33399],{"class":88},[82,37749,37750],{"class":92},".ReLu(",[82,37752,33399],{"class":88},[82,37754,33689],{"class":92},[82,37756,37757,37759,37761,37763],{"class":84,"line":4379},[82,37758,33677],{"class":92},[82,37760,113],{"class":112},[82,37762,33399],{"class":88},[82,37764,33700],{"class":92},[82,37766,37767,37769,37771,37773,37775,37777],{"class":84,"line":4384},[82,37768,33677],{"class":92},[82,37770,113],{"class":112},[82,37772,33399],{"class":88},[82,37774,37750],{"class":92},[82,37776,33399],{"class":88},[82,37778,33715],{"class":92},[82,37780,37781,37783,37785,37787],{"class":84,"line":5176},[82,37782,33677],{"class":92},[82,37784,113],{"class":112},[82,37786,33399],{"class":88},[82,37788,33726],{"class":92},[82,37790,37791,37793,37795,37797,37799,37801],{"class":84,"line":5190},[82,37792,33677],{"class":92},[82,37794,113],{"class":112},[82,37796,33399],{"class":88},[82,37798,37750],{"class":92},[82,37800,33399],{"class":88},[82,37802,37803],{"class":92},".c5(x))\n",[82,37805,37806,37808,37810,37812,37814,37816],{"class":84,"line":5198},[82,37807,33677],{"class":92},[82,37809,113],{"class":112},[82,37811,33399],{"class":88},[82,37813,37750],{"class":92},[82,37815,33399],{"class":88},[82,37817,37818],{"class":92},".c6(x))\n",[82,37820,37821,37823,37825,37827,37829,37831],{"class":84,"line":5203},[82,37822,33677],{"class":92},[82,37824,113],{"class":112},[82,37826,33399],{"class":88},[82,37828,37750],{"class":92},[82,37830,33399],{"class":88},[82,37832,37833],{"class":92},".c7(x))\n",[82,37835,37836,37838,37840,37842],{"class":84,"line":5209},[82,37837,33677],{"class":92},[82,37839,113],{"class":112},[82,37841,33399],{"class":88},[82,37843,37844],{"class":92},".s8(x)\n",[82,37846,37847],{"class":84,"line":5215},[82,37848,486],{"emptyLinePlaceholder":485},[82,37850,37851],{"class":84,"line":5220},[82,37852,37853],{"class":2828},"        # 展平加线性全连接层\n",[82,37855,37856,37858,37860,37862],{"class":84,"line":10539},[82,37857,33677],{"class":92},[82,37859,113],{"class":112},[82,37861,33399],{"class":88},[82,37863,33737],{"class":92},[82,37865,37866,37868,37870,37872,37874,37876],{"class":84,"line":10563},[82,37867,33677],{"class":92},[82,37869,113],{"class":112},[82,37871,33399],{"class":88},[82,37873,37750],{"class":92},[82,37875,33399],{"class":88},[82,37877,37878],{"class":92},".f1(x))\n",[82,37880,37881],{"class":84,"line":10568},[82,37882,37883],{"class":2828},"        # 还需要dropout对神经元随机进行失活\n",[82,37885,37886,37888,37890,37893,37896],{"class":84,"line":10574},[82,37887,33677],{"class":92},[82,37889,113],{"class":112},[82,37891,37892],{"class":92},"F.dropout(x,",[82,37894,37895],{"class":88},"0.5",[82,37897,119],{"class":92},[82,37899,37900,37902,37904,37906,37908,37910],{"class":84,"line":10601},[82,37901,33677],{"class":92},[82,37903,113],{"class":112},[82,37905,33399],{"class":88},[82,37907,37750],{"class":92},[82,37909,33399],{"class":88},[82,37911,37912],{"class":92},".f2(x))\n",[82,37914,37915,37917,37919,37921,37923],{"class":84,"line":10606},[82,37916,33677],{"class":92},[82,37918,113],{"class":112},[82,37920,37892],{"class":92},[82,37922,37895],{"class":88},[82,37924,119],{"class":92},[82,37926,37927],{"class":84,"line":10612},[82,37928,37929],{"class":2828},"        # 直接输出\n",[82,37931,37932,37934,37936,37938],{"class":84,"line":10624},[82,37933,33677],{"class":92},[82,37935,113],{"class":112},[82,37937,33399],{"class":88},[82,37939,37940],{"class":92},".f3(x)\n",[82,37942,37943],{"class":84,"line":10636},[82,37944,37945],{"class":2828},"        # 前向传播输出\n",[82,37947,37948,37950],{"class":84,"line":10648},[82,37949,2405],{"class":112},[82,37951,33785],{"class":92},[82,37953,37954],{"class":84,"line":12307},[82,37955,37956],{"class":2828},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[82,37958,37959,37961,37963,37965,37967],{"class":84,"line":12332},[82,37960,1237],{"class":112},[82,37962,33796],{"class":88},[82,37964,5548],{"class":112},[82,37966,33801],{"class":96},[82,37968,669],{"class":92},[82,37970,37971,37973,37975,37977,37979,37981,37983,37985,37987],{"class":84,"line":12355},[82,37972,33813],{"class":92},[82,37974,113],{"class":112},[82,37976,33028],{"class":92},[82,37978,33820],{"class":96},[82,37980,4307],{"class":112},[82,37982,33825],{"class":92},[82,37984,4304],{"class":112},[82,37986,33053],{"class":96},[82,37988,119],{"class":92},[82,37990,37991],{"class":84,"line":12379},[82,37992,37993],{"class":2828},"    # 模型实例化，然后将实例化的模型放到设备中\n",[82,37995,37996,37998,38000],{"class":84,"line":12384},[82,37997,33865],{"class":92},[82,37999,113],{"class":112},[82,38001,38002],{"class":92},"AlexNet().to(device)\n",[82,38004,38005,38007,38009,38011,38013,38016,38018,38020],{"class":84,"line":12389},[82,38006,611],{"class":88},[82,38008,33877],{"class":92},[82,38010,2283],{"class":88},[82,38012,3136],{"class":92},[82,38014,38015],{"class":88},"227",[82,38017,3136],{"class":92},[82,38019,38015],{"class":88},[82,38021,33890],{"class":92},[26,38023,38024],{"start":157},[29,38025,33903],{},[73,38027,38029],{"className":75,"code":38028,"language":77,"meta":78,"style":78},"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",[32,38030,38031,38037,38043,38053,38059,38069,38079,38089,38099,38109,38113,38124,38134,38138,38142,38146,38154,38166,38176,38192,38202,38234,38248,38258,38268,38272,38282,38296,38306,38316,38326,38332,38336,38340,38344,38348,38352,38360,38380,38384,38388,38392,38396,38400,38416,38420,38424,38432,38436,38440,38448,38452,38456,38460,38468,38472,38476,38480,38484,38492,38496,38504,38508,38516,38520,38528,38532,38540,38544,38548,38556,38560,38564,38568,38580,38604,38618,38622,38626,38630,38638,38642,38650,38654,38662,38666,38674,38678,38686,38690,38698,38702,38714,38718,38726,38730,38738,38742,38746,38750,38754,38762,38766,38782,38786,38794,38798,38802,38806,38810,38814,38818,38822,38838,38842,38854,38858,38870,38874,38886,38890,38898,38902,38910,38914,38918,38923,38929,38933,38942,38946,38963,38967,38976,38980,38998,39011,39016,39029,39033,39037,39045,39049,39053,39061,39065,39073,39077,39085,39089,39093,39135,39177,39181,39185,39201,39205,39221,39225,39229,39237,39241,39245,39257,39295,39300,39305,39314,39318,39332,39342,39348,39354,39360,39366,39370,39374,39380,39384,39388,39396,39400,39418,39422,39426,39430,39446,39450,39454,39458,39462,39466,39486,39506,39510,39514,39518,39526,39534,39538,39554,39574,39594,39598,39602,39610,39618,39622,39626,39630,39642,39646,39656,39664,39681],{"__ignoreMap":78},[82,38032,38033,38035],{"class":84,"line":85},[82,38034,1123],{"class":112},[82,38036,34394],{"class":92},[82,38038,38039,38041],{"class":84,"line":157},[82,38040,1123],{"class":112},[82,38042,34401],{"class":92},[82,38044,38045,38047,38049,38051],{"class":84,"line":404},[82,38046,1123],{"class":112},[82,38048,34412],{"class":92},[82,38050,728],{"class":112},[82,38052,34417],{"class":92},[82,38054,38055,38057],{"class":84,"line":413},[82,38056,1123],{"class":112},[82,38058,32973],{"class":92},[82,38060,38061,38063,38065,38067],{"class":84,"line":508},[82,38062,1117],{"class":112},[82,38064,33989],{"class":92},[82,38066,1123],{"class":112},[82,38068,34434],{"class":92},[82,38070,38071,38073,38075,38077],{"class":84,"line":513},[82,38072,1117],{"class":112},[82,38074,33943],{"class":92},[82,38076,1123],{"class":112},[82,38078,33948],{"class":92},[82,38080,38081,38083,38085,38087],{"class":84,"line":1388},[82,38082,1117],{"class":112},[82,38084,33972],{"class":92},[82,38086,1123],{"class":112},[82,38088,33977],{"class":92},[82,38090,38091,38093,38095,38097],{"class":84,"line":1394},[82,38092,1123],{"class":112},[82,38094,33989],{"class":92},[82,38096,728],{"class":112},[82,38098,33994],{"class":92},[82,38100,38101,38103,38105,38107],{"class":84,"line":1399},[82,38102,1123],{"class":112},[82,38104,34006],{"class":92},[82,38106,728],{"class":112},[82,38108,34011],{"class":92},[82,38110,38111],{"class":84,"line":1430},[82,38112,34479],{"class":2828},[82,38114,38115,38117,38119,38121],{"class":84,"line":1818},[82,38116,1117],{"class":112},[82,38118,34486],{"class":92},[82,38120,1123],{"class":112},[82,38122,38123],{"class":92}," AlexNet\n",[82,38125,38126,38128,38130,38132],{"class":84,"line":2082},[82,38127,1117],{"class":112},[82,38129,33316],{"class":92},[82,38131,1123],{"class":112},[82,38133,33321],{"class":92},[82,38135,38136],{"class":84,"line":2233},[82,38137,486],{"emptyLinePlaceholder":485},[82,38139,38140],{"class":84,"line":2255},[82,38141,486],{"emptyLinePlaceholder":485},[82,38143,38144],{"class":84,"line":2260},[82,38145,34514],{"class":2828},[82,38147,38148,38150,38152],{"class":84,"line":2298},[82,38149,2381],{"class":112},[82,38151,34521],{"class":2384},[82,38153,2388],{"class":92},[82,38155,38156,38158,38160,38162,38164],{"class":84,"line":2303},[82,38157,34528],{"class":92},[82,38159,113],{"class":112},[82,38161,34029],{"class":92},[82,38163,34037],{"class":96},[82,38165,1363],{"class":92},[82,38167,38168,38170,38172,38174],{"class":84,"line":2321},[82,38169,34541],{"class":108},[82,38171,113],{"class":112},[82,38173,1205],{"class":88},[82,38175,1363],{"class":92},[82,38177,38178,38180,38182,38184,38186,38188,38190],{"class":84,"line":2533},[82,38179,34552],{"class":108},[82,38181,113],{"class":112},[82,38183,34065],{"class":92},[82,38185,34068],{"class":108},[82,38187,113],{"class":112},[82,38189,38015],{"class":88},[82,38191,34076],{"class":92},[82,38193,38194,38196,38198,38200],{"class":84,"line":2538},[82,38195,34569],{"class":108},[82,38197,113],{"class":112},[82,38199,1205],{"class":88},[82,38201,119],{"class":92},[82,38203,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232],{"class":84,"line":2548},[82,38205,34580],{"class":92},[82,38207,113],{"class":112},[82,38209,34585],{"class":92},[82,38211,34588],{"class":88},[82,38213,93],{"class":92},[82,38215,34593],{"class":88},[82,38217,3212],{"class":112},[82,38219,9950],{"class":88},[82,38221,34600],{"class":92},[82,38223,34588],{"class":88},[82,38225,93],{"class":92},[82,38227,34607],{"class":88},[82,38229,3212],{"class":112},[82,38231,9950],{"class":88},[82,38233,34614],{"class":92},[82,38235,38236,38238,38240,38242,38244,38246],{"class":84,"line":2579},[82,38237,34619],{"class":92},[82,38239,113],{"class":112},[82,38241,34624],{"class":92},[82,38243,34109],{"class":108},[82,38245,113],{"class":112},[82,38247,34114],{"class":92},[82,38249,38250,38252,38254,38256],{"class":84,"line":2585},[82,38251,34635],{"class":108},[82,38253,113],{"class":112},[82,38255,34640],{"class":88},[82,38257,1363],{"class":92},[82,38259,38260,38262,38264,38266],{"class":84,"line":4350},[82,38261,34647],{"class":108},[82,38263,113],{"class":112},[82,38265,1205],{"class":88},[82,38267,1363],{"class":92},[82,38269,38270],{"class":84,"line":4355},[82,38271,34658],{"class":2828},[82,38273,38274,38276,38278,38280],{"class":84,"line":4360},[82,38275,34663],{"class":108},[82,38277,113],{"class":112},[82,38279,3153],{"class":88},[82,38281,119],{"class":92},[82,38283,38284,38286,38288,38290,38292,38294],{"class":84,"line":4365},[82,38285,34674],{"class":92},[82,38287,113],{"class":112},[82,38289,34106],{"class":92},[82,38291,34109],{"class":108},[82,38293,113],{"class":112},[82,38295,34685],{"class":92},[82,38297,38298,38300,38302,38304],{"class":84,"line":4379},[82,38299,34690],{"class":108},[82,38301,113],{"class":112},[82,38303,34640],{"class":88},[82,38305,1363],{"class":92},[82,38307,38308,38310,38312,38314],{"class":84,"line":4384},[82,38309,34701],{"class":108},[82,38311,113],{"class":112},[82,38313,1205],{"class":88},[82,38315,1363],{"class":92},[82,38317,38318,38320,38322,38324],{"class":84,"line":5176},[82,38319,34712],{"class":108},[82,38321,113],{"class":112},[82,38323,3153],{"class":88},[82,38325,119],{"class":92},[82,38327,38328,38330],{"class":84,"line":5190},[82,38329,6685],{"class":112},[82,38331,34725],{"class":92},[82,38333,38334],{"class":84,"line":5198},[82,38335,486],{"emptyLinePlaceholder":485},[82,38337,38338],{"class":84,"line":5203},[82,38339,34734],{"class":2828},[82,38341,38342],{"class":84,"line":5209},[82,38343,34739],{"class":2828},[82,38345,38346],{"class":84,"line":5215},[82,38347,486],{"emptyLinePlaceholder":485},[82,38349,38350],{"class":84,"line":5220},[82,38351,34748],{"class":2828},[82,38353,38354,38356,38358],{"class":84,"line":10539},[82,38355,2381],{"class":112},[82,38357,34755],{"class":2384},[82,38359,34758],{"class":92},[82,38361,38362,38364,38366,38368,38370,38372,38374,38376,38378],{"class":84,"line":10563},[82,38363,33813],{"class":92},[82,38365,113],{"class":112},[82,38367,33028],{"class":92},[82,38369,33820],{"class":96},[82,38371,4307],{"class":112},[82,38373,33825],{"class":92},[82,38375,4304],{"class":112},[82,38377,34777],{"class":96},[82,38379,119],{"class":92},[82,38381,38382],{"class":84,"line":10568},[82,38383,486],{"emptyLinePlaceholder":485},[82,38385,38386],{"class":84,"line":10574},[82,38387,486],{"emptyLinePlaceholder":485},[82,38389,38390],{"class":84,"line":10601},[82,38391,34792],{"class":2828},[82,38393,38394],{"class":84,"line":10606},[82,38395,34797],{"class":2828},[82,38397,38398],{"class":84,"line":10612},[82,38399,34802],{"class":2828},[82,38401,38402,38404,38406,38408,38410,38412,38414],{"class":84,"line":10624},[82,38403,34807],{"class":92},[82,38405,113],{"class":112},[82,38407,34812],{"class":92},[82,38409,34815],{"class":108},[82,38411,113],{"class":112},[82,38413,34820],{"class":88},[82,38415,119],{"class":92},[82,38417,38418],{"class":84,"line":10636},[82,38419,486],{"emptyLinePlaceholder":485},[82,38421,38422],{"class":84,"line":10648},[82,38423,34831],{"class":2828},[82,38425,38426,38428,38430],{"class":84,"line":12307},[82,38427,34836],{"class":92},[82,38429,113],{"class":112},[82,38431,34841],{"class":92},[82,38433,38434],{"class":84,"line":12332},[82,38435,486],{"emptyLinePlaceholder":485},[82,38437,38438],{"class":84,"line":12355},[82,38439,34850],{"class":2828},[82,38441,38442,38444,38446],{"class":84,"line":12379},[82,38443,33865],{"class":92},[82,38445,113],{"class":112},[82,38447,34859],{"class":92},[82,38449,38450],{"class":84,"line":12384},[82,38451,34864],{"class":2828},[82,38453,38454],{"class":84,"line":12389},[82,38455,34869],{"class":2828},[82,38457,38458],{"class":84,"line":12394},[82,38459,34874],{"class":2828},[82,38461,38462,38464,38466],{"class":84,"line":12403},[82,38463,34879],{"class":92},[82,38465,113],{"class":112},[82,38467,34884],{"class":92},[82,38469,38470],{"class":84,"line":12408},[82,38471,486],{"emptyLinePlaceholder":485},[82,38473,38474],{"class":84,"line":12414},[82,38475,486],{"emptyLinePlaceholder":485},[82,38477,38478],{"class":84,"line":12435},[82,38479,34897],{"class":2828},[82,38481,38482],{"class":84,"line":12441},[82,38483,34902],{"class":2828},[82,38485,38486,38488,38490],{"class":84,"line":12455},[82,38487,34907],{"class":92},[82,38489,113],{"class":112},[82,38491,34912],{"class":88},[82,38493,38494],{"class":84,"line":12461},[82,38495,34917],{"class":2828},[82,38497,38498,38500,38502],{"class":84,"line":12488},[82,38499,34922],{"class":92},[82,38501,113],{"class":112},[82,38503,34927],{"class":92},[82,38505,38506],{"class":84,"line":12497},[82,38507,34932],{"class":2828},[82,38509,38510,38512,38514],{"class":84,"line":12503},[82,38511,34937],{"class":92},[82,38513,113],{"class":112},[82,38515,34927],{"class":92},[82,38517,38518],{"class":84,"line":12511},[82,38519,34946],{"class":2828},[82,38521,38522,38524,38526],{"class":84,"line":12516},[82,38523,34951],{"class":92},[82,38525,113],{"class":112},[82,38527,34927],{"class":92},[82,38529,38530],{"class":84,"line":19189},[82,38531,34960],{"class":2828},[82,38533,38534,38536,38538],{"class":84,"line":19195},[82,38535,34965],{"class":92},[82,38537,113],{"class":112},[82,38539,34927],{"class":92},[82,38541,38542],{"class":84,"line":19218},[82,38543,486],{"emptyLinePlaceholder":485},[82,38545,38546],{"class":84,"line":19224},[82,38547,34978],{"class":2828},[82,38549,38550,38552,38554],{"class":84,"line":19247},[82,38551,34983],{"class":92},[82,38553,113],{"class":112},[82,38555,34988],{"class":92},[82,38557,38558],{"class":84,"line":19261},[82,38559,486],{"emptyLinePlaceholder":485},[82,38561,38562],{"class":84,"line":19281},[82,38563,486],{"emptyLinePlaceholder":485},[82,38565,38566],{"class":84,"line":19287},[82,38567,35001],{"class":2828},[82,38569,38570,38572,38574,38576,38578],{"class":84,"line":19298},[82,38571,1888],{"class":112},[82,38573,35008],{"class":92},[82,38575,603],{"class":112},[82,38577,35013],{"class":88},[82,38579,35016],{"class":92},[82,38581,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602],{"class":84,"line":19321},[82,38583,1901],{"class":88},[82,38585,93],{"class":92},[82,38587,35025],{"class":96},[82,38589,35028],{"class":88},[82,38591,1147],{"class":96},[82,38593,35028],{"class":88},[82,38595,216],{"class":96},[82,38597,35037],{"class":92},[82,38599,3288],{"class":112},[82,38601,2283],{"class":88},[82,38603,33074],{"class":92},[82,38605,38606,38608,38610,38612,38614,38616],{"class":84,"line":19343},[82,38607,1901],{"class":88},[82,38609,93],{"class":92},[82,38611,35052],{"class":96},[82,38613,3212],{"class":112},[82,38615,440],{"class":88},[82,38617,119],{"class":92},[82,38619,38620],{"class":84,"line":19348},[82,38621,486],{"emptyLinePlaceholder":485},[82,38623,38624],{"class":84,"line":19354},[82,38625,35067],{"class":2828},[82,38627,38628],{"class":84,"line":19368},[82,38629,35072],{"class":2828},[82,38631,38632,38634,38636],{"class":84,"line":19381},[82,38633,35077],{"class":92},[82,38635,113],{"class":112},[82,38637,34912],{"class":88},[82,38639,38640],{"class":84,"line":19386},[82,38641,35086],{"class":2828},[82,38643,38644,38646,38648],{"class":84,"line":19400},[82,38645,35091],{"class":92},[82,38647,113],{"class":112},[82,38649,5683],{"class":88},[82,38651,38652],{"class":84,"line":19405},[82,38653,35100],{"class":2828},[82,38655,38656,38658,38660],{"class":84,"line":19411},[82,38657,35105],{"class":92},[82,38659,113],{"class":112},[82,38661,34912],{"class":88},[82,38663,38664],{"class":84,"line":19416},[82,38665,35114],{"class":2828},[82,38667,38668,38670,38672],{"class":84,"line":19430},[82,38669,35119],{"class":92},[82,38671,113],{"class":112},[82,38673,5683],{"class":88},[82,38675,38676],{"class":84,"line":19435},[82,38677,35128],{"class":2828},[82,38679,38680,38682,38684],{"class":84,"line":19440},[82,38681,35133],{"class":92},[82,38683,113],{"class":112},[82,38685,5683],{"class":88},[82,38687,38688],{"class":84,"line":19454},[82,38689,35142],{"class":2828},[82,38691,38692,38694,38696],{"class":84,"line":19466},[82,38693,35147],{"class":92},[82,38695,113],{"class":112},[82,38697,5683],{"class":88},[82,38699,38700],{"class":84,"line":19471},[82,38701,35156],{"class":2828},[82,38703,38704,38706,38708,38710,38712],{"class":84,"line":19484},[82,38705,5999],{"class":112},[82,38707,34173],{"class":92},[82,38709,603],{"class":112},[82,38711,34178],{"class":88},[82,38713,35169],{"class":92},[82,38715,38716],{"class":84,"line":19489},[82,38717,35174],{"class":2828},[82,38719,38720,38722,38724],{"class":84,"line":19494},[82,38721,35179],{"class":92},[82,38723,113],{"class":112},[82,38725,35184],{"class":92},[82,38727,38728],{"class":84,"line":19499},[82,38729,35189],{"class":2828},[82,38731,38732,38734,38736],{"class":84,"line":19512},[82,38733,35194],{"class":92},[82,38735,113],{"class":112},[82,38737,35199],{"class":92},[82,38739,38740],{"class":84,"line":19517},[82,38741,35205],{"class":2828},[82,38743,38744],{"class":84,"line":35202},[82,38745,35211],{"class":92},[82,38747,38748],{"class":84,"line":35208},[82,38749,35217],{"class":2828},[82,38751,38752],{"class":84,"line":35214},[82,38753,35223],{"class":2828},[82,38755,38756,38758,38760],{"class":84,"line":35220},[82,38757,35229],{"class":92},[82,38759,113],{"class":112},[82,38761,35234],{"class":92},[82,38763,38764],{"class":84,"line":35226},[82,38765,35240],{"class":2828},[82,38767,38768,38770,38772,38774,38776,38778,38780],{"class":84,"line":35237},[82,38769,35246],{"class":92},[82,38771,113],{"class":112},[82,38773,35251],{"class":92},[82,38775,35254],{"class":108},[82,38777,113],{"class":112},[82,38779,2283],{"class":88},[82,38781,119],{"class":92},[82,38783,38784],{"class":84,"line":35243},[82,38785,35266],{"class":2828},[82,38787,38788,38790,38792],{"class":84,"line":35263},[82,38789,35272],{"class":92},[82,38791,113],{"class":112},[82,38793,35277],{"class":92},[82,38795,38796],{"class":84,"line":35269},[82,38797,35283],{"class":2828},[82,38799,38800],{"class":84,"line":35280},[82,38801,35289],{"class":92},[82,38803,38804],{"class":84,"line":35286},[82,38805,35295],{"class":2828},[82,38807,38808],{"class":84,"line":35292},[82,38809,35301],{"class":92},[82,38811,38812],{"class":84,"line":35298},[82,38813,35307],{"class":2828},[82,38815,38816],{"class":84,"line":35304},[82,38817,35313],{"class":92},[82,38819,38820],{"class":84,"line":35310},[82,38821,35319],{"class":2828},[82,38823,38824,38826,38828,38830,38832,38834,38836],{"class":84,"line":35316},[82,38825,35325],{"class":92},[82,38827,12068],{"class":112},[82,38829,35330],{"class":92},[82,38831,3212],{"class":112},[82,38833,35335],{"class":92},[82,38835,2244],{"class":88},[82,38837,119],{"class":92},[82,38839,38840],{"class":84,"line":35322},[82,38841,35345],{"class":2828},[82,38843,38844,38846,38848,38850,38852],{"class":84,"line":35342},[82,38845,35351],{"class":92},[82,38847,12068],{"class":112},[82,38849,35356],{"class":92},[82,38851,5548],{"class":112},[82,38853,35361],{"class":92},[82,38855,38856],{"class":84,"line":35348},[82,38857,35367],{"class":2828},[82,38859,38860,38862,38864,38866,38868],{"class":84,"line":35364},[82,38861,35373],{"class":92},[82,38863,12068],{"class":112},[82,38865,35335],{"class":92},[82,38867,2244],{"class":88},[82,38869,119],{"class":92},[82,38871,38872],{"class":84,"line":35370},[82,38873,35387],{"class":2828},[82,38875,38876,38878,38880,38882,38884],{"class":84,"line":35384},[82,38877,5999],{"class":112},[82,38879,35395],{"class":92},[82,38881,603],{"class":112},[82,38883,34178],{"class":88},[82,38885,35402],{"class":92},[82,38887,38888],{"class":84,"line":35390},[82,38889,35408],{"class":2828},[82,38891,38892,38894,38896],{"class":84,"line":35405},[82,38893,35179],{"class":92},[82,38895,113],{"class":112},[82,38897,35184],{"class":92},[82,38899,38900],{"class":84,"line":35411},[82,38901,35423],{"class":2828},[82,38903,38904,38906,38908],{"class":84,"line":35420},[82,38905,35194],{"class":92},[82,38907,113],{"class":112},[82,38909,35199],{"class":92},[82,38911,38912],{"class":84,"line":35426},[82,38913,35438],{"class":2828},[82,38915,38916],{"class":84,"line":35435},[82,38917,35444],{"class":92},[82,38919,38920],{"class":84,"line":35441},[82,38921,38922],{"class":2828},"            # 验证时不计算梯度以节省内存\u002F计算\n",[82,38924,38925,38927],{"class":84,"line":35447},[82,38926,35450],{"class":112},[82,38928,35453],{"class":92},[82,38930,38931],{"class":84,"line":35456},[82,38932,35459],{"class":2828},[82,38934,38935,38938,38940],{"class":84,"line":35462},[82,38936,38937],{"class":92},"                output",[82,38939,113],{"class":112},[82,38941,35234],{"class":92},[82,38943,38944],{"class":84,"line":35473},[82,38945,35476],{"class":2828},[82,38947,38948,38951,38953,38955,38957,38959,38961],{"class":84,"line":35479},[82,38949,38950],{"class":92},"                pre_lab",[82,38952,113],{"class":112},[82,38954,35251],{"class":92},[82,38956,35254],{"class":108},[82,38958,113],{"class":112},[82,38960,2283],{"class":88},[82,38962,119],{"class":92},[82,38964,38965],{"class":84,"line":35498},[82,38966,35501],{"class":2828},[82,38968,38969,38972,38974],{"class":84,"line":35504},[82,38970,38971],{"class":92},"                val_batch_loss",[82,38973,113],{"class":112},[82,38975,35277],{"class":92},[82,38977,38978],{"class":84,"line":35515},[82,38979,35518],{"class":2828},[82,38981,38982,38985,38987,38990,38992,38994,38996],{"class":84,"line":35521},[82,38983,38984],{"class":92},"                val_loss",[82,38986,12068],{"class":112},[82,38988,38989],{"class":92},"val_batch_loss.item()",[82,38991,3212],{"class":112},[82,38993,35335],{"class":92},[82,38995,2244],{"class":88},[82,38997,119],{"class":92},[82,38999,39000,39003,39005,39007,39009],{"class":84,"line":35541},[82,39001,39002],{"class":92},"                val_corrects",[82,39004,12068],{"class":112},[82,39006,35356],{"class":92},[82,39008,5548],{"class":112},[82,39010,35361],{"class":92},[82,39012,39013],{"class":84,"line":35557},[82,39014,39015],{"class":2828},"            # 当前用于验证的样本数量\n",[82,39017,39018,39021,39023,39025,39027],{"class":84,"line":35563},[82,39019,39020],{"class":92},"            val_num",[82,39022,12068],{"class":112},[82,39024,35335],{"class":92},[82,39026,2244],{"class":88},[82,39028,119],{"class":92},[82,39030,39031],{"class":84,"line":35577},[82,39032,35580],{"class":2828},[82,39034,39035],{"class":84,"line":35583},[82,39036,35586],{"class":2828},[82,39038,39039,39041,39043],{"class":84,"line":35589},[82,39040,35592],{"class":92},[82,39042,1147],{"class":112},[82,39044,35597],{"class":92},[82,39046,39047],{"class":84,"line":35600},[82,39048,35603],{"class":2828},[82,39050,39051],{"class":84,"line":35606},[82,39052,35609],{"class":2828},[82,39054,39055,39057,39059],{"class":84,"line":35612},[82,39056,35615],{"class":92},[82,39058,1147],{"class":112},[82,39060,35597],{"class":92},[82,39062,39063],{"class":84,"line":35622},[82,39064,35625],{"class":2828},[82,39066,39067,39069,39071],{"class":84,"line":35628},[82,39068,35631],{"class":92},[82,39070,1147],{"class":112},[82,39072,35636],{"class":92},[82,39074,39075],{"class":84,"line":35639},[82,39076,35642],{"class":2828},[82,39078,39079,39081,39083],{"class":84,"line":35645},[82,39080,35648],{"class":92},[82,39082,1147],{"class":112},[82,39084,35636],{"class":92},[82,39086,39087],{"class":84,"line":35655},[82,39088,486],{"emptyLinePlaceholder":485},[82,39090,39091],{"class":84,"line":35660},[82,39092,35663],{"class":2828},[82,39094,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117,39119,39121,39123,39125,39127,39129,39131,39133],{"class":84,"line":35666},[82,39096,1901],{"class":88},[82,39098,93],{"class":92},[82,39100,6188],{"class":96},[82,39102,35028],{"class":88},[82,39104,35677],{"class":96},[82,39106,3645],{"class":88},[82,39108,35682],{"class":112},[82,39110,3695],{"class":88},[82,39112,35687],{"class":96},[82,39114,3645],{"class":88},[82,39116,35682],{"class":112},[82,39118,3695],{"class":88},[82,39120,6188],{"class":96},[82,39122,35698],{"class":92},[82,39124,3288],{"class":112},[82,39126,2283],{"class":88},[82,39128,35705],{"class":92},[82,39130,3288],{"class":112},[82,39132,2283],{"class":88},[82,39134,35712],{"class":92},[82,39136,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159,39161,39163,39165,39167,39169,39171,39173,39175],{"class":84,"line":35715},[82,39138,1901],{"class":88},[82,39140,93],{"class":92},[82,39142,6188],{"class":96},[82,39144,35028],{"class":88},[82,39146,35726],{"class":96},[82,39148,3645],{"class":88},[82,39150,35682],{"class":112},[82,39152,3695],{"class":88},[82,39154,35735],{"class":96},[82,39156,3645],{"class":88},[82,39158,35682],{"class":112},[82,39160,3695],{"class":88},[82,39162,6188],{"class":96},[82,39164,35746],{"class":92},[82,39166,3288],{"class":112},[82,39168,2283],{"class":88},[82,39170,35753],{"class":92},[82,39172,3288],{"class":112},[82,39174,2283],{"class":88},[82,39176,35712],{"class":92},[82,39178,39179],{"class":84,"line":35762},[82,39180,486],{"emptyLinePlaceholder":485},[82,39182,39183],{"class":84,"line":35767},[82,39184,35770],{"class":2828},[82,39186,39187,39189,39191,39193,39195,39197,39199],{"class":84,"line":35773},[82,39188,5096],{"class":112},[82,39190,35778],{"class":92},[82,39192,3288],{"class":112},[82,39194,2283],{"class":88},[82,39196,3689],{"class":92},[82,39198,3709],{"class":112},[82,39200,35789],{"class":92},[82,39202,39203],{"class":84,"line":35792},[82,39204,35795],{"class":2828},[82,39206,39207,39209,39211,39213,39215,39217,39219],{"class":84,"line":35798},[82,39208,35801],{"class":92},[82,39210,2811],{"class":88},[82,39212,113],{"class":112},[82,39214,35808],{"class":92},[82,39216,3288],{"class":112},[82,39218,2283],{"class":88},[82,39220,875],{"class":92},[82,39222,39223],{"class":84,"line":35817},[82,39224,35820],{"class":2828},[82,39226,39227],{"class":84,"line":35823},[82,39228,35826],{"class":2828},[82,39230,39231,39233,39235],{"class":84,"line":35829},[82,39232,35832],{"class":92},[82,39234,113],{"class":112},[82,39236,34884],{"class":92},[82,39238,39239],{"class":84,"line":35839},[82,39240,486],{"emptyLinePlaceholder":485},[82,39242,39243],{"class":84,"line":35844},[82,39244,35847],{"class":2828},[82,39246,39247,39249,39251,39253,39255],{"class":84,"line":35850},[82,39248,35853],{"class":92},[82,39250,113],{"class":112},[82,39252,35858],{"class":92},[82,39254,3288],{"class":112},[82,39256,35863],{"class":92},[82,39258,39259,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281,39283,39285,39287,39289,39291,39293],{"class":84,"line":35866},[82,39260,1901],{"class":88},[82,39262,93],{"class":92},[82,39264,35873],{"class":96},[82,39266,3645],{"class":88},[82,39268,35878],{"class":112},[82,39270,3695],{"class":88},[82,39272,3300],{"class":96},[82,39274,3645],{"class":88},[82,39276,35878],{"class":112},[82,39278,3695],{"class":88},[82,39280,35891],{"class":96},[82,39282,35894],{"class":92},[82,39284,35897],{"class":112},[82,39286,3656],{"class":88},[82,39288,35902],{"class":92},[82,39290,3086],{"class":112},[82,39292,3656],{"class":88},[82,39294,33074],{"class":92},[82,39296,39297],{"class":84,"line":35911},[82,39298,39299],{"class":2828},"    # 选择最优参数并保存\n",[82,39301,39302],{"class":84,"line":35917},[82,39303,39304],{"class":2828},"    # 保存最佳模型权重字典\n",[82,39306,39307,39310,39312],{"class":84,"line":35923},[82,39308,39309],{"class":92},"    torch.save(best_model_wts,",[82,39311,35935],{"class":96},[82,39313,119],{"class":92},[82,39315,39316],{"class":84,"line":35929},[82,39317,35955],{"class":2828},[82,39319,39320,39322,39324,39326,39328,39330],{"class":84,"line":35940},[82,39321,35961],{"class":92},[82,39323,113],{"class":112},[82,39325,35966],{"class":92},[82,39327,35969],{"class":108},[82,39329,113],{"class":112},[82,39331,4161],{"class":92},[82,39333,39334,39336,39338,39340],{"class":84,"line":35946},[82,39335,35979],{"class":96},[82,39337,3608],{"class":92},[82,39339,35984],{"class":88},[82,39341,35987],{"class":92},[82,39343,39344,39346],{"class":84,"line":35952},[82,39345,35993],{"class":96},[82,39347,35996],{"class":92},[82,39349,39350,39352],{"class":84,"line":35958},[82,39351,36002],{"class":96},[82,39353,36005],{"class":92},[82,39355,39356,39358],{"class":84,"line":35976},[82,39357,36011],{"class":96},[82,39359,36014],{"class":92},[82,39361,39362,39364],{"class":84,"line":35990},[82,39363,36020],{"class":96},[82,39365,36023],{"class":92},[82,39367,39368],{"class":84,"line":35999},[82,39369,36029],{"class":92},[82,39371,39372],{"class":84,"line":36008},[82,39373,36035],{"class":2828},[82,39375,39376,39378],{"class":84,"line":36017},[82,39377,6685],{"class":112},[82,39379,36043],{"class":92},[82,39381,39382],{"class":84,"line":36026},[82,39383,486],{"emptyLinePlaceholder":485},[82,39385,39386],{"class":84,"line":36032},[82,39387,36054],{"class":2828},[82,39389,39390,39392,39394],{"class":84,"line":36038},[82,39391,2381],{"class":112},[82,39393,36062],{"class":2384},[82,39395,36065],{"class":92},[82,39397,39398],{"class":84,"line":36046},[82,39399,36071],{"class":2828},[82,39401,39402,39404,39406,39408,39410,39412,39414,39416],{"class":84,"line":36051},[82,39403,36077],{"class":92},[82,39405,34265],{"class":108},[82,39407,113],{"class":112},[82,39409,93],{"class":92},[82,39411,3254],{"class":88},[82,39413,3136],{"class":92},[82,39415,3051],{"class":88},[82,39417,33074],{"class":92},[82,39419,39420],{"class":84,"line":36057},[82,39421,36097],{"class":2828},[82,39423,39424],{"class":84,"line":36068},[82,39425,36103],{"class":2828},[82,39427,39428],{"class":84,"line":36074},[82,39429,36109],{"class":2828},[82,39431,39432,39434,39436,39438,39440,39442,39444],{"class":84,"line":36094},[82,39433,34299],{"class":92},[82,39435,2283],{"class":88},[82,39437,3136],{"class":92},[82,39439,1425],{"class":88},[82,39441,3136],{"class":92},[82,39443,2283],{"class":88},[82,39445,119],{"class":92},[82,39447,39448],{"class":84,"line":36100},[82,39449,36132],{"class":2828},[82,39451,39452],{"class":84,"line":36106},[82,39453,36138],{"class":2828},[82,39455,39456],{"class":84,"line":36112},[82,39457,36144],{"class":2828},[82,39459,39460],{"class":84,"line":36129},[82,39461,36150],{"class":2828},[82,39463,39464],{"class":84,"line":36135},[82,39465,36156],{"class":2828},[82,39467,39468,39470,39472,39474,39476,39478,39480,39482,39484],{"class":84,"line":36141},[82,39469,36162],{"class":92},[82,39471,36165],{"class":96},[82,39473,36168],{"class":92},[82,39475,36171],{"class":96},[82,39477,3136],{"class":92},[82,39479,36176],{"class":108},[82,39481,113],{"class":112},[82,39483,36181],{"class":96},[82,39485,119],{"class":92},[82,39487,39488,39490,39492,39494,39496,39498,39500,39502,39504],{"class":84,"line":36147},[82,39489,36162],{"class":92},[82,39491,36165],{"class":96},[82,39493,36193],{"class":92},[82,39495,36196],{"class":96},[82,39497,3136],{"class":92},[82,39499,36176],{"class":108},[82,39501,113],{"class":112},[82,39503,36205],{"class":96},[82,39505,119],{"class":92},[82,39507,39508],{"class":84,"line":36153},[82,39509,36213],{"class":2828},[82,39511,39512],{"class":84,"line":36159},[82,39513,36219],{"class":92},[82,39515,39516],{"class":84,"line":36186},[82,39517,36225],{"class":2828},[82,39519,39520,39522,39524],{"class":84,"line":36210},[82,39521,36231],{"class":92},[82,39523,36234],{"class":96},[82,39525,119],{"class":92},[82,39527,39528,39530,39532],{"class":84,"line":36216},[82,39529,36242],{"class":92},[82,39531,36245],{"class":96},[82,39533,119],{"class":92},[82,39535,39536],{"class":84,"line":36222},[82,39537,36253],{"class":2828},[82,39539,39540,39542,39544,39546,39548,39550,39552],{"class":84,"line":36228},[82,39541,34299],{"class":92},[82,39543,2283],{"class":88},[82,39545,3136],{"class":92},[82,39547,1425],{"class":88},[82,39549,3136],{"class":92},[82,39551,1425],{"class":88},[82,39553,119],{"class":92},[82,39555,39556,39558,39560,39562,39564,39566,39568,39570,39572],{"class":84,"line":36239},[82,39557,36162],{"class":92},[82,39559,36165],{"class":96},[82,39561,36280],{"class":92},[82,39563,36171],{"class":96},[82,39565,3136],{"class":92},[82,39567,36176],{"class":108},[82,39569,113],{"class":112},[82,39571,36291],{"class":96},[82,39573,119],{"class":92},[82,39575,39576,39578,39580,39582,39584,39586,39588,39590,39592],{"class":84,"line":36250},[82,39577,36162],{"class":92},[82,39579,36165],{"class":96},[82,39581,36303],{"class":92},[82,39583,36196],{"class":96},[82,39585,3136],{"class":92},[82,39587,36176],{"class":108},[82,39589,113],{"class":112},[82,39591,36314],{"class":96},[82,39593,119],{"class":92},[82,39595,39596],{"class":84,"line":36256},[82,39597,36322],{"class":2828},[82,39599,39600],{"class":84,"line":36273},[82,39601,36219],{"class":92},[82,39603,39604,39606,39608],{"class":84,"line":36296},[82,39605,36231],{"class":92},[82,39607,36165],{"class":96},[82,39609,119],{"class":92},[82,39611,39612,39614,39616],{"class":84,"line":36319},[82,39613,36242],{"class":92},[82,39615,36344],{"class":96},[82,39617,119],{"class":92},[82,39619,39620],{"class":84,"line":36325},[82,39621,36352],{"class":92},[82,39623,39624],{"class":84,"line":36330},[82,39625,486],{"emptyLinePlaceholder":485},[82,39627,39628],{"class":84,"line":36339},[82,39629,36363],{"class":2828},[82,39631,39632,39634,39636,39638,39640],{"class":84,"line":36349},[82,39633,1237],{"class":112},[82,39635,33796],{"class":88},[82,39637,5548],{"class":112},[82,39639,33801],{"class":96},[82,39641,669],{"class":92},[82,39643,39644],{"class":84,"line":36355},[82,39645,36382],{"class":2828},[82,39647,39648,39651,39653],{"class":84,"line":36360},[82,39649,39650],{"class":92},"    AlexNet",[82,39652,113],{"class":112},[82,39654,39655],{"class":92},"AlexNet()\n",[82,39657,39658,39660,39662],{"class":84,"line":36366},[82,39659,36399],{"class":92},[82,39661,113],{"class":112},[82,39663,36404],{"class":92},[82,39665,39666,39668,39670,39673,39675,39677,39679],{"class":84,"line":36379},[82,39667,35961],{"class":92},[82,39669,113],{"class":112},[82,39671,39672],{"class":92},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[82,39674,36417],{"class":108},[82,39676,113],{"class":112},[82,39678,3451],{"class":88},[82,39680,119],{"class":92},[82,39682,39683],{"class":84,"line":36385},[82,39684,36429],{"class":92},[26,39686,39687],{"start":404},[29,39688,36442],{},[73,39690,39692],{"className":75,"code":39691,"language":77,"meta":78,"style":78},"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",[32,39693,39694,39700,39710,39720,39730,39734,39744,39754,39765,39769,39773,39777,39785,39801,39811,39827,39837,39851,39855,39865,39875,39885,39891,39895,39899,39907,39911,39927,39935,39939,39943,39951,39959,39963,39967,39971,39975,39981,39985,39995,40003,40011,40015,40019,40023,40031,40035,40051,40055,40059,40063,40075,40079,40091,40095,40099,40111,40115,40125,40129,40133,40145,40149,40157,40161,40165,40173,40177,40185,40189,40193,40197,40201,40205,40221,40229,40233,40237,40285,40291,40295,40305,40313,40321,40325,40329,40333,40337,40345,40349,40365,40369,40377,40385],{"__ignoreMap":78},[82,39695,39696,39698],{"class":84,"line":85},[82,39697,1123],{"class":112},[82,39699,32973],{"class":92},[82,39701,39702,39704,39706,39708],{"class":84,"line":157},[82,39703,1123],{"class":112},[82,39705,33989],{"class":92},[82,39707,728],{"class":112},[82,39709,33994],{"class":92},[82,39711,39712,39714,39716,39718],{"class":84,"line":404},[82,39713,1117],{"class":112},[82,39715,36470],{"class":92},[82,39717,1123],{"class":112},[82,39719,36475],{"class":92},[82,39721,39722,39724,39726,39728],{"class":84,"line":413},[82,39723,1117],{"class":112},[82,39725,33972],{"class":92},[82,39727,1123],{"class":112},[82,39729,33977],{"class":92},[82,39731,39732],{"class":84,"line":508},[82,39733,36490],{"class":2828},[82,39735,39736,39738,39740,39742],{"class":84,"line":513},[82,39737,1117],{"class":112},[82,39739,33943],{"class":92},[82,39741,1123],{"class":112},[82,39743,33948],{"class":92},[82,39745,39746,39748,39750,39752],{"class":84,"line":1388},[82,39747,1117],{"class":112},[82,39749,34486],{"class":92},[82,39751,1123],{"class":112},[82,39753,38123],{"class":92},[82,39755,39756,39758,39761,39763],{"class":84,"line":1394},[82,39757,1117],{"class":112},[82,39759,39760],{"class":92}," 练习.AlexNet.model ",[82,39762,1123],{"class":112},[82,39764,38123],{"class":92},[82,39766,39767],{"class":84,"line":1399},[82,39768,486],{"emptyLinePlaceholder":485},[82,39770,39771],{"class":84,"line":1430},[82,39772,486],{"emptyLinePlaceholder":485},[82,39774,39775],{"class":84,"line":1818},[82,39776,36519],{"class":2828},[82,39778,39779,39781,39783],{"class":84,"line":2082},[82,39780,2381],{"class":112},[82,39782,36526],{"class":2384},[82,39784,2388],{"class":92},[82,39786,39787,39789,39791,39793,39795,39797,39799],{"class":84,"line":2233},[82,39788,36533],{"class":92},[82,39790,113],{"class":112},[82,39792,34029],{"class":92},[82,39794,34032],{"class":108},[82,39796,113],{"class":112},[82,39798,34037],{"class":96},[82,39800,1363],{"class":92},[82,39802,39803,39805,39807,39809],{"class":84,"line":2255},[82,39804,36550],{"class":108},[82,39806,113],{"class":112},[82,39808,1415],{"class":88},[82,39810,1363],{"class":92},[82,39812,39813,39815,39817,39819,39821,39823,39825],{"class":84,"line":2260},[82,39814,36561],{"class":108},[82,39816,113],{"class":112},[82,39818,34065],{"class":92},[82,39820,34068],{"class":108},[82,39822,113],{"class":112},[82,39824,38015],{"class":88},[82,39826,34076],{"class":92},[82,39828,39829,39831,39833,39835],{"class":84,"line":2298},[82,39830,36578],{"class":108},[82,39832,113],{"class":112},[82,39834,1205],{"class":88},[82,39836,119],{"class":92},[82,39838,39839,39841,39843,39845,39847,39849],{"class":84,"line":2303},[82,39840,36589],{"class":92},[82,39842,113],{"class":112},[82,39844,34106],{"class":92},[82,39846,34109],{"class":108},[82,39848,113],{"class":112},[82,39850,36600],{"class":92},[82,39852,39853],{"class":84,"line":2321},[82,39854,36605],{"class":2828},[82,39856,39857,39859,39861,39863],{"class":84,"line":2533},[82,39858,36610],{"class":108},[82,39860,113],{"class":112},[82,39862,2283],{"class":88},[82,39864,1363],{"class":92},[82,39866,39867,39869,39871,39873],{"class":84,"line":2538},[82,39868,36621],{"class":108},[82,39870,113],{"class":112},[82,39872,1205],{"class":88},[82,39874,1363],{"class":92},[82,39876,39877,39879,39881,39883],{"class":84,"line":2548},[82,39878,36632],{"class":108},[82,39880,113],{"class":112},[82,39882,2244],{"class":88},[82,39884,119],{"class":92},[82,39886,39887,39889],{"class":84,"line":2579},[82,39888,6685],{"class":112},[82,39890,36645],{"class":92},[82,39892,39893],{"class":84,"line":2585},[82,39894,486],{"emptyLinePlaceholder":485},[82,39896,39897],{"class":84,"line":4350},[82,39898,36654],{"class":2828},[82,39900,39901,39903,39905],{"class":84,"line":4355},[82,39902,2381],{"class":112},[82,39904,36661],{"class":2384},[82,39906,36664],{"class":92},[82,39908,39909],{"class":84,"line":4360},[82,39910,36669],{"class":2828},[82,39912,39913,39915,39917,39919,39921,39923,39925],{"class":84,"line":4365},[82,39914,33813],{"class":92},[82,39916,113],{"class":112},[82,39918,33820],{"class":96},[82,39920,4307],{"class":112},[82,39922,33825],{"class":92},[82,39924,4304],{"class":112},[82,39926,36686],{"class":96},[82,39928,39929,39931,39933],{"class":84,"line":4379},[82,39930,33865],{"class":92},[82,39932,113],{"class":112},[82,39934,34859],{"class":92},[82,39936,39937],{"class":84,"line":4384},[82,39938,486],{"emptyLinePlaceholder":485},[82,39940,39941],{"class":84,"line":5176},[82,39942,36703],{"class":2828},[82,39944,39945,39947,39949],{"class":84,"line":5190},[82,39946,36708],{"class":92},[82,39948,113],{"class":112},[82,39950,34912],{"class":88},[82,39952,39953,39955,39957],{"class":84,"line":5198},[82,39954,36717],{"class":92},[82,39956,113],{"class":112},[82,39958,5683],{"class":88},[82,39960,39961],{"class":84,"line":5203},[82,39962,486],{"emptyLinePlaceholder":485},[82,39964,39965],{"class":84,"line":5209},[82,39966,36730],{"class":2828},[82,39968,39969],{"class":84,"line":5215},[82,39970,36735],{"class":2828},[82,39972,39973],{"class":84,"line":5220},[82,39974,36740],{"class":2828},[82,39976,39977,39979],{"class":84,"line":10539},[82,39978,2417],{"class":112},[82,39980,35453],{"class":92},[82,39982,39983],{"class":84,"line":10563},[82,39984,36751],{"class":2828},[82,39986,39987,39989,39991,39993],{"class":84,"line":10568},[82,39988,5999],{"class":112},[82,39990,36758],{"class":92},[82,39992,603],{"class":112},[82,39994,36763],{"class":92},[82,39996,39997,39999,40001],{"class":84,"line":10574},[82,39998,36768],{"class":92},[82,40000,113],{"class":112},[82,40002,36773],{"class":92},[82,40004,40005,40007,40009],{"class":84,"line":10601},[82,40006,36778],{"class":92},[82,40008,113],{"class":112},[82,40010,36783],{"class":92},[82,40012,40013],{"class":84,"line":10606},[82,40014,36788],{"class":2828},[82,40016,40017],{"class":84,"line":10612},[82,40018,35444],{"class":92},[82,40020,40021],{"class":84,"line":10624},[82,40022,36797],{"class":2828},[82,40024,40025,40027,40029],{"class":84,"line":10636},[82,40026,35229],{"class":92},[82,40028,113],{"class":112},[82,40030,36806],{"class":92},[82,40032,40033],{"class":84,"line":10648},[82,40034,36811],{"class":2828},[82,40036,40037,40039,40041,40043,40045,40047,40049],{"class":84,"line":12307},[82,40038,35246],{"class":92},[82,40040,113],{"class":112},[82,40042,35251],{"class":92},[82,40044,35254],{"class":108},[82,40046,113],{"class":112},[82,40048,2283],{"class":88},[82,40050,119],{"class":92},[82,40052,40053],{"class":84,"line":12332},[82,40054,36832],{"class":2828},[82,40056,40057],{"class":84,"line":12355},[82,40058,36837],{"class":2828},[82,40060,40061],{"class":84,"line":12379},[82,40062,36842],{"class":2828},[82,40064,40065,40067,40069,40071,40073],{"class":84,"line":12384},[82,40066,36847],{"class":92},[82,40068,12068],{"class":112},[82,40070,35356],{"class":92},[82,40072,5548],{"class":112},[82,40074,36856],{"class":92},[82,40076,40077],{"class":84,"line":12389},[82,40078,36861],{"class":2828},[82,40080,40081,40083,40085,40087,40089],{"class":84,"line":12394},[82,40082,36866],{"class":92},[82,40084,12068],{"class":112},[82,40086,36871],{"class":92},[82,40088,2244],{"class":88},[82,40090,119],{"class":92},[82,40092,40093],{"class":84,"line":12403},[82,40094,486],{"emptyLinePlaceholder":485},[82,40096,40097],{"class":84,"line":12408},[82,40098,36884],{"class":2828},[82,40100,40101,40103,40105,40107,40109],{"class":84,"line":12414},[82,40102,36889],{"class":92},[82,40104,113],{"class":112},[82,40106,36894],{"class":92},[82,40108,1147],{"class":112},[82,40110,36899],{"class":92},[82,40112,40113],{"class":84,"line":12435},[82,40114,36904],{"class":2828},[82,40116,40117,40119,40121,40123],{"class":84,"line":12441},[82,40118,1901],{"class":88},[82,40120,93],{"class":92},[82,40122,36913],{"class":96},[82,40124,36916],{"class":92},[82,40126,40127],{"class":84,"line":12455},[82,40128,486],{"emptyLinePlaceholder":485},[82,40130,40131],{"class":84,"line":12461},[82,40132,36925],{"class":2828},[82,40134,40135,40137,40139,40141,40143],{"class":84,"line":12488},[82,40136,1237],{"class":112},[82,40138,33796],{"class":88},[82,40140,5548],{"class":112},[82,40142,33801],{"class":96},[82,40144,669],{"class":92},[82,40146,40147],{"class":84,"line":12497},[82,40148,36942],{"class":2828},[82,40150,40151,40153,40155],{"class":84,"line":12503},[82,40152,33865],{"class":92},[82,40154,113],{"class":112},[82,40156,39655],{"class":92},[82,40158,40159],{"class":84,"line":12511},[82,40160,36955],{"class":2828},[82,40162,40163],{"class":84,"line":12516},[82,40164,36960],{"class":2828},[82,40166,40167,40169,40171],{"class":84,"line":19189},[82,40168,36965],{"class":92},[82,40170,36968],{"class":96},[82,40172,33074],{"class":92},[82,40174,40175],{"class":84,"line":19195},[82,40176,36975],{"class":2828},[82,40178,40179,40181,40183],{"class":84,"line":19218},[82,40180,36589],{"class":92},[82,40182,113],{"class":112},[82,40184,36984],{"class":92},[82,40186,40187],{"class":84,"line":19224},[82,40188,36989],{"class":2828},[82,40190,40191],{"class":84,"line":19247},[82,40192,36994],{"class":92},[82,40194,40195],{"class":84,"line":19261},[82,40196,486],{"emptyLinePlaceholder":485},[82,40198,40199],{"class":84,"line":19281},[82,40200,37003],{"class":2828},[82,40202,40203],{"class":84,"line":19287},[82,40204,37008],{"class":2828},[82,40206,40207,40209,40211,40213,40215,40217,40219],{"class":84,"line":19298},[82,40208,33813],{"class":92},[82,40210,113],{"class":112},[82,40212,33820],{"class":96},[82,40214,4307],{"class":112},[82,40216,33825],{"class":92},[82,40218,4304],{"class":112},[82,40220,36686],{"class":96},[82,40222,40223,40225,40227],{"class":84,"line":19321},[82,40224,33865],{"class":92},[82,40226,113],{"class":112},[82,40228,34859],{"class":92},[82,40230,40231],{"class":84,"line":19343},[82,40232,37037],{"class":2828},[82,40234,40235],{"class":84,"line":19348},[82,40236,37042],{"class":2828},[82,40238,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283],{"class":84,"line":19354},[82,40240,37047],{"class":92},[82,40242,113],{"class":112},[82,40244,3639],{"class":92},[82,40246,37054],{"class":96},[82,40248,3136],{"class":92},[82,40250,37059],{"class":96},[82,40252,3136],{"class":92},[82,40254,37064],{"class":96},[82,40256,3136],{"class":92},[82,40258,37069],{"class":96},[82,40260,3136],{"class":92},[82,40262,37074],{"class":96},[82,40264,3136],{"class":92},[82,40266,37079],{"class":96},[82,40268,3136],{"class":92},[82,40270,37084],{"class":96},[82,40272,3136],{"class":92},[82,40274,37089],{"class":96},[82,40276,3136],{"class":92},[82,40278,37094],{"class":96},[82,40280,3136],{"class":92},[82,40282,37099],{"class":96},[82,40284,875],{"class":92},[82,40286,40287,40289],{"class":84,"line":19368},[82,40288,2417],{"class":112},[82,40290,35453],{"class":92},[82,40292,40293],{"class":84,"line":19381},[82,40294,37112],{"class":2828},[82,40296,40297,40299,40301,40303],{"class":84,"line":19386},[82,40298,5999],{"class":112},[82,40300,37119],{"class":92},[82,40302,603],{"class":112},[82,40304,36763],{"class":92},[82,40306,40307,40309,40311],{"class":84,"line":19400},[82,40308,35179],{"class":92},[82,40310,113],{"class":112},[82,40312,35184],{"class":92},[82,40314,40315,40317,40319],{"class":84,"line":19405},[82,40316,35194],{"class":92},[82,40318,113],{"class":112},[82,40320,35199],{"class":92},[82,40322,40323],{"class":84,"line":19411},[82,40324,486],{"emptyLinePlaceholder":485},[82,40326,40327],{"class":84,"line":19416},[82,40328,37148],{"class":2828},[82,40330,40331],{"class":84,"line":19430},[82,40332,35444],{"class":92},[82,40334,40335],{"class":84,"line":19435},[82,40336,37157],{"class":2828},[82,40338,40339,40341,40343],{"class":84,"line":19440},[82,40340,35229],{"class":92},[82,40342,113],{"class":112},[82,40344,35234],{"class":92},[82,40346,40347],{"class":84,"line":19454},[82,40348,37170],{"class":2828},[82,40350,40351,40353,40355,40357,40359,40361,40363],{"class":84,"line":19466},[82,40352,35246],{"class":92},[82,40354,113],{"class":112},[82,40356,35251],{"class":92},[82,40358,35254],{"class":108},[82,40360,113],{"class":112},[82,40362,2283],{"class":88},[82,40364,119],{"class":92},[82,40366,40367],{"class":84,"line":19471},[82,40368,37191],{"class":2828},[82,40370,40371,40373,40375],{"class":84,"line":19484},[82,40372,37196],{"class":92},[82,40374,113],{"class":112},[82,40376,37201],{"class":92},[82,40378,40379,40381,40383],{"class":84,"line":19489},[82,40380,37206],{"class":92},[82,40382,113],{"class":112},[82,40384,37211],{"class":92},[82,40386,40387,40389,40391,40393,40395,40397,40399,40401],{"class":84,"line":19494},[82,40388,37216],{"class":88},[82,40390,93],{"class":92},[82,40392,37221],{"class":96},[82,40394,37224],{"class":92},[82,40396,37227],{"class":96},[82,40398,3136],{"class":92},[82,40400,37232],{"class":96},[82,40402,37235],{"class":92},[65,40404,40406],{"id":40405},"_22vgg","2.2.VGG",[24582,40408,40410],{"id":40409},"_221原理","2.2.1.原理",[19,40412,40413],{},[4078,40414],{"alt":78,"src":40415},"\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,40417,40418],{},[4078,40419],{"alt":78,"src":40420},"\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,40422,40423],{},[4078,40424],{"alt":78,"src":40425},"\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,40427,40428],{},"参数详细描述：",[19,40430,40431],{},[4078,40432],{"alt":78,"src":40433},"\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,40435,40436],{},[4078,40437],{"alt":78,"src":40438},"\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,40440,40441],{},[4078,40442],{"alt":78,"src":40443},"\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,40445,40446],{},[4078,40447],{"alt":78,"src":40448},"\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,40450,40451],{},[4078,40452],{"alt":78,"src":40453},"\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",[24582,40455,40457],{"id":40456},"_222代码实现","2.2.2.代码实现",[26,40459,40460],{},[29,40461,40462],{},"网络搭建",[73,40464,40466],{"className":75,"code":40465,"language":77,"meta":78,"style":78},"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",[32,40467,40468,40474,40486,40496,40506,40510,40527,40535,40554,40559,40564,40576,40614,40619,40655,40659,40688,40693,40698,40709,40745,40749,40785,40789,40817,40821,40826,40837,40873,40877,40913,40917,40953,40957,40985,40989,40994,41005,41042,41046,41082,41086,41122,41126,41154,41158,41163,41174,41210,41214,41250,41254,41290,41294,41322,41326,41331,41342,41347,41352,41357,41378,41382,41394,41398,41410,41414,41418,41423,41428,41443,41448,41458,41463,41478,41483,41501,41506,41515,41520,41530,41535,41540,41554,41559,41573,41581,41585,41589,41597,41608,41619,41630,41641,41652,41663,41669,41673,41678,41691,41711,41717,41726],{"__ignoreMap":78},[82,40469,40470,40472],{"class":84,"line":85},[82,40471,1123],{"class":112},[82,40473,32973],{"class":92},[82,40475,40476,40478,40481,40483],{"class":84,"line":157},[82,40477,1117],{"class":112},[82,40479,40480],{"class":92}," sympy.core.sympify ",[82,40482,1123],{"class":112},[82,40484,40485],{"class":92}," kernS\n",[82,40487,40488,40490,40492,40494],{"class":84,"line":404},[82,40489,1117],{"class":112},[82,40491,33316],{"class":92},[82,40493,1123],{"class":112},[82,40495,33321],{"class":92},[82,40497,40498,40500,40502,40504],{"class":84,"line":413},[82,40499,1117],{"class":112},[82,40501,33333],{"class":92},[82,40503,1123],{"class":112},[82,40505,33338],{"class":92},[82,40507,40508],{"class":84,"line":508},[82,40509,486],{"emptyLinePlaceholder":485},[82,40511,40512,40514,40517,40519,40521,40523,40525],{"class":84,"line":513},[82,40513,17281],{"class":112},[82,40515,40516],{"class":2384}," VGG16",[82,40518,93],{"class":92},[82,40520,33354],{"class":2384},[82,40522,233],{"class":92},[82,40524,33359],{"class":2384},[82,40526,33362],{"class":92},[82,40528,40529,40531,40533],{"class":84,"line":1388},[82,40530,33377],{"class":112},[82,40532,33380],{"class":88},[82,40534,33383],{"class":92},[82,40536,40537,40539,40541,40544,40546,40548,40550,40552],{"class":84,"line":1394},[82,40538,33393],{"class":88},[82,40540,93],{"class":92},[82,40542,40543],{"class":88},"VGG16",[82,40545,100],{"class":92},[82,40547,33399],{"class":88},[82,40549,33402],{"class":92},[82,40551,33405],{"class":88},[82,40553,4576],{"class":92},[82,40555,40556],{"class":84,"line":1399},[82,40557,40558],{"class":2828},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[82,40560,40561],{"class":84,"line":1430},[82,40562,40563],{"class":2828},"        # 这里用的是灰度图\n",[82,40565,40566,40568,40571,40573],{"class":84,"line":1818},[82,40567,33421],{"class":88},[82,40569,40570],{"class":92},".block1",[82,40572,113],{"class":112},[82,40574,40575],{"class":92},"nn.Sequential(\n",[82,40577,40578,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599,40601,40603,40605,40607,40609,40611],{"class":84,"line":2082},[82,40579,40580],{"class":92},"            nn.Conv2d(",[82,40582,33432],{"class":108},[82,40584,113],{"class":112},[82,40586,2283],{"class":88},[82,40588,3136],{"class":92},[82,40590,33441],{"class":108},[82,40592,113],{"class":112},[82,40594,2964],{"class":88},[82,40596,3136],{"class":92},[82,40598,33450],{"class":108},[82,40600,113],{"class":112},[82,40602,2841],{"class":88},[82,40604,3136],{"class":92},[82,40606,33459],{"class":108},[82,40608,113],{"class":112},[82,40610,2283],{"class":88},[82,40612,40613],{"class":92},"),\n",[82,40615,40616],{"class":84,"line":2233},[82,40617,40618],{"class":92},"            nn.ReLU(),\n",[82,40620,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653],{"class":84,"line":2255},[82,40622,40580],{"class":92},[82,40624,33432],{"class":108},[82,40626,113],{"class":112},[82,40628,2964],{"class":88},[82,40630,3136],{"class":92},[82,40632,33441],{"class":108},[82,40634,113],{"class":112},[82,40636,2964],{"class":88},[82,40638,3136],{"class":92},[82,40640,33450],{"class":108},[82,40642,113],{"class":112},[82,40644,2841],{"class":88},[82,40646,3136],{"class":92},[82,40648,33459],{"class":108},[82,40650,113],{"class":112},[82,40652,2283],{"class":88},[82,40654,40613],{"class":92},[82,40656,40657],{"class":84,"line":2260},[82,40658,40618],{"class":92},[82,40660,40661,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682,40684,40686],{"class":84,"line":2298},[82,40662,40663],{"class":92},"            nn.MaxPool2d(",[82,40665,33450],{"class":108},[82,40667,113],{"class":112},[82,40669,1425],{"class":88},[82,40671,3136],{"class":92},[82,40673,33505],{"class":108},[82,40675,113],{"class":112},[82,40677,1425],{"class":88},[82,40679,3136],{"class":92},[82,40681,33459],{"class":108},[82,40683,113],{"class":112},[82,40685,2244],{"class":88},[82,40687,119],{"class":92},[82,40689,40690],{"class":84,"line":2303},[82,40691,40692],{"class":92},"        )\n",[82,40694,40695],{"class":84,"line":2321},[82,40696,40697],{"class":2828},"        # 第二层\n",[82,40699,40700,40702,40705,40707],{"class":84,"line":2533},[82,40701,33421],{"class":88},[82,40703,40704],{"class":92},".block2",[82,40706,113],{"class":112},[82,40708,40575],{"class":92},[82,40710,40711,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743],{"class":84,"line":2538},[82,40712,40580],{"class":92},[82,40714,33432],{"class":108},[82,40716,113],{"class":112},[82,40718,2964],{"class":88},[82,40720,3136],{"class":92},[82,40722,33441],{"class":108},[82,40724,113],{"class":112},[82,40726,34640],{"class":88},[82,40728,3136],{"class":92},[82,40730,33450],{"class":108},[82,40732,113],{"class":112},[82,40734,2841],{"class":88},[82,40736,3136],{"class":92},[82,40738,33459],{"class":108},[82,40740,113],{"class":112},[82,40742,2283],{"class":88},[82,40744,40613],{"class":92},[82,40746,40747],{"class":84,"line":2548},[82,40748,40618],{"class":92},[82,40750,40751,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771,40773,40775,40777,40779,40781,40783],{"class":84,"line":2579},[82,40752,40580],{"class":92},[82,40754,33432],{"class":108},[82,40756,113],{"class":112},[82,40758,34640],{"class":88},[82,40760,3136],{"class":92},[82,40762,33441],{"class":108},[82,40764,113],{"class":112},[82,40766,34640],{"class":88},[82,40768,3136],{"class":92},[82,40770,33450],{"class":108},[82,40772,113],{"class":112},[82,40774,2841],{"class":88},[82,40776,3136],{"class":92},[82,40778,33459],{"class":108},[82,40780,113],{"class":112},[82,40782,2283],{"class":88},[82,40784,40613],{"class":92},[82,40786,40787],{"class":84,"line":2585},[82,40788,40618],{"class":92},[82,40790,40791,40793,40795,40797,40799,40801,40803,40805,40807,40809,40811,40813,40815],{"class":84,"line":4350},[82,40792,40663],{"class":92},[82,40794,33450],{"class":108},[82,40796,113],{"class":112},[82,40798,1425],{"class":88},[82,40800,3136],{"class":92},[82,40802,33505],{"class":108},[82,40804,113],{"class":112},[82,40806,1425],{"class":88},[82,40808,3136],{"class":92},[82,40810,33459],{"class":108},[82,40812,113],{"class":112},[82,40814,2244],{"class":88},[82,40816,119],{"class":92},[82,40818,40819],{"class":84,"line":4355},[82,40820,40692],{"class":92},[82,40822,40823],{"class":84,"line":4360},[82,40824,40825],{"class":2828},"        # 第三层\n",[82,40827,40828,40830,40833,40835],{"class":84,"line":4365},[82,40829,33421],{"class":88},[82,40831,40832],{"class":92},".block3",[82,40834,113],{"class":112},[82,40836,40575],{"class":92},[82,40838,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871],{"class":84,"line":4379},[82,40840,40580],{"class":92},[82,40842,33432],{"class":108},[82,40844,113],{"class":112},[82,40846,34640],{"class":88},[82,40848,3136],{"class":92},[82,40850,33441],{"class":108},[82,40852,113],{"class":112},[82,40854,37436],{"class":88},[82,40856,3136],{"class":92},[82,40858,33450],{"class":108},[82,40860,113],{"class":112},[82,40862,2841],{"class":88},[82,40864,3136],{"class":92},[82,40866,33459],{"class":108},[82,40868,113],{"class":112},[82,40870,2283],{"class":88},[82,40872,40613],{"class":92},[82,40874,40875],{"class":84,"line":4384},[82,40876,40618],{"class":92},[82,40878,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911],{"class":84,"line":5176},[82,40880,40580],{"class":92},[82,40882,33432],{"class":108},[82,40884,113],{"class":112},[82,40886,37436],{"class":88},[82,40888,3136],{"class":92},[82,40890,33441],{"class":108},[82,40892,113],{"class":112},[82,40894,37436],{"class":88},[82,40896,3136],{"class":92},[82,40898,33450],{"class":108},[82,40900,113],{"class":112},[82,40902,2841],{"class":88},[82,40904,3136],{"class":92},[82,40906,33459],{"class":108},[82,40908,113],{"class":112},[82,40910,2283],{"class":88},[82,40912,40613],{"class":92},[82,40914,40915],{"class":84,"line":5190},[82,40916,40618],{"class":92},[82,40918,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951],{"class":84,"line":5198},[82,40920,40580],{"class":92},[82,40922,33432],{"class":108},[82,40924,113],{"class":112},[82,40926,37436],{"class":88},[82,40928,3136],{"class":92},[82,40930,33441],{"class":108},[82,40932,113],{"class":112},[82,40934,37436],{"class":88},[82,40936,3136],{"class":92},[82,40938,33450],{"class":108},[82,40940,113],{"class":112},[82,40942,2841],{"class":88},[82,40944,3136],{"class":92},[82,40946,33459],{"class":108},[82,40948,113],{"class":112},[82,40950,2283],{"class":88},[82,40952,40613],{"class":92},[82,40954,40955],{"class":84,"line":5203},[82,40956,40618],{"class":92},[82,40958,40959,40961,40963,40965,40967,40969,40971,40973,40975,40977,40979,40981,40983],{"class":84,"line":5209},[82,40960,40663],{"class":92},[82,40962,33450],{"class":108},[82,40964,113],{"class":112},[82,40966,1425],{"class":88},[82,40968,3136],{"class":92},[82,40970,33505],{"class":108},[82,40972,113],{"class":112},[82,40974,1425],{"class":88},[82,40976,3136],{"class":92},[82,40978,33459],{"class":108},[82,40980,113],{"class":112},[82,40982,2244],{"class":88},[82,40984,119],{"class":92},[82,40986,40987],{"class":84,"line":5215},[82,40988,40692],{"class":92},[82,40990,40991],{"class":84,"line":5220},[82,40992,40993],{"class":2828},"        # 第四层\n",[82,40995,40996,40998,41001,41003],{"class":84,"line":10539},[82,40997,33421],{"class":88},[82,40999,41000],{"class":92},".block4",[82,41002,113],{"class":112},[82,41004,40575],{"class":92},[82,41006,41007,41009,41011,41013,41015,41017,41019,41021,41024,41026,41028,41030,41032,41034,41036,41038,41040],{"class":84,"line":10563},[82,41008,40580],{"class":92},[82,41010,33432],{"class":108},[82,41012,113],{"class":112},[82,41014,37436],{"class":88},[82,41016,3136],{"class":92},[82,41018,33441],{"class":108},[82,41020,113],{"class":112},[82,41022,41023],{"class":88},"512",[82,41025,3136],{"class":92},[82,41027,33450],{"class":108},[82,41029,113],{"class":112},[82,41031,2841],{"class":88},[82,41033,3136],{"class":92},[82,41035,33459],{"class":108},[82,41037,113],{"class":112},[82,41039,2283],{"class":88},[82,41041,40613],{"class":92},[82,41043,41044],{"class":84,"line":10568},[82,41045,40618],{"class":92},[82,41047,41048,41050,41052,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072,41074,41076,41078,41080],{"class":84,"line":10574},[82,41049,40580],{"class":92},[82,41051,33432],{"class":108},[82,41053,113],{"class":112},[82,41055,41023],{"class":88},[82,41057,3136],{"class":92},[82,41059,33441],{"class":108},[82,41061,113],{"class":112},[82,41063,41023],{"class":88},[82,41065,3136],{"class":92},[82,41067,33450],{"class":108},[82,41069,113],{"class":112},[82,41071,2841],{"class":88},[82,41073,3136],{"class":92},[82,41075,33459],{"class":108},[82,41077,113],{"class":112},[82,41079,2283],{"class":88},[82,41081,40613],{"class":92},[82,41083,41084],{"class":84,"line":10601},[82,41085,40618],{"class":92},[82,41087,41088,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120],{"class":84,"line":10606},[82,41089,40580],{"class":92},[82,41091,33432],{"class":108},[82,41093,113],{"class":112},[82,41095,41023],{"class":88},[82,41097,3136],{"class":92},[82,41099,33441],{"class":108},[82,41101,113],{"class":112},[82,41103,41023],{"class":88},[82,41105,3136],{"class":92},[82,41107,33450],{"class":108},[82,41109,113],{"class":112},[82,41111,2841],{"class":88},[82,41113,3136],{"class":92},[82,41115,33459],{"class":108},[82,41117,113],{"class":112},[82,41119,2283],{"class":88},[82,41121,40613],{"class":92},[82,41123,41124],{"class":84,"line":10612},[82,41125,40618],{"class":92},[82,41127,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146,41148,41150,41152],{"class":84,"line":10624},[82,41129,40663],{"class":92},[82,41131,33450],{"class":108},[82,41133,113],{"class":112},[82,41135,1425],{"class":88},[82,41137,3136],{"class":92},[82,41139,33505],{"class":108},[82,41141,113],{"class":112},[82,41143,1425],{"class":88},[82,41145,3136],{"class":92},[82,41147,33459],{"class":108},[82,41149,113],{"class":112},[82,41151,2244],{"class":88},[82,41153,119],{"class":92},[82,41155,41156],{"class":84,"line":10636},[82,41157,40692],{"class":92},[82,41159,41160],{"class":84,"line":10648},[82,41161,41162],{"class":2828},"        # 第五层\n",[82,41164,41165,41167,41170,41172],{"class":84,"line":12307},[82,41166,33421],{"class":88},[82,41168,41169],{"class":92},".block5",[82,41171,113],{"class":112},[82,41173,40575],{"class":92},[82,41175,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208],{"class":84,"line":12332},[82,41177,40580],{"class":92},[82,41179,33432],{"class":108},[82,41181,113],{"class":112},[82,41183,41023],{"class":88},[82,41185,3136],{"class":92},[82,41187,33441],{"class":108},[82,41189,113],{"class":112},[82,41191,41023],{"class":88},[82,41193,3136],{"class":92},[82,41195,33450],{"class":108},[82,41197,113],{"class":112},[82,41199,2841],{"class":88},[82,41201,3136],{"class":92},[82,41203,33459],{"class":108},[82,41205,113],{"class":112},[82,41207,2283],{"class":88},[82,41209,40613],{"class":92},[82,41211,41212],{"class":84,"line":12355},[82,41213,40618],{"class":92},[82,41215,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248],{"class":84,"line":12379},[82,41217,40580],{"class":92},[82,41219,33432],{"class":108},[82,41221,113],{"class":112},[82,41223,41023],{"class":88},[82,41225,3136],{"class":92},[82,41227,33441],{"class":108},[82,41229,113],{"class":112},[82,41231,41023],{"class":88},[82,41233,3136],{"class":92},[82,41235,33450],{"class":108},[82,41237,113],{"class":112},[82,41239,2841],{"class":88},[82,41241,3136],{"class":92},[82,41243,33459],{"class":108},[82,41245,113],{"class":112},[82,41247,2283],{"class":88},[82,41249,40613],{"class":92},[82,41251,41252],{"class":84,"line":12384},[82,41253,40618],{"class":92},[82,41255,41256,41258,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288],{"class":84,"line":12389},[82,41257,40580],{"class":92},[82,41259,33432],{"class":108},[82,41261,113],{"class":112},[82,41263,41023],{"class":88},[82,41265,3136],{"class":92},[82,41267,33441],{"class":108},[82,41269,113],{"class":112},[82,41271,41023],{"class":88},[82,41273,3136],{"class":92},[82,41275,33450],{"class":108},[82,41277,113],{"class":112},[82,41279,2841],{"class":88},[82,41281,3136],{"class":92},[82,41283,33459],{"class":108},[82,41285,113],{"class":112},[82,41287,2283],{"class":88},[82,41289,40613],{"class":92},[82,41291,41292],{"class":84,"line":12394},[82,41293,40618],{"class":92},[82,41295,41296,41298,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320],{"class":84,"line":12403},[82,41297,40663],{"class":92},[82,41299,33450],{"class":108},[82,41301,113],{"class":112},[82,41303,1425],{"class":88},[82,41305,3136],{"class":92},[82,41307,33505],{"class":108},[82,41309,113],{"class":112},[82,41311,1425],{"class":88},[82,41313,3136],{"class":92},[82,41315,33459],{"class":108},[82,41317,113],{"class":112},[82,41319,2244],{"class":88},[82,41321,119],{"class":92},[82,41323,41324],{"class":84,"line":12408},[82,41325,40692],{"class":92},[82,41327,41328],{"class":84,"line":12414},[82,41329,41330],{"class":2828},"        # 全连接层\n",[82,41332,41333,41335,41338,41340],{"class":84,"line":12435},[82,41334,33421],{"class":88},[82,41336,41337],{"class":92},".block6",[82,41339,113],{"class":112},[82,41341,40575],{"class":92},[82,41343,41344],{"class":84,"line":12441},[82,41345,41346],{"class":2828},"            # 平展操作\n",[82,41348,41349],{"class":84,"line":12455},[82,41350,41351],{"class":2828},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[82,41353,41354],{"class":84,"line":12461},[82,41355,41356],{"class":92},"            nn.Flatten(),\n",[82,41358,41359,41362,41364,41366,41368,41370,41372,41374,41376],{"class":84,"line":12488},[82,41360,41361],{"class":92},"            nn.Linear(",[82,41363,3127],{"class":88},[82,41365,3212],{"class":112},[82,41367,3127],{"class":88},[82,41369,3212],{"class":112},[82,41371,41023],{"class":88},[82,41373,3136],{"class":92},[82,41375,37436],{"class":88},[82,41377,40613],{"class":92},[82,41379,41380],{"class":84,"line":12497},[82,41381,40618],{"class":92},[82,41383,41384,41386,41388,41390,41392],{"class":84,"line":12503},[82,41385,41361],{"class":92},[82,41387,37436],{"class":88},[82,41389,3136],{"class":92},[82,41391,34640],{"class":88},[82,41393,40613],{"class":92},[82,41395,41396],{"class":84,"line":12511},[82,41397,40618],{"class":92},[82,41399,41400,41402,41404,41406,41408],{"class":84,"line":12516},[82,41401,41361],{"class":92},[82,41403,34640],{"class":88},[82,41405,3136],{"class":92},[82,41407,440],{"class":88},[82,41409,119],{"class":92},[82,41411,41412],{"class":84,"line":19189},[82,41413,40692],{"class":92},[82,41415,41416],{"class":84,"line":19195},[82,41417,486],{"emptyLinePlaceholder":485},[82,41419,41420],{"class":84,"line":19218},[82,41421,41422],{"class":2828},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[82,41424,41425],{"class":84,"line":19224},[82,41426,41427],{"class":2828},"        # 循环遍历模型\n",[82,41429,41430,41432,41435,41437,41440],{"class":84,"line":19247},[82,41431,5999],{"class":112},[82,41433,41434],{"class":92}," m ",[82,41436,603],{"class":112},[82,41438,41439],{"class":88}," self",[82,41441,41442],{"class":92},".modules():\n",[82,41444,41445],{"class":84,"line":19261},[82,41446,41447],{"class":2828},"            # print(m)\n",[82,41449,41450,41452,41455],{"class":84,"line":19281},[82,41451,7237],{"class":112},[82,41453,41454],{"class":88}," isinstance",[82,41456,41457],{"class":92},"(m,nn.Conv2d):\n",[82,41459,41460],{"class":84,"line":19287},[82,41461,41462],{"class":2828},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[82,41464,41465,41468,41471,41473,41476],{"class":84,"line":19298},[82,41466,41467],{"class":92},"                nn.init.kaiming_normal_(m.weight,",[82,41469,41470],{"class":108},"nonlinearity",[82,41472,113],{"class":112},[82,41474,41475],{"class":96},"'relu'",[82,41477,119],{"class":92},[82,41479,41480],{"class":84,"line":19321},[82,41481,41482],{"class":2828},"                # 判断b参数是否存在\n",[82,41484,41485,41488,41491,41494,41496,41499],{"class":84,"line":19343},[82,41486,41487],{"class":112},"                if",[82,41489,41490],{"class":92}," m.bias ",[82,41492,41493],{"class":112},"is",[82,41495,2222],{"class":112},[82,41497,41498],{"class":88}," None",[82,41500,669],{"class":92},[82,41502,41503],{"class":84,"line":19348},[82,41504,41505],{"class":2828},"                    # 如果参数不存在的化初始化b=0\n",[82,41507,41508,41511,41513],{"class":84,"line":19354},[82,41509,41510],{"class":92},"                    nn.init.constant_(m.bias,",[82,41512,2244],{"class":88},[82,41514,119],{"class":92},[82,41516,41517],{"class":84,"line":19368},[82,41518,41519],{"class":2828},"            # 全连接层初始化\n",[82,41521,41522,41525,41527],{"class":84,"line":19381},[82,41523,41524],{"class":112},"            elif",[82,41526,41454],{"class":88},[82,41528,41529],{"class":92},"(m,nn.Linear):\n",[82,41531,41532],{"class":84,"line":19386},[82,41533,41534],{"class":2828},"                # 这个初始化方法是利用的是正太分布的方式\n",[82,41536,41537],{"class":84,"line":19400},[82,41538,41539],{"class":2828},"                # 均值为0，方差为0.01\n",[82,41541,41542,41545,41547,41549,41552],{"class":84,"line":19405},[82,41543,41544],{"class":92},"                nn.init.normal_(m.weight,",[82,41546,2244],{"class":88},[82,41548,3136],{"class":92},[82,41550,41551],{"class":88},"0.01",[82,41553,119],{"class":92},[82,41555,41556],{"class":84,"line":19411},[82,41557,41558],{"class":2828},"                # 初始化b参数\n",[82,41560,41561,41563,41565,41567,41569,41571],{"class":84,"line":19416},[82,41562,41487],{"class":112},[82,41564,41490],{"class":92},[82,41566,41493],{"class":112},[82,41568,2222],{"class":112},[82,41570,41498],{"class":88},[82,41572,669],{"class":92},[82,41574,41575,41577,41579],{"class":84,"line":19430},[82,41576,41510],{"class":92},[82,41578,2244],{"class":88},[82,41580,119],{"class":92},[82,41582,41583],{"class":84,"line":19435},[82,41584,486],{"emptyLinePlaceholder":485},[82,41586,41587],{"class":84,"line":19440},[82,41588,37731],{"class":2828},[82,41590,41591,41593,41595],{"class":84,"line":19454},[82,41592,33377],{"class":112},[82,41594,33669],{"class":2384},[82,41596,33672],{"class":92},[82,41598,41599,41601,41603,41605],{"class":84,"line":19466},[82,41600,33677],{"class":92},[82,41602,113],{"class":112},[82,41604,33399],{"class":88},[82,41606,41607],{"class":92},".block1(x)\n",[82,41609,41610,41612,41614,41616],{"class":84,"line":19471},[82,41611,33677],{"class":92},[82,41613,113],{"class":112},[82,41615,33399],{"class":88},[82,41617,41618],{"class":92},".block2(x)\n",[82,41620,41621,41623,41625,41627],{"class":84,"line":19484},[82,41622,33677],{"class":92},[82,41624,113],{"class":112},[82,41626,33399],{"class":88},[82,41628,41629],{"class":92},".block3(x)\n",[82,41631,41632,41634,41636,41638],{"class":84,"line":19489},[82,41633,33677],{"class":92},[82,41635,113],{"class":112},[82,41637,33399],{"class":88},[82,41639,41640],{"class":92},".block4(x)\n",[82,41642,41643,41645,41647,41649],{"class":84,"line":19494},[82,41644,33677],{"class":92},[82,41646,113],{"class":112},[82,41648,33399],{"class":88},[82,41650,41651],{"class":92},".block5(x)\n",[82,41653,41654,41656,41658,41660],{"class":84,"line":19499},[82,41655,33677],{"class":92},[82,41657,113],{"class":112},[82,41659,33399],{"class":88},[82,41661,41662],{"class":92},".block6(x)\n",[82,41664,41665,41667],{"class":84,"line":19512},[82,41666,2405],{"class":112},[82,41668,33785],{"class":92},[82,41670,41671],{"class":84,"line":19517},[82,41672,486],{"emptyLinePlaceholder":485},[82,41674,41675],{"class":84,"line":35202},[82,41676,41677],{"class":2828},"# 验证模型\n",[82,41679,41680,41682,41684,41686,41689],{"class":84,"line":35208},[82,41681,1237],{"class":112},[82,41683,33796],{"class":88},[82,41685,5548],{"class":112},[82,41687,41688],{"class":96},"'__main__'",[82,41690,669],{"class":92},[82,41692,41693,41695,41697,41699,41701,41703,41705,41707,41709],{"class":84,"line":35214},[82,41694,33813],{"class":92},[82,41696,113],{"class":112},[82,41698,33028],{"class":92},[82,41700,33820],{"class":96},[82,41702,4307],{"class":112},[82,41704,33825],{"class":92},[82,41706,4304],{"class":112},[82,41708,33053],{"class":96},[82,41710,119],{"class":92},[82,41712,41713,41715],{"class":84,"line":35220},[82,41714,611],{"class":88},[82,41716,33062],{"class":92},[82,41718,41719,41721,41723],{"class":84,"line":35226},[82,41720,33865],{"class":92},[82,41722,113],{"class":112},[82,41724,41725],{"class":92},"VGG16().to(device)\n",[82,41727,41728,41730,41732,41734,41736,41738,41740,41742],{"class":84,"line":35237},[82,41729,611],{"class":88},[82,41731,33877],{"class":92},[82,41733,2283],{"class":88},[82,41735,3136],{"class":92},[82,41737,34073],{"class":88},[82,41739,3136],{"class":92},[82,41741,34073],{"class":88},[82,41743,33890],{"class":92},[26,41745,41746],{"start":157},[29,41747,41748],{},"训练代码",[19,41750,41751],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41753,41754],{},"解决方式:",[19,41756,41757],{},"①权重初始化",[73,41759,41761],{"className":75,"code":41760,"language":77,"meta":78,"style":78},"# 权重初始化,保证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",[32,41762,41763,41768,41773,41785,41790,41798,41803,41816,41821,41835,41840,41849,41854,41863,41868,41873,41886,41891,41905],{"__ignoreMap":78},[82,41764,41765],{"class":84,"line":85},[82,41766,41767],{"class":2828},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[82,41769,41770],{"class":84,"line":157},[82,41771,41772],{"class":2828},"# 循环遍历模型\n",[82,41774,41775,41777,41779,41781,41783],{"class":84,"line":404},[82,41776,597],{"class":112},[82,41778,41434],{"class":92},[82,41780,603],{"class":112},[82,41782,41439],{"class":88},[82,41784,41442],{"class":92},[82,41786,41787],{"class":84,"line":413},[82,41788,41789],{"class":2828},"    # print(m)\n",[82,41791,41792,41794,41796],{"class":84,"line":508},[82,41793,2219],{"class":112},[82,41795,41454],{"class":88},[82,41797,41457],{"class":92},[82,41799,41800],{"class":84,"line":513},[82,41801,41802],{"class":2828},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[82,41804,41805,41808,41810,41812,41814],{"class":84,"line":1388},[82,41806,41807],{"class":92},"        nn.init.kaiming_normal_(m.weight,",[82,41809,41470],{"class":108},[82,41811,113],{"class":112},[82,41813,41475],{"class":96},[82,41815,119],{"class":92},[82,41817,41818],{"class":84,"line":1394},[82,41819,41820],{"class":2828},"        # 判断b参数是否存在\n",[82,41822,41823,41825,41827,41829,41831,41833],{"class":84,"line":1399},[82,41824,5096],{"class":112},[82,41826,41490],{"class":92},[82,41828,41493],{"class":112},[82,41830,2222],{"class":112},[82,41832,41498],{"class":88},[82,41834,669],{"class":92},[82,41836,41837],{"class":84,"line":1430},[82,41838,41839],{"class":2828},"            # 如果参数不存在的化初始化b=0\n",[82,41841,41842,41845,41847],{"class":84,"line":1818},[82,41843,41844],{"class":92},"            nn.init.constant_(m.bias,",[82,41846,2244],{"class":88},[82,41848,119],{"class":92},[82,41850,41851],{"class":84,"line":2082},[82,41852,41853],{"class":2828},"    # 全连接层初始化\n",[82,41855,41856,41859,41861],{"class":84,"line":2233},[82,41857,41858],{"class":112},"    elif",[82,41860,41454],{"class":88},[82,41862,41529],{"class":92},[82,41864,41865],{"class":84,"line":2255},[82,41866,41867],{"class":2828},"        # 这个初始化方法是利用的是正太分布的方式\n",[82,41869,41870],{"class":84,"line":2260},[82,41871,41872],{"class":2828},"        # 均值为0，方差为0.01\n",[82,41874,41875,41878,41880,41882,41884],{"class":84,"line":2298},[82,41876,41877],{"class":92},"        nn.init.normal_(m.weight,",[82,41879,2244],{"class":88},[82,41881,3136],{"class":92},[82,41883,41551],{"class":88},[82,41885,119],{"class":92},[82,41887,41888],{"class":84,"line":2303},[82,41889,41890],{"class":2828},"        # 初始化b参数\n",[82,41892,41893,41895,41897,41899,41901,41903],{"class":84,"line":2321},[82,41894,5096],{"class":112},[82,41896,41490],{"class":92},[82,41898,41493],{"class":112},[82,41900,2222],{"class":112},[82,41902,41498],{"class":88},[82,41904,669],{"class":92},[82,41906,41907,41909,41911],{"class":84,"line":2533},[82,41908,41844],{"class":92},[82,41910,2244],{"class":88},[82,41912,119],{"class":92},[19,41914,41915],{},"②尽可能地增加批次",[19,41917,41918],{},"训练完整代码：",[73,41920,41921],{"className":75,"code":40465,"language":77,"meta":78,"style":78},[32,41922,41923,41929,41939,41949,41959,41963,41979,41987,42005,42009,42013,42023,42059,42063,42099,42103,42131,42135,42139,42149,42185,42189,42225,42229,42257,42261,42265,42275,42311,42315,42351,42355,42391,42395,42423,42427,42431,42441,42477,42481,42517,42521,42557,42561,42589,42593,42597,42607,42643,42647,42683,42687,42723,42727,42755,42759,42763,42773,42777,42781,42785,42805,42809,42821,42825,42837,42841,42845,42849,42853,42865,42869,42877,42881,42893,42897,42911,42915,42923,42927,42935,42939,42943,42955,42959,42973,42981,42985,42989,42997,43007,43017,43027,43037,43047,43057,43063,43067,43071,43083,43103,43109,43117],{"__ignoreMap":78},[82,41924,41925,41927],{"class":84,"line":85},[82,41926,1123],{"class":112},[82,41928,32973],{"class":92},[82,41930,41931,41933,41935,41937],{"class":84,"line":157},[82,41932,1117],{"class":112},[82,41934,40480],{"class":92},[82,41936,1123],{"class":112},[82,41938,40485],{"class":92},[82,41940,41941,41943,41945,41947],{"class":84,"line":404},[82,41942,1117],{"class":112},[82,41944,33316],{"class":92},[82,41946,1123],{"class":112},[82,41948,33321],{"class":92},[82,41950,41951,41953,41955,41957],{"class":84,"line":413},[82,41952,1117],{"class":112},[82,41954,33333],{"class":92},[82,41956,1123],{"class":112},[82,41958,33338],{"class":92},[82,41960,41961],{"class":84,"line":508},[82,41962,486],{"emptyLinePlaceholder":485},[82,41964,41965,41967,41969,41971,41973,41975,41977],{"class":84,"line":513},[82,41966,17281],{"class":112},[82,41968,40516],{"class":2384},[82,41970,93],{"class":92},[82,41972,33354],{"class":2384},[82,41974,233],{"class":92},[82,41976,33359],{"class":2384},[82,41978,33362],{"class":92},[82,41980,41981,41983,41985],{"class":84,"line":1388},[82,41982,33377],{"class":112},[82,41984,33380],{"class":88},[82,41986,33383],{"class":92},[82,41988,41989,41991,41993,41995,41997,41999,42001,42003],{"class":84,"line":1394},[82,41990,33393],{"class":88},[82,41992,93],{"class":92},[82,41994,40543],{"class":88},[82,41996,100],{"class":92},[82,41998,33399],{"class":88},[82,42000,33402],{"class":92},[82,42002,33405],{"class":88},[82,42004,4576],{"class":92},[82,42006,42007],{"class":84,"line":1399},[82,42008,40558],{"class":2828},[82,42010,42011],{"class":84,"line":1430},[82,42012,40563],{"class":2828},[82,42014,42015,42017,42019,42021],{"class":84,"line":1818},[82,42016,33421],{"class":88},[82,42018,40570],{"class":92},[82,42020,113],{"class":112},[82,42022,40575],{"class":92},[82,42024,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057],{"class":84,"line":2082},[82,42026,40580],{"class":92},[82,42028,33432],{"class":108},[82,42030,113],{"class":112},[82,42032,2283],{"class":88},[82,42034,3136],{"class":92},[82,42036,33441],{"class":108},[82,42038,113],{"class":112},[82,42040,2964],{"class":88},[82,42042,3136],{"class":92},[82,42044,33450],{"class":108},[82,42046,113],{"class":112},[82,42048,2841],{"class":88},[82,42050,3136],{"class":92},[82,42052,33459],{"class":108},[82,42054,113],{"class":112},[82,42056,2283],{"class":88},[82,42058,40613],{"class":92},[82,42060,42061],{"class":84,"line":2233},[82,42062,40618],{"class":92},[82,42064,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097],{"class":84,"line":2255},[82,42066,40580],{"class":92},[82,42068,33432],{"class":108},[82,42070,113],{"class":112},[82,42072,2964],{"class":88},[82,42074,3136],{"class":92},[82,42076,33441],{"class":108},[82,42078,113],{"class":112},[82,42080,2964],{"class":88},[82,42082,3136],{"class":92},[82,42084,33450],{"class":108},[82,42086,113],{"class":112},[82,42088,2841],{"class":88},[82,42090,3136],{"class":92},[82,42092,33459],{"class":108},[82,42094,113],{"class":112},[82,42096,2283],{"class":88},[82,42098,40613],{"class":92},[82,42100,42101],{"class":84,"line":2260},[82,42102,40618],{"class":92},[82,42104,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129],{"class":84,"line":2298},[82,42106,40663],{"class":92},[82,42108,33450],{"class":108},[82,42110,113],{"class":112},[82,42112,1425],{"class":88},[82,42114,3136],{"class":92},[82,42116,33505],{"class":108},[82,42118,113],{"class":112},[82,42120,1425],{"class":88},[82,42122,3136],{"class":92},[82,42124,33459],{"class":108},[82,42126,113],{"class":112},[82,42128,2244],{"class":88},[82,42130,119],{"class":92},[82,42132,42133],{"class":84,"line":2303},[82,42134,40692],{"class":92},[82,42136,42137],{"class":84,"line":2321},[82,42138,40697],{"class":2828},[82,42140,42141,42143,42145,42147],{"class":84,"line":2533},[82,42142,33421],{"class":88},[82,42144,40704],{"class":92},[82,42146,113],{"class":112},[82,42148,40575],{"class":92},[82,42150,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183],{"class":84,"line":2538},[82,42152,40580],{"class":92},[82,42154,33432],{"class":108},[82,42156,113],{"class":112},[82,42158,2964],{"class":88},[82,42160,3136],{"class":92},[82,42162,33441],{"class":108},[82,42164,113],{"class":112},[82,42166,34640],{"class":88},[82,42168,3136],{"class":92},[82,42170,33450],{"class":108},[82,42172,113],{"class":112},[82,42174,2841],{"class":88},[82,42176,3136],{"class":92},[82,42178,33459],{"class":108},[82,42180,113],{"class":112},[82,42182,2283],{"class":88},[82,42184,40613],{"class":92},[82,42186,42187],{"class":84,"line":2548},[82,42188,40618],{"class":92},[82,42190,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221,42223],{"class":84,"line":2579},[82,42192,40580],{"class":92},[82,42194,33432],{"class":108},[82,42196,113],{"class":112},[82,42198,34640],{"class":88},[82,42200,3136],{"class":92},[82,42202,33441],{"class":108},[82,42204,113],{"class":112},[82,42206,34640],{"class":88},[82,42208,3136],{"class":92},[82,42210,33450],{"class":108},[82,42212,113],{"class":112},[82,42214,2841],{"class":88},[82,42216,3136],{"class":92},[82,42218,33459],{"class":108},[82,42220,113],{"class":112},[82,42222,2283],{"class":88},[82,42224,40613],{"class":92},[82,42226,42227],{"class":84,"line":2585},[82,42228,40618],{"class":92},[82,42230,42231,42233,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253,42255],{"class":84,"line":4350},[82,42232,40663],{"class":92},[82,42234,33450],{"class":108},[82,42236,113],{"class":112},[82,42238,1425],{"class":88},[82,42240,3136],{"class":92},[82,42242,33505],{"class":108},[82,42244,113],{"class":112},[82,42246,1425],{"class":88},[82,42248,3136],{"class":92},[82,42250,33459],{"class":108},[82,42252,113],{"class":112},[82,42254,2244],{"class":88},[82,42256,119],{"class":92},[82,42258,42259],{"class":84,"line":4355},[82,42260,40692],{"class":92},[82,42262,42263],{"class":84,"line":4360},[82,42264,40825],{"class":2828},[82,42266,42267,42269,42271,42273],{"class":84,"line":4365},[82,42268,33421],{"class":88},[82,42270,40832],{"class":92},[82,42272,113],{"class":112},[82,42274,40575],{"class":92},[82,42276,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307,42309],{"class":84,"line":4379},[82,42278,40580],{"class":92},[82,42280,33432],{"class":108},[82,42282,113],{"class":112},[82,42284,34640],{"class":88},[82,42286,3136],{"class":92},[82,42288,33441],{"class":108},[82,42290,113],{"class":112},[82,42292,37436],{"class":88},[82,42294,3136],{"class":92},[82,42296,33450],{"class":108},[82,42298,113],{"class":112},[82,42300,2841],{"class":88},[82,42302,3136],{"class":92},[82,42304,33459],{"class":108},[82,42306,113],{"class":112},[82,42308,2283],{"class":88},[82,42310,40613],{"class":92},[82,42312,42313],{"class":84,"line":4384},[82,42314,40618],{"class":92},[82,42316,42317,42319,42321,42323,42325,42327,42329,42331,42333,42335,42337,42339,42341,42343,42345,42347,42349],{"class":84,"line":5176},[82,42318,40580],{"class":92},[82,42320,33432],{"class":108},[82,42322,113],{"class":112},[82,42324,37436],{"class":88},[82,42326,3136],{"class":92},[82,42328,33441],{"class":108},[82,42330,113],{"class":112},[82,42332,37436],{"class":88},[82,42334,3136],{"class":92},[82,42336,33450],{"class":108},[82,42338,113],{"class":112},[82,42340,2841],{"class":88},[82,42342,3136],{"class":92},[82,42344,33459],{"class":108},[82,42346,113],{"class":112},[82,42348,2283],{"class":88},[82,42350,40613],{"class":92},[82,42352,42353],{"class":84,"line":5190},[82,42354,40618],{"class":92},[82,42356,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389],{"class":84,"line":5198},[82,42358,40580],{"class":92},[82,42360,33432],{"class":108},[82,42362,113],{"class":112},[82,42364,37436],{"class":88},[82,42366,3136],{"class":92},[82,42368,33441],{"class":108},[82,42370,113],{"class":112},[82,42372,37436],{"class":88},[82,42374,3136],{"class":92},[82,42376,33450],{"class":108},[82,42378,113],{"class":112},[82,42380,2841],{"class":88},[82,42382,3136],{"class":92},[82,42384,33459],{"class":108},[82,42386,113],{"class":112},[82,42388,2283],{"class":88},[82,42390,40613],{"class":92},[82,42392,42393],{"class":84,"line":5203},[82,42394,40618],{"class":92},[82,42396,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421],{"class":84,"line":5209},[82,42398,40663],{"class":92},[82,42400,33450],{"class":108},[82,42402,113],{"class":112},[82,42404,1425],{"class":88},[82,42406,3136],{"class":92},[82,42408,33505],{"class":108},[82,42410,113],{"class":112},[82,42412,1425],{"class":88},[82,42414,3136],{"class":92},[82,42416,33459],{"class":108},[82,42418,113],{"class":112},[82,42420,2244],{"class":88},[82,42422,119],{"class":92},[82,42424,42425],{"class":84,"line":5215},[82,42426,40692],{"class":92},[82,42428,42429],{"class":84,"line":5220},[82,42430,40993],{"class":2828},[82,42432,42433,42435,42437,42439],{"class":84,"line":10539},[82,42434,33421],{"class":88},[82,42436,41000],{"class":92},[82,42438,113],{"class":112},[82,42440,40575],{"class":92},[82,42442,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475],{"class":84,"line":10563},[82,42444,40580],{"class":92},[82,42446,33432],{"class":108},[82,42448,113],{"class":112},[82,42450,37436],{"class":88},[82,42452,3136],{"class":92},[82,42454,33441],{"class":108},[82,42456,113],{"class":112},[82,42458,41023],{"class":88},[82,42460,3136],{"class":92},[82,42462,33450],{"class":108},[82,42464,113],{"class":112},[82,42466,2841],{"class":88},[82,42468,3136],{"class":92},[82,42470,33459],{"class":108},[82,42472,113],{"class":112},[82,42474,2283],{"class":88},[82,42476,40613],{"class":92},[82,42478,42479],{"class":84,"line":10568},[82,42480,40618],{"class":92},[82,42482,42483,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515],{"class":84,"line":10574},[82,42484,40580],{"class":92},[82,42486,33432],{"class":108},[82,42488,113],{"class":112},[82,42490,41023],{"class":88},[82,42492,3136],{"class":92},[82,42494,33441],{"class":108},[82,42496,113],{"class":112},[82,42498,41023],{"class":88},[82,42500,3136],{"class":92},[82,42502,33450],{"class":108},[82,42504,113],{"class":112},[82,42506,2841],{"class":88},[82,42508,3136],{"class":92},[82,42510,33459],{"class":108},[82,42512,113],{"class":112},[82,42514,2283],{"class":88},[82,42516,40613],{"class":92},[82,42518,42519],{"class":84,"line":10601},[82,42520,40618],{"class":92},[82,42522,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555],{"class":84,"line":10606},[82,42524,40580],{"class":92},[82,42526,33432],{"class":108},[82,42528,113],{"class":112},[82,42530,41023],{"class":88},[82,42532,3136],{"class":92},[82,42534,33441],{"class":108},[82,42536,113],{"class":112},[82,42538,41023],{"class":88},[82,42540,3136],{"class":92},[82,42542,33450],{"class":108},[82,42544,113],{"class":112},[82,42546,2841],{"class":88},[82,42548,3136],{"class":92},[82,42550,33459],{"class":108},[82,42552,113],{"class":112},[82,42554,2283],{"class":88},[82,42556,40613],{"class":92},[82,42558,42559],{"class":84,"line":10612},[82,42560,40618],{"class":92},[82,42562,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587],{"class":84,"line":10624},[82,42564,40663],{"class":92},[82,42566,33450],{"class":108},[82,42568,113],{"class":112},[82,42570,1425],{"class":88},[82,42572,3136],{"class":92},[82,42574,33505],{"class":108},[82,42576,113],{"class":112},[82,42578,1425],{"class":88},[82,42580,3136],{"class":92},[82,42582,33459],{"class":108},[82,42584,113],{"class":112},[82,42586,2244],{"class":88},[82,42588,119],{"class":92},[82,42590,42591],{"class":84,"line":10636},[82,42592,40692],{"class":92},[82,42594,42595],{"class":84,"line":10648},[82,42596,41162],{"class":2828},[82,42598,42599,42601,42603,42605],{"class":84,"line":12307},[82,42600,33421],{"class":88},[82,42602,41169],{"class":92},[82,42604,113],{"class":112},[82,42606,40575],{"class":92},[82,42608,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639,42641],{"class":84,"line":12332},[82,42610,40580],{"class":92},[82,42612,33432],{"class":108},[82,42614,113],{"class":112},[82,42616,41023],{"class":88},[82,42618,3136],{"class":92},[82,42620,33441],{"class":108},[82,42622,113],{"class":112},[82,42624,41023],{"class":88},[82,42626,3136],{"class":92},[82,42628,33450],{"class":108},[82,42630,113],{"class":112},[82,42632,2841],{"class":88},[82,42634,3136],{"class":92},[82,42636,33459],{"class":108},[82,42638,113],{"class":112},[82,42640,2283],{"class":88},[82,42642,40613],{"class":92},[82,42644,42645],{"class":84,"line":12355},[82,42646,40618],{"class":92},[82,42648,42649,42651,42653,42655,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681],{"class":84,"line":12379},[82,42650,40580],{"class":92},[82,42652,33432],{"class":108},[82,42654,113],{"class":112},[82,42656,41023],{"class":88},[82,42658,3136],{"class":92},[82,42660,33441],{"class":108},[82,42662,113],{"class":112},[82,42664,41023],{"class":88},[82,42666,3136],{"class":92},[82,42668,33450],{"class":108},[82,42670,113],{"class":112},[82,42672,2841],{"class":88},[82,42674,3136],{"class":92},[82,42676,33459],{"class":108},[82,42678,113],{"class":112},[82,42680,2283],{"class":88},[82,42682,40613],{"class":92},[82,42684,42685],{"class":84,"line":12384},[82,42686,40618],{"class":92},[82,42688,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711,42713,42715,42717,42719,42721],{"class":84,"line":12389},[82,42690,40580],{"class":92},[82,42692,33432],{"class":108},[82,42694,113],{"class":112},[82,42696,41023],{"class":88},[82,42698,3136],{"class":92},[82,42700,33441],{"class":108},[82,42702,113],{"class":112},[82,42704,41023],{"class":88},[82,42706,3136],{"class":92},[82,42708,33450],{"class":108},[82,42710,113],{"class":112},[82,42712,2841],{"class":88},[82,42714,3136],{"class":92},[82,42716,33459],{"class":108},[82,42718,113],{"class":112},[82,42720,2283],{"class":88},[82,42722,40613],{"class":92},[82,42724,42725],{"class":84,"line":12394},[82,42726,40618],{"class":92},[82,42728,42729,42731,42733,42735,42737,42739,42741,42743,42745,42747,42749,42751,42753],{"class":84,"line":12403},[82,42730,40663],{"class":92},[82,42732,33450],{"class":108},[82,42734,113],{"class":112},[82,42736,1425],{"class":88},[82,42738,3136],{"class":92},[82,42740,33505],{"class":108},[82,42742,113],{"class":112},[82,42744,1425],{"class":88},[82,42746,3136],{"class":92},[82,42748,33459],{"class":108},[82,42750,113],{"class":112},[82,42752,2244],{"class":88},[82,42754,119],{"class":92},[82,42756,42757],{"class":84,"line":12408},[82,42758,40692],{"class":92},[82,42760,42761],{"class":84,"line":12414},[82,42762,41330],{"class":2828},[82,42764,42765,42767,42769,42771],{"class":84,"line":12435},[82,42766,33421],{"class":88},[82,42768,41337],{"class":92},[82,42770,113],{"class":112},[82,42772,40575],{"class":92},[82,42774,42775],{"class":84,"line":12441},[82,42776,41346],{"class":2828},[82,42778,42779],{"class":84,"line":12455},[82,42780,41351],{"class":2828},[82,42782,42783],{"class":84,"line":12461},[82,42784,41356],{"class":92},[82,42786,42787,42789,42791,42793,42795,42797,42799,42801,42803],{"class":84,"line":12488},[82,42788,41361],{"class":92},[82,42790,3127],{"class":88},[82,42792,3212],{"class":112},[82,42794,3127],{"class":88},[82,42796,3212],{"class":112},[82,42798,41023],{"class":88},[82,42800,3136],{"class":92},[82,42802,37436],{"class":88},[82,42804,40613],{"class":92},[82,42806,42807],{"class":84,"line":12497},[82,42808,40618],{"class":92},[82,42810,42811,42813,42815,42817,42819],{"class":84,"line":12503},[82,42812,41361],{"class":92},[82,42814,37436],{"class":88},[82,42816,3136],{"class":92},[82,42818,34640],{"class":88},[82,42820,40613],{"class":92},[82,42822,42823],{"class":84,"line":12511},[82,42824,40618],{"class":92},[82,42826,42827,42829,42831,42833,42835],{"class":84,"line":12516},[82,42828,41361],{"class":92},[82,42830,34640],{"class":88},[82,42832,3136],{"class":92},[82,42834,440],{"class":88},[82,42836,119],{"class":92},[82,42838,42839],{"class":84,"line":19189},[82,42840,40692],{"class":92},[82,42842,42843],{"class":84,"line":19195},[82,42844,486],{"emptyLinePlaceholder":485},[82,42846,42847],{"class":84,"line":19218},[82,42848,41422],{"class":2828},[82,42850,42851],{"class":84,"line":19224},[82,42852,41427],{"class":2828},[82,42854,42855,42857,42859,42861,42863],{"class":84,"line":19247},[82,42856,5999],{"class":112},[82,42858,41434],{"class":92},[82,42860,603],{"class":112},[82,42862,41439],{"class":88},[82,42864,41442],{"class":92},[82,42866,42867],{"class":84,"line":19261},[82,42868,41447],{"class":2828},[82,42870,42871,42873,42875],{"class":84,"line":19281},[82,42872,7237],{"class":112},[82,42874,41454],{"class":88},[82,42876,41457],{"class":92},[82,42878,42879],{"class":84,"line":19287},[82,42880,41462],{"class":2828},[82,42882,42883,42885,42887,42889,42891],{"class":84,"line":19298},[82,42884,41467],{"class":92},[82,42886,41470],{"class":108},[82,42888,113],{"class":112},[82,42890,41475],{"class":96},[82,42892,119],{"class":92},[82,42894,42895],{"class":84,"line":19321},[82,42896,41482],{"class":2828},[82,42898,42899,42901,42903,42905,42907,42909],{"class":84,"line":19343},[82,42900,41487],{"class":112},[82,42902,41490],{"class":92},[82,42904,41493],{"class":112},[82,42906,2222],{"class":112},[82,42908,41498],{"class":88},[82,42910,669],{"class":92},[82,42912,42913],{"class":84,"line":19348},[82,42914,41505],{"class":2828},[82,42916,42917,42919,42921],{"class":84,"line":19354},[82,42918,41510],{"class":92},[82,42920,2244],{"class":88},[82,42922,119],{"class":92},[82,42924,42925],{"class":84,"line":19368},[82,42926,41519],{"class":2828},[82,42928,42929,42931,42933],{"class":84,"line":19381},[82,42930,41524],{"class":112},[82,42932,41454],{"class":88},[82,42934,41529],{"class":92},[82,42936,42937],{"class":84,"line":19386},[82,42938,41534],{"class":2828},[82,42940,42941],{"class":84,"line":19400},[82,42942,41539],{"class":2828},[82,42944,42945,42947,42949,42951,42953],{"class":84,"line":19405},[82,42946,41544],{"class":92},[82,42948,2244],{"class":88},[82,42950,3136],{"class":92},[82,42952,41551],{"class":88},[82,42954,119],{"class":92},[82,42956,42957],{"class":84,"line":19411},[82,42958,41558],{"class":2828},[82,42960,42961,42963,42965,42967,42969,42971],{"class":84,"line":19416},[82,42962,41487],{"class":112},[82,42964,41490],{"class":92},[82,42966,41493],{"class":112},[82,42968,2222],{"class":112},[82,42970,41498],{"class":88},[82,42972,669],{"class":92},[82,42974,42975,42977,42979],{"class":84,"line":19430},[82,42976,41510],{"class":92},[82,42978,2244],{"class":88},[82,42980,119],{"class":92},[82,42982,42983],{"class":84,"line":19435},[82,42984,486],{"emptyLinePlaceholder":485},[82,42986,42987],{"class":84,"line":19440},[82,42988,37731],{"class":2828},[82,42990,42991,42993,42995],{"class":84,"line":19454},[82,42992,33377],{"class":112},[82,42994,33669],{"class":2384},[82,42996,33672],{"class":92},[82,42998,42999,43001,43003,43005],{"class":84,"line":19466},[82,43000,33677],{"class":92},[82,43002,113],{"class":112},[82,43004,33399],{"class":88},[82,43006,41607],{"class":92},[82,43008,43009,43011,43013,43015],{"class":84,"line":19471},[82,43010,33677],{"class":92},[82,43012,113],{"class":112},[82,43014,33399],{"class":88},[82,43016,41618],{"class":92},[82,43018,43019,43021,43023,43025],{"class":84,"line":19484},[82,43020,33677],{"class":92},[82,43022,113],{"class":112},[82,43024,33399],{"class":88},[82,43026,41629],{"class":92},[82,43028,43029,43031,43033,43035],{"class":84,"line":19489},[82,43030,33677],{"class":92},[82,43032,113],{"class":112},[82,43034,33399],{"class":88},[82,43036,41640],{"class":92},[82,43038,43039,43041,43043,43045],{"class":84,"line":19494},[82,43040,33677],{"class":92},[82,43042,113],{"class":112},[82,43044,33399],{"class":88},[82,43046,41651],{"class":92},[82,43048,43049,43051,43053,43055],{"class":84,"line":19499},[82,43050,33677],{"class":92},[82,43052,113],{"class":112},[82,43054,33399],{"class":88},[82,43056,41662],{"class":92},[82,43058,43059,43061],{"class":84,"line":19512},[82,43060,2405],{"class":112},[82,43062,33785],{"class":92},[82,43064,43065],{"class":84,"line":19517},[82,43066,486],{"emptyLinePlaceholder":485},[82,43068,43069],{"class":84,"line":35202},[82,43070,41677],{"class":2828},[82,43072,43073,43075,43077,43079,43081],{"class":84,"line":35208},[82,43074,1237],{"class":112},[82,43076,33796],{"class":88},[82,43078,5548],{"class":112},[82,43080,41688],{"class":96},[82,43082,669],{"class":92},[82,43084,43085,43087,43089,43091,43093,43095,43097,43099,43101],{"class":84,"line":35214},[82,43086,33813],{"class":92},[82,43088,113],{"class":112},[82,43090,33028],{"class":92},[82,43092,33820],{"class":96},[82,43094,4307],{"class":112},[82,43096,33825],{"class":92},[82,43098,4304],{"class":112},[82,43100,33053],{"class":96},[82,43102,119],{"class":92},[82,43104,43105,43107],{"class":84,"line":35220},[82,43106,611],{"class":88},[82,43108,33062],{"class":92},[82,43110,43111,43113,43115],{"class":84,"line":35226},[82,43112,33865],{"class":92},[82,43114,113],{"class":112},[82,43116,41725],{"class":92},[82,43118,43119,43121,43123,43125,43127,43129,43131,43133],{"class":84,"line":35237},[82,43120,611],{"class":88},[82,43122,33877],{"class":92},[82,43124,2283],{"class":88},[82,43126,3136],{"class":92},[82,43128,34073],{"class":88},[82,43130,3136],{"class":92},[82,43132,34073],{"class":88},[82,43134,33890],{"class":92},[26,43136,43137],{"start":404},[29,43138,43139],{},"测试代码",[73,43141,43143],{"className":75,"code":43142,"language":77,"meta":78,"style":78},"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",[32,43144,43145,43151,43161,43171,43175,43185,43196,43200,43204,43208,43216,43232,43242,43258,43268,43282,43286,43296,43306,43316,43322,43326,43330,43338,43342,43358,43366,43370,43374,43382,43390,43394,43398,43402,43406,43412,43416,43426,43434,43442,43446,43450,43454,43462,43466,43482,43486,43490,43494,43506,43510,43522,43526,43530,43542,43546,43556,43560,43564,43576,43580,43589,43593,43597,43605,43609,43617,43621,43625,43629,43633,43637,43653,43661,43665,43669,43717,43723,43727,43737,43745,43753,43757,43761,43765,43769,43777,43781,43797,43801,43809,43817],{"__ignoreMap":78},[82,43146,43147,43149],{"class":84,"line":85},[82,43148,1123],{"class":112},[82,43150,32973],{"class":92},[82,43152,43153,43155,43157,43159],{"class":84,"line":157},[82,43154,1123],{"class":112},[82,43156,33989],{"class":92},[82,43158,728],{"class":112},[82,43160,33994],{"class":92},[82,43162,43163,43165,43167,43169],{"class":84,"line":404},[82,43164,1117],{"class":112},[82,43166,33972],{"class":92},[82,43168,1123],{"class":112},[82,43170,33977],{"class":92},[82,43172,43173],{"class":84,"line":413},[82,43174,36490],{"class":2828},[82,43176,43177,43179,43181,43183],{"class":84,"line":508},[82,43178,1117],{"class":112},[82,43180,33943],{"class":92},[82,43182,1123],{"class":112},[82,43184,33948],{"class":92},[82,43186,43187,43189,43191,43193],{"class":84,"line":513},[82,43188,1117],{"class":112},[82,43190,34486],{"class":92},[82,43192,1123],{"class":112},[82,43194,43195],{"class":88}," VGG16\n",[82,43197,43198],{"class":84,"line":1388},[82,43199,486],{"emptyLinePlaceholder":485},[82,43201,43202],{"class":84,"line":1394},[82,43203,486],{"emptyLinePlaceholder":485},[82,43205,43206],{"class":84,"line":1399},[82,43207,36519],{"class":2828},[82,43209,43210,43212,43214],{"class":84,"line":1430},[82,43211,2381],{"class":112},[82,43213,36526],{"class":2384},[82,43215,2388],{"class":92},[82,43217,43218,43220,43222,43224,43226,43228,43230],{"class":84,"line":1818},[82,43219,36533],{"class":92},[82,43221,113],{"class":112},[82,43223,34029],{"class":92},[82,43225,34032],{"class":108},[82,43227,113],{"class":112},[82,43229,34037],{"class":96},[82,43231,1363],{"class":92},[82,43233,43234,43236,43238,43240],{"class":84,"line":2082},[82,43235,36550],{"class":108},[82,43237,113],{"class":112},[82,43239,1415],{"class":88},[82,43241,1363],{"class":92},[82,43243,43244,43246,43248,43250,43252,43254,43256],{"class":84,"line":2233},[82,43245,36561],{"class":108},[82,43247,113],{"class":112},[82,43249,34065],{"class":92},[82,43251,34068],{"class":108},[82,43253,113],{"class":112},[82,43255,34073],{"class":88},[82,43257,34076],{"class":92},[82,43259,43260,43262,43264,43266],{"class":84,"line":2255},[82,43261,36578],{"class":108},[82,43263,113],{"class":112},[82,43265,1205],{"class":88},[82,43267,119],{"class":92},[82,43269,43270,43272,43274,43276,43278,43280],{"class":84,"line":2260},[82,43271,36589],{"class":92},[82,43273,113],{"class":112},[82,43275,34106],{"class":92},[82,43277,34109],{"class":108},[82,43279,113],{"class":112},[82,43281,36600],{"class":92},[82,43283,43284],{"class":84,"line":2298},[82,43285,36605],{"class":2828},[82,43287,43288,43290,43292,43294],{"class":84,"line":2303},[82,43289,36610],{"class":108},[82,43291,113],{"class":112},[82,43293,2283],{"class":88},[82,43295,1363],{"class":92},[82,43297,43298,43300,43302,43304],{"class":84,"line":2321},[82,43299,36621],{"class":108},[82,43301,113],{"class":112},[82,43303,1205],{"class":88},[82,43305,1363],{"class":92},[82,43307,43308,43310,43312,43314],{"class":84,"line":2533},[82,43309,36632],{"class":108},[82,43311,113],{"class":112},[82,43313,2244],{"class":88},[82,43315,119],{"class":92},[82,43317,43318,43320],{"class":84,"line":2538},[82,43319,6685],{"class":112},[82,43321,36645],{"class":92},[82,43323,43324],{"class":84,"line":2548},[82,43325,486],{"emptyLinePlaceholder":485},[82,43327,43328],{"class":84,"line":2579},[82,43329,36654],{"class":2828},[82,43331,43332,43334,43336],{"class":84,"line":2585},[82,43333,2381],{"class":112},[82,43335,36661],{"class":2384},[82,43337,36664],{"class":92},[82,43339,43340],{"class":84,"line":4350},[82,43341,36669],{"class":2828},[82,43343,43344,43346,43348,43350,43352,43354,43356],{"class":84,"line":4355},[82,43345,33813],{"class":92},[82,43347,113],{"class":112},[82,43349,33820],{"class":96},[82,43351,4307],{"class":112},[82,43353,33825],{"class":92},[82,43355,4304],{"class":112},[82,43357,36686],{"class":96},[82,43359,43360,43362,43364],{"class":84,"line":4360},[82,43361,33865],{"class":92},[82,43363,113],{"class":112},[82,43365,34859],{"class":92},[82,43367,43368],{"class":84,"line":4365},[82,43369,486],{"emptyLinePlaceholder":485},[82,43371,43372],{"class":84,"line":4379},[82,43373,36703],{"class":2828},[82,43375,43376,43378,43380],{"class":84,"line":4384},[82,43377,36708],{"class":92},[82,43379,113],{"class":112},[82,43381,34912],{"class":88},[82,43383,43384,43386,43388],{"class":84,"line":5176},[82,43385,36717],{"class":92},[82,43387,113],{"class":112},[82,43389,5683],{"class":88},[82,43391,43392],{"class":84,"line":5190},[82,43393,486],{"emptyLinePlaceholder":485},[82,43395,43396],{"class":84,"line":5198},[82,43397,36730],{"class":2828},[82,43399,43400],{"class":84,"line":5203},[82,43401,36735],{"class":2828},[82,43403,43404],{"class":84,"line":5209},[82,43405,36740],{"class":2828},[82,43407,43408,43410],{"class":84,"line":5215},[82,43409,2417],{"class":112},[82,43411,35453],{"class":92},[82,43413,43414],{"class":84,"line":5220},[82,43415,36751],{"class":2828},[82,43417,43418,43420,43422,43424],{"class":84,"line":10539},[82,43419,5999],{"class":112},[82,43421,36758],{"class":92},[82,43423,603],{"class":112},[82,43425,36763],{"class":92},[82,43427,43428,43430,43432],{"class":84,"line":10563},[82,43429,36768],{"class":92},[82,43431,113],{"class":112},[82,43433,36773],{"class":92},[82,43435,43436,43438,43440],{"class":84,"line":10568},[82,43437,36778],{"class":92},[82,43439,113],{"class":112},[82,43441,36783],{"class":92},[82,43443,43444],{"class":84,"line":10574},[82,43445,36788],{"class":2828},[82,43447,43448],{"class":84,"line":10601},[82,43449,35444],{"class":92},[82,43451,43452],{"class":84,"line":10606},[82,43453,36797],{"class":2828},[82,43455,43456,43458,43460],{"class":84,"line":10612},[82,43457,35229],{"class":92},[82,43459,113],{"class":112},[82,43461,36806],{"class":92},[82,43463,43464],{"class":84,"line":10624},[82,43465,36811],{"class":2828},[82,43467,43468,43470,43472,43474,43476,43478,43480],{"class":84,"line":10636},[82,43469,35246],{"class":92},[82,43471,113],{"class":112},[82,43473,35251],{"class":92},[82,43475,35254],{"class":108},[82,43477,113],{"class":112},[82,43479,2283],{"class":88},[82,43481,119],{"class":92},[82,43483,43484],{"class":84,"line":10648},[82,43485,36832],{"class":2828},[82,43487,43488],{"class":84,"line":12307},[82,43489,36837],{"class":2828},[82,43491,43492],{"class":84,"line":12332},[82,43493,36842],{"class":2828},[82,43495,43496,43498,43500,43502,43504],{"class":84,"line":12355},[82,43497,36847],{"class":92},[82,43499,12068],{"class":112},[82,43501,35356],{"class":92},[82,43503,5548],{"class":112},[82,43505,36856],{"class":92},[82,43507,43508],{"class":84,"line":12379},[82,43509,36861],{"class":2828},[82,43511,43512,43514,43516,43518,43520],{"class":84,"line":12384},[82,43513,36866],{"class":92},[82,43515,12068],{"class":112},[82,43517,36871],{"class":92},[82,43519,2244],{"class":88},[82,43521,119],{"class":92},[82,43523,43524],{"class":84,"line":12389},[82,43525,486],{"emptyLinePlaceholder":485},[82,43527,43528],{"class":84,"line":12394},[82,43529,36884],{"class":2828},[82,43531,43532,43534,43536,43538,43540],{"class":84,"line":12403},[82,43533,36889],{"class":92},[82,43535,113],{"class":112},[82,43537,36894],{"class":92},[82,43539,1147],{"class":112},[82,43541,36899],{"class":92},[82,43543,43544],{"class":84,"line":12408},[82,43545,36904],{"class":2828},[82,43547,43548,43550,43552,43554],{"class":84,"line":12414},[82,43549,1901],{"class":88},[82,43551,93],{"class":92},[82,43553,36913],{"class":96},[82,43555,36916],{"class":92},[82,43557,43558],{"class":84,"line":12435},[82,43559,486],{"emptyLinePlaceholder":485},[82,43561,43562],{"class":84,"line":12441},[82,43563,36925],{"class":2828},[82,43565,43566,43568,43570,43572,43574],{"class":84,"line":12455},[82,43567,1237],{"class":112},[82,43569,33796],{"class":88},[82,43571,5548],{"class":112},[82,43573,33801],{"class":96},[82,43575,669],{"class":92},[82,43577,43578],{"class":84,"line":12461},[82,43579,36942],{"class":2828},[82,43581,43582,43584,43586],{"class":84,"line":12488},[82,43583,33865],{"class":92},[82,43585,113],{"class":112},[82,43587,43588],{"class":92},"VGG16()\n",[82,43590,43591],{"class":84,"line":12497},[82,43592,36955],{"class":2828},[82,43594,43595],{"class":84,"line":12503},[82,43596,36960],{"class":2828},[82,43598,43599,43601,43603],{"class":84,"line":12511},[82,43600,36965],{"class":92},[82,43602,36968],{"class":96},[82,43604,33074],{"class":92},[82,43606,43607],{"class":84,"line":12516},[82,43608,36975],{"class":2828},[82,43610,43611,43613,43615],{"class":84,"line":19189},[82,43612,36589],{"class":92},[82,43614,113],{"class":112},[82,43616,36984],{"class":92},[82,43618,43619],{"class":84,"line":19195},[82,43620,36989],{"class":2828},[82,43622,43623],{"class":84,"line":19218},[82,43624,36994],{"class":92},[82,43626,43627],{"class":84,"line":19224},[82,43628,486],{"emptyLinePlaceholder":485},[82,43630,43631],{"class":84,"line":19247},[82,43632,37003],{"class":2828},[82,43634,43635],{"class":84,"line":19261},[82,43636,37008],{"class":2828},[82,43638,43639,43641,43643,43645,43647,43649,43651],{"class":84,"line":19281},[82,43640,33813],{"class":92},[82,43642,113],{"class":112},[82,43644,33820],{"class":96},[82,43646,4307],{"class":112},[82,43648,33825],{"class":92},[82,43650,4304],{"class":112},[82,43652,36686],{"class":96},[82,43654,43655,43657,43659],{"class":84,"line":19287},[82,43656,33865],{"class":92},[82,43658,113],{"class":112},[82,43660,34859],{"class":92},[82,43662,43663],{"class":84,"line":19298},[82,43664,37037],{"class":2828},[82,43666,43667],{"class":84,"line":19321},[82,43668,37042],{"class":2828},[82,43670,43671,43673,43675,43677,43679,43681,43683,43685,43687,43689,43691,43693,43695,43697,43699,43701,43703,43705,43707,43709,43711,43713,43715],{"class":84,"line":19343},[82,43672,37047],{"class":92},[82,43674,113],{"class":112},[82,43676,3639],{"class":92},[82,43678,37054],{"class":96},[82,43680,3136],{"class":92},[82,43682,37059],{"class":96},[82,43684,3136],{"class":92},[82,43686,37064],{"class":96},[82,43688,3136],{"class":92},[82,43690,37069],{"class":96},[82,43692,3136],{"class":92},[82,43694,37074],{"class":96},[82,43696,3136],{"class":92},[82,43698,37079],{"class":96},[82,43700,3136],{"class":92},[82,43702,37084],{"class":96},[82,43704,3136],{"class":92},[82,43706,37089],{"class":96},[82,43708,3136],{"class":92},[82,43710,37094],{"class":96},[82,43712,3136],{"class":92},[82,43714,37099],{"class":96},[82,43716,875],{"class":92},[82,43718,43719,43721],{"class":84,"line":19348},[82,43720,2417],{"class":112},[82,43722,35453],{"class":92},[82,43724,43725],{"class":84,"line":19354},[82,43726,37112],{"class":2828},[82,43728,43729,43731,43733,43735],{"class":84,"line":19368},[82,43730,5999],{"class":112},[82,43732,37119],{"class":92},[82,43734,603],{"class":112},[82,43736,36763],{"class":92},[82,43738,43739,43741,43743],{"class":84,"line":19381},[82,43740,35179],{"class":92},[82,43742,113],{"class":112},[82,43744,35184],{"class":92},[82,43746,43747,43749,43751],{"class":84,"line":19386},[82,43748,35194],{"class":92},[82,43750,113],{"class":112},[82,43752,35199],{"class":92},[82,43754,43755],{"class":84,"line":19400},[82,43756,486],{"emptyLinePlaceholder":485},[82,43758,43759],{"class":84,"line":19405},[82,43760,37148],{"class":2828},[82,43762,43763],{"class":84,"line":19411},[82,43764,35444],{"class":92},[82,43766,43767],{"class":84,"line":19416},[82,43768,37157],{"class":2828},[82,43770,43771,43773,43775],{"class":84,"line":19430},[82,43772,35229],{"class":92},[82,43774,113],{"class":112},[82,43776,35234],{"class":92},[82,43778,43779],{"class":84,"line":19435},[82,43780,37170],{"class":2828},[82,43782,43783,43785,43787,43789,43791,43793,43795],{"class":84,"line":19440},[82,43784,35246],{"class":92},[82,43786,113],{"class":112},[82,43788,35251],{"class":92},[82,43790,35254],{"class":108},[82,43792,113],{"class":112},[82,43794,2283],{"class":88},[82,43796,119],{"class":92},[82,43798,43799],{"class":84,"line":19454},[82,43800,37191],{"class":2828},[82,43802,43803,43805,43807],{"class":84,"line":19466},[82,43804,37196],{"class":92},[82,43806,113],{"class":112},[82,43808,37201],{"class":92},[82,43810,43811,43813,43815],{"class":84,"line":19471},[82,43812,37206],{"class":92},[82,43814,113],{"class":112},[82,43816,37211],{"class":92},[82,43818,43819,43821,43823,43825,43827,43829,43831,43833],{"class":84,"line":19484},[82,43820,37216],{"class":88},[82,43822,93],{"class":92},[82,43824,37221],{"class":96},[82,43826,37224],{"class":92},[82,43828,37227],{"class":96},[82,43830,3136],{"class":92},[82,43832,37232],{"class":96},[82,43834,37235],{"class":92},[65,43836,43838],{"id":43837},"_23googlenet","2.3.GoogLeNet",[24582,43840,43842],{"id":43841},"_231原理","2.3.1.原理",[26,43844,43845],{},[29,43846,43847],{},"网络结构",[19,43849,43850],{},[4078,43851],{"alt":78,"src":43852},"\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,43854,43855],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43857,43858],{},[4078,43859],{"alt":78,"src":43860},"\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,43862,43863],{},[4078,43864],{"alt":78,"src":43865},"\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,43867,43868],{},[4078,43869],{"alt":78,"src":43870},"\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",[26,43872,43873],{"start":157},[29,43874,43875],{},"1x1卷积的优点",[19,43877,43878],{},[4078,43879],{"alt":78,"src":43880},"\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",[26,43882,43883],{"start":404},[29,43884,43885],{},"全局平均池化层优点",[19,43887,43888],{},[4078,43889],{"alt":78,"src":43890},"\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,43892,43893],{},[4078,43894],{"alt":78,"src":43895},"\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",[26,43897,43898],{"start":413},[29,43899,43900],{},"参数详细描述",[19,43902,43903],{},[4078,43904],{"alt":78,"src":43905},"\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,43907,43908],{},[4078,43909],{"alt":78,"src":43910},"\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,43912,43913],{},[4078,43914],{"alt":78,"src":43915},"\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,43917,43918],{},[4078,43919],{"alt":78,"src":43920},"\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,43922,43923],{},[4078,43924],{"alt":78,"src":43925},"\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,43927,43928],{},[4078,43929],{"alt":78,"src":43930},"\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,43932,43933],{},[4078,43934],{"alt":78,"src":43935},"\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,43937,43938],{},[4078,43939],{"alt":78,"src":43940},"\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,43942,43943],{},[4078,43944],{"alt":78,"src":43945},"\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,43947,43948],{},[4078,43949],{"alt":78,"src":43950},"\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,43952,43953],{},[4078,43954],{"alt":78,"src":43955},"\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,43957,43958],{},[4078,43959],{"alt":78,"src":43960},"\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,43962,43963],{},[4078,43964],{"alt":78,"src":43965},"\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,43967,43968],{},[4078,43969],{"alt":78,"src":43970},"\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,43972,43973],{},[4078,43974],{"alt":78,"src":43975},"\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,43977,43978],{},[4078,43979],{"alt":78,"src":43980},"\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,43982,43983],{},[4078,43984],{"alt":78,"src":43985},"\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,43987,43988],{},[4078,43989],{"alt":78,"src":43990},"\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,43992,43993],{},[4078,43994],{"alt":78,"src":43995},"\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,43997,43998],{},[4078,43999],{"alt":78,"src":44000},"\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,44002,44003],{},[4078,44004],{"alt":78,"src":44005},"\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",[24582,44007,44009],{"id":44008},"_232代码实现","2.3.2.代码实现",[26,44011,44012],{},[29,44013,33288],{},[19,44015,44016],{},"根据原理一步一步搭建即可",[73,44018,44020],{"className":75,"code":44019,"language":77,"meta":78,"style":78},"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",[32,44021,44022,44028,44038,44048,44052,44069,44078,44093,44103,44108,44141,44146,44183,44230,44235,44271,44318,44323,44328,44363,44395,44399,44407,44423,44447,44472,44493,44498,44513,44517,44521,44526,44543,44548,44557,44572,44583,44627,44631,44659,44663,44674,44702,44706,44743,44747,44775,44779,44790,44826,44858,44886,44890,44901,44935,44967,44999,45032,45066,45094,45098,45109,45142,45174,45188,45192,45205,45209,45214,45226,45234,45256,45261,45266,45271,45276,45281,45286,45300,45308,45317,45330,45345,45354,45358,45366,45377,45388,45399,45410,45421,45427,45431,45436,45448,45468,45477],{"__ignoreMap":78},[82,44023,44024,44026],{"class":84,"line":85},[82,44025,1123],{"class":112},[82,44027,32973],{"class":92},[82,44029,44030,44032,44034,44036],{"class":84,"line":157},[82,44031,1117],{"class":112},[82,44033,33316],{"class":92},[82,44035,1123],{"class":112},[82,44037,33321],{"class":92},[82,44039,44040,44042,44044,44046],{"class":84,"line":404},[82,44041,1117],{"class":112},[82,44043,33333],{"class":92},[82,44045,1123],{"class":112},[82,44047,33338],{"class":92},[82,44049,44050],{"class":84,"line":413},[82,44051,486],{"emptyLinePlaceholder":485},[82,44053,44054,44056,44059,44061,44063,44065,44067],{"class":84,"line":508},[82,44055,17281],{"class":112},[82,44057,44058],{"class":2384}," Inception",[82,44060,93],{"class":92},[82,44062,33354],{"class":2384},[82,44064,233],{"class":92},[82,44066,33359],{"class":2384},[82,44068,33362],{"class":92},[82,44070,44071,44073,44075],{"class":84,"line":513},[82,44072,33377],{"class":112},[82,44074,33380],{"class":88},[82,44076,44077],{"class":92},"(self,in_channels,c1,c2,c3,c4):\n",[82,44079,44080,44082,44085,44087,44089,44091],{"class":84,"line":1388},[82,44081,33393],{"class":88},[82,44083,44084],{"class":92},"(Inception,",[82,44086,33399],{"class":88},[82,44088,33402],{"class":92},[82,44090,33405],{"class":88},[82,44092,4576],{"class":92},[82,44094,44095,44097,44099,44101],{"class":84,"line":1394},[82,44096,33421],{"class":88},[82,44098,37337],{"class":92},[82,44100,113],{"class":112},[82,44102,37342],{"class":92},[82,44104,44105],{"class":84,"line":1399},[82,44106,44107],{"class":2828},"        # 路线1：定义1*1卷积\n",[82,44109,44110,44112,44115,44117,44119,44121,44123,44126,44128,44130,44133,44135,44137,44139],{"class":84,"line":1430},[82,44111,33421],{"class":88},[82,44113,44114],{"class":92},".p1_1",[82,44116,113],{"class":112},[82,44118,33429],{"class":92},[82,44120,33432],{"class":108},[82,44122,113],{"class":112},[82,44124,44125],{"class":92},"in_channels,",[82,44127,33441],{"class":108},[82,44129,113],{"class":112},[82,44131,44132],{"class":92},"c1,",[82,44134,33450],{"class":108},[82,44136,113],{"class":112},[82,44138,2283],{"class":88},[82,44140,119],{"class":92},[82,44142,44143],{"class":84,"line":1818},[82,44144,44145],{"class":2828},"        # 路线2：定义1*1卷积和3*3\n",[82,44147,44148,44150,44153,44155,44157,44159,44161,44163,44165,44167,44170,44172,44175,44177,44179,44181],{"class":84,"line":2082},[82,44149,33421],{"class":88},[82,44151,44152],{"class":92},".p2_1",[82,44154,113],{"class":112},[82,44156,33429],{"class":92},[82,44158,33432],{"class":108},[82,44160,113],{"class":112},[82,44162,44125],{"class":92},[82,44164,33441],{"class":108},[82,44166,113],{"class":112},[82,44168,44169],{"class":92},"c2[",[82,44171,2244],{"class":88},[82,44173,44174],{"class":92},"],",[82,44176,33450],{"class":108},[82,44178,113],{"class":112},[82,44180,2283],{"class":88},[82,44182,119],{"class":92},[82,44184,44185,44187,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208,44210,44212,44214,44216,44218,44220,44222,44224,44226,44228],{"class":84,"line":2233},[82,44186,33421],{"class":88},[82,44188,44189],{"class":92},".p2_2",[82,44191,113],{"class":112},[82,44193,33429],{"class":92},[82,44195,33432],{"class":108},[82,44197,113],{"class":112},[82,44199,44169],{"class":92},[82,44201,2244],{"class":88},[82,44203,44174],{"class":92},[82,44205,33441],{"class":108},[82,44207,113],{"class":112},[82,44209,44169],{"class":92},[82,44211,2283],{"class":88},[82,44213,44174],{"class":92},[82,44215,33450],{"class":108},[82,44217,113],{"class":112},[82,44219,2841],{"class":88},[82,44221,3136],{"class":92},[82,44223,33459],{"class":108},[82,44225,113],{"class":112},[82,44227,2283],{"class":88},[82,44229,119],{"class":92},[82,44231,44232],{"class":84,"line":2255},[82,44233,44234],{"class":2828},"        # 路线3：定义1*1卷积和5*5\n",[82,44236,44237,44239,44242,44244,44246,44248,44250,44252,44254,44256,44259,44261,44263,44265,44267,44269],{"class":84,"line":2260},[82,44238,33421],{"class":88},[82,44240,44241],{"class":92},".p3_1",[82,44243,113],{"class":112},[82,44245,33429],{"class":92},[82,44247,33432],{"class":108},[82,44249,113],{"class":112},[82,44251,44125],{"class":92},[82,44253,33441],{"class":108},[82,44255,113],{"class":112},[82,44257,44258],{"class":92},"c3[",[82,44260,2244],{"class":88},[82,44262,44174],{"class":92},[82,44264,33450],{"class":108},[82,44266,113],{"class":112},[82,44268,2283],{"class":88},[82,44270,119],{"class":92},[82,44272,44273,44275,44278,44280,44282,44284,44286,44288,44290,44292,44294,44296,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316],{"class":84,"line":2298},[82,44274,33421],{"class":88},[82,44276,44277],{"class":92},".p3_2",[82,44279,113],{"class":112},[82,44281,33429],{"class":92},[82,44283,33432],{"class":108},[82,44285,113],{"class":112},[82,44287,44258],{"class":92},[82,44289,2244],{"class":88},[82,44291,44174],{"class":92},[82,44293,33441],{"class":108},[82,44295,113],{"class":112},[82,44297,44258],{"class":92},[82,44299,2283],{"class":88},[82,44301,44174],{"class":92},[82,44303,33450],{"class":108},[82,44305,113],{"class":112},[82,44307,3077],{"class":88},[82,44309,3136],{"class":92},[82,44311,33459],{"class":108},[82,44313,113],{"class":112},[82,44315,1425],{"class":88},[82,44317,119],{"class":92},[82,44319,44320],{"class":84,"line":2303},[82,44321,44322],{"class":2828},"        # 路线4：定义3*3最大池化和1*1卷积\n",[82,44324,44325],{"class":84,"line":2321},[82,44326,44327],{"class":2828},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[82,44329,44330,44332,44335,44337,44339,44341,44343,44345,44347,44349,44351,44353,44355,44357,44359,44361],{"class":84,"line":2533},[82,44331,33421],{"class":88},[82,44333,44334],{"class":92},".p4_1",[82,44336,113],{"class":112},[82,44338,37395],{"class":92},[82,44340,33450],{"class":108},[82,44342,113],{"class":112},[82,44344,2841],{"class":88},[82,44346,3136],{"class":92},[82,44348,33505],{"class":108},[82,44350,113],{"class":112},[82,44352,2283],{"class":88},[82,44354,3136],{"class":92},[82,44356,33459],{"class":108},[82,44358,113],{"class":112},[82,44360,2283],{"class":88},[82,44362,119],{"class":92},[82,44364,44365,44367,44370,44372,44374,44376,44378,44380,44382,44384,44387,44389,44391,44393],{"class":84,"line":2538},[82,44366,33421],{"class":88},[82,44368,44369],{"class":92},".p4_2",[82,44371,113],{"class":112},[82,44373,33429],{"class":92},[82,44375,33432],{"class":108},[82,44377,113],{"class":112},[82,44379,44125],{"class":92},[82,44381,33441],{"class":108},[82,44383,113],{"class":112},[82,44385,44386],{"class":92},"c4,",[82,44388,33450],{"class":108},[82,44390,113],{"class":112},[82,44392,2283],{"class":88},[82,44394,119],{"class":92},[82,44396,44397],{"class":84,"line":2548},[82,44398,486],{"emptyLinePlaceholder":485},[82,44400,44401,44403,44405],{"class":84,"line":2579},[82,44402,33377],{"class":112},[82,44404,33669],{"class":2384},[82,44406,33672],{"class":92},[82,44408,44409,44412,44414,44416,44418,44420],{"class":84,"line":2585},[82,44410,44411],{"class":92},"        p1",[82,44413,113],{"class":112},[82,44415,33399],{"class":88},[82,44417,37750],{"class":92},[82,44419,33399],{"class":88},[82,44421,44422],{"class":92},".p1_1(x))\n",[82,44424,44425,44427,44429,44431,44433,44435,44438,44440,44442,44444],{"class":84,"line":4350},[82,44426,9677],{"class":92},[82,44428,113],{"class":112},[82,44430,33399],{"class":88},[82,44432,37750],{"class":92},[82,44434,33399],{"class":88},[82,44436,44437],{"class":92},".p2_2(",[82,44439,33399],{"class":88},[82,44441,37750],{"class":92},[82,44443,33399],{"class":88},[82,44445,44446],{"class":92},".p2_1(x))))\n",[82,44448,44449,44452,44454,44456,44458,44460,44463,44465,44467,44469],{"class":84,"line":4355},[82,44450,44451],{"class":92},"        p3",[82,44453,113],{"class":112},[82,44455,33399],{"class":88},[82,44457,37750],{"class":92},[82,44459,33399],{"class":88},[82,44461,44462],{"class":92},".p3_2(",[82,44464,33399],{"class":88},[82,44466,37750],{"class":92},[82,44468,33399],{"class":88},[82,44470,44471],{"class":92},".p3_1(x))))\n",[82,44473,44474,44477,44479,44481,44483,44485,44488,44490],{"class":84,"line":4360},[82,44475,44476],{"class":92},"        p4",[82,44478,113],{"class":112},[82,44480,33399],{"class":88},[82,44482,37750],{"class":92},[82,44484,33399],{"class":88},[82,44486,44487],{"class":92},".p4_2(",[82,44489,33399],{"class":88},[82,44491,44492],{"class":92},".p4_1(x)))\n",[82,44494,44495],{"class":84,"line":4365},[82,44496,44497],{"class":2828},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[82,44499,44500,44502,44505,44507,44509,44511],{"class":84,"line":4379},[82,44501,2405],{"class":112},[82,44503,44504],{"class":92}," torch.cat((p1,p2,p3,p4),",[82,44506,35254],{"class":108},[82,44508,113],{"class":112},[82,44510,2283],{"class":88},[82,44512,119],{"class":92},[82,44514,44515],{"class":84,"line":4384},[82,44516,486],{"emptyLinePlaceholder":485},[82,44518,44519],{"class":84,"line":5176},[82,44520,486],{"emptyLinePlaceholder":485},[82,44522,44523],{"class":84,"line":5190},[82,44524,44525],{"class":2828},"# 搭建GoogLeNet网络\n",[82,44527,44528,44530,44533,44535,44537,44539,44541],{"class":84,"line":5198},[82,44529,17281],{"class":112},[82,44531,44532],{"class":2384}," GoogLeNet",[82,44534,93],{"class":92},[82,44536,33354],{"class":2384},[82,44538,233],{"class":92},[82,44540,33359],{"class":2384},[82,44542,33362],{"class":92},[82,44544,44545],{"class":84,"line":5203},[82,44546,44547],{"class":2828},"    # 必须把Inception导入到里边\n",[82,44549,44550,44552,44554],{"class":84,"line":5209},[82,44551,33377],{"class":112},[82,44553,33380],{"class":88},[82,44555,44556],{"class":92},"(self,Inception):\n",[82,44558,44559,44561,44564,44566,44568,44570],{"class":84,"line":5215},[82,44560,33393],{"class":88},[82,44562,44563],{"class":92},"(GoogLeNet,",[82,44565,33399],{"class":88},[82,44567,33402],{"class":92},[82,44569,33405],{"class":88},[82,44571,4576],{"class":92},[82,44573,44574,44576,44579,44581],{"class":84,"line":5220},[82,44575,33421],{"class":88},[82,44577,44578],{"class":92},".b1",[82,44580,113],{"class":112},[82,44582,40575],{"class":92},[82,44584,44585,44587,44589,44591,44593,44595,44597,44599,44601,44603,44605,44607,44609,44611,44613,44615,44617,44619,44621,44623,44625],{"class":84,"line":10539},[82,44586,40580],{"class":92},[82,44588,33432],{"class":108},[82,44590,113],{"class":112},[82,44592,2283],{"class":88},[82,44594,3136],{"class":92},[82,44596,33441],{"class":108},[82,44598,113],{"class":112},[82,44600,2964],{"class":88},[82,44602,3136],{"class":92},[82,44604,33450],{"class":108},[82,44606,113],{"class":112},[82,44608,3127],{"class":88},[82,44610,3136],{"class":92},[82,44612,33505],{"class":108},[82,44614,113],{"class":112},[82,44616,1425],{"class":88},[82,44618,3136],{"class":92},[82,44620,33459],{"class":108},[82,44622,113],{"class":112},[82,44624,2841],{"class":88},[82,44626,40613],{"class":92},[82,44628,44629],{"class":84,"line":10563},[82,44630,40618],{"class":92},[82,44632,44633,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653,44655,44657],{"class":84,"line":10568},[82,44634,40663],{"class":92},[82,44636,33450],{"class":108},[82,44638,113],{"class":112},[82,44640,2841],{"class":88},[82,44642,3136],{"class":92},[82,44644,33505],{"class":108},[82,44646,113],{"class":112},[82,44648,1425],{"class":88},[82,44650,3136],{"class":92},[82,44652,33459],{"class":108},[82,44654,113],{"class":112},[82,44656,2283],{"class":88},[82,44658,119],{"class":92},[82,44660,44661],{"class":84,"line":10574},[82,44662,40692],{"class":92},[82,44664,44665,44667,44670,44672],{"class":84,"line":10601},[82,44666,33421],{"class":88},[82,44668,44669],{"class":92},".b2",[82,44671,113],{"class":112},[82,44673,40575],{"class":92},[82,44675,44676,44678,44680,44682,44684,44686,44688,44690,44692,44694,44696,44698,44700],{"class":84,"line":10606},[82,44677,40580],{"class":92},[82,44679,33432],{"class":108},[82,44681,113],{"class":112},[82,44683,2964],{"class":88},[82,44685,3136],{"class":92},[82,44687,33441],{"class":108},[82,44689,113],{"class":112},[82,44691,2964],{"class":88},[82,44693,3136],{"class":92},[82,44695,33450],{"class":108},[82,44697,113],{"class":112},[82,44699,2283],{"class":88},[82,44701,40613],{"class":92},[82,44703,44704],{"class":84,"line":10612},[82,44705,40618],{"class":92},[82,44707,44708,44710,44712,44714,44716,44718,44720,44722,44725,44727,44729,44731,44733,44735,44737,44739,44741],{"class":84,"line":10624},[82,44709,40580],{"class":92},[82,44711,33432],{"class":108},[82,44713,113],{"class":112},[82,44715,2964],{"class":88},[82,44717,3136],{"class":92},[82,44719,33441],{"class":108},[82,44721,113],{"class":112},[82,44723,44724],{"class":88},"192",[82,44726,3136],{"class":92},[82,44728,33450],{"class":108},[82,44730,113],{"class":112},[82,44732,2841],{"class":88},[82,44734,3136],{"class":92},[82,44736,33459],{"class":108},[82,44738,113],{"class":112},[82,44740,2283],{"class":88},[82,44742,40613],{"class":92},[82,44744,44745],{"class":84,"line":10636},[82,44746,40618],{"class":92},[82,44748,44749,44751,44753,44755,44757,44759,44761,44763,44765,44767,44769,44771,44773],{"class":84,"line":10648},[82,44750,40663],{"class":92},[82,44752,33450],{"class":108},[82,44754,113],{"class":112},[82,44756,2841],{"class":88},[82,44758,3136],{"class":92},[82,44760,33505],{"class":108},[82,44762,113],{"class":112},[82,44764,1425],{"class":88},[82,44766,3136],{"class":92},[82,44768,33459],{"class":108},[82,44770,113],{"class":112},[82,44772,2283],{"class":88},[82,44774,119],{"class":92},[82,44776,44777],{"class":84,"line":12307},[82,44778,40692],{"class":92},[82,44780,44781,44783,44786,44788],{"class":84,"line":12332},[82,44782,33421],{"class":88},[82,44784,44785],{"class":92},".b3",[82,44787,113],{"class":112},[82,44789,40575],{"class":92},[82,44791,44792,44795,44797,44799,44801,44804,44806,44808,44810,44813,44815,44817,44819,44822,44824],{"class":84,"line":12355},[82,44793,44794],{"class":92},"            Inception(",[82,44796,44724],{"class":88},[82,44798,3136],{"class":92},[82,44800,2964],{"class":88},[82,44802,44803],{"class":92},",(",[82,44805,2970],{"class":88},[82,44807,3136],{"class":92},[82,44809,34640],{"class":88},[82,44811,44812],{"class":92},"),(",[82,44814,3355],{"class":88},[82,44816,3136],{"class":92},[82,44818,2958],{"class":88},[82,44820,44821],{"class":92},"),",[82,44823,2958],{"class":88},[82,44825,40613],{"class":92},[82,44827,44828,44830,44832,44834,44836,44838,44840,44842,44844,44846,44848,44850,44852,44854,44856],{"class":84,"line":12379},[82,44829,44794],{"class":92},[82,44831,37436],{"class":88},[82,44833,3136],{"class":92},[82,44835,34640],{"class":88},[82,44837,44803],{"class":92},[82,44839,34640],{"class":88},[82,44841,3136],{"class":92},[82,44843,44724],{"class":88},[82,44845,44812],{"class":92},[82,44847,2958],{"class":88},[82,44849,3136],{"class":92},[82,44851,2970],{"class":88},[82,44853,44821],{"class":92},[82,44855,2964],{"class":88},[82,44857,40613],{"class":92},[82,44859,44860,44862,44864,44866,44868,44870,44872,44874,44876,44878,44880,44882,44884],{"class":84,"line":12384},[82,44861,40663],{"class":92},[82,44863,33450],{"class":108},[82,44865,113],{"class":112},[82,44867,2841],{"class":88},[82,44869,3136],{"class":92},[82,44871,33505],{"class":108},[82,44873,113],{"class":112},[82,44875,1425],{"class":88},[82,44877,3136],{"class":92},[82,44879,33459],{"class":108},[82,44881,113],{"class":112},[82,44883,2283],{"class":88},[82,44885,119],{"class":92},[82,44887,44888],{"class":84,"line":12389},[82,44889,40692],{"class":92},[82,44891,44892,44894,44897,44899],{"class":84,"line":12394},[82,44893,33421],{"class":88},[82,44895,44896],{"class":92},".b4",[82,44898,113],{"class":112},[82,44900,40575],{"class":92},[82,44902,44903,44905,44908,44910,44912,44914,44916,44918,44921,44923,44925,44927,44929,44931,44933],{"class":84,"line":12403},[82,44904,44794],{"class":92},[82,44906,44907],{"class":88},"480",[82,44909,3136],{"class":92},[82,44911,44724],{"class":88},[82,44913,44803],{"class":92},[82,44915,2970],{"class":88},[82,44917,3136],{"class":92},[82,44919,44920],{"class":88},"208",[82,44922,44812],{"class":92},[82,44924,3355],{"class":88},[82,44926,3136],{"class":92},[82,44928,3361],{"class":88},[82,44930,44821],{"class":92},[82,44932,2964],{"class":88},[82,44934,40613],{"class":92},[82,44936,44937,44939,44941,44943,44945,44947,44949,44951,44953,44955,44957,44959,44961,44963,44965],{"class":84,"line":12408},[82,44938,44794],{"class":92},[82,44940,41023],{"class":88},[82,44942,3136],{"class":92},[82,44944,23632],{"class":88},[82,44946,44803],{"class":92},[82,44948,3372],{"class":88},[82,44950,3136],{"class":92},[82,44952,34073],{"class":88},[82,44954,44812],{"class":92},[82,44956,3550],{"class":88},[82,44958,3136],{"class":92},[82,44960,2964],{"class":88},[82,44962,44821],{"class":92},[82,44964,2964],{"class":88},[82,44966,40613],{"class":92},[82,44968,44969,44971,44973,44975,44977,44979,44981,44983,44985,44987,44989,44991,44993,44995,44997],{"class":84,"line":12414},[82,44970,44794],{"class":92},[82,44972,41023],{"class":88},[82,44974,3136],{"class":92},[82,44976,34640],{"class":88},[82,44978,44803],{"class":92},[82,44980,34640],{"class":88},[82,44982,3136],{"class":92},[82,44984,37436],{"class":88},[82,44986,44812],{"class":92},[82,44988,3550],{"class":88},[82,44990,3136],{"class":92},[82,44992,2964],{"class":88},[82,44994,44821],{"class":92},[82,44996,2964],{"class":88},[82,44998,40613],{"class":92},[82,45000,45001,45003,45005,45007,45009,45011,45013,45015,45018,45020,45022,45024,45026,45028,45030],{"class":84,"line":12435},[82,45002,44794],{"class":92},[82,45004,41023],{"class":88},[82,45006,3136],{"class":92},[82,45008,3372],{"class":88},[82,45010,44803],{"class":92},[82,45012,34640],{"class":88},[82,45014,3136],{"class":92},[82,45016,45017],{"class":88},"288",[82,45019,44812],{"class":92},[82,45021,2958],{"class":88},[82,45023,3136],{"class":92},[82,45025,2964],{"class":88},[82,45027,44821],{"class":92},[82,45029,2964],{"class":88},[82,45031,40613],{"class":92},[82,45033,45034,45036,45039,45041,45043,45045,45047,45049,45052,45054,45056,45058,45060,45062,45064],{"class":84,"line":12441},[82,45035,44794],{"class":92},[82,45037,45038],{"class":88},"528",[82,45040,3136],{"class":92},[82,45042,37436],{"class":88},[82,45044,44803],{"class":92},[82,45046,23632],{"class":88},[82,45048,3136],{"class":92},[82,45050,45051],{"class":88},"320",[82,45053,44812],{"class":92},[82,45055,2958],{"class":88},[82,45057,3136],{"class":92},[82,45059,34640],{"class":88},[82,45061,44821],{"class":92},[82,45063,34640],{"class":88},[82,45065,40613],{"class":92},[82,45067,45068,45070,45072,45074,45076,45078,45080,45082,45084,45086,45088,45090,45092],{"class":84,"line":12455},[82,45069,40663],{"class":92},[82,45071,33450],{"class":108},[82,45073,113],{"class":112},[82,45075,2841],{"class":88},[82,45077,3136],{"class":92},[82,45079,33505],{"class":108},[82,45081,113],{"class":112},[82,45083,1425],{"class":88},[82,45085,3136],{"class":92},[82,45087,33459],{"class":108},[82,45089,113],{"class":112},[82,45091,2283],{"class":88},[82,45093,119],{"class":92},[82,45095,45096],{"class":84,"line":12461},[82,45097,40692],{"class":92},[82,45099,45100,45102,45105,45107],{"class":84,"line":12488},[82,45101,33421],{"class":88},[82,45103,45104],{"class":92},".b5",[82,45106,113],{"class":112},[82,45108,40575],{"class":92},[82,45110,45111,45113,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140],{"class":84,"line":12497},[82,45112,44794],{"class":92},[82,45114,45115],{"class":88},"832",[82,45117,3136],{"class":92},[82,45119,37436],{"class":88},[82,45121,44803],{"class":92},[82,45123,23632],{"class":88},[82,45125,3136],{"class":92},[82,45127,45051],{"class":88},[82,45129,44812],{"class":92},[82,45131,2958],{"class":88},[82,45133,3136],{"class":92},[82,45135,34640],{"class":88},[82,45137,44821],{"class":92},[82,45139,34640],{"class":88},[82,45141,40613],{"class":92},[82,45143,45144,45146,45148,45150,45152,45154,45156,45158,45160,45162,45164,45166,45168,45170,45172],{"class":84,"line":12503},[82,45145,44794],{"class":92},[82,45147,45115],{"class":88},[82,45149,3136],{"class":92},[82,45151,37506],{"class":88},[82,45153,44803],{"class":92},[82,45155,44724],{"class":88},[82,45157,3136],{"class":92},[82,45159,37506],{"class":88},[82,45161,44812],{"class":92},[82,45163,3361],{"class":88},[82,45165,3136],{"class":92},[82,45167,34640],{"class":88},[82,45169,44821],{"class":92},[82,45171,34640],{"class":88},[82,45173,40613],{"class":92},[82,45175,45176,45179,45181,45183,45185],{"class":84,"line":12511},[82,45177,45178],{"class":92},"            nn.AdaptiveAvgPool2d((",[82,45180,2283],{"class":88},[82,45182,3136],{"class":92},[82,45184,2283],{"class":88},[82,45186,45187],{"class":92},")),\n",[82,45189,45190],{"class":84,"line":12516},[82,45191,41356],{"class":92},[82,45193,45194,45196,45199,45201,45203],{"class":84,"line":19189},[82,45195,41361],{"class":92},[82,45197,45198],{"class":88},"1024",[82,45200,3136],{"class":92},[82,45202,440],{"class":88},[82,45204,119],{"class":92},[82,45206,45207],{"class":84,"line":19195},[82,45208,40692],{"class":92},[82,45210,45211],{"class":84,"line":19218},[82,45212,45213],{"class":2828},"        # 对模型参数初始化\n",[82,45215,45216,45218,45220,45222,45224],{"class":84,"line":19224},[82,45217,5999],{"class":112},[82,45219,41434],{"class":92},[82,45221,603],{"class":112},[82,45223,41439],{"class":88},[82,45225,41442],{"class":92},[82,45227,45228,45230,45232],{"class":84,"line":19247},[82,45229,7237],{"class":112},[82,45231,41454],{"class":88},[82,45233,41457],{"class":92},[82,45235,45236,45238,45241,45243,45246,45248,45250,45252,45254],{"class":84,"line":19261},[82,45237,41467],{"class":92},[82,45239,45240],{"class":108},"mode",[82,45242,113],{"class":112},[82,45244,45245],{"class":96},"'fan_out'",[82,45247,3136],{"class":92},[82,45249,41470],{"class":108},[82,45251,113],{"class":112},[82,45253,41475],{"class":96},[82,45255,119],{"class":92},[82,45257,45258],{"class":84,"line":19281},[82,45259,45260],{"class":2828},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[82,45262,45263],{"class":84,"line":19287},[82,45264,45265],{"class":2828},"                # ② mode = 'fan_out'决定使用的fan值：\n",[82,45267,45268],{"class":84,"line":19298},[82,45269,45270],{"class":2828},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[82,45272,45273],{"class":84,"line":19321},[82,45274,45275],{"class":2828},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[82,45277,45278],{"class":84,"line":19343},[82,45279,45280],{"class":2828},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[82,45282,45283],{"class":84,"line":19348},[82,45284,45285],{"class":2828},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[82,45287,45288,45290,45292,45294,45296,45298],{"class":84,"line":19354},[82,45289,41487],{"class":112},[82,45291,41490],{"class":92},[82,45293,41493],{"class":112},[82,45295,2222],{"class":112},[82,45297,41498],{"class":88},[82,45299,669],{"class":92},[82,45301,45302,45304,45306],{"class":84,"line":19368},[82,45303,41510],{"class":92},[82,45305,2244],{"class":88},[82,45307,119],{"class":92},[82,45309,45310,45313,45315],{"class":84,"line":19381},[82,45311,45312],{"class":112},"                elif",[82,45314,41454],{"class":88},[82,45316,41529],{"class":92},[82,45318,45319,45322,45324,45326,45328],{"class":84,"line":19386},[82,45320,45321],{"class":92},"                    nn.init.normal_(m.weight,",[82,45323,2244],{"class":88},[82,45325,3136],{"class":92},[82,45327,41551],{"class":88},[82,45329,119],{"class":92},[82,45331,45332,45335,45337,45339,45341,45343],{"class":84,"line":19400},[82,45333,45334],{"class":112},"                    if",[82,45336,41490],{"class":92},[82,45338,41493],{"class":112},[82,45340,2222],{"class":112},[82,45342,41498],{"class":88},[82,45344,669],{"class":92},[82,45346,45347,45350,45352],{"class":84,"line":19405},[82,45348,45349],{"class":92},"                        nn.init.constant_(m.bias,",[82,45351,2244],{"class":88},[82,45353,119],{"class":92},[82,45355,45356],{"class":84,"line":19411},[82,45357,37731],{"class":2828},[82,45359,45360,45362,45364],{"class":84,"line":19416},[82,45361,33377],{"class":112},[82,45363,33669],{"class":2384},[82,45365,33672],{"class":92},[82,45367,45368,45370,45372,45374],{"class":84,"line":19430},[82,45369,33677],{"class":92},[82,45371,113],{"class":112},[82,45373,33399],{"class":88},[82,45375,45376],{"class":92},".b1(x)\n",[82,45378,45379,45381,45383,45385],{"class":84,"line":19435},[82,45380,33677],{"class":92},[82,45382,113],{"class":112},[82,45384,33399],{"class":88},[82,45386,45387],{"class":92},".b2(x)\n",[82,45389,45390,45392,45394,45396],{"class":84,"line":19440},[82,45391,33677],{"class":92},[82,45393,113],{"class":112},[82,45395,33399],{"class":88},[82,45397,45398],{"class":92},".b3(x)\n",[82,45400,45401,45403,45405,45407],{"class":84,"line":19454},[82,45402,33677],{"class":92},[82,45404,113],{"class":112},[82,45406,33399],{"class":88},[82,45408,45409],{"class":92},".b4(x)\n",[82,45411,45412,45414,45416,45418],{"class":84,"line":19466},[82,45413,33677],{"class":92},[82,45415,113],{"class":112},[82,45417,33399],{"class":88},[82,45419,45420],{"class":92},".b5(x)\n",[82,45422,45423,45425],{"class":84,"line":19471},[82,45424,2405],{"class":112},[82,45426,33785],{"class":92},[82,45428,45429],{"class":84,"line":19484},[82,45430,486],{"emptyLinePlaceholder":485},[82,45432,45433],{"class":84,"line":19489},[82,45434,45435],{"class":2828},"# 模型展示\n",[82,45437,45438,45440,45442,45444,45446],{"class":84,"line":19494},[82,45439,1237],{"class":112},[82,45441,33796],{"class":88},[82,45443,5548],{"class":112},[82,45445,33801],{"class":96},[82,45447,669],{"class":92},[82,45449,45450,45452,45454,45456,45458,45460,45462,45464,45466],{"class":84,"line":19499},[82,45451,33813],{"class":92},[82,45453,113],{"class":112},[82,45455,33028],{"class":92},[82,45457,33820],{"class":96},[82,45459,4307],{"class":112},[82,45461,33825],{"class":92},[82,45463,4304],{"class":112},[82,45465,33053],{"class":96},[82,45467,119],{"class":92},[82,45469,45470,45472,45474],{"class":84,"line":19512},[82,45471,33865],{"class":92},[82,45473,113],{"class":112},[82,45475,45476],{"class":92},"GoogLeNet(Inception).to(device)\n",[82,45478,45479,45481,45483,45485,45487,45489,45491,45493],{"class":84,"line":19517},[82,45480,611],{"class":88},[82,45482,33877],{"class":92},[82,45484,2283],{"class":88},[82,45486,3136],{"class":92},[82,45488,34073],{"class":88},[82,45490,3136],{"class":92},[82,45492,34073],{"class":88},[82,45494,33890],{"class":92},[26,45496,45497],{"start":157},[29,45498,41748],{},[73,45500,45502],{"className":75,"code":45501,"language":77,"meta":78,"style":78},"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",[32,45503,45504,45510,45516,45526,45532,45542,45552,45562,45572,45582,45586,45597,45607,45611,45615,45619,45627,45639,45649,45665,45675,45707,45721,45731,45741,45745,45755,45769,45779,45789,45799,45805,45809,45813,45817,45821,45825,45833,45853,45857,45861,45865,45869,45873,45889,45893,45897,45905,45909,45913,45921,45925,45929,45933,45941,45945,45949,45953,45957,45965,45969,45977,45981,45989,45993,46001,46005,46013,46017,46021,46029,46033,46037,46041,46053,46077,46091,46095,46099,46103,46111,46115,46123,46127,46135,46139,46147,46151,46159,46163,46171,46175,46187,46191,46199,46203,46211,46215,46219,46223,46227,46235,46239,46255,46259,46267,46271,46275,46279,46283,46287,46291,46295,46311,46315,46327,46331,46343,46347,46359,46363,46371,46375,46383,46387,46391,46395,46401,46405,46413,46417,46433,46437,46445,46449,46465,46477,46481,46493,46497,46501,46509,46513,46517,46525,46529,46537,46541,46549,46553,46557,46599,46641,46645,46649,46665,46669,46685,46689,46693,46701,46705,46709,46721,46759,46763,46767,46775,46779,46793,46803,46809,46815,46821,46827,46831,46835,46841,46845,46849,46857,46861,46879,46883,46887,46891,46907,46911,46915,46919,46923,46927,46947,46967,46971,46975,46979,46987,46995,46999,47015,47035,47055,47059,47063,47071,47079,47083,47087,47091,47103,47107,47117,47125,47142],{"__ignoreMap":78},[82,45505,45506,45508],{"class":84,"line":85},[82,45507,1123],{"class":112},[82,45509,34394],{"class":92},[82,45511,45512,45514],{"class":84,"line":157},[82,45513,1123],{"class":112},[82,45515,34401],{"class":92},[82,45517,45518,45520,45522,45524],{"class":84,"line":404},[82,45519,1123],{"class":112},[82,45521,34412],{"class":92},[82,45523,728],{"class":112},[82,45525,34417],{"class":92},[82,45527,45528,45530],{"class":84,"line":413},[82,45529,1123],{"class":112},[82,45531,32973],{"class":92},[82,45533,45534,45536,45538,45540],{"class":84,"line":508},[82,45535,1117],{"class":112},[82,45537,33989],{"class":92},[82,45539,1123],{"class":112},[82,45541,34434],{"class":92},[82,45543,45544,45546,45548,45550],{"class":84,"line":513},[82,45545,1117],{"class":112},[82,45547,33943],{"class":92},[82,45549,1123],{"class":112},[82,45551,33948],{"class":92},[82,45553,45554,45556,45558,45560],{"class":84,"line":1388},[82,45555,1117],{"class":112},[82,45557,33972],{"class":92},[82,45559,1123],{"class":112},[82,45561,33977],{"class":92},[82,45563,45564,45566,45568,45570],{"class":84,"line":1394},[82,45565,1123],{"class":112},[82,45567,33989],{"class":92},[82,45569,728],{"class":112},[82,45571,33994],{"class":92},[82,45573,45574,45576,45578,45580],{"class":84,"line":1399},[82,45575,1123],{"class":112},[82,45577,34006],{"class":92},[82,45579,728],{"class":112},[82,45581,34011],{"class":92},[82,45583,45584],{"class":84,"line":1430},[82,45585,34479],{"class":2828},[82,45587,45588,45590,45592,45594],{"class":84,"line":1818},[82,45589,1117],{"class":112},[82,45591,34486],{"class":92},[82,45593,1123],{"class":112},[82,45595,45596],{"class":92}," GoogLeNet, Inception\n",[82,45598,45599,45601,45603,45605],{"class":84,"line":2082},[82,45600,1117],{"class":112},[82,45602,33316],{"class":92},[82,45604,1123],{"class":112},[82,45606,33321],{"class":92},[82,45608,45609],{"class":84,"line":2233},[82,45610,486],{"emptyLinePlaceholder":485},[82,45612,45613],{"class":84,"line":2255},[82,45614,486],{"emptyLinePlaceholder":485},[82,45616,45617],{"class":84,"line":2260},[82,45618,34514],{"class":2828},[82,45620,45621,45623,45625],{"class":84,"line":2298},[82,45622,2381],{"class":112},[82,45624,34521],{"class":2384},[82,45626,2388],{"class":92},[82,45628,45629,45631,45633,45635,45637],{"class":84,"line":2303},[82,45630,34528],{"class":92},[82,45632,113],{"class":112},[82,45634,34029],{"class":92},[82,45636,34037],{"class":96},[82,45638,1363],{"class":92},[82,45640,45641,45643,45645,45647],{"class":84,"line":2321},[82,45642,34541],{"class":108},[82,45644,113],{"class":112},[82,45646,1205],{"class":88},[82,45648,1363],{"class":92},[82,45650,45651,45653,45655,45657,45659,45661,45663],{"class":84,"line":2533},[82,45652,34552],{"class":108},[82,45654,113],{"class":112},[82,45656,34065],{"class":92},[82,45658,34068],{"class":108},[82,45660,113],{"class":112},[82,45662,38015],{"class":88},[82,45664,34076],{"class":92},[82,45666,45667,45669,45671,45673],{"class":84,"line":2538},[82,45668,34569],{"class":108},[82,45670,113],{"class":112},[82,45672,1205],{"class":88},[82,45674,119],{"class":92},[82,45676,45677,45679,45681,45683,45685,45687,45689,45691,45693,45695,45697,45699,45701,45703,45705],{"class":84,"line":2548},[82,45678,34580],{"class":92},[82,45680,113],{"class":112},[82,45682,34585],{"class":92},[82,45684,34588],{"class":88},[82,45686,93],{"class":92},[82,45688,34593],{"class":88},[82,45690,3212],{"class":112},[82,45692,9950],{"class":88},[82,45694,34600],{"class":92},[82,45696,34588],{"class":88},[82,45698,93],{"class":92},[82,45700,34607],{"class":88},[82,45702,3212],{"class":112},[82,45704,9950],{"class":88},[82,45706,34614],{"class":92},[82,45708,45709,45711,45713,45715,45717,45719],{"class":84,"line":2579},[82,45710,34619],{"class":92},[82,45712,113],{"class":112},[82,45714,34624],{"class":92},[82,45716,34109],{"class":108},[82,45718,113],{"class":112},[82,45720,34114],{"class":92},[82,45722,45723,45725,45727,45729],{"class":84,"line":2585},[82,45724,34635],{"class":108},[82,45726,113],{"class":112},[82,45728,2958],{"class":88},[82,45730,1363],{"class":92},[82,45732,45733,45735,45737,45739],{"class":84,"line":4350},[82,45734,34647],{"class":108},[82,45736,113],{"class":112},[82,45738,1205],{"class":88},[82,45740,1363],{"class":92},[82,45742,45743],{"class":84,"line":4355},[82,45744,34658],{"class":2828},[82,45746,45747,45749,45751,45753],{"class":84,"line":4360},[82,45748,34663],{"class":108},[82,45750,113],{"class":112},[82,45752,3153],{"class":88},[82,45754,119],{"class":92},[82,45756,45757,45759,45761,45763,45765,45767],{"class":84,"line":4365},[82,45758,34674],{"class":92},[82,45760,113],{"class":112},[82,45762,34106],{"class":92},[82,45764,34109],{"class":108},[82,45766,113],{"class":112},[82,45768,34685],{"class":92},[82,45770,45771,45773,45775,45777],{"class":84,"line":4379},[82,45772,34690],{"class":108},[82,45774,113],{"class":112},[82,45776,2958],{"class":88},[82,45778,1363],{"class":92},[82,45780,45781,45783,45785,45787],{"class":84,"line":4384},[82,45782,34701],{"class":108},[82,45784,113],{"class":112},[82,45786,1205],{"class":88},[82,45788,1363],{"class":92},[82,45790,45791,45793,45795,45797],{"class":84,"line":5176},[82,45792,34712],{"class":108},[82,45794,113],{"class":112},[82,45796,3153],{"class":88},[82,45798,119],{"class":92},[82,45800,45801,45803],{"class":84,"line":5190},[82,45802,6685],{"class":112},[82,45804,34725],{"class":92},[82,45806,45807],{"class":84,"line":5198},[82,45808,486],{"emptyLinePlaceholder":485},[82,45810,45811],{"class":84,"line":5203},[82,45812,34734],{"class":2828},[82,45814,45815],{"class":84,"line":5209},[82,45816,34739],{"class":2828},[82,45818,45819],{"class":84,"line":5215},[82,45820,486],{"emptyLinePlaceholder":485},[82,45822,45823],{"class":84,"line":5220},[82,45824,34748],{"class":2828},[82,45826,45827,45829,45831],{"class":84,"line":10539},[82,45828,2381],{"class":112},[82,45830,34755],{"class":2384},[82,45832,34758],{"class":92},[82,45834,45835,45837,45839,45841,45843,45845,45847,45849,45851],{"class":84,"line":10563},[82,45836,33813],{"class":92},[82,45838,113],{"class":112},[82,45840,33028],{"class":92},[82,45842,33820],{"class":96},[82,45844,4307],{"class":112},[82,45846,33825],{"class":92},[82,45848,4304],{"class":112},[82,45850,34777],{"class":96},[82,45852,119],{"class":92},[82,45854,45855],{"class":84,"line":10568},[82,45856,486],{"emptyLinePlaceholder":485},[82,45858,45859],{"class":84,"line":10574},[82,45860,486],{"emptyLinePlaceholder":485},[82,45862,45863],{"class":84,"line":10601},[82,45864,34792],{"class":2828},[82,45866,45867],{"class":84,"line":10606},[82,45868,34797],{"class":2828},[82,45870,45871],{"class":84,"line":10612},[82,45872,34802],{"class":2828},[82,45874,45875,45877,45879,45881,45883,45885,45887],{"class":84,"line":10624},[82,45876,34807],{"class":92},[82,45878,113],{"class":112},[82,45880,34812],{"class":92},[82,45882,34815],{"class":108},[82,45884,113],{"class":112},[82,45886,34820],{"class":88},[82,45888,119],{"class":92},[82,45890,45891],{"class":84,"line":10636},[82,45892,486],{"emptyLinePlaceholder":485},[82,45894,45895],{"class":84,"line":10648},[82,45896,34831],{"class":2828},[82,45898,45899,45901,45903],{"class":84,"line":12307},[82,45900,34836],{"class":92},[82,45902,113],{"class":112},[82,45904,34841],{"class":92},[82,45906,45907],{"class":84,"line":12332},[82,45908,486],{"emptyLinePlaceholder":485},[82,45910,45911],{"class":84,"line":12355},[82,45912,34850],{"class":2828},[82,45914,45915,45917,45919],{"class":84,"line":12379},[82,45916,33865],{"class":92},[82,45918,113],{"class":112},[82,45920,34859],{"class":92},[82,45922,45923],{"class":84,"line":12384},[82,45924,34864],{"class":2828},[82,45926,45927],{"class":84,"line":12389},[82,45928,34869],{"class":2828},[82,45930,45931],{"class":84,"line":12394},[82,45932,34874],{"class":2828},[82,45934,45935,45937,45939],{"class":84,"line":12403},[82,45936,34879],{"class":92},[82,45938,113],{"class":112},[82,45940,34884],{"class":92},[82,45942,45943],{"class":84,"line":12408},[82,45944,486],{"emptyLinePlaceholder":485},[82,45946,45947],{"class":84,"line":12414},[82,45948,486],{"emptyLinePlaceholder":485},[82,45950,45951],{"class":84,"line":12435},[82,45952,34897],{"class":2828},[82,45954,45955],{"class":84,"line":12441},[82,45956,34902],{"class":2828},[82,45958,45959,45961,45963],{"class":84,"line":12455},[82,45960,34907],{"class":92},[82,45962,113],{"class":112},[82,45964,34912],{"class":88},[82,45966,45967],{"class":84,"line":12461},[82,45968,34917],{"class":2828},[82,45970,45971,45973,45975],{"class":84,"line":12488},[82,45972,34922],{"class":92},[82,45974,113],{"class":112},[82,45976,34927],{"class":92},[82,45978,45979],{"class":84,"line":12497},[82,45980,34932],{"class":2828},[82,45982,45983,45985,45987],{"class":84,"line":12503},[82,45984,34937],{"class":92},[82,45986,113],{"class":112},[82,45988,34927],{"class":92},[82,45990,45991],{"class":84,"line":12511},[82,45992,34946],{"class":2828},[82,45994,45995,45997,45999],{"class":84,"line":12516},[82,45996,34951],{"class":92},[82,45998,113],{"class":112},[82,46000,34927],{"class":92},[82,46002,46003],{"class":84,"line":19189},[82,46004,34960],{"class":2828},[82,46006,46007,46009,46011],{"class":84,"line":19195},[82,46008,34965],{"class":92},[82,46010,113],{"class":112},[82,46012,34927],{"class":92},[82,46014,46015],{"class":84,"line":19218},[82,46016,486],{"emptyLinePlaceholder":485},[82,46018,46019],{"class":84,"line":19224},[82,46020,34978],{"class":2828},[82,46022,46023,46025,46027],{"class":84,"line":19247},[82,46024,34983],{"class":92},[82,46026,113],{"class":112},[82,46028,34988],{"class":92},[82,46030,46031],{"class":84,"line":19261},[82,46032,486],{"emptyLinePlaceholder":485},[82,46034,46035],{"class":84,"line":19281},[82,46036,486],{"emptyLinePlaceholder":485},[82,46038,46039],{"class":84,"line":19287},[82,46040,35001],{"class":2828},[82,46042,46043,46045,46047,46049,46051],{"class":84,"line":19298},[82,46044,1888],{"class":112},[82,46046,35008],{"class":92},[82,46048,603],{"class":112},[82,46050,35013],{"class":88},[82,46052,35016],{"class":92},[82,46054,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075],{"class":84,"line":19321},[82,46056,1901],{"class":88},[82,46058,93],{"class":92},[82,46060,35025],{"class":96},[82,46062,35028],{"class":88},[82,46064,1147],{"class":96},[82,46066,35028],{"class":88},[82,46068,216],{"class":96},[82,46070,35037],{"class":92},[82,46072,3288],{"class":112},[82,46074,2283],{"class":88},[82,46076,33074],{"class":92},[82,46078,46079,46081,46083,46085,46087,46089],{"class":84,"line":19343},[82,46080,1901],{"class":88},[82,46082,93],{"class":92},[82,46084,35052],{"class":96},[82,46086,3212],{"class":112},[82,46088,440],{"class":88},[82,46090,119],{"class":92},[82,46092,46093],{"class":84,"line":19348},[82,46094,486],{"emptyLinePlaceholder":485},[82,46096,46097],{"class":84,"line":19354},[82,46098,35067],{"class":2828},[82,46100,46101],{"class":84,"line":19368},[82,46102,35072],{"class":2828},[82,46104,46105,46107,46109],{"class":84,"line":19381},[82,46106,35077],{"class":92},[82,46108,113],{"class":112},[82,46110,34912],{"class":88},[82,46112,46113],{"class":84,"line":19386},[82,46114,35086],{"class":2828},[82,46116,46117,46119,46121],{"class":84,"line":19400},[82,46118,35091],{"class":92},[82,46120,113],{"class":112},[82,46122,5683],{"class":88},[82,46124,46125],{"class":84,"line":19405},[82,46126,35100],{"class":2828},[82,46128,46129,46131,46133],{"class":84,"line":19411},[82,46130,35105],{"class":92},[82,46132,113],{"class":112},[82,46134,34912],{"class":88},[82,46136,46137],{"class":84,"line":19416},[82,46138,35114],{"class":2828},[82,46140,46141,46143,46145],{"class":84,"line":19430},[82,46142,35119],{"class":92},[82,46144,113],{"class":112},[82,46146,5683],{"class":88},[82,46148,46149],{"class":84,"line":19435},[82,46150,35128],{"class":2828},[82,46152,46153,46155,46157],{"class":84,"line":19440},[82,46154,35133],{"class":92},[82,46156,113],{"class":112},[82,46158,5683],{"class":88},[82,46160,46161],{"class":84,"line":19454},[82,46162,35142],{"class":2828},[82,46164,46165,46167,46169],{"class":84,"line":19466},[82,46166,35147],{"class":92},[82,46168,113],{"class":112},[82,46170,5683],{"class":88},[82,46172,46173],{"class":84,"line":19471},[82,46174,35156],{"class":2828},[82,46176,46177,46179,46181,46183,46185],{"class":84,"line":19484},[82,46178,5999],{"class":112},[82,46180,34173],{"class":92},[82,46182,603],{"class":112},[82,46184,34178],{"class":88},[82,46186,35169],{"class":92},[82,46188,46189],{"class":84,"line":19489},[82,46190,35174],{"class":2828},[82,46192,46193,46195,46197],{"class":84,"line":19494},[82,46194,35179],{"class":92},[82,46196,113],{"class":112},[82,46198,35184],{"class":92},[82,46200,46201],{"class":84,"line":19499},[82,46202,35189],{"class":2828},[82,46204,46205,46207,46209],{"class":84,"line":19512},[82,46206,35194],{"class":92},[82,46208,113],{"class":112},[82,46210,35199],{"class":92},[82,46212,46213],{"class":84,"line":19517},[82,46214,35205],{"class":2828},[82,46216,46217],{"class":84,"line":35202},[82,46218,35211],{"class":92},[82,46220,46221],{"class":84,"line":35208},[82,46222,35217],{"class":2828},[82,46224,46225],{"class":84,"line":35214},[82,46226,35223],{"class":2828},[82,46228,46229,46231,46233],{"class":84,"line":35220},[82,46230,35229],{"class":92},[82,46232,113],{"class":112},[82,46234,35234],{"class":92},[82,46236,46237],{"class":84,"line":35226},[82,46238,35240],{"class":2828},[82,46240,46241,46243,46245,46247,46249,46251,46253],{"class":84,"line":35237},[82,46242,35246],{"class":92},[82,46244,113],{"class":112},[82,46246,35251],{"class":92},[82,46248,35254],{"class":108},[82,46250,113],{"class":112},[82,46252,2283],{"class":88},[82,46254,119],{"class":92},[82,46256,46257],{"class":84,"line":35243},[82,46258,35266],{"class":2828},[82,46260,46261,46263,46265],{"class":84,"line":35263},[82,46262,35272],{"class":92},[82,46264,113],{"class":112},[82,46266,35277],{"class":92},[82,46268,46269],{"class":84,"line":35269},[82,46270,35283],{"class":2828},[82,46272,46273],{"class":84,"line":35280},[82,46274,35289],{"class":92},[82,46276,46277],{"class":84,"line":35286},[82,46278,35295],{"class":2828},[82,46280,46281],{"class":84,"line":35292},[82,46282,35301],{"class":92},[82,46284,46285],{"class":84,"line":35298},[82,46286,35307],{"class":2828},[82,46288,46289],{"class":84,"line":35304},[82,46290,35313],{"class":92},[82,46292,46293],{"class":84,"line":35310},[82,46294,35319],{"class":2828},[82,46296,46297,46299,46301,46303,46305,46307,46309],{"class":84,"line":35316},[82,46298,35325],{"class":92},[82,46300,12068],{"class":112},[82,46302,35330],{"class":92},[82,46304,3212],{"class":112},[82,46306,35335],{"class":92},[82,46308,2244],{"class":88},[82,46310,119],{"class":92},[82,46312,46313],{"class":84,"line":35322},[82,46314,35345],{"class":2828},[82,46316,46317,46319,46321,46323,46325],{"class":84,"line":35342},[82,46318,35351],{"class":92},[82,46320,12068],{"class":112},[82,46322,35356],{"class":92},[82,46324,5548],{"class":112},[82,46326,35361],{"class":92},[82,46328,46329],{"class":84,"line":35348},[82,46330,35367],{"class":2828},[82,46332,46333,46335,46337,46339,46341],{"class":84,"line":35364},[82,46334,35373],{"class":92},[82,46336,12068],{"class":112},[82,46338,35335],{"class":92},[82,46340,2244],{"class":88},[82,46342,119],{"class":92},[82,46344,46345],{"class":84,"line":35370},[82,46346,35387],{"class":2828},[82,46348,46349,46351,46353,46355,46357],{"class":84,"line":35384},[82,46350,5999],{"class":112},[82,46352,35395],{"class":92},[82,46354,603],{"class":112},[82,46356,34178],{"class":88},[82,46358,35402],{"class":92},[82,46360,46361],{"class":84,"line":35390},[82,46362,35408],{"class":2828},[82,46364,46365,46367,46369],{"class":84,"line":35405},[82,46366,35179],{"class":92},[82,46368,113],{"class":112},[82,46370,35184],{"class":92},[82,46372,46373],{"class":84,"line":35411},[82,46374,35423],{"class":2828},[82,46376,46377,46379,46381],{"class":84,"line":35420},[82,46378,35194],{"class":92},[82,46380,113],{"class":112},[82,46382,35199],{"class":92},[82,46384,46385],{"class":84,"line":35426},[82,46386,35438],{"class":2828},[82,46388,46389],{"class":84,"line":35435},[82,46390,35444],{"class":92},[82,46392,46393],{"class":84,"line":35441},[82,46394,38922],{"class":2828},[82,46396,46397,46399],{"class":84,"line":35447},[82,46398,35450],{"class":112},[82,46400,35453],{"class":92},[82,46402,46403],{"class":84,"line":35456},[82,46404,35459],{"class":2828},[82,46406,46407,46409,46411],{"class":84,"line":35462},[82,46408,38937],{"class":92},[82,46410,113],{"class":112},[82,46412,35234],{"class":92},[82,46414,46415],{"class":84,"line":35473},[82,46416,35476],{"class":2828},[82,46418,46419,46421,46423,46425,46427,46429,46431],{"class":84,"line":35479},[82,46420,38950],{"class":92},[82,46422,113],{"class":112},[82,46424,35251],{"class":92},[82,46426,35254],{"class":108},[82,46428,113],{"class":112},[82,46430,2283],{"class":88},[82,46432,119],{"class":92},[82,46434,46435],{"class":84,"line":35498},[82,46436,35501],{"class":2828},[82,46438,46439,46441,46443],{"class":84,"line":35504},[82,46440,38971],{"class":92},[82,46442,113],{"class":112},[82,46444,35277],{"class":92},[82,46446,46447],{"class":84,"line":35515},[82,46448,35518],{"class":2828},[82,46450,46451,46453,46455,46457,46459,46461,46463],{"class":84,"line":35521},[82,46452,38984],{"class":92},[82,46454,12068],{"class":112},[82,46456,38989],{"class":92},[82,46458,3212],{"class":112},[82,46460,35335],{"class":92},[82,46462,2244],{"class":88},[82,46464,119],{"class":92},[82,46466,46467,46469,46471,46473,46475],{"class":84,"line":35541},[82,46468,39002],{"class":92},[82,46470,12068],{"class":112},[82,46472,35356],{"class":92},[82,46474,5548],{"class":112},[82,46476,35361],{"class":92},[82,46478,46479],{"class":84,"line":35557},[82,46480,39015],{"class":2828},[82,46482,46483,46485,46487,46489,46491],{"class":84,"line":35563},[82,46484,39020],{"class":92},[82,46486,12068],{"class":112},[82,46488,35335],{"class":92},[82,46490,2244],{"class":88},[82,46492,119],{"class":92},[82,46494,46495],{"class":84,"line":35577},[82,46496,35580],{"class":2828},[82,46498,46499],{"class":84,"line":35583},[82,46500,35586],{"class":2828},[82,46502,46503,46505,46507],{"class":84,"line":35589},[82,46504,35592],{"class":92},[82,46506,1147],{"class":112},[82,46508,35597],{"class":92},[82,46510,46511],{"class":84,"line":35600},[82,46512,35603],{"class":2828},[82,46514,46515],{"class":84,"line":35606},[82,46516,35609],{"class":2828},[82,46518,46519,46521,46523],{"class":84,"line":35612},[82,46520,35615],{"class":92},[82,46522,1147],{"class":112},[82,46524,35597],{"class":92},[82,46526,46527],{"class":84,"line":35622},[82,46528,35625],{"class":2828},[82,46530,46531,46533,46535],{"class":84,"line":35628},[82,46532,35631],{"class":92},[82,46534,1147],{"class":112},[82,46536,35636],{"class":92},[82,46538,46539],{"class":84,"line":35639},[82,46540,35642],{"class":2828},[82,46542,46543,46545,46547],{"class":84,"line":35645},[82,46544,35648],{"class":92},[82,46546,1147],{"class":112},[82,46548,35636],{"class":92},[82,46550,46551],{"class":84,"line":35655},[82,46552,486],{"emptyLinePlaceholder":485},[82,46554,46555],{"class":84,"line":35660},[82,46556,35663],{"class":2828},[82,46558,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597],{"class":84,"line":35666},[82,46560,1901],{"class":88},[82,46562,93],{"class":92},[82,46564,6188],{"class":96},[82,46566,35028],{"class":88},[82,46568,35677],{"class":96},[82,46570,3645],{"class":88},[82,46572,35682],{"class":112},[82,46574,3695],{"class":88},[82,46576,35687],{"class":96},[82,46578,3645],{"class":88},[82,46580,35682],{"class":112},[82,46582,3695],{"class":88},[82,46584,6188],{"class":96},[82,46586,35698],{"class":92},[82,46588,3288],{"class":112},[82,46590,2283],{"class":88},[82,46592,35705],{"class":92},[82,46594,3288],{"class":112},[82,46596,2283],{"class":88},[82,46598,35712],{"class":92},[82,46600,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639],{"class":84,"line":35715},[82,46602,1901],{"class":88},[82,46604,93],{"class":92},[82,46606,6188],{"class":96},[82,46608,35028],{"class":88},[82,46610,35726],{"class":96},[82,46612,3645],{"class":88},[82,46614,35682],{"class":112},[82,46616,3695],{"class":88},[82,46618,35735],{"class":96},[82,46620,3645],{"class":88},[82,46622,35682],{"class":112},[82,46624,3695],{"class":88},[82,46626,6188],{"class":96},[82,46628,35746],{"class":92},[82,46630,3288],{"class":112},[82,46632,2283],{"class":88},[82,46634,35753],{"class":92},[82,46636,3288],{"class":112},[82,46638,2283],{"class":88},[82,46640,35712],{"class":92},[82,46642,46643],{"class":84,"line":35762},[82,46644,486],{"emptyLinePlaceholder":485},[82,46646,46647],{"class":84,"line":35767},[82,46648,35770],{"class":2828},[82,46650,46651,46653,46655,46657,46659,46661,46663],{"class":84,"line":35773},[82,46652,5096],{"class":112},[82,46654,35778],{"class":92},[82,46656,3288],{"class":112},[82,46658,2283],{"class":88},[82,46660,3689],{"class":92},[82,46662,3709],{"class":112},[82,46664,35789],{"class":92},[82,46666,46667],{"class":84,"line":35792},[82,46668,35795],{"class":2828},[82,46670,46671,46673,46675,46677,46679,46681,46683],{"class":84,"line":35798},[82,46672,35801],{"class":92},[82,46674,2811],{"class":88},[82,46676,113],{"class":112},[82,46678,35808],{"class":92},[82,46680,3288],{"class":112},[82,46682,2283],{"class":88},[82,46684,875],{"class":92},[82,46686,46687],{"class":84,"line":35817},[82,46688,35820],{"class":2828},[82,46690,46691],{"class":84,"line":35823},[82,46692,35826],{"class":2828},[82,46694,46695,46697,46699],{"class":84,"line":35829},[82,46696,35832],{"class":92},[82,46698,113],{"class":112},[82,46700,34884],{"class":92},[82,46702,46703],{"class":84,"line":35839},[82,46704,486],{"emptyLinePlaceholder":485},[82,46706,46707],{"class":84,"line":35844},[82,46708,35847],{"class":2828},[82,46710,46711,46713,46715,46717,46719],{"class":84,"line":35850},[82,46712,35853],{"class":92},[82,46714,113],{"class":112},[82,46716,35858],{"class":92},[82,46718,3288],{"class":112},[82,46720,35863],{"class":92},[82,46722,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757],{"class":84,"line":35866},[82,46724,1901],{"class":88},[82,46726,93],{"class":92},[82,46728,35873],{"class":96},[82,46730,3645],{"class":88},[82,46732,35878],{"class":112},[82,46734,3695],{"class":88},[82,46736,3300],{"class":96},[82,46738,3645],{"class":88},[82,46740,35878],{"class":112},[82,46742,3695],{"class":88},[82,46744,35891],{"class":96},[82,46746,35894],{"class":92},[82,46748,35897],{"class":112},[82,46750,3656],{"class":88},[82,46752,35902],{"class":92},[82,46754,3086],{"class":112},[82,46756,3656],{"class":88},[82,46758,33074],{"class":92},[82,46760,46761],{"class":84,"line":35911},[82,46762,39299],{"class":2828},[82,46764,46765],{"class":84,"line":35917},[82,46766,39304],{"class":2828},[82,46768,46769,46771,46773],{"class":84,"line":35923},[82,46770,39309],{"class":92},[82,46772,35935],{"class":96},[82,46774,119],{"class":92},[82,46776,46777],{"class":84,"line":35929},[82,46778,35955],{"class":2828},[82,46780,46781,46783,46785,46787,46789,46791],{"class":84,"line":35940},[82,46782,35961],{"class":92},[82,46784,113],{"class":112},[82,46786,35966],{"class":92},[82,46788,35969],{"class":108},[82,46790,113],{"class":112},[82,46792,4161],{"class":92},[82,46794,46795,46797,46799,46801],{"class":84,"line":35946},[82,46796,35979],{"class":96},[82,46798,3608],{"class":92},[82,46800,35984],{"class":88},[82,46802,35987],{"class":92},[82,46804,46805,46807],{"class":84,"line":35952},[82,46806,35993],{"class":96},[82,46808,35996],{"class":92},[82,46810,46811,46813],{"class":84,"line":35958},[82,46812,36002],{"class":96},[82,46814,36005],{"class":92},[82,46816,46817,46819],{"class":84,"line":35976},[82,46818,36011],{"class":96},[82,46820,36014],{"class":92},[82,46822,46823,46825],{"class":84,"line":35990},[82,46824,36020],{"class":96},[82,46826,36023],{"class":92},[82,46828,46829],{"class":84,"line":35999},[82,46830,36029],{"class":92},[82,46832,46833],{"class":84,"line":36008},[82,46834,36035],{"class":2828},[82,46836,46837,46839],{"class":84,"line":36017},[82,46838,6685],{"class":112},[82,46840,36043],{"class":92},[82,46842,46843],{"class":84,"line":36026},[82,46844,486],{"emptyLinePlaceholder":485},[82,46846,46847],{"class":84,"line":36032},[82,46848,36054],{"class":2828},[82,46850,46851,46853,46855],{"class":84,"line":36038},[82,46852,2381],{"class":112},[82,46854,36062],{"class":2384},[82,46856,36065],{"class":92},[82,46858,46859],{"class":84,"line":36046},[82,46860,36071],{"class":2828},[82,46862,46863,46865,46867,46869,46871,46873,46875,46877],{"class":84,"line":36051},[82,46864,36077],{"class":92},[82,46866,34265],{"class":108},[82,46868,113],{"class":112},[82,46870,93],{"class":92},[82,46872,3254],{"class":88},[82,46874,3136],{"class":92},[82,46876,3051],{"class":88},[82,46878,33074],{"class":92},[82,46880,46881],{"class":84,"line":36057},[82,46882,36097],{"class":2828},[82,46884,46885],{"class":84,"line":36068},[82,46886,36103],{"class":2828},[82,46888,46889],{"class":84,"line":36074},[82,46890,36109],{"class":2828},[82,46892,46893,46895,46897,46899,46901,46903,46905],{"class":84,"line":36094},[82,46894,34299],{"class":92},[82,46896,2283],{"class":88},[82,46898,3136],{"class":92},[82,46900,1425],{"class":88},[82,46902,3136],{"class":92},[82,46904,2283],{"class":88},[82,46906,119],{"class":92},[82,46908,46909],{"class":84,"line":36100},[82,46910,36132],{"class":2828},[82,46912,46913],{"class":84,"line":36106},[82,46914,36138],{"class":2828},[82,46916,46917],{"class":84,"line":36112},[82,46918,36144],{"class":2828},[82,46920,46921],{"class":84,"line":36129},[82,46922,36150],{"class":2828},[82,46924,46925],{"class":84,"line":36135},[82,46926,36156],{"class":2828},[82,46928,46929,46931,46933,46935,46937,46939,46941,46943,46945],{"class":84,"line":36141},[82,46930,36162],{"class":92},[82,46932,36165],{"class":96},[82,46934,36168],{"class":92},[82,46936,36171],{"class":96},[82,46938,3136],{"class":92},[82,46940,36176],{"class":108},[82,46942,113],{"class":112},[82,46944,36181],{"class":96},[82,46946,119],{"class":92},[82,46948,46949,46951,46953,46955,46957,46959,46961,46963,46965],{"class":84,"line":36147},[82,46950,36162],{"class":92},[82,46952,36165],{"class":96},[82,46954,36193],{"class":92},[82,46956,36196],{"class":96},[82,46958,3136],{"class":92},[82,46960,36176],{"class":108},[82,46962,113],{"class":112},[82,46964,36205],{"class":96},[82,46966,119],{"class":92},[82,46968,46969],{"class":84,"line":36153},[82,46970,36213],{"class":2828},[82,46972,46973],{"class":84,"line":36159},[82,46974,36219],{"class":92},[82,46976,46977],{"class":84,"line":36186},[82,46978,36225],{"class":2828},[82,46980,46981,46983,46985],{"class":84,"line":36210},[82,46982,36231],{"class":92},[82,46984,36234],{"class":96},[82,46986,119],{"class":92},[82,46988,46989,46991,46993],{"class":84,"line":36216},[82,46990,36242],{"class":92},[82,46992,36245],{"class":96},[82,46994,119],{"class":92},[82,46996,46997],{"class":84,"line":36222},[82,46998,36253],{"class":2828},[82,47000,47001,47003,47005,47007,47009,47011,47013],{"class":84,"line":36228},[82,47002,34299],{"class":92},[82,47004,2283],{"class":88},[82,47006,3136],{"class":92},[82,47008,1425],{"class":88},[82,47010,3136],{"class":92},[82,47012,1425],{"class":88},[82,47014,119],{"class":92},[82,47016,47017,47019,47021,47023,47025,47027,47029,47031,47033],{"class":84,"line":36239},[82,47018,36162],{"class":92},[82,47020,36165],{"class":96},[82,47022,36280],{"class":92},[82,47024,36171],{"class":96},[82,47026,3136],{"class":92},[82,47028,36176],{"class":108},[82,47030,113],{"class":112},[82,47032,36291],{"class":96},[82,47034,119],{"class":92},[82,47036,47037,47039,47041,47043,47045,47047,47049,47051,47053],{"class":84,"line":36250},[82,47038,36162],{"class":92},[82,47040,36165],{"class":96},[82,47042,36303],{"class":92},[82,47044,36196],{"class":96},[82,47046,3136],{"class":92},[82,47048,36176],{"class":108},[82,47050,113],{"class":112},[82,47052,36314],{"class":96},[82,47054,119],{"class":92},[82,47056,47057],{"class":84,"line":36256},[82,47058,36322],{"class":2828},[82,47060,47061],{"class":84,"line":36273},[82,47062,36219],{"class":92},[82,47064,47065,47067,47069],{"class":84,"line":36296},[82,47066,36231],{"class":92},[82,47068,36165],{"class":96},[82,47070,119],{"class":92},[82,47072,47073,47075,47077],{"class":84,"line":36319},[82,47074,36242],{"class":92},[82,47076,36344],{"class":96},[82,47078,119],{"class":92},[82,47080,47081],{"class":84,"line":36325},[82,47082,36352],{"class":92},[82,47084,47085],{"class":84,"line":36330},[82,47086,486],{"emptyLinePlaceholder":485},[82,47088,47089],{"class":84,"line":36339},[82,47090,36363],{"class":2828},[82,47092,47093,47095,47097,47099,47101],{"class":84,"line":36349},[82,47094,1237],{"class":112},[82,47096,33796],{"class":88},[82,47098,5548],{"class":112},[82,47100,33801],{"class":96},[82,47102,669],{"class":92},[82,47104,47105],{"class":84,"line":36355},[82,47106,36382],{"class":2828},[82,47108,47109,47112,47114],{"class":84,"line":36360},[82,47110,47111],{"class":92},"    GoogLeNet",[82,47113,113],{"class":112},[82,47115,47116],{"class":92},"GoogLeNet(Inception)\n",[82,47118,47119,47121,47123],{"class":84,"line":36366},[82,47120,36399],{"class":92},[82,47122,113],{"class":112},[82,47124,36404],{"class":92},[82,47126,47127,47129,47131,47134,47136,47138,47140],{"class":84,"line":36379},[82,47128,35961],{"class":92},[82,47130,113],{"class":112},[82,47132,47133],{"class":92},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[82,47135,36417],{"class":108},[82,47137,113],{"class":112},[82,47139,3700],{"class":88},[82,47141,119],{"class":92},[82,47143,47144],{"class":84,"line":36385},[82,47145,36429],{"class":92},[26,47147,47148],{"start":404},[29,47149,43139],{},[73,47151,47153],{"className":75,"code":47152,"language":77,"meta":78,"style":78},"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",[32,47154,47155,47161,47171,47181,47185,47195,47206,47210,47214,47218,47226,47242,47252,47268,47278,47292,47296,47306,47316,47326,47332,47336,47340,47348,47352,47368,47376,47380,47384,47392,47400,47404,47408,47412,47416,47422,47426,47436,47444,47452,47456,47460,47464,47472,47476,47492,47496,47500,47504,47516,47520,47532,47536,47540,47552,47556,47566,47570,47574,47586,47590,47598,47602,47606,47614,47618,47626,47630,47634,47638,47642,47646,47662,47670,47674,47678,47726,47732,47736,47746,47754,47762,47766,47770,47774,47778,47786,47790,47806,47810,47818,47826],{"__ignoreMap":78},[82,47156,47157,47159],{"class":84,"line":85},[82,47158,1123],{"class":112},[82,47160,32973],{"class":92},[82,47162,47163,47165,47167,47169],{"class":84,"line":157},[82,47164,1123],{"class":112},[82,47166,33989],{"class":92},[82,47168,728],{"class":112},[82,47170,33994],{"class":92},[82,47172,47173,47175,47177,47179],{"class":84,"line":404},[82,47174,1117],{"class":112},[82,47176,33972],{"class":92},[82,47178,1123],{"class":112},[82,47180,33977],{"class":92},[82,47182,47183],{"class":84,"line":413},[82,47184,36490],{"class":2828},[82,47186,47187,47189,47191,47193],{"class":84,"line":508},[82,47188,1117],{"class":112},[82,47190,33943],{"class":92},[82,47192,1123],{"class":112},[82,47194,33948],{"class":92},[82,47196,47197,47199,47201,47203],{"class":84,"line":513},[82,47198,1117],{"class":112},[82,47200,34486],{"class":92},[82,47202,1123],{"class":112},[82,47204,47205],{"class":92}," GoogLeNet,Inception\n",[82,47207,47208],{"class":84,"line":1388},[82,47209,486],{"emptyLinePlaceholder":485},[82,47211,47212],{"class":84,"line":1394},[82,47213,486],{"emptyLinePlaceholder":485},[82,47215,47216],{"class":84,"line":1399},[82,47217,36519],{"class":2828},[82,47219,47220,47222,47224],{"class":84,"line":1430},[82,47221,2381],{"class":112},[82,47223,36526],{"class":2384},[82,47225,2388],{"class":92},[82,47227,47228,47230,47232,47234,47236,47238,47240],{"class":84,"line":1818},[82,47229,36533],{"class":92},[82,47231,113],{"class":112},[82,47233,34029],{"class":92},[82,47235,34032],{"class":108},[82,47237,113],{"class":112},[82,47239,34037],{"class":96},[82,47241,1363],{"class":92},[82,47243,47244,47246,47248,47250],{"class":84,"line":2082},[82,47245,36550],{"class":108},[82,47247,113],{"class":112},[82,47249,1415],{"class":88},[82,47251,1363],{"class":92},[82,47253,47254,47256,47258,47260,47262,47264,47266],{"class":84,"line":2233},[82,47255,36561],{"class":108},[82,47257,113],{"class":112},[82,47259,34065],{"class":92},[82,47261,34068],{"class":108},[82,47263,113],{"class":112},[82,47265,38015],{"class":88},[82,47267,34076],{"class":92},[82,47269,47270,47272,47274,47276],{"class":84,"line":2255},[82,47271,36578],{"class":108},[82,47273,113],{"class":112},[82,47275,1205],{"class":88},[82,47277,119],{"class":92},[82,47279,47280,47282,47284,47286,47288,47290],{"class":84,"line":2260},[82,47281,36589],{"class":92},[82,47283,113],{"class":112},[82,47285,34106],{"class":92},[82,47287,34109],{"class":108},[82,47289,113],{"class":112},[82,47291,36600],{"class":92},[82,47293,47294],{"class":84,"line":2298},[82,47295,36605],{"class":2828},[82,47297,47298,47300,47302,47304],{"class":84,"line":2303},[82,47299,36610],{"class":108},[82,47301,113],{"class":112},[82,47303,2283],{"class":88},[82,47305,1363],{"class":92},[82,47307,47308,47310,47312,47314],{"class":84,"line":2321},[82,47309,36621],{"class":108},[82,47311,113],{"class":112},[82,47313,1205],{"class":88},[82,47315,1363],{"class":92},[82,47317,47318,47320,47322,47324],{"class":84,"line":2533},[82,47319,36632],{"class":108},[82,47321,113],{"class":112},[82,47323,2244],{"class":88},[82,47325,119],{"class":92},[82,47327,47328,47330],{"class":84,"line":2538},[82,47329,6685],{"class":112},[82,47331,36645],{"class":92},[82,47333,47334],{"class":84,"line":2548},[82,47335,486],{"emptyLinePlaceholder":485},[82,47337,47338],{"class":84,"line":2579},[82,47339,36654],{"class":2828},[82,47341,47342,47344,47346],{"class":84,"line":2585},[82,47343,2381],{"class":112},[82,47345,36661],{"class":2384},[82,47347,36664],{"class":92},[82,47349,47350],{"class":84,"line":4350},[82,47351,36669],{"class":2828},[82,47353,47354,47356,47358,47360,47362,47364,47366],{"class":84,"line":4355},[82,47355,33813],{"class":92},[82,47357,113],{"class":112},[82,47359,33820],{"class":96},[82,47361,4307],{"class":112},[82,47363,33825],{"class":92},[82,47365,4304],{"class":112},[82,47367,36686],{"class":96},[82,47369,47370,47372,47374],{"class":84,"line":4360},[82,47371,33865],{"class":92},[82,47373,113],{"class":112},[82,47375,34859],{"class":92},[82,47377,47378],{"class":84,"line":4365},[82,47379,486],{"emptyLinePlaceholder":485},[82,47381,47382],{"class":84,"line":4379},[82,47383,36703],{"class":2828},[82,47385,47386,47388,47390],{"class":84,"line":4384},[82,47387,36708],{"class":92},[82,47389,113],{"class":112},[82,47391,34912],{"class":88},[82,47393,47394,47396,47398],{"class":84,"line":5176},[82,47395,36717],{"class":92},[82,47397,113],{"class":112},[82,47399,5683],{"class":88},[82,47401,47402],{"class":84,"line":5190},[82,47403,486],{"emptyLinePlaceholder":485},[82,47405,47406],{"class":84,"line":5198},[82,47407,36730],{"class":2828},[82,47409,47410],{"class":84,"line":5203},[82,47411,36735],{"class":2828},[82,47413,47414],{"class":84,"line":5209},[82,47415,36740],{"class":2828},[82,47417,47418,47420],{"class":84,"line":5215},[82,47419,2417],{"class":112},[82,47421,35453],{"class":92},[82,47423,47424],{"class":84,"line":5220},[82,47425,36751],{"class":2828},[82,47427,47428,47430,47432,47434],{"class":84,"line":10539},[82,47429,5999],{"class":112},[82,47431,36758],{"class":92},[82,47433,603],{"class":112},[82,47435,36763],{"class":92},[82,47437,47438,47440,47442],{"class":84,"line":10563},[82,47439,36768],{"class":92},[82,47441,113],{"class":112},[82,47443,36773],{"class":92},[82,47445,47446,47448,47450],{"class":84,"line":10568},[82,47447,36778],{"class":92},[82,47449,113],{"class":112},[82,47451,36783],{"class":92},[82,47453,47454],{"class":84,"line":10574},[82,47455,36788],{"class":2828},[82,47457,47458],{"class":84,"line":10601},[82,47459,35444],{"class":92},[82,47461,47462],{"class":84,"line":10606},[82,47463,36797],{"class":2828},[82,47465,47466,47468,47470],{"class":84,"line":10612},[82,47467,35229],{"class":92},[82,47469,113],{"class":112},[82,47471,36806],{"class":92},[82,47473,47474],{"class":84,"line":10624},[82,47475,36811],{"class":2828},[82,47477,47478,47480,47482,47484,47486,47488,47490],{"class":84,"line":10636},[82,47479,35246],{"class":92},[82,47481,113],{"class":112},[82,47483,35251],{"class":92},[82,47485,35254],{"class":108},[82,47487,113],{"class":112},[82,47489,2283],{"class":88},[82,47491,119],{"class":92},[82,47493,47494],{"class":84,"line":10648},[82,47495,36832],{"class":2828},[82,47497,47498],{"class":84,"line":12307},[82,47499,36837],{"class":2828},[82,47501,47502],{"class":84,"line":12332},[82,47503,36842],{"class":2828},[82,47505,47506,47508,47510,47512,47514],{"class":84,"line":12355},[82,47507,36847],{"class":92},[82,47509,12068],{"class":112},[82,47511,35356],{"class":92},[82,47513,5548],{"class":112},[82,47515,36856],{"class":92},[82,47517,47518],{"class":84,"line":12379},[82,47519,36861],{"class":2828},[82,47521,47522,47524,47526,47528,47530],{"class":84,"line":12384},[82,47523,36866],{"class":92},[82,47525,12068],{"class":112},[82,47527,36871],{"class":92},[82,47529,2244],{"class":88},[82,47531,119],{"class":92},[82,47533,47534],{"class":84,"line":12389},[82,47535,486],{"emptyLinePlaceholder":485},[82,47537,47538],{"class":84,"line":12394},[82,47539,36884],{"class":2828},[82,47541,47542,47544,47546,47548,47550],{"class":84,"line":12403},[82,47543,36889],{"class":92},[82,47545,113],{"class":112},[82,47547,36894],{"class":92},[82,47549,1147],{"class":112},[82,47551,36899],{"class":92},[82,47553,47554],{"class":84,"line":12408},[82,47555,36904],{"class":2828},[82,47557,47558,47560,47562,47564],{"class":84,"line":12414},[82,47559,1901],{"class":88},[82,47561,93],{"class":92},[82,47563,36913],{"class":96},[82,47565,36916],{"class":92},[82,47567,47568],{"class":84,"line":12435},[82,47569,486],{"emptyLinePlaceholder":485},[82,47571,47572],{"class":84,"line":12441},[82,47573,36925],{"class":2828},[82,47575,47576,47578,47580,47582,47584],{"class":84,"line":12455},[82,47577,1237],{"class":112},[82,47579,33796],{"class":88},[82,47581,5548],{"class":112},[82,47583,33801],{"class":96},[82,47585,669],{"class":92},[82,47587,47588],{"class":84,"line":12461},[82,47589,36942],{"class":2828},[82,47591,47592,47594,47596],{"class":84,"line":12488},[82,47593,33865],{"class":92},[82,47595,113],{"class":112},[82,47597,47116],{"class":92},[82,47599,47600],{"class":84,"line":12497},[82,47601,36955],{"class":2828},[82,47603,47604],{"class":84,"line":12503},[82,47605,36960],{"class":2828},[82,47607,47608,47610,47612],{"class":84,"line":12511},[82,47609,36965],{"class":92},[82,47611,36968],{"class":96},[82,47613,33074],{"class":92},[82,47615,47616],{"class":84,"line":12516},[82,47617,36975],{"class":2828},[82,47619,47620,47622,47624],{"class":84,"line":19189},[82,47621,36589],{"class":92},[82,47623,113],{"class":112},[82,47625,36984],{"class":92},[82,47627,47628],{"class":84,"line":19195},[82,47629,36989],{"class":2828},[82,47631,47632],{"class":84,"line":19218},[82,47633,36994],{"class":92},[82,47635,47636],{"class":84,"line":19224},[82,47637,486],{"emptyLinePlaceholder":485},[82,47639,47640],{"class":84,"line":19247},[82,47641,37003],{"class":2828},[82,47643,47644],{"class":84,"line":19261},[82,47645,37008],{"class":2828},[82,47647,47648,47650,47652,47654,47656,47658,47660],{"class":84,"line":19281},[82,47649,33813],{"class":92},[82,47651,113],{"class":112},[82,47653,33820],{"class":96},[82,47655,4307],{"class":112},[82,47657,33825],{"class":92},[82,47659,4304],{"class":112},[82,47661,36686],{"class":96},[82,47663,47664,47666,47668],{"class":84,"line":19287},[82,47665,33865],{"class":92},[82,47667,113],{"class":112},[82,47669,34859],{"class":92},[82,47671,47672],{"class":84,"line":19298},[82,47673,37037],{"class":2828},[82,47675,47676],{"class":84,"line":19321},[82,47677,37042],{"class":2828},[82,47679,47680,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724],{"class":84,"line":19343},[82,47681,37047],{"class":92},[82,47683,113],{"class":112},[82,47685,3639],{"class":92},[82,47687,37054],{"class":96},[82,47689,3136],{"class":92},[82,47691,37059],{"class":96},[82,47693,3136],{"class":92},[82,47695,37064],{"class":96},[82,47697,3136],{"class":92},[82,47699,37069],{"class":96},[82,47701,3136],{"class":92},[82,47703,37074],{"class":96},[82,47705,3136],{"class":92},[82,47707,37079],{"class":96},[82,47709,3136],{"class":92},[82,47711,37084],{"class":96},[82,47713,3136],{"class":92},[82,47715,37089],{"class":96},[82,47717,3136],{"class":92},[82,47719,37094],{"class":96},[82,47721,3136],{"class":92},[82,47723,37099],{"class":96},[82,47725,875],{"class":92},[82,47727,47728,47730],{"class":84,"line":19348},[82,47729,2417],{"class":112},[82,47731,35453],{"class":92},[82,47733,47734],{"class":84,"line":19354},[82,47735,37112],{"class":2828},[82,47737,47738,47740,47742,47744],{"class":84,"line":19368},[82,47739,5999],{"class":112},[82,47741,37119],{"class":92},[82,47743,603],{"class":112},[82,47745,36763],{"class":92},[82,47747,47748,47750,47752],{"class":84,"line":19381},[82,47749,35179],{"class":92},[82,47751,113],{"class":112},[82,47753,35184],{"class":92},[82,47755,47756,47758,47760],{"class":84,"line":19386},[82,47757,35194],{"class":92},[82,47759,113],{"class":112},[82,47761,35199],{"class":92},[82,47763,47764],{"class":84,"line":19400},[82,47765,486],{"emptyLinePlaceholder":485},[82,47767,47768],{"class":84,"line":19405},[82,47769,37148],{"class":2828},[82,47771,47772],{"class":84,"line":19411},[82,47773,35444],{"class":92},[82,47775,47776],{"class":84,"line":19416},[82,47777,37157],{"class":2828},[82,47779,47780,47782,47784],{"class":84,"line":19430},[82,47781,35229],{"class":92},[82,47783,113],{"class":112},[82,47785,35234],{"class":92},[82,47787,47788],{"class":84,"line":19435},[82,47789,37170],{"class":2828},[82,47791,47792,47794,47796,47798,47800,47802,47804],{"class":84,"line":19440},[82,47793,35246],{"class":92},[82,47795,113],{"class":112},[82,47797,35251],{"class":92},[82,47799,35254],{"class":108},[82,47801,113],{"class":112},[82,47803,2283],{"class":88},[82,47805,119],{"class":92},[82,47807,47808],{"class":84,"line":19454},[82,47809,37191],{"class":2828},[82,47811,47812,47814,47816],{"class":84,"line":19466},[82,47813,37196],{"class":92},[82,47815,113],{"class":112},[82,47817,37201],{"class":92},[82,47819,47820,47822,47824],{"class":84,"line":19471},[82,47821,37206],{"class":92},[82,47823,113],{"class":112},[82,47825,37211],{"class":92},[82,47827,47828,47830,47832,47834,47836,47838,47840,47842],{"class":84,"line":19484},[82,47829,37216],{"class":88},[82,47831,93],{"class":92},[82,47833,37221],{"class":96},[82,47835,37224],{"class":92},[82,47837,37227],{"class":96},[82,47839,3136],{"class":92},[82,47841,37232],{"class":96},[82,47843,37235],{"class":92},[65,47845,47847],{"id":47846},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47849,47850],{},"猫狗分类任务",[19,47852,47853],{},"划分数据集和验证集",[73,47855,47857],{"className":75,"code":47856,"language":77,"meta":78,"style":78},"# 创建脚本，用于划分数据集和验证集\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",[32,47858,47859,47864,47871,47876,47887,47894,47898,47908,47921,47930,47934,47939,47949,47969,47973,47978,47988,47999,48012,48016,48021,48030,48040,48051,48055,48060,48070,48074,48079,48084,48089,48094,48099,48103,48113,48140,48153,48165,48192,48197,48202,48216,48221,48233,48248,48263,48271,48275,48280,48286,48298,48311,48316,48321,48326,48376,48382,48386],{"__ignoreMap":78},[82,47860,47861],{"class":84,"line":85},[82,47862,47863],{"class":2828},"# 创建脚本，用于划分数据集和验证集\n",[82,47865,47866,47868],{"class":84,"line":157},[82,47867,1123],{"class":112},[82,47869,47870],{"class":92}," os\n",[82,47872,47873],{"class":84,"line":404},[82,47874,47875],{"class":2828},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[82,47877,47878,47880,47883,47885],{"class":84,"line":413},[82,47879,1117],{"class":112},[82,47881,47882],{"class":92}," shutil ",[82,47884,1123],{"class":112},[82,47886,34394],{"class":92},[82,47888,47889,47891],{"class":84,"line":508},[82,47890,1123],{"class":112},[82,47892,47893],{"class":92}," random\n",[82,47895,47896],{"class":84,"line":513},[82,47897,486],{"emptyLinePlaceholder":485},[82,47899,47900,47902,47905],{"class":84,"line":1388},[82,47901,2381],{"class":112},[82,47903,47904],{"class":2384}," mkfile",[82,47906,47907],{"class":92},"(file):\n",[82,47909,47910,47912,47914,47917,47919],{"class":84,"line":1394},[82,47911,2219],{"class":112},[82,47913,2222],{"class":112},[82,47915,47916],{"class":92}," os.path.exists(",[82,47918,256],{"class":108},[82,47920,33362],{"class":92},[82,47922,47923,47926,47928],{"class":84,"line":1399},[82,47924,47925],{"class":92},"        os.makedirs(",[82,47927,256],{"class":108},[82,47929,119],{"class":92},[82,47931,47932],{"class":84,"line":1430},[82,47933,486],{"emptyLinePlaceholder":485},[82,47935,47936],{"class":84,"line":1818},[82,47937,47938],{"class":2828},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[82,47940,47941,47944,47946],{"class":84,"line":2082},[82,47942,47943],{"class":92},"file_path",[82,47945,113],{"class":112},[82,47947,47948],{"class":96},"'data_cat_dog'\n",[82,47950,47951,47954,47956,47959,47961,47964,47966],{"class":84,"line":2233},[82,47952,47953],{"class":92},"flower_class",[82,47955,113],{"class":112},[82,47957,47958],{"class":92},"[cla ",[82,47960,597],{"class":112},[82,47962,47963],{"class":92}," cla ",[82,47965,603],{"class":112},[82,47967,47968],{"class":92}," os.listdir(file_path)]\n",[82,47970,47971],{"class":84,"line":2255},[82,47972,486],{"emptyLinePlaceholder":485},[82,47974,47975],{"class":84,"line":2260},[82,47976,47977],{"class":2828},"# 创建训练集train文件夹\n",[82,47979,47980,47983,47986],{"class":84,"line":2298},[82,47981,47982],{"class":92},"mkfile(",[82,47984,47985],{"class":96},"'data\u002Ftrain'",[82,47987,119],{"class":92},[82,47989,47990,47992,47994,47996],{"class":84,"line":2303},[82,47991,597],{"class":112},[82,47993,47963],{"class":92},[82,47995,603],{"class":112},[82,47997,47998],{"class":92}," flower_class:\n",[82,48000,48001,48004,48007,48009],{"class":84,"line":2321},[82,48002,48003],{"class":92},"    mkfile(",[82,48005,48006],{"class":96},"'data\u002Ftrain\u002F'",[82,48008,2249],{"class":112},[82,48010,48011],{"class":92},"cla)\n",[82,48013,48014],{"class":84,"line":2533},[82,48015,486],{"emptyLinePlaceholder":485},[82,48017,48018],{"class":84,"line":2538},[82,48019,48020],{"class":2828},"# 创建验证集val文件夹\n",[82,48022,48023,48025,48028],{"class":84,"line":2548},[82,48024,47982],{"class":92},[82,48026,48027],{"class":96},"'data\u002Ftest'",[82,48029,119],{"class":92},[82,48031,48032,48034,48036,48038],{"class":84,"line":2579},[82,48033,597],{"class":112},[82,48035,47963],{"class":92},[82,48037,603],{"class":112},[82,48039,47998],{"class":92},[82,48041,48042,48044,48047,48049],{"class":84,"line":2585},[82,48043,48003],{"class":92},[82,48045,48046],{"class":96},"'data\u002Ftest\u002F'",[82,48048,2249],{"class":112},[82,48050,48011],{"class":92},[82,48052,48053],{"class":84,"line":4350},[82,48054,486],{"emptyLinePlaceholder":485},[82,48056,48057],{"class":84,"line":4355},[82,48058,48059],{"class":2828},"# 划分比例，训练集：测试集=9：1\n",[82,48061,48062,48065,48067],{"class":84,"line":4360},[82,48063,48064],{"class":92},"split_rate",[82,48066,113],{"class":112},[82,48068,48069],{"class":88},"0.1\n",[82,48071,48072],{"class":84,"line":4365},[82,48073,486],{"emptyLinePlaceholder":485},[82,48075,48076],{"class":84,"line":4379},[82,48077,48078],{"class":2828},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[82,48080,48081],{"class":84,"line":4384},[82,48082,48083],{"class":2828},"# cla_path：当前类别的原始图片路径\n",[82,48085,48086],{"class":84,"line":5176},[82,48087,48088],{"class":2828},"# images：当前类别下所有图片的文件名列表\n",[82,48090,48091],{"class":84,"line":5190},[82,48092,48093],{"class":2828},"# num：该类别图片总数\n",[82,48095,48096],{"class":84,"line":5198},[82,48097,48098],{"class":2828},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[82,48100,48101],{"class":84,"line":5203},[82,48102,486],{"emptyLinePlaceholder":485},[82,48104,48105,48107,48109,48111],{"class":84,"line":5209},[82,48106,597],{"class":112},[82,48108,47963],{"class":92},[82,48110,603],{"class":112},[82,48112,47998],{"class":92},[82,48114,48115,48118,48120,48123,48125,48128,48131,48133,48135,48137],{"class":84,"line":5215},[82,48116,48117],{"class":92},"    cla_path ",[82,48119,113],{"class":112},[82,48121,48122],{"class":92}," file_path ",[82,48124,2249],{"class":112},[82,48126,48127],{"class":96}," '\u002F'",[82,48129,48130],{"class":112}," +",[82,48132,47963],{"class":92},[82,48134,2249],{"class":112},[82,48136,48127],{"class":96},[82,48138,48139],{"class":2828},"  # 某一类别的子目录\n",[82,48141,48142,48145,48147,48150],{"class":84,"line":5220},[82,48143,48144],{"class":92},"    images ",[82,48146,113],{"class":112},[82,48148,48149],{"class":92}," os.listdir(cla_path)  ",[82,48151,48152],{"class":2828},"# iamges 列表存储了该目录下所有图像的名称\n",[82,48154,48155,48158,48160,48162],{"class":84,"line":10539},[82,48156,48157],{"class":92},"    num ",[82,48159,113],{"class":112},[82,48161,9923],{"class":88},[82,48163,48164],{"class":92},"(images)\n",[82,48166,48167,48170,48172,48175,48177,48179,48181,48184,48186,48189],{"class":84,"line":10563},[82,48168,48169],{"class":92},"    eval_index ",[82,48171,113],{"class":112},[82,48173,48174],{"class":92}," random.sample(images, ",[82,48176,3249],{"class":108},[82,48178,113],{"class":112},[82,48180,2776],{"class":88},[82,48182,48183],{"class":92},"(num ",[82,48185,3212],{"class":112},[82,48187,48188],{"class":92}," split_rate))  ",[82,48190,48191],{"class":2828},"# 从images列表中随机抽取 k 个图像名称\n",[82,48193,48194],{"class":84,"line":10568},[82,48195,48196],{"class":2828},"    # 遍历该类别下的所有图片\n",[82,48198,48199],{"class":84,"line":10574},[82,48200,48201],{"class":2828},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[82,48203,48204,48206,48209,48211,48213],{"class":84,"line":10601},[82,48205,1888],{"class":112},[82,48207,48208],{"class":92}," index, image ",[82,48210,603],{"class":112},[82,48212,34178],{"class":88},[82,48214,48215],{"class":92},"(images):\n",[82,48217,48218],{"class":84,"line":10606},[82,48219,48220],{"class":2828},"        # eval_index 中保存验证集val的图像名称\n",[82,48222,48223,48225,48228,48230],{"class":84,"line":10612},[82,48224,5096],{"class":112},[82,48226,48227],{"class":92}," image ",[82,48229,603],{"class":112},[82,48231,48232],{"class":92}," eval_index:\n",[82,48234,48235,48238,48240,48243,48245],{"class":84,"line":10624},[82,48236,48237],{"class":92},"            image_path ",[82,48239,113],{"class":112},[82,48241,48242],{"class":92}," cla_path ",[82,48244,2249],{"class":112},[82,48246,48247],{"class":92}," image\n",[82,48249,48250,48253,48255,48258,48260],{"class":84,"line":10636},[82,48251,48252],{"class":92},"            new_path ",[82,48254,113],{"class":112},[82,48256,48257],{"class":96}," 'data\u002Ftest\u002F'",[82,48259,48130],{"class":112},[82,48261,48262],{"class":92}," cla\n",[82,48264,48265,48268],{"class":84,"line":10648},[82,48266,48267],{"class":92},"            copy(image_path, new_path)  ",[82,48269,48270],{"class":2828},"# 将选中的图像复制到新路径\n",[82,48272,48273],{"class":84,"line":12307},[82,48274,486],{"emptyLinePlaceholder":485},[82,48276,48277],{"class":84,"line":12332},[82,48278,48279],{"class":2828},"        # 其余的图像保存在训练集train中\n",[82,48281,48282,48284],{"class":84,"line":12355},[82,48283,5133],{"class":112},[82,48285,669],{"class":92},[82,48287,48288,48290,48292,48294,48296],{"class":84,"line":12379},[82,48289,48237],{"class":92},[82,48291,113],{"class":112},[82,48293,48242],{"class":92},[82,48295,2249],{"class":112},[82,48297,48247],{"class":92},[82,48299,48300,48302,48304,48307,48309],{"class":84,"line":12384},[82,48301,48252],{"class":92},[82,48303,113],{"class":112},[82,48305,48306],{"class":96}," 'data\u002Ftrain\u002F'",[82,48308,48130],{"class":112},[82,48310,48262],{"class":92},[82,48312,48313],{"class":84,"line":12389},[82,48314,48315],{"class":92},"            copy(image_path, new_path)\n",[82,48317,48318],{"class":84,"line":12394},[82,48319,48320],{"class":2828},"            # 打印进度条信息\n",[82,48322,48323],{"class":84,"line":12403},[82,48324,48325],{"class":2828},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[82,48327,48328,48330,48332,48334,48337,48339,48341,48344,48346,48348,48350,48353,48356,48358,48360,48363,48366,48368,48370,48373],{"class":84,"line":12408},[82,48329,1901],{"class":88},[82,48331,93],{"class":92},[82,48333,216],{"class":96},[82,48335,48336],{"class":88},"\\r",[82,48338,3639],{"class":96},[82,48340,35028],{"class":88},[82,48342,48343],{"class":96},"] processing [",[82,48345,35028],{"class":88},[82,48347,1147],{"class":96},[82,48349,35028],{"class":88},[82,48351,48352],{"class":96},"]\"",[82,48354,48355],{"class":92},".format(cla, index ",[82,48357,2249],{"class":112},[82,48359,27703],{"class":88},[82,48361,48362],{"class":92},", num), ",[82,48364,48365],{"class":108},"end",[82,48367,113],{"class":112},[82,48369,1793],{"class":96},[82,48371,48372],{"class":92},")  ",[82,48374,48375],{"class":2828},"# processing bar\n",[82,48377,48378,48380],{"class":84,"line":12414},[82,48379,611],{"class":88},[82,48381,4576],{"class":92},[82,48383,48384],{"class":84,"line":12435},[82,48385,486],{"emptyLinePlaceholder":485},[82,48387,48388,48390,48392,48395],{"class":84,"line":12441},[82,48389,407],{"class":88},[82,48391,93],{"class":92},[82,48393,48394],{"class":96},"\"processing done!\"",[82,48396,119],{"class":92},[19,48398,48399],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24582,48401,48403],{"id":48402},"_242模型代码","2.4.2.模型代码",[19,48405,48406],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[73,48408,48410],{"className":75,"code":48409,"language":77,"meta":78,"style":78},"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",[32,48411,48412,48418,48428,48438,48442,48458,48466,48480,48490,48494,48524,48528,48562,48608,48612,48646,48692,48696,48700,48734,48764,48768,48776,48790,48812,48834,48852,48856,48870,48874,48878,48894,48898,48906,48920,48930,48974,48978,49006,49010,49020,49048,49052,49088,49092,49120,49124,49134,49166,49198,49226,49230,49240,49272,49304,49336,49368,49400,49428,49432,49442,49474,49506,49518,49522,49534,49538,49542,49554,49562,49582,49586,49590,49594,49598,49602,49606,49620,49628,49636,49648,49662,49670,49674,49682,49692,49702,49712,49722,49732,49738,49742,49746,49758,49778,49786],{"__ignoreMap":78},[82,48413,48414,48416],{"class":84,"line":85},[82,48415,1123],{"class":112},[82,48417,32973],{"class":92},[82,48419,48420,48422,48424,48426],{"class":84,"line":157},[82,48421,1117],{"class":112},[82,48423,33316],{"class":92},[82,48425,1123],{"class":112},[82,48427,33321],{"class":92},[82,48429,48430,48432,48434,48436],{"class":84,"line":404},[82,48431,1117],{"class":112},[82,48433,33333],{"class":92},[82,48435,1123],{"class":112},[82,48437,33338],{"class":92},[82,48439,48440],{"class":84,"line":413},[82,48441,486],{"emptyLinePlaceholder":485},[82,48443,48444,48446,48448,48450,48452,48454,48456],{"class":84,"line":508},[82,48445,17281],{"class":112},[82,48447,44058],{"class":2384},[82,48449,93],{"class":92},[82,48451,33354],{"class":2384},[82,48453,233],{"class":92},[82,48455,33359],{"class":2384},[82,48457,33362],{"class":92},[82,48459,48460,48462,48464],{"class":84,"line":513},[82,48461,33377],{"class":112},[82,48463,33380],{"class":88},[82,48465,44077],{"class":92},[82,48467,48468,48470,48472,48474,48476,48478],{"class":84,"line":1388},[82,48469,33393],{"class":88},[82,48471,44084],{"class":92},[82,48473,33399],{"class":88},[82,48475,33402],{"class":92},[82,48477,33405],{"class":88},[82,48479,4576],{"class":92},[82,48481,48482,48484,48486,48488],{"class":84,"line":1394},[82,48483,33421],{"class":88},[82,48485,37337],{"class":92},[82,48487,113],{"class":112},[82,48489,37342],{"class":92},[82,48491,48492],{"class":84,"line":1399},[82,48493,44107],{"class":2828},[82,48495,48496,48498,48500,48502,48504,48506,48508,48510,48512,48514,48516,48518,48520,48522],{"class":84,"line":1430},[82,48497,33421],{"class":88},[82,48499,44114],{"class":92},[82,48501,113],{"class":112},[82,48503,33429],{"class":92},[82,48505,33432],{"class":108},[82,48507,113],{"class":112},[82,48509,44125],{"class":92},[82,48511,33441],{"class":108},[82,48513,113],{"class":112},[82,48515,44132],{"class":92},[82,48517,33450],{"class":108},[82,48519,113],{"class":112},[82,48521,2283],{"class":88},[82,48523,119],{"class":92},[82,48525,48526],{"class":84,"line":1818},[82,48527,44145],{"class":2828},[82,48529,48530,48532,48534,48536,48538,48540,48542,48544,48546,48548,48550,48552,48554,48556,48558,48560],{"class":84,"line":2082},[82,48531,33421],{"class":88},[82,48533,44152],{"class":92},[82,48535,113],{"class":112},[82,48537,33429],{"class":92},[82,48539,33432],{"class":108},[82,48541,113],{"class":112},[82,48543,44125],{"class":92},[82,48545,33441],{"class":108},[82,48547,113],{"class":112},[82,48549,44169],{"class":92},[82,48551,2244],{"class":88},[82,48553,44174],{"class":92},[82,48555,33450],{"class":108},[82,48557,113],{"class":112},[82,48559,2283],{"class":88},[82,48561,119],{"class":92},[82,48563,48564,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600,48602,48604,48606],{"class":84,"line":2233},[82,48565,33421],{"class":88},[82,48567,44189],{"class":92},[82,48569,113],{"class":112},[82,48571,33429],{"class":92},[82,48573,33432],{"class":108},[82,48575,113],{"class":112},[82,48577,44169],{"class":92},[82,48579,2244],{"class":88},[82,48581,44174],{"class":92},[82,48583,33441],{"class":108},[82,48585,113],{"class":112},[82,48587,44169],{"class":92},[82,48589,2283],{"class":88},[82,48591,44174],{"class":92},[82,48593,33450],{"class":108},[82,48595,113],{"class":112},[82,48597,2841],{"class":88},[82,48599,3136],{"class":92},[82,48601,33459],{"class":108},[82,48603,113],{"class":112},[82,48605,2283],{"class":88},[82,48607,119],{"class":92},[82,48609,48610],{"class":84,"line":2255},[82,48611,44234],{"class":2828},[82,48613,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636,48638,48640,48642,48644],{"class":84,"line":2260},[82,48615,33421],{"class":88},[82,48617,44241],{"class":92},[82,48619,113],{"class":112},[82,48621,33429],{"class":92},[82,48623,33432],{"class":108},[82,48625,113],{"class":112},[82,48627,44125],{"class":92},[82,48629,33441],{"class":108},[82,48631,113],{"class":112},[82,48633,44258],{"class":92},[82,48635,2244],{"class":88},[82,48637,44174],{"class":92},[82,48639,33450],{"class":108},[82,48641,113],{"class":112},[82,48643,2283],{"class":88},[82,48645,119],{"class":92},[82,48647,48648,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672,48674,48676,48678,48680,48682,48684,48686,48688,48690],{"class":84,"line":2298},[82,48649,33421],{"class":88},[82,48651,44277],{"class":92},[82,48653,113],{"class":112},[82,48655,33429],{"class":92},[82,48657,33432],{"class":108},[82,48659,113],{"class":112},[82,48661,44258],{"class":92},[82,48663,2244],{"class":88},[82,48665,44174],{"class":92},[82,48667,33441],{"class":108},[82,48669,113],{"class":112},[82,48671,44258],{"class":92},[82,48673,2283],{"class":88},[82,48675,44174],{"class":92},[82,48677,33450],{"class":108},[82,48679,113],{"class":112},[82,48681,3077],{"class":88},[82,48683,3136],{"class":92},[82,48685,33459],{"class":108},[82,48687,113],{"class":112},[82,48689,1425],{"class":88},[82,48691,119],{"class":92},[82,48693,48694],{"class":84,"line":2303},[82,48695,44322],{"class":2828},[82,48697,48698],{"class":84,"line":2321},[82,48699,44327],{"class":2828},[82,48701,48702,48704,48706,48708,48710,48712,48714,48716,48718,48720,48722,48724,48726,48728,48730,48732],{"class":84,"line":2533},[82,48703,33421],{"class":88},[82,48705,44334],{"class":92},[82,48707,113],{"class":112},[82,48709,37395],{"class":92},[82,48711,33450],{"class":108},[82,48713,113],{"class":112},[82,48715,2841],{"class":88},[82,48717,3136],{"class":92},[82,48719,33505],{"class":108},[82,48721,113],{"class":112},[82,48723,2283],{"class":88},[82,48725,3136],{"class":92},[82,48727,33459],{"class":108},[82,48729,113],{"class":112},[82,48731,2283],{"class":88},[82,48733,119],{"class":92},[82,48735,48736,48738,48740,48742,48744,48746,48748,48750,48752,48754,48756,48758,48760,48762],{"class":84,"line":2538},[82,48737,33421],{"class":88},[82,48739,44369],{"class":92},[82,48741,113],{"class":112},[82,48743,33429],{"class":92},[82,48745,33432],{"class":108},[82,48747,113],{"class":112},[82,48749,44125],{"class":92},[82,48751,33441],{"class":108},[82,48753,113],{"class":112},[82,48755,44386],{"class":92},[82,48757,33450],{"class":108},[82,48759,113],{"class":112},[82,48761,2283],{"class":88},[82,48763,119],{"class":92},[82,48765,48766],{"class":84,"line":2548},[82,48767,486],{"emptyLinePlaceholder":485},[82,48769,48770,48772,48774],{"class":84,"line":2579},[82,48771,33377],{"class":112},[82,48773,33669],{"class":2384},[82,48775,33672],{"class":92},[82,48777,48778,48780,48782,48784,48786,48788],{"class":84,"line":2585},[82,48779,44411],{"class":92},[82,48781,113],{"class":112},[82,48783,33399],{"class":88},[82,48785,37750],{"class":92},[82,48787,33399],{"class":88},[82,48789,44422],{"class":92},[82,48791,48792,48794,48796,48798,48800,48802,48804,48806,48808,48810],{"class":84,"line":4350},[82,48793,9677],{"class":92},[82,48795,113],{"class":112},[82,48797,33399],{"class":88},[82,48799,37750],{"class":92},[82,48801,33399],{"class":88},[82,48803,44437],{"class":92},[82,48805,33399],{"class":88},[82,48807,37750],{"class":92},[82,48809,33399],{"class":88},[82,48811,44446],{"class":92},[82,48813,48814,48816,48818,48820,48822,48824,48826,48828,48830,48832],{"class":84,"line":4355},[82,48815,44451],{"class":92},[82,48817,113],{"class":112},[82,48819,33399],{"class":88},[82,48821,37750],{"class":92},[82,48823,33399],{"class":88},[82,48825,44462],{"class":92},[82,48827,33399],{"class":88},[82,48829,37750],{"class":92},[82,48831,33399],{"class":88},[82,48833,44471],{"class":92},[82,48835,48836,48838,48840,48842,48844,48846,48848,48850],{"class":84,"line":4360},[82,48837,44476],{"class":92},[82,48839,113],{"class":112},[82,48841,33399],{"class":88},[82,48843,37750],{"class":92},[82,48845,33399],{"class":88},[82,48847,44487],{"class":92},[82,48849,33399],{"class":88},[82,48851,44492],{"class":92},[82,48853,48854],{"class":84,"line":4365},[82,48855,44497],{"class":2828},[82,48857,48858,48860,48862,48864,48866,48868],{"class":84,"line":4379},[82,48859,2405],{"class":112},[82,48861,44504],{"class":92},[82,48863,35254],{"class":108},[82,48865,113],{"class":112},[82,48867,2283],{"class":88},[82,48869,119],{"class":92},[82,48871,48872],{"class":84,"line":4384},[82,48873,486],{"emptyLinePlaceholder":485},[82,48875,48876],{"class":84,"line":5176},[82,48877,44525],{"class":2828},[82,48879,48880,48882,48884,48886,48888,48890,48892],{"class":84,"line":5190},[82,48881,17281],{"class":112},[82,48883,44532],{"class":2384},[82,48885,93],{"class":92},[82,48887,33354],{"class":2384},[82,48889,233],{"class":92},[82,48891,33359],{"class":2384},[82,48893,33362],{"class":92},[82,48895,48896],{"class":84,"line":5198},[82,48897,44547],{"class":2828},[82,48899,48900,48902,48904],{"class":84,"line":5203},[82,48901,33377],{"class":112},[82,48903,33380],{"class":88},[82,48905,44556],{"class":92},[82,48907,48908,48910,48912,48914,48916,48918],{"class":84,"line":5209},[82,48909,33393],{"class":88},[82,48911,44563],{"class":92},[82,48913,33399],{"class":88},[82,48915,33402],{"class":92},[82,48917,33405],{"class":88},[82,48919,4576],{"class":92},[82,48921,48922,48924,48926,48928],{"class":84,"line":5215},[82,48923,33421],{"class":88},[82,48925,44578],{"class":92},[82,48927,113],{"class":112},[82,48929,40575],{"class":92},[82,48931,48932,48934,48936,48938,48940,48942,48944,48946,48948,48950,48952,48954,48956,48958,48960,48962,48964,48966,48968,48970,48972],{"class":84,"line":5220},[82,48933,40580],{"class":92},[82,48935,33432],{"class":108},[82,48937,113],{"class":112},[82,48939,2841],{"class":88},[82,48941,3136],{"class":92},[82,48943,33441],{"class":108},[82,48945,113],{"class":112},[82,48947,2964],{"class":88},[82,48949,3136],{"class":92},[82,48951,33450],{"class":108},[82,48953,113],{"class":112},[82,48955,3127],{"class":88},[82,48957,3136],{"class":92},[82,48959,33505],{"class":108},[82,48961,113],{"class":112},[82,48963,1425],{"class":88},[82,48965,3136],{"class":92},[82,48967,33459],{"class":108},[82,48969,113],{"class":112},[82,48971,2841],{"class":88},[82,48973,40613],{"class":92},[82,48975,48976],{"class":84,"line":10539},[82,48977,40618],{"class":92},[82,48979,48980,48982,48984,48986,48988,48990,48992,48994,48996,48998,49000,49002,49004],{"class":84,"line":10563},[82,48981,40663],{"class":92},[82,48983,33450],{"class":108},[82,48985,113],{"class":112},[82,48987,2841],{"class":88},[82,48989,3136],{"class":92},[82,48991,33505],{"class":108},[82,48993,113],{"class":112},[82,48995,1425],{"class":88},[82,48997,3136],{"class":92},[82,48999,33459],{"class":108},[82,49001,113],{"class":112},[82,49003,2283],{"class":88},[82,49005,119],{"class":92},[82,49007,49008],{"class":84,"line":10568},[82,49009,40692],{"class":92},[82,49011,49012,49014,49016,49018],{"class":84,"line":10574},[82,49013,33421],{"class":88},[82,49015,44669],{"class":92},[82,49017,113],{"class":112},[82,49019,40575],{"class":92},[82,49021,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044,49046],{"class":84,"line":10601},[82,49023,40580],{"class":92},[82,49025,33432],{"class":108},[82,49027,113],{"class":112},[82,49029,2964],{"class":88},[82,49031,3136],{"class":92},[82,49033,33441],{"class":108},[82,49035,113],{"class":112},[82,49037,2964],{"class":88},[82,49039,3136],{"class":92},[82,49041,33450],{"class":108},[82,49043,113],{"class":112},[82,49045,2283],{"class":88},[82,49047,40613],{"class":92},[82,49049,49050],{"class":84,"line":10606},[82,49051,40618],{"class":92},[82,49053,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072,49074,49076,49078,49080,49082,49084,49086],{"class":84,"line":10612},[82,49055,40580],{"class":92},[82,49057,33432],{"class":108},[82,49059,113],{"class":112},[82,49061,2964],{"class":88},[82,49063,3136],{"class":92},[82,49065,33441],{"class":108},[82,49067,113],{"class":112},[82,49069,44724],{"class":88},[82,49071,3136],{"class":92},[82,49073,33450],{"class":108},[82,49075,113],{"class":112},[82,49077,2841],{"class":88},[82,49079,3136],{"class":92},[82,49081,33459],{"class":108},[82,49083,113],{"class":112},[82,49085,2283],{"class":88},[82,49087,40613],{"class":92},[82,49089,49090],{"class":84,"line":10624},[82,49091,40618],{"class":92},[82,49093,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112,49114,49116,49118],{"class":84,"line":10636},[82,49095,40663],{"class":92},[82,49097,33450],{"class":108},[82,49099,113],{"class":112},[82,49101,2841],{"class":88},[82,49103,3136],{"class":92},[82,49105,33505],{"class":108},[82,49107,113],{"class":112},[82,49109,1425],{"class":88},[82,49111,3136],{"class":92},[82,49113,33459],{"class":108},[82,49115,113],{"class":112},[82,49117,2283],{"class":88},[82,49119,119],{"class":92},[82,49121,49122],{"class":84,"line":10648},[82,49123,40692],{"class":92},[82,49125,49126,49128,49130,49132],{"class":84,"line":12307},[82,49127,33421],{"class":88},[82,49129,44785],{"class":92},[82,49131,113],{"class":112},[82,49133,40575],{"class":92},[82,49135,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164],{"class":84,"line":12332},[82,49137,44794],{"class":92},[82,49139,44724],{"class":88},[82,49141,3136],{"class":92},[82,49143,2964],{"class":88},[82,49145,44803],{"class":92},[82,49147,2970],{"class":88},[82,49149,3136],{"class":92},[82,49151,34640],{"class":88},[82,49153,44812],{"class":92},[82,49155,3355],{"class":88},[82,49157,3136],{"class":92},[82,49159,2958],{"class":88},[82,49161,44821],{"class":92},[82,49163,2958],{"class":88},[82,49165,40613],{"class":92},[82,49167,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196],{"class":84,"line":12355},[82,49169,44794],{"class":92},[82,49171,37436],{"class":88},[82,49173,3136],{"class":92},[82,49175,34640],{"class":88},[82,49177,44803],{"class":92},[82,49179,34640],{"class":88},[82,49181,3136],{"class":92},[82,49183,44724],{"class":88},[82,49185,44812],{"class":92},[82,49187,2958],{"class":88},[82,49189,3136],{"class":92},[82,49191,2970],{"class":88},[82,49193,44821],{"class":92},[82,49195,2964],{"class":88},[82,49197,40613],{"class":92},[82,49199,49200,49202,49204,49206,49208,49210,49212,49214,49216,49218,49220,49222,49224],{"class":84,"line":12379},[82,49201,40663],{"class":92},[82,49203,33450],{"class":108},[82,49205,113],{"class":112},[82,49207,2841],{"class":88},[82,49209,3136],{"class":92},[82,49211,33505],{"class":108},[82,49213,113],{"class":112},[82,49215,1425],{"class":88},[82,49217,3136],{"class":92},[82,49219,33459],{"class":108},[82,49221,113],{"class":112},[82,49223,2283],{"class":88},[82,49225,119],{"class":92},[82,49227,49228],{"class":84,"line":12384},[82,49229,40692],{"class":92},[82,49231,49232,49234,49236,49238],{"class":84,"line":12389},[82,49233,33421],{"class":88},[82,49235,44896],{"class":92},[82,49237,113],{"class":112},[82,49239,40575],{"class":92},[82,49241,49242,49244,49246,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270],{"class":84,"line":12394},[82,49243,44794],{"class":92},[82,49245,44907],{"class":88},[82,49247,3136],{"class":92},[82,49249,44724],{"class":88},[82,49251,44803],{"class":92},[82,49253,2970],{"class":88},[82,49255,3136],{"class":92},[82,49257,44920],{"class":88},[82,49259,44812],{"class":92},[82,49261,3355],{"class":88},[82,49263,3136],{"class":92},[82,49265,3361],{"class":88},[82,49267,44821],{"class":92},[82,49269,2964],{"class":88},[82,49271,40613],{"class":92},[82,49273,49274,49276,49278,49280,49282,49284,49286,49288,49290,49292,49294,49296,49298,49300,49302],{"class":84,"line":12403},[82,49275,44794],{"class":92},[82,49277,41023],{"class":88},[82,49279,3136],{"class":92},[82,49281,23632],{"class":88},[82,49283,44803],{"class":92},[82,49285,3372],{"class":88},[82,49287,3136],{"class":92},[82,49289,34073],{"class":88},[82,49291,44812],{"class":92},[82,49293,3550],{"class":88},[82,49295,3136],{"class":92},[82,49297,2964],{"class":88},[82,49299,44821],{"class":92},[82,49301,2964],{"class":88},[82,49303,40613],{"class":92},[82,49305,49306,49308,49310,49312,49314,49316,49318,49320,49322,49324,49326,49328,49330,49332,49334],{"class":84,"line":12408},[82,49307,44794],{"class":92},[82,49309,41023],{"class":88},[82,49311,3136],{"class":92},[82,49313,34640],{"class":88},[82,49315,44803],{"class":92},[82,49317,34640],{"class":88},[82,49319,3136],{"class":92},[82,49321,37436],{"class":88},[82,49323,44812],{"class":92},[82,49325,3550],{"class":88},[82,49327,3136],{"class":92},[82,49329,2964],{"class":88},[82,49331,44821],{"class":92},[82,49333,2964],{"class":88},[82,49335,40613],{"class":92},[82,49337,49338,49340,49342,49344,49346,49348,49350,49352,49354,49356,49358,49360,49362,49364,49366],{"class":84,"line":12414},[82,49339,44794],{"class":92},[82,49341,41023],{"class":88},[82,49343,3136],{"class":92},[82,49345,3372],{"class":88},[82,49347,44803],{"class":92},[82,49349,34640],{"class":88},[82,49351,3136],{"class":92},[82,49353,45017],{"class":88},[82,49355,44812],{"class":92},[82,49357,2958],{"class":88},[82,49359,3136],{"class":92},[82,49361,2964],{"class":88},[82,49363,44821],{"class":92},[82,49365,2964],{"class":88},[82,49367,40613],{"class":92},[82,49369,49370,49372,49374,49376,49378,49380,49382,49384,49386,49388,49390,49392,49394,49396,49398],{"class":84,"line":12435},[82,49371,44794],{"class":92},[82,49373,45038],{"class":88},[82,49375,3136],{"class":92},[82,49377,37436],{"class":88},[82,49379,44803],{"class":92},[82,49381,23632],{"class":88},[82,49383,3136],{"class":92},[82,49385,45051],{"class":88},[82,49387,44812],{"class":92},[82,49389,2958],{"class":88},[82,49391,3136],{"class":92},[82,49393,34640],{"class":88},[82,49395,44821],{"class":92},[82,49397,34640],{"class":88},[82,49399,40613],{"class":92},[82,49401,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426],{"class":84,"line":12441},[82,49403,40663],{"class":92},[82,49405,33450],{"class":108},[82,49407,113],{"class":112},[82,49409,2841],{"class":88},[82,49411,3136],{"class":92},[82,49413,33505],{"class":108},[82,49415,113],{"class":112},[82,49417,1425],{"class":88},[82,49419,3136],{"class":92},[82,49421,33459],{"class":108},[82,49423,113],{"class":112},[82,49425,2283],{"class":88},[82,49427,119],{"class":92},[82,49429,49430],{"class":84,"line":12455},[82,49431,40692],{"class":92},[82,49433,49434,49436,49438,49440],{"class":84,"line":12461},[82,49435,33421],{"class":88},[82,49437,45104],{"class":92},[82,49439,113],{"class":112},[82,49441,40575],{"class":92},[82,49443,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472],{"class":84,"line":12488},[82,49445,44794],{"class":92},[82,49447,45115],{"class":88},[82,49449,3136],{"class":92},[82,49451,37436],{"class":88},[82,49453,44803],{"class":92},[82,49455,23632],{"class":88},[82,49457,3136],{"class":92},[82,49459,45051],{"class":88},[82,49461,44812],{"class":92},[82,49463,2958],{"class":88},[82,49465,3136],{"class":92},[82,49467,34640],{"class":88},[82,49469,44821],{"class":92},[82,49471,34640],{"class":88},[82,49473,40613],{"class":92},[82,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492,49494,49496,49498,49500,49502,49504],{"class":84,"line":12497},[82,49477,44794],{"class":92},[82,49479,45115],{"class":88},[82,49481,3136],{"class":92},[82,49483,37506],{"class":88},[82,49485,44803],{"class":92},[82,49487,44724],{"class":88},[82,49489,3136],{"class":92},[82,49491,37506],{"class":88},[82,49493,44812],{"class":92},[82,49495,3361],{"class":88},[82,49497,3136],{"class":92},[82,49499,34640],{"class":88},[82,49501,44821],{"class":92},[82,49503,34640],{"class":88},[82,49505,40613],{"class":92},[82,49507,49508,49510,49512,49514,49516],{"class":84,"line":12503},[82,49509,45178],{"class":92},[82,49511,2283],{"class":88},[82,49513,3136],{"class":92},[82,49515,2283],{"class":88},[82,49517,45187],{"class":92},[82,49519,49520],{"class":84,"line":12511},[82,49521,41356],{"class":92},[82,49523,49524,49526,49528,49530,49532],{"class":84,"line":12516},[82,49525,41361],{"class":92},[82,49527,45198],{"class":88},[82,49529,3136],{"class":92},[82,49531,1425],{"class":88},[82,49533,119],{"class":92},[82,49535,49536],{"class":84,"line":19189},[82,49537,40692],{"class":92},[82,49539,49540],{"class":84,"line":19195},[82,49541,45213],{"class":2828},[82,49543,49544,49546,49548,49550,49552],{"class":84,"line":19218},[82,49545,5999],{"class":112},[82,49547,41434],{"class":92},[82,49549,603],{"class":112},[82,49551,41439],{"class":88},[82,49553,41442],{"class":92},[82,49555,49556,49558,49560],{"class":84,"line":19224},[82,49557,7237],{"class":112},[82,49559,41454],{"class":88},[82,49561,41457],{"class":92},[82,49563,49564,49566,49568,49570,49572,49574,49576,49578,49580],{"class":84,"line":19247},[82,49565,41467],{"class":92},[82,49567,45240],{"class":108},[82,49569,113],{"class":112},[82,49571,45245],{"class":96},[82,49573,3136],{"class":92},[82,49575,41470],{"class":108},[82,49577,113],{"class":112},[82,49579,41475],{"class":96},[82,49581,119],{"class":92},[82,49583,49584],{"class":84,"line":19261},[82,49585,45260],{"class":2828},[82,49587,49588],{"class":84,"line":19281},[82,49589,45265],{"class":2828},[82,49591,49592],{"class":84,"line":19287},[82,49593,45270],{"class":2828},[82,49595,49596],{"class":84,"line":19298},[82,49597,45275],{"class":2828},[82,49599,49600],{"class":84,"line":19321},[82,49601,45280],{"class":2828},[82,49603,49604],{"class":84,"line":19343},[82,49605,45285],{"class":2828},[82,49607,49608,49610,49612,49614,49616,49618],{"class":84,"line":19348},[82,49609,41487],{"class":112},[82,49611,41490],{"class":92},[82,49613,41493],{"class":112},[82,49615,2222],{"class":112},[82,49617,41498],{"class":88},[82,49619,669],{"class":92},[82,49621,49622,49624,49626],{"class":84,"line":19354},[82,49623,41510],{"class":92},[82,49625,2244],{"class":88},[82,49627,119],{"class":92},[82,49629,49630,49632,49634],{"class":84,"line":19368},[82,49631,45312],{"class":112},[82,49633,41454],{"class":88},[82,49635,41529],{"class":92},[82,49637,49638,49640,49642,49644,49646],{"class":84,"line":19381},[82,49639,45321],{"class":92},[82,49641,2244],{"class":88},[82,49643,3136],{"class":92},[82,49645,41551],{"class":88},[82,49647,119],{"class":92},[82,49649,49650,49652,49654,49656,49658,49660],{"class":84,"line":19386},[82,49651,45334],{"class":112},[82,49653,41490],{"class":92},[82,49655,41493],{"class":112},[82,49657,2222],{"class":112},[82,49659,41498],{"class":88},[82,49661,669],{"class":92},[82,49663,49664,49666,49668],{"class":84,"line":19400},[82,49665,45349],{"class":92},[82,49667,2244],{"class":88},[82,49669,119],{"class":92},[82,49671,49672],{"class":84,"line":19405},[82,49673,37731],{"class":2828},[82,49675,49676,49678,49680],{"class":84,"line":19411},[82,49677,33377],{"class":112},[82,49679,33669],{"class":2384},[82,49681,33672],{"class":92},[82,49683,49684,49686,49688,49690],{"class":84,"line":19416},[82,49685,33677],{"class":92},[82,49687,113],{"class":112},[82,49689,33399],{"class":88},[82,49691,45376],{"class":92},[82,49693,49694,49696,49698,49700],{"class":84,"line":19430},[82,49695,33677],{"class":92},[82,49697,113],{"class":112},[82,49699,33399],{"class":88},[82,49701,45387],{"class":92},[82,49703,49704,49706,49708,49710],{"class":84,"line":19435},[82,49705,33677],{"class":92},[82,49707,113],{"class":112},[82,49709,33399],{"class":88},[82,49711,45398],{"class":92},[82,49713,49714,49716,49718,49720],{"class":84,"line":19440},[82,49715,33677],{"class":92},[82,49717,113],{"class":112},[82,49719,33399],{"class":88},[82,49721,45409],{"class":92},[82,49723,49724,49726,49728,49730],{"class":84,"line":19454},[82,49725,33677],{"class":92},[82,49727,113],{"class":112},[82,49729,33399],{"class":88},[82,49731,45420],{"class":92},[82,49733,49734,49736],{"class":84,"line":19466},[82,49735,2405],{"class":112},[82,49737,33785],{"class":92},[82,49739,49740],{"class":84,"line":19471},[82,49741,486],{"emptyLinePlaceholder":485},[82,49743,49744],{"class":84,"line":19484},[82,49745,45435],{"class":2828},[82,49747,49748,49750,49752,49754,49756],{"class":84,"line":19489},[82,49749,1237],{"class":112},[82,49751,33796],{"class":88},[82,49753,5548],{"class":112},[82,49755,33801],{"class":96},[82,49757,669],{"class":92},[82,49759,49760,49762,49764,49766,49768,49770,49772,49774,49776],{"class":84,"line":19494},[82,49761,33813],{"class":92},[82,49763,113],{"class":112},[82,49765,33028],{"class":92},[82,49767,33820],{"class":96},[82,49769,4307],{"class":112},[82,49771,33825],{"class":92},[82,49773,4304],{"class":112},[82,49775,33053],{"class":96},[82,49777,119],{"class":92},[82,49779,49780,49782,49784],{"class":84,"line":19499},[82,49781,33865],{"class":92},[82,49783,113],{"class":112},[82,49785,45476],{"class":92},[82,49787,49788,49790,49792,49794,49796,49798,49800,49802],{"class":84,"line":19512},[82,49789,611],{"class":88},[82,49791,33877],{"class":92},[82,49793,2283],{"class":88},[82,49795,3136],{"class":92},[82,49797,34073],{"class":88},[82,49799,3136],{"class":92},[82,49801,34073],{"class":88},[82,49803,33890],{"class":92},[24582,49805,49807],{"id":49806},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49809,49810],{},"计算图片的均值与方差，用于训练中归一化处理操作",[73,49812,49814],{"className":75,"code":49813,"language":77,"meta":78,"style":78},"# 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",[32,49815,49816,49821,49834,49839,49845,49850,49860,49864,49869,49879,49883,49888,49898,49915,49919,49924,49936,49948,49979,49988,49998,50008,50012,50017,50032,50036,50041,50046,50051,50061,50066,50091,50095,50100,50115,50119,50132,50136,50141,50146,50151,50156,50161,50171,50181,50204,50212,50220,50228,50232,50244,50248,50253,50257,50261,50268,50288,50312,50319,50333,50338,50343,50347,50361,50365,50377],{"__ignoreMap":78},[82,49817,49818],{"class":84,"line":85},[82,49819,49820],{"class":2828},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[82,49822,49823,49825,49828,49831],{"class":84,"line":157},[82,49824,1117],{"class":112},[82,49826,49827],{"class":88}," PIL",[82,49829,49830],{"class":112}," import",[82,49832,49833],{"class":92}," Image\n",[82,49835,49836],{"class":84,"line":404},[82,49837,49838],{"class":2828},"# os 用来处理文件夹和文件路径\n",[82,49840,49841,49843],{"class":84,"line":413},[82,49842,1123],{"class":112},[82,49844,47870],{"class":92},[82,49846,49847],{"class":84,"line":508},[82,49848,49849],{"class":2828},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[82,49851,49852,49854,49856,49858],{"class":84,"line":513},[82,49853,1123],{"class":112},[82,49855,33955],{"class":92},[82,49857,728],{"class":112},[82,49859,33960],{"class":92},[82,49861,49862],{"class":84,"line":1388},[82,49863,486],{"emptyLinePlaceholder":485},[82,49865,49866],{"class":84,"line":1394},[82,49867,49868],{"class":2828},"# 文件夹路径，包含所有图片文件\n",[82,49870,49871,49874,49876],{"class":84,"line":1399},[82,49872,49873],{"class":92},"folder_path ",[82,49875,113],{"class":112},[82,49877,49878],{"class":96}," 'data_cat_dog'\n",[82,49880,49881],{"class":84,"line":1430},[82,49882,486],{"emptyLinePlaceholder":485},[82,49884,49885],{"class":84,"line":1818},[82,49886,49887],{"class":2828},"# 初始化累积变量\n",[82,49889,49890,49893,49895],{"class":84,"line":2082},[82,49891,49892],{"class":92},"total_pixels ",[82,49894,113],{"class":112},[82,49896,49897],{"class":88}," 0\n",[82,49899,49900,49903,49905,49908,49910,49912],{"class":84,"line":2233},[82,49901,49902],{"class":92},"sum_normalized_pixel_values ",[82,49904,113],{"class":112},[82,49906,49907],{"class":92}," np.zeros(",[82,49909,2841],{"class":88},[82,49911,48372],{"class":92},[82,49913,49914],{"class":2828},"# 如果是RGB图像，需要三个通道的均值和方差\n",[82,49916,49917],{"class":84,"line":2255},[82,49918,486],{"emptyLinePlaceholder":485},[82,49920,49921],{"class":84,"line":2260},[82,49922,49923],{"class":2828},"# 遍历文件夹中的图片文件\n",[82,49925,49926,49928,49931,49933],{"class":84,"line":2298},[82,49927,597],{"class":112},[82,49929,49930],{"class":92}," root, dirs, files ",[82,49932,603],{"class":112},[82,49934,49935],{"class":92}," os.walk(folder_path):\n",[82,49937,49938,49940,49943,49945],{"class":84,"line":2303},[82,49939,1888],{"class":112},[82,49941,49942],{"class":92}," filename ",[82,49944,603],{"class":112},[82,49946,49947],{"class":92}," files:\n",[82,49949,49950,49952,49955,49958,49960,49963,49965,49968,49970,49973,49976],{"class":84,"line":2321},[82,49951,5096],{"class":112},[82,49953,49954],{"class":92}," filename.endswith((",[82,49956,49957],{"class":96},"'.jpg'",[82,49959,100],{"class":92},[82,49961,49962],{"class":96},"'.jpeg'",[82,49964,100],{"class":92},[82,49966,49967],{"class":96},"'.png'",[82,49969,100],{"class":92},[82,49971,49972],{"class":96},"'.bmp'",[82,49974,49975],{"class":92},")):  ",[82,49977,49978],{"class":2828},"# 可根据实际情况添加其他格式\n",[82,49980,49981,49983,49985],{"class":84,"line":2533},[82,49982,48237],{"class":92},[82,49984,113],{"class":112},[82,49986,49987],{"class":92}," os.path.join(root, filename)\n",[82,49989,49990,49993,49995],{"class":84,"line":2538},[82,49991,49992],{"class":92},"            image ",[82,49994,113],{"class":112},[82,49996,49997],{"class":92}," Image.open(image_path)\n",[82,49999,50000,50003,50005],{"class":84,"line":2548},[82,50001,50002],{"class":92},"            image_array ",[82,50004,113],{"class":112},[82,50006,50007],{"class":92}," np.array(image)\n",[82,50009,50010],{"class":84,"line":2579},[82,50011,486],{"emptyLinePlaceholder":485},[82,50013,50014],{"class":84,"line":2585},[82,50015,50016],{"class":2828},"            # 归一化像素值到0-1之间\n",[82,50018,50019,50022,50024,50027,50029],{"class":84,"line":4350},[82,50020,50021],{"class":92},"            normalized_image_array ",[82,50023,113],{"class":112},[82,50025,50026],{"class":92}," image_array ",[82,50028,1147],{"class":112},[82,50030,50031],{"class":88}," 255.0\n",[82,50033,50034],{"class":84,"line":4355},[82,50035,486],{"emptyLinePlaceholder":485},[82,50037,50038],{"class":84,"line":4360},[82,50039,50040],{"class":2828},"            # print(image_path)\n",[82,50042,50043],{"class":84,"line":4365},[82,50044,50045],{"class":2828},"            # print(normalized_image_array.shape)\n",[82,50047,50048],{"class":84,"line":4379},[82,50049,50050],{"class":2828},"            # 累积归一化后的像素值和像素数量\n",[82,50052,50053,50056,50058],{"class":84,"line":4384},[82,50054,50055],{"class":92},"            total_pixels ",[82,50057,12068],{"class":112},[82,50059,50060],{"class":92}," normalized_image_array.size\n",[82,50062,50063],{"class":84,"line":5176},[82,50064,50065],{"class":2828},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[82,50067,50068,50071,50073,50076,50079,50081,50083,50085,50087,50089],{"class":84,"line":5190},[82,50069,50070],{"class":92},"            sum_normalized_pixel_values ",[82,50072,12068],{"class":112},[82,50074,50075],{"class":92}," np.sum(normalized_image_array, ",[82,50077,50078],{"class":108},"axis",[82,50080,113],{"class":112},[82,50082,93],{"class":92},[82,50084,2244],{"class":88},[82,50086,100],{"class":92},[82,50088,2283],{"class":88},[82,50090,33074],{"class":92},[82,50092,50093],{"class":84,"line":5198},[82,50094,486],{"emptyLinePlaceholder":485},[82,50096,50097],{"class":84,"line":5203},[82,50098,50099],{"class":2828},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[82,50101,50102,50105,50107,50110,50112],{"class":84,"line":5209},[82,50103,50104],{"class":92},"mean ",[82,50106,113],{"class":112},[82,50108,50109],{"class":92}," sum_normalized_pixel_values ",[82,50111,1147],{"class":112},[82,50113,50114],{"class":92}," total_pixels\n",[82,50116,50117],{"class":84,"line":5215},[82,50118,486],{"emptyLinePlaceholder":485},[82,50120,50121,50124,50126,50128,50130],{"class":84,"line":5220},[82,50122,50123],{"class":92},"sum_squared_diff ",[82,50125,113],{"class":112},[82,50127,49907],{"class":92},[82,50129,2841],{"class":88},[82,50131,119],{"class":92},[82,50133,50134],{"class":84,"line":10539},[82,50135,486],{"emptyLinePlaceholder":485},[82,50137,50138],{"class":84,"line":10563},[82,50139,50140],{"class":2828},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[82,50142,50143],{"class":84,"line":10568},[82,50144,50145],{"class":2828},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[82,50147,50148],{"class":84,"line":10574},[82,50149,50150],{"class":2828},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[82,50152,50153],{"class":84,"line":10601},[82,50154,50155],{"class":2828},"# Image.open(image_path)：打开图片\n",[82,50157,50158],{"class":84,"line":10606},[82,50159,50160],{"class":2828},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[82,50162,50163,50165,50167,50169],{"class":84,"line":10612},[82,50164,597],{"class":112},[82,50166,49930],{"class":92},[82,50168,603],{"class":112},[82,50170,49935],{"class":92},[82,50172,50173,50175,50177,50179],{"class":84,"line":10624},[82,50174,1888],{"class":112},[82,50176,49942],{"class":92},[82,50178,603],{"class":112},[82,50180,49947],{"class":92},[82,50182,50183,50185,50187,50189,50191,50193,50195,50197,50199,50201],{"class":84,"line":10636},[82,50184,5096],{"class":112},[82,50186,49954],{"class":92},[82,50188,49957],{"class":96},[82,50190,100],{"class":92},[82,50192,49962],{"class":96},[82,50194,100],{"class":92},[82,50196,49967],{"class":96},[82,50198,100],{"class":92},[82,50200,49972],{"class":96},[82,50202,50203],{"class":92},")):\n",[82,50205,50206,50208,50210],{"class":84,"line":10648},[82,50207,48237],{"class":92},[82,50209,113],{"class":112},[82,50211,49987],{"class":92},[82,50213,50214,50216,50218],{"class":84,"line":12307},[82,50215,49992],{"class":92},[82,50217,113],{"class":112},[82,50219,49997],{"class":92},[82,50221,50222,50224,50226],{"class":84,"line":12332},[82,50223,50002],{"class":92},[82,50225,113],{"class":112},[82,50227,50007],{"class":92},[82,50229,50230],{"class":84,"line":12355},[82,50231,50016],{"class":2828},[82,50233,50234,50236,50238,50240,50242],{"class":84,"line":12379},[82,50235,50021],{"class":92},[82,50237,113],{"class":112},[82,50239,50026],{"class":92},[82,50241,1147],{"class":112},[82,50243,50031],{"class":88},[82,50245,50246],{"class":84,"line":12384},[82,50247,50045],{"class":2828},[82,50249,50250],{"class":84,"line":12389},[82,50251,50252],{"class":2828},"            # print(mean.shape)\n",[82,50254,50255],{"class":84,"line":12394},[82,50256,50040],{"class":2828},[82,50258,50259],{"class":84,"line":12403},[82,50260,486],{"emptyLinePlaceholder":485},[82,50262,50263,50266],{"class":84,"line":12408},[82,50264,50265],{"class":112},"            try",[82,50267,669],{"class":92},[82,50269,50270,50273,50275,50278,50280,50283,50285],{"class":84,"line":12414},[82,50271,50272],{"class":92},"                diff ",[82,50274,113],{"class":112},[82,50276,50277],{"class":92}," (normalized_image_array ",[82,50279,3288],{"class":112},[82,50281,50282],{"class":92}," mean) ",[82,50284,13251],{"class":112},[82,50286,50287],{"class":88}," 2\n",[82,50289,50290,50293,50295,50298,50300,50302,50304,50306,50308,50310],{"class":84,"line":12435},[82,50291,50292],{"class":92},"                sum_squared_diff ",[82,50294,12068],{"class":112},[82,50296,50297],{"class":92}," np.sum(diff, ",[82,50299,50078],{"class":108},[82,50301,113],{"class":112},[82,50303,93],{"class":92},[82,50305,2244],{"class":88},[82,50307,100],{"class":92},[82,50309,2283],{"class":88},[82,50311,33074],{"class":92},[82,50313,50314,50317],{"class":84,"line":12441},[82,50315,50316],{"class":112},"            except",[82,50318,669],{"class":92},[82,50320,50321,50324,50326,50328,50331],{"class":84,"line":12455},[82,50322,50323],{"class":88},"                print",[82,50325,93],{"class":92},[82,50327,2822],{"class":112},[82,50329,50330],{"class":96},"\"捕获到自定义异常\"",[82,50332,119],{"class":92},[82,50334,50335],{"class":84,"line":12461},[82,50336,50337],{"class":2828},"            # diff = (normalized_image_array - mean) ** 2\n",[82,50339,50340],{"class":84,"line":12488},[82,50341,50342],{"class":2828},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[82,50344,50345],{"class":84,"line":12497},[82,50346,486],{"emptyLinePlaceholder":485},[82,50348,50349,50352,50354,50357,50359],{"class":84,"line":12503},[82,50350,50351],{"class":92},"variance ",[82,50353,113],{"class":112},[82,50355,50356],{"class":92}," sum_squared_diff ",[82,50358,1147],{"class":112},[82,50360,50114],{"class":92},[82,50362,50363],{"class":84,"line":12511},[82,50364,486],{"emptyLinePlaceholder":485},[82,50366,50367,50369,50371,50374],{"class":84,"line":12516},[82,50368,407],{"class":88},[82,50370,93],{"class":92},[82,50372,50373],{"class":96},"\"Mean:\"",[82,50375,50376],{"class":92},", mean)\n",[82,50378,50379,50381,50383,50386],{"class":84,"line":19189},[82,50380,407],{"class":88},[82,50382,93],{"class":92},[82,50384,50385],{"class":96},"\"Variance:\"",[82,50387,50388],{"class":92},", variance)\n",[73,50390,50392],{"className":75,"code":50391,"language":77,"meta":78,"style":78},"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",[32,50393,50394,50400,50406,50416,50422,50432,50446,50456,50466,50476,50480,50490,50500,50504,50508,50516,50521,50526,50544,50548,50553,50558,50563,50568,50609,50614,50624,50629,50642,50647,50652,50657,50662,50667,50671,50676,50681,50703,50707,50739,50753,50763,50773,50777,50787,50801,50811,50821,50831,50837,50841,50845,50849,50853,50857,50865,50885,50889,50893,50897,50901,50917,50921,50925,50933,50937,50941,50949,50953,50957,50961,50969,50973,50977,50981,50989,50993,51001,51005,51013,51017,51025,51029,51037,51041,51045,51053,51057,51061,51073,51097,51111,51115,51119,51123,51131,51135,51143,51147,51155,51159,51167,51171,51179,51183,51191,51195,51207,51211,51219,51223,51231,51235,51239,51243,51247,51255,51259,51275,51279,51287,51291,51295,51299,51303,51307,51311,51315,51331,51335,51347,51351,51363,51367,51379,51383,51391,51395,51403,51407,51411,51415,51421,51425,51433,51437,51453,51457,51465,51469,51485,51497,51501,51513,51517,51521,51529,51533,51537,51545,51549,51557,51561,51569,51573,51577,51619,51661,51665,51669,51685,51689,51705,51709,51713,51721,51725,51729,51741,51779,51783,51787,51795,51799,51813,51823,51829,51835,51841,51847,51851,51855,51861,51865,51869,51877,51881,51899,51903,51907,51911,51927,51931,51935,51939,51943,51947,51967,51987,51991,51995,51999,52007,52015,52019,52035,52055,52075,52079,52084,52093,52102,52107,52112,52117,52130,52135,52144,52153,52170],{"__ignoreMap":78},[82,50395,50396,50398],{"class":84,"line":85},[82,50397,1123],{"class":112},[82,50399,34394],{"class":92},[82,50401,50402,50404],{"class":84,"line":157},[82,50403,1123],{"class":112},[82,50405,34401],{"class":92},[82,50407,50408,50410,50412,50414],{"class":84,"line":404},[82,50409,1123],{"class":112},[82,50411,34412],{"class":92},[82,50413,728],{"class":112},[82,50415,34417],{"class":92},[82,50417,50418,50420],{"class":84,"line":413},[82,50419,1123],{"class":112},[82,50421,32973],{"class":92},[82,50423,50424,50426,50428,50430],{"class":84,"line":508},[82,50425,1117],{"class":112},[82,50427,33989],{"class":92},[82,50429,1123],{"class":112},[82,50431,34434],{"class":92},[82,50433,50434,50436,50438,50440,50443],{"class":84,"line":513},[82,50435,1117],{"class":112},[82,50437,33943],{"class":92},[82,50439,1123],{"class":112},[82,50441,50442],{"class":92}," ImageFolder ",[82,50444,50445],{"class":2828},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[82,50447,50448,50450,50452,50454],{"class":84,"line":1388},[82,50449,1117],{"class":112},[82,50451,33972],{"class":92},[82,50453,1123],{"class":112},[82,50455,33977],{"class":92},[82,50457,50458,50460,50462,50464],{"class":84,"line":1394},[82,50459,1123],{"class":112},[82,50461,33989],{"class":92},[82,50463,728],{"class":112},[82,50465,33994],{"class":92},[82,50467,50468,50470,50472,50474],{"class":84,"line":1399},[82,50469,1123],{"class":112},[82,50471,34006],{"class":92},[82,50473,728],{"class":112},[82,50475,34011],{"class":92},[82,50477,50478],{"class":84,"line":1430},[82,50479,34479],{"class":2828},[82,50481,50482,50484,50486,50488],{"class":84,"line":1818},[82,50483,1117],{"class":112},[82,50485,34486],{"class":92},[82,50487,1123],{"class":112},[82,50489,45596],{"class":92},[82,50491,50492,50494,50496,50498],{"class":84,"line":2082},[82,50493,1117],{"class":112},[82,50495,33316],{"class":92},[82,50497,1123],{"class":112},[82,50499,33321],{"class":92},[82,50501,50502],{"class":84,"line":2233},[82,50503,486],{"emptyLinePlaceholder":485},[82,50505,50506],{"class":84,"line":2255},[82,50507,34514],{"class":2828},[82,50509,50510,50512,50514],{"class":84,"line":2260},[82,50511,2381],{"class":112},[82,50513,34521],{"class":2384},[82,50515,2388],{"class":92},[82,50517,50518],{"class":84,"line":2298},[82,50519,50520],{"class":2828},"    # 导入自己的数据集，并进行数据处理\n",[82,50522,50523],{"class":84,"line":2303},[82,50524,50525],{"class":2828},"    # 定义数据集的路径\n",[82,50527,50528,50531,50533,50535,50537,50539,50542],{"class":84,"line":2321},[82,50529,50530],{"class":88},"    ROOT_PATH",[82,50532,113],{"class":112},[82,50534,303],{"class":112},[82,50536,216],{"class":96},[82,50538,233],{"class":88},[82,50540,50541],{"class":219},"\u002Fdata\u002Ftrain",[82,50543,239],{"class":96},[82,50545,50546],{"class":84,"line":2533},[82,50547,486],{"emptyLinePlaceholder":485},[82,50549,50550],{"class":84,"line":2538},[82,50551,50552],{"class":2828},"    # 定义归一化方法\n",[82,50554,50555],{"class":84,"line":2548},[82,50556,50557],{"class":2828},"    # 这里需要先计算一下数据集的均值和方差\n",[82,50559,50560],{"class":84,"line":2579},[82,50561,50562],{"class":2828},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[82,50564,50565],{"class":84,"line":2585},[82,50566,50567],{"class":2828},"    # 第一个参数是均值，第二个参数是方差\n",[82,50569,50570,50573,50575,50578,50581,50583,50586,50588,50591,50594,50597,50599,50602,50604,50607],{"class":84,"line":4350},[82,50571,50572],{"class":92},"    normalize",[82,50574,113],{"class":112},[82,50576,50577],{"class":92},"transforms.Normalize([",[82,50579,50580],{"class":88},"0.162",[82,50582,3136],{"class":92},[82,50584,50585],{"class":88},"0.151",[82,50587,3136],{"class":92},[82,50589,50590],{"class":88},"0.138",[82,50592,50593],{"class":92},"],[",[82,50595,50596],{"class":88},"0.058",[82,50598,3136],{"class":92},[82,50600,50601],{"class":88},"0.052",[82,50603,3136],{"class":92},[82,50605,50606],{"class":88},"0.048",[82,50608,7252],{"class":92},[82,50610,50611],{"class":84,"line":4355},[82,50612,50613],{"class":2828},"    # 定义数据集处理方法变量\n",[82,50615,50616,50619,50621],{"class":84,"line":4360},[82,50617,50618],{"class":92},"    train_transform",[82,50620,113],{"class":112},[82,50622,50623],{"class":92},"transforms.Compose([\n",[82,50625,50626],{"class":84,"line":4365},[82,50627,50628],{"class":2828},"        # 调整图像大小为224*224\n",[82,50630,50631,50634,50636,50638,50640],{"class":84,"line":4379},[82,50632,50633],{"class":92},"        transforms.Resize((",[82,50635,34073],{"class":88},[82,50637,3136],{"class":92},[82,50639,34073],{"class":88},[82,50641,45187],{"class":92},[82,50643,50644],{"class":84,"line":4384},[82,50645,50646],{"class":2828},"        # 将图像转换为张量\n",[82,50648,50649],{"class":84,"line":5176},[82,50650,50651],{"class":92},"        transforms.ToTensor(),\n",[82,50653,50654],{"class":84,"line":5190},[82,50655,50656],{"class":92},"        normalize])\n",[82,50658,50659],{"class":84,"line":5198},[82,50660,50661],{"class":2828},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[82,50663,50664],{"class":84,"line":5203},[82,50665,50666],{"class":2828},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[82,50668,50669],{"class":84,"line":5209},[82,50670,486],{"emptyLinePlaceholder":485},[82,50672,50673],{"class":84,"line":5215},[82,50674,50675],{"class":2828},"    # 加载数据集\n",[82,50677,50678],{"class":84,"line":5220},[82,50679,50680],{"class":2828},"    # 传入数据集路径与处理方法\n",[82,50682,50683,50685,50687,50690,50693,50695,50698,50700],{"class":84,"line":10539},[82,50684,34528],{"class":92},[82,50686,113],{"class":112},[82,50688,50689],{"class":92},"ImageFolder(",[82,50691,50692],{"class":88},"ROOT_PATH",[82,50694,3136],{"class":92},[82,50696,50697],{"class":108},"transform",[82,50699,113],{"class":112},[82,50701,50702],{"class":92},"train_transform)\n",[82,50704,50705],{"class":84,"line":10563},[82,50706,486],{"emptyLinePlaceholder":485},[82,50708,50709,50711,50713,50715,50717,50719,50721,50723,50725,50727,50729,50731,50733,50735,50737],{"class":84,"line":10568},[82,50710,34580],{"class":92},[82,50712,113],{"class":112},[82,50714,34585],{"class":92},[82,50716,34588],{"class":88},[82,50718,93],{"class":92},[82,50720,34593],{"class":88},[82,50722,3212],{"class":112},[82,50724,9950],{"class":88},[82,50726,34600],{"class":92},[82,50728,34588],{"class":88},[82,50730,93],{"class":92},[82,50732,34607],{"class":88},[82,50734,3212],{"class":112},[82,50736,9950],{"class":88},[82,50738,34614],{"class":92},[82,50740,50741,50743,50745,50747,50749,50751],{"class":84,"line":10574},[82,50742,34619],{"class":92},[82,50744,113],{"class":112},[82,50746,34624],{"class":92},[82,50748,34109],{"class":108},[82,50750,113],{"class":112},[82,50752,34114],{"class":92},[82,50754,50755,50757,50759,50761],{"class":84,"line":10601},[82,50756,34635],{"class":108},[82,50758,113],{"class":112},[82,50760,2958],{"class":88},[82,50762,1363],{"class":92},[82,50764,50765,50767,50769,50771],{"class":84,"line":10606},[82,50766,34647],{"class":108},[82,50768,113],{"class":112},[82,50770,1205],{"class":88},[82,50772,1363],{"class":92},[82,50774,50775],{"class":84,"line":10612},[82,50776,34658],{"class":2828},[82,50778,50779,50781,50783,50785],{"class":84,"line":10624},[82,50780,34663],{"class":108},[82,50782,113],{"class":112},[82,50784,3153],{"class":88},[82,50786,119],{"class":92},[82,50788,50789,50791,50793,50795,50797,50799],{"class":84,"line":10636},[82,50790,34674],{"class":92},[82,50792,113],{"class":112},[82,50794,34106],{"class":92},[82,50796,34109],{"class":108},[82,50798,113],{"class":112},[82,50800,34685],{"class":92},[82,50802,50803,50805,50807,50809],{"class":84,"line":10648},[82,50804,34690],{"class":108},[82,50806,113],{"class":112},[82,50808,2958],{"class":88},[82,50810,1363],{"class":92},[82,50812,50813,50815,50817,50819],{"class":84,"line":12307},[82,50814,34701],{"class":108},[82,50816,113],{"class":112},[82,50818,1205],{"class":88},[82,50820,1363],{"class":92},[82,50822,50823,50825,50827,50829],{"class":84,"line":12332},[82,50824,34712],{"class":108},[82,50826,113],{"class":112},[82,50828,3153],{"class":88},[82,50830,119],{"class":92},[82,50832,50833,50835],{"class":84,"line":12355},[82,50834,6685],{"class":112},[82,50836,34725],{"class":92},[82,50838,50839],{"class":84,"line":12379},[82,50840,486],{"emptyLinePlaceholder":485},[82,50842,50843],{"class":84,"line":12384},[82,50844,34734],{"class":2828},[82,50846,50847],{"class":84,"line":12389},[82,50848,34739],{"class":2828},[82,50850,50851],{"class":84,"line":12394},[82,50852,486],{"emptyLinePlaceholder":485},[82,50854,50855],{"class":84,"line":12403},[82,50856,34748],{"class":2828},[82,50858,50859,50861,50863],{"class":84,"line":12408},[82,50860,2381],{"class":112},[82,50862,34755],{"class":2384},[82,50864,34758],{"class":92},[82,50866,50867,50869,50871,50873,50875,50877,50879,50881,50883],{"class":84,"line":12414},[82,50868,33813],{"class":92},[82,50870,113],{"class":112},[82,50872,33028],{"class":92},[82,50874,33820],{"class":96},[82,50876,4307],{"class":112},[82,50878,33825],{"class":92},[82,50880,4304],{"class":112},[82,50882,34777],{"class":96},[82,50884,119],{"class":92},[82,50886,50887],{"class":84,"line":12435},[82,50888,486],{"emptyLinePlaceholder":485},[82,50890,50891],{"class":84,"line":12441},[82,50892,34792],{"class":2828},[82,50894,50895],{"class":84,"line":12455},[82,50896,34797],{"class":2828},[82,50898,50899],{"class":84,"line":12461},[82,50900,34802],{"class":2828},[82,50902,50903,50905,50907,50909,50911,50913,50915],{"class":84,"line":12488},[82,50904,34807],{"class":92},[82,50906,113],{"class":112},[82,50908,34812],{"class":92},[82,50910,34815],{"class":108},[82,50912,113],{"class":112},[82,50914,34820],{"class":88},[82,50916,119],{"class":92},[82,50918,50919],{"class":84,"line":12497},[82,50920,486],{"emptyLinePlaceholder":485},[82,50922,50923],{"class":84,"line":12503},[82,50924,34831],{"class":2828},[82,50926,50927,50929,50931],{"class":84,"line":12511},[82,50928,34836],{"class":92},[82,50930,113],{"class":112},[82,50932,34841],{"class":92},[82,50934,50935],{"class":84,"line":12516},[82,50936,486],{"emptyLinePlaceholder":485},[82,50938,50939],{"class":84,"line":19189},[82,50940,34850],{"class":2828},[82,50942,50943,50945,50947],{"class":84,"line":19195},[82,50944,33865],{"class":92},[82,50946,113],{"class":112},[82,50948,34859],{"class":92},[82,50950,50951],{"class":84,"line":19218},[82,50952,34864],{"class":2828},[82,50954,50955],{"class":84,"line":19224},[82,50956,34869],{"class":2828},[82,50958,50959],{"class":84,"line":19247},[82,50960,34874],{"class":2828},[82,50962,50963,50965,50967],{"class":84,"line":19261},[82,50964,34879],{"class":92},[82,50966,113],{"class":112},[82,50968,34884],{"class":92},[82,50970,50971],{"class":84,"line":19281},[82,50972,486],{"emptyLinePlaceholder":485},[82,50974,50975],{"class":84,"line":19287},[82,50976,34897],{"class":2828},[82,50978,50979],{"class":84,"line":19298},[82,50980,34902],{"class":2828},[82,50982,50983,50985,50987],{"class":84,"line":19321},[82,50984,34907],{"class":92},[82,50986,113],{"class":112},[82,50988,34912],{"class":88},[82,50990,50991],{"class":84,"line":19343},[82,50992,34917],{"class":2828},[82,50994,50995,50997,50999],{"class":84,"line":19348},[82,50996,34922],{"class":92},[82,50998,113],{"class":112},[82,51000,34927],{"class":92},[82,51002,51003],{"class":84,"line":19354},[82,51004,34932],{"class":2828},[82,51006,51007,51009,51011],{"class":84,"line":19368},[82,51008,34937],{"class":92},[82,51010,113],{"class":112},[82,51012,34927],{"class":92},[82,51014,51015],{"class":84,"line":19381},[82,51016,34946],{"class":2828},[82,51018,51019,51021,51023],{"class":84,"line":19386},[82,51020,34951],{"class":92},[82,51022,113],{"class":112},[82,51024,34927],{"class":92},[82,51026,51027],{"class":84,"line":19400},[82,51028,34960],{"class":2828},[82,51030,51031,51033,51035],{"class":84,"line":19405},[82,51032,34965],{"class":92},[82,51034,113],{"class":112},[82,51036,34927],{"class":92},[82,51038,51039],{"class":84,"line":19411},[82,51040,486],{"emptyLinePlaceholder":485},[82,51042,51043],{"class":84,"line":19416},[82,51044,34978],{"class":2828},[82,51046,51047,51049,51051],{"class":84,"line":19430},[82,51048,34983],{"class":92},[82,51050,113],{"class":112},[82,51052,34988],{"class":92},[82,51054,51055],{"class":84,"line":19435},[82,51056,486],{"emptyLinePlaceholder":485},[82,51058,51059],{"class":84,"line":19440},[82,51060,35001],{"class":2828},[82,51062,51063,51065,51067,51069,51071],{"class":84,"line":19454},[82,51064,1888],{"class":112},[82,51066,35008],{"class":92},[82,51068,603],{"class":112},[82,51070,35013],{"class":88},[82,51072,35016],{"class":92},[82,51074,51075,51077,51079,51081,51083,51085,51087,51089,51091,51093,51095],{"class":84,"line":19466},[82,51076,1901],{"class":88},[82,51078,93],{"class":92},[82,51080,35025],{"class":96},[82,51082,35028],{"class":88},[82,51084,1147],{"class":96},[82,51086,35028],{"class":88},[82,51088,216],{"class":96},[82,51090,35037],{"class":92},[82,51092,3288],{"class":112},[82,51094,2283],{"class":88},[82,51096,33074],{"class":92},[82,51098,51099,51101,51103,51105,51107,51109],{"class":84,"line":19471},[82,51100,1901],{"class":88},[82,51102,93],{"class":92},[82,51104,35052],{"class":96},[82,51106,3212],{"class":112},[82,51108,440],{"class":88},[82,51110,119],{"class":92},[82,51112,51113],{"class":84,"line":19484},[82,51114,486],{"emptyLinePlaceholder":485},[82,51116,51117],{"class":84,"line":19489},[82,51118,35067],{"class":2828},[82,51120,51121],{"class":84,"line":19494},[82,51122,35072],{"class":2828},[82,51124,51125,51127,51129],{"class":84,"line":19499},[82,51126,35077],{"class":92},[82,51128,113],{"class":112},[82,51130,34912],{"class":88},[82,51132,51133],{"class":84,"line":19512},[82,51134,35086],{"class":2828},[82,51136,51137,51139,51141],{"class":84,"line":19517},[82,51138,35091],{"class":92},[82,51140,113],{"class":112},[82,51142,5683],{"class":88},[82,51144,51145],{"class":84,"line":35202},[82,51146,35100],{"class":2828},[82,51148,51149,51151,51153],{"class":84,"line":35208},[82,51150,35105],{"class":92},[82,51152,113],{"class":112},[82,51154,34912],{"class":88},[82,51156,51157],{"class":84,"line":35214},[82,51158,35114],{"class":2828},[82,51160,51161,51163,51165],{"class":84,"line":35220},[82,51162,35119],{"class":92},[82,51164,113],{"class":112},[82,51166,5683],{"class":88},[82,51168,51169],{"class":84,"line":35226},[82,51170,35128],{"class":2828},[82,51172,51173,51175,51177],{"class":84,"line":35237},[82,51174,35133],{"class":92},[82,51176,113],{"class":112},[82,51178,5683],{"class":88},[82,51180,51181],{"class":84,"line":35243},[82,51182,35142],{"class":2828},[82,51184,51185,51187,51189],{"class":84,"line":35263},[82,51186,35147],{"class":92},[82,51188,113],{"class":112},[82,51190,5683],{"class":88},[82,51192,51193],{"class":84,"line":35269},[82,51194,35156],{"class":2828},[82,51196,51197,51199,51201,51203,51205],{"class":84,"line":35280},[82,51198,5999],{"class":112},[82,51200,34173],{"class":92},[82,51202,603],{"class":112},[82,51204,34178],{"class":88},[82,51206,35169],{"class":92},[82,51208,51209],{"class":84,"line":35286},[82,51210,35174],{"class":2828},[82,51212,51213,51215,51217],{"class":84,"line":35292},[82,51214,35179],{"class":92},[82,51216,113],{"class":112},[82,51218,35184],{"class":92},[82,51220,51221],{"class":84,"line":35298},[82,51222,35189],{"class":2828},[82,51224,51225,51227,51229],{"class":84,"line":35304},[82,51226,35194],{"class":92},[82,51228,113],{"class":112},[82,51230,35199],{"class":92},[82,51232,51233],{"class":84,"line":35310},[82,51234,35205],{"class":2828},[82,51236,51237],{"class":84,"line":35316},[82,51238,35211],{"class":92},[82,51240,51241],{"class":84,"line":35322},[82,51242,35217],{"class":2828},[82,51244,51245],{"class":84,"line":35342},[82,51246,35223],{"class":2828},[82,51248,51249,51251,51253],{"class":84,"line":35348},[82,51250,35229],{"class":92},[82,51252,113],{"class":112},[82,51254,35234],{"class":92},[82,51256,51257],{"class":84,"line":35364},[82,51258,35240],{"class":2828},[82,51260,51261,51263,51265,51267,51269,51271,51273],{"class":84,"line":35370},[82,51262,35246],{"class":92},[82,51264,113],{"class":112},[82,51266,35251],{"class":92},[82,51268,35254],{"class":108},[82,51270,113],{"class":112},[82,51272,2283],{"class":88},[82,51274,119],{"class":92},[82,51276,51277],{"class":84,"line":35384},[82,51278,35266],{"class":2828},[82,51280,51281,51283,51285],{"class":84,"line":35390},[82,51282,35272],{"class":92},[82,51284,113],{"class":112},[82,51286,35277],{"class":92},[82,51288,51289],{"class":84,"line":35405},[82,51290,35283],{"class":2828},[82,51292,51293],{"class":84,"line":35411},[82,51294,35289],{"class":92},[82,51296,51297],{"class":84,"line":35420},[82,51298,35295],{"class":2828},[82,51300,51301],{"class":84,"line":35426},[82,51302,35301],{"class":92},[82,51304,51305],{"class":84,"line":35435},[82,51306,35307],{"class":2828},[82,51308,51309],{"class":84,"line":35441},[82,51310,35313],{"class":92},[82,51312,51313],{"class":84,"line":35447},[82,51314,35319],{"class":2828},[82,51316,51317,51319,51321,51323,51325,51327,51329],{"class":84,"line":35456},[82,51318,35325],{"class":92},[82,51320,12068],{"class":112},[82,51322,35330],{"class":92},[82,51324,3212],{"class":112},[82,51326,35335],{"class":92},[82,51328,2244],{"class":88},[82,51330,119],{"class":92},[82,51332,51333],{"class":84,"line":35462},[82,51334,35345],{"class":2828},[82,51336,51337,51339,51341,51343,51345],{"class":84,"line":35473},[82,51338,35351],{"class":92},[82,51340,12068],{"class":112},[82,51342,35356],{"class":92},[82,51344,5548],{"class":112},[82,51346,35361],{"class":92},[82,51348,51349],{"class":84,"line":35479},[82,51350,35367],{"class":2828},[82,51352,51353,51355,51357,51359,51361],{"class":84,"line":35498},[82,51354,35373],{"class":92},[82,51356,12068],{"class":112},[82,51358,35335],{"class":92},[82,51360,2244],{"class":88},[82,51362,119],{"class":92},[82,51364,51365],{"class":84,"line":35504},[82,51366,35387],{"class":2828},[82,51368,51369,51371,51373,51375,51377],{"class":84,"line":35515},[82,51370,5999],{"class":112},[82,51372,35395],{"class":92},[82,51374,603],{"class":112},[82,51376,34178],{"class":88},[82,51378,35402],{"class":92},[82,51380,51381],{"class":84,"line":35521},[82,51382,35408],{"class":2828},[82,51384,51385,51387,51389],{"class":84,"line":35541},[82,51386,35179],{"class":92},[82,51388,113],{"class":112},[82,51390,35184],{"class":92},[82,51392,51393],{"class":84,"line":35557},[82,51394,35423],{"class":2828},[82,51396,51397,51399,51401],{"class":84,"line":35563},[82,51398,35194],{"class":92},[82,51400,113],{"class":112},[82,51402,35199],{"class":92},[82,51404,51405],{"class":84,"line":35577},[82,51406,35438],{"class":2828},[82,51408,51409],{"class":84,"line":35583},[82,51410,35444],{"class":92},[82,51412,51413],{"class":84,"line":35589},[82,51414,38922],{"class":2828},[82,51416,51417,51419],{"class":84,"line":35600},[82,51418,35450],{"class":112},[82,51420,35453],{"class":92},[82,51422,51423],{"class":84,"line":35606},[82,51424,35459],{"class":2828},[82,51426,51427,51429,51431],{"class":84,"line":35612},[82,51428,38937],{"class":92},[82,51430,113],{"class":112},[82,51432,35234],{"class":92},[82,51434,51435],{"class":84,"line":35622},[82,51436,35476],{"class":2828},[82,51438,51439,51441,51443,51445,51447,51449,51451],{"class":84,"line":35628},[82,51440,38950],{"class":92},[82,51442,113],{"class":112},[82,51444,35251],{"class":92},[82,51446,35254],{"class":108},[82,51448,113],{"class":112},[82,51450,2283],{"class":88},[82,51452,119],{"class":92},[82,51454,51455],{"class":84,"line":35639},[82,51456,35501],{"class":2828},[82,51458,51459,51461,51463],{"class":84,"line":35645},[82,51460,38971],{"class":92},[82,51462,113],{"class":112},[82,51464,35277],{"class":92},[82,51466,51467],{"class":84,"line":35655},[82,51468,35518],{"class":2828},[82,51470,51471,51473,51475,51477,51479,51481,51483],{"class":84,"line":35660},[82,51472,38984],{"class":92},[82,51474,12068],{"class":112},[82,51476,38989],{"class":92},[82,51478,3212],{"class":112},[82,51480,35335],{"class":92},[82,51482,2244],{"class":88},[82,51484,119],{"class":92},[82,51486,51487,51489,51491,51493,51495],{"class":84,"line":35666},[82,51488,39002],{"class":92},[82,51490,12068],{"class":112},[82,51492,35356],{"class":92},[82,51494,5548],{"class":112},[82,51496,35361],{"class":92},[82,51498,51499],{"class":84,"line":35715},[82,51500,39015],{"class":2828},[82,51502,51503,51505,51507,51509,51511],{"class":84,"line":35762},[82,51504,39020],{"class":92},[82,51506,12068],{"class":112},[82,51508,35335],{"class":92},[82,51510,2244],{"class":88},[82,51512,119],{"class":92},[82,51514,51515],{"class":84,"line":35767},[82,51516,35580],{"class":2828},[82,51518,51519],{"class":84,"line":35773},[82,51520,35586],{"class":2828},[82,51522,51523,51525,51527],{"class":84,"line":35792},[82,51524,35592],{"class":92},[82,51526,1147],{"class":112},[82,51528,35597],{"class":92},[82,51530,51531],{"class":84,"line":35798},[82,51532,35603],{"class":2828},[82,51534,51535],{"class":84,"line":35817},[82,51536,35609],{"class":2828},[82,51538,51539,51541,51543],{"class":84,"line":35823},[82,51540,35615],{"class":92},[82,51542,1147],{"class":112},[82,51544,35597],{"class":92},[82,51546,51547],{"class":84,"line":35829},[82,51548,35625],{"class":2828},[82,51550,51551,51553,51555],{"class":84,"line":35839},[82,51552,35631],{"class":92},[82,51554,1147],{"class":112},[82,51556,35636],{"class":92},[82,51558,51559],{"class":84,"line":35844},[82,51560,35642],{"class":2828},[82,51562,51563,51565,51567],{"class":84,"line":35850},[82,51564,35648],{"class":92},[82,51566,1147],{"class":112},[82,51568,35636],{"class":92},[82,51570,51571],{"class":84,"line":35866},[82,51572,486],{"emptyLinePlaceholder":485},[82,51574,51575],{"class":84,"line":35911},[82,51576,35663],{"class":2828},[82,51578,51579,51581,51583,51585,51587,51589,51591,51593,51595,51597,51599,51601,51603,51605,51607,51609,51611,51613,51615,51617],{"class":84,"line":35917},[82,51580,1901],{"class":88},[82,51582,93],{"class":92},[82,51584,6188],{"class":96},[82,51586,35028],{"class":88},[82,51588,35677],{"class":96},[82,51590,3645],{"class":88},[82,51592,35682],{"class":112},[82,51594,3695],{"class":88},[82,51596,35687],{"class":96},[82,51598,3645],{"class":88},[82,51600,35682],{"class":112},[82,51602,3695],{"class":88},[82,51604,6188],{"class":96},[82,51606,35698],{"class":92},[82,51608,3288],{"class":112},[82,51610,2283],{"class":88},[82,51612,35705],{"class":92},[82,51614,3288],{"class":112},[82,51616,2283],{"class":88},[82,51618,35712],{"class":92},[82,51620,51621,51623,51625,51627,51629,51631,51633,51635,51637,51639,51641,51643,51645,51647,51649,51651,51653,51655,51657,51659],{"class":84,"line":35923},[82,51622,1901],{"class":88},[82,51624,93],{"class":92},[82,51626,6188],{"class":96},[82,51628,35028],{"class":88},[82,51630,35726],{"class":96},[82,51632,3645],{"class":88},[82,51634,35682],{"class":112},[82,51636,3695],{"class":88},[82,51638,35735],{"class":96},[82,51640,3645],{"class":88},[82,51642,35682],{"class":112},[82,51644,3695],{"class":88},[82,51646,6188],{"class":96},[82,51648,35746],{"class":92},[82,51650,3288],{"class":112},[82,51652,2283],{"class":88},[82,51654,35753],{"class":92},[82,51656,3288],{"class":112},[82,51658,2283],{"class":88},[82,51660,35712],{"class":92},[82,51662,51663],{"class":84,"line":35929},[82,51664,486],{"emptyLinePlaceholder":485},[82,51666,51667],{"class":84,"line":35940},[82,51668,35770],{"class":2828},[82,51670,51671,51673,51675,51677,51679,51681,51683],{"class":84,"line":35946},[82,51672,5096],{"class":112},[82,51674,35778],{"class":92},[82,51676,3288],{"class":112},[82,51678,2283],{"class":88},[82,51680,3689],{"class":92},[82,51682,3709],{"class":112},[82,51684,35789],{"class":92},[82,51686,51687],{"class":84,"line":35952},[82,51688,35795],{"class":2828},[82,51690,51691,51693,51695,51697,51699,51701,51703],{"class":84,"line":35958},[82,51692,35801],{"class":92},[82,51694,2811],{"class":88},[82,51696,113],{"class":112},[82,51698,35808],{"class":92},[82,51700,3288],{"class":112},[82,51702,2283],{"class":88},[82,51704,875],{"class":92},[82,51706,51707],{"class":84,"line":35976},[82,51708,35820],{"class":2828},[82,51710,51711],{"class":84,"line":35990},[82,51712,35826],{"class":2828},[82,51714,51715,51717,51719],{"class":84,"line":35999},[82,51716,35832],{"class":92},[82,51718,113],{"class":112},[82,51720,34884],{"class":92},[82,51722,51723],{"class":84,"line":36008},[82,51724,486],{"emptyLinePlaceholder":485},[82,51726,51727],{"class":84,"line":36017},[82,51728,35847],{"class":2828},[82,51730,51731,51733,51735,51737,51739],{"class":84,"line":36026},[82,51732,35853],{"class":92},[82,51734,113],{"class":112},[82,51736,35858],{"class":92},[82,51738,3288],{"class":112},[82,51740,35863],{"class":92},[82,51742,51743,51745,51747,51749,51751,51753,51755,51757,51759,51761,51763,51765,51767,51769,51771,51773,51775,51777],{"class":84,"line":36032},[82,51744,1901],{"class":88},[82,51746,93],{"class":92},[82,51748,35873],{"class":96},[82,51750,3645],{"class":88},[82,51752,35878],{"class":112},[82,51754,3695],{"class":88},[82,51756,3300],{"class":96},[82,51758,3645],{"class":88},[82,51760,35878],{"class":112},[82,51762,3695],{"class":88},[82,51764,35891],{"class":96},[82,51766,35894],{"class":92},[82,51768,35897],{"class":112},[82,51770,3656],{"class":88},[82,51772,35902],{"class":92},[82,51774,3086],{"class":112},[82,51776,3656],{"class":88},[82,51778,33074],{"class":92},[82,51780,51781],{"class":84,"line":36038},[82,51782,39299],{"class":2828},[82,51784,51785],{"class":84,"line":36046},[82,51786,39304],{"class":2828},[82,51788,51789,51791,51793],{"class":84,"line":36051},[82,51790,39309],{"class":92},[82,51792,35935],{"class":96},[82,51794,119],{"class":92},[82,51796,51797],{"class":84,"line":36057},[82,51798,35955],{"class":2828},[82,51800,51801,51803,51805,51807,51809,51811],{"class":84,"line":36068},[82,51802,35961],{"class":92},[82,51804,113],{"class":112},[82,51806,35966],{"class":92},[82,51808,35969],{"class":108},[82,51810,113],{"class":112},[82,51812,4161],{"class":92},[82,51814,51815,51817,51819,51821],{"class":84,"line":36074},[82,51816,35979],{"class":96},[82,51818,3608],{"class":92},[82,51820,35984],{"class":88},[82,51822,35987],{"class":92},[82,51824,51825,51827],{"class":84,"line":36094},[82,51826,35993],{"class":96},[82,51828,35996],{"class":92},[82,51830,51831,51833],{"class":84,"line":36100},[82,51832,36002],{"class":96},[82,51834,36005],{"class":92},[82,51836,51837,51839],{"class":84,"line":36106},[82,51838,36011],{"class":96},[82,51840,36014],{"class":92},[82,51842,51843,51845],{"class":84,"line":36112},[82,51844,36020],{"class":96},[82,51846,36023],{"class":92},[82,51848,51849],{"class":84,"line":36129},[82,51850,36029],{"class":92},[82,51852,51853],{"class":84,"line":36135},[82,51854,36035],{"class":2828},[82,51856,51857,51859],{"class":84,"line":36141},[82,51858,6685],{"class":112},[82,51860,36043],{"class":92},[82,51862,51863],{"class":84,"line":36147},[82,51864,486],{"emptyLinePlaceholder":485},[82,51866,51867],{"class":84,"line":36153},[82,51868,36054],{"class":2828},[82,51870,51871,51873,51875],{"class":84,"line":36159},[82,51872,2381],{"class":112},[82,51874,36062],{"class":2384},[82,51876,36065],{"class":92},[82,51878,51879],{"class":84,"line":36186},[82,51880,36071],{"class":2828},[82,51882,51883,51885,51887,51889,51891,51893,51895,51897],{"class":84,"line":36210},[82,51884,36077],{"class":92},[82,51886,34265],{"class":108},[82,51888,113],{"class":112},[82,51890,93],{"class":92},[82,51892,3254],{"class":88},[82,51894,3136],{"class":92},[82,51896,3051],{"class":88},[82,51898,33074],{"class":92},[82,51900,51901],{"class":84,"line":36216},[82,51902,36097],{"class":2828},[82,51904,51905],{"class":84,"line":36222},[82,51906,36103],{"class":2828},[82,51908,51909],{"class":84,"line":36228},[82,51910,36109],{"class":2828},[82,51912,51913,51915,51917,51919,51921,51923,51925],{"class":84,"line":36239},[82,51914,34299],{"class":92},[82,51916,2283],{"class":88},[82,51918,3136],{"class":92},[82,51920,1425],{"class":88},[82,51922,3136],{"class":92},[82,51924,2283],{"class":88},[82,51926,119],{"class":92},[82,51928,51929],{"class":84,"line":36250},[82,51930,36132],{"class":2828},[82,51932,51933],{"class":84,"line":36256},[82,51934,36138],{"class":2828},[82,51936,51937],{"class":84,"line":36273},[82,51938,36144],{"class":2828},[82,51940,51941],{"class":84,"line":36296},[82,51942,36150],{"class":2828},[82,51944,51945],{"class":84,"line":36319},[82,51946,36156],{"class":2828},[82,51948,51949,51951,51953,51955,51957,51959,51961,51963,51965],{"class":84,"line":36325},[82,51950,36162],{"class":92},[82,51952,36165],{"class":96},[82,51954,36168],{"class":92},[82,51956,36171],{"class":96},[82,51958,3136],{"class":92},[82,51960,36176],{"class":108},[82,51962,113],{"class":112},[82,51964,36181],{"class":96},[82,51966,119],{"class":92},[82,51968,51969,51971,51973,51975,51977,51979,51981,51983,51985],{"class":84,"line":36330},[82,51970,36162],{"class":92},[82,51972,36165],{"class":96},[82,51974,36193],{"class":92},[82,51976,36196],{"class":96},[82,51978,3136],{"class":92},[82,51980,36176],{"class":108},[82,51982,113],{"class":112},[82,51984,36205],{"class":96},[82,51986,119],{"class":92},[82,51988,51989],{"class":84,"line":36339},[82,51990,36213],{"class":2828},[82,51992,51993],{"class":84,"line":36349},[82,51994,36219],{"class":92},[82,51996,51997],{"class":84,"line":36355},[82,51998,36225],{"class":2828},[82,52000,52001,52003,52005],{"class":84,"line":36360},[82,52002,36231],{"class":92},[82,52004,36234],{"class":96},[82,52006,119],{"class":92},[82,52008,52009,52011,52013],{"class":84,"line":36366},[82,52010,36242],{"class":92},[82,52012,36245],{"class":96},[82,52014,119],{"class":92},[82,52016,52017],{"class":84,"line":36379},[82,52018,36253],{"class":2828},[82,52020,52021,52023,52025,52027,52029,52031,52033],{"class":84,"line":36385},[82,52022,34299],{"class":92},[82,52024,2283],{"class":88},[82,52026,3136],{"class":92},[82,52028,1425],{"class":88},[82,52030,3136],{"class":92},[82,52032,1425],{"class":88},[82,52034,119],{"class":92},[82,52036,52037,52039,52041,52043,52045,52047,52049,52051,52053],{"class":84,"line":36396},[82,52038,36162],{"class":92},[82,52040,36165],{"class":96},[82,52042,36280],{"class":92},[82,52044,36171],{"class":96},[82,52046,3136],{"class":92},[82,52048,36176],{"class":108},[82,52050,113],{"class":112},[82,52052,36291],{"class":96},[82,52054,119],{"class":92},[82,52056,52057,52059,52061,52063,52065,52067,52069,52071,52073],{"class":84,"line":36407},[82,52058,36162],{"class":92},[82,52060,36165],{"class":96},[82,52062,36303],{"class":92},[82,52064,36196],{"class":96},[82,52066,3136],{"class":92},[82,52068,36176],{"class":108},[82,52070,113],{"class":112},[82,52072,36314],{"class":96},[82,52074,119],{"class":92},[82,52076,52077],{"class":84,"line":36426},[82,52078,36322],{"class":2828},[82,52080,52082],{"class":84,"line":52081},219,[82,52083,36219],{"class":92},[82,52085,52087,52089,52091],{"class":84,"line":52086},220,[82,52088,36231],{"class":92},[82,52090,36165],{"class":96},[82,52092,119],{"class":92},[82,52094,52096,52098,52100],{"class":84,"line":52095},221,[82,52097,36242],{"class":92},[82,52099,36344],{"class":96},[82,52101,119],{"class":92},[82,52103,52105],{"class":84,"line":52104},222,[82,52106,36352],{"class":92},[82,52108,52110],{"class":84,"line":52109},223,[82,52111,486],{"emptyLinePlaceholder":485},[82,52113,52115],{"class":84,"line":52114},224,[82,52116,36363],{"class":2828},[82,52118,52120,52122,52124,52126,52128],{"class":84,"line":52119},225,[82,52121,1237],{"class":112},[82,52123,33796],{"class":88},[82,52125,5548],{"class":112},[82,52127,33801],{"class":96},[82,52129,669],{"class":92},[82,52131,52133],{"class":84,"line":52132},226,[82,52134,36382],{"class":2828},[82,52136,52138,52140,52142],{"class":84,"line":52137},227,[82,52139,47111],{"class":92},[82,52141,113],{"class":112},[82,52143,47116],{"class":92},[82,52145,52147,52149,52151],{"class":84,"line":52146},228,[82,52148,36399],{"class":92},[82,52150,113],{"class":112},[82,52152,36404],{"class":92},[82,52154,52156,52158,52160,52162,52164,52166,52168],{"class":84,"line":52155},229,[82,52157,35961],{"class":92},[82,52159,113],{"class":112},[82,52161,47133],{"class":92},[82,52163,36417],{"class":108},[82,52165,113],{"class":112},[82,52167,3656],{"class":88},[82,52169,119],{"class":92},[82,52171,52173],{"class":84,"line":52172},230,[82,52174,36429],{"class":92},[24582,52176,52178],{"id":52177},"_242测试代码","2.4.2.测试代码",[19,52180,52181],{},"使用测试集进行测试与推理",[73,52183,52185],{"className":75,"code":52184,"language":77,"meta":78,"style":78},"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",[32,52186,52187,52193,52203,52213,52224,52234,52238,52242,52250,52255,52259,52276,52280,52284,52288,52292,52296,52328,52332,52340,52344,52356,52360,52364,52368,52372,52376,52380,52384,52388,52406,52420,52424,52434,52444,52454,52460,52464,52468,52476,52480,52496,52504,52508,52512,52520,52528,52532,52536,52540,52544,52550,52554,52564,52572,52580,52584,52588,52592,52600,52604,52620,52624,52628,52632,52644,52648,52660,52664,52668,52680,52684,52694,52698,52702,52714,52718,52726,52730,52734,52742,52746,52754,52758,52762,52766,52770,52774,52790,52798,52802,52806,52824,52830,52834,52844,52852,52860,52864,52868,52872,52876,52884,52888,52904,52908,52916,52924],{"__ignoreMap":78},[82,52188,52189,52191],{"class":84,"line":85},[82,52190,1123],{"class":112},[82,52192,32973],{"class":92},[82,52194,52195,52197,52199,52201],{"class":84,"line":157},[82,52196,1123],{"class":112},[82,52198,33989],{"class":92},[82,52200,728],{"class":112},[82,52202,33994],{"class":92},[82,52204,52205,52207,52209,52211],{"class":84,"line":404},[82,52206,1117],{"class":112},[82,52208,33972],{"class":92},[82,52210,1123],{"class":112},[82,52212,33977],{"class":92},[82,52214,52215,52217,52219,52221],{"class":84,"line":413},[82,52216,1117],{"class":112},[82,52218,33943],{"class":92},[82,52220,1123],{"class":112},[82,52222,52223],{"class":92}," ImageFolder\n",[82,52225,52226,52228,52230,52232],{"class":84,"line":508},[82,52227,1117],{"class":112},[82,52229,34486],{"class":92},[82,52231,1123],{"class":112},[82,52233,47205],{"class":92},[82,52235,52236],{"class":84,"line":513},[82,52237,486],{"emptyLinePlaceholder":485},[82,52239,52240],{"class":84,"line":1388},[82,52241,36519],{"class":2828},[82,52243,52244,52246,52248],{"class":84,"line":1394},[82,52245,2381],{"class":112},[82,52247,36526],{"class":2384},[82,52249,2388],{"class":92},[82,52251,52252],{"class":84,"line":1399},[82,52253,52254],{"class":2828},"   # 导入自己的数据集，并进行数据处理\n",[82,52256,52257],{"class":84,"line":1430},[82,52258,50525],{"class":2828},[82,52260,52261,52263,52265,52267,52269,52271,52274],{"class":84,"line":1818},[82,52262,50530],{"class":88},[82,52264,113],{"class":112},[82,52266,303],{"class":112},[82,52268,216],{"class":96},[82,52270,233],{"class":88},[82,52272,52273],{"class":219},"\u002Fdata\u002Ftest",[82,52275,239],{"class":96},[82,52277,52278],{"class":84,"line":2082},[82,52279,486],{"emptyLinePlaceholder":485},[82,52281,52282],{"class":84,"line":2233},[82,52283,50552],{"class":2828},[82,52285,52286],{"class":84,"line":2255},[82,52287,50557],{"class":2828},[82,52289,52290],{"class":84,"line":2260},[82,52291,50562],{"class":2828},[82,52293,52294],{"class":84,"line":2298},[82,52295,50567],{"class":2828},[82,52297,52298,52300,52302,52304,52306,52308,52310,52312,52314,52316,52318,52320,52322,52324,52326],{"class":84,"line":2303},[82,52299,50572],{"class":92},[82,52301,113],{"class":112},[82,52303,50577],{"class":92},[82,52305,50580],{"class":88},[82,52307,3136],{"class":92},[82,52309,50585],{"class":88},[82,52311,3136],{"class":92},[82,52313,50590],{"class":88},[82,52315,50593],{"class":92},[82,52317,50596],{"class":88},[82,52319,3136],{"class":92},[82,52321,50601],{"class":88},[82,52323,3136],{"class":92},[82,52325,50606],{"class":88},[82,52327,7252],{"class":92},[82,52329,52330],{"class":84,"line":2321},[82,52331,50613],{"class":2828},[82,52333,52334,52336,52338],{"class":84,"line":2533},[82,52335,50618],{"class":92},[82,52337,113],{"class":112},[82,52339,50623],{"class":92},[82,52341,52342],{"class":84,"line":2538},[82,52343,50628],{"class":2828},[82,52345,52346,52348,52350,52352,52354],{"class":84,"line":2548},[82,52347,50633],{"class":92},[82,52349,34073],{"class":88},[82,52351,3136],{"class":92},[82,52353,34073],{"class":88},[82,52355,45187],{"class":92},[82,52357,52358],{"class":84,"line":2579},[82,52359,50646],{"class":2828},[82,52361,52362],{"class":84,"line":2585},[82,52363,50651],{"class":92},[82,52365,52366],{"class":84,"line":4350},[82,52367,50656],{"class":92},[82,52369,52370],{"class":84,"line":4355},[82,52371,50661],{"class":2828},[82,52373,52374],{"class":84,"line":4360},[82,52375,50666],{"class":2828},[82,52377,52378],{"class":84,"line":4365},[82,52379,486],{"emptyLinePlaceholder":485},[82,52381,52382],{"class":84,"line":4379},[82,52383,50675],{"class":2828},[82,52385,52386],{"class":84,"line":4384},[82,52387,50680],{"class":2828},[82,52389,52390,52392,52394,52396,52398,52400,52402,52404],{"class":84,"line":5176},[82,52391,36533],{"class":92},[82,52393,113],{"class":112},[82,52395,50689],{"class":92},[82,52397,50692],{"class":88},[82,52399,3136],{"class":92},[82,52401,50697],{"class":108},[82,52403,113],{"class":112},[82,52405,50702],{"class":92},[82,52407,52408,52410,52412,52414,52416,52418],{"class":84,"line":5190},[82,52409,36589],{"class":92},[82,52411,113],{"class":112},[82,52413,34106],{"class":92},[82,52415,34109],{"class":108},[82,52417,113],{"class":112},[82,52419,36600],{"class":92},[82,52421,52422],{"class":84,"line":5198},[82,52423,36605],{"class":2828},[82,52425,52426,52428,52430,52432],{"class":84,"line":5203},[82,52427,36610],{"class":108},[82,52429,113],{"class":112},[82,52431,2283],{"class":88},[82,52433,1363],{"class":92},[82,52435,52436,52438,52440,52442],{"class":84,"line":5209},[82,52437,36621],{"class":108},[82,52439,113],{"class":112},[82,52441,1205],{"class":88},[82,52443,1363],{"class":92},[82,52445,52446,52448,52450,52452],{"class":84,"line":5215},[82,52447,36632],{"class":108},[82,52449,113],{"class":112},[82,52451,2244],{"class":88},[82,52453,119],{"class":92},[82,52455,52456,52458],{"class":84,"line":5220},[82,52457,6685],{"class":112},[82,52459,36645],{"class":92},[82,52461,52462],{"class":84,"line":10539},[82,52463,486],{"emptyLinePlaceholder":485},[82,52465,52466],{"class":84,"line":10563},[82,52467,36654],{"class":2828},[82,52469,52470,52472,52474],{"class":84,"line":10568},[82,52471,2381],{"class":112},[82,52473,36661],{"class":2384},[82,52475,36664],{"class":92},[82,52477,52478],{"class":84,"line":10574},[82,52479,36669],{"class":2828},[82,52481,52482,52484,52486,52488,52490,52492,52494],{"class":84,"line":10601},[82,52483,33813],{"class":92},[82,52485,113],{"class":112},[82,52487,33820],{"class":96},[82,52489,4307],{"class":112},[82,52491,33825],{"class":92},[82,52493,4304],{"class":112},[82,52495,36686],{"class":96},[82,52497,52498,52500,52502],{"class":84,"line":10606},[82,52499,33865],{"class":92},[82,52501,113],{"class":112},[82,52503,34859],{"class":92},[82,52505,52506],{"class":84,"line":10612},[82,52507,486],{"emptyLinePlaceholder":485},[82,52509,52510],{"class":84,"line":10624},[82,52511,36703],{"class":2828},[82,52513,52514,52516,52518],{"class":84,"line":10636},[82,52515,36708],{"class":92},[82,52517,113],{"class":112},[82,52519,34912],{"class":88},[82,52521,52522,52524,52526],{"class":84,"line":10648},[82,52523,36717],{"class":92},[82,52525,113],{"class":112},[82,52527,5683],{"class":88},[82,52529,52530],{"class":84,"line":12307},[82,52531,486],{"emptyLinePlaceholder":485},[82,52533,52534],{"class":84,"line":12332},[82,52535,36730],{"class":2828},[82,52537,52538],{"class":84,"line":12355},[82,52539,36735],{"class":2828},[82,52541,52542],{"class":84,"line":12379},[82,52543,36740],{"class":2828},[82,52545,52546,52548],{"class":84,"line":12384},[82,52547,2417],{"class":112},[82,52549,35453],{"class":92},[82,52551,52552],{"class":84,"line":12389},[82,52553,36751],{"class":2828},[82,52555,52556,52558,52560,52562],{"class":84,"line":12394},[82,52557,5999],{"class":112},[82,52559,36758],{"class":92},[82,52561,603],{"class":112},[82,52563,36763],{"class":92},[82,52565,52566,52568,52570],{"class":84,"line":12403},[82,52567,36768],{"class":92},[82,52569,113],{"class":112},[82,52571,36773],{"class":92},[82,52573,52574,52576,52578],{"class":84,"line":12408},[82,52575,36778],{"class":92},[82,52577,113],{"class":112},[82,52579,36783],{"class":92},[82,52581,52582],{"class":84,"line":12414},[82,52583,36788],{"class":2828},[82,52585,52586],{"class":84,"line":12435},[82,52587,35444],{"class":92},[82,52589,52590],{"class":84,"line":12441},[82,52591,36797],{"class":2828},[82,52593,52594,52596,52598],{"class":84,"line":12455},[82,52595,35229],{"class":92},[82,52597,113],{"class":112},[82,52599,36806],{"class":92},[82,52601,52602],{"class":84,"line":12461},[82,52603,36811],{"class":2828},[82,52605,52606,52608,52610,52612,52614,52616,52618],{"class":84,"line":12488},[82,52607,35246],{"class":92},[82,52609,113],{"class":112},[82,52611,35251],{"class":92},[82,52613,35254],{"class":108},[82,52615,113],{"class":112},[82,52617,2283],{"class":88},[82,52619,119],{"class":92},[82,52621,52622],{"class":84,"line":12497},[82,52623,36832],{"class":2828},[82,52625,52626],{"class":84,"line":12503},[82,52627,36837],{"class":2828},[82,52629,52630],{"class":84,"line":12511},[82,52631,36842],{"class":2828},[82,52633,52634,52636,52638,52640,52642],{"class":84,"line":12516},[82,52635,36847],{"class":92},[82,52637,12068],{"class":112},[82,52639,35356],{"class":92},[82,52641,5548],{"class":112},[82,52643,36856],{"class":92},[82,52645,52646],{"class":84,"line":19189},[82,52647,36861],{"class":2828},[82,52649,52650,52652,52654,52656,52658],{"class":84,"line":19195},[82,52651,36866],{"class":92},[82,52653,12068],{"class":112},[82,52655,36871],{"class":92},[82,52657,2244],{"class":88},[82,52659,119],{"class":92},[82,52661,52662],{"class":84,"line":19218},[82,52663,486],{"emptyLinePlaceholder":485},[82,52665,52666],{"class":84,"line":19224},[82,52667,36884],{"class":2828},[82,52669,52670,52672,52674,52676,52678],{"class":84,"line":19247},[82,52671,36889],{"class":92},[82,52673,113],{"class":112},[82,52675,36894],{"class":92},[82,52677,1147],{"class":112},[82,52679,36899],{"class":92},[82,52681,52682],{"class":84,"line":19261},[82,52683,36904],{"class":2828},[82,52685,52686,52688,52690,52692],{"class":84,"line":19281},[82,52687,1901],{"class":88},[82,52689,93],{"class":92},[82,52691,36913],{"class":96},[82,52693,36916],{"class":92},[82,52695,52696],{"class":84,"line":19287},[82,52697,486],{"emptyLinePlaceholder":485},[82,52699,52700],{"class":84,"line":19298},[82,52701,36925],{"class":2828},[82,52703,52704,52706,52708,52710,52712],{"class":84,"line":19321},[82,52705,1237],{"class":112},[82,52707,33796],{"class":88},[82,52709,5548],{"class":112},[82,52711,33801],{"class":96},[82,52713,669],{"class":92},[82,52715,52716],{"class":84,"line":19343},[82,52717,36942],{"class":2828},[82,52719,52720,52722,52724],{"class":84,"line":19348},[82,52721,33865],{"class":92},[82,52723,113],{"class":112},[82,52725,47116],{"class":92},[82,52727,52728],{"class":84,"line":19354},[82,52729,36955],{"class":2828},[82,52731,52732],{"class":84,"line":19368},[82,52733,36960],{"class":2828},[82,52735,52736,52738,52740],{"class":84,"line":19381},[82,52737,36965],{"class":92},[82,52739,36968],{"class":96},[82,52741,33074],{"class":92},[82,52743,52744],{"class":84,"line":19386},[82,52745,36975],{"class":2828},[82,52747,52748,52750,52752],{"class":84,"line":19400},[82,52749,36589],{"class":92},[82,52751,113],{"class":112},[82,52753,36984],{"class":92},[82,52755,52756],{"class":84,"line":19405},[82,52757,36989],{"class":2828},[82,52759,52760],{"class":84,"line":19411},[82,52761,36994],{"class":92},[82,52763,52764],{"class":84,"line":19416},[82,52765,486],{"emptyLinePlaceholder":485},[82,52767,52768],{"class":84,"line":19430},[82,52769,37003],{"class":2828},[82,52771,52772],{"class":84,"line":19435},[82,52773,37008],{"class":2828},[82,52775,52776,52778,52780,52782,52784,52786,52788],{"class":84,"line":19440},[82,52777,33813],{"class":92},[82,52779,113],{"class":112},[82,52781,33820],{"class":96},[82,52783,4307],{"class":112},[82,52785,33825],{"class":92},[82,52787,4304],{"class":112},[82,52789,36686],{"class":96},[82,52791,52792,52794,52796],{"class":84,"line":19454},[82,52793,33865],{"class":92},[82,52795,113],{"class":112},[82,52797,34859],{"class":92},[82,52799,52800],{"class":84,"line":19466},[82,52801,37037],{"class":2828},[82,52803,52804],{"class":84,"line":19471},[82,52805,37042],{"class":2828},[82,52807,52808,52810,52812,52814,52817,52819,52822],{"class":84,"line":19484},[82,52809,37047],{"class":92},[82,52811,113],{"class":112},[82,52813,3639],{"class":92},[82,52815,52816],{"class":96},"'猫'",[82,52818,3136],{"class":92},[82,52820,52821],{"class":96},"'狗'",[82,52823,875],{"class":92},[82,52825,52826,52828],{"class":84,"line":19489},[82,52827,2417],{"class":112},[82,52829,35453],{"class":92},[82,52831,52832],{"class":84,"line":19494},[82,52833,37112],{"class":2828},[82,52835,52836,52838,52840,52842],{"class":84,"line":19499},[82,52837,5999],{"class":112},[82,52839,37119],{"class":92},[82,52841,603],{"class":112},[82,52843,36763],{"class":92},[82,52845,52846,52848,52850],{"class":84,"line":19512},[82,52847,35179],{"class":92},[82,52849,113],{"class":112},[82,52851,35184],{"class":92},[82,52853,52854,52856,52858],{"class":84,"line":19517},[82,52855,35194],{"class":92},[82,52857,113],{"class":112},[82,52859,35199],{"class":92},[82,52861,52862],{"class":84,"line":35202},[82,52863,486],{"emptyLinePlaceholder":485},[82,52865,52866],{"class":84,"line":35208},[82,52867,37148],{"class":2828},[82,52869,52870],{"class":84,"line":35214},[82,52871,35444],{"class":92},[82,52873,52874],{"class":84,"line":35220},[82,52875,37157],{"class":2828},[82,52877,52878,52880,52882],{"class":84,"line":35226},[82,52879,35229],{"class":92},[82,52881,113],{"class":112},[82,52883,35234],{"class":92},[82,52885,52886],{"class":84,"line":35237},[82,52887,37170],{"class":2828},[82,52889,52890,52892,52894,52896,52898,52900,52902],{"class":84,"line":35243},[82,52891,35246],{"class":92},[82,52893,113],{"class":112},[82,52895,35251],{"class":92},[82,52897,35254],{"class":108},[82,52899,113],{"class":112},[82,52901,2283],{"class":88},[82,52903,119],{"class":92},[82,52905,52906],{"class":84,"line":35263},[82,52907,37191],{"class":2828},[82,52909,52910,52912,52914],{"class":84,"line":35269},[82,52911,37196],{"class":92},[82,52913,113],{"class":112},[82,52915,37201],{"class":92},[82,52917,52918,52920,52922],{"class":84,"line":35280},[82,52919,37206],{"class":92},[82,52921,113],{"class":112},[82,52923,37211],{"class":92},[82,52925,52926,52928,52930,52932,52934,52936,52938,52940],{"class":84,"line":35286},[82,52927,37216],{"class":88},[82,52929,93],{"class":92},[82,52931,37221],{"class":96},[82,52933,37224],{"class":92},[82,52935,37227],{"class":96},[82,52937,3136],{"class":92},[82,52939,37232],{"class":96},[82,52941,37235],{"class":92},[2671,52943,52944],{},"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":78,"searchDepth":157,"depth":157,"links":52946},[52947,52948,52949,52950],{"id":33168,"depth":404,"text":33169},{"id":40405,"depth":404,"text":40406},{"id":43837,"depth":404,"text":43838},{"id":47846,"depth":404,"text":47847},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33160,"description":2699},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52957,"title":52958,"body":52959,"description":2699,"extension":2700,"meta":52966,"navigation":485,"path":52967,"seo":52968,"stem":52969,"__hash__":52970},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52960,"toc":52964},[52961],[10,52962,52958],{"id":52963},"_3yolo模型学习",{"title":78,"searchDepth":157,"depth":157,"links":52965},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52958,"description":2699},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52972,"title":52973,"body":52974,"description":52981,"extension":2700,"meta":52982,"navigation":485,"path":52984,"seo":52985,"stem":52986,"__hash__":52987},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52975,"toc":52979},[52976],[19,52977,52978],{},"yolo模型还未补充",{"title":78,"searchDepth":157,"depth":157,"links":52980},[],"深度学习学习",{"category":52983},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52973,"description":52981},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52989,"title":52990,"body":52991,"description":2699,"extension":2700,"meta":53016,"navigation":485,"path":53017,"seo":53018,"stem":53019,"__hash__":53020},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52992,"toc":53014},[52993,52996,52999,53004,53011],[10,52994,52990],{"id":52995},"_1工具",[19,52997,52998],{},"提示错误插件：有问题会提前报错",[19,53000,53001],{},[4078,53002],{"alt":78,"src":53003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,53005,53006],{},[323,53007,53010],{"href":53008,"rel":53009},"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",[26449],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,53012,53013],{},"alt键加上下箭头可以实现语句的移动",{"title":78,"searchDepth":157,"depth":157,"links":53015},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52990,"description":2699},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53022,"title":53023,"body":53024,"description":2699,"extension":2700,"meta":55885,"navigation":485,"path":55886,"seo":55887,"stem":55888,"__hash__":55889},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53025,"toc":55836},[53026,53029,53033,53037,53042,53045,53050,53054,53061,53066,53073,53078,53085,53090,53094,53099,53102,53106,53111,53115,53120,53123,53126,53129,53132,53135,53138,53141,53144,53149,53154,53159,53163,53166,53169,53173,53178,53181,53189,53194,53211,53219,53224,53229,53234,53239,53244,53247,53252,53257,53261,53270,53275,53280,53284,53289,53292,53296,53301,53309,53314,53319,53322,53327,53332,53337,53340,53343,53346,53351,53356,53359,53364,53367,53372,53375,53378,53381,53386,53389,53392,53407,53412,53417,53422,53425,53428,53431,53445,53448,53453,53458,53461,53464,53467,53470,53473,53476,53479,53483,53487,53492,53496,53499,53504,53509,53512,53517,53520,53524,53529,53532,53535,53538,53541,53544,53547,53550,53553,53556,53560,53565,53570,53575,53578,53581,53585,53590,53593,53597,53600,53603,53608,53611,53614,53618,53622,53625,53630,53635,53638,53667,53672,53677,53682,53687,53691,53696,53700,53705,53708,53712,53716,53721,53725,53730,53735,53739,53744,53747,53749,53752,53757,53761,53766,53770,53774,53779,53784,53789,53794,53798,53803,53808,53813,53816,53819,53824,53827,53832,53837,53842,53847,53851,54656,54660,55002,55007,55010,55013,55016,55019,55022,55025,55028,55031,55033,55036,55038,55041,55045,55050,55053,55056,55059,55063,55068,55073,55093,55096,55100,55105,55110,55127,55131,55160,55164,55186,55188,55227,55235,55241,55245,55248,55251,55256,55261,55264,55267,55270,55275,55280,55283,55286,55289,55292,55295,55298,55301,55304,55307,55310,55313,55315,55318,55321,55324,55327,55330,55333,55336,55339,55343,55348,55351,55356,55359,55362,55365,55368,55371,55374,55377,55379,55382,55385,55388,55391,55394,55397,55401,55404,55413,55416,55421,55424,55429,55432,55435,55438,55441,55444,55447,55450,55454,55458,55461,55464,55469,55474,55479,55483,55488,55493,55496,55499,55502,55505,55508,55513,55516,55521,55523,55528,55531,55535,55540,55543,55546,55551,55555,55558,55563,55566,55569,55598,55603,55606,55609,55612,55615,55618,55622,55625,55711,55715,55718,55723,55728,55735,55738,55741,55744,55747,55750,55755,55760,55763,55766,55769,55772,55775,55778,55781,55784,55787,55789,55792,55796,55801,55806,55811,55814,55819,55824,55827,55830,55833],[10,53027,53023],{"id":53028},"_2基础语法",[14,53030,53032],{"id":53031},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[65,53034,53036],{"id":53035},"_211-js组成","2.1.1 js组成",[26,53038,53039],{},[29,53040,53041],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,53043,53044],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,53046,53047],{"start":157},[29,53048,53049],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[65,53051,53053],{"id":53052},"_212-js书写位置","2.1.2 js书写位置",[26,53055,53056],{},[29,53057,53058],{},[2913,53059,53060],{},"内部 JavaScript",[19,53062,53063],{},[4078,53064],{"alt":78,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,53067,53068],{"start":157},[29,53069,53070],{},[2913,53071,53072],{},"外部 JavaScript",[19,53074,53075],{},[4078,53076],{"alt":78,"src":53077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,53079,53080],{"start":404},[29,53081,53082],{},[2913,53083,53084],{},"内联 JavaScript",[19,53086,53087],{},[4078,53088],{"alt":78,"src":53089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[65,53091,53093],{"id":53092},"_213-javascript注释","2.1.3 JavaScript注释",[19,53095,53096],{},[4078,53097],{"alt":78,"src":53098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,53100,53101],{},"alt+shift+a一定要记住！",[65,53103,53105],{"id":53104},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,53107,53108],{},[4078,53109],{"alt":78,"src":53110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[65,53112,53114],{"id":53113},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,53116,53117],{},[29,53118,53119],{},"输出语法：",[19,53121,53122],{},"①document.write('要出的内容')",[19,53124,53125],{},"向body内输出内容；",[19,53127,53128],{},"如果输出的内容写的是标签，也会被解析cheng",[19,53130,53131],{},"②alert('要出的内容')",[19,53133,53134],{},"页面弹出警告对话框",[19,53136,53137],{},"③console.log('控制台打印')",[19,53139,53140],{},"控制台输出语法，程序员调试使用",[19,53142,53143],{},"输入log就行，自动生成：",[19,53145,53146],{},[4078,53147],{"alt":78,"src":53148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,53150,53151],{"start":157},[29,53152,53153],{},"输入语法：",[19,53155,53156],{},[4078,53157],{"alt":78,"src":53158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[65,53160,53162],{"id":53161},"_2116-字面量","21.1.6 字面量",[19,53164,53165],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53167,53168],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53170,53172],{"id":53171},"_22-变量","2.2 变量",[26,53174,53175],{},[29,53176,53177],{},"变量声明",[19,53179,53180],{},"let 变量名",[3755,53182,53183,53186],{},[29,53184,53185],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,53187,53188],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,53190,53191],{"start":157},[29,53192,53193],{},"变量赋值",[73,53195,53199],{"className":53196,"code":53197,"language":53198,"meta":78,"style":78},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[32,53200,53201,53206],{"__ignoreMap":78},[82,53202,53203],{"class":84,"line":85},[82,53204,53205],{"class":92},"let age\n",[82,53207,53208],{"class":84,"line":157},[82,53209,53210],{"class":92},"age=18\n",[26,53212,53213,53216],{"start":404},[29,53214,53215],{},"连这些（变量的初始化）：let age=18",[29,53217,53218],{},"更新变量",[19,53220,53221],{},[4078,53222],{"alt":78,"src":53223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,53225,53226],{"start":508},[29,53227,53228],{},"声明多个变量",[19,53230,53231],{},[4078,53232],{"alt":78,"src":53233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,53235,53236],{"start":513},[29,53237,53238],{},"变量命名规则与规范",[19,53240,53241],{},[4078,53242],{"alt":78,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53245,53246],{},"遵守小驼峰！",[26,53248,53249],{"start":1388},[29,53250,53251],{},"变量拓展-let和var的区别",[19,53253,53254],{},[4078,53255],{"alt":78,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53258,53260],{"id":53259},"_23-数组","2.3 数组",[73,53262,53264],{"className":53196,"code":53263,"language":53198,"meta":78,"style":78},"let arr = []\n",[32,53265,53266],{"__ignoreMap":78},[82,53267,53268],{"class":84,"line":85},[82,53269,53263],{"class":92},[19,53271,53272],{},[4078,53273],{"alt":78,"src":53274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,53276,53277],{},[4078,53278],{"alt":78,"src":53279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53281,53283],{"id":53282},"_24-常量","2.4 常量",[19,53285,53286],{},[4078,53287],{"alt":78,"src":53288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,53290,53291],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53293,53295],{"id":53294},"_25-数据类型","2.5 数据类型",[19,53297,53298],{},[4078,53299],{"alt":78,"src":53300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,53302,53303,53306],{},[29,53304,53305],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,53307,53308],{},"算数运算符：",[19,53310,53311],{},[4078,53312],{"alt":78,"src":53313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,53315,53316],{"start":404},[29,53317,53318],{},"数字类型（Number）",[19,53320,53321],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,53323,53324],{},[4078,53325],{"alt":78,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,53328,53329],{"start":413},[29,53330,53331],{},"字符串类型（string）",[19,53333,53334],{},[4078,53335],{"alt":78,"src":53336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53338,53339],{},"反引号也是可以使用的",[19,53341,53342],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53344,53345],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,53347,53348],{"start":508},[29,53349,53350],{},"模板字符串",[19,53352,53353],{},[4078,53354],{"alt":78,"src":53355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53357,53358],{},"类似于python的字符串格式化",[26,53360,53361],{"start":513},[29,53362,53363],{},"布尔类型",[19,53365,53366],{},"true 和 false",[26,53368,53369],{"start":1388},[29,53370,53371],{},"未定义类型（underfined）",[19,53373,53374],{},"表示没有赋值",[19,53376,53377],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53379,53380],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,53382,53383],{"start":1394},[29,53384,53385],{},"null（空类型）",[19,53387,53388],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53390,53391],{},"赋值了，但是内容为空",[73,53393,53395],{"className":53196,"code":53394,"language":53198,"meta":78,"style":78},"typeof null\n输出的是'object'，是一个对象数据类型\n",[32,53396,53397,53402],{"__ignoreMap":78},[82,53398,53399],{"class":84,"line":85},[82,53400,53401],{"class":92},"typeof null\n",[82,53403,53404],{"class":84,"line":157},[82,53405,53406],{"class":92},"输出的是'object'，是一个对象数据类型\n",[26,53408,53409],{"start":1399},[29,53410,53411],{},"控制台检测数据类型",[19,53413,53414],{},[4078,53415],{"alt":78,"src":53416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,53418,53419],{"start":1430},[29,53420,53421],{},"类型转换",[19,53423,53424],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53426,53427],{},"转换方式：隐式转换和显示转换",[19,53429,53430],{},"①隐式转换",[3755,53432,53433,53436,53439,53442],{},[29,53434,53435],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,53437,53438],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,53440,53441],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,53443,53444],{},"任何数据和字符串相加结果都是字符串",[19,53446,53447],{},"②显示转换",[19,53449,53450],{},[4078,53451],{"alt":78,"src":53452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53454,53455],{},[4078,53456],{"alt":78,"src":53457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53459,53460],{},"在输入的时候要用好隐式转换，简单写起来",[19,53462,53463],{},"let num = +prompt(’请输入数字：‘)",[19,53465,53466],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53468,53469],{},"console.log(parseInt('12.333px'))",[19,53471,53472],{},"输出为：12",[19,53474,53475],{},"console.log(parseInt('a'a'a12.333px'))",[19,53477,53478],{},"输出：NaN",[14,53480,53482],{"id":53481},"_26-运算符","2.6 运算符",[65,53484,53486],{"id":53485},"_261-赋值运算符","2.6.1 赋值运算符",[19,53488,53489],{},[4078,53490],{"alt":78,"src":53491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[65,53493,53495],{"id":53494},"_262-一元运算符","2.6.2 一元运算符",[19,53497,53498],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53500,53501],{},[4078,53502],{"alt":78,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53505,53506],{},[4078,53507],{"alt":78,"src":53508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53510,53511],{},"两者的区别：",[19,53513,53514],{},[4078,53515],{"alt":78,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53518,53519],{},"前置先自加；后置后加，代码执行完之后再加",[65,53521,53523],{"id":53522},"_263-比较运算符","2.6.3 比较运算符",[19,53525,53526],{},[4078,53527],{"alt":78,"src":53528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53530,53531],{},"比较运算符也有隐式转换",[19,53533,53534],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53536,53537],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53539,53540],{},"要使用三等，开发的时候",[19,53542,53543],{},"NaN不等于任何人，包括它自己",[19,53545,53546],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53548,53549],{},"7\u002F10=0.7",[19,53551,53552],{},"最后：0.5+0.2=0.7",[19,53554,53555],{},"字符串比较，比较的是字符对应的ASCII码",[65,53557,53559],{"id":53558},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53561,53562],{},[4078,53563],{"alt":78,"src":53564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53566,53567],{},[4078,53568],{"alt":78,"src":53569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53571,53572],{},[4078,53573],{"alt":78,"src":53574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53576,53577],{},"上述题目选D",[19,53579,53580],{},"与真2假1；或真1假2",[65,53582,53584],{"id":53583},"_265-运算符优先级","2.6.5 运算符优先级",[19,53586,53587],{},[4078,53588],{"alt":78,"src":53589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53591,53592],{},"先算逻辑与，后算逻辑或",[14,53594,53596],{"id":53595},"_27-语句","2.7 语句",[19,53598,53599],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53601,53602],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53604,53605],{},[4078,53606],{"alt":78,"src":53607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53609,53610],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53612,53613],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[65,53615,53617],{"id":53616},"_271-分支语句","2.7.1 分支语句",[24582,53619,53621],{"id":53620},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53623,53624],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,53626,53627],{},[29,53628,53629],{},"单分支语句",[19,53631,53632],{},[4078,53633],{"alt":78,"src":53634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53636,53637],{},"除了0，所有数字都为真",[73,53639,53641],{"className":53196,"code":53640,"language":53198,"meta":78,"style":78},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[32,53642,53643,53648,53653,53658,53662],{"__ignoreMap":78},[82,53644,53645],{"class":84,"line":85},[82,53646,53647],{"class":92},"if（0) {\n",[82,53649,53650],{"class":84,"line":157},[82,53651,53652],{"class":92},"    let a=1\n",[82,53654,53655],{"class":84,"line":404},[82,53656,53657],{"class":92},"    alert(typeof a)\n",[82,53659,53660],{"class":84,"line":413},[82,53661,1391],{"class":92},[82,53663,53664],{"class":84,"line":508},[82,53665,53666],{"class":92},"不输出，括号为假\n",[26,53668,53669],{"start":157},[29,53670,53671],{},"双分支语句",[19,53673,53674],{},[4078,53675],{"alt":78,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,53678,53679],{"start":404},[29,53680,53681],{},"多分支语句",[19,53683,53684],{},[4078,53685],{"alt":78,"src":53686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24582,53688,53690],{"id":53689},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53692,53693],{},[4078,53694],{"alt":78,"src":53695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24582,53697,53699],{"id":53698},"_2713-switch语句","2.7.1.3 switch语句",[19,53701,53702],{},[4078,53703],{"alt":78,"src":53704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53706,53707],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[65,53709,53711],{"id":53710},"_272-循环语句","2.7.2 循环语句",[24582,53713,53715],{"id":53714},"_2721-断点演示","2.7.2.1 断点演示",[19,53717,53718],{},[4078,53719],{"alt":78,"src":53720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24582,53722,53724],{"id":53723},"_2722-while循环","2.7.2.2 while循环",[19,53726,53727],{},[4078,53728],{"alt":78,"src":53729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53731,53732],{},[4078,53733],{"alt":78,"src":53734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24582,53736,53738],{"id":53737},"_2723-for循环","2.7.2.3 for循环",[19,53740,53741],{},[4078,53742],{"alt":78,"src":53743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53745,53746],{},"for(;;) {",[19,53748,3695],{},[19,53750,53751],{},"表示无限循环",[19,53753,53754],{},[4078,53755],{"alt":78,"src":53756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24582,53758,53760],{"id":53759},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53762,53763],{},[4078,53764],{"alt":78,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53767,53769],{"id":53768},"_28-数组","2.8 数组",[65,53771,53773],{"id":53772},"_281-基础认识","2.8.1 基础认识",[19,53775,53776],{},[4078,53777],{"alt":78,"src":53778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53780,53781],{},[4078,53782],{"alt":78,"src":53783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53785,53786],{},[4078,53787],{"alt":78,"src":53788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53790,53791],{},[4078,53792],{"alt":78,"src":53793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[65,53795,53797],{"id":53796},"_282-操作数组","2.8.2 操作数组",[19,53799,53800],{},[4078,53801],{"alt":78,"src":53802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53804,53805],{},[29,53806,53807],{},"添加元素",[19,53809,53810],{},[4078,53811],{"alt":78,"src":53812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53814,53815],{},"console.log(arr.push('green'))",[19,53817,53818],{},"输出结果：为新数组的长度",[19,53820,53821],{},[4078,53822],{"alt":78,"src":53823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53825,53826],{},"push用的非常多，一定要记住",[26,53828,53829],{},[29,53830,53831],{},"删除元素",[19,53833,53834],{},[4078,53835],{"alt":78,"src":53836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53838,53839],{},[4078,53840],{"alt":78,"src":53841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53843,53844],{},[4078,53845],{"alt":78,"src":53846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[65,53848,53850],{"id":53849},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[73,53852,53854],{"className":53196,"code":53853,"language":53198,"meta":78,"style":78},"\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",[32,53855,53856,53871,53887,53891,53900,53918,53942,53964,53978,53986,53993,54004,54015,54019,54023,54030,54042,54057,54070,54089,54106,54121,54133,54145,54157,54161,54165,54176,54186,54198,54210,54222,54233,54237,54241,54253,54257,54271,54275,54279,54290,54304,54316,54330,54334,54343,54352,54356,54365,54369,54378,54383,54388,54400,54428,54433,54438,54463,54468,54472,54477,54482,54497,54501,54506,54536,54548,54564,54580,54594,54599,54606,54610,54615,54628,54636,54644,54648],{"__ignoreMap":78},[82,53857,53858,53861,53865,53868],{"class":84,"line":85},[82,53859,53860],{"class":92},"\u003C!",[82,53862,53864],{"class":53863},"s9eBZ","DOCTYPE",[82,53866,53867],{"class":2384}," html",[82,53869,53870],{"class":92},">\n",[82,53872,53873,53875,53877,53880,53882,53885],{"class":84,"line":157},[82,53874,3659],{"class":92},[82,53876,53198],{"class":53863},[82,53878,53879],{"class":2384}," lang",[82,53881,113],{"class":92},[82,53883,53884],{"class":96},"\"en\"",[82,53886,53870],{"class":92},[82,53888,53889],{"class":84,"line":404},[82,53890,486],{"emptyLinePlaceholder":485},[82,53892,53893,53895,53898],{"class":84,"line":413},[82,53894,3659],{"class":92},[82,53896,53897],{"class":53863},"head",[82,53899,53870],{"class":92},[82,53901,53902,53905,53908,53911,53913,53916],{"class":84,"line":508},[82,53903,53904],{"class":92},"    \u003C",[82,53906,53907],{"class":53863},"meta",[82,53909,53910],{"class":2384}," charset",[82,53912,113],{"class":92},[82,53914,53915],{"class":96},"\"UTF-8\"",[82,53917,53870],{"class":92},[82,53919,53920,53922,53924,53927,53929,53932,53935,53937,53940],{"class":84,"line":513},[82,53921,53904],{"class":92},[82,53923,53907],{"class":53863},[82,53925,53926],{"class":2384}," http-equiv",[82,53928,113],{"class":92},[82,53930,53931],{"class":96},"\"X-UA-Compatible\"",[82,53933,53934],{"class":2384}," content",[82,53936,113],{"class":92},[82,53938,53939],{"class":96},"\"IE=edge\"",[82,53941,53870],{"class":92},[82,53943,53944,53946,53948,53950,53952,53955,53957,53959,53962],{"class":84,"line":1388},[82,53945,53904],{"class":92},[82,53947,53907],{"class":53863},[82,53949,17506],{"class":2384},[82,53951,113],{"class":92},[82,53953,53954],{"class":96},"\"viewport\"",[82,53956,53934],{"class":2384},[82,53958,113],{"class":92},[82,53960,53961],{"class":96},"\"width=device-width, initial-scale=1.0\"",[82,53963,53870],{"class":92},[82,53965,53966,53968,53971,53974,53976],{"class":84,"line":1394},[82,53967,53904],{"class":92},[82,53969,53970],{"class":53863},"title",[82,53972,53973],{"class":92},">Document\u003C\u002F",[82,53975,53970],{"class":53863},[82,53977,53870],{"class":92},[82,53979,53980,53982,53984],{"class":84,"line":1399},[82,53981,53904],{"class":92},[82,53983,2671],{"class":53863},[82,53985,53870],{"class":92},[82,53987,53988,53991],{"class":84,"line":1430},[82,53989,53990],{"class":53863},"        *",[82,53992,1349],{"class":92},[82,53994,53995,53998,54000,54002],{"class":84,"line":1818},[82,53996,53997],{"class":88},"            margin",[82,53999,1357],{"class":92},[82,54001,2244],{"class":88},[82,54003,3909],{"class":92},[82,54005,54006,54009,54011,54013],{"class":84,"line":2082},[82,54007,54008],{"class":88},"            padding",[82,54010,1357],{"class":92},[82,54012,2244],{"class":88},[82,54014,3909],{"class":92},[82,54016,54017],{"class":84,"line":2233},[82,54018,5128],{"class":92},[82,54020,54021],{"class":84,"line":2255},[82,54022,486],{"emptyLinePlaceholder":485},[82,54024,54025,54028],{"class":84,"line":2260},[82,54026,54027],{"class":2384},"        .box",[82,54029,1349],{"class":92},[82,54031,54032,54035,54037,54040],{"class":84,"line":2298},[82,54033,54034],{"class":88},"            display",[82,54036,1357],{"class":92},[82,54038,54039],{"class":88},"flex",[82,54041,3909],{"class":92},[82,54043,54044,54047,54049,54052,54055],{"class":84,"line":2303},[82,54045,54046],{"class":88},"            width",[82,54048,1357],{"class":92},[82,54050,54051],{"class":88},"700",[82,54053,54054],{"class":112},"px",[82,54056,3909],{"class":92},[82,54058,54059,54062,54064,54066,54068],{"class":84,"line":2321},[82,54060,54061],{"class":88},"            height",[82,54063,1357],{"class":92},[82,54065,6568],{"class":88},[82,54067,54054],{"class":112},[82,54069,3909],{"class":92},[82,54071,54072,54075,54077,54079,54081,54084,54087],{"class":84,"line":2533},[82,54073,54074],{"class":88},"            border-left",[82,54076,1357],{"class":92},[82,54078,2283],{"class":88},[82,54080,54054],{"class":112},[82,54082,54083],{"class":88}," solid",[82,54085,54086],{"class":88}," pink",[82,54088,3909],{"class":92},[82,54090,54091,54094,54096,54098,54100,54102,54104],{"class":84,"line":2538},[82,54092,54093],{"class":88},"            border-bottom",[82,54095,1357],{"class":92},[82,54097,2283],{"class":88},[82,54099,54054],{"class":112},[82,54101,54083],{"class":88},[82,54103,54086],{"class":88},[82,54105,3909],{"class":92},[82,54107,54108,54110,54112,54114,54116,54119],{"class":84,"line":2548},[82,54109,53997],{"class":88},[82,54111,1357],{"class":92},[82,54113,3408],{"class":88},[82,54115,54054],{"class":112},[82,54117,54118],{"class":88}," auto",[82,54120,3909],{"class":92},[82,54122,54123,54126,54128,54131],{"class":84,"line":2579},[82,54124,54125],{"class":88},"            justify-content",[82,54127,1357],{"class":92},[82,54129,54130],{"class":88},"space-around",[82,54132,3909],{"class":92},[82,54134,54135,54138,54140,54143],{"class":84,"line":2585},[82,54136,54137],{"class":88},"            align-items",[82,54139,1357],{"class":92},[82,54141,54142],{"class":88},"flex-end",[82,54144,3909],{"class":92},[82,54146,54147,54150,54152,54155],{"class":84,"line":4350},[82,54148,54149],{"class":88},"            text-align",[82,54151,1357],{"class":92},[82,54153,54154],{"class":88},"center",[82,54156,3909],{"class":92},[82,54158,54159],{"class":84,"line":4355},[82,54160,5128],{"class":92},[82,54162,54163],{"class":84,"line":4360},[82,54164,486],{"emptyLinePlaceholder":485},[82,54166,54167,54169,54171,54174],{"class":84,"line":4365},[82,54168,54027],{"class":2384},[82,54170,3709],{"class":112},[82,54172,54173],{"class":53863},"div",[82,54175,1349],{"class":92},[82,54177,54178,54180,54182,54184],{"class":84,"line":4379},[82,54179,54034],{"class":88},[82,54181,1357],{"class":92},[82,54183,54039],{"class":88},[82,54185,3909],{"class":92},[82,54187,54188,54190,54192,54194,54196],{"class":84,"line":4384},[82,54189,54046],{"class":88},[82,54191,1357],{"class":92},[82,54193,3408],{"class":88},[82,54195,54054],{"class":112},[82,54197,3909],{"class":92},[82,54199,54200,54203,54205,54208],{"class":84,"line":5176},[82,54201,54202],{"class":88},"            background-color",[82,54204,1357],{"class":92},[82,54206,54207],{"class":88},"pink",[82,54209,3909],{"class":92},[82,54211,54212,54215,54217,54220],{"class":84,"line":5190},[82,54213,54214],{"class":88},"            flex-direction",[82,54216,1357],{"class":92},[82,54218,54219],{"class":88},"column",[82,54221,3909],{"class":92},[82,54223,54224,54226,54228,54231],{"class":84,"line":5198},[82,54225,54125],{"class":88},[82,54227,1357],{"class":92},[82,54229,54230],{"class":88},"space-between",[82,54232,3909],{"class":92},[82,54234,54235],{"class":84,"line":5203},[82,54236,5128],{"class":92},[82,54238,54239],{"class":84,"line":5209},[82,54240,486],{"emptyLinePlaceholder":485},[82,54242,54243,54245,54248,54251],{"class":84,"line":5215},[82,54244,54027],{"class":2384},[82,54246,54247],{"class":53863}," div",[82,54249,54250],{"class":53863}," span",[82,54252,1349],{"class":92},[82,54254,54255],{"class":84,"line":5220},[82,54256,486],{"emptyLinePlaceholder":485},[82,54258,54259,54262,54264,54267,54269],{"class":84,"line":10539},[82,54260,54261],{"class":88},"            margin-top",[82,54263,1357],{"class":92},[82,54265,54266],{"class":88},"-20",[82,54268,54054],{"class":112},[82,54270,3909],{"class":92},[82,54272,54273],{"class":84,"line":10563},[82,54274,5128],{"class":92},[82,54276,54277],{"class":84,"line":10568},[82,54278,486],{"emptyLinePlaceholder":485},[82,54280,54281,54283,54285,54288],{"class":84,"line":10574},[82,54282,54027],{"class":2384},[82,54284,54247],{"class":53863},[82,54286,54287],{"class":53863}," h4",[82,54289,1349],{"class":92},[82,54291,54292,54295,54297,54300,54302],{"class":84,"line":10601},[82,54293,54294],{"class":88},"            margin-bottom",[82,54296,1357],{"class":92},[82,54298,54299],{"class":88},"-35",[82,54301,54054],{"class":112},[82,54303,3909],{"class":92},[82,54305,54306,54308,54310,54312,54314],{"class":84,"line":10606},[82,54307,54046],{"class":88},[82,54309,1357],{"class":92},[82,54311,3114],{"class":88},[82,54313,54054],{"class":112},[82,54315,3909],{"class":92},[82,54317,54318,54321,54323,54326,54328],{"class":84,"line":10612},[82,54319,54320],{"class":88},"            margin-left",[82,54322,1357],{"class":92},[82,54324,54325],{"class":88},"-10",[82,54327,54054],{"class":112},[82,54329,3909],{"class":92},[82,54331,54332],{"class":84,"line":10624},[82,54333,5128],{"class":92},[82,54335,54336,54339,54341],{"class":84,"line":10636},[82,54337,54338],{"class":92},"    \u003C\u002F",[82,54340,2671],{"class":53863},[82,54342,53870],{"class":92},[82,54344,54345,54348,54350],{"class":84,"line":10648},[82,54346,54347],{"class":92},"\u003C\u002F",[82,54349,53897],{"class":53863},[82,54351,53870],{"class":92},[82,54353,54354],{"class":84,"line":12307},[82,54355,486],{"emptyLinePlaceholder":485},[82,54357,54358,54360,54363],{"class":84,"line":12332},[82,54359,3659],{"class":92},[82,54361,54362],{"class":53863},"body",[82,54364,53870],{"class":92},[82,54366,54367],{"class":84,"line":12355},[82,54368,486],{"emptyLinePlaceholder":485},[82,54370,54371,54373,54376],{"class":84,"line":12379},[82,54372,53904],{"class":92},[82,54374,54375],{"class":53863},"script",[82,54377,53870],{"class":92},[82,54379,54380],{"class":84,"line":12384},[82,54381,54382],{"class":2828},"        \u002F\u002F 1. 四次弹框效果\n",[82,54384,54385],{"class":84,"line":12389},[82,54386,54387],{"class":2828},"        \u002F\u002F 声明一个新的数组\n",[82,54389,54390,54393,54396,54398],{"class":84,"line":12394},[82,54391,54392],{"class":112},"        let",[82,54394,54395],{"class":92}," arr ",[82,54397,113],{"class":112},[82,54399,2408],{"class":92},[82,54401,54402,54404,54406,54409,54411,54413,54415,54417,54419,54422,54424,54426],{"class":84,"line":12403},[82,54403,5999],{"class":112},[82,54405,4265],{"class":92},[82,54407,54408],{"class":112},"let",[82,54410,12029],{"class":92},[82,54412,113],{"class":112},[82,54414,27703],{"class":88},[82,54416,12036],{"class":92},[82,54418,4202],{"class":112},[82,54420,54421],{"class":88}," 4",[82,54423,5810],{"class":92},[82,54425,4892],{"class":112},[82,54427,15031],{"class":92},[82,54429,54430],{"class":84,"line":12408},[82,54431,54432],{"class":2828},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[82,54434,54435],{"class":84,"line":12414},[82,54436,54437],{"class":2828},"            \u002F\u002F arr.push(num)\n",[82,54439,54440,54443,54446,54448,54451,54453,54456,54458,54461],{"class":84,"line":12435},[82,54441,54442],{"class":92},"            arr.",[82,54444,54445],{"class":2384},"push",[82,54447,93],{"class":92},[82,54449,54450],{"class":2384},"prompt",[82,54452,93],{"class":92},[82,54454,54455],{"class":96},"`请输入第${",[82,54457,3199],{"class":92},[82,54459,54460],{"class":96},"}季度的数据:`",[82,54462,33074],{"class":92},[82,54464,54465],{"class":84,"line":12441},[82,54466,54467],{"class":2828},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[82,54469,54470],{"class":84,"line":12455},[82,54471,5128],{"class":92},[82,54473,54474],{"class":84,"line":12461},[82,54475,54476],{"class":2828},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[82,54478,54479],{"class":84,"line":12488},[82,54480,54481],{"class":2828},"        \u002F\u002F 盒子开头\n",[82,54483,54484,54487,54490,54492,54495],{"class":84,"line":12497},[82,54485,54486],{"class":92},"        document.",[82,54488,54489],{"class":2384},"write",[82,54491,93],{"class":92},[82,54493,54494],{"class":96},"` \u003Cdiv class=\"box\">`",[82,54496,119],{"class":92},[82,54498,54499],{"class":84,"line":12503},[82,54500,486],{"emptyLinePlaceholder":485},[82,54502,54503],{"class":84,"line":12511},[82,54504,54505],{"class":2828},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[82,54507,54508,54510,54512,54514,54516,54518,54520,54522,54524,54527,54530,54532,54534],{"class":84,"line":12516},[82,54509,5999],{"class":112},[82,54511,4265],{"class":92},[82,54513,54408],{"class":112},[82,54515,12029],{"class":92},[82,54517,113],{"class":112},[82,54519,6688],{"class":88},[82,54521,12036],{"class":92},[82,54523,3659],{"class":112},[82,54525,54526],{"class":92}," arr.",[82,54528,54529],{"class":88},"length",[82,54531,5810],{"class":92},[82,54533,4892],{"class":112},[82,54535,15031],{"class":92},[82,54537,54538,54541,54543,54545],{"class":84,"line":19189},[82,54539,54540],{"class":92},"            document.",[82,54542,54489],{"class":2384},[82,54544,93],{"class":92},[82,54546,54547],{"class":96},"`\n",[82,54549,54550,54553,54555,54557,54559,54561],{"class":84,"line":19195},[82,54551,54552],{"class":96},"              \u003Cdiv style=\"height: ${",[82,54554,6475],{"class":92},[82,54556,3639],{"class":96},[82,54558,3199],{"class":92},[82,54560,3689],{"class":96},[82,54562,54563],{"class":96},"}px;\">\n",[82,54565,54566,54569,54571,54573,54575,54577],{"class":84,"line":19218},[82,54567,54568],{"class":96},"                \u003Cspan>${",[82,54570,6475],{"class":92},[82,54572,3639],{"class":96},[82,54574,3199],{"class":92},[82,54576,3689],{"class":96},[82,54578,54579],{"class":96},"}\u003C\u002Fspan>\n",[82,54581,54582,54585,54587,54589,54591],{"class":84,"line":19224},[82,54583,54584],{"class":96},"                \u003Ch4>第${",[82,54586,3199],{"class":92},[82,54588,48130],{"class":112},[82,54590,27703],{"class":88},[82,54592,54593],{"class":96},"}季度\u003C\u002Fh4>\n",[82,54595,54596],{"class":84,"line":19247},[82,54597,54598],{"class":96},"              \u003C\u002Fdiv>          \n",[82,54600,54601,54604],{"class":84,"line":19261},[82,54602,54603],{"class":96},"            `",[82,54605,119],{"class":92},[82,54607,54608],{"class":84,"line":19281},[82,54609,5128],{"class":92},[82,54611,54612],{"class":84,"line":19287},[82,54613,54614],{"class":2828},"        \u002F\u002F 盒子结尾\n",[82,54616,54617,54619,54621,54623,54626],{"class":84,"line":19298},[82,54618,54486],{"class":92},[82,54620,54489],{"class":2384},[82,54622,93],{"class":92},[82,54624,54625],{"class":96},"` \u003C\u002Fdiv>`",[82,54627,119],{"class":92},[82,54629,54630,54632,54634],{"class":84,"line":19321},[82,54631,54338],{"class":92},[82,54633,54375],{"class":53863},[82,54635,53870],{"class":92},[82,54637,54638,54640,54642],{"class":84,"line":19343},[82,54639,54347],{"class":92},[82,54641,54362],{"class":53863},[82,54643,53870],{"class":92},[82,54645,54646],{"class":84,"line":19348},[82,54647,486],{"emptyLinePlaceholder":485},[82,54649,54650,54652,54654],{"class":84,"line":19354},[82,54651,54347],{"class":92},[82,54653,53198],{"class":53863},[82,54655,53870],{"class":92},[65,54657,54659],{"id":54658},"_284-冒泡排序","2.8.4 冒泡排序",[73,54661,54663],{"className":53196,"code":54662,"language":53198,"meta":78,"style":78},"\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",[32,54664,54665,54675,54689,54693,54701,54716,54736,54748,54756,54760,54768,54776,54807,54840,54877,54882,54901,54906,54919,54934,54950,54954,54959,54963,54973,54982,54990,54994],{"__ignoreMap":78},[82,54666,54667,54669,54671,54673],{"class":84,"line":85},[82,54668,53860],{"class":92},[82,54670,53864],{"class":53863},[82,54672,53867],{"class":2384},[82,54674,53870],{"class":92},[82,54676,54677,54679,54681,54683,54685,54687],{"class":84,"line":157},[82,54678,3659],{"class":92},[82,54680,53198],{"class":53863},[82,54682,53879],{"class":2384},[82,54684,113],{"class":92},[82,54686,53884],{"class":96},[82,54688,53870],{"class":92},[82,54690,54691],{"class":84,"line":404},[82,54692,486],{"emptyLinePlaceholder":485},[82,54694,54695,54697,54699],{"class":84,"line":413},[82,54696,3659],{"class":92},[82,54698,53897],{"class":53863},[82,54700,53870],{"class":92},[82,54702,54703,54706,54708,54710,54712,54714],{"class":84,"line":508},[82,54704,54705],{"class":92},"  \u003C",[82,54707,53907],{"class":53863},[82,54709,53910],{"class":2384},[82,54711,113],{"class":92},[82,54713,53915],{"class":96},[82,54715,53870],{"class":92},[82,54717,54718,54720,54722,54724,54726,54728,54730,54732,54734],{"class":84,"line":513},[82,54719,54705],{"class":92},[82,54721,53907],{"class":53863},[82,54723,17506],{"class":2384},[82,54725,113],{"class":92},[82,54727,53954],{"class":96},[82,54729,53934],{"class":2384},[82,54731,113],{"class":92},[82,54733,53961],{"class":96},[82,54735,53870],{"class":92},[82,54737,54738,54740,54742,54744,54746],{"class":84,"line":1388},[82,54739,54705],{"class":92},[82,54741,53970],{"class":53863},[82,54743,53973],{"class":92},[82,54745,53970],{"class":53863},[82,54747,53870],{"class":92},[82,54749,54750,54752,54754],{"class":84,"line":1394},[82,54751,54347],{"class":92},[82,54753,53897],{"class":53863},[82,54755,53870],{"class":92},[82,54757,54758],{"class":84,"line":1399},[82,54759,486],{"emptyLinePlaceholder":485},[82,54761,54762,54764,54766],{"class":84,"line":1430},[82,54763,3659],{"class":92},[82,54765,54362],{"class":53863},[82,54767,53870],{"class":92},[82,54769,54770,54772,54774],{"class":84,"line":1818},[82,54771,54705],{"class":92},[82,54773,54375],{"class":53863},[82,54775,53870],{"class":92},[82,54777,54778,54781,54783,54785,54787,54789,54791,54793,54795,54797,54799,54801,54803,54805],{"class":84,"line":2082},[82,54779,54780],{"class":112},"    let",[82,54782,54395],{"class":92},[82,54784,113],{"class":112},[82,54786,847],{"class":92},[82,54788,3077],{"class":88},[82,54790,100],{"class":92},[82,54792,3051],{"class":88},[82,54794,100],{"class":92},[82,54796,2841],{"class":88},[82,54798,100],{"class":92},[82,54800,1425],{"class":88},[82,54802,100],{"class":92},[82,54804,2283],{"class":88},[82,54806,875],{"class":92},[82,54808,54809,54811,54813,54815,54817,54819,54821,54823,54825,54827,54829,54832,54834,54836,54838],{"class":84,"line":2233},[82,54810,1888],{"class":112},[82,54812,4265],{"class":92},[82,54814,54408],{"class":112},[82,54816,12029],{"class":92},[82,54818,113],{"class":112},[82,54820,6688],{"class":88},[82,54822,12036],{"class":92},[82,54824,3659],{"class":112},[82,54826,54526],{"class":92},[82,54828,54529],{"class":88},[82,54830,54831],{"class":112}," -",[82,54833,27703],{"class":88},[82,54835,5810],{"class":92},[82,54837,4892],{"class":112},[82,54839,15031],{"class":92},[82,54841,54842,54845,54847,54849,54851,54853,54855,54857,54859,54861,54863,54865,54867,54869,54871,54873,54875],{"class":84,"line":2255},[82,54843,54844],{"class":112},"      for",[82,54846,4265],{"class":92},[82,54848,54408],{"class":112},[82,54850,12091],{"class":92},[82,54852,113],{"class":112},[82,54854,6688],{"class":88},[82,54856,12098],{"class":92},[82,54858,3659],{"class":112},[82,54860,54526],{"class":92},[82,54862,54529],{"class":88},[82,54864,54831],{"class":112},[82,54866,12029],{"class":92},[82,54868,3288],{"class":112},[82,54870,27703],{"class":88},[82,54872,12105],{"class":92},[82,54874,4892],{"class":112},[82,54876,15031],{"class":92},[82,54878,54879],{"class":84,"line":2260},[82,54880,54881],{"class":2828},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[82,54883,54884,54886,54889,54891,54894,54896,54898],{"class":84,"line":2298},[82,54885,5096],{"class":112},[82,54887,54888],{"class":92}," (arr[j] ",[82,54890,3709],{"class":112},[82,54892,54893],{"class":92}," arr[j ",[82,54895,2249],{"class":112},[82,54897,27703],{"class":88},[82,54899,54900],{"class":92},"]) {\n",[82,54902,54903],{"class":84,"line":2303},[82,54904,54905],{"class":2828},"          \u002F\u002F 交换两个变量\n",[82,54907,54908,54911,54914,54916],{"class":84,"line":2321},[82,54909,54910],{"class":112},"          let",[82,54912,54913],{"class":92}," tmp ",[82,54915,113],{"class":112},[82,54917,54918],{"class":92}," arr[j]\n",[82,54920,54921,54924,54926,54928,54930,54932],{"class":84,"line":2533},[82,54922,54923],{"class":92},"          arr[j] ",[82,54925,113],{"class":112},[82,54927,54893],{"class":92},[82,54929,2249],{"class":112},[82,54931,27703],{"class":88},[82,54933,875],{"class":92},[82,54935,54936,54939,54941,54943,54945,54947],{"class":84,"line":2538},[82,54937,54938],{"class":92},"          arr[j ",[82,54940,2249],{"class":112},[82,54942,27703],{"class":88},[82,54944,7038],{"class":92},[82,54946,113],{"class":112},[82,54948,54949],{"class":92}," tmp\n",[82,54951,54952],{"class":84,"line":2548},[82,54953,5128],{"class":92},[82,54955,54956],{"class":84,"line":2579},[82,54957,54958],{"class":92},"      }\n",[82,54960,54961],{"class":84,"line":2585},[82,54962,4787],{"class":92},[82,54964,54965,54968,54970],{"class":84,"line":4350},[82,54966,54967],{"class":92},"    document.",[82,54969,54489],{"class":2384},[82,54971,54972],{"class":92},"(arr)\n",[82,54974,54975,54978,54980],{"class":84,"line":4355},[82,54976,54977],{"class":92},"  \u003C\u002F",[82,54979,54375],{"class":53863},[82,54981,53870],{"class":92},[82,54983,54984,54986,54988],{"class":84,"line":4360},[82,54985,54347],{"class":92},[82,54987,54362],{"class":53863},[82,54989,53870],{"class":92},[82,54991,54992],{"class":84,"line":4365},[82,54993,486],{"emptyLinePlaceholder":485},[82,54995,54996,54998,55000],{"class":84,"line":4379},[82,54997,54347],{"class":92},[82,54999,53198],{"class":53863},[82,55001,53870],{"class":92},[19,55003,55004],{},[4078,55005],{"alt":78,"src":55006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,55008,55009],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,55011,55012],{},"let arr = [4, 2, 5, 1, 3]",[19,55014,55015],{},"\u002F\u002F 1.升序排列写法",[19,55017,55018],{},"arr.sort(function (a, b) {",[19,55020,55021],{},"return a - b",[19,55023,55024],{},"})",[19,55026,55027],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,55029,55030],{},"\u002F\u002F 降序排列写法",[19,55032,55018],{},[19,55034,55035],{},"return b - a",[19,55037,55024],{},[19,55039,55040],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,55042,55044],{"id":55043},"_29-函数","2.9 函数",[19,55046,55047],{},[4078,55048],{"alt":78,"src":55049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,55051,55052],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,55054,55055],{},"函数的声明用function",[19,55057,55058],{},"函数里边可以嵌套函数",[65,55060,55062],{"id":55061},"_291-函数传参","2.9.1 函数传参",[19,55064,55065],{},[4078,55066],{"alt":78,"src":55067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,55069,55070],{},[4078,55071],{"alt":78,"src":55072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3755,55074,55075,55078,55081,55084,55087,55090],{},[29,55076,55077],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,55079,55080],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,55082,55083],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,55085,55086],{},"开发中尽量保持形参和实参个数一致",[29,55088,55089],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,55091,55092],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,55094,55095],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[65,55097,55099],{"id":55098},"_292-函数的返回值","2.9.2 函数的返回值",[19,55101,55102],{},[4078,55103],{"alt":78,"src":55104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,55106,55107],{},[4078,55108],{"alt":78,"src":55109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3755,55111,55112,55115,55118,55121,55124],{},[29,55113,55114],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,55116,55117],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,55119,55120],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,55122,55123],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,55125,55126],{},"断点调试:进入函数内部看执行过程F11",[65,55128,55130],{"id":55129},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[73,55132,55134],{"className":53196,"code":55133,"language":53198,"meta":78,"style":78},"    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",[32,55135,55136,55141,55146,55150,55155],{"__ignoreMap":78},[82,55137,55138],{"class":84,"line":85},[82,55139,55140],{"class":92},"    function fn(a, b) {\n",[82,55142,55143],{"class":84,"line":157},[82,55144,55145],{"class":92},"      console.log(a + b);\n",[82,55147,55148],{"class":84,"line":404},[82,55149,4787],{"class":92},[82,55151,55152],{"class":84,"line":413},[82,55153,55154],{"class":92},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[82,55156,55157],{"class":84,"line":508},[82,55158,55159],{"class":92},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[65,55161,55163],{"id":55162},"_294-作用域","2.9.4 作用域",[3755,55165,55166,55172,55177,55180,55183],{},[29,55167,55168,55169],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2913,55170,55171],{},"作用域",[29,55173,55174],{},[2913,55175,55176],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,55178,55179],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,55181,55182],{},"函数内部可以直接所使用全局变量",[29,55184,55185],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,55187,17220],{},[73,55189,55191],{"className":53196,"code":55190,"language":53198,"meta":78,"style":78},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[32,55192,55193,55198,55203,55207,55212,55217,55222],{"__ignoreMap":78},[82,55194,55195],{"class":84,"line":85},[82,55196,55197],{"class":92},"    function fun() {\n",[82,55199,55200],{"class":84,"line":157},[82,55201,55202],{"class":92},"      num = 10\n",[82,55204,55205],{"class":84,"line":404},[82,55206,4787],{"class":92},[82,55208,55209],{"class":84,"line":413},[82,55210,55211],{"class":92},"    fun()\n",[82,55213,55214],{"class":84,"line":508},[82,55215,55216],{"class":92},"    console.log(num)\n",[82,55218,55219],{"class":84,"line":513},[82,55220,55221],{"class":92},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[82,55223,55224],{"class":84,"line":1388},[82,55225,55226],{"class":92},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3755,55228,55229,55232],{},[29,55230,55231],{},"函数内部的形参可以看做是局部变量",[29,55233,55234],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55236,55237,55238],{},"变量访问原则： ",[2913,55239,55240],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[65,55242,55244],{"id":55243},"_295-匿名函数","2.9.5 匿名函数",[19,55246,55247],{},"函数可以分为具名函数和匿名函数",[19,55249,55250],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,55252,55253],{},[29,55254,55255],{},"函数表达式",[19,55257,55258],{},[4078,55259],{"alt":78,"src":55260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,55262,55263],{},"里边也可以写参数",[19,55265,55266],{},"具名函数调用位置可以随意调整；",[19,55268,55269],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,55271,55272],{"start":157},[29,55273,55274],{},"立即执行函数",[19,55276,55277],{},[4078,55278],{"alt":78,"src":55279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,55281,55282],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,55284,55285],{},"写法：两个小括号，然后在第一个小括号中写function",[19,55287,55288],{},"(function () {})();",[19,55290,55291],{},"不要落下最后的;",[19,55293,55294],{},"立即执行函数必须要加;",[19,55296,55297],{},"分号写前写后都没问题",[19,55299,55300],{},"写前：",[19,55302,55303],{},"(function() {})()",[19,55305,55306],{},";(function () {})();",[19,55308,55309],{},"写后:",[19,55311,55312],{},"(function() {})();",[19,55314,55288],{},[19,55316,55317],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,55319,55320],{},"还有一种写法：",[19,55322,55323],{},"(function(){}());",[19,55325,55326],{},"或者:",[19,55328,55329],{},"!function(){}();",[19,55331,55332],{},"立即执行函数有时候也是可以加名字的：",[19,55334,55335],{},"(function flexible(window,document) {}(window,document));",[19,55337,55338],{},"省一些调用方法",[65,55340,55342],{"id":55341},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55344,55345],{},[4078,55346],{"alt":78,"src":55347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55349,55350],{},"这样就不用非得给x,y初始化了",[19,55352,55353],{},[4078,55354],{"alt":78,"src":55355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55357,55358],{},"代码执行时先看左边",[19,55360,55361],{},"例如：console.log(false && 3+5)",[19,55363,55364],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55366,55367],{},"&&都是真时，就返回最后一个真值",[19,55369,55370],{},"console.log(11 && 22)",[19,55372,55373],{},"输出22",[19,55375,55376],{},"逻辑与：遇真则真",[19,55378,17220],{},[19,55380,55381],{},"let age=1",[19,55383,55384],{},"console.log(11 || age++)",[19,55386,55387],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55389,55390],{},"console.log(11 || 22)",[19,55392,55393],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55395,55396],{},"||如果都是假的话，就取最后一个假的值了",[65,55398,55400],{"id":55399},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55402,55403],{},"显示转换：",[19,55405,55406,55409,55410],{},[2913,55407,55408],{},"记忆","： ",[2913,55411,55412],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55414,55415],{},"空字符串为假，其他字符串全为真",[19,55417,55418],{},[4078,55419],{"alt":78,"src":55420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55422,55423],{},"隐式转换：",[19,55425,55426],{},[4078,55427],{"alt":78,"src":55428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55430,55431],{},"隐式转换:",[19,55433,55434],{},"null+3=3",[19,55436,55437],{},"undefined+3=NaN",[19,55439,55440],{},"null==undefined 输出true,他两个都当0看",[19,55442,55443],{},"null===undefined 输出false",[19,55445,55446],{},"undefined做任何操作都是NaN",[19,55448,55449],{},"NaN不等于NaN，NaN表示计算错误",[14,55451,55453],{"id":55452},"_210-对象","2.10 对象",[65,55455,55457],{"id":55456},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55459,55460],{},"对象也是一种数据类型，里边的数据是无序的",[19,55462,55463],{},"对象由属性和方法组成",[19,55465,55466],{},[4078,55467],{"alt":78,"src":55468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55470,55471],{},[4078,55472],{"alt":78,"src":55473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55475,55476],{},[4078,55477],{"alt":78,"src":55478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[65,55480,55482],{"id":55481},"_2102-对象属性","2.10.2 对象属性",[19,55484,55485],{},[4078,55486],{"alt":78,"src":55487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,55489,55490],{},[29,55491,55492],{},"查询对象",[19,55494,55495],{},"对象名.属性 goods.uname",[19,55497,55498],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55500,55501],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55503,55504],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55506,55507],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,55509,55510],{"start":157},[29,55511,55512],{},"重新赋值",[19,55514,55515],{},"对象名.属性=新值",[26,55517,55518],{"start":404},[29,55519,55520],{},"增加新数据",[19,55522,55515],{},[26,55524,55525],{"start":413},[29,55526,55527],{},"删除对象中的属性",[19,55529,55530],{},"delete 对象名.属性",[65,55532,55534],{"id":55533},"_2103-对象方法","2.10.3 对象方法",[19,55536,55537],{},[4078,55538],{"alt":78,"src":55539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55541,55542],{},"后边跟的是匿名函数",[19,55544,55545],{},"对象外面的叫函数；对象内部的叫方法",[19,55547,55548],{},[4078,55549],{"alt":78,"src":55550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[65,55552,55554],{"id":55553},"_2104-遍历对象","2.10.4 遍历对象",[19,55556,55557],{},"理解为加括号的python字典遍历",[19,55559,55560],{},[4078,55561],{"alt":78,"src":55562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55564,55565],{},"k是字符串类型",[19,55567,55568],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[73,55570,55572],{"className":53196,"code":55571,"language":53198,"meta":78,"style":78},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[32,55573,55574,55579,55584,55589,55594],{"__ignoreMap":78},[82,55575,55576],{"class":84,"line":85},[82,55577,55578],{"class":92},"   let arr = [1, 2, 3]\n",[82,55580,55581],{"class":84,"line":157},[82,55582,55583],{"class":92},"    for (let k in arr) {\n",[82,55585,55586],{"class":84,"line":404},[82,55587,55588],{"class":92},"      console.log(k)\n",[82,55590,55591],{"class":84,"line":413},[82,55592,55593],{"class":92},"      console.log(arr[k])\n",[82,55595,55596],{"class":84,"line":508},[82,55597,4787],{"class":92},[19,55599,55600],{},[4078,55601],{"alt":78,"src":55602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55604,55605],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55607,55608],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55610,55611],{},"for in 得到的k是属性名",[54375,55613,55614],{},"\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,55616,55617],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[65,55619,55621],{"id":55620},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55623,55624],{},"数组中放对象信息",[73,55626,55630],{"className":55627,"code":55628,"language":55629,"meta":78,"style":78},"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",[32,55631,55632,55640,55645,55650,55655,55660,55665,55670,55675,55680,55685,55690,55695,55699,55703],{"__ignoreMap":78},[82,55633,55634,55636,55638],{"class":84,"line":85},[82,55635,3659],{"class":92},[82,55637,54375],{"class":53863},[82,55639,53870],{"class":92},[82,55641,55642],{"class":84,"line":157},[82,55643,55644],{"class":92},"    let students = [\n",[82,55646,55647],{"class":84,"line":404},[82,55648,55649],{"class":92},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[82,55651,55652],{"class":84,"line":413},[82,55653,55654],{"class":92},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[82,55656,55657],{"class":84,"line":508},[82,55658,55659],{"class":92},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[82,55661,55662],{"class":84,"line":513},[82,55663,55664],{"class":92},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[82,55666,55667],{"class":84,"line":1388},[82,55668,55669],{"class":92},"    ]\n",[82,55671,55672],{"class":84,"line":1394},[82,55673,55674],{"class":92},"    for (let i = 0; i \u003C students.length; i++) {\n",[82,55676,55677],{"class":84,"line":1399},[82,55678,55679],{"class":92},"      for (let k in students[i]) {\n",[82,55681,55682],{"class":84,"line":1430},[82,55683,55684],{"class":92},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[82,55686,55687],{"class":84,"line":1818},[82,55688,55689],{"class":92},"        \u002F\u002F输出每个人的名字：\n",[82,55691,55692],{"class":84,"line":2082},[82,55693,55694],{"class":92},"        \u002F\u002Fconsole.log(students[i].name)\n",[82,55696,55697],{"class":84,"line":2233},[82,55698,54958],{"class":92},[82,55700,55701],{"class":84,"line":2255},[82,55702,4787],{"class":92},[82,55704,55705,55707,55709],{"class":84,"line":2260},[82,55706,54977],{"class":92},[82,55708,54375],{"class":53863},[82,55710,53870],{"class":92},[65,55712,55714],{"id":55713},"_2106-内置对象","2.10.6 内置对象",[19,55716,55717],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,55719,55720],{},[29,55721,55722],{},"数学对象Math",[19,55724,55725],{},[4078,55726],{"alt":78,"src":55727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55729,55730],{},[323,55731,55734],{"href":55732,"rel":55733},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26449],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55736,55737],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55739,55740],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55742,55743],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55745,55746],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55748,55749],{},"null属于对象数据类型",[26,55751,55752],{"start":157},[29,55753,55754],{},"生成任意范围随机数",[19,55756,55757],{},[4078,55758],{"alt":78,"src":55759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55761,55762],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55764,55765],{},"乘以几就取不到几",[19,55767,55768],{},"取数组中的随机元素：",[19,55770,55771],{},"let arr = ['red', 'green', 'blue']",[19,55773,55774],{},"let random = Math.floor(Math.random() * arr.length)",[19,55776,55777],{},"console.log(arr[random])",[19,55779,55780],{},"这个函数得到的是全闭区间",[19,55782,55783],{},"function getRandom(N, M) {",[19,55785,55786],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55788,3695],{},[19,55790,55791],{},"console.log(getRandom(4, 8))",[65,55793,55795],{"id":55794},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55797,55798],{},[4078,55799],{"alt":78,"src":55800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55802,55803],{},[4078,55804],{"alt":78,"src":55805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55807,55808],{},[4078,55809],{"alt":78,"src":55810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55812,55813],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55815,55816],{},[4078,55817],{"alt":78,"src":55818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55820,55821],{},[4078,55822],{"alt":78,"src":55823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55825,55826],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55828,55829],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55831,55832],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2671,55834,55835],{},"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":78,"searchDepth":157,"depth":157,"links":55837},[55838,55846,55847,55848,55849,55850,55857,55861,55867,55876],{"id":53031,"depth":157,"text":53032,"children":55839},[55840,55841,55842,55843,55844,55845],{"id":53035,"depth":404,"text":53036},{"id":53052,"depth":404,"text":53053},{"id":53092,"depth":404,"text":53093},{"id":53104,"depth":404,"text":53105},{"id":53113,"depth":404,"text":53114},{"id":53161,"depth":404,"text":53162},{"id":53171,"depth":157,"text":53172},{"id":53259,"depth":157,"text":53260},{"id":53282,"depth":157,"text":53283},{"id":53294,"depth":157,"text":53295},{"id":53481,"depth":157,"text":53482,"children":55851},[55852,55853,55854,55855,55856],{"id":53485,"depth":404,"text":53486},{"id":53494,"depth":404,"text":53495},{"id":53522,"depth":404,"text":53523},{"id":53558,"depth":404,"text":53559},{"id":53583,"depth":404,"text":53584},{"id":53595,"depth":157,"text":53596,"children":55858},[55859,55860],{"id":53616,"depth":404,"text":53617},{"id":53710,"depth":404,"text":53711},{"id":53768,"depth":157,"text":53769,"children":55862},[55863,55864,55865,55866],{"id":53772,"depth":404,"text":53773},{"id":53796,"depth":404,"text":53797},{"id":53849,"depth":404,"text":53850},{"id":54658,"depth":404,"text":54659},{"id":55043,"depth":157,"text":55044,"children":55868},[55869,55870,55871,55872,55873,55874,55875],{"id":55061,"depth":404,"text":55062},{"id":55098,"depth":404,"text":55099},{"id":55129,"depth":404,"text":55130},{"id":55162,"depth":404,"text":55163},{"id":55243,"depth":404,"text":55244},{"id":55341,"depth":404,"text":55342},{"id":55399,"depth":404,"text":55400},{"id":55452,"depth":157,"text":55453,"children":55877},[55878,55879,55880,55881,55882,55883,55884],{"id":55456,"depth":404,"text":55457},{"id":55481,"depth":404,"text":55482},{"id":55533,"depth":404,"text":55534},{"id":55553,"depth":404,"text":55554},{"id":55620,"depth":404,"text":55621},{"id":55713,"depth":404,"text":55714},{"id":55794,"depth":404,"text":55795},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53023,"description":2699},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55891,"title":55892,"body":55893,"description":2699,"extension":2700,"meta":79227,"navigation":485,"path":79228,"seo":79229,"stem":79230,"__hash__":79231},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55894,"toc":79167},[55895,55898,55901,55904,55909,55912,55915,55918,55922,55926,55932,55937,55945,55952,55955,55959,55964,55969,55974,55977,55980,55991,55994,55998,56001,56004,56009,56014,56019,56022,56025,56117,56120,56125,56128,56133,56136,56139,56144,56147,56152,56156,56159,56173,56177,56182,56185,56188,56192,56197,56200,56204,56208,56213,56217,56222,56225,56228,56231,56234,56237,56240,56245,56250,56278,56281,56284,56287,56292,56295,56298,56301,56304,56308,56337,56341,56346,56351,56354,56357,56360,56365,56480,56485,56490,56651,56656,56659,56663,56668,56673,56676,56679,56682,56685,56688,56691,56694,56697,56700,56703,56706,56709,56712,56715,56717,56720,56723,56726,56731,56735,57132,57135,57141,57145,57150,58430,58435,58438,58441,58444,58449,59645,59649,59655,59660,59663,59668,59673,59677,59681,59686,59689,59694,59697,59700,59704,60612,60615,60619,60840,60843,60846,60849,61075,61078,61302,61305,61309,61314,61317,61320,61548,61551,61584,61587,61591,61596,61600,61603,61606,61609,61612,61615,61618,61621,61626,62906,62910,62913,64006,64010,64013,64016,64019,64022,64026,64029,64032,64034,64042,65522,65526,65529,65532,65535,65744,65747,65751,65755,65760,65765,65768,65771,65776,65780,65785,65788,65897,65901,65906,65911,65914,65917,65921,65926,65931,65936,65939,65942,65953,65956,65961,65966,65969,65972,66045,66049,66054,66057,66059,66070,66074,66079,67405,67408,67411,67414,67416,67419,67422,67425,67428,67431,67434,67437,67440,67443,67446,67449,67452,67454,67456,67459,67463,68557,68560,68563,68579,68593,68596,68601,68607,68612,68616,68620,68625,68629,68634,69076,69081,69084,69088,69093,69096,69099,69103,69108,69112,69117,69122,69126,69131,69136,69139,69144,69149,69153,69158,69163,69267,69270,69274,69279,69645,69648,69651,69654,69657,69660,69663,69666,69669,70965,70969,70974,70979,70982,70985,70988,70991,70993,70998,71003,71006,71010,71015,71020,71025,71028,71031,71034,71037,71040,71045,71048,71052,71057,71062,71066,71071,71074,71079,71082,71085,71088,71091,71094,71099,71102,71105,71108,71111,71115,71120,71123,71127,71132,71135,71138,71142,71171,71174,71178,71182,71187,71191,71196,71199,71202,71205,71208,71211,71214,71217,71220,71223,71226,71229,71232,71235,71238,71242,71247,71252,71255,71259,71263,71268,71271,71275,71278,71281,71286,71291,71296,71301,71306,71309,71312,71317,71322,71326,71331,71334,71339,71342,71345,71348,71351,71356,71359,71368,71372,71377,71380,71383,71387,71390,71395,71399,71402,71408,71414,71418,71444,71447,73007,73010,73506,73509,73514,73519,73524,73528,73533,73538,73543,73547,73552,73555,73558,73561,73564,73568,73571,73576,73579,73584,73588,73593,73596,73601,73606,73611,73614,73617,73622,73627,73630,73633,73637,73640,73645,73648,73653,73656,73661,73666,73671,73674,73679,73744,73747,73758,73762,73767,73939,73943,73948,73951,73954,73957,73961,73972,73976,73979,73984,73989,73992,73995,73998,74001,74004,74006,74009,74012,74015,74020,74023,74028,74031,74035,74038,74041,74055,74059,74062,74117,74122,74125,74128,74133,74136,74140,74145,74275,74279,74284,74289,74370,74375,74379,74382,74387,74392,74398,74401,74404,74407,74411,74416,74419,74430,74434,74451,77496,77500,77503,77506,77509,77530,77534,77537,77545,77548,77553,77556,77559,77564,77569,77573,77594,77598,77603,77606,77609,77612,77615,77619,77624,77627,77631,77636,77639,77644,77647,77652,77655,77660,78863,78867,78872,78875,78880,79164],[10,55896,55892],{"id":55897},"_3web-apis",[19,55899,55900],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55902,55903],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55905,55906],{},[4078,55907],{"alt":78,"src":55908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55910,55911],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55913,55914],{},"建议数组和对象使用 const 来声明",[19,55916,55917],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55919,55921],{"id":55920},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[65,55923,55925],{"id":55924},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55927,55928,55931],{},[32,55929,55930],{},"document"," = HTML 文件解析后的对象化表示；",[19,55933,55934,55936],{},[32,55935,55930],{}," ≠ HTML 文件本身",[19,55938,55939,55944],{},[2913,55940,55941],{},[32,55942,55943],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55946,55947,55951],{},[2913,55948,55949],{},[32,55950,55930],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55953,55954],{},"document实际上为window.document的简写",[65,55956,55958],{"id":55957},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55960,55961],{},[4078,55962],{"alt":78,"src":55963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55965,55966],{},[4078,55967],{"alt":78,"src":55968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55970,55971],{},[4078,55972],{"alt":78,"src":55973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55975,55976],{},"console.dir()",[19,55978,55979],{},"dir用来打印对象",[3755,55981,55982,55985,55988],{},[29,55983,55984],{},"任何一个标签，都是一个对象",[29,55986,55987],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55989,55990],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55992,55993],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[65,55995,55997],{"id":55996},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55999,56000],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,56002,56003],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,56005,56006],{},[2913,56007,56008],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,56010,56011],{},[29,56012,56013],{},"利用CSS选择器来获取标签元素",[19,56015,56016],{},[4078,56017],{"alt":78,"src":56018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,56020,56021],{},"里边的选择器必须必须加引号！！！",[19,56023,56024],{},"只选择第一个元素",[73,56026,56028],{"className":55627,"code":56027,"language":55629,"meta":78,"style":78},"\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",[32,56029,56030,56038,56059,56078,56086,56091,56096,56101,56109],{"__ignoreMap":78},[82,56031,56032,56034,56036],{"class":84,"line":85},[82,56033,3659],{"class":92},[82,56035,54362],{"class":53863},[82,56037,53870],{"class":92},[82,56039,56040,56042,56044,56047,56049,56052,56055,56057],{"class":84,"line":157},[82,56041,54705],{"class":92},[82,56043,54173],{"class":53863},[82,56045,56046],{"class":2384}," class",[82,56048,113],{"class":92},[82,56050,56051],{"class":96},"\"box\"",[82,56053,56054],{"class":92},">123\u003C\u002F",[82,56056,54173],{"class":53863},[82,56058,53870],{"class":92},[82,56060,56061,56063,56065,56067,56069,56071,56074,56076],{"class":84,"line":404},[82,56062,54705],{"class":92},[82,56064,54173],{"class":53863},[82,56066,56046],{"class":2384},[82,56068,113],{"class":92},[82,56070,56051],{"class":96},[82,56072,56073],{"class":92},">456\u003C\u002F",[82,56075,54173],{"class":53863},[82,56077,53870],{"class":92},[82,56079,56080,56082,56084],{"class":84,"line":413},[82,56081,54705],{"class":92},[82,56083,54375],{"class":53863},[82,56085,53870],{"class":92},[82,56087,56088],{"class":84,"line":508},[82,56089,56090],{"class":92},"    \u002F\u002F 1.获取匹配的第一个元素\n",[82,56092,56093],{"class":84,"line":513},[82,56094,56095],{"class":92},"    const box = document.querySelector('div')\n",[82,56097,56098],{"class":84,"line":1388},[82,56099,56100],{"class":92},"    console.dir(box)\n",[82,56102,56103,56105,56107],{"class":84,"line":1394},[82,56104,54977],{"class":92},[82,56106,54375],{"class":53863},[82,56108,53870],{"class":92},[82,56110,56111,56113,56115],{"class":84,"line":1399},[82,56112,54347],{"class":92},[82,56114,54362],{"class":53863},[82,56116,53870],{"class":92},[19,56118,56119],{},"只选123，不选456",[19,56121,56122],{},[4078,56123],{"alt":78,"src":56124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,56126,56127],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,56129,56130],{},[4078,56131],{"alt":78,"src":56132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,56134,56135],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,56137,56138],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,56140,56141],{"start":157},[29,56142,56143],{},"其他方法来获取标签元素",[19,56145,56146],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,56148,56149],{},[4078,56150],{"alt":78,"src":56151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[65,56153,56155],{"id":56154},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56157,56158],{},"设置修改DOM元素内容有两种方式：",[3755,56160,56161,56164,56167,56170],{},[29,56162,56163],{},"元素.innerText=''",[29,56165,56166],{},"元素.innerHTML=''",[29,56168,56169],{},"不写字符串输出数字也是可以的",[29,56171,56172],{},"元素.innerHtml=1",[24582,56174,56176],{"id":56175},"_3131-innertext","3.1.3.1 innerText",[19,56178,56179],{},[4078,56180],{"alt":78,"src":56181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,56183,56184],{},"思路：实现了修改盒子中的内容！",[19,56186,56187],{},"它只显示纯文本，不解析标签",[24582,56189,56191],{"id":56190},"_3132-innerhtml","3.1.3.2 innerHTML",[19,56193,56194],{},[4078,56195],{"alt":78,"src":56196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,56198,56199],{},"相比于innerText，他的强大之处在于可以解析标签",[65,56201,56203],{"id":56202},"_314-操作元素属性","3.1.4 操作元素属性",[24582,56205,56207],{"id":56206},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,56209,56210],{},[4078,56211],{"alt":78,"src":56212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24582,56214,56216],{"id":56215},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56218,56219],{},[4078,56220],{"alt":78,"src":56221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56223,56224],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56226,56227],{},"div.style.backgroundColor = 'hotpink'",[19,56229,56230],{},"如果按照css的写法，-表示减，就会出错",[19,56232,56233],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56235,56236],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56238,56239],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56241,56242],{},[4078,56243],{"alt":78,"src":56244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56246,56247],{},[4078,56248],{"alt":78,"src":56249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,56251,56252,56255,56258,56261,56264,56267],{},[29,56253,56254],{},"className这个方式就是修改很多样式的时候来使用的！",[29,56256,56257],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,56259,56260],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,56262,56263],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,56265,56266],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,56268,56269,56270,56275],{},"解析标签的时候就变为了",[54173,56271],{"className":56272},[56273,56274],"nav","box",[56276,56277],"br",{},[19,56279,56280],{},"例子：",[54173,56282],{"className":56283},[56273],[54375,56285,56286],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,56288,56289],{},[4078,56290],{"alt":78,"src":56291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,56293,56294],{},"追加和删除类名用classList",[19,56296,56297],{},"常用于类似于开关的操作",[19,56299,56300],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,56302,56303],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24582,56305,56307],{"id":56306},"_3143-牢记点","3.1.4.3 牢记点",[26,56309,56310,56313,56316,56319,56322,56325,56328,56331,56334],{},[29,56311,56312],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,56314,56315],{},"使用style属性操作css时不要忘记引号",[29,56317,56318],{},"使用className或者classList时也不要忘记引号",[29,56320,56321],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,56323,56324],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,56326,56327],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,56329,56330],{},"若： let arr=['1','2',3] arr[0]=1",[29,56332,56333],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,56335,56336],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[65,56338,56340],{"id":56339},"_315-操作表单元素","3.1.5 操作表单元素",[26,56342,56343],{},[29,56344,56345],{},"天生的属性",[19,56347,56348],{},[4078,56349],{"alt":78,"src":56350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56352,56353],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56355,56356],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56358,56359],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56361,56362],{},[4078,56363],{"alt":78,"src":56364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[73,56366,56368],{"className":53196,"code":56367,"language":53198,"meta":78,"style":78},"在复选框中如果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",[32,56369,56370,56375,56407,56412,56417,56422,56427,56431,56436,56441,56458,56470,56475],{"__ignoreMap":78},[82,56371,56372],{"class":84,"line":85},[82,56373,56374],{"class":92},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[82,56376,56377,56379,56382,56385,56387,56390,56392,56394,56396,56398,56400,56402,56405],{"class":84,"line":157},[82,56378,3659],{"class":92},[82,56380,56381],{"class":53863},"input",[82,56383,56384],{"class":2384}," type",[82,56386,113],{"class":92},[82,56388,56389],{"class":96},"\"checkbox\"",[82,56391,17506],{"class":2384},[82,56393,113],{"class":92},[82,56395,1793],{"class":96},[82,56397,17545],{"class":2384},[82,56399,113],{"class":92},[82,56401,1793],{"class":96},[82,56403,56404],{"class":2384}," checked",[82,56406,53870],{"class":92},[82,56408,56409],{"class":84,"line":404},[82,56410,56411],{"class":92},"不选的话：\n",[82,56413,56414],{"class":84,"line":413},[82,56415,56416],{"class":92},"const input = document.querySelector('input')\n",[82,56418,56419],{"class":84,"line":508},[82,56420,56421],{"class":92},"input.checked=false\n",[82,56423,56424],{"class":84,"line":513},[82,56425,56426],{"class":92},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[82,56428,56429],{"class":84,"line":1388},[82,56430,486],{"emptyLinePlaceholder":485},[82,56432,56433],{"class":84,"line":1394},[82,56434,56435],{"class":92},"禁用按钮：\n",[82,56437,56438],{"class":84,"line":1399},[82,56439,56440],{"class":92},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[82,56442,56443,56445,56448,56451,56454,56456],{"class":84,"line":1430},[82,56444,3659],{"class":92},[82,56446,56447],{"class":53863},"button",[82,56449,56450],{"class":2384}," disabled",[82,56452,56453],{"class":92},">点击\u003C\u002F",[82,56455,56447],{"class":53863},[82,56457,53870],{"class":92},[82,56459,56460,56462,56464,56466,56468],{"class":84,"line":1818},[82,56461,3659],{"class":92},[82,56463,56447],{"class":53863},[82,56465,56453],{"class":92},[82,56467,56447],{"class":53863},[82,56469,53870],{"class":92},[82,56471,56472],{"class":84,"line":2082},[82,56473,56474],{"class":92},"const bt = document.querySelector('button')\n",[82,56476,56477],{"class":84,"line":2233},[82,56478,56479],{"class":92},"bt.disabled = false\n",[26,56481,56482],{"start":157},[29,56483,56484],{},"自定义属性",[19,56486,56487],{},[4078,56488],{"alt":78,"src":56489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[73,56491,56493],{"className":55627,"code":56492,"language":55629,"meta":78,"style":78},"\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",[32,56494,56495,56503,56531,56550,56569,56588,56607,56615,56620,56625,56630,56635,56643],{"__ignoreMap":78},[82,56496,56497,56499,56501],{"class":84,"line":85},[82,56498,3659],{"class":92},[82,56500,54362],{"class":53863},[82,56502,53870],{"class":92},[82,56504,56505,56507,56509,56512,56514,56516,56519,56521,56524,56527,56529],{"class":84,"line":157},[82,56506,54705],{"class":92},[82,56508,54173],{"class":53863},[82,56510,56511],{"class":2384}," data-id",[82,56513,113],{"class":92},[82,56515,6274],{"class":96},[82,56517,56518],{"class":2384}," data-spm",[82,56520,113],{"class":92},[82,56522,56523],{"class":96},"\"我不知道\"",[82,56525,56526],{"class":92},">1\u003C\u002F",[82,56528,54173],{"class":53863},[82,56530,53870],{"class":92},[82,56532,56533,56535,56537,56539,56541,56543,56546,56548],{"class":84,"line":404},[82,56534,54705],{"class":92},[82,56536,54173],{"class":53863},[82,56538,56511],{"class":2384},[82,56540,113],{"class":92},[82,56542,6297],{"class":96},[82,56544,56545],{"class":92},">2\u003C\u002F",[82,56547,54173],{"class":53863},[82,56549,53870],{"class":92},[82,56551,56552,56554,56556,56558,56560,56562,56565,56567],{"class":84,"line":413},[82,56553,54705],{"class":92},[82,56555,54173],{"class":53863},[82,56557,56511],{"class":2384},[82,56559,113],{"class":92},[82,56561,6310],{"class":96},[82,56563,56564],{"class":92},">3\u003C\u002F",[82,56566,54173],{"class":53863},[82,56568,53870],{"class":92},[82,56570,56571,56573,56575,56577,56579,56581,56584,56586],{"class":84,"line":508},[82,56572,54705],{"class":92},[82,56574,54173],{"class":53863},[82,56576,56511],{"class":2384},[82,56578,113],{"class":92},[82,56580,6323],{"class":96},[82,56582,56583],{"class":92},">4\u003C\u002F",[82,56585,54173],{"class":53863},[82,56587,53870],{"class":92},[82,56589,56590,56592,56594,56596,56598,56600,56603,56605],{"class":84,"line":513},[82,56591,54705],{"class":92},[82,56593,54173],{"class":53863},[82,56595,56511],{"class":2384},[82,56597,113],{"class":92},[82,56599,6343],{"class":96},[82,56601,56602],{"class":92},">5\u003C\u002F",[82,56604,54173],{"class":53863},[82,56606,53870],{"class":92},[82,56608,56609,56611,56613],{"class":84,"line":1388},[82,56610,54705],{"class":92},[82,56612,54375],{"class":53863},[82,56614,53870],{"class":92},[82,56616,56617],{"class":84,"line":1394},[82,56618,56619],{"class":92},"    const one = document.querySelector('div')\n",[82,56621,56622],{"class":84,"line":1399},[82,56623,56624],{"class":92},"    console.log(one.dataset)\n",[82,56626,56627],{"class":84,"line":1430},[82,56628,56629],{"class":92},"    console.log(one.dataset.id)\n",[82,56631,56632],{"class":84,"line":1818},[82,56633,56634],{"class":92},"    console.log(one.dataset.spm)\n",[82,56636,56637,56639,56641],{"class":84,"line":2082},[82,56638,54977],{"class":92},[82,56640,54375],{"class":53863},[82,56642,53870],{"class":92},[82,56644,56645,56647,56649],{"class":84,"line":2233},[82,56646,54347],{"class":92},[82,56648,54362],{"class":53863},[82,56650,53870],{"class":92},[19,56652,56653],{},[4078,56654],{"alt":78,"src":56655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56657,56658],{},"document.querySelector选择的是第一个对象（元素）",[65,56660,56662],{"id":56661},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56664,56665],{},[4078,56666],{"alt":78,"src":56667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56669,56670],{},[4078,56671],{"alt":78,"src":56672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56674,56675],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54375,56677,56678],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56680,56681],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54375,56683,56684],{},"\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,56686,56687],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56689,56690],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56692,56693],{},"单位为毫秒！！！",[19,56695,56696],{},"可以搭配匿名函数来用！！！",[19,56698,56699],{},"setInterval(function () {",[19,56701,56702],{},"alert('两秒执行一次')",[19,56704,56705],{},"}, 2000)",[19,56707,56708],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56710,56711],{},"function fn() {",[19,56713,56714],{},"document.write(1)",[19,56716,3695],{},[19,56718,56719],{},"setInterval(fn, 1000)",[19,56721,56722],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56724,56725],{},"setInterval('fn()', 1000)",[19,56727,56728],{},[4078,56729],{"alt":78,"src":56730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24582,56732,56734],{"id":56733},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[73,56736,56738],{"className":53196,"code":56737,"language":53198,"meta":78,"style":78},"\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",[32,56739,56740,56750,56764,56768,56776,56790,56810,56822,56830,56834,56842,56879,56884,56889,56894,56902,56910,56932,56940,56945,56967,56972,56977,56988,56993,57013,57021,57036,57051,57062,57067,57077,57087,57091,57100,57104,57112,57120,57124],{"__ignoreMap":78},[82,56741,56742,56744,56746,56748],{"class":84,"line":85},[82,56743,53860],{"class":92},[82,56745,53864],{"class":53863},[82,56747,53867],{"class":2384},[82,56749,53870],{"class":92},[82,56751,56752,56754,56756,56758,56760,56762],{"class":84,"line":157},[82,56753,3659],{"class":92},[82,56755,53198],{"class":53863},[82,56757,53879],{"class":2384},[82,56759,113],{"class":92},[82,56761,53884],{"class":96},[82,56763,53870],{"class":92},[82,56765,56766],{"class":84,"line":404},[82,56767,486],{"emptyLinePlaceholder":485},[82,56769,56770,56772,56774],{"class":84,"line":413},[82,56771,3659],{"class":92},[82,56773,53897],{"class":53863},[82,56775,53870],{"class":92},[82,56777,56778,56780,56782,56784,56786,56788],{"class":84,"line":508},[82,56779,54705],{"class":92},[82,56781,53907],{"class":53863},[82,56783,53910],{"class":2384},[82,56785,113],{"class":92},[82,56787,53915],{"class":96},[82,56789,53870],{"class":92},[82,56791,56792,56794,56796,56798,56800,56802,56804,56806,56808],{"class":84,"line":513},[82,56793,54705],{"class":92},[82,56795,53907],{"class":53863},[82,56797,17506],{"class":2384},[82,56799,113],{"class":92},[82,56801,53954],{"class":96},[82,56803,53934],{"class":2384},[82,56805,113],{"class":92},[82,56807,53961],{"class":96},[82,56809,53870],{"class":92},[82,56811,56812,56814,56816,56818,56820],{"class":84,"line":1388},[82,56813,54705],{"class":92},[82,56815,53970],{"class":53863},[82,56817,53973],{"class":92},[82,56819,53970],{"class":53863},[82,56821,53870],{"class":92},[82,56823,56824,56826,56828],{"class":84,"line":1394},[82,56825,54347],{"class":92},[82,56827,53897],{"class":53863},[82,56829,53870],{"class":92},[82,56831,56832],{"class":84,"line":1399},[82,56833,486],{"emptyLinePlaceholder":485},[82,56835,56836,56838,56840],{"class":84,"line":1430},[82,56837,3659],{"class":92},[82,56839,54362],{"class":53863},[82,56841,53870],{"class":92},[82,56843,56844,56846,56849,56851,56853,56855,56857,56859,56861,56864,56866,56869,56872,56874,56877],{"class":84,"line":1818},[82,56845,54705],{"class":92},[82,56847,56848],{"class":53863},"textarea",[82,56850,17506],{"class":2384},[82,56852,113],{"class":92},[82,56854,1793],{"class":96},[82,56856,17545],{"class":2384},[82,56858,113],{"class":92},[82,56860,1793],{"class":96},[82,56862,56863],{"class":2384}," cols",[82,56865,113],{"class":92},[82,56867,56868],{"class":96},"\"30\"",[82,56870,56871],{"class":2384}," rows",[82,56873,113],{"class":92},[82,56875,56876],{"class":96},"\"10\"",[82,56878,53870],{"class":92},[82,56880,56881],{"class":84,"line":2082},[82,56882,56883],{"class":92},"        用户注册协议\n",[82,56885,56886],{"class":84,"line":2233},[82,56887,56888],{"class":92},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[82,56890,56891],{"class":84,"line":2255},[82,56892,56893],{"class":92},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[82,56895,56896,56898,56900],{"class":84,"line":2260},[82,56897,54338],{"class":92},[82,56899,56848],{"class":53863},[82,56901,53870],{"class":92},[82,56903,56904,56906,56908],{"class":84,"line":2298},[82,56905,54705],{"class":92},[82,56907,56276],{"class":53863},[82,56909,53870],{"class":92},[82,56911,56912,56914,56916,56918,56920,56923,56925,56928,56930],{"class":84,"line":2303},[82,56913,54705],{"class":92},[82,56915,56447],{"class":53863},[82,56917,56046],{"class":2384},[82,56919,113],{"class":92},[82,56921,56922],{"class":96},"\"btn\"",[82,56924,56450],{"class":2384},[82,56926,56927],{"class":92},">我已经阅读用户协议(5)\u003C\u002F",[82,56929,56447],{"class":53863},[82,56931,53870],{"class":92},[82,56933,56934,56936,56938],{"class":84,"line":2321},[82,56935,54705],{"class":92},[82,56937,54375],{"class":53863},[82,56939,53870],{"class":92},[82,56941,56942],{"class":84,"line":2533},[82,56943,56944],{"class":2828},"    \u002F\u002F 1. 获取元素\n",[82,56946,56947,56949,56952,56954,56957,56960,56962,56965],{"class":84,"line":2538},[82,56948,13811],{"class":112},[82,56950,56951],{"class":88}," btn",[82,56953,259],{"class":112},[82,56955,56956],{"class":92}," document.",[82,56958,56959],{"class":2384},"querySelector",[82,56961,93],{"class":92},[82,56963,56964],{"class":96},"'.btn'",[82,56966,119],{"class":92},[82,56968,56969],{"class":84,"line":2548},[82,56970,56971],{"class":2828},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[82,56973,56974],{"class":84,"line":2579},[82,56975,56976],{"class":2828},"    \u002F\u002F 2. 倒计时\n",[82,56978,56979,56981,56983,56985],{"class":84,"line":2585},[82,56980,54780],{"class":112},[82,56982,12029],{"class":92},[82,56984,113],{"class":112},[82,56986,56987],{"class":88}," 5\n",[82,56989,56990],{"class":84,"line":4350},[82,56991,56992],{"class":2828},"    \u002F\u002F 2.1 开启定时器\n",[82,56994,56995,56997,57000,57002,57005,57007,57010],{"class":84,"line":4355},[82,56996,54780],{"class":112},[82,56998,56999],{"class":92}," n ",[82,57001,113],{"class":112},[82,57003,57004],{"class":2384}," setInterval",[82,57006,93],{"class":92},[82,57008,57009],{"class":112},"function",[82,57011,57012],{"class":92}," () {\n",[82,57014,57015,57018],{"class":84,"line":4360},[82,57016,57017],{"class":92},"      i",[82,57019,57020],{"class":112},"--\n",[82,57022,57023,57026,57028,57031,57033],{"class":84,"line":4365},[82,57024,57025],{"class":92},"      btn.innerHTML ",[82,57027,113],{"class":112},[82,57029,57030],{"class":96}," `我已经阅读用户协议(${",[82,57032,3199],{"class":92},[82,57034,57035],{"class":96},"})`\n",[82,57037,57038,57041,57044,57047,57049],{"class":84,"line":4379},[82,57039,57040],{"class":112},"      if",[82,57042,57043],{"class":92}," (i ",[82,57045,57046],{"class":112},"===",[82,57048,6688],{"class":88},[82,57050,15031],{"class":92},[82,57052,57053,57056,57059],{"class":84,"line":4384},[82,57054,57055],{"class":2384},"        clearInterval",[82,57057,57058],{"class":92},"(n)  ",[82,57060,57061],{"class":2828},"\u002F\u002F 关闭定时器\n",[82,57063,57064],{"class":84,"line":5176},[82,57065,57066],{"class":2828},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[82,57068,57069,57072,57074],{"class":84,"line":5190},[82,57070,57071],{"class":92},"        btn.disabled ",[82,57073,113],{"class":112},[82,57075,57076],{"class":88}," false\n",[82,57078,57079,57082,57084],{"class":84,"line":5198},[82,57080,57081],{"class":92},"        btn.innerHTML ",[82,57083,113],{"class":112},[82,57085,57086],{"class":96}," '同意'\n",[82,57088,57089],{"class":84,"line":5203},[82,57090,54958],{"class":92},[82,57092,57093,57096,57098],{"class":84,"line":5209},[82,57094,57095],{"class":92},"    }, ",[82,57097,9002],{"class":88},[82,57099,119],{"class":92},[82,57101,57102],{"class":84,"line":5215},[82,57103,486],{"emptyLinePlaceholder":485},[82,57105,57106,57108,57110],{"class":84,"line":5220},[82,57107,54977],{"class":92},[82,57109,54375],{"class":53863},[82,57111,53870],{"class":92},[82,57113,57114,57116,57118],{"class":84,"line":10539},[82,57115,54347],{"class":92},[82,57117,54362],{"class":53863},[82,57119,53870],{"class":92},[82,57121,57122],{"class":84,"line":10563},[82,57123,486],{"emptyLinePlaceholder":485},[82,57125,57126,57128,57130],{"class":84,"line":10568},[82,57127,54347],{"class":92},[82,57129,53198],{"class":53863},[82,57131,53870],{"class":92},[19,57133,57134],{},"不要一直想着用死循环,避免死循环",[19,57136,57137,57140],{},[32,57138,57139],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24582,57142,57144],{"id":57143},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,57146,57147],{},[29,57148,57149],{},"法1",[73,57151,57153],{"className":53196,"code":57152,"language":53198,"meta":78,"style":78},"\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",[32,57154,57155,57165,57179,57183,57191,57205,57225,57237,57245,57251,57262,57273,57277,57281,57288,57300,57304,57308,57315,57327,57341,57354,57368,57372,57376,57383,57394,57405,57416,57428,57440,57452,57456,57460,57468,57478,57491,57503,57516,57520,57524,57531,57541,57553,57565,57576,57587,57597,57609,57621,57625,57629,57638,57650,57662,57690,57703,57707,57711,57718,57729,57733,57741,57749,57753,57761,57775,57790,57814,57822,57837,57850,57858,57879,57891,57903,57915,57927,57939,57951,57963,57972,57980,57988,57996,58007,58030,58049,58068,58087,58106,58125,58144,58164,58168,58188,58207,58227,58248,58258,58275,58285,58295,58305,58310,58315,58320,58325,58350,58363,58367,58390,58394,58402,58410,58418,58422],{"__ignoreMap":78},[82,57156,57157,57159,57161,57163],{"class":84,"line":85},[82,57158,53860],{"class":92},[82,57160,53864],{"class":53863},[82,57162,53867],{"class":2384},[82,57164,53870],{"class":92},[82,57166,57167,57169,57171,57173,57175,57177],{"class":84,"line":157},[82,57168,3659],{"class":92},[82,57170,53198],{"class":53863},[82,57172,53879],{"class":2384},[82,57174,113],{"class":92},[82,57176,53884],{"class":96},[82,57178,53870],{"class":92},[82,57180,57181],{"class":84,"line":404},[82,57182,486],{"emptyLinePlaceholder":485},[82,57184,57185,57187,57189],{"class":84,"line":413},[82,57186,3659],{"class":92},[82,57188,53897],{"class":53863},[82,57190,53870],{"class":92},[82,57192,57193,57195,57197,57199,57201,57203],{"class":84,"line":508},[82,57194,54705],{"class":92},[82,57196,53907],{"class":53863},[82,57198,53910],{"class":2384},[82,57200,113],{"class":92},[82,57202,53915],{"class":96},[82,57204,53870],{"class":92},[82,57206,57207,57209,57211,57213,57215,57217,57219,57221,57223],{"class":84,"line":513},[82,57208,54705],{"class":92},[82,57210,53907],{"class":53863},[82,57212,17506],{"class":2384},[82,57214,113],{"class":92},[82,57216,53954],{"class":96},[82,57218,53934],{"class":2384},[82,57220,113],{"class":92},[82,57222,53961],{"class":96},[82,57224,53870],{"class":92},[82,57226,57227,57229,57231,57233,57235],{"class":84,"line":1388},[82,57228,54705],{"class":92},[82,57230,53970],{"class":53863},[82,57232,53973],{"class":92},[82,57234,53970],{"class":53863},[82,57236,53870],{"class":92},[82,57238,57239,57241,57243],{"class":84,"line":1394},[82,57240,54705],{"class":92},[82,57242,2671],{"class":53863},[82,57244,53870],{"class":92},[82,57246,57247,57249],{"class":84,"line":1399},[82,57248,8995],{"class":53863},[82,57250,1349],{"class":92},[82,57252,57253,57256,57258,57260],{"class":84,"line":1430},[82,57254,57255],{"class":88},"      padding",[82,57257,1357],{"class":92},[82,57259,2244],{"class":88},[82,57261,3909],{"class":92},[82,57263,57264,57267,57269,57271],{"class":84,"line":1818},[82,57265,57266],{"class":88},"      margin",[82,57268,1357],{"class":92},[82,57270,2244],{"class":88},[82,57272,3909],{"class":92},[82,57274,57275],{"class":84,"line":2082},[82,57276,4787],{"class":92},[82,57278,57279],{"class":84,"line":2233},[82,57280,486],{"emptyLinePlaceholder":485},[82,57282,57283,57286],{"class":84,"line":2255},[82,57284,57285],{"class":53863},"    li",[82,57287,1349],{"class":92},[82,57289,57290,57293,57295,57298],{"class":84,"line":2260},[82,57291,57292],{"class":88},"      list-style",[82,57294,1357],{"class":92},[82,57296,57297],{"class":88},"none",[82,57299,3909],{"class":92},[82,57301,57302],{"class":84,"line":2298},[82,57303,4787],{"class":92},[82,57305,57306],{"class":84,"line":2303},[82,57307,486],{"emptyLinePlaceholder":485},[82,57309,57310,57313],{"class":84,"line":2321},[82,57311,57312],{"class":2384},"    .box",[82,57314,1349],{"class":92},[82,57316,57317,57320,57322,57325],{"class":84,"line":2533},[82,57318,57319],{"class":88},"      position",[82,57321,1357],{"class":92},[82,57323,57324],{"class":88},"relative",[82,57326,3909],{"class":92},[82,57328,57329,57332,57334,57337,57339],{"class":84,"line":2538},[82,57330,57331],{"class":88},"      width",[82,57333,1357],{"class":92},[82,57335,57336],{"class":88},"976",[82,57338,54054],{"class":112},[82,57340,3909],{"class":92},[82,57342,57343,57346,57348,57350,57352],{"class":84,"line":2548},[82,57344,57345],{"class":88},"      height",[82,57347,1357],{"class":92},[82,57349,4154],{"class":88},[82,57351,54054],{"class":112},[82,57353,3909],{"class":92},[82,57355,57356,57358,57360,57362,57364,57366],{"class":84,"line":2579},[82,57357,57266],{"class":88},[82,57359,1357],{"class":92},[82,57361,3069],{"class":88},[82,57363,54054],{"class":112},[82,57365,54118],{"class":88},[82,57367,3909],{"class":92},[82,57369,57370],{"class":84,"line":2585},[82,57371,4787],{"class":92},[82,57373,57374],{"class":84,"line":4350},[82,57375,486],{"emptyLinePlaceholder":485},[82,57377,57378,57381],{"class":84,"line":4355},[82,57379,57380],{"class":2384},"    .slider-footer",[82,57382,1349],{"class":92},[82,57384,57385,57387,57389,57392],{"class":84,"line":4360},[82,57386,57319],{"class":88},[82,57388,1357],{"class":92},[82,57390,57391],{"class":88},"absolute",[82,57393,3909],{"class":92},[82,57395,57396,57399,57401,57403],{"class":84,"line":4365},[82,57397,57398],{"class":88},"      left",[82,57400,1357],{"class":92},[82,57402,2244],{"class":88},[82,57404,3909],{"class":92},[82,57406,57407,57410,57412,57414],{"class":84,"line":4379},[82,57408,57409],{"class":88},"      bottom",[82,57411,1357],{"class":92},[82,57413,2244],{"class":88},[82,57415,3909],{"class":92},[82,57417,57418,57420,57422,57424,57426],{"class":84,"line":4384},[82,57419,57331],{"class":88},[82,57421,1357],{"class":92},[82,57423,3069],{"class":88},[82,57425,3086],{"class":112},[82,57427,3909],{"class":92},[82,57429,57430,57432,57434,57436,57438],{"class":84,"line":5176},[82,57431,57345],{"class":88},[82,57433,1357],{"class":92},[82,57435,3330],{"class":88},[82,57437,3086],{"class":112},[82,57439,3909],{"class":92},[82,57441,57442,57445,57447,57450],{"class":84,"line":5190},[82,57443,57444],{"class":88},"      background-color",[82,57446,1357],{"class":92},[82,57448,57449],{"class":88},"skyblue",[82,57451,3909],{"class":92},[82,57453,57454],{"class":84,"line":5198},[82,57455,4787],{"class":92},[82,57457,57458],{"class":84,"line":5203},[82,57459,486],{"emptyLinePlaceholder":485},[82,57461,57462,57464,57466],{"class":84,"line":5209},[82,57463,57380],{"class":2384},[82,57465,9417],{"class":53863},[82,57467,1349],{"class":92},[82,57469,57470,57472,57474,57476],{"class":84,"line":5215},[82,57471,57319],{"class":88},[82,57473,1357],{"class":92},[82,57475,57391],{"class":88},[82,57477,3909],{"class":92},[82,57479,57480,57483,57485,57487,57489],{"class":84,"line":5220},[82,57481,57482],{"class":88},"      font-size",[82,57484,1357],{"class":92},[82,57486,3650],{"class":88},[82,57488,54054],{"class":112},[82,57490,3909],{"class":92},[82,57492,57493,57495,57497,57499,57501],{"class":84,"line":10539},[82,57494,57398],{"class":88},[82,57496,1357],{"class":92},[82,57498,3451],{"class":88},[82,57500,54054],{"class":112},[82,57502,3909],{"class":92},[82,57504,57505,57508,57510,57512,57514],{"class":84,"line":10563},[82,57506,57507],{"class":88},"      top",[82,57509,1357],{"class":92},[82,57511,3077],{"class":88},[82,57513,54054],{"class":112},[82,57515,3909],{"class":92},[82,57517,57518],{"class":84,"line":10568},[82,57519,4787],{"class":92},[82,57521,57522],{"class":84,"line":10574},[82,57523,486],{"emptyLinePlaceholder":485},[82,57525,57526,57529],{"class":84,"line":10601},[82,57527,57528],{"class":53863},"    ul",[82,57530,1349],{"class":92},[82,57532,57533,57535,57537,57539],{"class":84,"line":10606},[82,57534,57319],{"class":88},[82,57536,1357],{"class":92},[82,57538,57391],{"class":88},[82,57540,3909],{"class":92},[82,57542,57543,57545,57547,57549,57551],{"class":84,"line":10612},[82,57544,57507],{"class":88},[82,57546,1357],{"class":92},[82,57548,3532],{"class":88},[82,57550,54054],{"class":112},[82,57552,3909],{"class":92},[82,57554,57555,57557,57559,57561,57563],{"class":84,"line":10624},[82,57556,57398],{"class":88},[82,57558,1357],{"class":92},[82,57560,3451],{"class":88},[82,57562,54054],{"class":112},[82,57564,3909],{"class":92},[82,57566,57567,57570,57572,57574],{"class":84,"line":10636},[82,57568,57569],{"class":88},"      display",[82,57571,1357],{"class":92},[82,57573,54039],{"class":88},[82,57575,3909],{"class":92},[82,57577,57578,57581,57583,57585],{"class":84,"line":10648},[82,57579,57580],{"class":88},"      justify-content",[82,57582,1357],{"class":92},[82,57584,54230],{"class":88},[82,57586,3909],{"class":92},[82,57588,57589,57591,57593,57595],{"class":84,"line":12307},[82,57590,57319],{"class":88},[82,57592,1357],{"class":92},[82,57594,57391],{"class":88},[82,57596,3909],{"class":92},[82,57598,57599,57601,57603,57605,57607],{"class":84,"line":12332},[82,57600,57331],{"class":88},[82,57602,1357],{"class":92},[82,57604,6587],{"class":88},[82,57606,54054],{"class":112},[82,57608,3909],{"class":92},[82,57610,57611,57613,57615,57617,57619],{"class":84,"line":12355},[82,57612,57345],{"class":88},[82,57614,1357],{"class":92},[82,57616,3451],{"class":88},[82,57618,54054],{"class":112},[82,57620,3909],{"class":92},[82,57622,57623],{"class":84,"line":12379},[82,57624,4787],{"class":92},[82,57626,57627],{"class":84,"line":12384},[82,57628,486],{"emptyLinePlaceholder":485},[82,57630,57631,57633,57636],{"class":84,"line":12389},[82,57632,57528],{"class":53863},[82,57634,57635],{"class":53863}," li",[82,57637,1349],{"class":92},[82,57639,57640,57642,57644,57646,57648],{"class":84,"line":12394},[82,57641,57331],{"class":88},[82,57643,1357],{"class":92},[82,57645,3451],{"class":88},[82,57647,54054],{"class":112},[82,57649,3909],{"class":92},[82,57651,57652,57654,57656,57658,57660],{"class":84,"line":12403},[82,57653,57345],{"class":88},[82,57655,1357],{"class":92},[82,57657,3451],{"class":88},[82,57659,54054],{"class":112},[82,57661,3909],{"class":92},[82,57663,57664,57666,57668,57671,57673,57675,57677,57679,57681,57683,57685,57688],{"class":84,"line":12408},[82,57665,57444],{"class":88},[82,57667,1357],{"class":92},[82,57669,57670],{"class":88},"rgba",[82,57672,93],{"class":92},[82,57674,2244],{"class":88},[82,57676,100],{"class":92},[82,57678,2244],{"class":88},[82,57680,100],{"class":92},[82,57682,2244],{"class":88},[82,57684,100],{"class":92},[82,57686,57687],{"class":88},".4",[82,57689,5318],{"class":92},[82,57691,57692,57695,57697,57699,57701],{"class":84,"line":12414},[82,57693,57694],{"class":88},"      border-radius",[82,57696,1357],{"class":92},[82,57698,440],{"class":88},[82,57700,54054],{"class":112},[82,57702,3909],{"class":92},[82,57704,57705],{"class":84,"line":12435},[82,57706,4787],{"class":92},[82,57708,57709],{"class":84,"line":12441},[82,57710,486],{"emptyLinePlaceholder":485},[82,57712,57713,57716],{"class":84,"line":12455},[82,57714,57715],{"class":2384},"    .activate",[82,57717,1349],{"class":92},[82,57719,57720,57722,57724,57727],{"class":84,"line":12461},[82,57721,57444],{"class":88},[82,57723,1357],{"class":92},[82,57725,57726],{"class":88},"#f7f7f7",[82,57728,3909],{"class":92},[82,57730,57731],{"class":84,"line":12488},[82,57732,4787],{"class":92},[82,57734,57735,57737,57739],{"class":84,"line":12497},[82,57736,54977],{"class":92},[82,57738,2671],{"class":53863},[82,57740,53870],{"class":92},[82,57742,57743,57745,57747],{"class":84,"line":12503},[82,57744,54347],{"class":92},[82,57746,53897],{"class":53863},[82,57748,53870],{"class":92},[82,57750,57751],{"class":84,"line":12511},[82,57752,486],{"emptyLinePlaceholder":485},[82,57754,57755,57757,57759],{"class":84,"line":12516},[82,57756,3659],{"class":92},[82,57758,54362],{"class":53863},[82,57760,53870],{"class":92},[82,57762,57763,57765,57767,57769,57771,57773],{"class":84,"line":19189},[82,57764,54705],{"class":92},[82,57766,54173],{"class":53863},[82,57768,56046],{"class":2384},[82,57770,113],{"class":92},[82,57772,56051],{"class":96},[82,57774,53870],{"class":92},[82,57776,57777,57779,57781,57783,57785,57788],{"class":84,"line":19195},[82,57778,53904],{"class":92},[82,57780,54173],{"class":53863},[82,57782,56046],{"class":2384},[82,57784,113],{"class":92},[82,57786,57787],{"class":96},"\"slider-wrapper\"",[82,57789,53870],{"class":92},[82,57791,57792,57795,57797,57800,57802,57805,57808,57810,57812],{"class":84,"line":19218},[82,57793,57794],{"class":92},"      \u003C",[82,57796,4078],{"class":53863},[82,57798,57799],{"class":2384}," src",[82,57801,113],{"class":92},[82,57803,57804],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[82,57806,57807],{"class":2384}," alt",[82,57809,113],{"class":92},[82,57811,1793],{"class":96},[82,57813,53870],{"class":92},[82,57815,57816,57818,57820],{"class":84,"line":19224},[82,57817,54338],{"class":92},[82,57819,54173],{"class":53863},[82,57821,53870],{"class":92},[82,57823,57824,57826,57828,57830,57832,57835],{"class":84,"line":19247},[82,57825,53904],{"class":92},[82,57827,54173],{"class":53863},[82,57829,56046],{"class":2384},[82,57831,113],{"class":92},[82,57833,57834],{"class":96},"\"slider-footer\"",[82,57836,53870],{"class":92},[82,57838,57839,57841,57843,57846,57848],{"class":84,"line":19261},[82,57840,57794],{"class":92},[82,57842,19],{"class":53863},[82,57844,57845],{"class":92},">对人类来说会不会太超前了?\u003C\u002F",[82,57847,19],{"class":53863},[82,57849,53870],{"class":92},[82,57851,57852,57854,57856],{"class":84,"line":19281},[82,57853,57794],{"class":92},[82,57855,3755],{"class":53863},[82,57857,53870],{"class":92},[82,57859,57860,57863,57865,57867,57869,57872,57875,57877],{"class":84,"line":19287},[82,57861,57862],{"class":92},"        \u003C",[82,57864,29],{"class":53863},[82,57866,56046],{"class":2384},[82,57868,113],{"class":92},[82,57870,57871],{"class":96},"\"activate\"",[82,57873,57874],{"class":92},">\u003C\u002F",[82,57876,29],{"class":53863},[82,57878,53870],{"class":92},[82,57880,57881,57883,57885,57887,57889],{"class":84,"line":19298},[82,57882,57862],{"class":92},[82,57884,29],{"class":53863},[82,57886,57874],{"class":92},[82,57888,29],{"class":53863},[82,57890,53870],{"class":92},[82,57892,57893,57895,57897,57899,57901],{"class":84,"line":19321},[82,57894,57862],{"class":92},[82,57896,29],{"class":53863},[82,57898,57874],{"class":92},[82,57900,29],{"class":53863},[82,57902,53870],{"class":92},[82,57904,57905,57907,57909,57911,57913],{"class":84,"line":19343},[82,57906,57862],{"class":92},[82,57908,29],{"class":53863},[82,57910,57874],{"class":92},[82,57912,29],{"class":53863},[82,57914,53870],{"class":92},[82,57916,57917,57919,57921,57923,57925],{"class":84,"line":19348},[82,57918,57862],{"class":92},[82,57920,29],{"class":53863},[82,57922,57874],{"class":92},[82,57924,29],{"class":53863},[82,57926,53870],{"class":92},[82,57928,57929,57931,57933,57935,57937],{"class":84,"line":19354},[82,57930,57862],{"class":92},[82,57932,29],{"class":53863},[82,57934,57874],{"class":92},[82,57936,29],{"class":53863},[82,57938,53870],{"class":92},[82,57940,57941,57943,57945,57947,57949],{"class":84,"line":19368},[82,57942,57862],{"class":92},[82,57944,29],{"class":53863},[82,57946,57874],{"class":92},[82,57948,29],{"class":53863},[82,57950,53870],{"class":92},[82,57952,57953,57955,57957,57959,57961],{"class":84,"line":19381},[82,57954,57862],{"class":92},[82,57956,29],{"class":53863},[82,57958,57874],{"class":92},[82,57960,29],{"class":53863},[82,57962,53870],{"class":92},[82,57964,57965,57968,57970],{"class":84,"line":19386},[82,57966,57967],{"class":92},"      \u003C\u002F",[82,57969,3755],{"class":53863},[82,57971,53870],{"class":92},[82,57973,57974,57976,57978],{"class":84,"line":19400},[82,57975,54338],{"class":92},[82,57977,54173],{"class":53863},[82,57979,53870],{"class":92},[82,57981,57982,57984,57986],{"class":84,"line":19405},[82,57983,54977],{"class":92},[82,57985,54173],{"class":53863},[82,57987,53870],{"class":92},[82,57989,57990,57992,57994],{"class":84,"line":19411},[82,57991,54705],{"class":92},[82,57993,54375],{"class":53863},[82,57995,53870],{"class":92},[82,57997,57998,58000,58003,58005],{"class":84,"line":19416},[82,57999,13811],{"class":112},[82,58001,58002],{"class":88}," arrImage",[82,58004,259],{"class":112},[82,58006,1463],{"class":92},[82,58008,58009,58012,58015,58018,58021,58024,58027],{"class":84,"line":19430},[82,58010,58011],{"class":92},"      { url: ",[82,58013,58014],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[82,58016,58017],{"class":92},", title: ",[82,58019,58020],{"class":96},"'对人类来说会不会太超前了?'",[82,58022,58023],{"class":92},", color: ",[82,58025,58026],{"class":96},"'rgba(100,67,68)'",[82,58028,58029],{"class":92}," },\n",[82,58031,58032,58034,58037,58039,58042,58044,58047],{"class":84,"line":19435},[82,58033,58011],{"class":92},[82,58035,58036],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[82,58038,58017],{"class":92},[82,58040,58041],{"class":96},"'开启剑与雪的黑暗传说!'",[82,58043,58023],{"class":92},[82,58045,58046],{"class":96},"'rgba(43,35,26)'",[82,58048,58029],{"class":92},[82,58050,58051,58053,58056,58058,58061,58063,58066],{"class":84,"line":19440},[82,58052,58011],{"class":92},[82,58054,58055],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[82,58057,58017],{"class":92},[82,58059,58060],{"class":96},"'真正的jo厨出现了!'",[82,58062,58023],{"class":92},[82,58064,58065],{"class":96},"'rgba(36,31,33)'",[82,58067,58029],{"class":92},[82,58069,58070,58072,58075,58077,58080,58082,58085],{"class":84,"line":19454},[82,58071,58011],{"class":92},[82,58073,58074],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[82,58076,58017],{"class":92},[82,58078,58079],{"class":96},"'李玉刚:让世界通过b站看到东方大国文化'",[82,58081,58023],{"class":92},[82,58083,58084],{"class":96},"'rgba(139,98,66)'",[82,58086,58029],{"class":92},[82,58088,58089,58091,58094,58096,58099,58101,58104],{"class":84,"line":19466},[82,58090,58011],{"class":92},[82,58092,58093],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[82,58095,58017],{"class":92},[82,58097,58098],{"class":96},"'快来分享你的寒假日常吧'",[82,58100,58023],{"class":92},[82,58102,58103],{"class":96},"'rgba(67,90,92)'",[82,58105,58029],{"class":92},[82,58107,58108,58110,58113,58115,58118,58120,58123],{"class":84,"line":19471},[82,58109,58011],{"class":92},[82,58111,58112],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[82,58114,58017],{"class":92},[82,58116,58117],{"class":96},"'哔哩哔哩小年YEAR'",[82,58119,58023],{"class":92},[82,58121,58122],{"class":96},"'rgba(166,131,143)'",[82,58124,58029],{"class":92},[82,58126,58127,58129,58132,58134,58137,58139,58142],{"class":84,"line":19484},[82,58128,58011],{"class":92},[82,58130,58131],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[82,58133,58017],{"class":92},[82,58135,58136],{"class":96},"'一站式解决你的电脑配置问题'",[82,58138,58023],{"class":92},[82,58140,58141],{"class":96},"'rgba(53,29,25)'",[82,58143,58029],{"class":92},[82,58145,58146,58148,58151,58153,58156,58158,58161],{"class":84,"line":19489},[82,58147,58011],{"class":92},[82,58149,58150],{"class":96},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[82,58152,58017],{"class":92},[82,58154,58155],{"class":96},"'谁不想和小猫咪贴贴呢?'",[82,58157,58023],{"class":92},[82,58159,58160],{"class":96},"'rgba(99,72,114)'",[82,58162,58163],{"class":92}," }\n",[82,58165,58166],{"class":84,"line":19494},[82,58167,55669],{"class":92},[82,58169,58170,58172,58175,58177,58179,58181,58183,58186],{"class":84,"line":19499},[82,58171,13811],{"class":112},[82,58173,58174],{"class":88}," img",[82,58176,259],{"class":112},[82,58178,56956],{"class":92},[82,58180,56959],{"class":2384},[82,58182,93],{"class":92},[82,58184,58185],{"class":96},"'.slider-wrapper img'",[82,58187,119],{"class":92},[82,58189,58190,58192,58194,58196,58198,58200,58202,58205],{"class":84,"line":19512},[82,58191,13811],{"class":112},[82,58193,9417],{"class":88},[82,58195,259],{"class":112},[82,58197,56956],{"class":92},[82,58199,56959],{"class":2384},[82,58201,93],{"class":92},[82,58203,58204],{"class":96},"'.slider-footer p'",[82,58206,119],{"class":92},[82,58208,58209,58211,58214,58216,58218,58220,58222,58225],{"class":84,"line":19517},[82,58210,13811],{"class":112},[82,58212,58213],{"class":88}," color",[82,58215,259],{"class":112},[82,58217,56956],{"class":92},[82,58219,56959],{"class":2384},[82,58221,93],{"class":92},[82,58223,58224],{"class":96},"'.slider-footer'",[82,58226,119],{"class":92},[82,58228,58229,58231,58234,58236,58238,58241,58243,58246],{"class":84,"line":35202},[82,58230,13811],{"class":112},[82,58232,58233],{"class":88}," lis",[82,58235,259],{"class":112},[82,58237,56956],{"class":92},[82,58239,58240],{"class":2384},"querySelectorAll",[82,58242,93],{"class":92},[82,58244,58245],{"class":96},"'.slider-footer ul li'",[82,58247,119],{"class":92},[82,58249,58250,58252,58254,58256],{"class":84,"line":35208},[82,58251,54780],{"class":112},[82,58253,12029],{"class":92},[82,58255,113],{"class":112},[82,58257,2252],{"class":88},[82,58259,58260,58262,58265,58267,58269,58271,58273],{"class":84,"line":35214},[82,58261,54780],{"class":112},[82,58263,58264],{"class":92}," timer ",[82,58266,113],{"class":112},[82,58268,57004],{"class":2384},[82,58270,93],{"class":92},[82,58272,57009],{"class":112},[82,58274,57012],{"class":92},[82,58276,58277,58280,58282],{"class":84,"line":35220},[82,58278,58279],{"class":92},"      img.src ",[82,58281,113],{"class":112},[82,58283,58284],{"class":92}," arrImage[i].url\n",[82,58286,58287,58290,58292],{"class":84,"line":35226},[82,58288,58289],{"class":92},"      p.innerHTML ",[82,58291,113],{"class":112},[82,58293,58294],{"class":92}," arrImage[i].title\n",[82,58296,58297,58300,58302],{"class":84,"line":35237},[82,58298,58299],{"class":92},"      color.style.backgroundColor ",[82,58301,113],{"class":112},[82,58303,58304],{"class":92}," arrImage[i].color\n",[82,58306,58307],{"class":84,"line":35243},[82,58308,58309],{"class":2828},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[82,58311,58312],{"class":84,"line":35263},[82,58313,58314],{"class":2828},"      \u002F\u002F li.classList.add('activate')\n",[82,58316,58317],{"class":84,"line":35269},[82,58318,58319],{"class":2828},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[82,58321,58322],{"class":84,"line":35280},[82,58323,58324],{"class":2828},"      \u002F\u002F lis[i].classList.remove('activate')\n",[82,58326,58327,58330,58332,58334,58337,58340,58343,58345,58348],{"class":84,"line":35286},[82,58328,58329],{"class":92},"      document.",[82,58331,56959],{"class":2384},[82,58333,93],{"class":92},[82,58335,58336],{"class":96},"'.activate'",[82,58338,58339],{"class":92},")?.classList.",[82,58341,58342],{"class":2384},"toggle",[82,58344,93],{"class":92},[82,58346,58347],{"class":96},"'activate'",[82,58349,119],{"class":92},[82,58351,58352,58355,58357,58359,58361],{"class":84,"line":35292},[82,58353,58354],{"class":92},"      lis[i].classList.",[82,58356,7926],{"class":2384},[82,58358,93],{"class":92},[82,58360,58347],{"class":96},[82,58362,119],{"class":92},[82,58364,58365],{"class":84,"line":35298},[82,58366,486],{"emptyLinePlaceholder":485},[82,58368,58369,58372,58374,58376,58378,58380,58382,58384,58387],{"class":84,"line":35304},[82,58370,58371],{"class":92},"      i ",[82,58373,113],{"class":112},[82,58375,57043],{"class":92},[82,58377,2249],{"class":112},[82,58379,27703],{"class":88},[82,58381,725],{"class":92},[82,58383,3086],{"class":112},[82,58385,58386],{"class":92}," arrImage.",[82,58388,58389],{"class":88},"length\n",[82,58391,58392],{"class":84,"line":35310},[82,58393,486],{"emptyLinePlaceholder":485},[82,58395,58396,58398,58400],{"class":84,"line":35316},[82,58397,57095],{"class":92},[82,58399,9002],{"class":88},[82,58401,119],{"class":92},[82,58403,58404,58406,58408],{"class":84,"line":35322},[82,58405,54977],{"class":92},[82,58407,54375],{"class":53863},[82,58409,53870],{"class":92},[82,58411,58412,58414,58416],{"class":84,"line":35342},[82,58413,54347],{"class":92},[82,58415,54362],{"class":53863},[82,58417,53870],{"class":92},[82,58419,58420],{"class":84,"line":35348},[82,58421,486],{"emptyLinePlaceholder":485},[82,58423,58424,58426,58428],{"class":84,"line":35364},[82,58425,54347],{"class":92},[82,58427,53198],{"class":53863},[82,58429,53870],{"class":92},[19,58431,58432],{},[4078,58433],{"alt":78,"src":58434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58436,58437],{},"?.就是短路保护,确保输出正常进行",[19,58439,58440],{},"不要忘记取余%,有时候可以用",[19,58442,58443],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,58445,58446],{"start":157},[29,58447,58448],{},"法2",[73,58450,58452],{"className":53196,"code":58451,"language":53198,"meta":78,"style":78},"\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",[32,58453,58454,58464,58478,58482,58490,58504,58524,58536,58544,58550,58560,58570,58574,58578,58584,58594,58598,58602,58608,58618,58630,58642,58656,58660,58664,58670,58680,58690,58700,58712,58724,58734,58738,58742,58750,58760,58772,58784,58796,58800,58804,58810,58820,58832,58844,58854,58864,58874,58886,58898,58902,58906,58914,58926,58938,58964,58976,58980,58984,58990,59000,59004,59012,59020,59024,59032,59046,59060,59080,59088,59102,59114,59122,59140,59152,59164,59176,59188,59200,59212,59224,59232,59240,59248,59256,59267,59283,59299,59315,59331,59347,59363,59379,59395,59399,59404,59422,59440,59450,59455,59460,59471,59477,59492,59501,59505,59510,59519,59524,59533,59538,59543,59548,59571,59601,59605,59613,59617,59625,59633,59637],{"__ignoreMap":78},[82,58455,58456,58458,58460,58462],{"class":84,"line":85},[82,58457,53860],{"class":92},[82,58459,53864],{"class":53863},[82,58461,53867],{"class":2384},[82,58463,53870],{"class":92},[82,58465,58466,58468,58470,58472,58474,58476],{"class":84,"line":157},[82,58467,3659],{"class":92},[82,58469,53198],{"class":53863},[82,58471,53879],{"class":2384},[82,58473,113],{"class":92},[82,58475,53884],{"class":96},[82,58477,53870],{"class":92},[82,58479,58480],{"class":84,"line":404},[82,58481,486],{"emptyLinePlaceholder":485},[82,58483,58484,58486,58488],{"class":84,"line":413},[82,58485,3659],{"class":92},[82,58487,53897],{"class":53863},[82,58489,53870],{"class":92},[82,58491,58492,58494,58496,58498,58500,58502],{"class":84,"line":508},[82,58493,54705],{"class":92},[82,58495,53907],{"class":53863},[82,58497,53910],{"class":2384},[82,58499,113],{"class":92},[82,58501,53915],{"class":96},[82,58503,53870],{"class":92},[82,58505,58506,58508,58510,58512,58514,58516,58518,58520,58522],{"class":84,"line":513},[82,58507,54705],{"class":92},[82,58509,53907],{"class":53863},[82,58511,17506],{"class":2384},[82,58513,113],{"class":92},[82,58515,53954],{"class":96},[82,58517,53934],{"class":2384},[82,58519,113],{"class":92},[82,58521,53961],{"class":96},[82,58523,53870],{"class":92},[82,58525,58526,58528,58530,58532,58534],{"class":84,"line":1388},[82,58527,54705],{"class":92},[82,58529,53970],{"class":53863},[82,58531,53973],{"class":92},[82,58533,53970],{"class":53863},[82,58535,53870],{"class":92},[82,58537,58538,58540,58542],{"class":84,"line":1394},[82,58539,54705],{"class":92},[82,58541,2671],{"class":53863},[82,58543,53870],{"class":92},[82,58545,58546,58548],{"class":84,"line":1399},[82,58547,8995],{"class":53863},[82,58549,1349],{"class":92},[82,58551,58552,58554,58556,58558],{"class":84,"line":1430},[82,58553,57255],{"class":88},[82,58555,1357],{"class":92},[82,58557,2244],{"class":88},[82,58559,3909],{"class":92},[82,58561,58562,58564,58566,58568],{"class":84,"line":1818},[82,58563,57266],{"class":88},[82,58565,1357],{"class":92},[82,58567,2244],{"class":88},[82,58569,3909],{"class":92},[82,58571,58572],{"class":84,"line":2082},[82,58573,4787],{"class":92},[82,58575,58576],{"class":84,"line":2233},[82,58577,486],{"emptyLinePlaceholder":485},[82,58579,58580,58582],{"class":84,"line":2255},[82,58581,57285],{"class":53863},[82,58583,1349],{"class":92},[82,58585,58586,58588,58590,58592],{"class":84,"line":2260},[82,58587,57292],{"class":88},[82,58589,1357],{"class":92},[82,58591,57297],{"class":88},[82,58593,3909],{"class":92},[82,58595,58596],{"class":84,"line":2298},[82,58597,4787],{"class":92},[82,58599,58600],{"class":84,"line":2303},[82,58601,486],{"emptyLinePlaceholder":485},[82,58603,58604,58606],{"class":84,"line":2321},[82,58605,57312],{"class":2384},[82,58607,1349],{"class":92},[82,58609,58610,58612,58614,58616],{"class":84,"line":2533},[82,58611,57319],{"class":88},[82,58613,1357],{"class":92},[82,58615,57324],{"class":88},[82,58617,3909],{"class":92},[82,58619,58620,58622,58624,58626,58628],{"class":84,"line":2538},[82,58621,57331],{"class":88},[82,58623,1357],{"class":92},[82,58625,57336],{"class":88},[82,58627,54054],{"class":112},[82,58629,3909],{"class":92},[82,58631,58632,58634,58636,58638,58640],{"class":84,"line":2548},[82,58633,57345],{"class":88},[82,58635,1357],{"class":92},[82,58637,4154],{"class":88},[82,58639,54054],{"class":112},[82,58641,3909],{"class":92},[82,58643,58644,58646,58648,58650,58652,58654],{"class":84,"line":2579},[82,58645,57266],{"class":88},[82,58647,1357],{"class":92},[82,58649,3069],{"class":88},[82,58651,54054],{"class":112},[82,58653,54118],{"class":88},[82,58655,3909],{"class":92},[82,58657,58658],{"class":84,"line":2585},[82,58659,4787],{"class":92},[82,58661,58662],{"class":84,"line":4350},[82,58663,486],{"emptyLinePlaceholder":485},[82,58665,58666,58668],{"class":84,"line":4355},[82,58667,57380],{"class":2384},[82,58669,1349],{"class":92},[82,58671,58672,58674,58676,58678],{"class":84,"line":4360},[82,58673,57319],{"class":88},[82,58675,1357],{"class":92},[82,58677,57391],{"class":88},[82,58679,3909],{"class":92},[82,58681,58682,58684,58686,58688],{"class":84,"line":4365},[82,58683,57398],{"class":88},[82,58685,1357],{"class":92},[82,58687,2244],{"class":88},[82,58689,3909],{"class":92},[82,58691,58692,58694,58696,58698],{"class":84,"line":4379},[82,58693,57409],{"class":88},[82,58695,1357],{"class":92},[82,58697,2244],{"class":88},[82,58699,3909],{"class":92},[82,58701,58702,58704,58706,58708,58710],{"class":84,"line":4384},[82,58703,57331],{"class":88},[82,58705,1357],{"class":92},[82,58707,3069],{"class":88},[82,58709,3086],{"class":112},[82,58711,3909],{"class":92},[82,58713,58714,58716,58718,58720,58722],{"class":84,"line":5176},[82,58715,57345],{"class":88},[82,58717,1357],{"class":92},[82,58719,3330],{"class":88},[82,58721,3086],{"class":112},[82,58723,3909],{"class":92},[82,58725,58726,58728,58730,58732],{"class":84,"line":5190},[82,58727,57444],{"class":88},[82,58729,1357],{"class":92},[82,58731,57449],{"class":88},[82,58733,3909],{"class":92},[82,58735,58736],{"class":84,"line":5198},[82,58737,4787],{"class":92},[82,58739,58740],{"class":84,"line":5203},[82,58741,486],{"emptyLinePlaceholder":485},[82,58743,58744,58746,58748],{"class":84,"line":5209},[82,58745,57380],{"class":2384},[82,58747,9417],{"class":53863},[82,58749,1349],{"class":92},[82,58751,58752,58754,58756,58758],{"class":84,"line":5215},[82,58753,57319],{"class":88},[82,58755,1357],{"class":92},[82,58757,57391],{"class":88},[82,58759,3909],{"class":92},[82,58761,58762,58764,58766,58768,58770],{"class":84,"line":5220},[82,58763,57482],{"class":88},[82,58765,1357],{"class":92},[82,58767,3650],{"class":88},[82,58769,54054],{"class":112},[82,58771,3909],{"class":92},[82,58773,58774,58776,58778,58780,58782],{"class":84,"line":10539},[82,58775,57398],{"class":88},[82,58777,1357],{"class":92},[82,58779,3451],{"class":88},[82,58781,54054],{"class":112},[82,58783,3909],{"class":92},[82,58785,58786,58788,58790,58792,58794],{"class":84,"line":10563},[82,58787,57507],{"class":88},[82,58789,1357],{"class":92},[82,58791,3077],{"class":88},[82,58793,54054],{"class":112},[82,58795,3909],{"class":92},[82,58797,58798],{"class":84,"line":10568},[82,58799,4787],{"class":92},[82,58801,58802],{"class":84,"line":10574},[82,58803,486],{"emptyLinePlaceholder":485},[82,58805,58806,58808],{"class":84,"line":10601},[82,58807,57528],{"class":53863},[82,58809,1349],{"class":92},[82,58811,58812,58814,58816,58818],{"class":84,"line":10606},[82,58813,57319],{"class":88},[82,58815,1357],{"class":92},[82,58817,57391],{"class":88},[82,58819,3909],{"class":92},[82,58821,58822,58824,58826,58828,58830],{"class":84,"line":10612},[82,58823,57507],{"class":88},[82,58825,1357],{"class":92},[82,58827,3532],{"class":88},[82,58829,54054],{"class":112},[82,58831,3909],{"class":92},[82,58833,58834,58836,58838,58840,58842],{"class":84,"line":10624},[82,58835,57398],{"class":88},[82,58837,1357],{"class":92},[82,58839,3451],{"class":88},[82,58841,54054],{"class":112},[82,58843,3909],{"class":92},[82,58845,58846,58848,58850,58852],{"class":84,"line":10636},[82,58847,57569],{"class":88},[82,58849,1357],{"class":92},[82,58851,54039],{"class":88},[82,58853,3909],{"class":92},[82,58855,58856,58858,58860,58862],{"class":84,"line":10648},[82,58857,57580],{"class":88},[82,58859,1357],{"class":92},[82,58861,54230],{"class":88},[82,58863,3909],{"class":92},[82,58865,58866,58868,58870,58872],{"class":84,"line":12307},[82,58867,57319],{"class":88},[82,58869,1357],{"class":92},[82,58871,57391],{"class":88},[82,58873,3909],{"class":92},[82,58875,58876,58878,58880,58882,58884],{"class":84,"line":12332},[82,58877,57331],{"class":88},[82,58879,1357],{"class":92},[82,58881,6587],{"class":88},[82,58883,54054],{"class":112},[82,58885,3909],{"class":92},[82,58887,58888,58890,58892,58894,58896],{"class":84,"line":12355},[82,58889,57345],{"class":88},[82,58891,1357],{"class":92},[82,58893,3451],{"class":88},[82,58895,54054],{"class":112},[82,58897,3909],{"class":92},[82,58899,58900],{"class":84,"line":12379},[82,58901,4787],{"class":92},[82,58903,58904],{"class":84,"line":12384},[82,58905,486],{"emptyLinePlaceholder":485},[82,58907,58908,58910,58912],{"class":84,"line":12389},[82,58909,57528],{"class":53863},[82,58911,57635],{"class":53863},[82,58913,1349],{"class":92},[82,58915,58916,58918,58920,58922,58924],{"class":84,"line":12394},[82,58917,57331],{"class":88},[82,58919,1357],{"class":92},[82,58921,3451],{"class":88},[82,58923,54054],{"class":112},[82,58925,3909],{"class":92},[82,58927,58928,58930,58932,58934,58936],{"class":84,"line":12403},[82,58929,57345],{"class":88},[82,58931,1357],{"class":92},[82,58933,3451],{"class":88},[82,58935,54054],{"class":112},[82,58937,3909],{"class":92},[82,58939,58940,58942,58944,58946,58948,58950,58952,58954,58956,58958,58960,58962],{"class":84,"line":12408},[82,58941,57444],{"class":88},[82,58943,1357],{"class":92},[82,58945,57670],{"class":88},[82,58947,93],{"class":92},[82,58949,2244],{"class":88},[82,58951,100],{"class":92},[82,58953,2244],{"class":88},[82,58955,100],{"class":92},[82,58957,2244],{"class":88},[82,58959,100],{"class":92},[82,58961,57687],{"class":88},[82,58963,5318],{"class":92},[82,58965,58966,58968,58970,58972,58974],{"class":84,"line":12414},[82,58967,57694],{"class":88},[82,58969,1357],{"class":92},[82,58971,440],{"class":88},[82,58973,54054],{"class":112},[82,58975,3909],{"class":92},[82,58977,58978],{"class":84,"line":12435},[82,58979,4787],{"class":92},[82,58981,58982],{"class":84,"line":12441},[82,58983,486],{"emptyLinePlaceholder":485},[82,58985,58986,58988],{"class":84,"line":12455},[82,58987,57715],{"class":2384},[82,58989,1349],{"class":92},[82,58991,58992,58994,58996,58998],{"class":84,"line":12461},[82,58993,57444],{"class":88},[82,58995,1357],{"class":92},[82,58997,57726],{"class":88},[82,58999,3909],{"class":92},[82,59001,59002],{"class":84,"line":12488},[82,59003,4787],{"class":92},[82,59005,59006,59008,59010],{"class":84,"line":12497},[82,59007,54977],{"class":92},[82,59009,2671],{"class":53863},[82,59011,53870],{"class":92},[82,59013,59014,59016,59018],{"class":84,"line":12503},[82,59015,54347],{"class":92},[82,59017,53897],{"class":53863},[82,59019,53870],{"class":92},[82,59021,59022],{"class":84,"line":12511},[82,59023,486],{"emptyLinePlaceholder":485},[82,59025,59026,59028,59030],{"class":84,"line":12516},[82,59027,3659],{"class":92},[82,59029,54362],{"class":53863},[82,59031,53870],{"class":92},[82,59033,59034,59036,59038,59040,59042,59044],{"class":84,"line":19189},[82,59035,54705],{"class":92},[82,59037,54173],{"class":53863},[82,59039,56046],{"class":2384},[82,59041,113],{"class":92},[82,59043,56051],{"class":96},[82,59045,53870],{"class":92},[82,59047,59048,59050,59052,59054,59056,59058],{"class":84,"line":19195},[82,59049,53904],{"class":92},[82,59051,54173],{"class":53863},[82,59053,56046],{"class":2384},[82,59055,113],{"class":92},[82,59057,57787],{"class":96},[82,59059,53870],{"class":92},[82,59061,59062,59064,59066,59068,59070,59072,59074,59076,59078],{"class":84,"line":19218},[82,59063,57794],{"class":92},[82,59065,4078],{"class":53863},[82,59067,57799],{"class":2384},[82,59069,113],{"class":92},[82,59071,57804],{"class":96},[82,59073,57807],{"class":2384},[82,59075,113],{"class":92},[82,59077,1793],{"class":96},[82,59079,53870],{"class":92},[82,59081,59082,59084,59086],{"class":84,"line":19224},[82,59083,54338],{"class":92},[82,59085,54173],{"class":53863},[82,59087,53870],{"class":92},[82,59089,59090,59092,59094,59096,59098,59100],{"class":84,"line":19247},[82,59091,53904],{"class":92},[82,59093,54173],{"class":53863},[82,59095,56046],{"class":2384},[82,59097,113],{"class":92},[82,59099,57834],{"class":96},[82,59101,53870],{"class":92},[82,59103,59104,59106,59108,59110,59112],{"class":84,"line":19261},[82,59105,57794],{"class":92},[82,59107,19],{"class":53863},[82,59109,57845],{"class":92},[82,59111,19],{"class":53863},[82,59113,53870],{"class":92},[82,59115,59116,59118,59120],{"class":84,"line":19281},[82,59117,57794],{"class":92},[82,59119,3755],{"class":53863},[82,59121,53870],{"class":92},[82,59123,59124,59126,59128,59130,59132,59134,59136,59138],{"class":84,"line":19287},[82,59125,57862],{"class":92},[82,59127,29],{"class":53863},[82,59129,56046],{"class":2384},[82,59131,113],{"class":92},[82,59133,57871],{"class":96},[82,59135,57874],{"class":92},[82,59137,29],{"class":53863},[82,59139,53870],{"class":92},[82,59141,59142,59144,59146,59148,59150],{"class":84,"line":19298},[82,59143,57862],{"class":92},[82,59145,29],{"class":53863},[82,59147,57874],{"class":92},[82,59149,29],{"class":53863},[82,59151,53870],{"class":92},[82,59153,59154,59156,59158,59160,59162],{"class":84,"line":19321},[82,59155,57862],{"class":92},[82,59157,29],{"class":53863},[82,59159,57874],{"class":92},[82,59161,29],{"class":53863},[82,59163,53870],{"class":92},[82,59165,59166,59168,59170,59172,59174],{"class":84,"line":19343},[82,59167,57862],{"class":92},[82,59169,29],{"class":53863},[82,59171,57874],{"class":92},[82,59173,29],{"class":53863},[82,59175,53870],{"class":92},[82,59177,59178,59180,59182,59184,59186],{"class":84,"line":19348},[82,59179,57862],{"class":92},[82,59181,29],{"class":53863},[82,59183,57874],{"class":92},[82,59185,29],{"class":53863},[82,59187,53870],{"class":92},[82,59189,59190,59192,59194,59196,59198],{"class":84,"line":19354},[82,59191,57862],{"class":92},[82,59193,29],{"class":53863},[82,59195,57874],{"class":92},[82,59197,29],{"class":53863},[82,59199,53870],{"class":92},[82,59201,59202,59204,59206,59208,59210],{"class":84,"line":19368},[82,59203,57862],{"class":92},[82,59205,29],{"class":53863},[82,59207,57874],{"class":92},[82,59209,29],{"class":53863},[82,59211,53870],{"class":92},[82,59213,59214,59216,59218,59220,59222],{"class":84,"line":19381},[82,59215,57862],{"class":92},[82,59217,29],{"class":53863},[82,59219,57874],{"class":92},[82,59221,29],{"class":53863},[82,59223,53870],{"class":92},[82,59225,59226,59228,59230],{"class":84,"line":19386},[82,59227,57967],{"class":92},[82,59229,3755],{"class":53863},[82,59231,53870],{"class":92},[82,59233,59234,59236,59238],{"class":84,"line":19400},[82,59235,54338],{"class":92},[82,59237,54173],{"class":53863},[82,59239,53870],{"class":92},[82,59241,59242,59244,59246],{"class":84,"line":19405},[82,59243,54977],{"class":92},[82,59245,54173],{"class":53863},[82,59247,53870],{"class":92},[82,59249,59250,59252,59254],{"class":84,"line":19411},[82,59251,54705],{"class":92},[82,59253,54375],{"class":53863},[82,59255,53870],{"class":92},[82,59257,59258,59260,59263,59265],{"class":84,"line":19416},[82,59259,13811],{"class":112},[82,59261,59262],{"class":88}," sliderData",[82,59264,259],{"class":112},[82,59266,1463],{"class":92},[82,59268,59269,59271,59273,59275,59277,59279,59281],{"class":84,"line":19430},[82,59270,58011],{"class":92},[82,59272,58014],{"class":96},[82,59274,58017],{"class":92},[82,59276,58020],{"class":96},[82,59278,58023],{"class":92},[82,59280,58026],{"class":96},[82,59282,58029],{"class":92},[82,59284,59285,59287,59289,59291,59293,59295,59297],{"class":84,"line":19435},[82,59286,58011],{"class":92},[82,59288,58036],{"class":96},[82,59290,58017],{"class":92},[82,59292,58041],{"class":96},[82,59294,58023],{"class":92},[82,59296,58046],{"class":96},[82,59298,58029],{"class":92},[82,59300,59301,59303,59305,59307,59309,59311,59313],{"class":84,"line":19440},[82,59302,58011],{"class":92},[82,59304,58055],{"class":96},[82,59306,58017],{"class":92},[82,59308,58060],{"class":96},[82,59310,58023],{"class":92},[82,59312,58065],{"class":96},[82,59314,58029],{"class":92},[82,59316,59317,59319,59321,59323,59325,59327,59329],{"class":84,"line":19454},[82,59318,58011],{"class":92},[82,59320,58074],{"class":96},[82,59322,58017],{"class":92},[82,59324,58079],{"class":96},[82,59326,58023],{"class":92},[82,59328,58084],{"class":96},[82,59330,58029],{"class":92},[82,59332,59333,59335,59337,59339,59341,59343,59345],{"class":84,"line":19466},[82,59334,58011],{"class":92},[82,59336,58093],{"class":96},[82,59338,58017],{"class":92},[82,59340,58098],{"class":96},[82,59342,58023],{"class":92},[82,59344,58103],{"class":96},[82,59346,58029],{"class":92},[82,59348,59349,59351,59353,59355,59357,59359,59361],{"class":84,"line":19471},[82,59350,58011],{"class":92},[82,59352,58112],{"class":96},[82,59354,58017],{"class":92},[82,59356,58117],{"class":96},[82,59358,58023],{"class":92},[82,59360,58122],{"class":96},[82,59362,58029],{"class":92},[82,59364,59365,59367,59369,59371,59373,59375,59377],{"class":84,"line":19484},[82,59366,58011],{"class":92},[82,59368,58131],{"class":96},[82,59370,58017],{"class":92},[82,59372,58136],{"class":96},[82,59374,58023],{"class":92},[82,59376,58141],{"class":96},[82,59378,58029],{"class":92},[82,59380,59381,59383,59385,59387,59389,59391,59393],{"class":84,"line":19489},[82,59382,58011],{"class":92},[82,59384,58150],{"class":96},[82,59386,58017],{"class":92},[82,59388,58155],{"class":96},[82,59390,58023],{"class":92},[82,59392,58160],{"class":96},[82,59394,58163],{"class":92},[82,59396,59397],{"class":84,"line":19494},[82,59398,55669],{"class":92},[82,59400,59401],{"class":84,"line":19499},[82,59402,59403],{"class":2828},"    \u002F\u002F 1.获取元素\n",[82,59405,59406,59408,59410,59412,59414,59416,59418,59420],{"class":84,"line":19512},[82,59407,13811],{"class":112},[82,59409,58174],{"class":88},[82,59411,259],{"class":112},[82,59413,56956],{"class":92},[82,59415,56959],{"class":2384},[82,59417,93],{"class":92},[82,59419,58185],{"class":96},[82,59421,119],{"class":92},[82,59423,59424,59426,59428,59430,59432,59434,59436,59438],{"class":84,"line":19517},[82,59425,13811],{"class":112},[82,59427,9417],{"class":88},[82,59429,259],{"class":112},[82,59431,56956],{"class":92},[82,59433,56959],{"class":2384},[82,59435,93],{"class":92},[82,59437,58204],{"class":96},[82,59439,119],{"class":92},[82,59441,59442,59444,59446,59448],{"class":84,"line":35202},[82,59443,54780],{"class":112},[82,59445,12029],{"class":92},[82,59447,113],{"class":112},[82,59449,49897],{"class":88},[82,59451,59452],{"class":84,"line":35208},[82,59453,59454],{"class":2828},"    \u002F\u002F 2.开启定时器\n",[82,59456,59457],{"class":84,"line":35214},[82,59458,59459],{"class":2828},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[82,59461,59462,59465,59467,59469],{"class":84,"line":35220},[82,59463,59464],{"class":2384},"    setInterval",[82,59466,93],{"class":92},[82,59468,57009],{"class":112},[82,59470,57012],{"class":92},[82,59472,59473,59475],{"class":84,"line":35226},[82,59474,57017],{"class":92},[82,59476,5301],{"class":112},[82,59478,59479,59481,59483,59485,59488,59490],{"class":84,"line":35237},[82,59480,57040],{"class":112},[82,59482,57043],{"class":92},[82,59484,4313],{"class":112},[82,59486,59487],{"class":92}," sliderData.",[82,59489,54529],{"class":88},[82,59491,15031],{"class":92},[82,59493,59494,59497,59499],{"class":84,"line":35243},[82,59495,59496],{"class":92},"        i ",[82,59498,113],{"class":112},[82,59500,49897],{"class":88},[82,59502,59503],{"class":84,"line":35263},[82,59504,54958],{"class":92},[82,59506,59507],{"class":84,"line":35269},[82,59508,59509],{"class":2828},"      \u002F\u002F 更换图片路径\n",[82,59511,59512,59514,59516],{"class":84,"line":35280},[82,59513,58279],{"class":92},[82,59515,113],{"class":112},[82,59517,59518],{"class":92}," sliderData[i].url\n",[82,59520,59521],{"class":84,"line":35286},[82,59522,59523],{"class":2828},"      \u002F\u002F 把文字写到p里面\n",[82,59525,59526,59528,59530],{"class":84,"line":35292},[82,59527,58289],{"class":92},[82,59529,113],{"class":112},[82,59531,59532],{"class":92}," sliderData[i].title\n",[82,59534,59535],{"class":84,"line":35298},[82,59536,59537],{"class":2828},"      \u002F\u002F 小圆点\n",[82,59539,59540],{"class":84,"line":35304},[82,59541,59542],{"class":2828},"      \u002F\u002F 先删除以前的active\n",[82,59544,59545],{"class":84,"line":35310},[82,59546,59547],{"class":2828},"      \u002F\u002F 只让当前li添加active\n",[82,59549,59550,59552,59554,59556,59559,59562,59565,59567,59569],{"class":84,"line":35316},[82,59551,58329],{"class":92},[82,59553,56959],{"class":2384},[82,59555,93],{"class":92},[82,59557,59558],{"class":96},"'.slider-footer .activate'",[82,59560,59561],{"class":92},").classList.",[82,59563,59564],{"class":2384},"remove",[82,59566,93],{"class":92},[82,59568,58347],{"class":96},[82,59570,119],{"class":92},[82,59572,59573,59575,59577,59579,59582,59584,59586,59588,59591,59593,59595,59597,59599],{"class":84,"line":35322},[82,59574,58329],{"class":92},[82,59576,56959],{"class":2384},[82,59578,93],{"class":92},[82,59580,59581],{"class":96},"`.slider-footer ul li:nth-child(${",[82,59583,3199],{"class":92},[82,59585,48130],{"class":112},[82,59587,27703],{"class":88},[82,59589,59590],{"class":96},"})`",[82,59592,59561],{"class":92},[82,59594,7926],{"class":2384},[82,59596,93],{"class":92},[82,59598,58347],{"class":96},[82,59600,119],{"class":92},[82,59602,59603],{"class":84,"line":35342},[82,59604,486],{"emptyLinePlaceholder":485},[82,59606,59607,59609,59611],{"class":84,"line":35348},[82,59608,57095],{"class":92},[82,59610,9002],{"class":88},[82,59612,119],{"class":92},[82,59614,59615],{"class":84,"line":35364},[82,59616,486],{"emptyLinePlaceholder":485},[82,59618,59619,59621,59623],{"class":84,"line":35370},[82,59620,54977],{"class":92},[82,59622,54375],{"class":53863},[82,59624,53870],{"class":92},[82,59626,59627,59629,59631],{"class":84,"line":35384},[82,59628,54347],{"class":92},[82,59630,54362],{"class":53863},[82,59632,53870],{"class":92},[82,59634,59635],{"class":84,"line":35390},[82,59636,486],{"emptyLinePlaceholder":485},[82,59638,59639,59641,59643],{"class":84,"line":35405},[82,59640,54347],{"class":92},[82,59642,53198],{"class":53863},[82,59644,53870],{"class":92},[65,59646,59648],{"id":59647},"_317-重要知识点","3.1.7 重要知识点",[19,59650,59651,59652],{},"浏览器在渲染文本时， ",[2913,59653,59654],{},"没有空格或换行符就没有“断行点”",[19,59656,59657],{},[4078,59658],{"alt":78,"src":59659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59661,59662],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59664,59665],{},[4078,59666],{"alt":78,"src":59667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59669,59670],{},[4078,59671],{"alt":78,"src":59672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59674,59676],{"id":59675},"_32-dom事件基础","3.2 DOM事件基础",[65,59678,59680],{"id":59679},"_321-事件监听","3.2.1 事件监听",[19,59682,59683],{},[4078,59684],{"alt":78,"src":59685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59687,59688],{},"事件监听有响应的发生",[19,59690,59691],{},[4078,59692],{"alt":78,"src":59693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59695,59696],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59698,59699],{},"对于有名函数,要执行的函数名后边不要加()",[65,59701,59703],{"id":59702},"_322-随机点名案例","3.2.2 随机点名案例",[73,59705,59707],{"className":53196,"code":59706,"language":53198,"meta":78,"style":78},"\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",[32,59708,59709,59719,59733,59737,59745,59759,59779,59791,59799,59805,59815,59825,59829,59833,59840,59851,59855,59859,59865,59877,59891,59901,59913,59926,59930,59934,59941,59945,59958,59970,59982,59986,59990,59994,60001,60011,60015,60019,60028,60040,60052,60067,60071,60079,60087,60091,60099,60112,60126,60139,60159,60167,60182,60202,60222,60230,60234,60242,60247,60283,60303,60308,60327,60332,60343,60348,60359,60364,60383,60398,60403,60429,60439,60448,60453,60469,60474,60479,60484,60499,60503,60507,60512,60531,60548,60556,60561,60576,60580,60584,60592,60600,60604],{"__ignoreMap":78},[82,59710,59711,59713,59715,59717],{"class":84,"line":85},[82,59712,53860],{"class":92},[82,59714,53864],{"class":53863},[82,59716,53867],{"class":2384},[82,59718,53870],{"class":92},[82,59720,59721,59723,59725,59727,59729,59731],{"class":84,"line":157},[82,59722,3659],{"class":92},[82,59724,53198],{"class":53863},[82,59726,53879],{"class":2384},[82,59728,113],{"class":92},[82,59730,53884],{"class":96},[82,59732,53870],{"class":92},[82,59734,59735],{"class":84,"line":404},[82,59736,486],{"emptyLinePlaceholder":485},[82,59738,59739,59741,59743],{"class":84,"line":413},[82,59740,3659],{"class":92},[82,59742,53897],{"class":53863},[82,59744,53870],{"class":92},[82,59746,59747,59749,59751,59753,59755,59757],{"class":84,"line":508},[82,59748,54705],{"class":92},[82,59750,53907],{"class":53863},[82,59752,53910],{"class":2384},[82,59754,113],{"class":92},[82,59756,53915],{"class":96},[82,59758,53870],{"class":92},[82,59760,59761,59763,59765,59767,59769,59771,59773,59775,59777],{"class":84,"line":513},[82,59762,54705],{"class":92},[82,59764,53907],{"class":53863},[82,59766,17506],{"class":2384},[82,59768,113],{"class":92},[82,59770,53954],{"class":96},[82,59772,53934],{"class":2384},[82,59774,113],{"class":92},[82,59776,53961],{"class":96},[82,59778,53870],{"class":92},[82,59780,59781,59783,59785,59787,59789],{"class":84,"line":1388},[82,59782,54705],{"class":92},[82,59784,53970],{"class":53863},[82,59786,53973],{"class":92},[82,59788,53970],{"class":53863},[82,59790,53870],{"class":92},[82,59792,59793,59795,59797],{"class":84,"line":1394},[82,59794,54705],{"class":92},[82,59796,2671],{"class":53863},[82,59798,53870],{"class":92},[82,59800,59801,59803],{"class":84,"line":1399},[82,59802,8995],{"class":53863},[82,59804,1349],{"class":92},[82,59806,59807,59809,59811,59813],{"class":84,"line":1430},[82,59808,57266],{"class":88},[82,59810,1357],{"class":92},[82,59812,2244],{"class":88},[82,59814,3909],{"class":92},[82,59816,59817,59819,59821,59823],{"class":84,"line":1818},[82,59818,57255],{"class":88},[82,59820,1357],{"class":92},[82,59822,2244],{"class":88},[82,59824,3909],{"class":92},[82,59826,59827],{"class":84,"line":2082},[82,59828,4787],{"class":92},[82,59830,59831],{"class":84,"line":2233},[82,59832,486],{"emptyLinePlaceholder":485},[82,59834,59835,59838],{"class":84,"line":2255},[82,59836,59837],{"class":53863},"    h2",[82,59839,1349],{"class":92},[82,59841,59842,59845,59847,59849],{"class":84,"line":2260},[82,59843,59844],{"class":88},"      text-align",[82,59846,1357],{"class":92},[82,59848,54154],{"class":88},[82,59850,3909],{"class":92},[82,59852,59853],{"class":84,"line":2298},[82,59854,4787],{"class":92},[82,59856,59857],{"class":84,"line":2303},[82,59858,486],{"emptyLinePlaceholder":485},[82,59860,59861,59863],{"class":84,"line":2321},[82,59862,57312],{"class":2384},[82,59864,1349],{"class":92},[82,59866,59867,59869,59871,59873,59875],{"class":84,"line":2533},[82,59868,57331],{"class":88},[82,59870,1357],{"class":92},[82,59872,4154],{"class":88},[82,59874,54054],{"class":112},[82,59876,3909],{"class":92},[82,59878,59879,59881,59883,59885,59887,59889],{"class":84,"line":2538},[82,59880,57266],{"class":88},[82,59882,1357],{"class":92},[82,59884,3408],{"class":88},[82,59886,54054],{"class":112},[82,59888,54118],{"class":88},[82,59890,3909],{"class":92},[82,59892,59893,59895,59897,59899],{"class":84,"line":2548},[82,59894,57569],{"class":88},[82,59896,1357],{"class":92},[82,59898,54039],{"class":88},[82,59900,3909],{"class":92},[82,59902,59903,59905,59907,59909,59911],{"class":84,"line":2579},[82,59904,57482],{"class":88},[82,59906,1357],{"class":92},[82,59908,3574],{"class":88},[82,59910,54054],{"class":112},[82,59912,3909],{"class":92},[82,59914,59915,59918,59920,59922,59924],{"class":84,"line":2585},[82,59916,59917],{"class":88},"      line-height",[82,59919,1357],{"class":92},[82,59921,3159],{"class":88},[82,59923,54054],{"class":112},[82,59925,3909],{"class":92},[82,59927,59928],{"class":84,"line":4350},[82,59929,4787],{"class":92},[82,59931,59932],{"class":84,"line":4355},[82,59933,486],{"emptyLinePlaceholder":485},[82,59935,59936,59939],{"class":84,"line":4360},[82,59937,59938],{"class":2384},"    .qs",[82,59940,1349],{"class":92},[82,59942,59943],{"class":84,"line":4365},[82,59944,486],{"emptyLinePlaceholder":485},[82,59946,59947,59949,59951,59954,59956],{"class":84,"line":4379},[82,59948,57331],{"class":88},[82,59950,1357],{"class":92},[82,59952,59953],{"class":88},"450",[82,59955,54054],{"class":112},[82,59957,3909],{"class":92},[82,59959,59960,59962,59964,59966,59968],{"class":84,"line":4384},[82,59961,57345],{"class":88},[82,59963,1357],{"class":92},[82,59965,3159],{"class":88},[82,59967,54054],{"class":112},[82,59969,3909],{"class":92},[82,59971,59972,59975,59977,59980],{"class":84,"line":5176},[82,59973,59974],{"class":88},"      color",[82,59976,1357],{"class":92},[82,59978,59979],{"class":88},"red",[82,59981,3909],{"class":92},[82,59983,59984],{"class":84,"line":5190},[82,59985,486],{"emptyLinePlaceholder":485},[82,59987,59988],{"class":84,"line":5198},[82,59989,4787],{"class":92},[82,59991,59992],{"class":84,"line":5203},[82,59993,486],{"emptyLinePlaceholder":485},[82,59995,59996,59999],{"class":84,"line":5209},[82,59997,59998],{"class":2384},"    .btns",[82,60000,1349],{"class":92},[82,60002,60003,60005,60007,60009],{"class":84,"line":5215},[82,60004,59844],{"class":88},[82,60006,1357],{"class":92},[82,60008,54154],{"class":88},[82,60010,3909],{"class":92},[82,60012,60013],{"class":84,"line":5220},[82,60014,4787],{"class":92},[82,60016,60017],{"class":84,"line":10539},[82,60018,486],{"emptyLinePlaceholder":485},[82,60020,60021,60023,60026],{"class":84,"line":10563},[82,60022,59998],{"class":2384},[82,60024,60025],{"class":53863}," button",[82,60027,1349],{"class":92},[82,60029,60030,60032,60034,60036,60038],{"class":84,"line":10568},[82,60031,57331],{"class":88},[82,60033,1357],{"class":92},[82,60035,3566],{"class":88},[82,60037,54054],{"class":112},[82,60039,3909],{"class":92},[82,60041,60042,60044,60046,60048,60050],{"class":84,"line":10574},[82,60043,57345],{"class":88},[82,60045,1357],{"class":92},[82,60047,3031],{"class":88},[82,60049,54054],{"class":112},[82,60051,3909],{"class":92},[82,60053,60054,60056,60058,60060,60063,60065],{"class":84,"line":10601},[82,60055,57266],{"class":88},[82,60057,1357],{"class":92},[82,60059,2244],{"class":88},[82,60061,60062],{"class":88}," 50",[82,60064,54054],{"class":112},[82,60066,3909],{"class":92},[82,60068,60069],{"class":84,"line":10606},[82,60070,4787],{"class":92},[82,60072,60073,60075,60077],{"class":84,"line":10612},[82,60074,54977],{"class":92},[82,60076,2671],{"class":53863},[82,60078,53870],{"class":92},[82,60080,60081,60083,60085],{"class":84,"line":10624},[82,60082,54347],{"class":92},[82,60084,53897],{"class":53863},[82,60086,53870],{"class":92},[82,60088,60089],{"class":84,"line":10636},[82,60090,486],{"emptyLinePlaceholder":485},[82,60092,60093,60095,60097],{"class":84,"line":10648},[82,60094,3659],{"class":92},[82,60096,54362],{"class":53863},[82,60098,53870],{"class":92},[82,60100,60101,60103,60105,60108,60110],{"class":84,"line":12307},[82,60102,54705],{"class":92},[82,60104,14],{"class":53863},[82,60106,60107],{"class":92},">随机点名\u003C\u002F",[82,60109,14],{"class":53863},[82,60111,53870],{"class":92},[82,60113,60114,60116,60118,60120,60122,60124],{"class":84,"line":12332},[82,60115,54705],{"class":92},[82,60117,54173],{"class":53863},[82,60119,56046],{"class":2384},[82,60121,113],{"class":92},[82,60123,56051],{"class":96},[82,60125,53870],{"class":92},[82,60127,60128,60130,60132,60135,60137],{"class":84,"line":12355},[82,60129,53904],{"class":92},[82,60131,82],{"class":53863},[82,60133,60134],{"class":92},">名字是：\u003C\u002F",[82,60136,82],{"class":53863},[82,60138,53870],{"class":92},[82,60140,60141,60143,60145,60147,60149,60152,60155,60157],{"class":84,"line":12379},[82,60142,53904],{"class":92},[82,60144,54173],{"class":53863},[82,60146,56046],{"class":2384},[82,60148,113],{"class":92},[82,60150,60151],{"class":96},"\"qs\"",[82,60153,60154],{"class":92},">这里显示姓名\u003C\u002F",[82,60156,54173],{"class":53863},[82,60158,53870],{"class":92},[82,60160,60161,60163,60165],{"class":84,"line":12384},[82,60162,54977],{"class":92},[82,60164,54173],{"class":53863},[82,60166,53870],{"class":92},[82,60168,60169,60171,60173,60175,60177,60180],{"class":84,"line":12389},[82,60170,54705],{"class":92},[82,60172,54173],{"class":53863},[82,60174,56046],{"class":2384},[82,60176,113],{"class":92},[82,60178,60179],{"class":96},"\"btns\"",[82,60181,53870],{"class":92},[82,60183,60184,60186,60188,60190,60192,60195,60198,60200],{"class":84,"line":12394},[82,60185,53904],{"class":92},[82,60187,56447],{"class":53863},[82,60189,56046],{"class":2384},[82,60191,113],{"class":92},[82,60193,60194],{"class":96},"\"start\"",[82,60196,60197],{"class":92},">开始\u003C\u002F",[82,60199,56447],{"class":53863},[82,60201,53870],{"class":92},[82,60203,60204,60206,60208,60210,60212,60215,60218,60220],{"class":84,"line":12403},[82,60205,53904],{"class":92},[82,60207,56447],{"class":53863},[82,60209,56046],{"class":2384},[82,60211,113],{"class":92},[82,60213,60214],{"class":96},"\"end\"",[82,60216,60217],{"class":92},">结束\u003C\u002F",[82,60219,56447],{"class":53863},[82,60221,53870],{"class":92},[82,60223,60224,60226,60228],{"class":84,"line":12408},[82,60225,54977],{"class":92},[82,60227,54173],{"class":53863},[82,60229,53870],{"class":92},[82,60231,60232],{"class":84,"line":12414},[82,60233,486],{"emptyLinePlaceholder":485},[82,60235,60236,60238,60240],{"class":84,"line":12435},[82,60237,54705],{"class":92},[82,60239,54375],{"class":53863},[82,60241,53870],{"class":92},[82,60243,60244],{"class":84,"line":12441},[82,60245,60246],{"class":2828},"    \u002F\u002F 数据数组\n",[82,60248,60249,60251,60254,60256,60258,60261,60263,60266,60268,60271,60273,60276,60278,60281],{"class":84,"line":12455},[82,60250,13811],{"class":112},[82,60252,60253],{"class":88}," arr",[82,60255,259],{"class":112},[82,60257,847],{"class":92},[82,60259,60260],{"class":96},"'马超'",[82,60262,100],{"class":92},[82,60264,60265],{"class":96},"'黄忠'",[82,60267,100],{"class":92},[82,60269,60270],{"class":96},"'赵云'",[82,60272,100],{"class":92},[82,60274,60275],{"class":96},"'关羽'",[82,60277,100],{"class":92},[82,60279,60280],{"class":96},"'张飞'",[82,60282,875],{"class":92},[82,60284,60285,60287,60290,60292,60294,60296,60298,60301],{"class":84,"line":12461},[82,60286,13811],{"class":112},[82,60288,60289],{"class":88}," qs",[82,60291,259],{"class":112},[82,60293,56956],{"class":92},[82,60295,56959],{"class":2384},[82,60297,93],{"class":92},[82,60299,60300],{"class":96},"'.qs'",[82,60302,119],{"class":92},[82,60304,60305],{"class":84,"line":12488},[82,60306,60307],{"class":2828},"    \u002F\u002F 1.业务1.开始按钮模块\n",[82,60309,60310,60312,60314,60316,60318,60320,60322,60325],{"class":84,"line":12497},[82,60311,13811],{"class":112},[82,60313,6779],{"class":88},[82,60315,259],{"class":112},[82,60317,56956],{"class":92},[82,60319,56959],{"class":2384},[82,60321,93],{"class":92},[82,60323,60324],{"class":96},"'.start'",[82,60326,119],{"class":92},[82,60328,60329],{"class":84,"line":12503},[82,60330,60331],{"class":2828},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[82,60333,60334,60336,60339,60341],{"class":84,"line":12511},[82,60335,54780],{"class":112},[82,60337,60338],{"class":92}," timerId ",[82,60340,113],{"class":112},[82,60342,49897],{"class":88},[82,60344,60345],{"class":84,"line":12516},[82,60346,60347],{"class":2828},"    \u002F\u002F 随机号要全局变量\n",[82,60349,60350,60352,60355,60357],{"class":84,"line":19189},[82,60351,54780],{"class":112},[82,60353,60354],{"class":92}," random ",[82,60356,113],{"class":112},[82,60358,49897],{"class":88},[82,60360,60361],{"class":84,"line":19195},[82,60362,60363],{"class":2828},"    \u002F\u002F 1.1 添加点击事件\n",[82,60365,60366,60369,60372,60374,60377,60379,60381],{"class":84,"line":19218},[82,60367,60368],{"class":92},"    start.",[82,60370,60371],{"class":2384},"addEventListener",[82,60373,93],{"class":92},[82,60375,60376],{"class":96},"'click'",[82,60378,100],{"class":92},[82,60380,57009],{"class":112},[82,60382,57012],{"class":92},[82,60384,60385,60388,60390,60392,60394,60396],{"class":84,"line":19224},[82,60386,60387],{"class":92},"      timerId ",[82,60389,113],{"class":112},[82,60391,57004],{"class":2384},[82,60393,93],{"class":92},[82,60395,57009],{"class":112},[82,60397,57012],{"class":92},[82,60399,60400],{"class":84,"line":19247},[82,60401,60402],{"class":2828},"        \u002F\u002F 随机数\n",[82,60404,60405,60408,60410,60413,60416,60419,60421,60423,60425,60427],{"class":84,"line":19261},[82,60406,60407],{"class":92},"        random ",[82,60409,113],{"class":112},[82,60411,60412],{"class":2384}," parseInt",[82,60414,60415],{"class":92},"(Math.",[82,60417,60418],{"class":2384},"random",[82,60420,15639],{"class":92},[82,60422,3212],{"class":112},[82,60424,54526],{"class":92},[82,60426,54529],{"class":88},[82,60428,119],{"class":92},[82,60430,60431,60434,60436],{"class":84,"line":19281},[82,60432,60433],{"class":92},"        qs.innerHTML ",[82,60435,113],{"class":112},[82,60437,60438],{"class":92}," arr[random]\n",[82,60440,60441,60444,60446],{"class":84,"line":19287},[82,60442,60443],{"class":92},"      }, ",[82,60445,3031],{"class":88},[82,60447,119],{"class":92},[82,60449,60450],{"class":84,"line":19298},[82,60451,60452],{"class":2828},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[82,60454,60455,60457,60460,60462,60465,60467],{"class":84,"line":19321},[82,60456,57040],{"class":112},[82,60458,60459],{"class":92}," (arr.",[82,60461,54529],{"class":88},[82,60463,60464],{"class":112}," ===",[82,60466,27703],{"class":88},[82,60468,15031],{"class":92},[82,60470,60471],{"class":84,"line":19343},[82,60472,60473],{"class":2828},"        \u002F\u002F start.disabled = true\n",[82,60475,60476],{"class":84,"line":19348},[82,60477,60478],{"class":2828},"        \u002F\u002F end.disabled = true\n",[82,60480,60481],{"class":84,"line":19354},[82,60482,60483],{"class":2828},"        \u002F\u002F 可以合起来写\n",[82,60485,60486,60489,60491,60494,60496],{"class":84,"line":19368},[82,60487,60488],{"class":92},"        start.disabled ",[82,60490,113],{"class":112},[82,60492,60493],{"class":92}," end.disabled ",[82,60495,113],{"class":112},[82,60497,60498],{"class":88}," true\n",[82,60500,60501],{"class":84,"line":19381},[82,60502,54958],{"class":92},[82,60504,60505],{"class":84,"line":19386},[82,60506,36029],{"class":92},[82,60508,60509],{"class":84,"line":19400},[82,60510,60511],{"class":2828},"    \u002F\u002F 1.2 关闭按钮模块\n",[82,60513,60514,60516,60518,60520,60522,60524,60526,60529],{"class":84,"line":19405},[82,60515,13811],{"class":112},[82,60517,6795],{"class":88},[82,60519,259],{"class":112},[82,60521,56956],{"class":92},[82,60523,56959],{"class":2384},[82,60525,93],{"class":92},[82,60527,60528],{"class":96},"'.end'",[82,60530,119],{"class":92},[82,60532,60533,60536,60538,60540,60542,60544,60546],{"class":84,"line":19411},[82,60534,60535],{"class":92},"    end.",[82,60537,60371],{"class":2384},[82,60539,93],{"class":92},[82,60541,60376],{"class":96},[82,60543,100],{"class":92},[82,60545,57009],{"class":112},[82,60547,57012],{"class":92},[82,60549,60550,60553],{"class":84,"line":19416},[82,60551,60552],{"class":2384},"      clearInterval",[82,60554,60555],{"class":92},"(timerId)\n",[82,60557,60558],{"class":84,"line":19430},[82,60559,60560],{"class":2828},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[82,60562,60563,60566,60569,60572,60574],{"class":84,"line":19435},[82,60564,60565],{"class":92},"      arr.",[82,60567,60568],{"class":2384},"splice",[82,60570,60571],{"class":92},"(random, ",[82,60573,2283],{"class":88},[82,60575,119],{"class":92},[82,60577,60578],{"class":84,"line":19440},[82,60579,36029],{"class":92},[82,60581,60582],{"class":84,"line":19454},[82,60583,486],{"emptyLinePlaceholder":485},[82,60585,60586,60588,60590],{"class":84,"line":19466},[82,60587,54977],{"class":92},[82,60589,54375],{"class":53863},[82,60591,53870],{"class":92},[82,60593,60594,60596,60598],{"class":84,"line":19471},[82,60595,54347],{"class":92},[82,60597,54362],{"class":53863},[82,60599,53870],{"class":92},[82,60601,60602],{"class":84,"line":19484},[82,60603,486],{"emptyLinePlaceholder":485},[82,60605,60606,60608,60610],{"class":84,"line":19489},[82,60607,54347],{"class":92},[82,60609,53198],{"class":53863},[82,60611,53870],{"class":92},[19,60613,60614],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[65,60616,60618],{"id":60617},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[73,60620,60622],{"className":53196,"code":60621,"language":53198,"meta":78,"style":78},"\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",[32,60623,60624,60634,60648,60652,60660,60674,60694,60706,60714,60718,60726,60738,60746,60765,60782,60798,60808,60812,60820,60828,60832],{"__ignoreMap":78},[82,60625,60626,60628,60630,60632],{"class":84,"line":85},[82,60627,53860],{"class":92},[82,60629,53864],{"class":53863},[82,60631,53867],{"class":2384},[82,60633,53870],{"class":92},[82,60635,60636,60638,60640,60642,60644,60646],{"class":84,"line":157},[82,60637,3659],{"class":92},[82,60639,53198],{"class":53863},[82,60641,53879],{"class":2384},[82,60643,113],{"class":92},[82,60645,53884],{"class":96},[82,60647,53870],{"class":92},[82,60649,60650],{"class":84,"line":404},[82,60651,486],{"emptyLinePlaceholder":485},[82,60653,60654,60656,60658],{"class":84,"line":413},[82,60655,3659],{"class":92},[82,60657,53897],{"class":53863},[82,60659,53870],{"class":92},[82,60661,60662,60664,60666,60668,60670,60672],{"class":84,"line":508},[82,60663,54705],{"class":92},[82,60665,53907],{"class":53863},[82,60667,53910],{"class":2384},[82,60669,113],{"class":92},[82,60671,53915],{"class":96},[82,60673,53870],{"class":92},[82,60675,60676,60678,60680,60682,60684,60686,60688,60690,60692],{"class":84,"line":513},[82,60677,54705],{"class":92},[82,60679,53907],{"class":53863},[82,60681,17506],{"class":2384},[82,60683,113],{"class":92},[82,60685,53954],{"class":96},[82,60687,53934],{"class":2384},[82,60689,113],{"class":92},[82,60691,53961],{"class":96},[82,60693,53870],{"class":92},[82,60695,60696,60698,60700,60702,60704],{"class":84,"line":1388},[82,60697,54705],{"class":92},[82,60699,53970],{"class":53863},[82,60701,53973],{"class":92},[82,60703,53970],{"class":53863},[82,60705,53870],{"class":92},[82,60707,60708,60710,60712],{"class":84,"line":1394},[82,60709,54347],{"class":92},[82,60711,53897],{"class":53863},[82,60713,53870],{"class":92},[82,60715,60716],{"class":84,"line":1399},[82,60717,486],{"emptyLinePlaceholder":485},[82,60719,60720,60722,60724],{"class":84,"line":1430},[82,60721,3659],{"class":92},[82,60723,54362],{"class":53863},[82,60725,53870],{"class":92},[82,60727,60728,60730,60732,60734,60736],{"class":84,"line":1818},[82,60729,54705],{"class":92},[82,60731,56447],{"class":53863},[82,60733,56453],{"class":92},[82,60735,56447],{"class":53863},[82,60737,53870],{"class":92},[82,60739,60740,60742,60744],{"class":84,"line":2082},[82,60741,54705],{"class":92},[82,60743,54375],{"class":53863},[82,60745,53870],{"class":92},[82,60747,60748,60750,60752,60754,60756,60758,60760,60763],{"class":84,"line":2233},[82,60749,13811],{"class":112},[82,60751,56951],{"class":88},[82,60753,259],{"class":112},[82,60755,56956],{"class":92},[82,60757,56959],{"class":2384},[82,60759,93],{"class":92},[82,60761,60762],{"class":96},"'button'",[82,60764,119],{"class":92},[82,60766,60767,60770,60772,60774,60776,60778,60780],{"class":84,"line":2255},[82,60768,60769],{"class":92},"    btn.",[82,60771,60371],{"class":2384},[82,60773,93],{"class":92},[82,60775,60376],{"class":96},[82,60777,100],{"class":92},[82,60779,57009],{"class":112},[82,60781,57012],{"class":92},[82,60783,60784,60787,60789,60791,60794,60796],{"class":84,"line":2260},[82,60785,60786],{"class":112},"      const",[82,60788,4840],{"class":88},[82,60790,259],{"class":112},[82,60792,60793],{"class":92}," Math.",[82,60795,60418],{"class":2384},[82,60797,4576],{"class":92},[82,60799,60800,60803,60806],{"class":84,"line":2298},[82,60801,60802],{"class":92},"      console.",[82,60804,60805],{"class":2384},"log",[82,60807,2785],{"class":92},[82,60809,60810],{"class":84,"line":2303},[82,60811,36029],{"class":92},[82,60813,60814,60816,60818],{"class":84,"line":2321},[82,60815,54977],{"class":92},[82,60817,54375],{"class":53863},[82,60819,53870],{"class":92},[82,60821,60822,60824,60826],{"class":84,"line":2533},[82,60823,54347],{"class":92},[82,60825,54362],{"class":53863},[82,60827,53870],{"class":92},[82,60829,60830],{"class":84,"line":2538},[82,60831,486],{"emptyLinePlaceholder":485},[82,60833,60834,60836,60838],{"class":84,"line":2548},[82,60835,54347],{"class":92},[82,60837,53198],{"class":53863},[82,60839,53870],{"class":92},[19,60841,60842],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60844,60845],{},"常量不可以重新赋值",[19,60847,60848],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[73,60850,60852],{"className":53196,"code":60851,"language":53198,"meta":78,"style":78},"\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",[32,60853,60854,60864,60878,60882,60890,60904,60924,60936,60944,60948,60956,60968,60976,60987,61005,61021,61035,61043,61047,61055,61063,61067],{"__ignoreMap":78},[82,60855,60856,60858,60860,60862],{"class":84,"line":85},[82,60857,53860],{"class":92},[82,60859,53864],{"class":53863},[82,60861,53867],{"class":2384},[82,60863,53870],{"class":92},[82,60865,60866,60868,60870,60872,60874,60876],{"class":84,"line":157},[82,60867,3659],{"class":92},[82,60869,53198],{"class":53863},[82,60871,53879],{"class":2384},[82,60873,113],{"class":92},[82,60875,53884],{"class":96},[82,60877,53870],{"class":92},[82,60879,60880],{"class":84,"line":404},[82,60881,486],{"emptyLinePlaceholder":485},[82,60883,60884,60886,60888],{"class":84,"line":413},[82,60885,3659],{"class":92},[82,60887,53897],{"class":53863},[82,60889,53870],{"class":92},[82,60891,60892,60894,60896,60898,60900,60902],{"class":84,"line":508},[82,60893,54705],{"class":92},[82,60895,53907],{"class":53863},[82,60897,53910],{"class":2384},[82,60899,113],{"class":92},[82,60901,53915],{"class":96},[82,60903,53870],{"class":92},[82,60905,60906,60908,60910,60912,60914,60916,60918,60920,60922],{"class":84,"line":513},[82,60907,54705],{"class":92},[82,60909,53907],{"class":53863},[82,60911,17506],{"class":2384},[82,60913,113],{"class":92},[82,60915,53954],{"class":96},[82,60917,53934],{"class":2384},[82,60919,113],{"class":92},[82,60921,53961],{"class":96},[82,60923,53870],{"class":92},[82,60925,60926,60928,60930,60932,60934],{"class":84,"line":1388},[82,60927,54705],{"class":92},[82,60929,53970],{"class":53863},[82,60931,53973],{"class":92},[82,60933,53970],{"class":53863},[82,60935,53870],{"class":92},[82,60937,60938,60940,60942],{"class":84,"line":1394},[82,60939,54347],{"class":92},[82,60941,53897],{"class":53863},[82,60943,53870],{"class":92},[82,60945,60946],{"class":84,"line":1399},[82,60947,486],{"emptyLinePlaceholder":485},[82,60949,60950,60952,60954],{"class":84,"line":1430},[82,60951,3659],{"class":92},[82,60953,54362],{"class":53863},[82,60955,53870],{"class":92},[82,60957,60958,60960,60962,60964,60966],{"class":84,"line":1818},[82,60959,54705],{"class":92},[82,60961,56447],{"class":53863},[82,60963,56453],{"class":92},[82,60965,56447],{"class":53863},[82,60967,53870],{"class":92},[82,60969,60970,60972,60974],{"class":84,"line":2082},[82,60971,54705],{"class":92},[82,60973,54375],{"class":53863},[82,60975,53870],{"class":92},[82,60977,60978,60980,60982,60984],{"class":84,"line":2233},[82,60979,13811],{"class":112},[82,60981,4840],{"class":88},[82,60983,259],{"class":112},[82,60985,60986],{"class":88}," 10\n",[82,60988,60989,60991,60993,60995,60997,60999,61001,61003],{"class":84,"line":2255},[82,60990,13811],{"class":112},[82,60992,56951],{"class":88},[82,60994,259],{"class":112},[82,60996,56956],{"class":92},[82,60998,56959],{"class":2384},[82,61000,93],{"class":92},[82,61002,60762],{"class":96},[82,61004,119],{"class":92},[82,61006,61007,61009,61011,61013,61015,61017,61019],{"class":84,"line":2260},[82,61008,60769],{"class":92},[82,61010,60371],{"class":2384},[82,61012,93],{"class":92},[82,61014,60376],{"class":96},[82,61016,100],{"class":92},[82,61018,57009],{"class":112},[82,61020,57012],{"class":92},[82,61022,61023,61025,61027,61029,61031,61033],{"class":84,"line":2298},[82,61024,60786],{"class":112},[82,61026,4840],{"class":88},[82,61028,259],{"class":112},[82,61030,60793],{"class":92},[82,61032,60418],{"class":2384},[82,61034,4576],{"class":92},[82,61036,61037,61039,61041],{"class":84,"line":2303},[82,61038,60802],{"class":92},[82,61040,60805],{"class":2384},[82,61042,2785],{"class":92},[82,61044,61045],{"class":84,"line":2321},[82,61046,36029],{"class":92},[82,61048,61049,61051,61053],{"class":84,"line":2533},[82,61050,54977],{"class":92},[82,61052,54375],{"class":53863},[82,61054,53870],{"class":92},[82,61056,61057,61059,61061],{"class":84,"line":2538},[82,61058,54347],{"class":92},[82,61060,54362],{"class":53863},[82,61062,53870],{"class":92},[82,61064,61065],{"class":84,"line":2548},[82,61066,486],{"emptyLinePlaceholder":485},[82,61068,61069,61071,61073],{"class":84,"line":2579},[82,61070,54347],{"class":92},[82,61072,53198],{"class":53863},[82,61074,53870],{"class":92},[19,61076,61077],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[73,61079,61081],{"className":53196,"code":61080,"language":53198,"meta":78,"style":78},"\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",[32,61082,61083,61093,61107,61111,61119,61133,61153,61165,61173,61177,61185,61197,61205,61215,61233,61249,61262,61270,61274,61282,61290,61294],{"__ignoreMap":78},[82,61084,61085,61087,61089,61091],{"class":84,"line":85},[82,61086,53860],{"class":92},[82,61088,53864],{"class":53863},[82,61090,53867],{"class":2384},[82,61092,53870],{"class":92},[82,61094,61095,61097,61099,61101,61103,61105],{"class":84,"line":157},[82,61096,3659],{"class":92},[82,61098,53198],{"class":53863},[82,61100,53879],{"class":2384},[82,61102,113],{"class":92},[82,61104,53884],{"class":96},[82,61106,53870],{"class":92},[82,61108,61109],{"class":84,"line":404},[82,61110,486],{"emptyLinePlaceholder":485},[82,61112,61113,61115,61117],{"class":84,"line":413},[82,61114,3659],{"class":92},[82,61116,53897],{"class":53863},[82,61118,53870],{"class":92},[82,61120,61121,61123,61125,61127,61129,61131],{"class":84,"line":508},[82,61122,54705],{"class":92},[82,61124,53907],{"class":53863},[82,61126,53910],{"class":2384},[82,61128,113],{"class":92},[82,61130,53915],{"class":96},[82,61132,53870],{"class":92},[82,61134,61135,61137,61139,61141,61143,61145,61147,61149,61151],{"class":84,"line":513},[82,61136,54705],{"class":92},[82,61138,53907],{"class":53863},[82,61140,17506],{"class":2384},[82,61142,113],{"class":92},[82,61144,53954],{"class":96},[82,61146,53934],{"class":2384},[82,61148,113],{"class":92},[82,61150,53961],{"class":96},[82,61152,53870],{"class":92},[82,61154,61155,61157,61159,61161,61163],{"class":84,"line":1388},[82,61156,54705],{"class":92},[82,61158,53970],{"class":53863},[82,61160,53973],{"class":92},[82,61162,53970],{"class":53863},[82,61164,53870],{"class":92},[82,61166,61167,61169,61171],{"class":84,"line":1394},[82,61168,54347],{"class":92},[82,61170,53897],{"class":53863},[82,61172,53870],{"class":92},[82,61174,61175],{"class":84,"line":1399},[82,61176,486],{"emptyLinePlaceholder":485},[82,61178,61179,61181,61183],{"class":84,"line":1430},[82,61180,3659],{"class":92},[82,61182,54362],{"class":53863},[82,61184,53870],{"class":92},[82,61186,61187,61189,61191,61193,61195],{"class":84,"line":1818},[82,61188,54705],{"class":92},[82,61190,56447],{"class":53863},[82,61192,56453],{"class":92},[82,61194,56447],{"class":53863},[82,61196,53870],{"class":92},[82,61198,61199,61201,61203],{"class":84,"line":2082},[82,61200,54705],{"class":92},[82,61202,54375],{"class":53863},[82,61204,53870],{"class":92},[82,61206,61207,61209,61211,61213],{"class":84,"line":2233},[82,61208,13811],{"class":112},[82,61210,4840],{"class":88},[82,61212,259],{"class":112},[82,61214,60986],{"class":88},[82,61216,61217,61219,61221,61223,61225,61227,61229,61231],{"class":84,"line":2255},[82,61218,13811],{"class":112},[82,61220,56951],{"class":88},[82,61222,259],{"class":112},[82,61224,56956],{"class":92},[82,61226,56959],{"class":2384},[82,61228,93],{"class":92},[82,61230,60762],{"class":96},[82,61232,119],{"class":92},[82,61234,61235,61237,61239,61241,61243,61245,61247],{"class":84,"line":2260},[82,61236,60769],{"class":92},[82,61238,60371],{"class":2384},[82,61240,93],{"class":92},[82,61242,60376],{"class":96},[82,61244,100],{"class":92},[82,61246,57009],{"class":112},[82,61248,57012],{"class":92},[82,61250,61251,61254,61256,61258,61260],{"class":84,"line":2298},[82,61252,61253],{"class":92},"      num ",[82,61255,113],{"class":112},[82,61257,60793],{"class":92},[82,61259,60418],{"class":2384},[82,61261,4576],{"class":92},[82,61263,61264,61266,61268],{"class":84,"line":2303},[82,61265,60802],{"class":92},[82,61267,60805],{"class":2384},[82,61269,2785],{"class":92},[82,61271,61272],{"class":84,"line":2321},[82,61273,36029],{"class":92},[82,61275,61276,61278,61280],{"class":84,"line":2533},[82,61277,54977],{"class":92},[82,61279,54375],{"class":53863},[82,61281,53870],{"class":92},[82,61283,61284,61286,61288],{"class":84,"line":2538},[82,61285,54347],{"class":92},[82,61287,54362],{"class":53863},[82,61289,53870],{"class":92},[82,61291,61292],{"class":84,"line":2548},[82,61293,486],{"emptyLinePlaceholder":485},[82,61295,61296,61298,61300],{"class":84,"line":2579},[82,61297,54347],{"class":92},[82,61299,53198],{"class":53863},[82,61301,53870],{"class":92},[19,61303,61304],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[65,61306,61308],{"id":61307},"_324-事件监听版本","3.2.4 事件监听版本",[19,61310,61311],{},[4078,61312],{"alt":78,"src":61313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,61315,61316],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,61318,61319],{},"这种方式会覆盖前边的事件监听:",[73,61321,61323],{"className":53196,"code":61322,"language":53198,"meta":78,"style":78},"\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",[32,61324,61325,61335,61349,61353,61361,61375,61395,61407,61415,61419,61427,61439,61447,61465,61479,61490,61494,61506,61516,61520,61528,61536,61540],{"__ignoreMap":78},[82,61326,61327,61329,61331,61333],{"class":84,"line":85},[82,61328,53860],{"class":92},[82,61330,53864],{"class":53863},[82,61332,53867],{"class":2384},[82,61334,53870],{"class":92},[82,61336,61337,61339,61341,61343,61345,61347],{"class":84,"line":157},[82,61338,3659],{"class":92},[82,61340,53198],{"class":53863},[82,61342,53879],{"class":2384},[82,61344,113],{"class":92},[82,61346,53884],{"class":96},[82,61348,53870],{"class":92},[82,61350,61351],{"class":84,"line":404},[82,61352,486],{"emptyLinePlaceholder":485},[82,61354,61355,61357,61359],{"class":84,"line":413},[82,61356,3659],{"class":92},[82,61358,53897],{"class":53863},[82,61360,53870],{"class":92},[82,61362,61363,61365,61367,61369,61371,61373],{"class":84,"line":508},[82,61364,54705],{"class":92},[82,61366,53907],{"class":53863},[82,61368,53910],{"class":2384},[82,61370,113],{"class":92},[82,61372,53915],{"class":96},[82,61374,53870],{"class":92},[82,61376,61377,61379,61381,61383,61385,61387,61389,61391,61393],{"class":84,"line":513},[82,61378,54705],{"class":92},[82,61380,53907],{"class":53863},[82,61382,17506],{"class":2384},[82,61384,113],{"class":92},[82,61386,53954],{"class":96},[82,61388,53934],{"class":2384},[82,61390,113],{"class":92},[82,61392,53961],{"class":96},[82,61394,53870],{"class":92},[82,61396,61397,61399,61401,61403,61405],{"class":84,"line":1388},[82,61398,54705],{"class":92},[82,61400,53970],{"class":53863},[82,61402,53973],{"class":92},[82,61404,53970],{"class":53863},[82,61406,53870],{"class":92},[82,61408,61409,61411,61413],{"class":84,"line":1394},[82,61410,54347],{"class":92},[82,61412,53897],{"class":53863},[82,61414,53870],{"class":92},[82,61416,61417],{"class":84,"line":1399},[82,61418,486],{"emptyLinePlaceholder":485},[82,61420,61421,61423,61425],{"class":84,"line":1430},[82,61422,3659],{"class":92},[82,61424,54362],{"class":53863},[82,61426,53870],{"class":92},[82,61428,61429,61431,61433,61435,61437],{"class":84,"line":1818},[82,61430,54705],{"class":92},[82,61432,56447],{"class":53863},[82,61434,56453],{"class":92},[82,61436,56447],{"class":53863},[82,61438,53870],{"class":92},[82,61440,61441,61443,61445],{"class":84,"line":2082},[82,61442,54705],{"class":92},[82,61444,54375],{"class":53863},[82,61446,53870],{"class":92},[82,61448,61449,61451,61453,61455,61457,61459,61461,61463],{"class":84,"line":2233},[82,61450,13811],{"class":112},[82,61452,56951],{"class":88},[82,61454,259],{"class":112},[82,61456,56956],{"class":92},[82,61458,56959],{"class":2384},[82,61460,93],{"class":92},[82,61462,60762],{"class":96},[82,61464,119],{"class":92},[82,61466,61467,61469,61472,61474,61477],{"class":84,"line":2255},[82,61468,60769],{"class":92},[82,61470,61471],{"class":2384},"onclick",[82,61473,259],{"class":112},[82,61475,61476],{"class":112}," function",[82,61478,57012],{"class":92},[82,61480,61481,61484,61486,61488],{"class":84,"line":2260},[82,61482,61483],{"class":2384},"      alert",[82,61485,93],{"class":92},[82,61487,3229],{"class":88},[82,61489,119],{"class":92},[82,61491,61492],{"class":84,"line":2298},[82,61493,4787],{"class":92},[82,61495,61496,61498,61500,61502,61504],{"class":84,"line":2303},[82,61497,60769],{"class":92},[82,61499,61471],{"class":2384},[82,61501,259],{"class":112},[82,61503,61476],{"class":112},[82,61505,57012],{"class":92},[82,61507,61508,61510,61512,61514],{"class":84,"line":2321},[82,61509,61483],{"class":2384},[82,61511,93],{"class":92},[82,61513,3501],{"class":88},[82,61515,119],{"class":92},[82,61517,61518],{"class":84,"line":2533},[82,61519,4787],{"class":92},[82,61521,61522,61524,61526],{"class":84,"line":2538},[82,61523,54977],{"class":92},[82,61525,54375],{"class":53863},[82,61527,53870],{"class":92},[82,61529,61530,61532,61534],{"class":84,"line":2548},[82,61531,54347],{"class":92},[82,61533,54362],{"class":53863},[82,61535,53870],{"class":92},[82,61537,61538],{"class":84,"line":2579},[82,61539,486],{"emptyLinePlaceholder":485},[82,61541,61542,61544,61546],{"class":84,"line":2585},[82,61543,54347],{"class":92},[82,61545,53198],{"class":53863},[82,61547,53870],{"class":92},[19,61549,61550],{},"只要点击就输出结果为22,前边11被覆盖了",[73,61552,61554],{"className":53196,"code":61553,"language":53198,"meta":78,"style":78},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[32,61555,61556,61561,61566,61570,61575,61580],{"__ignoreMap":78},[82,61557,61558],{"class":84,"line":85},[82,61559,61560],{"class":92},"  btn.addEventListener('click', function () {\n",[82,61562,61563],{"class":84,"line":157},[82,61564,61565],{"class":92},"      alert(11)\n",[82,61567,61568],{"class":84,"line":404},[82,61569,36029],{"class":92},[82,61571,61572],{"class":84,"line":413},[82,61573,61574],{"class":92},"    btn.addEventListener('click', function () {\n",[82,61576,61577],{"class":84,"line":508},[82,61578,61579],{"class":92},"      alert(22)\n",[82,61581,61582],{"class":84,"line":513},[82,61583,36029],{"class":92},[19,61585,61586],{},"点击第一次输出11,第二次点击为22",[65,61588,61590],{"id":61589},"_325-事件类型","3.2.5 事件类型",[19,61592,61593],{},[4078,61594],{"alt":78,"src":61595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24582,61597,61599],{"id":61598},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61601,61602],{},"补充知识:",[19,61604,61605],{},"轮播图自动播放模块,可以使用",[19,61607,61608],{},"let timerId = setInterval(function () {",[19,61610,61611],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61613,61614],{},"用js方法模拟进行点击事件,click必须加()",[19,61616,61617],{},"next.click()",[19,61619,61620],{},"}, 1000)",[19,61622,61623],{},[4078,61624],{"alt":78,"src":61625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[73,61627,61629],{"className":55627,"code":61628,"language":55629,"meta":78,"style":78},"\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",[32,61630,61631,61635,61645,61659,61663,61671,61686,61706,61726,61739,61747,61752,61757,61761,61765,61770,61775,61780,61785,61789,61793,61798,61803,61808,61812,61816,61821,61825,61830,61835,61839,61843,61848,61853,61858,61863,61868,61872,61876,61881,61886,61891,61896,61901,61905,61909,61914,61919,61924,61929,61934,61939,61944,61949,61954,61959,61963,61967,61972,61977,61981,61985,61990,61995,61999,62004,62009,62013,62017,62022,62026,62031,62036,62040,62045,62049,62053,62058,62063,62068,62073,62078,62083,62088,62092,62096,62100,62105,62110,62115,62120,62124,62132,62140,62144,62152,62167,62181,62202,62210,62224,62237,62252,62271,62283,62295,62307,62319,62331,62343,62355,62363,62378,62402,62426,62434,62442,62450,62458,62463,62468,62473,62478,62483,62488,62493,62498,62503,62508,62512,62517,62522,62527,62532,62537,62542,62547,62552,62557,62561,62566,62571,62576,62581,62586,62591,62596,62601,62606,62611,62616,62621,62625,62629,62634,62639,62644,62648,62653,62658,62663,62668,62673,62677,62682,62686,62690,62694,62698,62702,62706,62711,62716,62721,62726,62731,62736,62741,62746,62751,62755,62759,62764,62769,62774,62779,62784,62788,62793,62798,62803,62808,62813,62818,62822,62826,62831,62835,62840,62844,62849,62854,62859,62864,62869,62874,62878,62886,62894,62898],{"__ignoreMap":78},[82,61632,61633],{"class":84,"line":85},[82,61634,486],{"emptyLinePlaceholder":485},[82,61636,61637,61639,61641,61643],{"class":84,"line":157},[82,61638,53860],{"class":92},[82,61640,53864],{"class":112},[82,61642,53867],{"class":88},[82,61644,53870],{"class":92},[82,61646,61647,61649,61651,61653,61655,61657],{"class":84,"line":404},[82,61648,3659],{"class":92},[82,61650,53198],{"class":53863},[82,61652,53879],{"class":2384},[82,61654,113],{"class":92},[82,61656,53884],{"class":96},[82,61658,53870],{"class":92},[82,61660,61661],{"class":84,"line":413},[82,61662,486],{"emptyLinePlaceholder":485},[82,61664,61665,61667,61669],{"class":84,"line":508},[82,61666,3659],{"class":92},[82,61668,53897],{"class":53863},[82,61670,53870],{"class":92},[82,61672,61673,61675,61677,61679,61681,61683],{"class":84,"line":513},[82,61674,54705],{"class":92},[82,61676,53907],{"class":53863},[82,61678,53910],{"class":2384},[82,61680,113],{"class":92},[82,61682,53915],{"class":96},[82,61684,61685],{"class":92}," \u002F>\n",[82,61687,61688,61690,61692,61694,61696,61698,61700,61702,61704],{"class":84,"line":1388},[82,61689,54705],{"class":92},[82,61691,53907],{"class":53863},[82,61693,53926],{"class":2384},[82,61695,113],{"class":92},[82,61697,53931],{"class":96},[82,61699,53934],{"class":2384},[82,61701,113],{"class":92},[82,61703,53939],{"class":96},[82,61705,61685],{"class":92},[82,61707,61708,61710,61712,61714,61716,61718,61720,61722,61724],{"class":84,"line":1394},[82,61709,54705],{"class":92},[82,61711,53907],{"class":53863},[82,61713,17506],{"class":2384},[82,61715,113],{"class":92},[82,61717,53954],{"class":96},[82,61719,53934],{"class":2384},[82,61721,113],{"class":92},[82,61723,53961],{"class":96},[82,61725,61685],{"class":92},[82,61727,61728,61730,61732,61735,61737],{"class":84,"line":1399},[82,61729,54705],{"class":92},[82,61731,53970],{"class":53863},[82,61733,61734],{"class":92},">轮播图点击切换\u003C\u002F",[82,61736,53970],{"class":53863},[82,61738,53870],{"class":92},[82,61740,61741,61743,61745],{"class":84,"line":1430},[82,61742,54705],{"class":92},[82,61744,2671],{"class":53863},[82,61746,53870],{"class":92},[82,61748,61749],{"class":84,"line":1818},[82,61750,61751],{"class":92},"    * {\n",[82,61753,61754],{"class":84,"line":2082},[82,61755,61756],{"class":92},"      box-sizing: border-box;\n",[82,61758,61759],{"class":84,"line":2233},[82,61760,4787],{"class":92},[82,61762,61763],{"class":84,"line":2255},[82,61764,486],{"emptyLinePlaceholder":485},[82,61766,61767],{"class":84,"line":2260},[82,61768,61769],{"class":92},"    .slider {\n",[82,61771,61772],{"class":84,"line":2298},[82,61773,61774],{"class":92},"      width: 560px;\n",[82,61776,61777],{"class":84,"line":2303},[82,61778,61779],{"class":92},"      height: 400px;\n",[82,61781,61782],{"class":84,"line":2321},[82,61783,61784],{"class":92},"      overflow: hidden;\n",[82,61786,61787],{"class":84,"line":2533},[82,61788,4787],{"class":92},[82,61790,61791],{"class":84,"line":2538},[82,61792,486],{"emptyLinePlaceholder":485},[82,61794,61795],{"class":84,"line":2548},[82,61796,61797],{"class":92},"    .slider-wrapper {\n",[82,61799,61800],{"class":84,"line":2579},[82,61801,61802],{"class":92},"      width: 100%;\n",[82,61804,61805],{"class":84,"line":2585},[82,61806,61807],{"class":92},"      height: 320px;\n",[82,61809,61810],{"class":84,"line":4350},[82,61811,4787],{"class":92},[82,61813,61814],{"class":84,"line":4355},[82,61815,486],{"emptyLinePlaceholder":485},[82,61817,61818],{"class":84,"line":4360},[82,61819,61820],{"class":92},"    .slider-wrapper img {\n",[82,61822,61823],{"class":84,"line":4365},[82,61824,61802],{"class":92},[82,61826,61827],{"class":84,"line":4379},[82,61828,61829],{"class":92},"      height: 100%;\n",[82,61831,61832],{"class":84,"line":4384},[82,61833,61834],{"class":92},"      display: block;\n",[82,61836,61837],{"class":84,"line":5176},[82,61838,4787],{"class":92},[82,61840,61841],{"class":84,"line":5190},[82,61842,486],{"emptyLinePlaceholder":485},[82,61844,61845],{"class":84,"line":5198},[82,61846,61847],{"class":92},"    .slider-footer {\n",[82,61849,61850],{"class":84,"line":5203},[82,61851,61852],{"class":92},"      height: 80px;\n",[82,61854,61855],{"class":84,"line":5209},[82,61856,61857],{"class":92},"      background-color: rgb(100, 67, 68);\n",[82,61859,61860],{"class":84,"line":5215},[82,61861,61862],{"class":92},"      padding: 12px 12px 0 12px;\n",[82,61864,61865],{"class":84,"line":5220},[82,61866,61867],{"class":92},"      position: relative;\n",[82,61869,61870],{"class":84,"line":10539},[82,61871,4787],{"class":92},[82,61873,61874],{"class":84,"line":10563},[82,61875,486],{"emptyLinePlaceholder":485},[82,61877,61878],{"class":84,"line":10568},[82,61879,61880],{"class":92},"    .slider-footer .toggle {\n",[82,61882,61883],{"class":84,"line":10574},[82,61884,61885],{"class":92},"      position: absolute;\n",[82,61887,61888],{"class":84,"line":10601},[82,61889,61890],{"class":92},"      right: 0;\n",[82,61892,61893],{"class":84,"line":10606},[82,61894,61895],{"class":92},"      top: 12px;\n",[82,61897,61898],{"class":84,"line":10612},[82,61899,61900],{"class":92},"      display: flex;\n",[82,61902,61903],{"class":84,"line":10624},[82,61904,4787],{"class":92},[82,61906,61907],{"class":84,"line":10636},[82,61908,486],{"emptyLinePlaceholder":485},[82,61910,61911],{"class":84,"line":10648},[82,61912,61913],{"class":92},"    .slider-footer .toggle button {\n",[82,61915,61916],{"class":84,"line":12307},[82,61917,61918],{"class":92},"      margin-right: 12px;\n",[82,61920,61921],{"class":84,"line":12332},[82,61922,61923],{"class":92},"      width: 28px;\n",[82,61925,61926],{"class":84,"line":12355},[82,61927,61928],{"class":92},"      height: 28px;\n",[82,61930,61931],{"class":84,"line":12379},[82,61932,61933],{"class":92},"      appearance: none;\n",[82,61935,61936],{"class":84,"line":12384},[82,61937,61938],{"class":92},"      border: none;\n",[82,61940,61941],{"class":84,"line":12389},[82,61942,61943],{"class":92},"      background: rgba(255, 255, 255, 0.1);\n",[82,61945,61946],{"class":84,"line":12394},[82,61947,61948],{"class":92},"      color: #fff;\n",[82,61950,61951],{"class":84,"line":12403},[82,61952,61953],{"class":92},"      border-radius: 4px;\n",[82,61955,61956],{"class":84,"line":12408},[82,61957,61958],{"class":92},"      cursor: pointer;\n",[82,61960,61961],{"class":84,"line":12414},[82,61962,4787],{"class":92},[82,61964,61965],{"class":84,"line":12435},[82,61966,486],{"emptyLinePlaceholder":485},[82,61968,61969],{"class":84,"line":12441},[82,61970,61971],{"class":92},"    .slider-footer .toggle button:hover {\n",[82,61973,61974],{"class":84,"line":12455},[82,61975,61976],{"class":92},"      background: rgba(255, 255, 255, 0.2);\n",[82,61978,61979],{"class":84,"line":12461},[82,61980,4787],{"class":92},[82,61982,61983],{"class":84,"line":12488},[82,61984,486],{"emptyLinePlaceholder":485},[82,61986,61987],{"class":84,"line":12497},[82,61988,61989],{"class":92},"    .slider-footer p {\n",[82,61991,61992],{"class":84,"line":12503},[82,61993,61994],{"class":92},"      margin: 0;\n",[82,61996,61997],{"class":84,"line":12511},[82,61998,61948],{"class":92},[82,62000,62001],{"class":84,"line":12516},[82,62002,62003],{"class":92},"      font-size: 18px;\n",[82,62005,62006],{"class":84,"line":19189},[82,62007,62008],{"class":92},"      margin-bottom: 10px;\n",[82,62010,62011],{"class":84,"line":19195},[82,62012,4787],{"class":92},[82,62014,62015],{"class":84,"line":19218},[82,62016,486],{"emptyLinePlaceholder":485},[82,62018,62019],{"class":84,"line":19224},[82,62020,62021],{"class":92},"    .slider-indicator {\n",[82,62023,62024],{"class":84,"line":19247},[82,62025,61994],{"class":92},[82,62027,62028],{"class":84,"line":19261},[82,62029,62030],{"class":92},"      padding: 0;\n",[82,62032,62033],{"class":84,"line":19281},[82,62034,62035],{"class":92},"      list-style: none;\n",[82,62037,62038],{"class":84,"line":19287},[82,62039,61900],{"class":92},[82,62041,62042],{"class":84,"line":19298},[82,62043,62044],{"class":92},"      align-items: center;\n",[82,62046,62047],{"class":84,"line":19321},[82,62048,4787],{"class":92},[82,62050,62051],{"class":84,"line":19343},[82,62052,486],{"emptyLinePlaceholder":485},[82,62054,62055],{"class":84,"line":19348},[82,62056,62057],{"class":92},"    .slider-indicator li {\n",[82,62059,62060],{"class":84,"line":19354},[82,62061,62062],{"class":92},"      width: 8px;\n",[82,62064,62065],{"class":84,"line":19368},[82,62066,62067],{"class":92},"      height: 8px;\n",[82,62069,62070],{"class":84,"line":19381},[82,62071,62072],{"class":92},"      margin: 4px;\n",[82,62074,62075],{"class":84,"line":19386},[82,62076,62077],{"class":92},"      border-radius: 50%;\n",[82,62079,62080],{"class":84,"line":19400},[82,62081,62082],{"class":92},"      background: #fff;\n",[82,62084,62085],{"class":84,"line":19405},[82,62086,62087],{"class":92},"      opacity: 0.4;\n",[82,62089,62090],{"class":84,"line":19411},[82,62091,61958],{"class":92},[82,62093,62094],{"class":84,"line":19416},[82,62095,4787],{"class":92},[82,62097,62098],{"class":84,"line":19430},[82,62099,486],{"emptyLinePlaceholder":485},[82,62101,62102],{"class":84,"line":19435},[82,62103,62104],{"class":92},"    .slider-indicator li.active {\n",[82,62106,62107],{"class":84,"line":19440},[82,62108,62109],{"class":92},"      width: 12px;\n",[82,62111,62112],{"class":84,"line":19454},[82,62113,62114],{"class":92},"      height: 12px;\n",[82,62116,62117],{"class":84,"line":19466},[82,62118,62119],{"class":92},"      opacity: 1;\n",[82,62121,62122],{"class":84,"line":19471},[82,62123,4787],{"class":92},[82,62125,62126,62128,62130],{"class":84,"line":19484},[82,62127,54977],{"class":92},[82,62129,2671],{"class":53863},[82,62131,53870],{"class":92},[82,62133,62134,62136,62138],{"class":84,"line":19489},[82,62135,54347],{"class":92},[82,62137,53897],{"class":53863},[82,62139,53870],{"class":92},[82,62141,62142],{"class":84,"line":19494},[82,62143,486],{"emptyLinePlaceholder":485},[82,62145,62146,62148,62150],{"class":84,"line":19499},[82,62147,3659],{"class":92},[82,62149,54362],{"class":53863},[82,62151,53870],{"class":92},[82,62153,62154,62156,62158,62160,62162,62165],{"class":84,"line":19512},[82,62155,54705],{"class":92},[82,62157,54173],{"class":53863},[82,62159,56046],{"class":2384},[82,62161,113],{"class":92},[82,62163,62164],{"class":96},"\"slider\"",[82,62166,53870],{"class":92},[82,62168,62169,62171,62173,62175,62177,62179],{"class":84,"line":19517},[82,62170,53904],{"class":92},[82,62172,54173],{"class":53863},[82,62174,56046],{"class":2384},[82,62176,113],{"class":92},[82,62178,57787],{"class":96},[82,62180,53870],{"class":92},[82,62182,62183,62185,62187,62189,62191,62194,62196,62198,62200],{"class":84,"line":35202},[82,62184,57794],{"class":92},[82,62186,4078],{"class":53863},[82,62188,57799],{"class":2384},[82,62190,113],{"class":92},[82,62192,62193],{"class":96},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[82,62195,57807],{"class":2384},[82,62197,113],{"class":92},[82,62199,1793],{"class":96},[82,62201,61685],{"class":92},[82,62203,62204,62206,62208],{"class":84,"line":35208},[82,62205,54338],{"class":92},[82,62207,54173],{"class":53863},[82,62209,53870],{"class":92},[82,62211,62212,62214,62216,62218,62220,62222],{"class":84,"line":35214},[82,62213,53904],{"class":92},[82,62215,54173],{"class":53863},[82,62217,56046],{"class":2384},[82,62219,113],{"class":92},[82,62221,57834],{"class":96},[82,62223,53870],{"class":92},[82,62225,62226,62228,62230,62233,62235],{"class":84,"line":35220},[82,62227,57794],{"class":92},[82,62229,19],{"class":53863},[82,62231,62232],{"class":92},">对人类来说会不会太超前了？\u003C\u002F",[82,62234,19],{"class":53863},[82,62236,53870],{"class":92},[82,62238,62239,62241,62243,62245,62247,62250],{"class":84,"line":35226},[82,62240,57794],{"class":92},[82,62242,3755],{"class":53863},[82,62244,56046],{"class":2384},[82,62246,113],{"class":92},[82,62248,62249],{"class":96},"\"slider-indicator\"",[82,62251,53870],{"class":92},[82,62253,62254,62256,62258,62260,62262,62265,62267,62269],{"class":84,"line":35237},[82,62255,57862],{"class":92},[82,62257,29],{"class":53863},[82,62259,56046],{"class":2384},[82,62261,113],{"class":92},[82,62263,62264],{"class":96},"\"active\"",[82,62266,57874],{"class":92},[82,62268,29],{"class":53863},[82,62270,53870],{"class":92},[82,62272,62273,62275,62277,62279,62281],{"class":84,"line":35243},[82,62274,57862],{"class":92},[82,62276,29],{"class":53863},[82,62278,57874],{"class":92},[82,62280,29],{"class":53863},[82,62282,53870],{"class":92},[82,62284,62285,62287,62289,62291,62293],{"class":84,"line":35263},[82,62286,57862],{"class":92},[82,62288,29],{"class":53863},[82,62290,57874],{"class":92},[82,62292,29],{"class":53863},[82,62294,53870],{"class":92},[82,62296,62297,62299,62301,62303,62305],{"class":84,"line":35269},[82,62298,57862],{"class":92},[82,62300,29],{"class":53863},[82,62302,57874],{"class":92},[82,62304,29],{"class":53863},[82,62306,53870],{"class":92},[82,62308,62309,62311,62313,62315,62317],{"class":84,"line":35280},[82,62310,57862],{"class":92},[82,62312,29],{"class":53863},[82,62314,57874],{"class":92},[82,62316,29],{"class":53863},[82,62318,53870],{"class":92},[82,62320,62321,62323,62325,62327,62329],{"class":84,"line":35286},[82,62322,57862],{"class":92},[82,62324,29],{"class":53863},[82,62326,57874],{"class":92},[82,62328,29],{"class":53863},[82,62330,53870],{"class":92},[82,62332,62333,62335,62337,62339,62341],{"class":84,"line":35292},[82,62334,57862],{"class":92},[82,62336,29],{"class":53863},[82,62338,57874],{"class":92},[82,62340,29],{"class":53863},[82,62342,53870],{"class":92},[82,62344,62345,62347,62349,62351,62353],{"class":84,"line":35298},[82,62346,57862],{"class":92},[82,62348,29],{"class":53863},[82,62350,57874],{"class":92},[82,62352,29],{"class":53863},[82,62354,53870],{"class":92},[82,62356,62357,62359,62361],{"class":84,"line":35304},[82,62358,57967],{"class":92},[82,62360,3755],{"class":53863},[82,62362,53870],{"class":92},[82,62364,62365,62367,62369,62371,62373,62376],{"class":84,"line":35310},[82,62366,57794],{"class":92},[82,62368,54173],{"class":53863},[82,62370,56046],{"class":2384},[82,62372,113],{"class":92},[82,62374,62375],{"class":96},"\"toggle\"",[82,62377,53870],{"class":92},[82,62379,62380,62382,62384,62386,62388,62391,62393,62396,62398,62400],{"class":84,"line":35316},[82,62381,57862],{"class":92},[82,62383,56447],{"class":53863},[82,62385,56046],{"class":2384},[82,62387,113],{"class":92},[82,62389,62390],{"class":96},"\"prev\"",[82,62392,3709],{"class":92},[82,62394,62395],{"class":88},"&lt;",[82,62397,54347],{"class":92},[82,62399,56447],{"class":53863},[82,62401,53870],{"class":92},[82,62403,62404,62406,62408,62410,62412,62415,62417,62420,62422,62424],{"class":84,"line":35322},[82,62405,57862],{"class":92},[82,62407,56447],{"class":53863},[82,62409,56046],{"class":2384},[82,62411,113],{"class":92},[82,62413,62414],{"class":96},"\"next\"",[82,62416,3709],{"class":92},[82,62418,62419],{"class":88},"&gt;",[82,62421,54347],{"class":92},[82,62423,56447],{"class":53863},[82,62425,53870],{"class":92},[82,62427,62428,62430,62432],{"class":84,"line":35342},[82,62429,57967],{"class":92},[82,62431,54173],{"class":53863},[82,62433,53870],{"class":92},[82,62435,62436,62438,62440],{"class":84,"line":35348},[82,62437,54338],{"class":92},[82,62439,54173],{"class":53863},[82,62441,53870],{"class":92},[82,62443,62444,62446,62448],{"class":84,"line":35364},[82,62445,54977],{"class":92},[82,62447,54173],{"class":53863},[82,62449,53870],{"class":92},[82,62451,62452,62454,62456],{"class":84,"line":35370},[82,62453,54705],{"class":92},[82,62455,54375],{"class":53863},[82,62457,53870],{"class":92},[82,62459,62460],{"class":84,"line":35384},[82,62461,62462],{"class":92},"    \u002F\u002F 1. 初始数据\n",[82,62464,62465],{"class":84,"line":35390},[82,62466,62467],{"class":92},"    const data = [\n",[82,62469,62470],{"class":84,"line":35405},[82,62471,62472],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[82,62474,62475],{"class":84,"line":35411},[82,62476,62477],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[82,62479,62480],{"class":84,"line":35420},[82,62481,62482],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[82,62484,62485],{"class":84,"line":35426},[82,62486,62487],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[82,62489,62490],{"class":84,"line":35435},[82,62491,62492],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[82,62494,62495],{"class":84,"line":35441},[82,62496,62497],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[82,62499,62500],{"class":84,"line":35447},[82,62501,62502],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[82,62504,62505],{"class":84,"line":35456},[82,62506,62507],{"class":92},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[82,62509,62510],{"class":84,"line":35462},[82,62511,55669],{"class":92},[82,62513,62514],{"class":84,"line":35473},[82,62515,62516],{"class":92},"    \u002F\u002F 获取元素\n",[82,62518,62519],{"class":84,"line":35479},[82,62520,62521],{"class":92},"    const img = document.querySelector('.slider-wrapper img')\n",[82,62523,62524],{"class":84,"line":35498},[82,62525,62526],{"class":92},"    const p = document.querySelector('.slider-footer p')\n",[82,62528,62529],{"class":84,"line":35504},[82,62530,62531],{"class":92},"    const footer = document.querySelector('.slider-footer')\n",[82,62533,62534],{"class":84,"line":35515},[82,62535,62536],{"class":92},"    \u002F\u002F 1. 右按钮业务\n",[82,62538,62539],{"class":84,"line":35521},[82,62540,62541],{"class":92},"    \u002F\u002F 1.1 获取右侧按钮 \n",[82,62543,62544],{"class":84,"line":35541},[82,62545,62546],{"class":92},"    const next = document.querySelector('.next')\n",[82,62548,62549],{"class":84,"line":35557},[82,62550,62551],{"class":92},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[82,62553,62554],{"class":84,"line":35563},[82,62555,62556],{"class":92},"    \u002F\u002F 1.2 注册点击事件\n",[82,62558,62559],{"class":84,"line":35577},[82,62560,486],{"emptyLinePlaceholder":485},[82,62562,62563],{"class":84,"line":35583},[82,62564,62565],{"class":92},"    next.addEventListener('click', function () {\n",[82,62567,62568],{"class":84,"line":35589},[82,62569,62570],{"class":92},"      \u002F\u002F console.log(11)\n",[82,62572,62573],{"class":84,"line":35600},[82,62574,62575],{"class":92},"      i++\n",[82,62577,62578],{"class":84,"line":35606},[82,62579,62580],{"class":92},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[82,62582,62583],{"class":84,"line":35612},[82,62584,62585],{"class":92},"      \u002F\u002F if (i >= 8) {\n",[82,62587,62588],{"class":84,"line":35622},[82,62589,62590],{"class":92},"      \u002F\u002F   i = 0\n",[82,62592,62593],{"class":84,"line":35628},[82,62594,62595],{"class":92},"      \u002F\u002F }\n",[82,62597,62598],{"class":84,"line":35639},[82,62599,62600],{"class":92},"      i = i >= data.length ? 0 : i\n",[82,62602,62603],{"class":84,"line":35645},[82,62604,62605],{"class":92},"      \u002F\u002F 1.3 得到对应的对象\n",[82,62607,62608],{"class":84,"line":35655},[82,62609,62610],{"class":92},"      \u002F\u002F console.log(data[i])\n",[82,62612,62613],{"class":84,"line":35660},[82,62614,62615],{"class":92},"      \u002F\u002F 调用函数\n",[82,62617,62618],{"class":84,"line":35666},[82,62619,62620],{"class":92},"      toggle()\n",[82,62622,62623],{"class":84,"line":35715},[82,62624,36029],{"class":92},[82,62626,62627],{"class":84,"line":35762},[82,62628,486],{"emptyLinePlaceholder":485},[82,62630,62631],{"class":84,"line":35767},[82,62632,62633],{"class":92},"    \u002F\u002F 2. 左侧按钮业务\n",[82,62635,62636],{"class":84,"line":35773},[82,62637,62638],{"class":92},"    \u002F\u002F 2.1 获取左侧按钮 \n",[82,62640,62641],{"class":84,"line":35792},[82,62642,62643],{"class":92},"    const prev = document.querySelector('.prev')\n",[82,62645,62646],{"class":84,"line":35798},[82,62647,62556],{"class":92},[82,62649,62650],{"class":84,"line":35817},[82,62651,62652],{"class":92},"    prev.addEventListener('click', function () {\n",[82,62654,62655],{"class":84,"line":35823},[82,62656,62657],{"class":92},"      i--\n",[82,62659,62660],{"class":84,"line":35829},[82,62661,62662],{"class":92},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[82,62664,62665],{"class":84,"line":35839},[82,62666,62667],{"class":92},"      \u002F\u002F if (i \u003C 0) {\n",[82,62669,62670],{"class":84,"line":35844},[82,62671,62672],{"class":92},"      \u002F\u002F   i = 7\n",[82,62674,62675],{"class":84,"line":35850},[82,62676,62595],{"class":92},[82,62678,62679],{"class":84,"line":35866},[82,62680,62681],{"class":92},"      i = i \u003C 0 ? data.length - 1 : i\n",[82,62683,62684],{"class":84,"line":35911},[82,62685,62605],{"class":92},[82,62687,62688],{"class":84,"line":35917},[82,62689,62610],{"class":92},[82,62691,62692],{"class":84,"line":35923},[82,62693,62615],{"class":92},[82,62695,62696],{"class":84,"line":35929},[82,62697,62620],{"class":92},[82,62699,62700],{"class":84,"line":35940},[82,62701,36029],{"class":92},[82,62703,62704],{"class":84,"line":35946},[82,62705,486],{"emptyLinePlaceholder":485},[82,62707,62708],{"class":84,"line":35952},[82,62709,62710],{"class":92},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[82,62712,62713],{"class":84,"line":35958},[82,62714,62715],{"class":92},"    function toggle() {\n",[82,62717,62718],{"class":84,"line":35976},[82,62719,62720],{"class":92},"      \u002F\u002F 1.4 渲染对应的数据\n",[82,62722,62723],{"class":84,"line":35990},[82,62724,62725],{"class":92},"      img.src = data[i].url\n",[82,62727,62728],{"class":84,"line":35999},[82,62729,62730],{"class":92},"      p.innerHTML = data[i].title\n",[82,62732,62733],{"class":84,"line":36008},[82,62734,62735],{"class":92},"      footer.style.backgroundColor = data[i].color\n",[82,62737,62738],{"class":84,"line":36017},[82,62739,62740],{"class":92},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[82,62742,62743],{"class":84,"line":36026},[82,62744,62745],{"class":92},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[82,62747,62748],{"class":84,"line":36032},[82,62749,62750],{"class":92},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[82,62752,62753],{"class":84,"line":36038},[82,62754,4787],{"class":92},[82,62756,62757],{"class":84,"line":36046},[82,62758,486],{"emptyLinePlaceholder":485},[82,62760,62761],{"class":84,"line":36051},[82,62762,62763],{"class":92},"    \u002F\u002F 3. 自动播放模块\n",[82,62765,62766],{"class":84,"line":36057},[82,62767,62768],{"class":92},"    let timerId = setInterval(function () {\n",[82,62770,62771],{"class":84,"line":36068},[82,62772,62773],{"class":92},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[82,62775,62776],{"class":84,"line":36074},[82,62777,62778],{"class":92},"      next.click()\n",[82,62780,62781],{"class":84,"line":36094},[82,62782,62783],{"class":92},"    }, 1000)\n",[82,62785,62786],{"class":84,"line":36100},[82,62787,486],{"emptyLinePlaceholder":485},[82,62789,62790],{"class":84,"line":36106},[82,62791,62792],{"class":92},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[82,62794,62795],{"class":84,"line":36112},[82,62796,62797],{"class":92},"    const slider = document.querySelector('.slider')\n",[82,62799,62800],{"class":84,"line":36129},[82,62801,62802],{"class":92},"    \u002F\u002F 注册事件\n",[82,62804,62805],{"class":84,"line":36135},[82,62806,62807],{"class":92},"    slider.addEventListener('mouseenter', function () {\n",[82,62809,62810],{"class":84,"line":36141},[82,62811,62812],{"class":92},"      \u002F\u002F 停止定时器\n",[82,62814,62815],{"class":84,"line":36147},[82,62816,62817],{"class":92},"      clearInterval(timerId)\n",[82,62819,62820],{"class":84,"line":36153},[82,62821,36029],{"class":92},[82,62823,62824],{"class":84,"line":36159},[82,62825,486],{"emptyLinePlaceholder":485},[82,62827,62828],{"class":84,"line":36186},[82,62829,62830],{"class":92},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[82,62832,62833],{"class":84,"line":36210},[82,62834,62802],{"class":92},[82,62836,62837],{"class":84,"line":36216},[82,62838,62839],{"class":92},"    slider.addEventListener('mouseleave', function () {\n",[82,62841,62842],{"class":84,"line":36222},[82,62843,62812],{"class":92},[82,62845,62846],{"class":84,"line":36228},[82,62847,62848],{"class":92},"      if (timerId) clearInterval(timerId)\n",[82,62850,62851],{"class":84,"line":36239},[82,62852,62853],{"class":92},"      \u002F\u002F 开启定时器\n",[82,62855,62856],{"class":84,"line":36250},[82,62857,62858],{"class":92},"      timerId = setInterval(function () {\n",[82,62860,62861],{"class":84,"line":36256},[82,62862,62863],{"class":92},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[82,62865,62866],{"class":84,"line":36273},[82,62867,62868],{"class":92},"        next.click()\n",[82,62870,62871],{"class":84,"line":36296},[82,62872,62873],{"class":92},"      }, 1000)\n",[82,62875,62876],{"class":84,"line":36319},[82,62877,36029],{"class":92},[82,62879,62880,62882,62884],{"class":84,"line":36325},[82,62881,54977],{"class":92},[82,62883,54375],{"class":53863},[82,62885,53870],{"class":92},[82,62887,62888,62890,62892],{"class":84,"line":36330},[82,62889,54347],{"class":92},[82,62891,54362],{"class":53863},[82,62893,53870],{"class":92},[82,62895,62896],{"class":84,"line":36339},[82,62897,486],{"emptyLinePlaceholder":485},[82,62899,62900,62902,62904],{"class":84,"line":36349},[82,62901,54347],{"class":92},[82,62903,53198],{"class":53863},[82,62905,53870],{"class":92},[24582,62907,62909],{"id":62908},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62911,62912],{},"小米搜索框案例：",[73,62914,62916],{"className":53196,"code":62915,"language":53198,"meta":78,"style":78},"\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",[32,62917,62918,62928,62942,62946,62954,62968,62988,63008,63020,63028,63034,63044,63054,63066,63070,63074,63081,63085,63096,63100,63104,63111,63122,63135,63149,63153,63157,63166,63178,63190,63204,63217,63230,63248,63259,63263,63267,63276,63293,63297,63301,63308,63318,63328,63339,63352,63364,63380,63391,63403,63407,63411,63419,63430,63447,63459,63471,63482,63486,63490,63501,63512,63516,63524,63528,63536,63540,63548,63563,63586,63601,63632,63659,63686,63713,63740,63767,63794,63803,63811,63819,63824,63844,63864,63869,63874,63892,63897,63907,63912,63926,63931,63936,63953,63962,63974,63978,63986,63994,63998],{"__ignoreMap":78},[82,62919,62920,62922,62924,62926],{"class":84,"line":85},[82,62921,53860],{"class":92},[82,62923,53864],{"class":53863},[82,62925,53867],{"class":2384},[82,62927,53870],{"class":92},[82,62929,62930,62932,62934,62936,62938,62940],{"class":84,"line":157},[82,62931,3659],{"class":92},[82,62933,53198],{"class":53863},[82,62935,53879],{"class":2384},[82,62937,113],{"class":92},[82,62939,53884],{"class":96},[82,62941,53870],{"class":92},[82,62943,62944],{"class":84,"line":404},[82,62945,486],{"emptyLinePlaceholder":485},[82,62947,62948,62950,62952],{"class":84,"line":413},[82,62949,3659],{"class":92},[82,62951,53897],{"class":53863},[82,62953,53870],{"class":92},[82,62955,62956,62958,62960,62962,62964,62966],{"class":84,"line":508},[82,62957,53904],{"class":92},[82,62959,53907],{"class":53863},[82,62961,53910],{"class":2384},[82,62963,113],{"class":92},[82,62965,53915],{"class":96},[82,62967,53870],{"class":92},[82,62969,62970,62972,62974,62976,62978,62980,62982,62984,62986],{"class":84,"line":513},[82,62971,53904],{"class":92},[82,62973,53907],{"class":53863},[82,62975,53926],{"class":2384},[82,62977,113],{"class":92},[82,62979,53931],{"class":96},[82,62981,53934],{"class":2384},[82,62983,113],{"class":92},[82,62985,53939],{"class":96},[82,62987,53870],{"class":92},[82,62989,62990,62992,62994,62996,62998,63000,63002,63004,63006],{"class":84,"line":1388},[82,62991,53904],{"class":92},[82,62993,53907],{"class":53863},[82,62995,17506],{"class":2384},[82,62997,113],{"class":92},[82,62999,53954],{"class":96},[82,63001,53934],{"class":2384},[82,63003,113],{"class":92},[82,63005,53961],{"class":96},[82,63007,53870],{"class":92},[82,63009,63010,63012,63014,63016,63018],{"class":84,"line":1394},[82,63011,53904],{"class":92},[82,63013,53970],{"class":53863},[82,63015,53973],{"class":92},[82,63017,53970],{"class":53863},[82,63019,53870],{"class":92},[82,63021,63022,63024,63026],{"class":84,"line":1399},[82,63023,53904],{"class":92},[82,63025,2671],{"class":53863},[82,63027,53870],{"class":92},[82,63029,63030,63032],{"class":84,"line":1430},[82,63031,53990],{"class":53863},[82,63033,1349],{"class":92},[82,63035,63036,63038,63040,63042],{"class":84,"line":1818},[82,63037,53997],{"class":88},[82,63039,1357],{"class":92},[82,63041,2244],{"class":88},[82,63043,3909],{"class":92},[82,63045,63046,63048,63050,63052],{"class":84,"line":2082},[82,63047,54008],{"class":88},[82,63049,1357],{"class":92},[82,63051,2244],{"class":88},[82,63053,3909],{"class":92},[82,63055,63056,63059,63061,63064],{"class":84,"line":2233},[82,63057,63058],{"class":88},"            box-sizing",[82,63060,1357],{"class":92},[82,63062,63063],{"class":88},"border-box",[82,63065,3909],{"class":92},[82,63067,63068],{"class":84,"line":2255},[82,63069,5128],{"class":92},[82,63071,63072],{"class":84,"line":2260},[82,63073,486],{"emptyLinePlaceholder":485},[82,63075,63076,63079],{"class":84,"line":2298},[82,63077,63078],{"class":53863},"        ul",[82,63080,1349],{"class":92},[82,63082,63083],{"class":84,"line":2303},[82,63084,486],{"emptyLinePlaceholder":485},[82,63086,63087,63090,63092,63094],{"class":84,"line":2321},[82,63088,63089],{"class":88},"            list-style",[82,63091,1357],{"class":92},[82,63093,57297],{"class":88},[82,63095,3909],{"class":92},[82,63097,63098],{"class":84,"line":2533},[82,63099,5128],{"class":92},[82,63101,63102],{"class":84,"line":2538},[82,63103,486],{"emptyLinePlaceholder":485},[82,63105,63106,63109],{"class":84,"line":2548},[82,63107,63108],{"class":2384},"        .mi",[82,63110,1349],{"class":92},[82,63112,63113,63116,63118,63120],{"class":84,"line":2579},[82,63114,63115],{"class":88},"            position",[82,63117,1357],{"class":92},[82,63119,57324],{"class":88},[82,63121,3909],{"class":92},[82,63123,63124,63126,63128,63131,63133],{"class":84,"line":2585},[82,63125,54046],{"class":88},[82,63127,1357],{"class":92},[82,63129,63130],{"class":88},"223",[82,63132,54054],{"class":112},[82,63134,3909],{"class":92},[82,63136,63137,63139,63141,63143,63145,63147],{"class":84,"line":4350},[82,63138,53997],{"class":88},[82,63140,1357],{"class":92},[82,63142,3069],{"class":88},[82,63144,54054],{"class":112},[82,63146,54118],{"class":88},[82,63148,3909],{"class":92},[82,63150,63151],{"class":84,"line":4355},[82,63152,5128],{"class":92},[82,63154,63155],{"class":84,"line":4360},[82,63156,486],{"emptyLinePlaceholder":485},[82,63158,63159,63161,63164],{"class":84,"line":4365},[82,63160,63108],{"class":2384},[82,63162,63163],{"class":53863}," input",[82,63165,1349],{"class":92},[82,63167,63168,63170,63172,63174,63176],{"class":84,"line":4379},[82,63169,54046],{"class":88},[82,63171,1357],{"class":92},[82,63173,63130],{"class":88},[82,63175,54054],{"class":112},[82,63177,3909],{"class":92},[82,63179,63180,63182,63184,63186,63188],{"class":84,"line":4384},[82,63181,54061],{"class":88},[82,63183,1357],{"class":92},[82,63185,3361],{"class":88},[82,63187,54054],{"class":112},[82,63189,3909],{"class":92},[82,63191,63192,63194,63196,63198,63200,63202],{"class":84,"line":5176},[82,63193,54008],{"class":88},[82,63195,1357],{"class":92},[82,63197,2244],{"class":88},[82,63199,4638],{"class":88},[82,63201,54054],{"class":112},[82,63203,3909],{"class":92},[82,63205,63206,63209,63211,63213,63215],{"class":84,"line":5190},[82,63207,63208],{"class":88},"            font-size",[82,63210,1357],{"class":92},[82,63212,3305],{"class":88},[82,63214,54054],{"class":112},[82,63216,3909],{"class":92},[82,63218,63219,63222,63224,63226,63228],{"class":84,"line":5198},[82,63220,63221],{"class":88},"            line-height",[82,63223,1357],{"class":92},[82,63225,3361],{"class":88},[82,63227,54054],{"class":112},[82,63229,3909],{"class":92},[82,63231,63232,63235,63237,63239,63241,63243,63246],{"class":84,"line":5203},[82,63233,63234],{"class":88},"            border",[82,63236,1357],{"class":92},[82,63238,2283],{"class":88},[82,63240,54054],{"class":112},[82,63242,54083],{"class":88},[82,63244,63245],{"class":88}," #e0e0e0",[82,63247,3909],{"class":92},[82,63249,63250,63253,63255,63257],{"class":84,"line":5209},[82,63251,63252],{"class":88},"            outline",[82,63254,1357],{"class":92},[82,63256,57297],{"class":88},[82,63258,3909],{"class":92},[82,63260,63261],{"class":84,"line":5215},[82,63262,5128],{"class":92},[82,63264,63265],{"class":84,"line":5220},[82,63266,486],{"emptyLinePlaceholder":485},[82,63268,63269,63271,63274],{"class":84,"line":10539},[82,63270,63108],{"class":2384},[82,63272,63273],{"class":2384}," .search",[82,63275,1349],{"class":92},[82,63277,63278,63280,63282,63284,63286,63288,63291],{"class":84,"line":10563},[82,63279,63234],{"class":88},[82,63281,1357],{"class":92},[82,63283,2283],{"class":88},[82,63285,54054],{"class":112},[82,63287,54083],{"class":88},[82,63289,63290],{"class":88}," #ff6700",[82,63292,3909],{"class":92},[82,63294,63295],{"class":84,"line":10568},[82,63296,5128],{"class":92},[82,63298,63299],{"class":84,"line":10574},[82,63300,486],{"emptyLinePlaceholder":485},[82,63302,63303,63306],{"class":84,"line":10601},[82,63304,63305],{"class":2384},"        .result-list",[82,63307,1349],{"class":92},[82,63309,63310,63312,63314,63316],{"class":84,"line":10606},[82,63311,54034],{"class":88},[82,63313,1357],{"class":92},[82,63315,57297],{"class":88},[82,63317,3909],{"class":92},[82,63319,63320,63322,63324,63326],{"class":84,"line":10612},[82,63321,63115],{"class":88},[82,63323,1357],{"class":92},[82,63325,57391],{"class":88},[82,63327,3909],{"class":92},[82,63329,63330,63333,63335,63337],{"class":84,"line":10624},[82,63331,63332],{"class":88},"            left",[82,63334,1357],{"class":92},[82,63336,2244],{"class":88},[82,63338,3909],{"class":92},[82,63340,63341,63344,63346,63348,63350],{"class":84,"line":10636},[82,63342,63343],{"class":88},"            top",[82,63345,1357],{"class":92},[82,63347,3361],{"class":88},[82,63349,54054],{"class":112},[82,63351,3909],{"class":92},[82,63353,63354,63356,63358,63360,63362],{"class":84,"line":10648},[82,63355,54046],{"class":88},[82,63357,1357],{"class":92},[82,63359,63130],{"class":88},[82,63361,54054],{"class":112},[82,63363,3909],{"class":92},[82,63365,63366,63368,63370,63372,63374,63376,63378],{"class":84,"line":12307},[82,63367,63234],{"class":88},[82,63369,1357],{"class":92},[82,63371,2283],{"class":88},[82,63373,54054],{"class":112},[82,63375,54083],{"class":88},[82,63377,63290],{"class":88},[82,63379,3909],{"class":92},[82,63381,63382,63385,63387,63389],{"class":84,"line":12332},[82,63383,63384],{"class":88},"            border-top",[82,63386,1357],{"class":92},[82,63388,2244],{"class":88},[82,63390,3909],{"class":92},[82,63392,63393,63396,63398,63401],{"class":84,"line":12355},[82,63394,63395],{"class":88},"            background",[82,63397,1357],{"class":92},[82,63399,63400],{"class":88},"#fff",[82,63402,3909],{"class":92},[82,63404,63405],{"class":84,"line":12379},[82,63406,5128],{"class":92},[82,63408,63409],{"class":84,"line":12384},[82,63410,486],{"emptyLinePlaceholder":485},[82,63412,63413,63415,63417],{"class":84,"line":12389},[82,63414,63305],{"class":2384},[82,63416,4014],{"class":53863},[82,63418,1349],{"class":92},[82,63420,63421,63423,63425,63428],{"class":84,"line":12394},[82,63422,54034],{"class":88},[82,63424,1357],{"class":92},[82,63426,63427],{"class":88},"block",[82,63429,3909],{"class":92},[82,63431,63432,63434,63436,63438,63440,63443,63445],{"class":84,"line":12403},[82,63433,54008],{"class":88},[82,63435,1357],{"class":92},[82,63437,3102],{"class":88},[82,63439,54054],{"class":112},[82,63441,63442],{"class":88}," 15",[82,63444,54054],{"class":112},[82,63446,3909],{"class":92},[82,63448,63449,63451,63453,63455,63457],{"class":84,"line":12408},[82,63450,63208],{"class":88},[82,63452,1357],{"class":92},[82,63454,3254],{"class":88},[82,63456,54054],{"class":112},[82,63458,3909],{"class":92},[82,63460,63461,63464,63466,63469],{"class":84,"line":12414},[82,63462,63463],{"class":88},"            color",[82,63465,1357],{"class":92},[82,63467,63468],{"class":88},"#424242",[82,63470,3909],{"class":92},[82,63472,63473,63476,63478,63480],{"class":84,"line":12435},[82,63474,63475],{"class":88},"            text-decoration",[82,63477,1357],{"class":92},[82,63479,57297],{"class":88},[82,63481,3909],{"class":92},[82,63483,63484],{"class":84,"line":12441},[82,63485,5128],{"class":92},[82,63487,63488],{"class":84,"line":12455},[82,63489,486],{"emptyLinePlaceholder":485},[82,63491,63492,63494,63496,63499],{"class":84,"line":12461},[82,63493,63305],{"class":2384},[82,63495,4014],{"class":53863},[82,63497,63498],{"class":2384},":hover",[82,63500,1349],{"class":92},[82,63502,63503,63505,63507,63510],{"class":84,"line":12488},[82,63504,54202],{"class":88},[82,63506,1357],{"class":92},[82,63508,63509],{"class":88},"#eee",[82,63511,3909],{"class":92},[82,63513,63514],{"class":84,"line":12497},[82,63515,5128],{"class":92},[82,63517,63518,63520,63522],{"class":84,"line":12503},[82,63519,54338],{"class":92},[82,63521,2671],{"class":53863},[82,63523,53870],{"class":92},[82,63525,63526],{"class":84,"line":12511},[82,63527,486],{"emptyLinePlaceholder":485},[82,63529,63530,63532,63534],{"class":84,"line":12516},[82,63531,54347],{"class":92},[82,63533,53897],{"class":53863},[82,63535,53870],{"class":92},[82,63537,63538],{"class":84,"line":19189},[82,63539,486],{"emptyLinePlaceholder":485},[82,63541,63542,63544,63546],{"class":84,"line":19195},[82,63543,3659],{"class":92},[82,63545,54362],{"class":53863},[82,63547,53870],{"class":92},[82,63549,63550,63552,63554,63556,63558,63561],{"class":84,"line":19218},[82,63551,53904],{"class":92},[82,63553,54173],{"class":53863},[82,63555,56046],{"class":2384},[82,63557,113],{"class":92},[82,63559,63560],{"class":96},"\"mi\"",[82,63562,53870],{"class":92},[82,63564,63565,63567,63569,63571,63573,63576,63579,63581,63584],{"class":84,"line":19224},[82,63566,57862],{"class":92},[82,63568,56381],{"class":53863},[82,63570,56384],{"class":2384},[82,63572,113],{"class":92},[82,63574,63575],{"class":96},"\"search\"",[82,63577,63578],{"class":2384}," placeholder",[82,63580,113],{"class":92},[82,63582,63583],{"class":96},"\"小米笔记本\"",[82,63585,53870],{"class":92},[82,63587,63588,63590,63592,63594,63596,63599],{"class":84,"line":19247},[82,63589,57862],{"class":92},[82,63591,3755],{"class":53863},[82,63593,56046],{"class":2384},[82,63595,113],{"class":92},[82,63597,63598],{"class":96},"\"result-list\"",[82,63600,53870],{"class":92},[82,63602,63603,63606,63608,63611,63613,63616,63618,63621,63624,63626,63628,63630],{"class":84,"line":19261},[82,63604,63605],{"class":92},"            \u003C",[82,63607,29],{"class":53863},[82,63609,63610],{"class":92},">\u003C",[82,63612,323],{"class":53863},[82,63614,63615],{"class":2384}," href",[82,63617,113],{"class":92},[82,63619,63620],{"class":96},"\"#\"",[82,63622,63623],{"class":92},">全部商品\u003C\u002F",[82,63625,323],{"class":53863},[82,63627,57874],{"class":92},[82,63629,29],{"class":53863},[82,63631,53870],{"class":92},[82,63633,63634,63636,63638,63640,63642,63644,63646,63648,63651,63653,63655,63657],{"class":84,"line":19281},[82,63635,63605],{"class":92},[82,63637,29],{"class":53863},[82,63639,63610],{"class":92},[82,63641,323],{"class":53863},[82,63643,63615],{"class":2384},[82,63645,113],{"class":92},[82,63647,63620],{"class":96},[82,63649,63650],{"class":92},">小米11\u003C\u002F",[82,63652,323],{"class":53863},[82,63654,57874],{"class":92},[82,63656,29],{"class":53863},[82,63658,53870],{"class":92},[82,63660,63661,63663,63665,63667,63669,63671,63673,63675,63678,63680,63682,63684],{"class":84,"line":19287},[82,63662,63605],{"class":92},[82,63664,29],{"class":53863},[82,63666,63610],{"class":92},[82,63668,323],{"class":53863},[82,63670,63615],{"class":2384},[82,63672,113],{"class":92},[82,63674,63620],{"class":96},[82,63676,63677],{"class":92},">小米10S\u003C\u002F",[82,63679,323],{"class":53863},[82,63681,57874],{"class":92},[82,63683,29],{"class":53863},[82,63685,53870],{"class":92},[82,63687,63688,63690,63692,63694,63696,63698,63700,63702,63705,63707,63709,63711],{"class":84,"line":19298},[82,63689,63605],{"class":92},[82,63691,29],{"class":53863},[82,63693,63610],{"class":92},[82,63695,323],{"class":53863},[82,63697,63615],{"class":2384},[82,63699,113],{"class":92},[82,63701,63620],{"class":96},[82,63703,63704],{"class":92},">小米笔记本\u003C\u002F",[82,63706,323],{"class":53863},[82,63708,57874],{"class":92},[82,63710,29],{"class":53863},[82,63712,53870],{"class":92},[82,63714,63715,63717,63719,63721,63723,63725,63727,63729,63732,63734,63736,63738],{"class":84,"line":19321},[82,63716,63605],{"class":92},[82,63718,29],{"class":53863},[82,63720,63610],{"class":92},[82,63722,323],{"class":53863},[82,63724,63615],{"class":2384},[82,63726,113],{"class":92},[82,63728,63620],{"class":96},[82,63730,63731],{"class":92},">小米手机\u003C\u002F",[82,63733,323],{"class":53863},[82,63735,57874],{"class":92},[82,63737,29],{"class":53863},[82,63739,53870],{"class":92},[82,63741,63742,63744,63746,63748,63750,63752,63754,63756,63759,63761,63763,63765],{"class":84,"line":19343},[82,63743,63605],{"class":92},[82,63745,29],{"class":53863},[82,63747,63610],{"class":92},[82,63749,323],{"class":53863},[82,63751,63615],{"class":2384},[82,63753,113],{"class":92},[82,63755,63620],{"class":96},[82,63757,63758],{"class":92},">黑鲨4\u003C\u002F",[82,63760,323],{"class":53863},[82,63762,57874],{"class":92},[82,63764,29],{"class":53863},[82,63766,53870],{"class":92},[82,63768,63769,63771,63773,63775,63777,63779,63781,63783,63786,63788,63790,63792],{"class":84,"line":19348},[82,63770,63605],{"class":92},[82,63772,29],{"class":53863},[82,63774,63610],{"class":92},[82,63776,323],{"class":53863},[82,63778,63615],{"class":2384},[82,63780,113],{"class":92},[82,63782,63620],{"class":96},[82,63784,63785],{"class":92},">空调\u003C\u002F",[82,63787,323],{"class":53863},[82,63789,57874],{"class":92},[82,63791,29],{"class":53863},[82,63793,53870],{"class":92},[82,63795,63796,63799,63801],{"class":84,"line":19354},[82,63797,63798],{"class":92},"        \u003C\u002F",[82,63800,3755],{"class":53863},[82,63802,53870],{"class":92},[82,63804,63805,63807,63809],{"class":84,"line":19368},[82,63806,54338],{"class":92},[82,63808,54173],{"class":53863},[82,63810,53870],{"class":92},[82,63812,63813,63815,63817],{"class":84,"line":19381},[82,63814,53904],{"class":92},[82,63816,54375],{"class":53863},[82,63818,53870],{"class":92},[82,63820,63821],{"class":84,"line":19386},[82,63822,63823],{"class":2828},"        \u002F\u002F 1. 获取元素\n",[82,63825,63826,63829,63831,63833,63835,63837,63839,63842],{"class":84,"line":19400},[82,63827,63828],{"class":112},"        const",[82,63830,63163],{"class":88},[82,63832,259],{"class":112},[82,63834,56956],{"class":92},[82,63836,56959],{"class":2384},[82,63838,93],{"class":92},[82,63840,63841],{"class":96},"'[type=search]'",[82,63843,119],{"class":92},[82,63845,63846,63848,63851,63853,63855,63857,63859,63862],{"class":84,"line":19405},[82,63847,63828],{"class":112},[82,63849,63850],{"class":88}," ul",[82,63852,259],{"class":112},[82,63854,56956],{"class":92},[82,63856,56959],{"class":2384},[82,63858,93],{"class":92},[82,63860,63861],{"class":96},"'.result-list'",[82,63863,119],{"class":92},[82,63865,63866],{"class":84,"line":19411},[82,63867,63868],{"class":2828},"        \u002F\u002F console.log(input)\n",[82,63870,63871],{"class":84,"line":19416},[82,63872,63873],{"class":2828},"        \u002F\u002F 2. 监听事件 获得焦点\n",[82,63875,63876,63879,63881,63883,63886,63888,63890],{"class":84,"line":19430},[82,63877,63878],{"class":92},"        input.",[82,63880,60371],{"class":2384},[82,63882,93],{"class":92},[82,63884,63885],{"class":96},"'focus'",[82,63887,100],{"class":92},[82,63889,57009],{"class":112},[82,63891,57012],{"class":92},[82,63893,63894],{"class":84,"line":19435},[82,63895,63896],{"class":2828},"            \u002F\u002F ul显示\n",[82,63898,63899,63902,63904],{"class":84,"line":19440},[82,63900,63901],{"class":92},"            ul.style.display ",[82,63903,113],{"class":112},[82,63905,63906],{"class":96}," 'block'\n",[82,63908,63909],{"class":84,"line":19454},[82,63910,63911],{"class":2828},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[82,63913,63914,63917,63919,63921,63924],{"class":84,"line":19466},[82,63915,63916],{"class":92},"            input.classList.",[82,63918,7926],{"class":2384},[82,63920,93],{"class":92},[82,63922,63923],{"class":96},"'search'",[82,63925,119],{"class":92},[82,63927,63928],{"class":84,"line":19471},[82,63929,63930],{"class":92},"        })\n",[82,63932,63933],{"class":84,"line":19484},[82,63934,63935],{"class":2828},"        \u002F\u002F 3. 监听事件 失去焦点\n",[82,63937,63938,63940,63942,63944,63947,63949,63951],{"class":84,"line":19489},[82,63939,63878],{"class":92},[82,63941,60371],{"class":2384},[82,63943,93],{"class":92},[82,63945,63946],{"class":96},"'blur'",[82,63948,100],{"class":92},[82,63950,57009],{"class":112},[82,63952,57012],{"class":92},[82,63954,63955,63957,63959],{"class":84,"line":19494},[82,63956,63901],{"class":92},[82,63958,113],{"class":112},[82,63960,63961],{"class":96}," 'none'\n",[82,63963,63964,63966,63968,63970,63972],{"class":84,"line":19499},[82,63965,63916],{"class":92},[82,63967,59564],{"class":2384},[82,63969,93],{"class":92},[82,63971,63923],{"class":96},[82,63973,119],{"class":92},[82,63975,63976],{"class":84,"line":19512},[82,63977,63930],{"class":92},[82,63979,63980,63982,63984],{"class":84,"line":19517},[82,63981,54338],{"class":92},[82,63983,54375],{"class":53863},[82,63985,53870],{"class":92},[82,63987,63988,63990,63992],{"class":84,"line":35202},[82,63989,54347],{"class":92},[82,63991,54362],{"class":53863},[82,63993,53870],{"class":92},[82,63995,63996],{"class":84,"line":35208},[82,63997,486],{"emptyLinePlaceholder":485},[82,63999,64000,64002,64004],{"class":84,"line":35214},[82,64001,54347],{"class":92},[82,64003,53198],{"class":53863},[82,64005,53870],{"class":92},[24582,64007,64009],{"id":64008},"_3253-键盘事件","3.2.5.3 键盘事件",[19,64011,64012],{},"评论字数统计案例",[19,64014,64015],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,64017,64018],{},"牢记focus伪类选择器",[53907,64020],{"charSet":64021},"UTF-8",[53907,64023],{"name":64024,"content":64025},"viewport","width=device-width, initial-scale=1.0",[53970,64027,64028],{},"Document",[2671,64030,64031],{},"\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",[56381,64033],{"type":7780},[3755,64035,64036,64039],{},[29,64037,64038],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,64040,64041],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[73,64043,64045],{"className":53196,"code":64044,"language":53198,"meta":78,"style":78},"\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",[32,64046,64047,64057,64071,64075,64083,64097,64117,64137,64150,64158,64165,64178,64192,64202,64212,64216,64220,64227,64239,64251,64263,64275,64304,64317,64321,64325,64334,64345,64357,64368,64379,64391,64402,64414,64430,64442,64446,64450,64461,64472,64482,64494,64498,64502,64510,64521,64531,64542,64554,64567,64579,64591,64595,64599,64608,64620,64631,64644,64655,64669,64673,64677,64684,64696,64708,64718,64722,64726,64735,64747,64757,64761,64765,64776,64786,64805,64818,64822,64826,64836,64846,64850,64854,64865,64876,64888,64900,64904,64908,64919,64930,64944,64948,64952,64963,64973,64985,64989,64997,65005,65009,65017,65032,65051,65091,65104,65112,65126,65146,65154,65169,65192,65210,65225,65244,65264,65284,65292,65300,65308,65316,65336,65356,65361,65378,65387,65391,65396,65412,65420,65424,65429,65446,65451,65476,65480,65484,65489,65494,65502,65510,65514],{"__ignoreMap":78},[82,64048,64049,64051,64053,64055],{"class":84,"line":85},[82,64050,53860],{"class":92},[82,64052,53864],{"class":53863},[82,64054,53867],{"class":2384},[82,64056,53870],{"class":92},[82,64058,64059,64061,64063,64065,64067,64069],{"class":84,"line":157},[82,64060,3659],{"class":92},[82,64062,53198],{"class":53863},[82,64064,53879],{"class":2384},[82,64066,113],{"class":92},[82,64068,53884],{"class":96},[82,64070,53870],{"class":92},[82,64072,64073],{"class":84,"line":404},[82,64074,486],{"emptyLinePlaceholder":485},[82,64076,64077,64079,64081],{"class":84,"line":413},[82,64078,3659],{"class":92},[82,64080,53897],{"class":53863},[82,64082,53870],{"class":92},[82,64084,64085,64087,64089,64091,64093,64095],{"class":84,"line":508},[82,64086,54705],{"class":92},[82,64088,53907],{"class":53863},[82,64090,53910],{"class":2384},[82,64092,113],{"class":92},[82,64094,53915],{"class":96},[82,64096,53870],{"class":92},[82,64098,64099,64101,64103,64105,64107,64109,64111,64113,64115],{"class":84,"line":513},[82,64100,54705],{"class":92},[82,64102,53907],{"class":53863},[82,64104,53926],{"class":2384},[82,64106,113],{"class":92},[82,64108,53931],{"class":96},[82,64110,53934],{"class":2384},[82,64112,113],{"class":92},[82,64114,53939],{"class":96},[82,64116,53870],{"class":92},[82,64118,64119,64121,64123,64125,64127,64129,64131,64133,64135],{"class":84,"line":1388},[82,64120,54705],{"class":92},[82,64122,53907],{"class":53863},[82,64124,17506],{"class":2384},[82,64126,113],{"class":92},[82,64128,53954],{"class":96},[82,64130,53934],{"class":2384},[82,64132,113],{"class":92},[82,64134,53961],{"class":96},[82,64136,53870],{"class":92},[82,64138,64139,64141,64143,64146,64148],{"class":84,"line":1394},[82,64140,54705],{"class":92},[82,64142,53970],{"class":53863},[82,64144,64145],{"class":92},">评论回车发布\u003C\u002F",[82,64147,53970],{"class":53863},[82,64149,53870],{"class":92},[82,64151,64152,64154,64156],{"class":84,"line":1399},[82,64153,54705],{"class":92},[82,64155,2671],{"class":53863},[82,64157,53870],{"class":92},[82,64159,64160,64163],{"class":84,"line":1430},[82,64161,64162],{"class":2384},"    .wrapper",[82,64164,1349],{"class":92},[82,64166,64167,64170,64172,64174,64176],{"class":84,"line":1818},[82,64168,64169],{"class":88},"      min-width",[82,64171,1357],{"class":92},[82,64173,6582],{"class":88},[82,64175,54054],{"class":112},[82,64177,3909],{"class":92},[82,64179,64180,64183,64185,64188,64190],{"class":84,"line":2082},[82,64181,64182],{"class":88},"      max-width",[82,64184,1357],{"class":92},[82,64186,64187],{"class":88},"800",[82,64189,54054],{"class":112},[82,64191,3909],{"class":92},[82,64193,64194,64196,64198,64200],{"class":84,"line":2233},[82,64195,57569],{"class":88},[82,64197,1357],{"class":92},[82,64199,54039],{"class":88},[82,64201,3909],{"class":92},[82,64203,64204,64206,64208,64210],{"class":84,"line":2255},[82,64205,57580],{"class":88},[82,64207,1357],{"class":92},[82,64209,54142],{"class":88},[82,64211,3909],{"class":92},[82,64213,64214],{"class":84,"line":2260},[82,64215,4787],{"class":92},[82,64217,64218],{"class":84,"line":2298},[82,64219,486],{"emptyLinePlaceholder":485},[82,64221,64222,64225],{"class":84,"line":2303},[82,64223,64224],{"class":2384},"    .avatar",[82,64226,1349],{"class":92},[82,64228,64229,64231,64233,64235,64237],{"class":84,"line":2321},[82,64230,57331],{"class":88},[82,64232,1357],{"class":92},[82,64234,3361],{"class":88},[82,64236,54054],{"class":112},[82,64238,3909],{"class":92},[82,64240,64241,64243,64245,64247,64249],{"class":84,"line":2533},[82,64242,57345],{"class":88},[82,64244,1357],{"class":92},[82,64246,3361],{"class":88},[82,64248,54054],{"class":112},[82,64250,3909],{"class":92},[82,64252,64253,64255,64257,64259,64261],{"class":84,"line":2538},[82,64254,57694],{"class":88},[82,64256,1357],{"class":92},[82,64258,3408],{"class":88},[82,64260,3086],{"class":112},[82,64262,3909],{"class":92},[82,64264,64265,64268,64270,64273],{"class":84,"line":2548},[82,64266,64267],{"class":88},"      overflow",[82,64269,1357],{"class":92},[82,64271,64272],{"class":88},"hidden",[82,64274,3909],{"class":92},[82,64276,64277,64280,64282,64285,64287,64290,64292,64295,64297,64299,64302],{"class":84,"line":2579},[82,64278,64279],{"class":88},"      background",[82,64281,1357],{"class":92},[82,64283,64284],{"class":88},"url",[82,64286,93],{"class":92},[82,64288,64289],{"class":108},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[82,64291,725],{"class":92},[82,64293,64294],{"class":88},"no-repeat",[82,64296,19728],{"class":88},[82,64298,27563],{"class":92},[82,64300,64301],{"class":88},"cover",[82,64303,3909],{"class":92},[82,64305,64306,64309,64311,64313,64315],{"class":84,"line":2585},[82,64307,64308],{"class":88},"      margin-right",[82,64310,1357],{"class":92},[82,64312,3451],{"class":88},[82,64314,54054],{"class":112},[82,64316,3909],{"class":92},[82,64318,64319],{"class":84,"line":4350},[82,64320,4787],{"class":92},[82,64322,64323],{"class":84,"line":4355},[82,64324,486],{"emptyLinePlaceholder":485},[82,64326,64327,64329,64332],{"class":84,"line":4360},[82,64328,64162],{"class":2384},[82,64330,64331],{"class":53863}," textarea",[82,64333,1349],{"class":92},[82,64335,64336,64339,64341,64343],{"class":84,"line":4365},[82,64337,64338],{"class":88},"      outline",[82,64340,1357],{"class":92},[82,64342,57297],{"class":88},[82,64344,3909],{"class":92},[82,64346,64347,64350,64352,64355],{"class":84,"line":4379},[82,64348,64349],{"class":88},"      border-color",[82,64351,1357],{"class":92},[82,64353,64354],{"class":88},"transparent",[82,64356,3909],{"class":92},[82,64358,64359,64362,64364,64366],{"class":84,"line":4384},[82,64360,64361],{"class":88},"      resize",[82,64363,1357],{"class":92},[82,64365,57297],{"class":88},[82,64367,3909],{"class":92},[82,64369,64370,64372,64374,64377],{"class":84,"line":5176},[82,64371,64279],{"class":88},[82,64373,1357],{"class":92},[82,64375,64376],{"class":88},"#f5f5f5",[82,64378,3909],{"class":92},[82,64380,64381,64383,64385,64387,64389],{"class":84,"line":5190},[82,64382,57694],{"class":88},[82,64384,1357],{"class":92},[82,64386,3051],{"class":88},[82,64388,54054],{"class":112},[82,64390,3909],{"class":92},[82,64392,64393,64396,64398,64400],{"class":84,"line":5198},[82,64394,64395],{"class":88},"      flex",[82,64397,1357],{"class":92},[82,64399,2283],{"class":88},[82,64401,3909],{"class":92},[82,64403,64404,64406,64408,64410,64412],{"class":84,"line":5203},[82,64405,57255],{"class":88},[82,64407,1357],{"class":92},[82,64409,440],{"class":88},[82,64411,54054],{"class":112},[82,64413,3909],{"class":92},[82,64415,64416,64419,64421,64423,64426,64428],{"class":84,"line":5209},[82,64417,64418],{"class":88},"      transition",[82,64420,1357],{"class":92},[82,64422,30703],{"class":88},[82,64424,64425],{"class":88}," 0.5",[82,64427,3446],{"class":112},[82,64429,3909],{"class":92},[82,64431,64432,64434,64436,64438,64440],{"class":84,"line":5215},[82,64433,57345],{"class":88},[82,64435,1357],{"class":92},[82,64437,3700],{"class":88},[82,64439,54054],{"class":112},[82,64441,3909],{"class":92},[82,64443,64444],{"class":84,"line":5220},[82,64445,4787],{"class":92},[82,64447,64448],{"class":84,"line":10539},[82,64449,486],{"emptyLinePlaceholder":485},[82,64451,64452,64454,64456,64459],{"class":84,"line":10563},[82,64453,64162],{"class":2384},[82,64455,64331],{"class":53863},[82,64457,64458],{"class":2384},":focus",[82,64460,1349],{"class":92},[82,64462,64463,64465,64467,64470],{"class":84,"line":10568},[82,64464,64349],{"class":88},[82,64466,1357],{"class":92},[82,64468,64469],{"class":88},"#e4e4e4",[82,64471,3909],{"class":92},[82,64473,64474,64476,64478,64480],{"class":84,"line":10574},[82,64475,64279],{"class":88},[82,64477,1357],{"class":92},[82,64479,63400],{"class":88},[82,64481,3909],{"class":92},[82,64483,64484,64486,64488,64490,64492],{"class":84,"line":10601},[82,64485,57345],{"class":88},[82,64487,1357],{"class":92},[82,64489,3408],{"class":88},[82,64491,54054],{"class":112},[82,64493,3909],{"class":92},[82,64495,64496],{"class":84,"line":10606},[82,64497,4787],{"class":92},[82,64499,64500],{"class":84,"line":10612},[82,64501,486],{"emptyLinePlaceholder":485},[82,64503,64504,64506,64508],{"class":84,"line":10624},[82,64505,64162],{"class":2384},[82,64507,60025],{"class":53863},[82,64509,1349],{"class":92},[82,64511,64512,64514,64516,64519],{"class":84,"line":10636},[82,64513,64279],{"class":88},[82,64515,1357],{"class":92},[82,64517,64518],{"class":88},"#00aeec",[82,64520,3909],{"class":92},[82,64522,64523,64525,64527,64529],{"class":84,"line":10648},[82,64524,59974],{"class":88},[82,64526,1357],{"class":92},[82,64528,63400],{"class":88},[82,64530,3909],{"class":92},[82,64532,64533,64536,64538,64540],{"class":84,"line":12307},[82,64534,64535],{"class":88},"      border",[82,64537,1357],{"class":92},[82,64539,57297],{"class":88},[82,64541,3909],{"class":92},[82,64543,64544,64546,64548,64550,64552],{"class":84,"line":12332},[82,64545,57694],{"class":88},[82,64547,1357],{"class":92},[82,64549,3051],{"class":88},[82,64551,54054],{"class":112},[82,64553,3909],{"class":92},[82,64555,64556,64559,64561,64563,64565],{"class":84,"line":12355},[82,64557,64558],{"class":88},"      margin-left",[82,64560,1357],{"class":92},[82,64562,440],{"class":88},[82,64564,54054],{"class":112},[82,64566,3909],{"class":92},[82,64568,64569,64571,64573,64575,64577],{"class":84,"line":12379},[82,64570,57331],{"class":88},[82,64572,1357],{"class":92},[82,64574,3114],{"class":88},[82,64576,54054],{"class":112},[82,64578,3909],{"class":92},[82,64580,64581,64584,64586,64589],{"class":84,"line":12384},[82,64582,64583],{"class":88},"      cursor",[82,64585,1357],{"class":92},[82,64587,64588],{"class":88},"pointer",[82,64590,3909],{"class":92},[82,64592,64593],{"class":84,"line":12389},[82,64594,4787],{"class":92},[82,64596,64597],{"class":84,"line":12394},[82,64598,486],{"emptyLinePlaceholder":485},[82,64600,64601,64603,64606],{"class":84,"line":12403},[82,64602,64162],{"class":2384},[82,64604,64605],{"class":2384}," .total",[82,64607,1349],{"class":92},[82,64609,64610,64612,64614,64616,64618],{"class":84,"line":12408},[82,64611,64308],{"class":88},[82,64613,1357],{"class":92},[82,64615,3366],{"class":88},[82,64617,54054],{"class":112},[82,64619,3909],{"class":92},[82,64621,64622,64624,64626,64629],{"class":84,"line":12414},[82,64623,59974],{"class":88},[82,64625,1357],{"class":92},[82,64627,64628],{"class":88},"#999",[82,64630,3909],{"class":92},[82,64632,64633,64636,64638,64640,64642],{"class":84,"line":12435},[82,64634,64635],{"class":88},"      margin-top",[82,64637,1357],{"class":92},[82,64639,3077],{"class":88},[82,64641,54054],{"class":112},[82,64643,3909],{"class":92},[82,64645,64646,64649,64651,64653],{"class":84,"line":12441},[82,64647,64648],{"class":88},"      opacity",[82,64650,1357],{"class":92},[82,64652,2244],{"class":88},[82,64654,3909],{"class":92},[82,64656,64657,64659,64661,64663,64665,64667],{"class":84,"line":12455},[82,64658,64418],{"class":88},[82,64660,1357],{"class":92},[82,64662,30703],{"class":88},[82,64664,64425],{"class":88},[82,64666,3446],{"class":112},[82,64668,3909],{"class":92},[82,64670,64671],{"class":84,"line":12461},[82,64672,4787],{"class":92},[82,64674,64675],{"class":84,"line":12488},[82,64676,486],{"emptyLinePlaceholder":485},[82,64678,64679,64682],{"class":84,"line":12497},[82,64680,64681],{"class":2384},"    .list",[82,64683,1349],{"class":92},[82,64685,64686,64688,64690,64692,64694],{"class":84,"line":12503},[82,64687,64169],{"class":88},[82,64689,1357],{"class":92},[82,64691,6582],{"class":88},[82,64693,54054],{"class":112},[82,64695,3909],{"class":92},[82,64697,64698,64700,64702,64704,64706],{"class":84,"line":12511},[82,64699,64182],{"class":88},[82,64701,1357],{"class":92},[82,64703,64187],{"class":88},[82,64705,54054],{"class":112},[82,64707,3909],{"class":92},[82,64709,64710,64712,64714,64716],{"class":84,"line":12516},[82,64711,57569],{"class":88},[82,64713,1357],{"class":92},[82,64715,54039],{"class":88},[82,64717,3909],{"class":92},[82,64719,64720],{"class":84,"line":19189},[82,64721,4787],{"class":92},[82,64723,64724],{"class":84,"line":19195},[82,64725,486],{"emptyLinePlaceholder":485},[82,64727,64728,64730,64733],{"class":84,"line":19218},[82,64729,64681],{"class":2384},[82,64731,64732],{"class":2384}," .item",[82,64734,1349],{"class":92},[82,64736,64737,64739,64741,64743,64745],{"class":84,"line":19224},[82,64738,57331],{"class":88},[82,64740,1357],{"class":92},[82,64742,3069],{"class":88},[82,64744,3086],{"class":112},[82,64746,3909],{"class":92},[82,64748,64749,64751,64753,64755],{"class":84,"line":19247},[82,64750,57569],{"class":88},[82,64752,1357],{"class":92},[82,64754,54039],{"class":88},[82,64756,3909],{"class":92},[82,64758,64759],{"class":84,"line":19261},[82,64760,4787],{"class":92},[82,64762,64763],{"class":84,"line":19281},[82,64764,486],{"emptyLinePlaceholder":485},[82,64766,64767,64769,64771,64774],{"class":84,"line":19287},[82,64768,64681],{"class":2384},[82,64770,64732],{"class":2384},[82,64772,64773],{"class":2384}," .info",[82,64775,1349],{"class":92},[82,64777,64778,64780,64782,64784],{"class":84,"line":19298},[82,64779,64395],{"class":88},[82,64781,1357],{"class":92},[82,64783,2283],{"class":88},[82,64785,3909],{"class":92},[82,64787,64788,64791,64793,64795,64797,64800,64803],{"class":84,"line":19321},[82,64789,64790],{"class":88},"      border-bottom",[82,64792,1357],{"class":92},[82,64794,2283],{"class":88},[82,64796,54054],{"class":112},[82,64798,64799],{"class":88}," dashed",[82,64801,64802],{"class":88}," #e4e4e4",[82,64804,3909],{"class":92},[82,64806,64807,64810,64812,64814,64816],{"class":84,"line":19343},[82,64808,64809],{"class":88},"      padding-bottom",[82,64811,1357],{"class":92},[82,64813,440],{"class":88},[82,64815,54054],{"class":112},[82,64817,3909],{"class":92},[82,64819,64820],{"class":84,"line":19348},[82,64821,4787],{"class":92},[82,64823,64824],{"class":84,"line":19354},[82,64825,486],{"emptyLinePlaceholder":485},[82,64827,64828,64830,64832,64834],{"class":84,"line":19368},[82,64829,64681],{"class":2384},[82,64831,64732],{"class":2384},[82,64833,9417],{"class":53863},[82,64835,1349],{"class":92},[82,64837,64838,64840,64842,64844],{"class":84,"line":19381},[82,64839,57266],{"class":88},[82,64841,1357],{"class":92},[82,64843,2244],{"class":88},[82,64845,3909],{"class":92},[82,64847,64848],{"class":84,"line":19386},[82,64849,4787],{"class":92},[82,64851,64852],{"class":84,"line":19400},[82,64853,486],{"emptyLinePlaceholder":485},[82,64855,64856,64858,64860,64863],{"class":84,"line":19405},[82,64857,64681],{"class":2384},[82,64859,64732],{"class":2384},[82,64861,64862],{"class":2384}," .name",[82,64864,1349],{"class":92},[82,64866,64867,64869,64871,64874],{"class":84,"line":19411},[82,64868,59974],{"class":88},[82,64870,1357],{"class":92},[82,64872,64873],{"class":88},"#FB7299",[82,64875,3909],{"class":92},[82,64877,64878,64880,64882,64884,64886],{"class":84,"line":19416},[82,64879,57482],{"class":88},[82,64881,1357],{"class":92},[82,64883,3305],{"class":88},[82,64885,54054],{"class":112},[82,64887,3909],{"class":92},[82,64889,64890,64893,64895,64898],{"class":84,"line":19430},[82,64891,64892],{"class":88},"      font-weight",[82,64894,1357],{"class":92},[82,64896,64897],{"class":88},"bold",[82,64899,3909],{"class":92},[82,64901,64902],{"class":84,"line":19435},[82,64903,4787],{"class":92},[82,64905,64906],{"class":84,"line":19440},[82,64907,486],{"emptyLinePlaceholder":485},[82,64909,64910,64912,64914,64917],{"class":84,"line":19454},[82,64911,64681],{"class":2384},[82,64913,64732],{"class":2384},[82,64915,64916],{"class":2384}," .text",[82,64918,1349],{"class":92},[82,64920,64921,64923,64925,64928],{"class":84,"line":19466},[82,64922,59974],{"class":88},[82,64924,1357],{"class":92},[82,64926,64927],{"class":88},"#333",[82,64929,3909],{"class":92},[82,64931,64932,64934,64936,64938,64940,64942],{"class":84,"line":19471},[82,64933,57255],{"class":88},[82,64935,1357],{"class":92},[82,64937,440],{"class":88},[82,64939,54054],{"class":112},[82,64941,6688],{"class":88},[82,64943,3909],{"class":92},[82,64945,64946],{"class":84,"line":19484},[82,64947,4787],{"class":92},[82,64949,64950],{"class":84,"line":19489},[82,64951,486],{"emptyLinePlaceholder":485},[82,64953,64954,64956,64958,64961],{"class":84,"line":19494},[82,64955,64681],{"class":2384},[82,64957,64732],{"class":2384},[82,64959,64960],{"class":2384}," .time",[82,64962,1349],{"class":92},[82,64964,64965,64967,64969,64971],{"class":84,"line":19499},[82,64966,59974],{"class":88},[82,64968,1357],{"class":92},[82,64970,64628],{"class":88},[82,64972,3909],{"class":92},[82,64974,64975,64977,64979,64981,64983],{"class":84,"line":19512},[82,64976,57482],{"class":88},[82,64978,1357],{"class":92},[82,64980,3254],{"class":88},[82,64982,54054],{"class":112},[82,64984,3909],{"class":92},[82,64986,64987],{"class":84,"line":19517},[82,64988,4787],{"class":92},[82,64990,64991,64993,64995],{"class":84,"line":35202},[82,64992,54977],{"class":92},[82,64994,2671],{"class":53863},[82,64996,53870],{"class":92},[82,64998,64999,65001,65003],{"class":84,"line":35208},[82,65000,54347],{"class":92},[82,65002,53897],{"class":53863},[82,65004,53870],{"class":92},[82,65006,65007],{"class":84,"line":35214},[82,65008,486],{"emptyLinePlaceholder":485},[82,65010,65011,65013,65015],{"class":84,"line":35220},[82,65012,3659],{"class":92},[82,65014,54362],{"class":53863},[82,65016,53870],{"class":92},[82,65018,65019,65021,65023,65025,65027,65030],{"class":84,"line":35226},[82,65020,54705],{"class":92},[82,65022,54173],{"class":53863},[82,65024,56046],{"class":2384},[82,65026,113],{"class":92},[82,65028,65029],{"class":96},"\"wrapper\"",[82,65031,53870],{"class":92},[82,65033,65034,65036,65038,65040,65042,65045,65047,65049],{"class":84,"line":35237},[82,65035,53904],{"class":92},[82,65037,3199],{"class":53863},[82,65039,56046],{"class":2384},[82,65041,113],{"class":92},[82,65043,65044],{"class":96},"\"avatar\"",[82,65046,57874],{"class":92},[82,65048,3199],{"class":53863},[82,65050,53870],{"class":92},[82,65052,65053,65055,65057,65059,65061,65064,65066,65068,65071,65073,65075,65077,65080,65082,65085,65087,65089],{"class":84,"line":35243},[82,65054,53904],{"class":92},[82,65056,56848],{"class":53863},[82,65058,17545],{"class":2384},[82,65060,113],{"class":92},[82,65062,65063],{"class":96},"\"tx\"",[82,65065,63578],{"class":2384},[82,65067,113],{"class":92},[82,65069,65070],{"class":96},"\"发一条友善的评论\"",[82,65072,56871],{"class":2384},[82,65074,113],{"class":92},[82,65076,6297],{"class":96},[82,65078,65079],{"class":2384}," maxlength",[82,65081,113],{"class":92},[82,65083,65084],{"class":96},"\"200\"",[82,65086,57874],{"class":92},[82,65088,56848],{"class":53863},[82,65090,53870],{"class":92},[82,65092,65093,65095,65097,65100,65102],{"class":84,"line":35263},[82,65094,53904],{"class":92},[82,65096,56447],{"class":53863},[82,65098,65099],{"class":92},">发布\u003C\u002F",[82,65101,56447],{"class":53863},[82,65103,53870],{"class":92},[82,65105,65106,65108,65110],{"class":84,"line":35269},[82,65107,54977],{"class":92},[82,65109,54173],{"class":53863},[82,65111,53870],{"class":92},[82,65113,65114,65116,65118,65120,65122,65124],{"class":84,"line":35280},[82,65115,54705],{"class":92},[82,65117,54173],{"class":53863},[82,65119,56046],{"class":2384},[82,65121,113],{"class":92},[82,65123,65029],{"class":96},[82,65125,53870],{"class":92},[82,65127,65128,65130,65132,65134,65136,65139,65142,65144],{"class":84,"line":35286},[82,65129,53904],{"class":92},[82,65131,82],{"class":53863},[82,65133,56046],{"class":2384},[82,65135,113],{"class":92},[82,65137,65138],{"class":96},"\"total\"",[82,65140,65141],{"class":92},">0\u002F200字\u003C\u002F",[82,65143,82],{"class":53863},[82,65145,53870],{"class":92},[82,65147,65148,65150,65152],{"class":84,"line":35292},[82,65149,54977],{"class":92},[82,65151,54173],{"class":53863},[82,65153,53870],{"class":92},[82,65155,65156,65158,65160,65162,65164,65167],{"class":84,"line":35298},[82,65157,54705],{"class":92},[82,65159,54173],{"class":53863},[82,65161,56046],{"class":2384},[82,65163,113],{"class":92},[82,65165,65166],{"class":96},"\"list\"",[82,65168,53870],{"class":92},[82,65170,65171,65173,65175,65177,65179,65182,65185,65187,65190],{"class":84,"line":35304},[82,65172,53904],{"class":92},[82,65174,54173],{"class":53863},[82,65176,56046],{"class":2384},[82,65178,113],{"class":92},[82,65180,65181],{"class":96},"\"item\"",[82,65183,65184],{"class":2384}," style",[82,65186,113],{"class":92},[82,65188,65189],{"class":96},"\"display: none;\"",[82,65191,53870],{"class":92},[82,65193,65194,65196,65198,65200,65202,65204,65206,65208],{"class":84,"line":35310},[82,65195,57794],{"class":92},[82,65197,3199],{"class":53863},[82,65199,56046],{"class":2384},[82,65201,113],{"class":92},[82,65203,65044],{"class":96},[82,65205,57874],{"class":92},[82,65207,3199],{"class":53863},[82,65209,53870],{"class":92},[82,65211,65212,65214,65216,65218,65220,65223],{"class":84,"line":35316},[82,65213,57794],{"class":92},[82,65215,54173],{"class":53863},[82,65217,56046],{"class":2384},[82,65219,113],{"class":92},[82,65221,65222],{"class":96},"\"info\"",[82,65224,53870],{"class":92},[82,65226,65227,65229,65231,65233,65235,65237,65240,65242],{"class":84,"line":35322},[82,65228,57862],{"class":92},[82,65230,19],{"class":53863},[82,65232,56046],{"class":2384},[82,65234,113],{"class":92},[82,65236,1471],{"class":96},[82,65238,65239],{"class":92},">清风徐来\u003C\u002F",[82,65241,19],{"class":53863},[82,65243,53870],{"class":92},[82,65245,65246,65248,65250,65252,65254,65257,65260,65262],{"class":84,"line":35342},[82,65247,57862],{"class":92},[82,65249,19],{"class":53863},[82,65251,56046],{"class":2384},[82,65253,113],{"class":92},[82,65255,65256],{"class":96},"\"text\"",[82,65258,65259],{"class":92},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[82,65261,19],{"class":53863},[82,65263,53870],{"class":92},[82,65265,65266,65268,65270,65272,65274,65277,65280,65282],{"class":84,"line":35348},[82,65267,57862],{"class":92},[82,65269,19],{"class":53863},[82,65271,56046],{"class":2384},[82,65273,113],{"class":92},[82,65275,65276],{"class":96},"\"time\"",[82,65278,65279],{"class":92},">2022-10-10 20:29:21\u003C\u002F",[82,65281,19],{"class":53863},[82,65283,53870],{"class":92},[82,65285,65286,65288,65290],{"class":84,"line":35364},[82,65287,57967],{"class":92},[82,65289,54173],{"class":53863},[82,65291,53870],{"class":92},[82,65293,65294,65296,65298],{"class":84,"line":35370},[82,65295,54338],{"class":92},[82,65297,54173],{"class":53863},[82,65299,53870],{"class":92},[82,65301,65302,65304,65306],{"class":84,"line":35384},[82,65303,54977],{"class":92},[82,65305,54173],{"class":53863},[82,65307,53870],{"class":92},[82,65309,65310,65312,65314],{"class":84,"line":35390},[82,65311,54705],{"class":92},[82,65313,54375],{"class":53863},[82,65315,53870],{"class":92},[82,65317,65318,65320,65323,65325,65327,65329,65331,65334],{"class":84,"line":35405},[82,65319,13811],{"class":112},[82,65321,65322],{"class":88}," tx",[82,65324,259],{"class":112},[82,65326,56956],{"class":92},[82,65328,56959],{"class":2384},[82,65330,93],{"class":92},[82,65332,65333],{"class":96},"'#tx'",[82,65335,119],{"class":92},[82,65337,65338,65340,65343,65345,65347,65349,65351,65354],{"class":84,"line":35411},[82,65339,13811],{"class":112},[82,65341,65342],{"class":88}," total",[82,65344,259],{"class":112},[82,65346,56956],{"class":92},[82,65348,56959],{"class":2384},[82,65350,93],{"class":92},[82,65352,65353],{"class":96},"'.total'",[82,65355,119],{"class":92},[82,65357,65358],{"class":84,"line":35420},[82,65359,65360],{"class":2828},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[82,65362,65363,65366,65368,65370,65372,65374,65376],{"class":84,"line":35426},[82,65364,65365],{"class":92},"    tx.",[82,65367,60371],{"class":2384},[82,65369,93],{"class":92},[82,65371,63885],{"class":96},[82,65373,100],{"class":92},[82,65375,57009],{"class":112},[82,65377,57012],{"class":92},[82,65379,65380,65383,65385],{"class":84,"line":35435},[82,65381,65382],{"class":92},"      total.style.opacity ",[82,65384,113],{"class":112},[82,65386,2252],{"class":88},[82,65388,65389],{"class":84,"line":35441},[82,65390,36029],{"class":92},[82,65392,65393],{"class":84,"line":35447},[82,65394,65395],{"class":2828},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[82,65397,65398,65400,65402,65404,65406,65408,65410],{"class":84,"line":35456},[82,65399,65365],{"class":92},[82,65401,60371],{"class":2384},[82,65403,93],{"class":92},[82,65405,63946],{"class":96},[82,65407,100],{"class":92},[82,65409,57009],{"class":112},[82,65411,57012],{"class":92},[82,65413,65414,65416,65418],{"class":84,"line":35462},[82,65415,65382],{"class":92},[82,65417,113],{"class":112},[82,65419,49897],{"class":88},[82,65421,65422],{"class":84,"line":35473},[82,65423,36029],{"class":92},[82,65425,65426],{"class":84,"line":35479},[82,65427,65428],{"class":2828},"    \u002F\u002F 3. 检测用户输入\n",[82,65430,65431,65433,65435,65437,65440,65442,65444],{"class":84,"line":35498},[82,65432,65365],{"class":92},[82,65434,60371],{"class":2384},[82,65436,93],{"class":92},[82,65438,65439],{"class":96},"'input'",[82,65441,100],{"class":92},[82,65443,57009],{"class":112},[82,65445,57012],{"class":92},[82,65447,65448],{"class":84,"line":35504},[82,65449,65450],{"class":2828},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[82,65452,65453,65456,65458,65461,65464,65466,65469,65471,65473],{"class":84,"line":35515},[82,65454,65455],{"class":92},"      total.innerHTML ",[82,65457,113],{"class":112},[82,65459,65460],{"class":96}," `${",[82,65462,65463],{"class":92},"tx",[82,65465,233],{"class":96},[82,65467,65468],{"class":92},"value",[82,65470,233],{"class":96},[82,65472,54529],{"class":88},[82,65474,65475],{"class":96},"}\u002F200字`\n",[82,65477,65478],{"class":84,"line":35521},[82,65479,36029],{"class":92},[82,65481,65482],{"class":84,"line":35541},[82,65483,486],{"emptyLinePlaceholder":485},[82,65485,65486],{"class":84,"line":35557},[82,65487,65488],{"class":2828},"    \u002F\u002F const str = 'andy'\n",[82,65490,65491],{"class":84,"line":35563},[82,65492,65493],{"class":2828},"    \u002F\u002F console.log(str.length)\n",[82,65495,65496,65498,65500],{"class":84,"line":35577},[82,65497,54977],{"class":92},[82,65499,54375],{"class":53863},[82,65501,53870],{"class":92},[82,65503,65504,65506,65508],{"class":84,"line":35583},[82,65505,54347],{"class":92},[82,65507,54362],{"class":53863},[82,65509,53870],{"class":92},[82,65511,65512],{"class":84,"line":35589},[82,65513,486],{"emptyLinePlaceholder":485},[82,65515,65516,65518,65520],{"class":84,"line":35600},[82,65517,54347],{"class":92},[82,65519,53198],{"class":53863},[82,65521,53870],{"class":92},[24582,65523,65525],{"id":65524},"_3254-change事件","3.2.5.4 change事件",[19,65527,65528],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65530,65531],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65533,65534],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[73,65536,65538],{"className":53196,"code":65537,"language":53198,"meta":78,"style":78},"\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",[32,65539,65540,65550,65564,65568,65576,65590,65610,65622,65630,65634,65642,65656,65664,65682,65700,65712,65716,65724,65732,65736],{"__ignoreMap":78},[82,65541,65542,65544,65546,65548],{"class":84,"line":85},[82,65543,53860],{"class":92},[82,65545,53864],{"class":53863},[82,65547,53867],{"class":2384},[82,65549,53870],{"class":92},[82,65551,65552,65554,65556,65558,65560,65562],{"class":84,"line":157},[82,65553,3659],{"class":92},[82,65555,53198],{"class":53863},[82,65557,53879],{"class":2384},[82,65559,113],{"class":92},[82,65561,53884],{"class":96},[82,65563,53870],{"class":92},[82,65565,65566],{"class":84,"line":404},[82,65567,486],{"emptyLinePlaceholder":485},[82,65569,65570,65572,65574],{"class":84,"line":413},[82,65571,3659],{"class":92},[82,65573,53897],{"class":53863},[82,65575,53870],{"class":92},[82,65577,65578,65580,65582,65584,65586,65588],{"class":84,"line":508},[82,65579,54705],{"class":92},[82,65581,53907],{"class":53863},[82,65583,53910],{"class":2384},[82,65585,113],{"class":92},[82,65587,53915],{"class":96},[82,65589,53870],{"class":92},[82,65591,65592,65594,65596,65598,65600,65602,65604,65606,65608],{"class":84,"line":513},[82,65593,54705],{"class":92},[82,65595,53907],{"class":53863},[82,65597,17506],{"class":2384},[82,65599,113],{"class":92},[82,65601,53954],{"class":96},[82,65603,53934],{"class":2384},[82,65605,113],{"class":92},[82,65607,53961],{"class":96},[82,65609,53870],{"class":92},[82,65611,65612,65614,65616,65618,65620],{"class":84,"line":1388},[82,65613,54705],{"class":92},[82,65615,53970],{"class":53863},[82,65617,53973],{"class":92},[82,65619,53970],{"class":53863},[82,65621,53870],{"class":92},[82,65623,65624,65626,65628],{"class":84,"line":1394},[82,65625,54347],{"class":92},[82,65627,53897],{"class":53863},[82,65629,53870],{"class":92},[82,65631,65632],{"class":84,"line":1399},[82,65633,486],{"emptyLinePlaceholder":485},[82,65635,65636,65638,65640],{"class":84,"line":1430},[82,65637,3659],{"class":92},[82,65639,54362],{"class":53863},[82,65641,53870],{"class":92},[82,65643,65644,65646,65648,65650,65652,65654],{"class":84,"line":1818},[82,65645,54705],{"class":92},[82,65647,56381],{"class":53863},[82,65649,56384],{"class":2384},[82,65651,113],{"class":92},[82,65653,65256],{"class":96},[82,65655,53870],{"class":92},[82,65657,65658,65660,65662],{"class":84,"line":2082},[82,65659,54705],{"class":92},[82,65661,54375],{"class":53863},[82,65663,53870],{"class":92},[82,65665,65666,65668,65670,65672,65674,65676,65678,65680],{"class":84,"line":2233},[82,65667,13811],{"class":112},[82,65669,63163],{"class":88},[82,65671,259],{"class":112},[82,65673,56956],{"class":92},[82,65675,56959],{"class":2384},[82,65677,93],{"class":92},[82,65679,65439],{"class":96},[82,65681,119],{"class":92},[82,65683,65684,65687,65689,65691,65694,65696,65698],{"class":84,"line":2255},[82,65685,65686],{"class":92},"    input.",[82,65688,60371],{"class":2384},[82,65690,93],{"class":92},[82,65692,65693],{"class":96},"'change'",[82,65695,100],{"class":92},[82,65697,57009],{"class":112},[82,65699,57012],{"class":92},[82,65701,65702,65704,65706,65708,65710],{"class":84,"line":2260},[82,65703,60802],{"class":92},[82,65705,60805],{"class":2384},[82,65707,93],{"class":92},[82,65709,3347],{"class":88},[82,65711,119],{"class":92},[82,65713,65714],{"class":84,"line":2298},[82,65715,36029],{"class":92},[82,65717,65718,65720,65722],{"class":84,"line":2303},[82,65719,54977],{"class":92},[82,65721,54375],{"class":53863},[82,65723,53870],{"class":92},[82,65725,65726,65728,65730],{"class":84,"line":2321},[82,65727,54347],{"class":92},[82,65729,54362],{"class":53863},[82,65731,53870],{"class":92},[82,65733,65734],{"class":84,"line":2533},[82,65735,486],{"emptyLinePlaceholder":485},[82,65737,65738,65740,65742],{"class":84,"line":2538},[82,65739,54347],{"class":92},[82,65741,53198],{"class":53863},[82,65743,53870],{"class":92},[19,65745,65746],{},"总结：内容发生改变才回去触发",[65,65748,65750],{"id":65749},"_326-事件对象","3.2.6 事件对象",[24582,65752,65754],{"id":65753},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65756,65757],{},[4078,65758],{"alt":78,"src":65759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65761,65762],{},[4078,65763],{"alt":78,"src":65764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65766,65767],{},"点击一次，就输出了事件对象，它是个对象",[19,65769,65770],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65772,65773],{},[4078,65774],{"alt":78,"src":65775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24582,65777,65779],{"id":65778},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65781,65782],{},[4078,65783],{"alt":78,"src":65784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65786,65787],{},"实现按特殊字符才是实现打印输出效果：",[73,65789,65791],{"className":55627,"code":65790,"language":55629,"meta":78,"style":78},"\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",[32,65792,65793,65801,65806,65820,65828,65833,65838,65843,65848,65853,65858,65863,65868,65873,65877,65881,65889],{"__ignoreMap":78},[82,65794,65795,65797,65799],{"class":84,"line":85},[82,65796,3659],{"class":92},[82,65798,54362],{"class":53863},[82,65800,53870],{"class":92},[82,65802,65803],{"class":84,"line":157},[82,65804,65805],{"class":2828},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[82,65807,65808,65810,65812,65814,65816,65818],{"class":84,"line":404},[82,65809,54705],{"class":92},[82,65811,56381],{"class":53863},[82,65813,56384],{"class":2384},[82,65815,113],{"class":92},[82,65817,65256],{"class":96},[82,65819,53870],{"class":92},[82,65821,65822,65824,65826],{"class":84,"line":413},[82,65823,54705],{"class":92},[82,65825,54375],{"class":53863},[82,65827,53870],{"class":92},[82,65829,65830],{"class":84,"line":508},[82,65831,65832],{"class":92},"    \u002F\u002F const btn = document.querySelector('button')\n",[82,65834,65835],{"class":84,"line":513},[82,65836,65837],{"class":92},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[82,65839,65840],{"class":84,"line":1388},[82,65841,65842],{"class":92},"    \u002F\u002F   console.log(e);\n",[82,65844,65845],{"class":84,"line":1394},[82,65846,65847],{"class":92},"    \u002F\u002F })\n",[82,65849,65850],{"class":84,"line":1399},[82,65851,65852],{"class":92},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[82,65854,65855],{"class":84,"line":1430},[82,65856,65857],{"class":92},"    const input = document.querySelector('input')\n",[82,65859,65860],{"class":84,"line":1818},[82,65861,65862],{"class":92},"    input.addEventListener('keyup', function (e) {\n",[82,65864,65865],{"class":84,"line":2082},[82,65866,65867],{"class":92},"      if (e.key === 'Enter') {\n",[82,65869,65870],{"class":84,"line":2233},[82,65871,65872],{"class":92},"        console.log('我按下了回车键')\n",[82,65874,65875],{"class":84,"line":2255},[82,65876,54958],{"class":92},[82,65878,65879],{"class":84,"line":2260},[82,65880,36029],{"class":92},[82,65882,65883,65885,65887],{"class":84,"line":2298},[82,65884,54977],{"class":92},[82,65886,54375],{"class":53863},[82,65888,53870],{"class":92},[82,65890,65891,65893,65895],{"class":84,"line":2303},[82,65892,54347],{"class":92},[82,65894,54362],{"class":53863},[82,65896,53870],{"class":92},[24582,65898,65900],{"id":65899},"_3263-trim方法","3.2.6.3 trim方法",[19,65902,65903],{},[4078,65904],{"alt":78,"src":65905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65907,65908],{},[4078,65909],{"alt":78,"src":65910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65912,65913],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65915,65916],{},"str.trim()",[65,65918,65920],{"id":65919},"_327-环境对象","3.2.7 环境对象",[19,65922,65923],{},[4078,65924],{"alt":78,"src":65925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65927,65928],{},[4078,65929],{"alt":78,"src":65930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65932,65933],{},[4078,65934],{"alt":78,"src":65935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65937,65938],{},"实际函数调用是window.fn()",[19,65940,65941],{},"普通函数里面this指向的是window",[3755,65943,65944,65947,65950],{},[29,65945,65946],{},"在普通函数下，this指向的是window",[29,65948,65949],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65951,65952],{},"箭头函数没有this",[19,65954,65955],{},"粗略记法就是：谁调用，this就指向谁",[19,65957,65958],{},[4078,65959],{"alt":78,"src":65960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65962,65963],{},[4078,65964],{"alt":78,"src":65965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65967,65968],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65970,65971],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[73,65973,65975],{"className":55627,"code":65974,"language":55629,"meta":78,"style":78},"\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",[32,65976,65977,65985,65997,66005,66010,66015,66020,66025,66029,66037],{"__ignoreMap":78},[82,65978,65979,65981,65983],{"class":84,"line":85},[82,65980,3659],{"class":92},[82,65982,54362],{"class":53863},[82,65984,53870],{"class":92},[82,65986,65987,65989,65991,65993,65995],{"class":84,"line":157},[82,65988,54705],{"class":92},[82,65990,56447],{"class":53863},[82,65992,56453],{"class":92},[82,65994,56447],{"class":53863},[82,65996,53870],{"class":92},[82,65998,65999,66001,66003],{"class":84,"line":404},[82,66000,54705],{"class":92},[82,66002,54375],{"class":53863},[82,66004,53870],{"class":92},[82,66006,66007],{"class":84,"line":413},[82,66008,66009],{"class":92},"    const button = document.querySelector('button')\n",[82,66011,66012],{"class":84,"line":508},[82,66013,66014],{"class":92},"    button.addEventListener('click', function () {\n",[82,66016,66017],{"class":84,"line":513},[82,66018,66019],{"class":92},"      \u002F\u002F console.log(this);\n",[82,66021,66022],{"class":84,"line":1388},[82,66023,66024],{"class":92},"      this.style.color = 'pink'\n",[82,66026,66027],{"class":84,"line":1394},[82,66028,36029],{"class":92},[82,66030,66031,66033,66035],{"class":84,"line":1399},[82,66032,54977],{"class":92},[82,66034,54375],{"class":53863},[82,66036,53870],{"class":92},[82,66038,66039,66041,66043],{"class":84,"line":1430},[82,66040,54347],{"class":92},[82,66042,54362],{"class":53863},[82,66044,53870],{"class":92},[65,66046,66048],{"id":66047},"_328-回调函数","3.2.8 回调函数",[19,66050,66051],{},[4078,66052],{"alt":78,"src":66053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,66055,66056],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,66058,13922],{},[3755,66060,66061,66064,66067],{},[29,66062,66063],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,66065,66066],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,66068,66069],{},"使用匿名函数做为回调函数比较常见",[65,66071,66073],{"id":66072},"_329-tab栏切换","3.2.9 tab栏切换",[19,66075,66076],{},[4078,66077],{"alt":78,"src":66078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[73,66080,66082],{"className":53196,"code":66081,"language":53198,"meta":78,"style":78},"\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",[32,66083,66084,66094,66108,66112,66120,66134,66154,66174,66187,66195,66201,66211,66221,66225,66229,66236,66249,66262,66274,66290,66294,66298,66305,66317,66329,66341,66351,66361,66365,66369,66378,66390,66401,66413,66417,66421,66429,66439,66449,66459,66463,66467,66477,66491,66503,66507,66511,66523,66534,66551,66561,66565,66569,66584,66595,66605,66609,66613,66620,66635,66639,66643,66651,66661,66665,66669,66678,66688,66692,66700,66708,66712,66720,66735,66750,66763,66771,66805,66832,66859,66886,66913,66921,66929,66944,66981,67016,67051,67086,67121,67129,67137,67145,67150,67155,67175,67180,67209,67214,67219,67237,67242,67247,67252,67274,67279,67295,67299,67304,67309,67330,67335,67364,67368,67373,67377,67385,67393,67397],{"__ignoreMap":78},[82,66085,66086,66088,66090,66092],{"class":84,"line":85},[82,66087,53860],{"class":92},[82,66089,53864],{"class":53863},[82,66091,53867],{"class":2384},[82,66093,53870],{"class":92},[82,66095,66096,66098,66100,66102,66104,66106],{"class":84,"line":157},[82,66097,3659],{"class":92},[82,66099,53198],{"class":53863},[82,66101,53879],{"class":2384},[82,66103,113],{"class":92},[82,66105,53884],{"class":96},[82,66107,53870],{"class":92},[82,66109,66110],{"class":84,"line":404},[82,66111,486],{"emptyLinePlaceholder":485},[82,66113,66114,66116,66118],{"class":84,"line":413},[82,66115,3659],{"class":92},[82,66117,53897],{"class":53863},[82,66119,53870],{"class":92},[82,66121,66122,66124,66126,66128,66130,66132],{"class":84,"line":508},[82,66123,54705],{"class":92},[82,66125,53907],{"class":53863},[82,66127,53910],{"class":2384},[82,66129,113],{"class":92},[82,66131,53915],{"class":96},[82,66133,61685],{"class":92},[82,66135,66136,66138,66140,66142,66144,66146,66148,66150,66152],{"class":84,"line":513},[82,66137,54705],{"class":92},[82,66139,53907],{"class":53863},[82,66141,53926],{"class":2384},[82,66143,113],{"class":92},[82,66145,53931],{"class":96},[82,66147,53934],{"class":2384},[82,66149,113],{"class":92},[82,66151,53939],{"class":96},[82,66153,61685],{"class":92},[82,66155,66156,66158,66160,66162,66164,66166,66168,66170,66172],{"class":84,"line":1388},[82,66157,54705],{"class":92},[82,66159,53907],{"class":53863},[82,66161,17506],{"class":2384},[82,66163,113],{"class":92},[82,66165,53954],{"class":96},[82,66167,53934],{"class":2384},[82,66169,113],{"class":92},[82,66171,53961],{"class":96},[82,66173,61685],{"class":92},[82,66175,66176,66178,66180,66183,66185],{"class":84,"line":1394},[82,66177,54705],{"class":92},[82,66179,53970],{"class":53863},[82,66181,66182],{"class":92},">tab栏切换\u003C\u002F",[82,66184,53970],{"class":53863},[82,66186,53870],{"class":92},[82,66188,66189,66191,66193],{"class":84,"line":1399},[82,66190,54705],{"class":92},[82,66192,2671],{"class":53863},[82,66194,53870],{"class":92},[82,66196,66197,66199],{"class":84,"line":1430},[82,66198,8995],{"class":53863},[82,66200,1349],{"class":92},[82,66202,66203,66205,66207,66209],{"class":84,"line":1818},[82,66204,57266],{"class":88},[82,66206,1357],{"class":92},[82,66208,2244],{"class":88},[82,66210,3909],{"class":92},[82,66212,66213,66215,66217,66219],{"class":84,"line":2082},[82,66214,57255],{"class":88},[82,66216,1357],{"class":92},[82,66218,2244],{"class":88},[82,66220,3909],{"class":92},[82,66222,66223],{"class":84,"line":2233},[82,66224,4787],{"class":92},[82,66226,66227],{"class":84,"line":2255},[82,66228,486],{"emptyLinePlaceholder":485},[82,66230,66231,66234],{"class":84,"line":2260},[82,66232,66233],{"class":2384},"    .tab",[82,66235,1349],{"class":92},[82,66237,66238,66240,66242,66245,66247],{"class":84,"line":2298},[82,66239,57331],{"class":88},[82,66241,1357],{"class":92},[82,66243,66244],{"class":88},"590",[82,66246,54054],{"class":112},[82,66248,3909],{"class":92},[82,66250,66251,66253,66255,66258,66260],{"class":84,"line":2303},[82,66252,57345],{"class":88},[82,66254,1357],{"class":92},[82,66256,66257],{"class":88},"340",[82,66259,54054],{"class":112},[82,66261,3909],{"class":92},[82,66263,66264,66266,66268,66270,66272],{"class":84,"line":2321},[82,66265,57266],{"class":88},[82,66267,1357],{"class":92},[82,66269,3451],{"class":88},[82,66271,54054],{"class":112},[82,66273,3909],{"class":92},[82,66275,66276,66278,66280,66282,66284,66286,66288],{"class":84,"line":2533},[82,66277,64535],{"class":88},[82,66279,1357],{"class":92},[82,66281,2283],{"class":88},[82,66283,54054],{"class":112},[82,66285,54083],{"class":88},[82,66287,64802],{"class":88},[82,66289,3909],{"class":92},[82,66291,66292],{"class":84,"line":2538},[82,66293,4787],{"class":92},[82,66295,66296],{"class":84,"line":2548},[82,66297,486],{"emptyLinePlaceholder":485},[82,66299,66300,66303],{"class":84,"line":2579},[82,66301,66302],{"class":2384},"    .tab-nav",[82,66304,1349],{"class":92},[82,66306,66307,66309,66311,66313,66315],{"class":84,"line":2585},[82,66308,57331],{"class":88},[82,66310,1357],{"class":92},[82,66312,3069],{"class":88},[82,66314,3086],{"class":112},[82,66316,3909],{"class":92},[82,66318,66319,66321,66323,66325,66327],{"class":84,"line":4350},[82,66320,57345],{"class":88},[82,66322,1357],{"class":92},[82,66324,3656],{"class":88},[82,66326,54054],{"class":112},[82,66328,3909],{"class":92},[82,66330,66331,66333,66335,66337,66339],{"class":84,"line":4355},[82,66332,59917],{"class":88},[82,66334,1357],{"class":92},[82,66336,3656],{"class":88},[82,66338,54054],{"class":112},[82,66340,3909],{"class":92},[82,66342,66343,66345,66347,66349],{"class":84,"line":4360},[82,66344,57569],{"class":88},[82,66346,1357],{"class":92},[82,66348,54039],{"class":88},[82,66350,3909],{"class":92},[82,66352,66353,66355,66357,66359],{"class":84,"line":4365},[82,66354,57580],{"class":88},[82,66356,1357],{"class":92},[82,66358,54230],{"class":88},[82,66360,3909],{"class":92},[82,66362,66363],{"class":84,"line":4379},[82,66364,4787],{"class":92},[82,66366,66367],{"class":84,"line":4384},[82,66368,486],{"emptyLinePlaceholder":485},[82,66370,66371,66373,66376],{"class":84,"line":5176},[82,66372,66302],{"class":2384},[82,66374,66375],{"class":53863}," h3",[82,66377,1349],{"class":92},[82,66379,66380,66382,66384,66386,66388],{"class":84,"line":5190},[82,66381,57482],{"class":88},[82,66383,1357],{"class":92},[82,66385,3550],{"class":88},[82,66387,54054],{"class":112},[82,66389,3909],{"class":92},[82,66391,66392,66394,66396,66399],{"class":84,"line":5198},[82,66393,64892],{"class":88},[82,66395,1357],{"class":92},[82,66397,66398],{"class":88},"normal",[82,66400,3909],{"class":92},[82,66402,66403,66405,66407,66409,66411],{"class":84,"line":5203},[82,66404,64558],{"class":88},[82,66406,1357],{"class":92},[82,66408,3451],{"class":88},[82,66410,54054],{"class":112},[82,66412,3909],{"class":92},[82,66414,66415],{"class":84,"line":5209},[82,66416,4787],{"class":92},[82,66418,66419],{"class":84,"line":5215},[82,66420,486],{"emptyLinePlaceholder":485},[82,66422,66423,66425,66427],{"class":84,"line":5220},[82,66424,66302],{"class":2384},[82,66426,63850],{"class":53863},[82,66428,1349],{"class":92},[82,66430,66431,66433,66435,66437],{"class":84,"line":10539},[82,66432,57292],{"class":88},[82,66434,1357],{"class":92},[82,66436,57297],{"class":88},[82,66438,3909],{"class":92},[82,66440,66441,66443,66445,66447],{"class":84,"line":10563},[82,66442,57569],{"class":88},[82,66444,1357],{"class":92},[82,66446,54039],{"class":88},[82,66448,3909],{"class":92},[82,66450,66451,66453,66455,66457],{"class":84,"line":10568},[82,66452,57580],{"class":88},[82,66454,1357],{"class":92},[82,66456,54142],{"class":88},[82,66458,3909],{"class":92},[82,66460,66461],{"class":84,"line":10574},[82,66462,4787],{"class":92},[82,66464,66465],{"class":84,"line":10601},[82,66466,486],{"emptyLinePlaceholder":485},[82,66468,66469,66471,66473,66475],{"class":84,"line":10606},[82,66470,66302],{"class":2384},[82,66472,63850],{"class":53863},[82,66474,57635],{"class":53863},[82,66476,1349],{"class":92},[82,66478,66479,66481,66483,66485,66487,66489],{"class":84,"line":10612},[82,66480,57266],{"class":88},[82,66482,1357],{"class":92},[82,66484,2244],{"class":88},[82,66486,11541],{"class":88},[82,66488,54054],{"class":112},[82,66490,3909],{"class":92},[82,66492,66493,66495,66497,66499,66501],{"class":84,"line":10624},[82,66494,57482],{"class":88},[82,66496,1357],{"class":92},[82,66498,3305],{"class":88},[82,66500,54054],{"class":112},[82,66502,3909],{"class":92},[82,66504,66505],{"class":84,"line":10636},[82,66506,4787],{"class":92},[82,66508,66509],{"class":84,"line":10648},[82,66510,486],{"emptyLinePlaceholder":485},[82,66512,66513,66515,66517,66519,66521],{"class":84,"line":12307},[82,66514,66302],{"class":2384},[82,66516,63850],{"class":53863},[82,66518,57635],{"class":53863},[82,66520,4014],{"class":53863},[82,66522,1349],{"class":92},[82,66524,66525,66528,66530,66532],{"class":84,"line":12332},[82,66526,66527],{"class":88},"      text-decoration",[82,66529,1357],{"class":92},[82,66531,57297],{"class":88},[82,66533,3909],{"class":92},[82,66535,66536,66538,66540,66542,66544,66546,66549],{"class":84,"line":12355},[82,66537,64790],{"class":88},[82,66539,1357],{"class":92},[82,66541,1425],{"class":88},[82,66543,54054],{"class":112},[82,66545,54083],{"class":88},[82,66547,66548],{"class":88}," transparent",[82,66550,3909],{"class":92},[82,66552,66553,66555,66557,66559],{"class":84,"line":12379},[82,66554,59974],{"class":88},[82,66556,1357],{"class":92},[82,66558,64927],{"class":88},[82,66560,3909],{"class":92},[82,66562,66563],{"class":84,"line":12384},[82,66564,4787],{"class":92},[82,66566,66567],{"class":84,"line":12389},[82,66568,486],{"emptyLinePlaceholder":485},[82,66570,66571,66573,66575,66577,66579,66582],{"class":84,"line":12394},[82,66572,66302],{"class":2384},[82,66574,63850],{"class":53863},[82,66576,57635],{"class":53863},[82,66578,4014],{"class":53863},[82,66580,66581],{"class":2384},".active",[82,66583,1349],{"class":92},[82,66585,66586,66588,66590,66593],{"class":84,"line":12403},[82,66587,64349],{"class":88},[82,66589,1357],{"class":92},[82,66591,66592],{"class":88},"#e1251b",[82,66594,3909],{"class":92},[82,66596,66597,66599,66601,66603],{"class":84,"line":12408},[82,66598,59974],{"class":88},[82,66600,1357],{"class":92},[82,66602,66592],{"class":88},[82,66604,3909],{"class":92},[82,66606,66607],{"class":84,"line":12414},[82,66608,4787],{"class":92},[82,66610,66611],{"class":84,"line":12435},[82,66612,486],{"emptyLinePlaceholder":485},[82,66614,66615,66618],{"class":84,"line":12441},[82,66616,66617],{"class":2384},"    .tab-content",[82,66619,1349],{"class":92},[82,66621,66622,66624,66626,66628,66631,66633],{"class":84,"line":12455},[82,66623,57255],{"class":88},[82,66625,1357],{"class":92},[82,66627,2244],{"class":88},[82,66629,66630],{"class":88}," 16",[82,66632,54054],{"class":112},[82,66634,3909],{"class":92},[82,66636,66637],{"class":84,"line":12461},[82,66638,4787],{"class":92},[82,66640,66641],{"class":84,"line":12488},[82,66642,486],{"emptyLinePlaceholder":485},[82,66644,66645,66647,66649],{"class":84,"line":12497},[82,66646,66617],{"class":2384},[82,66648,64732],{"class":2384},[82,66650,1349],{"class":92},[82,66652,66653,66655,66657,66659],{"class":84,"line":12503},[82,66654,57569],{"class":88},[82,66656,1357],{"class":92},[82,66658,57297],{"class":88},[82,66660,3909],{"class":92},[82,66662,66663],{"class":84,"line":12511},[82,66664,4787],{"class":92},[82,66666,66667],{"class":84,"line":12516},[82,66668,486],{"emptyLinePlaceholder":485},[82,66670,66671,66673,66676],{"class":84,"line":19189},[82,66672,66617],{"class":2384},[82,66674,66675],{"class":2384}," .item.active",[82,66677,1349],{"class":92},[82,66679,66680,66682,66684,66686],{"class":84,"line":19195},[82,66681,57569],{"class":88},[82,66683,1357],{"class":92},[82,66685,63427],{"class":88},[82,66687,3909],{"class":92},[82,66689,66690],{"class":84,"line":19218},[82,66691,4787],{"class":92},[82,66693,66694,66696,66698],{"class":84,"line":19224},[82,66695,54977],{"class":92},[82,66697,2671],{"class":53863},[82,66699,53870],{"class":92},[82,66701,66702,66704,66706],{"class":84,"line":19247},[82,66703,54347],{"class":92},[82,66705,53897],{"class":53863},[82,66707,53870],{"class":92},[82,66709,66710],{"class":84,"line":19261},[82,66711,486],{"emptyLinePlaceholder":485},[82,66713,66714,66716,66718],{"class":84,"line":19281},[82,66715,3659],{"class":92},[82,66717,54362],{"class":53863},[82,66719,53870],{"class":92},[82,66721,66722,66724,66726,66728,66730,66733],{"class":84,"line":19287},[82,66723,54705],{"class":92},[82,66725,54173],{"class":53863},[82,66727,56046],{"class":2384},[82,66729,113],{"class":92},[82,66731,66732],{"class":96},"\"tab\"",[82,66734,53870],{"class":92},[82,66736,66737,66739,66741,66743,66745,66748],{"class":84,"line":19298},[82,66738,53904],{"class":92},[82,66740,54173],{"class":53863},[82,66742,56046],{"class":2384},[82,66744,113],{"class":92},[82,66746,66747],{"class":96},"\"tab-nav\"",[82,66749,53870],{"class":92},[82,66751,66752,66754,66756,66759,66761],{"class":84,"line":19321},[82,66753,57794],{"class":92},[82,66755,65],{"class":53863},[82,66757,66758],{"class":92},">每日特价\u003C\u002F",[82,66760,65],{"class":53863},[82,66762,53870],{"class":92},[82,66764,66765,66767,66769],{"class":84,"line":19343},[82,66766,57794],{"class":92},[82,66768,3755],{"class":53863},[82,66770,53870],{"class":92},[82,66772,66773,66775,66777,66779,66781,66783,66785,66787,66789,66791,66794,66797,66799,66801,66803],{"class":84,"line":19348},[82,66774,57862],{"class":92},[82,66776,29],{"class":53863},[82,66778,63610],{"class":92},[82,66780,323],{"class":53863},[82,66782,56046],{"class":2384},[82,66784,113],{"class":92},[82,66786,62264],{"class":96},[82,66788,63615],{"class":2384},[82,66790,113],{"class":92},[82,66792,66793],{"class":96},"\"javascript:;\"",[82,66795,66796],{"class":92},">精选\u003C\u002F",[82,66798,323],{"class":53863},[82,66800,57874],{"class":92},[82,66802,29],{"class":53863},[82,66804,53870],{"class":92},[82,66806,66807,66809,66811,66813,66815,66817,66819,66821,66824,66826,66828,66830],{"class":84,"line":19354},[82,66808,57862],{"class":92},[82,66810,29],{"class":53863},[82,66812,63610],{"class":92},[82,66814,323],{"class":53863},[82,66816,63615],{"class":2384},[82,66818,113],{"class":92},[82,66820,66793],{"class":96},[82,66822,66823],{"class":92},">美食\u003C\u002F",[82,66825,323],{"class":53863},[82,66827,57874],{"class":92},[82,66829,29],{"class":53863},[82,66831,53870],{"class":92},[82,66833,66834,66836,66838,66840,66842,66844,66846,66848,66851,66853,66855,66857],{"class":84,"line":19368},[82,66835,57862],{"class":92},[82,66837,29],{"class":53863},[82,66839,63610],{"class":92},[82,66841,323],{"class":53863},[82,66843,63615],{"class":2384},[82,66845,113],{"class":92},[82,66847,66793],{"class":96},[82,66849,66850],{"class":92},">百货\u003C\u002F",[82,66852,323],{"class":53863},[82,66854,57874],{"class":92},[82,66856,29],{"class":53863},[82,66858,53870],{"class":92},[82,66860,66861,66863,66865,66867,66869,66871,66873,66875,66878,66880,66882,66884],{"class":84,"line":19381},[82,66862,57862],{"class":92},[82,66864,29],{"class":53863},[82,66866,63610],{"class":92},[82,66868,323],{"class":53863},[82,66870,63615],{"class":2384},[82,66872,113],{"class":92},[82,66874,66793],{"class":96},[82,66876,66877],{"class":92},">个护\u003C\u002F",[82,66879,323],{"class":53863},[82,66881,57874],{"class":92},[82,66883,29],{"class":53863},[82,66885,53870],{"class":92},[82,66887,66888,66890,66892,66894,66896,66898,66900,66902,66905,66907,66909,66911],{"class":84,"line":19386},[82,66889,57862],{"class":92},[82,66891,29],{"class":53863},[82,66893,63610],{"class":92},[82,66895,323],{"class":53863},[82,66897,63615],{"class":2384},[82,66899,113],{"class":92},[82,66901,66793],{"class":96},[82,66903,66904],{"class":92},">预告\u003C\u002F",[82,66906,323],{"class":53863},[82,66908,57874],{"class":92},[82,66910,29],{"class":53863},[82,66912,53870],{"class":92},[82,66914,66915,66917,66919],{"class":84,"line":19400},[82,66916,57967],{"class":92},[82,66918,3755],{"class":53863},[82,66920,53870],{"class":92},[82,66922,66923,66925,66927],{"class":84,"line":19405},[82,66924,54338],{"class":92},[82,66926,54173],{"class":53863},[82,66928,53870],{"class":92},[82,66930,66931,66933,66935,66937,66939,66942],{"class":84,"line":19411},[82,66932,53904],{"class":92},[82,66934,54173],{"class":53863},[82,66936,56046],{"class":2384},[82,66938,113],{"class":92},[82,66940,66941],{"class":96},"\"tab-content\"",[82,66943,53870],{"class":92},[82,66945,66946,66948,66950,66952,66954,66957,66959,66961,66963,66965,66968,66970,66972,66974,66977,66979],{"class":84,"line":19416},[82,66947,57794],{"class":92},[82,66949,54173],{"class":53863},[82,66951,56046],{"class":2384},[82,66953,113],{"class":92},[82,66955,66956],{"class":96},"\"item active\"",[82,66958,63610],{"class":92},[82,66960,4078],{"class":53863},[82,66962,57799],{"class":2384},[82,66964,113],{"class":92},[82,66966,66967],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[82,66969,57807],{"class":2384},[82,66971,113],{"class":92},[82,66973,1793],{"class":96},[82,66975,66976],{"class":92}," \u002F>\u003C\u002F",[82,66978,54173],{"class":53863},[82,66980,53870],{"class":92},[82,66982,66983,66985,66987,66989,66991,66993,66995,66997,66999,67001,67004,67006,67008,67010,67012,67014],{"class":84,"line":19430},[82,66984,57794],{"class":92},[82,66986,54173],{"class":53863},[82,66988,56046],{"class":2384},[82,66990,113],{"class":92},[82,66992,65181],{"class":96},[82,66994,63610],{"class":92},[82,66996,4078],{"class":53863},[82,66998,57799],{"class":2384},[82,67000,113],{"class":92},[82,67002,67003],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[82,67005,57807],{"class":2384},[82,67007,113],{"class":92},[82,67009,1793],{"class":96},[82,67011,66976],{"class":92},[82,67013,54173],{"class":53863},[82,67015,53870],{"class":92},[82,67017,67018,67020,67022,67024,67026,67028,67030,67032,67034,67036,67039,67041,67043,67045,67047,67049],{"class":84,"line":19435},[82,67019,57794],{"class":92},[82,67021,54173],{"class":53863},[82,67023,56046],{"class":2384},[82,67025,113],{"class":92},[82,67027,65181],{"class":96},[82,67029,63610],{"class":92},[82,67031,4078],{"class":53863},[82,67033,57799],{"class":2384},[82,67035,113],{"class":92},[82,67037,67038],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[82,67040,57807],{"class":2384},[82,67042,113],{"class":92},[82,67044,1793],{"class":96},[82,67046,66976],{"class":92},[82,67048,54173],{"class":53863},[82,67050,53870],{"class":92},[82,67052,67053,67055,67057,67059,67061,67063,67065,67067,67069,67071,67074,67076,67078,67080,67082,67084],{"class":84,"line":19440},[82,67054,57794],{"class":92},[82,67056,54173],{"class":53863},[82,67058,56046],{"class":2384},[82,67060,113],{"class":92},[82,67062,65181],{"class":96},[82,67064,63610],{"class":92},[82,67066,4078],{"class":53863},[82,67068,57799],{"class":2384},[82,67070,113],{"class":92},[82,67072,67073],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[82,67075,57807],{"class":2384},[82,67077,113],{"class":92},[82,67079,1793],{"class":96},[82,67081,66976],{"class":92},[82,67083,54173],{"class":53863},[82,67085,53870],{"class":92},[82,67087,67088,67090,67092,67094,67096,67098,67100,67102,67104,67106,67109,67111,67113,67115,67117,67119],{"class":84,"line":19454},[82,67089,57794],{"class":92},[82,67091,54173],{"class":53863},[82,67093,56046],{"class":2384},[82,67095,113],{"class":92},[82,67097,65181],{"class":96},[82,67099,63610],{"class":92},[82,67101,4078],{"class":53863},[82,67103,57799],{"class":2384},[82,67105,113],{"class":92},[82,67107,67108],{"class":96},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[82,67110,57807],{"class":2384},[82,67112,113],{"class":92},[82,67114,1793],{"class":96},[82,67116,66976],{"class":92},[82,67118,54173],{"class":53863},[82,67120,53870],{"class":92},[82,67122,67123,67125,67127],{"class":84,"line":19466},[82,67124,54338],{"class":92},[82,67126,54173],{"class":53863},[82,67128,53870],{"class":92},[82,67130,67131,67133,67135],{"class":84,"line":19471},[82,67132,54977],{"class":92},[82,67134,54173],{"class":53863},[82,67136,53870],{"class":92},[82,67138,67139,67141,67143],{"class":84,"line":19484},[82,67140,54705],{"class":92},[82,67142,54375],{"class":53863},[82,67144,53870],{"class":92},[82,67146,67147],{"class":84,"line":19489},[82,67148,67149],{"class":2828},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[82,67151,67152],{"class":84,"line":19494},[82,67153,67154],{"class":2828},"    \u002F\u002F 1.1 获取 a 元素 \n",[82,67156,67157,67159,67162,67164,67166,67168,67170,67173],{"class":84,"line":19499},[82,67158,13811],{"class":112},[82,67160,67161],{"class":88}," as",[82,67163,259],{"class":112},[82,67165,56956],{"class":92},[82,67167,58240],{"class":2384},[82,67169,93],{"class":92},[82,67171,67172],{"class":96},"'.tab-nav a'",[82,67174,119],{"class":92},[82,67176,67177],{"class":84,"line":19512},[82,67178,67179],{"class":2828},"    \u002F\u002F console.log(as) \n",[82,67181,67182,67184,67186,67188,67190,67192,67194,67196,67198,67201,67203,67205,67207],{"class":84,"line":19517},[82,67183,1888],{"class":112},[82,67185,4265],{"class":92},[82,67187,54408],{"class":112},[82,67189,12029],{"class":92},[82,67191,113],{"class":112},[82,67193,6688],{"class":88},[82,67195,12036],{"class":92},[82,67197,3659],{"class":112},[82,67199,67200],{"class":92}," as.",[82,67202,54529],{"class":88},[82,67204,5810],{"class":92},[82,67206,4892],{"class":112},[82,67208,15031],{"class":92},[82,67210,67211],{"class":84,"line":35202},[82,67212,67213],{"class":2828},"      \u002F\u002F console.log(as[i])\n",[82,67215,67216],{"class":84,"line":35208},[82,67217,67218],{"class":2828},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[82,67220,67221,67224,67226,67228,67231,67233,67235],{"class":84,"line":35214},[82,67222,67223],{"class":92},"      as[i].",[82,67225,60371],{"class":2384},[82,67227,93],{"class":92},[82,67229,67230],{"class":96},"'mouseenter'",[82,67232,100],{"class":92},[82,67234,57009],{"class":112},[82,67236,57012],{"class":92},[82,67238,67239],{"class":84,"line":35220},[82,67240,67241],{"class":2828},"        \u002F\u002F console.log('鼠标经过')\n",[82,67243,67244],{"class":84,"line":35226},[82,67245,67246],{"class":2828},"        \u002F\u002F 排他思想  \n",[82,67248,67249],{"class":84,"line":35237},[82,67250,67251],{"class":2828},"        \u002F\u002F 干掉别人 移除类active\n",[82,67253,67254,67256,67258,67260,67263,67265,67267,67269,67272],{"class":84,"line":35243},[82,67255,54486],{"class":92},[82,67257,56959],{"class":2384},[82,67259,93],{"class":92},[82,67261,67262],{"class":96},"'.tab-nav .active'",[82,67264,59561],{"class":92},[82,67266,59564],{"class":2384},[82,67268,93],{"class":92},[82,67270,67271],{"class":96},"'active'",[82,67273,119],{"class":92},[82,67275,67276],{"class":84,"line":35263},[82,67277,67278],{"class":2828},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[82,67280,67281,67284,67287,67289,67291,67293],{"class":84,"line":35269},[82,67282,67283],{"class":88},"        this",[82,67285,67286],{"class":92},".classList.",[82,67288,7926],{"class":2384},[82,67290,93],{"class":92},[82,67292,67271],{"class":96},[82,67294,119],{"class":92},[82,67296,67297],{"class":84,"line":35280},[82,67298,486],{"emptyLinePlaceholder":485},[82,67300,67301],{"class":84,"line":35286},[82,67302,67303],{"class":2828},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[82,67305,67306],{"class":84,"line":35292},[82,67307,67308],{"class":2828},"        \u002F\u002F 干掉别人\n",[82,67310,67311,67313,67315,67317,67320,67322,67324,67326,67328],{"class":84,"line":35298},[82,67312,54486],{"class":92},[82,67314,56959],{"class":2384},[82,67316,93],{"class":92},[82,67318,67319],{"class":96},"'.tab-content .active'",[82,67321,59561],{"class":92},[82,67323,59564],{"class":2384},[82,67325,93],{"class":92},[82,67327,67271],{"class":96},[82,67329,119],{"class":92},[82,67331,67332],{"class":84,"line":35304},[82,67333,67334],{"class":2828},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[82,67336,67337,67339,67341,67343,67346,67348,67350,67352,67354,67356,67358,67360,67362],{"class":84,"line":35310},[82,67338,54486],{"class":92},[82,67340,56959],{"class":2384},[82,67342,93],{"class":92},[82,67344,67345],{"class":96},"`.tab-content .item:nth-child(${",[82,67347,3199],{"class":92},[82,67349,48130],{"class":112},[82,67351,27703],{"class":88},[82,67353,59590],{"class":96},[82,67355,59561],{"class":92},[82,67357,7926],{"class":2384},[82,67359,93],{"class":92},[82,67361,67271],{"class":96},[82,67363,119],{"class":92},[82,67365,67366],{"class":84,"line":35316},[82,67367,486],{"emptyLinePlaceholder":485},[82,67369,67370],{"class":84,"line":35322},[82,67371,67372],{"class":92},"      })\n",[82,67374,67375],{"class":84,"line":35342},[82,67376,4787],{"class":92},[82,67378,67379,67381,67383],{"class":84,"line":35348},[82,67380,54977],{"class":92},[82,67382,54375],{"class":53863},[82,67384,53870],{"class":92},[82,67386,67387,67389,67391],{"class":84,"line":35364},[82,67388,54347],{"class":92},[82,67390,54362],{"class":53863},[82,67392,53870],{"class":92},[82,67394,67395],{"class":84,"line":35370},[82,67396,486],{"emptyLinePlaceholder":485},[82,67398,67399,67401,67403],{"class":84,"line":35384},[82,67400,54347],{"class":92},[82,67402,53198],{"class":53863},[82,67404,53870],{"class":92},[19,67406,67407],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67409,67410],{},"在监听事件中，this指向的就是他的调用者",[19,67412,67413],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67415,56280],{},[19,67417,67418],{},"(function () {",[19,67420,67421],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67423,67424],{},"list.addEventListener('click', function (e) {",[19,67426,67427],{},"if (e.target.tagName === 'A') {",[19,67429,67430],{},"\u002F\u002F 排他思想",[19,67432,67433],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67435,67436],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67438,67439],{},"\u002F\u002F console.log(old);",[19,67441,67442],{},"\u002F\u002F 判断",[19,67444,67445],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67447,67448],{},"if (old) old.classList.remove('active')",[19,67450,67451],{},"e.target.classList.add('active')",[19,67453,3695],{},[19,67455,55024],{},[19,67457,67458],{},"})();",[65,67460,67462],{"id":67461},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[73,67464,67466],{"className":53196,"code":67465,"language":53198,"meta":78,"style":78},"\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",[32,67467,67468,67478,67482,67490,67494,67508,67522,67534,67542,67548,67558,67568,67572,67576,67583,67595,67606,67623,67636,67650,67660,67664,67668,67675,67686,67704,67714,67726,67730,67734,67741,67758,67769,67781,67785,67789,67796,67808,67812,67820,67828,67832,67840,67848,67856,67871,67915,67923,67936,67949,67962,67970,67978,67986,68014,68022,68034,68047,68060,68068,68076,68084,68110,68118,68131,68143,68156,68164,68172,68180,68206,68214,68227,68239,68252,68260,68268,68276,68281,68301,68306,68326,68331,68348,68353,68361,68366,68395,68408,68412,68416,68421,68425,68453,68458,68475,68480,68485,68490,68495,68521,68525,68529,68537,68545,68549],{"__ignoreMap":78},[82,67469,67470,67472,67474,67476],{"class":84,"line":85},[82,67471,53860],{"class":92},[82,67473,53864],{"class":53863},[82,67475,53867],{"class":2384},[82,67477,53870],{"class":92},[82,67479,67480],{"class":84,"line":157},[82,67481,486],{"emptyLinePlaceholder":485},[82,67483,67484,67486,67488],{"class":84,"line":404},[82,67485,3659],{"class":92},[82,67487,53198],{"class":53863},[82,67489,53870],{"class":92},[82,67491,67492],{"class":84,"line":413},[82,67493,486],{"emptyLinePlaceholder":485},[82,67495,67496,67498,67500,67502,67504,67506],{"class":84,"line":508},[82,67497,3659],{"class":92},[82,67499,53897],{"class":53863},[82,67501,53879],{"class":2384},[82,67503,113],{"class":92},[82,67505,53884],{"class":96},[82,67507,53870],{"class":92},[82,67509,67510,67512,67514,67516,67518,67520],{"class":84,"line":513},[82,67511,54705],{"class":92},[82,67513,53907],{"class":53863},[82,67515,53910],{"class":2384},[82,67517,113],{"class":92},[82,67519,53915],{"class":96},[82,67521,53870],{"class":92},[82,67523,67524,67526,67528,67530,67532],{"class":84,"line":1388},[82,67525,54705],{"class":92},[82,67527,53970],{"class":53863},[82,67529,57874],{"class":92},[82,67531,53970],{"class":53863},[82,67533,53870],{"class":92},[82,67535,67536,67538,67540],{"class":84,"line":1394},[82,67537,54705],{"class":92},[82,67539,2671],{"class":53863},[82,67541,53870],{"class":92},[82,67543,67544,67546],{"class":84,"line":1399},[82,67545,8995],{"class":53863},[82,67547,1349],{"class":92},[82,67549,67550,67552,67554,67556],{"class":84,"line":1430},[82,67551,57266],{"class":88},[82,67553,1357],{"class":92},[82,67555,2244],{"class":88},[82,67557,3909],{"class":92},[82,67559,67560,67562,67564,67566],{"class":84,"line":1818},[82,67561,57255],{"class":88},[82,67563,1357],{"class":92},[82,67565,2244],{"class":88},[82,67567,3909],{"class":92},[82,67569,67570],{"class":84,"line":2082},[82,67571,4787],{"class":92},[82,67573,67574],{"class":84,"line":2233},[82,67575,486],{"emptyLinePlaceholder":485},[82,67577,67578,67581],{"class":84,"line":2255},[82,67579,67580],{"class":53863},"    table",[82,67582,1349],{"class":92},[82,67584,67585,67588,67590,67593],{"class":84,"line":2260},[82,67586,67587],{"class":88},"      border-collapse",[82,67589,1357],{"class":92},[82,67591,67592],{"class":88},"collapse",[82,67594,3909],{"class":92},[82,67596,67597,67600,67602,67604],{"class":84,"line":2298},[82,67598,67599],{"class":88},"      border-spacing",[82,67601,1357],{"class":92},[82,67603,2244],{"class":88},[82,67605,3909],{"class":92},[82,67607,67608,67610,67612,67614,67616,67618,67621],{"class":84,"line":2303},[82,67609,64535],{"class":88},[82,67611,1357],{"class":92},[82,67613,2283],{"class":88},[82,67615,54054],{"class":112},[82,67617,54083],{"class":88},[82,67619,67620],{"class":88}," #c0c0c0",[82,67622,3909],{"class":92},[82,67624,67625,67627,67629,67632,67634],{"class":84,"line":2321},[82,67626,57331],{"class":88},[82,67628,1357],{"class":92},[82,67630,67631],{"class":88},"500",[82,67633,54054],{"class":112},[82,67635,3909],{"class":92},[82,67637,67638,67640,67642,67644,67646,67648],{"class":84,"line":2533},[82,67639,57266],{"class":88},[82,67641,1357],{"class":92},[82,67643,3069],{"class":88},[82,67645,54054],{"class":112},[82,67647,54118],{"class":88},[82,67649,3909],{"class":92},[82,67651,67652,67654,67656,67658],{"class":84,"line":2538},[82,67653,59844],{"class":88},[82,67655,1357],{"class":92},[82,67657,54154],{"class":88},[82,67659,3909],{"class":92},[82,67661,67662],{"class":84,"line":2548},[82,67663,4787],{"class":92},[82,67665,67666],{"class":84,"line":2579},[82,67667,486],{"emptyLinePlaceholder":485},[82,67669,67670,67673],{"class":84,"line":2585},[82,67671,67672],{"class":53863},"    th",[82,67674,1349],{"class":92},[82,67676,67677,67679,67681,67684],{"class":84,"line":4350},[82,67678,57444],{"class":88},[82,67680,1357],{"class":92},[82,67682,67683],{"class":88},"#09c",[82,67685,3909],{"class":92},[82,67687,67688,67691,67693,67695,67697,67699,67702],{"class":84,"line":4355},[82,67689,67690],{"class":88},"      font",[82,67692,1357],{"class":92},[82,67694,64897],{"class":88},[82,67696,66630],{"class":88},[82,67698,54054],{"class":112},[82,67700,67701],{"class":96}," \"微软雅黑\"",[82,67703,3909],{"class":92},[82,67705,67706,67708,67710,67712],{"class":84,"line":4360},[82,67707,59974],{"class":88},[82,67709,1357],{"class":92},[82,67711,63400],{"class":88},[82,67713,3909],{"class":92},[82,67715,67716,67718,67720,67722,67724],{"class":84,"line":4365},[82,67717,57345],{"class":88},[82,67719,1357],{"class":92},[82,67721,3550],{"class":88},[82,67723,54054],{"class":112},[82,67725,3909],{"class":92},[82,67727,67728],{"class":84,"line":4379},[82,67729,4787],{"class":92},[82,67731,67732],{"class":84,"line":4384},[82,67733,486],{"emptyLinePlaceholder":485},[82,67735,67736,67739],{"class":84,"line":5176},[82,67737,67738],{"class":53863},"    td",[82,67740,1349],{"class":92},[82,67742,67743,67745,67747,67749,67751,67753,67756],{"class":84,"line":5190},[82,67744,64535],{"class":88},[82,67746,1357],{"class":92},[82,67748,2283],{"class":88},[82,67750,54054],{"class":112},[82,67752,54083],{"class":88},[82,67754,67755],{"class":88}," #d0d0d0",[82,67757,3909],{"class":92},[82,67759,67760,67762,67764,67767],{"class":84,"line":5198},[82,67761,59974],{"class":88},[82,67763,1357],{"class":92},[82,67765,67766],{"class":88},"#404060",[82,67768,3909],{"class":92},[82,67770,67771,67773,67775,67777,67779],{"class":84,"line":5203},[82,67772,57255],{"class":88},[82,67774,1357],{"class":92},[82,67776,440],{"class":88},[82,67778,54054],{"class":112},[82,67780,3909],{"class":92},[82,67782,67783],{"class":84,"line":5209},[82,67784,4787],{"class":92},[82,67786,67787],{"class":84,"line":5215},[82,67788,486],{"emptyLinePlaceholder":485},[82,67790,67791,67794],{"class":84,"line":5220},[82,67792,67793],{"class":2384},"    .allCheck",[82,67795,1349],{"class":92},[82,67797,67798,67800,67802,67804,67806],{"class":84,"line":10539},[82,67799,57331],{"class":88},[82,67801,1357],{"class":92},[82,67803,3366],{"class":88},[82,67805,54054],{"class":112},[82,67807,3909],{"class":92},[82,67809,67810],{"class":84,"line":10563},[82,67811,4787],{"class":92},[82,67813,67814,67816,67818],{"class":84,"line":10568},[82,67815,54977],{"class":92},[82,67817,2671],{"class":53863},[82,67819,53870],{"class":92},[82,67821,67822,67824,67826],{"class":84,"line":10574},[82,67823,54347],{"class":92},[82,67825,53897],{"class":53863},[82,67827,53870],{"class":92},[82,67829,67830],{"class":84,"line":10601},[82,67831,486],{"emptyLinePlaceholder":485},[82,67833,67834,67836,67838],{"class":84,"line":10606},[82,67835,3659],{"class":92},[82,67837,54362],{"class":53863},[82,67839,53870],{"class":92},[82,67841,67842,67844,67846],{"class":84,"line":10612},[82,67843,54705],{"class":92},[82,67845,278],{"class":53863},[82,67847,53870],{"class":92},[82,67849,67850,67852,67854],{"class":84,"line":10624},[82,67851,53904],{"class":92},[82,67853,284],{"class":53863},[82,67855,53870],{"class":92},[82,67857,67858,67860,67862,67864,67866,67869],{"class":84,"line":10636},[82,67859,57794],{"class":92},[82,67861,287],{"class":53863},[82,67863,56046],{"class":2384},[82,67865,113],{"class":92},[82,67867,67868],{"class":96},"\"allCheck\"",[82,67870,53870],{"class":92},[82,67872,67873,67875,67877,67879,67881,67883,67885,67887,67889,67891,67893,67896,67899,67901,67903,67905,67908,67911,67913],{"class":84,"line":10648},[82,67874,57862],{"class":92},[82,67876,56381],{"class":53863},[82,67878,56384],{"class":2384},[82,67880,113],{"class":92},[82,67882,56389],{"class":96},[82,67884,17506],{"class":2384},[82,67886,113],{"class":92},[82,67888,1793],{"class":96},[82,67890,17545],{"class":2384},[82,67892,113],{"class":92},[82,67894,67895],{"class":96},"\"checkAll\"",[82,67897,67898],{"class":92},"> \u003C",[82,67900,82],{"class":53863},[82,67902,56046],{"class":2384},[82,67904,113],{"class":92},[82,67906,67907],{"class":96},"\"all\"",[82,67909,67910],{"class":92},">全选\u003C\u002F",[82,67912,82],{"class":53863},[82,67914,53870],{"class":92},[82,67916,67917,67919,67921],{"class":84,"line":12307},[82,67918,57967],{"class":92},[82,67920,287],{"class":53863},[82,67922,53870],{"class":92},[82,67924,67925,67927,67929,67932,67934],{"class":84,"line":12332},[82,67926,57794],{"class":92},[82,67928,287],{"class":53863},[82,67930,67931],{"class":92},">商品\u003C\u002F",[82,67933,287],{"class":53863},[82,67935,53870],{"class":92},[82,67937,67938,67940,67942,67945,67947],{"class":84,"line":12355},[82,67939,57794],{"class":92},[82,67941,287],{"class":53863},[82,67943,67944],{"class":92},">商家\u003C\u002F",[82,67946,287],{"class":53863},[82,67948,53870],{"class":92},[82,67950,67951,67953,67955,67958,67960],{"class":84,"line":12379},[82,67952,57794],{"class":92},[82,67954,287],{"class":53863},[82,67956,67957],{"class":92},">价格\u003C\u002F",[82,67959,287],{"class":53863},[82,67961,53870],{"class":92},[82,67963,67964,67966,67968],{"class":84,"line":12384},[82,67965,54338],{"class":92},[82,67967,284],{"class":53863},[82,67969,53870],{"class":92},[82,67971,67972,67974,67976],{"class":84,"line":12389},[82,67973,53904],{"class":92},[82,67975,284],{"class":53863},[82,67977,53870],{"class":92},[82,67979,67980,67982,67984],{"class":84,"line":12394},[82,67981,57794],{"class":92},[82,67983,299],{"class":53863},[82,67985,53870],{"class":92},[82,67987,67988,67990,67992,67994,67996,67998,68000,68002,68005,68007,68009,68012],{"class":84,"line":12403},[82,67989,57862],{"class":92},[82,67991,56381],{"class":53863},[82,67993,56384],{"class":2384},[82,67995,113],{"class":92},[82,67997,56389],{"class":96},[82,67999,17506],{"class":2384},[82,68001,113],{"class":92},[82,68003,68004],{"class":96},"\"check\"",[82,68006,56046],{"class":2384},[82,68008,113],{"class":92},[82,68010,68011],{"class":96},"\"ck\"",[82,68013,53870],{"class":92},[82,68015,68016,68018,68020],{"class":84,"line":12408},[82,68017,57967],{"class":92},[82,68019,299],{"class":53863},[82,68021,53870],{"class":92},[82,68023,68024,68026,68028,68030,68032],{"class":84,"line":12414},[82,68025,57794],{"class":92},[82,68027,299],{"class":53863},[82,68029,63731],{"class":92},[82,68031,299],{"class":53863},[82,68033,53870],{"class":92},[82,68035,68036,68038,68040,68043,68045],{"class":84,"line":12435},[82,68037,57794],{"class":92},[82,68039,299],{"class":53863},[82,68041,68042],{"class":92},">小米\u003C\u002F",[82,68044,299],{"class":53863},[82,68046,53870],{"class":92},[82,68048,68049,68051,68053,68056,68058],{"class":84,"line":12441},[82,68050,57794],{"class":92},[82,68052,299],{"class":53863},[82,68054,68055],{"class":92},">￥1999\u003C\u002F",[82,68057,299],{"class":53863},[82,68059,53870],{"class":92},[82,68061,68062,68064,68066],{"class":84,"line":12455},[82,68063,54338],{"class":92},[82,68065,284],{"class":53863},[82,68067,53870],{"class":92},[82,68069,68070,68072,68074],{"class":84,"line":12461},[82,68071,53904],{"class":92},[82,68073,284],{"class":53863},[82,68075,53870],{"class":92},[82,68077,68078,68080,68082],{"class":84,"line":12488},[82,68079,57794],{"class":92},[82,68081,299],{"class":53863},[82,68083,53870],{"class":92},[82,68085,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108],{"class":84,"line":12497},[82,68087,57862],{"class":92},[82,68089,56381],{"class":53863},[82,68091,56384],{"class":2384},[82,68093,113],{"class":92},[82,68095,56389],{"class":96},[82,68097,17506],{"class":2384},[82,68099,113],{"class":92},[82,68101,68004],{"class":96},[82,68103,56046],{"class":2384},[82,68105,113],{"class":92},[82,68107,68011],{"class":96},[82,68109,53870],{"class":92},[82,68111,68112,68114,68116],{"class":84,"line":12503},[82,68113,57967],{"class":92},[82,68115,299],{"class":53863},[82,68117,53870],{"class":92},[82,68119,68120,68122,68124,68127,68129],{"class":84,"line":12511},[82,68121,57794],{"class":92},[82,68123,299],{"class":53863},[82,68125,68126],{"class":92},">小米净水器\u003C\u002F",[82,68128,299],{"class":53863},[82,68130,53870],{"class":92},[82,68132,68133,68135,68137,68139,68141],{"class":84,"line":12516},[82,68134,57794],{"class":92},[82,68136,299],{"class":53863},[82,68138,68042],{"class":92},[82,68140,299],{"class":53863},[82,68142,53870],{"class":92},[82,68144,68145,68147,68149,68152,68154],{"class":84,"line":19189},[82,68146,57794],{"class":92},[82,68148,299],{"class":53863},[82,68150,68151],{"class":92},">￥4999\u003C\u002F",[82,68153,299],{"class":53863},[82,68155,53870],{"class":92},[82,68157,68158,68160,68162],{"class":84,"line":19195},[82,68159,54338],{"class":92},[82,68161,284],{"class":53863},[82,68163,53870],{"class":92},[82,68165,68166,68168,68170],{"class":84,"line":19218},[82,68167,53904],{"class":92},[82,68169,284],{"class":53863},[82,68171,53870],{"class":92},[82,68173,68174,68176,68178],{"class":84,"line":19224},[82,68175,57794],{"class":92},[82,68177,299],{"class":53863},[82,68179,53870],{"class":92},[82,68181,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204],{"class":84,"line":19247},[82,68183,57862],{"class":92},[82,68185,56381],{"class":53863},[82,68187,56384],{"class":2384},[82,68189,113],{"class":92},[82,68191,56389],{"class":96},[82,68193,17506],{"class":2384},[82,68195,113],{"class":92},[82,68197,68004],{"class":96},[82,68199,56046],{"class":2384},[82,68201,113],{"class":92},[82,68203,68011],{"class":96},[82,68205,53870],{"class":92},[82,68207,68208,68210,68212],{"class":84,"line":19261},[82,68209,57967],{"class":92},[82,68211,299],{"class":53863},[82,68213,53870],{"class":92},[82,68215,68216,68218,68220,68223,68225],{"class":84,"line":19281},[82,68217,57794],{"class":92},[82,68219,299],{"class":53863},[82,68221,68222],{"class":92},">小米电视\u003C\u002F",[82,68224,299],{"class":53863},[82,68226,53870],{"class":92},[82,68228,68229,68231,68233,68235,68237],{"class":84,"line":19287},[82,68230,57794],{"class":92},[82,68232,299],{"class":53863},[82,68234,68042],{"class":92},[82,68236,299],{"class":53863},[82,68238,53870],{"class":92},[82,68240,68241,68243,68245,68248,68250],{"class":84,"line":19298},[82,68242,57794],{"class":92},[82,68244,299],{"class":53863},[82,68246,68247],{"class":92},">￥5999\u003C\u002F",[82,68249,299],{"class":53863},[82,68251,53870],{"class":92},[82,68253,68254,68256,68258],{"class":84,"line":19321},[82,68255,54338],{"class":92},[82,68257,284],{"class":53863},[82,68259,53870],{"class":92},[82,68261,68262,68264,68266],{"class":84,"line":19343},[82,68263,54977],{"class":92},[82,68265,278],{"class":53863},[82,68267,53870],{"class":92},[82,68269,68270,68272,68274],{"class":84,"line":19348},[82,68271,54705],{"class":92},[82,68273,54375],{"class":53863},[82,68275,53870],{"class":92},[82,68277,68278],{"class":84,"line":19354},[82,68279,68280],{"class":2828},"    \u002F\u002F 1. 获取大复选框\n",[82,68282,68283,68285,68288,68290,68292,68294,68296,68299],{"class":84,"line":19368},[82,68284,13811],{"class":112},[82,68286,68287],{"class":88}," checkAll",[82,68289,259],{"class":112},[82,68291,56956],{"class":92},[82,68293,56959],{"class":2384},[82,68295,93],{"class":92},[82,68297,68298],{"class":96},"'#checkAll'",[82,68300,119],{"class":92},[82,68302,68303],{"class":84,"line":19381},[82,68304,68305],{"class":2828},"    \u002F\u002F 2. 获取所有的小复选框\n",[82,68307,68308,68310,68313,68315,68317,68319,68321,68324],{"class":84,"line":19386},[82,68309,13811],{"class":112},[82,68311,68312],{"class":88}," cks",[82,68314,259],{"class":112},[82,68316,56956],{"class":92},[82,68318,58240],{"class":2384},[82,68320,93],{"class":92},[82,68322,68323],{"class":96},"'.ck'",[82,68325,119],{"class":92},[82,68327,68328],{"class":84,"line":19400},[82,68329,68330],{"class":2828},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[82,68332,68333,68336,68338,68340,68342,68344,68346],{"class":84,"line":19405},[82,68334,68335],{"class":92},"    checkAll.",[82,68337,60371],{"class":2384},[82,68339,93],{"class":92},[82,68341,60376],{"class":96},[82,68343,100],{"class":92},[82,68345,57009],{"class":112},[82,68347,57012],{"class":92},[82,68349,68350],{"class":84,"line":19411},[82,68351,68352],{"class":2828},"      \u002F\u002F 得到当前大复选框的选中状态\n",[82,68354,68355,68358],{"class":84,"line":19416},[82,68356,68357],{"class":2828},"      \u002F\u002F console.log(checkAll.checked)",[82,68359,68360],{"class":2828},"  \u002F\u002F 得到 是 true 或者是 false\n",[82,68362,68363],{"class":84,"line":19430},[82,68364,68365],{"class":2828},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[82,68367,68368,68370,68372,68374,68376,68378,68380,68382,68384,68387,68389,68391,68393],{"class":84,"line":19435},[82,68369,54844],{"class":112},[82,68371,4265],{"class":92},[82,68373,54408],{"class":112},[82,68375,12029],{"class":92},[82,68377,113],{"class":112},[82,68379,6688],{"class":88},[82,68381,12036],{"class":92},[82,68383,3659],{"class":112},[82,68385,68386],{"class":92}," cks.",[82,68388,54529],{"class":88},[82,68390,5810],{"class":92},[82,68392,4892],{"class":112},[82,68394,15031],{"class":92},[82,68396,68397,68400,68402,68405],{"class":84,"line":19440},[82,68398,68399],{"class":92},"        cks[i].checked ",[82,68401,113],{"class":112},[82,68403,68404],{"class":88}," this",[82,68406,68407],{"class":92},".checked\n",[82,68409,68410],{"class":84,"line":19454},[82,68411,54958],{"class":92},[82,68413,68414],{"class":84,"line":19466},[82,68415,36029],{"class":92},[82,68417,68418],{"class":84,"line":19471},[82,68419,68420],{"class":2828},"    \u002F\u002F 5. 小复选框控制大复选框\n",[82,68422,68423],{"class":84,"line":19484},[82,68424,486],{"emptyLinePlaceholder":485},[82,68426,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447,68449,68451],{"class":84,"line":19489},[82,68428,1888],{"class":112},[82,68430,4265],{"class":92},[82,68432,54408],{"class":112},[82,68434,12029],{"class":92},[82,68436,113],{"class":112},[82,68438,6688],{"class":88},[82,68440,12036],{"class":92},[82,68442,3659],{"class":112},[82,68444,68386],{"class":92},[82,68446,54529],{"class":88},[82,68448,5810],{"class":92},[82,68450,4892],{"class":112},[82,68452,15031],{"class":92},[82,68454,68455],{"class":84,"line":19494},[82,68456,68457],{"class":2828},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[82,68459,68460,68463,68465,68467,68469,68471,68473],{"class":84,"line":19499},[82,68461,68462],{"class":92},"      cks[i].",[82,68464,60371],{"class":2384},[82,68466,93],{"class":92},[82,68468,60376],{"class":96},[82,68470,100],{"class":92},[82,68472,57009],{"class":112},[82,68474,57012],{"class":92},[82,68476,68477],{"class":84,"line":19512},[82,68478,68479],{"class":2828},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[82,68481,68482],{"class":84,"line":19517},[82,68483,68484],{"class":2828},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[82,68486,68487],{"class":84,"line":35202},[82,68488,68489],{"class":2828},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[82,68491,68492],{"class":84,"line":35208},[82,68493,68494],{"class":2828},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[82,68496,68497,68500,68502,68504,68506,68508,68511,68513,68515,68517,68519],{"class":84,"line":35214},[82,68498,68499],{"class":92},"        checkAll.checked ",[82,68501,113],{"class":112},[82,68503,56956],{"class":92},[82,68505,58240],{"class":2384},[82,68507,93],{"class":92},[82,68509,68510],{"class":96},"'.ck:checked'",[82,68512,33402],{"class":92},[82,68514,54529],{"class":88},[82,68516,60464],{"class":112},[82,68518,68386],{"class":92},[82,68520,58389],{"class":88},[82,68522,68523],{"class":84,"line":35220},[82,68524,67372],{"class":92},[82,68526,68527],{"class":84,"line":35226},[82,68528,4787],{"class":92},[82,68530,68531,68533,68535],{"class":84,"line":35237},[82,68532,54977],{"class":92},[82,68534,54375],{"class":53863},[82,68536,53870],{"class":92},[82,68538,68539,68541,68543],{"class":84,"line":35243},[82,68540,54347],{"class":92},[82,68542,54362],{"class":53863},[82,68544,53870],{"class":92},[82,68546,68547],{"class":84,"line":35263},[82,68548,486],{"emptyLinePlaceholder":485},[82,68550,68551,68553,68555],{"class":84,"line":35269},[82,68552,54347],{"class":92},[82,68554,53198],{"class":53863},[82,68556,53870],{"class":92},[19,68558,68559],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68561,68562],{},"用好之间比较得到的布尔值！！！",[19,68564,68565,68566,68569,68570,4265,68573,1147,68575,68578],{},"在 JS 里访问的时候，",[32,68567,68568],{},"checkbox.checked"," 是一个 ",[2913,68571,68572],{},"布尔值",[32,68574,3978],{},[32,68576,68577],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68580,68581,68582,68585,68586],{},"HTML 的 ",[32,68583,68584],{},"checked=\"checked\""," 只是 ",[2913,68587,68588,68589,68592],{},"初始值；JS 的 ",[32,68590,68591],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68594,68595],{},"：checked是一个伪类选择器",[19,68597,68598],{},[4078,68599],{"alt":78,"src":68600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68602,68603,68606],{},[68604,68605],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68608,68609],{},[4078,68610],{"alt":78,"src":68611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68613,68615],{"id":68614},"_33-dom事件进阶","3.3 DOM事件进阶",[65,68617,68619],{"id":68618},"_331-事件流","3.3.1 事件流",[19,68621,68622],{},[4078,68623],{"alt":78,"src":68624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24582,68626,68628],{"id":68627},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68630,68631],{},[4078,68632],{"alt":78,"src":68633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[73,68635,68637],{"className":53196,"code":68636,"language":53198,"meta":78,"style":78},"\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",[32,68638,68639,68649,68663,68667,68675,68689,68709,68721,68729,68736,68748,68760,68770,68774,68778,68785,68797,68809,68819,68823,68831,68839,68843,68851,68866,68885,68893,68901,68921,68941,68957,68968,68976,68993,69004,69012,69029,69040,69048,69056,69064,69068],{"__ignoreMap":78},[82,68640,68641,68643,68645,68647],{"class":84,"line":85},[82,68642,53860],{"class":92},[82,68644,53864],{"class":53863},[82,68646,53867],{"class":2384},[82,68648,53870],{"class":92},[82,68650,68651,68653,68655,68657,68659,68661],{"class":84,"line":157},[82,68652,3659],{"class":92},[82,68654,53198],{"class":53863},[82,68656,53879],{"class":2384},[82,68658,113],{"class":92},[82,68660,53884],{"class":96},[82,68662,53870],{"class":92},[82,68664,68665],{"class":84,"line":404},[82,68666,486],{"emptyLinePlaceholder":485},[82,68668,68669,68671,68673],{"class":84,"line":413},[82,68670,3659],{"class":92},[82,68672,53897],{"class":53863},[82,68674,53870],{"class":92},[82,68676,68677,68679,68681,68683,68685,68687],{"class":84,"line":508},[82,68678,54705],{"class":92},[82,68680,53907],{"class":53863},[82,68682,53910],{"class":2384},[82,68684,113],{"class":92},[82,68686,53915],{"class":96},[82,68688,53870],{"class":92},[82,68690,68691,68693,68695,68697,68699,68701,68703,68705,68707],{"class":84,"line":513},[82,68692,54705],{"class":92},[82,68694,53907],{"class":53863},[82,68696,17506],{"class":2384},[82,68698,113],{"class":92},[82,68700,53954],{"class":96},[82,68702,53934],{"class":2384},[82,68704,113],{"class":92},[82,68706,53961],{"class":96},[82,68708,53870],{"class":92},[82,68710,68711,68713,68715,68717,68719],{"class":84,"line":1388},[82,68712,54705],{"class":92},[82,68714,53970],{"class":53863},[82,68716,53973],{"class":92},[82,68718,53970],{"class":53863},[82,68720,53870],{"class":92},[82,68722,68723,68725,68727],{"class":84,"line":1394},[82,68724,54705],{"class":92},[82,68726,2671],{"class":53863},[82,68728,53870],{"class":92},[82,68730,68731,68734],{"class":84,"line":1399},[82,68732,68733],{"class":2384},"    .father",[82,68735,1349],{"class":92},[82,68737,68738,68740,68742,68744,68746],{"class":84,"line":1430},[82,68739,57331],{"class":88},[82,68741,1357],{"class":92},[82,68743,67631],{"class":88},[82,68745,54054],{"class":112},[82,68747,3909],{"class":92},[82,68749,68750,68752,68754,68756,68758],{"class":84,"line":1818},[82,68751,57345],{"class":88},[82,68753,1357],{"class":92},[82,68755,67631],{"class":88},[82,68757,54054],{"class":112},[82,68759,3909],{"class":92},[82,68761,68762,68764,68766,68768],{"class":84,"line":2082},[82,68763,57444],{"class":88},[82,68765,1357],{"class":92},[82,68767,54207],{"class":88},[82,68769,3909],{"class":92},[82,68771,68772],{"class":84,"line":2233},[82,68773,4787],{"class":92},[82,68775,68776],{"class":84,"line":2255},[82,68777,486],{"emptyLinePlaceholder":485},[82,68779,68780,68783],{"class":84,"line":2260},[82,68781,68782],{"class":2384},"    .son",[82,68784,1349],{"class":92},[82,68786,68787,68789,68791,68793,68795],{"class":84,"line":2298},[82,68788,57331],{"class":88},[82,68790,1357],{"class":92},[82,68792,4325],{"class":88},[82,68794,54054],{"class":112},[82,68796,3909],{"class":92},[82,68798,68799,68801,68803,68805,68807],{"class":84,"line":2303},[82,68800,57345],{"class":88},[82,68802,1357],{"class":92},[82,68804,4325],{"class":88},[82,68806,54054],{"class":112},[82,68808,3909],{"class":92},[82,68810,68811,68813,68815,68817],{"class":84,"line":2321},[82,68812,57444],{"class":88},[82,68814,1357],{"class":92},[82,68816,57449],{"class":88},[82,68818,3909],{"class":92},[82,68820,68821],{"class":84,"line":2533},[82,68822,4787],{"class":92},[82,68824,68825,68827,68829],{"class":84,"line":2538},[82,68826,54977],{"class":92},[82,68828,2671],{"class":53863},[82,68830,53870],{"class":92},[82,68832,68833,68835,68837],{"class":84,"line":2548},[82,68834,54347],{"class":92},[82,68836,53897],{"class":53863},[82,68838,53870],{"class":92},[82,68840,68841],{"class":84,"line":2579},[82,68842,486],{"emptyLinePlaceholder":485},[82,68844,68845,68847,68849],{"class":84,"line":2585},[82,68846,3659],{"class":92},[82,68848,54362],{"class":53863},[82,68850,53870],{"class":92},[82,68852,68853,68855,68857,68859,68861,68864],{"class":84,"line":4350},[82,68854,54705],{"class":92},[82,68856,54173],{"class":53863},[82,68858,56046],{"class":2384},[82,68860,113],{"class":92},[82,68862,68863],{"class":96},"\"father\"",[82,68865,53870],{"class":92},[82,68867,68868,68870,68872,68874,68876,68879,68881,68883],{"class":84,"line":4355},[82,68869,53904],{"class":92},[82,68871,54173],{"class":53863},[82,68873,56046],{"class":2384},[82,68875,113],{"class":92},[82,68877,68878],{"class":96},"\"son\"",[82,68880,57874],{"class":92},[82,68882,54173],{"class":53863},[82,68884,53870],{"class":92},[82,68886,68887,68889,68891],{"class":84,"line":4360},[82,68888,54977],{"class":92},[82,68890,54173],{"class":53863},[82,68892,53870],{"class":92},[82,68894,68895,68897,68899],{"class":84,"line":4365},[82,68896,54705],{"class":92},[82,68898,54375],{"class":53863},[82,68900,53870],{"class":92},[82,68902,68903,68905,68908,68910,68912,68914,68916,68919],{"class":84,"line":4379},[82,68904,13811],{"class":112},[82,68906,68907],{"class":88}," fa",[82,68909,259],{"class":112},[82,68911,56956],{"class":92},[82,68913,56959],{"class":2384},[82,68915,93],{"class":92},[82,68917,68918],{"class":96},"'.father'",[82,68920,119],{"class":92},[82,68922,68923,68925,68928,68930,68932,68934,68936,68939],{"class":84,"line":4384},[82,68924,13811],{"class":112},[82,68926,68927],{"class":88}," son",[82,68929,259],{"class":112},[82,68931,56956],{"class":92},[82,68933,56959],{"class":2384},[82,68935,93],{"class":92},[82,68937,68938],{"class":96},"'.son'",[82,68940,119],{"class":92},[82,68942,68943,68945,68947,68949,68951,68953,68955],{"class":84,"line":5176},[82,68944,54967],{"class":92},[82,68946,60371],{"class":2384},[82,68948,93],{"class":92},[82,68950,60376],{"class":96},[82,68952,100],{"class":92},[82,68954,57009],{"class":112},[82,68956,57012],{"class":92},[82,68958,68959,68961,68963,68966],{"class":84,"line":5190},[82,68960,61483],{"class":2384},[82,68962,93],{"class":92},[82,68964,68965],{"class":96},"'woshiu1'",[82,68967,119],{"class":92},[82,68969,68970,68972,68974],{"class":84,"line":5198},[82,68971,57095],{"class":92},[82,68973,3978],{"class":88},[82,68975,119],{"class":92},[82,68977,68978,68981,68983,68985,68987,68989,68991],{"class":84,"line":5203},[82,68979,68980],{"class":92},"    fa.",[82,68982,60371],{"class":2384},[82,68984,93],{"class":92},[82,68986,60376],{"class":96},[82,68988,100],{"class":92},[82,68990,57009],{"class":112},[82,68992,57012],{"class":92},[82,68994,68995,68997,68999,69002],{"class":84,"line":5209},[82,68996,61483],{"class":2384},[82,68998,93],{"class":92},[82,69000,69001],{"class":96},"'1'",[82,69003,119],{"class":92},[82,69005,69006,69008,69010],{"class":84,"line":5215},[82,69007,57095],{"class":92},[82,69009,3978],{"class":88},[82,69011,119],{"class":92},[82,69013,69014,69017,69019,69021,69023,69025,69027],{"class":84,"line":5220},[82,69015,69016],{"class":92},"    son.",[82,69018,60371],{"class":2384},[82,69020,93],{"class":92},[82,69022,60376],{"class":96},[82,69024,100],{"class":92},[82,69026,57009],{"class":112},[82,69028,57012],{"class":92},[82,69030,69031,69033,69035,69038],{"class":84,"line":10539},[82,69032,61483],{"class":2384},[82,69034,93],{"class":92},[82,69036,69037],{"class":96},"'2'",[82,69039,119],{"class":92},[82,69041,69042,69044,69046],{"class":84,"line":10563},[82,69043,57095],{"class":92},[82,69045,3978],{"class":88},[82,69047,119],{"class":92},[82,69049,69050,69052,69054],{"class":84,"line":10568},[82,69051,54977],{"class":92},[82,69053,54375],{"class":53863},[82,69055,53870],{"class":92},[82,69057,69058,69060,69062],{"class":84,"line":10574},[82,69059,54347],{"class":92},[82,69061,54362],{"class":53863},[82,69063,53870],{"class":92},[82,69065,69066],{"class":84,"line":10601},[82,69067,486],{"emptyLinePlaceholder":485},[82,69069,69070,69072,69074],{"class":84,"line":10606},[82,69071,54347],{"class":92},[82,69073,53198],{"class":53863},[82,69075,53870],{"class":92},[19,69077,69078],{},[4078,69079],{"alt":78,"src":69080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,69082,69083],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24582,69085,69087],{"id":69086},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,69089,69090],{},[4078,69091],{"alt":78,"src":69092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,69094,69095],{},"反着来",[19,69097,69098],{},"注意是同名事件，比如都是‘click’",[24582,69100,69102],{"id":69101},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,69104,69105],{},[4078,69106],{"alt":78,"src":69107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24582,69109,69111],{"id":69110},"_3314-解绑事件","3.3.1.4 解绑事件",[19,69113,69114],{},[4078,69115],{"alt":78,"src":69116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,69118,69119],{},[4078,69120],{"alt":78,"src":69121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24582,69123,69125],{"id":69124},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,69127,69128],{},[29,69129,69130],{},"事件类型的区别",[19,69132,69133],{},[4078,69134],{"alt":78,"src":69135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,69137,69138],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,69140,69141],{"start":157},[29,69142,69143],{},"注册事件的区别",[19,69145,69146],{},[4078,69147],{"alt":78,"src":69148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24582,69150,69152],{"id":69151},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,69154,69155],{},[4078,69156],{"alt":78,"src":69157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69159,69160],{},[4078,69161],{"alt":78,"src":69162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[73,69164,69166],{"className":55627,"code":69165,"language":55629,"meta":78,"style":78},"\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",[32,69167,69168,69176,69193,69216,69224,69229,69234,69239,69243,69251,69259],{"__ignoreMap":78},[82,69169,69170,69172,69174],{"class":84,"line":85},[82,69171,3659],{"class":92},[82,69173,54362],{"class":53863},[82,69175,53870],{"class":92},[82,69177,69178,69180,69183,69186,69188,69191],{"class":84,"line":157},[82,69179,54705],{"class":92},[82,69181,69182],{"class":53863},"form",[82,69184,69185],{"class":2384}," action",[82,69187,113],{"class":92},[82,69189,69190],{"class":96},"\"http:\u002F\u002Fwww.itcast.cn\"",[82,69192,53870],{"class":92},[82,69194,69195,69197,69199,69201,69203,69206,69209,69211,69214],{"class":84,"line":404},[82,69196,53904],{"class":92},[82,69198,56381],{"class":53863},[82,69200,56384],{"class":2384},[82,69202,113],{"class":92},[82,69204,69205],{"class":96},"\"submit\"",[82,69207,69208],{"class":2384}," value",[82,69210,113],{"class":92},[82,69212,69213],{"class":96},"\"免费注册\"",[82,69215,53870],{"class":92},[82,69217,69218,69220,69222],{"class":84,"line":413},[82,69219,53904],{"class":92},[82,69221,54375],{"class":53863},[82,69223,53870],{"class":92},[82,69225,69226],{"class":84,"line":508},[82,69227,69228],{"class":92},"      const form = document.querySelector('form')\n",[82,69230,69231],{"class":84,"line":513},[82,69232,69233],{"class":92},"      form.addEventListener('submit', function (e) {\n",[82,69235,69236],{"class":84,"line":1388},[82,69237,69238],{"class":92},"        e.preventDefault()\n",[82,69240,69241],{"class":84,"line":1394},[82,69242,67372],{"class":92},[82,69244,69245,69247,69249],{"class":84,"line":1399},[82,69246,54338],{"class":92},[82,69248,54375],{"class":53863},[82,69250,53870],{"class":92},[82,69252,69253,69255,69257],{"class":84,"line":1430},[82,69254,54977],{"class":92},[82,69256,69182],{"class":53863},[82,69258,53870],{"class":92},[82,69260,69261,69263,69265],{"class":84,"line":1818},[82,69262,54347],{"class":92},[82,69264,54362],{"class":53863},[82,69266,53870],{"class":92},[19,69268,69269],{},"点击不在跳转！！！",[65,69271,69273],{"id":69272},"_332-事件委托","3.3.2 事件委托",[19,69275,69276],{},[4078,69277],{"alt":78,"src":69278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[73,69280,69282],{"className":53196,"code":69281,"language":53198,"meta":78,"style":78},"\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",[32,69283,69284,69294,69308,69312,69320,69334,69354,69366,69374,69378,69386,69394,69406,69418,69430,69442,69454,69467,69475,69483,69488,69507,69528,69533,69538,69543,69548,69557,69561,69571,69575,69580,69585,69599,69609,69613,69617,69625,69633,69637],{"__ignoreMap":78},[82,69285,69286,69288,69290,69292],{"class":84,"line":85},[82,69287,53860],{"class":92},[82,69289,53864],{"class":53863},[82,69291,53867],{"class":2384},[82,69293,53870],{"class":92},[82,69295,69296,69298,69300,69302,69304,69306],{"class":84,"line":157},[82,69297,3659],{"class":92},[82,69299,53198],{"class":53863},[82,69301,53879],{"class":2384},[82,69303,113],{"class":92},[82,69305,53884],{"class":96},[82,69307,53870],{"class":92},[82,69309,69310],{"class":84,"line":404},[82,69311,486],{"emptyLinePlaceholder":485},[82,69313,69314,69316,69318],{"class":84,"line":413},[82,69315,3659],{"class":92},[82,69317,53897],{"class":53863},[82,69319,53870],{"class":92},[82,69321,69322,69324,69326,69328,69330,69332],{"class":84,"line":508},[82,69323,54705],{"class":92},[82,69325,53907],{"class":53863},[82,69327,53910],{"class":2384},[82,69329,113],{"class":92},[82,69331,53915],{"class":96},[82,69333,53870],{"class":92},[82,69335,69336,69338,69340,69342,69344,69346,69348,69350,69352],{"class":84,"line":513},[82,69337,54705],{"class":92},[82,69339,53907],{"class":53863},[82,69341,17506],{"class":2384},[82,69343,113],{"class":92},[82,69345,53954],{"class":96},[82,69347,53934],{"class":2384},[82,69349,113],{"class":92},[82,69351,53961],{"class":96},[82,69353,53870],{"class":92},[82,69355,69356,69358,69360,69362,69364],{"class":84,"line":1388},[82,69357,54705],{"class":92},[82,69359,53970],{"class":53863},[82,69361,53973],{"class":92},[82,69363,53970],{"class":53863},[82,69365,53870],{"class":92},[82,69367,69368,69370,69372],{"class":84,"line":1394},[82,69369,54347],{"class":92},[82,69371,53897],{"class":53863},[82,69373,53870],{"class":92},[82,69375,69376],{"class":84,"line":1399},[82,69377,486],{"emptyLinePlaceholder":485},[82,69379,69380,69382,69384],{"class":84,"line":1430},[82,69381,3659],{"class":92},[82,69383,54362],{"class":53863},[82,69385,53870],{"class":92},[82,69387,69388,69390,69392],{"class":84,"line":1818},[82,69389,54705],{"class":92},[82,69391,3755],{"class":53863},[82,69393,53870],{"class":92},[82,69395,69396,69398,69400,69402,69404],{"class":84,"line":2082},[82,69397,53904],{"class":92},[82,69399,29],{"class":53863},[82,69401,56526],{"class":92},[82,69403,29],{"class":53863},[82,69405,53870],{"class":92},[82,69407,69408,69410,69412,69414,69416],{"class":84,"line":2233},[82,69409,53904],{"class":92},[82,69411,29],{"class":53863},[82,69413,56545],{"class":92},[82,69415,29],{"class":53863},[82,69417,53870],{"class":92},[82,69419,69420,69422,69424,69426,69428],{"class":84,"line":2255},[82,69421,53904],{"class":92},[82,69423,29],{"class":53863},[82,69425,56564],{"class":92},[82,69427,29],{"class":53863},[82,69429,53870],{"class":92},[82,69431,69432,69434,69436,69438,69440],{"class":84,"line":2260},[82,69433,53904],{"class":92},[82,69435,29],{"class":53863},[82,69437,56583],{"class":92},[82,69439,29],{"class":53863},[82,69441,53870],{"class":92},[82,69443,69444,69446,69448,69450,69452],{"class":84,"line":2298},[82,69445,53904],{"class":92},[82,69447,29],{"class":53863},[82,69449,56602],{"class":92},[82,69451,29],{"class":53863},[82,69453,53870],{"class":92},[82,69455,69456,69458,69460,69463,69465],{"class":84,"line":2303},[82,69457,53904],{"class":92},[82,69459,19],{"class":53863},[82,69461,69462],{"class":92},">我不需要变色\u003C\u002F",[82,69464,19],{"class":53863},[82,69466,53870],{"class":92},[82,69468,69469,69471,69473],{"class":84,"line":2321},[82,69470,54977],{"class":92},[82,69472,3755],{"class":53863},[82,69474,53870],{"class":92},[82,69476,69477,69479,69481],{"class":84,"line":2533},[82,69478,54705],{"class":92},[82,69480,54375],{"class":53863},[82,69482,53870],{"class":92},[82,69484,69485],{"class":84,"line":2538},[82,69486,69487],{"class":2828},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[82,69489,69490,69492,69494,69496,69498,69500,69502,69505],{"class":84,"line":2548},[82,69491,13811],{"class":112},[82,69493,63850],{"class":88},[82,69495,259],{"class":112},[82,69497,56956],{"class":92},[82,69499,56959],{"class":2384},[82,69501,93],{"class":92},[82,69503,69504],{"class":96},"'ul'",[82,69506,119],{"class":92},[82,69508,69509,69512,69514,69516,69518,69520,69522,69524,69526],{"class":84,"line":2579},[82,69510,69511],{"class":92},"    ul.",[82,69513,60371],{"class":2384},[82,69515,93],{"class":92},[82,69517,60376],{"class":96},[82,69519,100],{"class":92},[82,69521,57009],{"class":112},[82,69523,4265],{"class":92},[82,69525,2844],{"class":108},[82,69527,15031],{"class":92},[82,69529,69530],{"class":84,"line":2585},[82,69531,69532],{"class":2828},"      \u002F\u002F alert(1)\n",[82,69534,69535],{"class":84,"line":4350},[82,69536,69537],{"class":2828},"      \u002F\u002F e.target就是我们点击的对象\n",[82,69539,69540],{"class":84,"line":4355},[82,69541,69542],{"class":2828},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[82,69544,69545],{"class":84,"line":4360},[82,69546,69547],{"class":2828},"      \u002F\u002F e.target.style.color = 'red'\n",[82,69549,69550,69552,69554],{"class":84,"line":4365},[82,69551,60802],{"class":92},[82,69553,60805],{"class":2384},[82,69555,69556],{"class":92},"(e)\n",[82,69558,69559],{"class":84,"line":4379},[82,69560,486],{"emptyLinePlaceholder":485},[82,69562,69563,69565,69568],{"class":84,"line":4384},[82,69564,60802],{"class":92},[82,69566,69567],{"class":2384},"dir",[82,69569,69570],{"class":92},"(e.target)\n",[82,69572,69573],{"class":84,"line":5176},[82,69574,486],{"emptyLinePlaceholder":485},[82,69576,69577],{"class":84,"line":5190},[82,69578,69579],{"class":2828},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[82,69581,69582],{"class":84,"line":5198},[82,69583,69584],{"class":2828},"      \u002F\u002F 通过tagName来进行判断\n",[82,69586,69587,69589,69592,69594,69597],{"class":84,"line":5203},[82,69588,57040],{"class":112},[82,69590,69591],{"class":92}," (e.target.tagName ",[82,69593,57046],{"class":112},[82,69595,69596],{"class":96}," 'LI'",[82,69598,15031],{"class":92},[82,69600,69601,69604,69606],{"class":84,"line":5209},[82,69602,69603],{"class":92},"        e.target.style.color ",[82,69605,113],{"class":112},[82,69607,69608],{"class":96}," 'red'\n",[82,69610,69611],{"class":84,"line":5215},[82,69612,54958],{"class":92},[82,69614,69615],{"class":84,"line":5220},[82,69616,36029],{"class":92},[82,69618,69619,69621,69623],{"class":84,"line":10539},[82,69620,54977],{"class":92},[82,69622,54375],{"class":53863},[82,69624,53870],{"class":92},[82,69626,69627,69629,69631],{"class":84,"line":10563},[82,69628,54347],{"class":92},[82,69630,54362],{"class":53863},[82,69632,53870],{"class":92},[82,69634,69635],{"class":84,"line":10568},[82,69636,486],{"emptyLinePlaceholder":485},[82,69638,69639,69641,69643],{"class":84,"line":10574},[82,69640,54347],{"class":92},[82,69642,53198],{"class":53863},[82,69644,53870],{"class":92},[19,69646,69647],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69649,69650],{},"if(e.target.ragName==='P') {}",[19,69652,69653],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69655,69656],{},"通过事件委托的方式实现tab栏切换改造：",[19,69658,69659],{},"一定要记住自定义属性！！！！！！",[19,69661,69662],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69664,69665],{},"id是自定义的属性名",[19,69667,69668],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[73,69670,69672],{"className":53196,"code":69671,"language":53198,"meta":78,"style":78},"\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",[32,69673,69674,69684,69698,69702,69710,69724,69744,69764,69776,69784,69790,69800,69810,69814,69818,69824,69836,69848,69860,69876,69880,69884,69890,69902,69914,69926,69936,69946,69950,69954,69962,69974,69984,69996,70000,70004,70012,70022,70032,70042,70046,70050,70060,70074,70086,70090,70094,70106,70116,70132,70142,70146,70150,70164,70174,70184,70188,70192,70198,70212,70216,70220,70228,70238,70242,70246,70255,70265,70269,70277,70285,70289,70297,70311,70325,70337,70345,70384,70416,70448,70480,70512,70520,70528,70542,70576,70610,70644,70678,70712,70720,70728,70736,70741,70746,70765,70770,70790,70798,70803,70816,70837,70850,70854,70859,70864,70877,70897,70925,70929,70933,70937,70945,70953,70957],{"__ignoreMap":78},[82,69675,69676,69678,69680,69682],{"class":84,"line":85},[82,69677,53860],{"class":92},[82,69679,53864],{"class":53863},[82,69681,53867],{"class":2384},[82,69683,53870],{"class":92},[82,69685,69686,69688,69690,69692,69694,69696],{"class":84,"line":157},[82,69687,3659],{"class":92},[82,69689,53198],{"class":53863},[82,69691,53879],{"class":2384},[82,69693,113],{"class":92},[82,69695,53884],{"class":96},[82,69697,53870],{"class":92},[82,69699,69700],{"class":84,"line":404},[82,69701,486],{"emptyLinePlaceholder":485},[82,69703,69704,69706,69708],{"class":84,"line":413},[82,69705,3659],{"class":92},[82,69707,53897],{"class":53863},[82,69709,53870],{"class":92},[82,69711,69712,69714,69716,69718,69720,69722],{"class":84,"line":508},[82,69713,54705],{"class":92},[82,69715,53907],{"class":53863},[82,69717,53910],{"class":2384},[82,69719,113],{"class":92},[82,69721,53915],{"class":96},[82,69723,61685],{"class":92},[82,69725,69726,69728,69730,69732,69734,69736,69738,69740,69742],{"class":84,"line":513},[82,69727,54705],{"class":92},[82,69729,53907],{"class":53863},[82,69731,53926],{"class":2384},[82,69733,113],{"class":92},[82,69735,53931],{"class":96},[82,69737,53934],{"class":2384},[82,69739,113],{"class":92},[82,69741,53939],{"class":96},[82,69743,61685],{"class":92},[82,69745,69746,69748,69750,69752,69754,69756,69758,69760,69762],{"class":84,"line":1388},[82,69747,54705],{"class":92},[82,69749,53907],{"class":53863},[82,69751,17506],{"class":2384},[82,69753,113],{"class":92},[82,69755,53954],{"class":96},[82,69757,53934],{"class":2384},[82,69759,113],{"class":92},[82,69761,53961],{"class":96},[82,69763,61685],{"class":92},[82,69765,69766,69768,69770,69772,69774],{"class":84,"line":1394},[82,69767,54705],{"class":92},[82,69769,53970],{"class":53863},[82,69771,66182],{"class":92},[82,69773,53970],{"class":53863},[82,69775,53870],{"class":92},[82,69777,69778,69780,69782],{"class":84,"line":1399},[82,69779,54705],{"class":92},[82,69781,2671],{"class":53863},[82,69783,53870],{"class":92},[82,69785,69786,69788],{"class":84,"line":1430},[82,69787,8995],{"class":53863},[82,69789,1349],{"class":92},[82,69791,69792,69794,69796,69798],{"class":84,"line":1818},[82,69793,57266],{"class":88},[82,69795,1357],{"class":92},[82,69797,2244],{"class":88},[82,69799,3909],{"class":92},[82,69801,69802,69804,69806,69808],{"class":84,"line":2082},[82,69803,57255],{"class":88},[82,69805,1357],{"class":92},[82,69807,2244],{"class":88},[82,69809,3909],{"class":92},[82,69811,69812],{"class":84,"line":2233},[82,69813,4787],{"class":92},[82,69815,69816],{"class":84,"line":2255},[82,69817,486],{"emptyLinePlaceholder":485},[82,69819,69820,69822],{"class":84,"line":2260},[82,69821,66233],{"class":2384},[82,69823,1349],{"class":92},[82,69825,69826,69828,69830,69832,69834],{"class":84,"line":2298},[82,69827,57331],{"class":88},[82,69829,1357],{"class":92},[82,69831,66244],{"class":88},[82,69833,54054],{"class":112},[82,69835,3909],{"class":92},[82,69837,69838,69840,69842,69844,69846],{"class":84,"line":2303},[82,69839,57345],{"class":88},[82,69841,1357],{"class":92},[82,69843,66257],{"class":88},[82,69845,54054],{"class":112},[82,69847,3909],{"class":92},[82,69849,69850,69852,69854,69856,69858],{"class":84,"line":2321},[82,69851,57266],{"class":88},[82,69853,1357],{"class":92},[82,69855,3451],{"class":88},[82,69857,54054],{"class":112},[82,69859,3909],{"class":92},[82,69861,69862,69864,69866,69868,69870,69872,69874],{"class":84,"line":2533},[82,69863,64535],{"class":88},[82,69865,1357],{"class":92},[82,69867,2283],{"class":88},[82,69869,54054],{"class":112},[82,69871,54083],{"class":88},[82,69873,64802],{"class":88},[82,69875,3909],{"class":92},[82,69877,69878],{"class":84,"line":2538},[82,69879,4787],{"class":92},[82,69881,69882],{"class":84,"line":2548},[82,69883,486],{"emptyLinePlaceholder":485},[82,69885,69886,69888],{"class":84,"line":2579},[82,69887,66302],{"class":2384},[82,69889,1349],{"class":92},[82,69891,69892,69894,69896,69898,69900],{"class":84,"line":2585},[82,69893,57331],{"class":88},[82,69895,1357],{"class":92},[82,69897,3069],{"class":88},[82,69899,3086],{"class":112},[82,69901,3909],{"class":92},[82,69903,69904,69906,69908,69910,69912],{"class":84,"line":4350},[82,69905,57345],{"class":88},[82,69907,1357],{"class":92},[82,69909,3656],{"class":88},[82,69911,54054],{"class":112},[82,69913,3909],{"class":92},[82,69915,69916,69918,69920,69922,69924],{"class":84,"line":4355},[82,69917,59917],{"class":88},[82,69919,1357],{"class":92},[82,69921,3656],{"class":88},[82,69923,54054],{"class":112},[82,69925,3909],{"class":92},[82,69927,69928,69930,69932,69934],{"class":84,"line":4360},[82,69929,57569],{"class":88},[82,69931,1357],{"class":92},[82,69933,54039],{"class":88},[82,69935,3909],{"class":92},[82,69937,69938,69940,69942,69944],{"class":84,"line":4365},[82,69939,57580],{"class":88},[82,69941,1357],{"class":92},[82,69943,54230],{"class":88},[82,69945,3909],{"class":92},[82,69947,69948],{"class":84,"line":4379},[82,69949,4787],{"class":92},[82,69951,69952],{"class":84,"line":4384},[82,69953,486],{"emptyLinePlaceholder":485},[82,69955,69956,69958,69960],{"class":84,"line":5176},[82,69957,66302],{"class":2384},[82,69959,66375],{"class":53863},[82,69961,1349],{"class":92},[82,69963,69964,69966,69968,69970,69972],{"class":84,"line":5190},[82,69965,57482],{"class":88},[82,69967,1357],{"class":92},[82,69969,3550],{"class":88},[82,69971,54054],{"class":112},[82,69973,3909],{"class":92},[82,69975,69976,69978,69980,69982],{"class":84,"line":5198},[82,69977,64892],{"class":88},[82,69979,1357],{"class":92},[82,69981,66398],{"class":88},[82,69983,3909],{"class":92},[82,69985,69986,69988,69990,69992,69994],{"class":84,"line":5203},[82,69987,64558],{"class":88},[82,69989,1357],{"class":92},[82,69991,3451],{"class":88},[82,69993,54054],{"class":112},[82,69995,3909],{"class":92},[82,69997,69998],{"class":84,"line":5209},[82,69999,4787],{"class":92},[82,70001,70002],{"class":84,"line":5215},[82,70003,486],{"emptyLinePlaceholder":485},[82,70005,70006,70008,70010],{"class":84,"line":5220},[82,70007,66302],{"class":2384},[82,70009,63850],{"class":53863},[82,70011,1349],{"class":92},[82,70013,70014,70016,70018,70020],{"class":84,"line":10539},[82,70015,57292],{"class":88},[82,70017,1357],{"class":92},[82,70019,57297],{"class":88},[82,70021,3909],{"class":92},[82,70023,70024,70026,70028,70030],{"class":84,"line":10563},[82,70025,57569],{"class":88},[82,70027,1357],{"class":92},[82,70029,54039],{"class":88},[82,70031,3909],{"class":92},[82,70033,70034,70036,70038,70040],{"class":84,"line":10568},[82,70035,57580],{"class":88},[82,70037,1357],{"class":92},[82,70039,54142],{"class":88},[82,70041,3909],{"class":92},[82,70043,70044],{"class":84,"line":10574},[82,70045,4787],{"class":92},[82,70047,70048],{"class":84,"line":10601},[82,70049,486],{"emptyLinePlaceholder":485},[82,70051,70052,70054,70056,70058],{"class":84,"line":10606},[82,70053,66302],{"class":2384},[82,70055,63850],{"class":53863},[82,70057,57635],{"class":53863},[82,70059,1349],{"class":92},[82,70061,70062,70064,70066,70068,70070,70072],{"class":84,"line":10612},[82,70063,57266],{"class":88},[82,70065,1357],{"class":92},[82,70067,2244],{"class":88},[82,70069,11541],{"class":88},[82,70071,54054],{"class":112},[82,70073,3909],{"class":92},[82,70075,70076,70078,70080,70082,70084],{"class":84,"line":10624},[82,70077,57482],{"class":88},[82,70079,1357],{"class":92},[82,70081,3305],{"class":88},[82,70083,54054],{"class":112},[82,70085,3909],{"class":92},[82,70087,70088],{"class":84,"line":10636},[82,70089,4787],{"class":92},[82,70091,70092],{"class":84,"line":10648},[82,70093,486],{"emptyLinePlaceholder":485},[82,70095,70096,70098,70100,70102,70104],{"class":84,"line":12307},[82,70097,66302],{"class":2384},[82,70099,63850],{"class":53863},[82,70101,57635],{"class":53863},[82,70103,4014],{"class":53863},[82,70105,1349],{"class":92},[82,70107,70108,70110,70112,70114],{"class":84,"line":12332},[82,70109,66527],{"class":88},[82,70111,1357],{"class":92},[82,70113,57297],{"class":88},[82,70115,3909],{"class":92},[82,70117,70118,70120,70122,70124,70126,70128,70130],{"class":84,"line":12355},[82,70119,64790],{"class":88},[82,70121,1357],{"class":92},[82,70123,1425],{"class":88},[82,70125,54054],{"class":112},[82,70127,54083],{"class":88},[82,70129,66548],{"class":88},[82,70131,3909],{"class":92},[82,70133,70134,70136,70138,70140],{"class":84,"line":12379},[82,70135,59974],{"class":88},[82,70137,1357],{"class":92},[82,70139,64927],{"class":88},[82,70141,3909],{"class":92},[82,70143,70144],{"class":84,"line":12384},[82,70145,4787],{"class":92},[82,70147,70148],{"class":84,"line":12389},[82,70149,486],{"emptyLinePlaceholder":485},[82,70151,70152,70154,70156,70158,70160,70162],{"class":84,"line":12394},[82,70153,66302],{"class":2384},[82,70155,63850],{"class":53863},[82,70157,57635],{"class":53863},[82,70159,4014],{"class":53863},[82,70161,66581],{"class":2384},[82,70163,1349],{"class":92},[82,70165,70166,70168,70170,70172],{"class":84,"line":12403},[82,70167,64349],{"class":88},[82,70169,1357],{"class":92},[82,70171,66592],{"class":88},[82,70173,3909],{"class":92},[82,70175,70176,70178,70180,70182],{"class":84,"line":12408},[82,70177,59974],{"class":88},[82,70179,1357],{"class":92},[82,70181,66592],{"class":88},[82,70183,3909],{"class":92},[82,70185,70186],{"class":84,"line":12414},[82,70187,4787],{"class":92},[82,70189,70190],{"class":84,"line":12435},[82,70191,486],{"emptyLinePlaceholder":485},[82,70193,70194,70196],{"class":84,"line":12441},[82,70195,66617],{"class":2384},[82,70197,1349],{"class":92},[82,70199,70200,70202,70204,70206,70208,70210],{"class":84,"line":12455},[82,70201,57255],{"class":88},[82,70203,1357],{"class":92},[82,70205,2244],{"class":88},[82,70207,66630],{"class":88},[82,70209,54054],{"class":112},[82,70211,3909],{"class":92},[82,70213,70214],{"class":84,"line":12461},[82,70215,4787],{"class":92},[82,70217,70218],{"class":84,"line":12488},[82,70219,486],{"emptyLinePlaceholder":485},[82,70221,70222,70224,70226],{"class":84,"line":12497},[82,70223,66617],{"class":2384},[82,70225,64732],{"class":2384},[82,70227,1349],{"class":92},[82,70229,70230,70232,70234,70236],{"class":84,"line":12503},[82,70231,57569],{"class":88},[82,70233,1357],{"class":92},[82,70235,57297],{"class":88},[82,70237,3909],{"class":92},[82,70239,70240],{"class":84,"line":12511},[82,70241,4787],{"class":92},[82,70243,70244],{"class":84,"line":12516},[82,70245,486],{"emptyLinePlaceholder":485},[82,70247,70248,70250,70253],{"class":84,"line":19189},[82,70249,66617],{"class":2384},[82,70251,70252],{"class":2384}," .active",[82,70254,1349],{"class":92},[82,70256,70257,70259,70261,70263],{"class":84,"line":19195},[82,70258,57569],{"class":88},[82,70260,1357],{"class":92},[82,70262,63427],{"class":88},[82,70264,3909],{"class":92},[82,70266,70267],{"class":84,"line":19218},[82,70268,4787],{"class":92},[82,70270,70271,70273,70275],{"class":84,"line":19224},[82,70272,54977],{"class":92},[82,70274,2671],{"class":53863},[82,70276,53870],{"class":92},[82,70278,70279,70281,70283],{"class":84,"line":19247},[82,70280,54347],{"class":92},[82,70282,53897],{"class":53863},[82,70284,53870],{"class":92},[82,70286,70287],{"class":84,"line":19261},[82,70288,486],{"emptyLinePlaceholder":485},[82,70290,70291,70293,70295],{"class":84,"line":19281},[82,70292,3659],{"class":92},[82,70294,54362],{"class":53863},[82,70296,53870],{"class":92},[82,70298,70299,70301,70303,70305,70307,70309],{"class":84,"line":19287},[82,70300,54705],{"class":92},[82,70302,54173],{"class":53863},[82,70304,56046],{"class":2384},[82,70306,113],{"class":92},[82,70308,66732],{"class":96},[82,70310,53870],{"class":92},[82,70312,70313,70315,70317,70319,70321,70323],{"class":84,"line":19298},[82,70314,53904],{"class":92},[82,70316,54173],{"class":53863},[82,70318,56046],{"class":2384},[82,70320,113],{"class":92},[82,70322,66747],{"class":96},[82,70324,53870],{"class":92},[82,70326,70327,70329,70331,70333,70335],{"class":84,"line":19321},[82,70328,57794],{"class":92},[82,70330,65],{"class":53863},[82,70332,66758],{"class":92},[82,70334,65],{"class":53863},[82,70336,53870],{"class":92},[82,70338,70339,70341,70343],{"class":84,"line":19343},[82,70340,57794],{"class":92},[82,70342,3755],{"class":53863},[82,70344,53870],{"class":92},[82,70346,70347,70349,70351,70353,70355,70357,70359,70361,70363,70365,70367,70369,70371,70374,70376,70378,70380,70382],{"class":84,"line":19348},[82,70348,57862],{"class":92},[82,70350,29],{"class":53863},[82,70352,63610],{"class":92},[82,70354,323],{"class":53863},[82,70356,56046],{"class":2384},[82,70358,113],{"class":92},[82,70360,62264],{"class":96},[82,70362,63615],{"class":2384},[82,70364,113],{"class":92},[82,70366,66793],{"class":96},[82,70368,56511],{"class":2384},[82,70370,113],{"class":92},[82,70372,70373],{"class":96},"\"0\"",[82,70375,66796],{"class":92},[82,70377,323],{"class":53863},[82,70379,57874],{"class":92},[82,70381,29],{"class":53863},[82,70383,53870],{"class":92},[82,70385,70386,70388,70390,70392,70394,70396,70398,70400,70402,70404,70406,70408,70410,70412,70414],{"class":84,"line":19354},[82,70387,57862],{"class":92},[82,70389,29],{"class":53863},[82,70391,63610],{"class":92},[82,70393,323],{"class":53863},[82,70395,63615],{"class":2384},[82,70397,113],{"class":92},[82,70399,66793],{"class":96},[82,70401,56511],{"class":2384},[82,70403,113],{"class":92},[82,70405,6274],{"class":96},[82,70407,66823],{"class":92},[82,70409,323],{"class":53863},[82,70411,57874],{"class":92},[82,70413,29],{"class":53863},[82,70415,53870],{"class":92},[82,70417,70418,70420,70422,70424,70426,70428,70430,70432,70434,70436,70438,70440,70442,70444,70446],{"class":84,"line":19368},[82,70419,57862],{"class":92},[82,70421,29],{"class":53863},[82,70423,63610],{"class":92},[82,70425,323],{"class":53863},[82,70427,63615],{"class":2384},[82,70429,113],{"class":92},[82,70431,66793],{"class":96},[82,70433,56511],{"class":2384},[82,70435,113],{"class":92},[82,70437,6297],{"class":96},[82,70439,66850],{"class":92},[82,70441,323],{"class":53863},[82,70443,57874],{"class":92},[82,70445,29],{"class":53863},[82,70447,53870],{"class":92},[82,70449,70450,70452,70454,70456,70458,70460,70462,70464,70466,70468,70470,70472,70474,70476,70478],{"class":84,"line":19381},[82,70451,57862],{"class":92},[82,70453,29],{"class":53863},[82,70455,63610],{"class":92},[82,70457,323],{"class":53863},[82,70459,63615],{"class":2384},[82,70461,113],{"class":92},[82,70463,66793],{"class":96},[82,70465,56511],{"class":2384},[82,70467,113],{"class":92},[82,70469,6310],{"class":96},[82,70471,66877],{"class":92},[82,70473,323],{"class":53863},[82,70475,57874],{"class":92},[82,70477,29],{"class":53863},[82,70479,53870],{"class":92},[82,70481,70482,70484,70486,70488,70490,70492,70494,70496,70498,70500,70502,70504,70506,70508,70510],{"class":84,"line":19386},[82,70483,57862],{"class":92},[82,70485,29],{"class":53863},[82,70487,63610],{"class":92},[82,70489,323],{"class":53863},[82,70491,63615],{"class":2384},[82,70493,113],{"class":92},[82,70495,66793],{"class":96},[82,70497,56511],{"class":2384},[82,70499,113],{"class":92},[82,70501,6323],{"class":96},[82,70503,66904],{"class":92},[82,70505,323],{"class":53863},[82,70507,57874],{"class":92},[82,70509,29],{"class":53863},[82,70511,53870],{"class":92},[82,70513,70514,70516,70518],{"class":84,"line":19400},[82,70515,57967],{"class":92},[82,70517,3755],{"class":53863},[82,70519,53870],{"class":92},[82,70521,70522,70524,70526],{"class":84,"line":19405},[82,70523,54338],{"class":92},[82,70525,54173],{"class":53863},[82,70527,53870],{"class":92},[82,70529,70530,70532,70534,70536,70538,70540],{"class":84,"line":19411},[82,70531,53904],{"class":92},[82,70533,54173],{"class":53863},[82,70535,56046],{"class":2384},[82,70537,113],{"class":92},[82,70539,66941],{"class":96},[82,70541,53870],{"class":92},[82,70543,70544,70546,70548,70550,70552,70554,70556,70558,70560,70562,70564,70566,70568,70570,70572,70574],{"class":84,"line":19416},[82,70545,57794],{"class":92},[82,70547,54173],{"class":53863},[82,70549,56046],{"class":2384},[82,70551,113],{"class":92},[82,70553,66956],{"class":96},[82,70555,63610],{"class":92},[82,70557,4078],{"class":53863},[82,70559,57799],{"class":2384},[82,70561,113],{"class":92},[82,70563,66967],{"class":96},[82,70565,57807],{"class":2384},[82,70567,113],{"class":92},[82,70569,1793],{"class":96},[82,70571,66976],{"class":92},[82,70573,54173],{"class":53863},[82,70575,53870],{"class":92},[82,70577,70578,70580,70582,70584,70586,70588,70590,70592,70594,70596,70598,70600,70602,70604,70606,70608],{"class":84,"line":19430},[82,70579,57794],{"class":92},[82,70581,54173],{"class":53863},[82,70583,56046],{"class":2384},[82,70585,113],{"class":92},[82,70587,65181],{"class":96},[82,70589,63610],{"class":92},[82,70591,4078],{"class":53863},[82,70593,57799],{"class":2384},[82,70595,113],{"class":92},[82,70597,67003],{"class":96},[82,70599,57807],{"class":2384},[82,70601,113],{"class":92},[82,70603,1793],{"class":96},[82,70605,66976],{"class":92},[82,70607,54173],{"class":53863},[82,70609,53870],{"class":92},[82,70611,70612,70614,70616,70618,70620,70622,70624,70626,70628,70630,70632,70634,70636,70638,70640,70642],{"class":84,"line":19435},[82,70613,57794],{"class":92},[82,70615,54173],{"class":53863},[82,70617,56046],{"class":2384},[82,70619,113],{"class":92},[82,70621,65181],{"class":96},[82,70623,63610],{"class":92},[82,70625,4078],{"class":53863},[82,70627,57799],{"class":2384},[82,70629,113],{"class":92},[82,70631,67038],{"class":96},[82,70633,57807],{"class":2384},[82,70635,113],{"class":92},[82,70637,1793],{"class":96},[82,70639,66976],{"class":92},[82,70641,54173],{"class":53863},[82,70643,53870],{"class":92},[82,70645,70646,70648,70650,70652,70654,70656,70658,70660,70662,70664,70666,70668,70670,70672,70674,70676],{"class":84,"line":19440},[82,70647,57794],{"class":92},[82,70649,54173],{"class":53863},[82,70651,56046],{"class":2384},[82,70653,113],{"class":92},[82,70655,65181],{"class":96},[82,70657,63610],{"class":92},[82,70659,4078],{"class":53863},[82,70661,57799],{"class":2384},[82,70663,113],{"class":92},[82,70665,67073],{"class":96},[82,70667,57807],{"class":2384},[82,70669,113],{"class":92},[82,70671,1793],{"class":96},[82,70673,66976],{"class":92},[82,70675,54173],{"class":53863},[82,70677,53870],{"class":92},[82,70679,70680,70682,70684,70686,70688,70690,70692,70694,70696,70698,70700,70702,70704,70706,70708,70710],{"class":84,"line":19454},[82,70681,57794],{"class":92},[82,70683,54173],{"class":53863},[82,70685,56046],{"class":2384},[82,70687,113],{"class":92},[82,70689,65181],{"class":96},[82,70691,63610],{"class":92},[82,70693,4078],{"class":53863},[82,70695,57799],{"class":2384},[82,70697,113],{"class":92},[82,70699,67108],{"class":96},[82,70701,57807],{"class":2384},[82,70703,113],{"class":92},[82,70705,1793],{"class":96},[82,70707,66976],{"class":92},[82,70709,54173],{"class":53863},[82,70711,53870],{"class":92},[82,70713,70714,70716,70718],{"class":84,"line":19466},[82,70715,54338],{"class":92},[82,70717,54173],{"class":53863},[82,70719,53870],{"class":92},[82,70721,70722,70724,70726],{"class":84,"line":19471},[82,70723,54977],{"class":92},[82,70725,54173],{"class":53863},[82,70727,53870],{"class":92},[82,70729,70730,70732,70734],{"class":84,"line":19484},[82,70731,54705],{"class":92},[82,70733,54375],{"class":53863},[82,70735,53870],{"class":92},[82,70737,70738],{"class":84,"line":19489},[82,70739,70740],{"class":2828},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[82,70742,70743],{"class":84,"line":19494},[82,70744,70745],{"class":2828},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[82,70747,70748,70750,70752,70754,70756,70758,70760,70763],{"class":84,"line":19499},[82,70749,13811],{"class":112},[82,70751,63850],{"class":88},[82,70753,259],{"class":112},[82,70755,56956],{"class":92},[82,70757,56959],{"class":2384},[82,70759,93],{"class":92},[82,70761,70762],{"class":96},"'.tab-nav ul'",[82,70764,119],{"class":92},[82,70766,70767],{"class":84,"line":19512},[82,70768,70769],{"class":2828},"    \u002F\u002F 2.添加事件\n",[82,70771,70772,70774,70776,70778,70780,70782,70784,70786,70788],{"class":84,"line":19517},[82,70773,69511],{"class":92},[82,70775,60371],{"class":2384},[82,70777,93],{"class":92},[82,70779,60376],{"class":96},[82,70781,100],{"class":92},[82,70783,57009],{"class":112},[82,70785,4265],{"class":92},[82,70787,2844],{"class":108},[82,70789,15031],{"class":92},[82,70791,70792,70794,70796],{"class":84,"line":35202},[82,70793,60802],{"class":92},[82,70795,69567],{"class":2384},[82,70797,69570],{"class":92},[82,70799,70800],{"class":84,"line":35208},[82,70801,70802],{"class":2828},"      \u002F\u002Fe.targer是我们点击的对象\n",[82,70804,70805,70807,70809,70811,70814],{"class":84,"line":35214},[82,70806,57040],{"class":112},[82,70808,69591],{"class":92},[82,70810,57046],{"class":112},[82,70812,70813],{"class":96}," 'A'",[82,70815,15031],{"class":92},[82,70817,70818,70820,70822,70824,70827,70829,70831,70833,70835],{"class":84,"line":35220},[82,70819,54486],{"class":92},[82,70821,56959],{"class":2384},[82,70823,93],{"class":92},[82,70825,70826],{"class":96},"'.active'",[82,70828,59561],{"class":92},[82,70830,59564],{"class":2384},[82,70832,93],{"class":92},[82,70834,67271],{"class":96},[82,70836,119],{"class":92},[82,70838,70839,70842,70844,70846,70848],{"class":84,"line":35226},[82,70840,70841],{"class":92},"        e.target.classList.",[82,70843,7926],{"class":2384},[82,70845,93],{"class":92},[82,70847,67271],{"class":96},[82,70849,119],{"class":92},[82,70851,70852],{"class":84,"line":35237},[82,70853,486],{"emptyLinePlaceholder":485},[82,70855,70856],{"class":84,"line":35243},[82,70857,70858],{"class":2828},"        \u002F\u002F 下面大盒子模块\n",[82,70860,70861],{"class":84,"line":35263},[82,70862,70863],{"class":2828},"        \u002F\u002F console.log(e.target.dataset.id)\n",[82,70865,70866,70868,70870,70872,70874],{"class":84,"line":35269},[82,70867,63828],{"class":112},[82,70869,5630],{"class":88},[82,70871,259],{"class":112},[82,70873,48130],{"class":112},[82,70875,70876],{"class":92},"e.target.dataset.id\n",[82,70878,70879,70881,70883,70885,70887,70889,70891,70893,70895],{"class":84,"line":35280},[82,70880,54486],{"class":92},[82,70882,56959],{"class":2384},[82,70884,93],{"class":92},[82,70886,67319],{"class":96},[82,70888,59561],{"class":92},[82,70890,59564],{"class":2384},[82,70892,93],{"class":92},[82,70894,67271],{"class":96},[82,70896,119],{"class":92},[82,70898,70899,70901,70903,70905,70907,70909,70911,70913,70915,70917,70919,70921,70923],{"class":84,"line":35286},[82,70900,54486],{"class":92},[82,70902,56959],{"class":2384},[82,70904,93],{"class":92},[82,70906,67345],{"class":96},[82,70908,3199],{"class":92},[82,70910,48130],{"class":112},[82,70912,27703],{"class":88},[82,70914,59590],{"class":96},[82,70916,59561],{"class":92},[82,70918,7926],{"class":2384},[82,70920,93],{"class":92},[82,70922,67271],{"class":96},[82,70924,119],{"class":92},[82,70926,70927],{"class":84,"line":35292},[82,70928,486],{"emptyLinePlaceholder":485},[82,70930,70931],{"class":84,"line":35298},[82,70932,54958],{"class":92},[82,70934,70935],{"class":84,"line":35304},[82,70936,36029],{"class":92},[82,70938,70939,70941,70943],{"class":84,"line":35310},[82,70940,54977],{"class":92},[82,70942,54375],{"class":53863},[82,70944,53870],{"class":92},[82,70946,70947,70949,70951],{"class":84,"line":35316},[82,70948,54347],{"class":92},[82,70950,54362],{"class":53863},[82,70952,53870],{"class":92},[82,70954,70955],{"class":84,"line":35322},[82,70956,486],{"emptyLinePlaceholder":485},[82,70958,70959,70961,70963],{"class":84,"line":35342},[82,70960,54347],{"class":92},[82,70962,53198],{"class":53863},[82,70964,53870],{"class":92},[65,70966,70968],{"id":70967},"_333-页面加载事件","3.3.3 页面加载事件",[26,70970,70971],{},[29,70972,70973],{},"load",[19,70975,70976],{},[4078,70977],{"alt":78,"src":70978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70980,70981],{},"window代表整个窗口，比document还要大",[19,70983,70984],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70986,70987],{},"img.addEventListener('load', function () {",[19,70989,70990],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70992,55024],{},[26,70994,70995],{"start":157},[29,70996,70997],{},"DOMContentLoaded",[19,70999,71000],{},[4078,71001],{"alt":78,"src":71002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,71004,71005],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[65,71007,71009],{"id":71008},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,71011,71012],{},[4078,71013],{"alt":78,"src":71014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,71016,71017],{},[4078,71018],{"alt":78,"src":71019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,71021,71022],{},[4078,71023],{"alt":78,"src":71024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,71026,71027],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,71029,71030],{},"获得的是数字型数据，不带单位",[19,71032,71033],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,71035,71036],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,71038,71039],{},"它是通过document.documentElement来获取",[19,71041,71042],{},[4078,71043],{"alt":78,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,71046,71047],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[65,71049,71051],{"id":71050},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,71053,71054],{},[4078,71055],{"alt":78,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,71058,71059],{},[4078,71060],{"alt":78,"src":71061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[65,71063,71065],{"id":71064},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,71067,71068],{},[4078,71069],{"alt":78,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,71072,71073],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,71075,71076],{},[4078,71077],{"alt":78,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,71080,71081],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,71083,71084],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,71086,71087],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,71089,71090],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,71092,71093],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,71095,71096],{},[4078,71097],{"alt":78,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,71100,71101],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,71103,71104],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,71106,71107],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,71109,71110],{},"e.pageX-box.getBoundingClientRect()",[65,71112,71114],{"id":71113},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,71116,71117],{},[4078,71118],{"alt":78,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,71121,71122],{},"这个是相对于视口来说的，它是个方法，不是属性值",[65,71124,71126],{"id":71125},"_338-总结","3.3.8 总结",[19,71128,71129],{},[4078,71130],{"alt":78,"src":71131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,71133,71134],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,71136,71137],{},"修改盒子的宽高只能通过width和height来实现",[65,71139,71141],{"id":71140},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[73,71143,71145],{"className":53196,"code":71144,"language":53198,"meta":78,"style":78},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[32,71146,71147,71152,71157,71162,71167],{"__ignoreMap":78},[82,71148,71149],{"class":84,"line":85},[82,71150,71151],{"class":92},"\u002F* 页面滑动 *\u002F\n",[82,71153,71154],{"class":84,"line":157},[82,71155,71156],{"class":92},"html {\n",[82,71158,71159],{"class":84,"line":404},[82,71160,71161],{"class":92},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[82,71163,71164],{"class":84,"line":413},[82,71165,71166],{"class":92},"  scroll-behavior: smooth;\n",[82,71168,71169],{"class":84,"line":508},[82,71170,1391],{"class":92},[19,71172,71173],{},"默认是auto",[65,71175,71177],{"id":71176},"_3310-日期对象","3.3.10 日期对象",[24582,71179,71181],{"id":71180},"_33101-实例化","3.3.10.1 实例化",[19,71183,71184],{},[4078,71185],{"alt":78,"src":71186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24582,71188,71190],{"id":71189},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,71192,71193],{},[4078,71194],{"alt":78,"src":71195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,71197,71198],{},"月份+1",[19,71200,71201],{},"老外认为第一天为0，星期天",[19,71203,71204],{},"方法使用的时候必须要跟括号",[19,71206,71207],{},"快速获得日期",[19,71209,71210],{},"\u002F\u002F 得到年月日",[19,71212,71213],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71215,71216],{},"\u002F\u002F 得到当地日期",[19,71218,71219],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71221,71222],{},"\u002F\u002F 得到当地时间",[19,71224,71225],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71227,71228],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71230,71231],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54375,71233,71234],{},"\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,71236,71237],{},"学会去封装函数！",[24582,71239,71241],{"id":71240},"_33103-时间戳","3.3.10.3 时间戳",[19,71243,71244],{},[4078,71245],{"alt":78,"src":71246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71248,71249],{},[4078,71250],{"alt":78,"src":71251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71253,71254],{},"三种方法记住一个就可以",[65,71256,71258],{"id":71257},"_3311-节点操作","3.3.11 节点操作",[24582,71260,71262],{"id":71261},"_33111-dom节点","3.3.11.1 DOM节点",[19,71264,71265],{},[4078,71266],{"alt":78,"src":71267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,71269,71270],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24582,71272,71274],{"id":71273},"_33112-查找节点","3.3.11.2 查找节点",[19,71276,71277],{},"前边的document.querySelector()是获取的元素",[19,71279,71280],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,71282,71283],{},[4078,71284],{"alt":78,"src":71285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,71287,71288],{},[29,71289,71290],{},"父节点",[19,71292,71293],{},[4078,71294],{"alt":78,"src":71295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,71297,71298],{"start":157},[29,71299,71300],{},"子节点",[19,71302,71303],{},[4078,71304],{"alt":78,"src":71305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,71307,71308],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,71310,71311],{},"children获得的是伪数组，是亲儿子",[26,71313,71314],{"start":404},[29,71315,71316],{},"兄弟节点",[19,71318,71319],{},[4078,71320],{"alt":78,"src":71321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24582,71323,71325],{"id":71324},"_33113-增加节点","3.3.11.3 增加节点",[19,71327,71328],{},[4078,71329],{"alt":78,"src":71330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71332,71333],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71335,71336],{},[4078,71337],{"alt":78,"src":71338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71340,71341],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71343,71344],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71346,71347],{},"例：",[54375,71349,71350],{},"\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,71352,71353],{},[4078,71354],{"alt":78,"src":71355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71357,71358],{},"false只克隆标签，里边的内容不会克隆过来",[73,71360,71362],{"className":53196,"code":71361,"language":53198,"meta":78,"style":78},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[32,71363,71364],{"__ignoreMap":78},[82,71365,71366],{"class":84,"line":85},[82,71367,71361],{"class":92},[24582,71369,71371],{"id":71370},"_33114-删除节点","3.3.11.4 删除节点",[19,71373,71374],{},[4078,71375],{"alt":78,"src":71376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71378,71379],{},"父亲删儿子",[19,71381,71382],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[65,71384,71386],{"id":71385},"_3312-m端事件","3.3.12 M端事件",[19,71388,71389],{},"M端就是移动端",[19,71391,71392],{},[4078,71393],{"alt":78,"src":71394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[65,71396,71398],{"id":71397},"_3313-插件","3.3.13 插件",[19,71400,71401],{},"要熟悉官网！！！",[19,71403,71404],{},[323,71405,71406],{"href":71406,"rel":71407},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26449],[19,71409,71410],{},[323,71411,71412],{"href":71412,"rel":71413},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26449],[65,71415,71417],{"id":71416},"_3314-学生信息表","3.3.14 学生信息表",[26,71419,71420,71423,71426,71429,71432,71435,71438,71441],{},[29,71421,71422],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,71424,71425],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,71427,71428],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,71430,71431],{},"用好表单元素自带的属性，value,name等",[29,71433,71434],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,71436,71437],{},"不要忘记事件对象",[29,71439,71440],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,71442,71443],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71445,71446],{},"结构：",[73,71448,71450],{"className":53196,"code":71449,"language":53198,"meta":78,"style":78},"\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",[32,71451,71452,71462,71476,71480,71488,71502,71522,71543,71556,71580,71588,71592,71600,71613,71634,71662,71689,71694,71716,71736,71755,71763,71791,71813,71833,71853,71873,71893,71913,71921,71941,71949,71953,71966,71974,71982,71990,72003,72016,72029,72042,72055,72068,72081,72089,72097,72105,72110,72115,72120,72125,72130,72135,72140,72145,72150,72155,72160,72165,72170,72178,72186,72194,72198,72218,72237,72257,72277,72297,72317,72321,72326,72346,72351,72361,72366,72371,72391,72413,72418,72428,72432,72436,72441,72446,72475,72489,72504,72508,72512,72516,72521,72532,72545,72550,72555,72560,72565,72570,72574,72579,72584,72593,72598,72603,72615,72620,72627,72631,72636,72646,72651,72661,72666,72694,72715,72725,72745,72763,72780,72797,72814,72831,72835,72845,72850,72855,72860,72871,72875,72879,72883,72888,72893,72914,72926,72931,72936,72941,72955,72960,72967,72971,72975,72983,72987,72995,72999],{"__ignoreMap":78},[82,71453,71454,71456,71458,71460],{"class":84,"line":85},[82,71455,53860],{"class":92},[82,71457,53864],{"class":53863},[82,71459,53867],{"class":2384},[82,71461,53870],{"class":92},[82,71463,71464,71466,71468,71470,71472,71474],{"class":84,"line":157},[82,71465,3659],{"class":92},[82,71467,53198],{"class":53863},[82,71469,53879],{"class":2384},[82,71471,113],{"class":92},[82,71473,53884],{"class":96},[82,71475,53870],{"class":92},[82,71477,71478],{"class":84,"line":404},[82,71479,486],{"emptyLinePlaceholder":485},[82,71481,71482,71484,71486],{"class":84,"line":413},[82,71483,3659],{"class":92},[82,71485,53897],{"class":53863},[82,71487,53870],{"class":92},[82,71489,71490,71492,71494,71496,71498,71500],{"class":84,"line":508},[82,71491,54705],{"class":92},[82,71493,53907],{"class":53863},[82,71495,53910],{"class":2384},[82,71497,113],{"class":92},[82,71499,53915],{"class":96},[82,71501,61685],{"class":92},[82,71503,71504,71506,71508,71510,71512,71514,71516,71518,71520],{"class":84,"line":513},[82,71505,54705],{"class":92},[82,71507,53907],{"class":53863},[82,71509,17506],{"class":2384},[82,71511,113],{"class":92},[82,71513,53954],{"class":96},[82,71515,53934],{"class":2384},[82,71517,113],{"class":92},[82,71519,53961],{"class":96},[82,71521,61685],{"class":92},[82,71523,71524,71526,71528,71530,71532,71534,71536,71538,71541],{"class":84,"line":1388},[82,71525,54705],{"class":92},[82,71527,53907],{"class":53863},[82,71529,53926],{"class":2384},[82,71531,113],{"class":92},[82,71533,53931],{"class":96},[82,71535,53934],{"class":2384},[82,71537,113],{"class":92},[82,71539,71540],{"class":96},"\"ie=edge\"",[82,71542,61685],{"class":92},[82,71544,71545,71547,71549,71552,71554],{"class":84,"line":1394},[82,71546,54705],{"class":92},[82,71548,53970],{"class":53863},[82,71550,71551],{"class":92},">学生信息管理\u003C\u002F",[82,71553,53970],{"class":53863},[82,71555,53870],{"class":92},[82,71557,71558,71560,71563,71566,71568,71571,71573,71575,71578],{"class":84,"line":1399},[82,71559,54705],{"class":92},[82,71561,71562],{"class":53863},"link",[82,71564,71565],{"class":2384}," rel",[82,71567,113],{"class":92},[82,71569,71570],{"class":96},"\"stylesheet\"",[82,71572,63615],{"class":2384},[82,71574,113],{"class":92},[82,71576,71577],{"class":96},"\"css\u002Findex.css\"",[82,71579,61685],{"class":92},[82,71581,71582,71584,71586],{"class":84,"line":1430},[82,71583,54347],{"class":92},[82,71585,53897],{"class":53863},[82,71587,53870],{"class":92},[82,71589,71590],{"class":84,"line":1818},[82,71591,486],{"emptyLinePlaceholder":485},[82,71593,71594,71596,71598],{"class":84,"line":2082},[82,71595,3659],{"class":92},[82,71597,54362],{"class":53863},[82,71599,53870],{"class":92},[82,71601,71602,71604,71606,71609,71611],{"class":84,"line":2233},[82,71603,54705],{"class":92},[82,71605,10],{"class":53863},[82,71607,71608],{"class":92},">新增学员\u003C\u002F",[82,71610,10],{"class":53863},[82,71612,53870],{"class":92},[82,71614,71615,71617,71619,71621,71623,71625,71628,71630,71632],{"class":84,"line":2255},[82,71616,54705],{"class":92},[82,71618,69182],{"class":53863},[82,71620,56046],{"class":2384},[82,71622,113],{"class":92},[82,71624,65222],{"class":96},[82,71626,71627],{"class":2384}," autocomplete",[82,71629,113],{"class":92},[82,71631,34348],{"class":96},[82,71633,53870],{"class":92},[82,71635,71636,71639,71641,71643,71645,71647,71649,71651,71654,71656,71658,71660],{"class":84,"line":2260},[82,71637,71638],{"class":92},"    姓名：\u003C",[82,71640,56381],{"class":53863},[82,71642,56384],{"class":2384},[82,71644,113],{"class":92},[82,71646,65256],{"class":96},[82,71648,56046],{"class":2384},[82,71650,113],{"class":92},[82,71652,71653],{"class":96},"\"uname\"",[82,71655,17506],{"class":2384},[82,71657,113],{"class":92},[82,71659,71653],{"class":96},[82,71661,61685],{"class":92},[82,71663,71664,71667,71669,71671,71673,71675,71677,71679,71681,71683,71685,71687],{"class":84,"line":2298},[82,71665,71666],{"class":92},"    年龄：\u003C",[82,71668,56381],{"class":53863},[82,71670,56384],{"class":2384},[82,71672,113],{"class":92},[82,71674,65256],{"class":96},[82,71676,56046],{"class":2384},[82,71678,113],{"class":92},[82,71680,1480],{"class":96},[82,71682,17506],{"class":2384},[82,71684,113],{"class":92},[82,71686,1480],{"class":96},[82,71688,61685],{"class":92},[82,71690,71691],{"class":84,"line":2303},[82,71692,71693],{"class":92},"    性别:\n",[82,71695,71696,71698,71701,71703,71705,71708,71710,71712,71714],{"class":84,"line":2321},[82,71697,53904],{"class":92},[82,71699,71700],{"class":53863},"select",[82,71702,17506],{"class":2384},[82,71704,113],{"class":92},[82,71706,71707],{"class":96},"\"gender\"",[82,71709,56046],{"class":2384},[82,71711,113],{"class":92},[82,71713,71707],{"class":96},[82,71715,53870],{"class":92},[82,71717,71718,71720,71723,71725,71727,71729,71732,71734],{"class":84,"line":2533},[82,71719,57794],{"class":92},[82,71721,71722],{"class":53863},"option",[82,71724,69208],{"class":2384},[82,71726,113],{"class":92},[82,71728,12552],{"class":96},[82,71730,71731],{"class":92},">男\u003C\u002F",[82,71733,71722],{"class":53863},[82,71735,53870],{"class":92},[82,71737,71738,71740,71742,71744,71746,71748,71751,71753],{"class":84,"line":2538},[82,71739,57794],{"class":92},[82,71741,71722],{"class":53863},[82,71743,69208],{"class":2384},[82,71745,113],{"class":92},[82,71747,12621],{"class":96},[82,71749,71750],{"class":92},">女\u003C\u002F",[82,71752,71722],{"class":53863},[82,71754,53870],{"class":92},[82,71756,71757,71759,71761],{"class":84,"line":2548},[82,71758,54338],{"class":92},[82,71760,71700],{"class":53863},[82,71762,53870],{"class":92},[82,71764,71765,71768,71770,71772,71774,71776,71778,71780,71783,71785,71787,71789],{"class":84,"line":2579},[82,71766,71767],{"class":92},"    薪资：\u003C",[82,71769,56381],{"class":53863},[82,71771,56384],{"class":2384},[82,71773,113],{"class":92},[82,71775,65256],{"class":96},[82,71777,56046],{"class":2384},[82,71779,113],{"class":92},[82,71781,71782],{"class":96},"\"salary\"",[82,71784,17506],{"class":2384},[82,71786,113],{"class":92},[82,71788,71782],{"class":96},[82,71790,61685],{"class":92},[82,71792,71793,71796,71798,71800,71802,71805,71807,71809,71811],{"class":84,"line":2585},[82,71794,71795],{"class":92},"    就业城市：\u003C",[82,71797,71700],{"class":53863},[82,71799,17506],{"class":2384},[82,71801,113],{"class":92},[82,71803,71804],{"class":96},"\"city\"",[82,71806,56046],{"class":2384},[82,71808,113],{"class":92},[82,71810,71804],{"class":96},[82,71812,53870],{"class":92},[82,71814,71815,71817,71819,71821,71823,71826,71829,71831],{"class":84,"line":4350},[82,71816,57794],{"class":92},[82,71818,71722],{"class":53863},[82,71820,69208],{"class":2384},[82,71822,113],{"class":92},[82,71824,71825],{"class":96},"\"北京\"",[82,71827,71828],{"class":92},">北京\u003C\u002F",[82,71830,71722],{"class":53863},[82,71832,53870],{"class":92},[82,71834,71835,71837,71839,71841,71843,71846,71849,71851],{"class":84,"line":4355},[82,71836,57794],{"class":92},[82,71838,71722],{"class":53863},[82,71840,69208],{"class":2384},[82,71842,113],{"class":92},[82,71844,71845],{"class":96},"\"上海\"",[82,71847,71848],{"class":92},">上海\u003C\u002F",[82,71850,71722],{"class":53863},[82,71852,53870],{"class":92},[82,71854,71855,71857,71859,71861,71863,71866,71869,71871],{"class":84,"line":4360},[82,71856,57794],{"class":92},[82,71858,71722],{"class":53863},[82,71860,69208],{"class":2384},[82,71862,113],{"class":92},[82,71864,71865],{"class":96},"\"广州\"",[82,71867,71868],{"class":92},">广州\u003C\u002F",[82,71870,71722],{"class":53863},[82,71872,53870],{"class":92},[82,71874,71875,71877,71879,71881,71883,71886,71889,71891],{"class":84,"line":4365},[82,71876,57794],{"class":92},[82,71878,71722],{"class":53863},[82,71880,69208],{"class":2384},[82,71882,113],{"class":92},[82,71884,71885],{"class":96},"\"深圳\"",[82,71887,71888],{"class":92},">深圳\u003C\u002F",[82,71890,71722],{"class":53863},[82,71892,53870],{"class":92},[82,71894,71895,71897,71899,71901,71903,71906,71909,71911],{"class":84,"line":4379},[82,71896,57794],{"class":92},[82,71898,71722],{"class":53863},[82,71900,69208],{"class":2384},[82,71902,113],{"class":92},[82,71904,71905],{"class":96},"\"曹县\"",[82,71907,71908],{"class":92},">曹县\u003C\u002F",[82,71910,71722],{"class":53863},[82,71912,53870],{"class":92},[82,71914,71915,71917,71919],{"class":84,"line":4384},[82,71916,54338],{"class":92},[82,71918,71700],{"class":53863},[82,71920,53870],{"class":92},[82,71922,71923,71925,71927,71929,71931,71934,71937,71939],{"class":84,"line":5176},[82,71924,53904],{"class":92},[82,71926,56447],{"class":53863},[82,71928,56046],{"class":2384},[82,71930,113],{"class":92},[82,71932,71933],{"class":96},"\"add\"",[82,71935,71936],{"class":92},">录入\u003C\u002F",[82,71938,56447],{"class":53863},[82,71940,53870],{"class":92},[82,71942,71943,71945,71947],{"class":84,"line":5190},[82,71944,54977],{"class":92},[82,71946,69182],{"class":53863},[82,71948,53870],{"class":92},[82,71950,71951],{"class":84,"line":5198},[82,71952,486],{"emptyLinePlaceholder":485},[82,71954,71955,71957,71959,71962,71964],{"class":84,"line":5203},[82,71956,54705],{"class":92},[82,71958,10],{"class":53863},[82,71960,71961],{"class":92},">就业榜\u003C\u002F",[82,71963,10],{"class":53863},[82,71965,53870],{"class":92},[82,71967,71968,71970,71972],{"class":84,"line":5209},[82,71969,54705],{"class":92},[82,71971,278],{"class":53863},[82,71973,53870],{"class":92},[82,71975,71976,71978,71980],{"class":84,"line":5215},[82,71977,53904],{"class":92},[82,71979,281],{"class":53863},[82,71981,53870],{"class":92},[82,71983,71984,71986,71988],{"class":84,"line":5220},[82,71985,57794],{"class":92},[82,71987,284],{"class":53863},[82,71989,53870],{"class":92},[82,71991,71992,71994,71996,71999,72001],{"class":84,"line":10539},[82,71993,57862],{"class":92},[82,71995,287],{"class":53863},[82,71997,71998],{"class":92},">序号\u003C\u002F",[82,72000,287],{"class":53863},[82,72002,53870],{"class":92},[82,72004,72005,72007,72009,72012,72014],{"class":84,"line":10563},[82,72006,57862],{"class":92},[82,72008,287],{"class":53863},[82,72010,72011],{"class":92},">姓名\u003C\u002F",[82,72013,287],{"class":53863},[82,72015,53870],{"class":92},[82,72017,72018,72020,72022,72025,72027],{"class":84,"line":10568},[82,72019,57862],{"class":92},[82,72021,287],{"class":53863},[82,72023,72024],{"class":92},">年龄\u003C\u002F",[82,72026,287],{"class":53863},[82,72028,53870],{"class":92},[82,72030,72031,72033,72035,72038,72040],{"class":84,"line":10574},[82,72032,57862],{"class":92},[82,72034,287],{"class":53863},[82,72036,72037],{"class":92},">性别\u003C\u002F",[82,72039,287],{"class":53863},[82,72041,53870],{"class":92},[82,72043,72044,72046,72048,72051,72053],{"class":84,"line":10601},[82,72045,57862],{"class":92},[82,72047,287],{"class":53863},[82,72049,72050],{"class":92},">薪资\u003C\u002F",[82,72052,287],{"class":53863},[82,72054,53870],{"class":92},[82,72056,72057,72059,72061,72064,72066],{"class":84,"line":10606},[82,72058,57862],{"class":92},[82,72060,287],{"class":53863},[82,72062,72063],{"class":92},">就业城市\u003C\u002F",[82,72065,287],{"class":53863},[82,72067,53870],{"class":92},[82,72069,72070,72072,72074,72077,72079],{"class":84,"line":10612},[82,72071,57862],{"class":92},[82,72073,287],{"class":53863},[82,72075,72076],{"class":92},">操作\u003C\u002F",[82,72078,287],{"class":53863},[82,72080,53870],{"class":92},[82,72082,72083,72085,72087],{"class":84,"line":10624},[82,72084,57967],{"class":92},[82,72086,284],{"class":53863},[82,72088,53870],{"class":92},[82,72090,72091,72093,72095],{"class":84,"line":10636},[82,72092,54338],{"class":92},[82,72094,281],{"class":53863},[82,72096,53870],{"class":92},[82,72098,72099,72101,72103],{"class":84,"line":10648},[82,72100,53904],{"class":92},[82,72102,294],{"class":53863},[82,72104,53870],{"class":92},[82,72106,72107],{"class":84,"line":12307},[82,72108,72109],{"class":2828},"      \u003C!-- \n",[82,72111,72112],{"class":84,"line":12332},[82,72113,72114],{"class":2828},"        \u003Ctr>\n",[82,72116,72117],{"class":84,"line":12355},[82,72118,72119],{"class":2828},"          \u003Ctd>1001\u003C\u002Ftd>\n",[82,72121,72122],{"class":84,"line":12379},[82,72123,72124],{"class":2828},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[82,72126,72127],{"class":84,"line":12384},[82,72128,72129],{"class":2828},"          \u003Ctd>19\u003C\u002Ftd>\n",[82,72131,72132],{"class":84,"line":12389},[82,72133,72134],{"class":2828},"          \u003Ctd>男\u003C\u002Ftd>\n",[82,72136,72137],{"class":84,"line":12394},[82,72138,72139],{"class":2828},"          \u003Ctd>15000\u003C\u002Ftd>\n",[82,72141,72142],{"class":84,"line":12403},[82,72143,72144],{"class":2828},"          \u003Ctd>上海\u003C\u002Ftd>\n",[82,72146,72147],{"class":84,"line":12408},[82,72148,72149],{"class":2828},"          \u003Ctd>\n",[82,72151,72152],{"class":84,"line":12414},[82,72153,72154],{"class":2828},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[82,72156,72157],{"class":84,"line":12435},[82,72158,72159],{"class":2828},"          \u003C\u002Ftd>\n",[82,72161,72162],{"class":84,"line":12441},[82,72163,72164],{"class":2828},"        \u003C\u002Ftr> \n",[82,72166,72167],{"class":84,"line":12455},[82,72168,72169],{"class":2828},"        -->\n",[82,72171,72172,72174,72176],{"class":84,"line":12461},[82,72173,54338],{"class":92},[82,72175,294],{"class":53863},[82,72177,53870],{"class":92},[82,72179,72180,72182,72184],{"class":84,"line":12488},[82,72181,54977],{"class":92},[82,72183,278],{"class":53863},[82,72185,53870],{"class":92},[82,72187,72188,72190,72192],{"class":84,"line":12497},[82,72189,54705],{"class":92},[82,72191,54375],{"class":53863},[82,72193,53870],{"class":92},[82,72195,72196],{"class":84,"line":12503},[82,72197,62516],{"class":2828},[82,72199,72200,72202,72205,72207,72209,72211,72213,72216],{"class":84,"line":12511},[82,72201,13811],{"class":112},[82,72203,72204],{"class":88}," uname",[82,72206,259],{"class":112},[82,72208,56956],{"class":92},[82,72210,56959],{"class":2384},[82,72212,93],{"class":92},[82,72214,72215],{"class":96},"'.uname'",[82,72217,119],{"class":92},[82,72219,72220,72222,72224,72226,72228,72230,72232,72235],{"class":84,"line":12516},[82,72221,13811],{"class":112},[82,72223,18274],{"class":88},[82,72225,259],{"class":112},[82,72227,56956],{"class":92},[82,72229,56959],{"class":2384},[82,72231,93],{"class":92},[82,72233,72234],{"class":96},"'.age'",[82,72236,119],{"class":92},[82,72238,72239,72241,72244,72246,72248,72250,72252,72255],{"class":84,"line":19189},[82,72240,13811],{"class":112},[82,72242,72243],{"class":88}," gender",[82,72245,259],{"class":112},[82,72247,56956],{"class":92},[82,72249,56959],{"class":2384},[82,72251,93],{"class":92},[82,72253,72254],{"class":96},"'.gender'",[82,72256,119],{"class":92},[82,72258,72259,72261,72264,72266,72268,72270,72272,72275],{"class":84,"line":19195},[82,72260,13811],{"class":112},[82,72262,72263],{"class":88}," salary",[82,72265,259],{"class":112},[82,72267,56956],{"class":92},[82,72269,56959],{"class":2384},[82,72271,93],{"class":92},[82,72273,72274],{"class":96},"'.salary'",[82,72276,119],{"class":92},[82,72278,72279,72281,72284,72286,72288,72290,72292,72295],{"class":84,"line":19218},[82,72280,13811],{"class":112},[82,72282,72283],{"class":88}," city",[82,72285,259],{"class":112},[82,72287,56956],{"class":92},[82,72289,56959],{"class":2384},[82,72291,93],{"class":92},[82,72293,72294],{"class":96},"'.city'",[82,72296,119],{"class":92},[82,72298,72299,72301,72304,72306,72308,72310,72312,72315],{"class":84,"line":19224},[82,72300,13811],{"class":112},[82,72302,72303],{"class":88}," tbody",[82,72305,259],{"class":112},[82,72307,56956],{"class":92},[82,72309,56959],{"class":2384},[82,72311,93],{"class":92},[82,72313,72314],{"class":96},"'tbody'",[82,72316,119],{"class":92},[82,72318,72319],{"class":84,"line":19247},[82,72320,486],{"emptyLinePlaceholder":485},[82,72322,72323],{"class":84,"line":19261},[82,72324,72325],{"class":2828},"    \u002F\u002F 获取所有带有name属性的元素\n",[82,72327,72328,72330,72333,72335,72337,72339,72341,72344],{"class":84,"line":19281},[82,72329,13811],{"class":112},[82,72331,72332],{"class":88}," items",[82,72334,259],{"class":112},[82,72336,56956],{"class":92},[82,72338,58240],{"class":2384},[82,72340,93],{"class":92},[82,72342,72343],{"class":96},"'[name]'",[82,72345,119],{"class":92},[82,72347,72348],{"class":84,"line":19287},[82,72349,72350],{"class":2828},"    \u002F\u002F 声明一个空的数组\n",[82,72352,72353,72355,72357,72359],{"class":84,"line":19298},[82,72354,13811],{"class":112},[82,72356,60253],{"class":88},[82,72358,259],{"class":112},[82,72360,2408],{"class":92},[82,72362,72363],{"class":84,"line":19321},[82,72364,72365],{"class":2828},"    \u002F\u002F 1.录入模块\n",[82,72367,72368],{"class":84,"line":19343},[82,72369,72370],{"class":2828},"    \u002F\u002F 1.1这是一个表单提交事件\n",[82,72372,72373,72375,72378,72380,72382,72384,72386,72389],{"class":84,"line":19348},[82,72374,13811],{"class":112},[82,72376,72377],{"class":88}," info",[82,72379,259],{"class":112},[82,72381,56956],{"class":92},[82,72383,56959],{"class":2384},[82,72385,93],{"class":92},[82,72387,72388],{"class":96},"'.info'",[82,72390,119],{"class":92},[82,72392,72393,72396,72398,72400,72403,72405,72407,72409,72411],{"class":84,"line":19354},[82,72394,72395],{"class":92},"    info.",[82,72397,60371],{"class":2384},[82,72399,93],{"class":92},[82,72401,72402],{"class":96},"'submit'",[82,72404,100],{"class":92},[82,72406,57009],{"class":112},[82,72408,4265],{"class":92},[82,72410,2844],{"class":108},[82,72412,15031],{"class":92},[82,72414,72415],{"class":84,"line":19368},[82,72416,72417],{"class":2828},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[82,72419,72420,72423,72426],{"class":84,"line":19381},[82,72421,72422],{"class":92},"      e.",[82,72424,72425],{"class":2384},"preventDefault",[82,72427,4576],{"class":92},[82,72429,72430],{"class":84,"line":19386},[82,72431,62570],{"class":2828},[82,72433,72434],{"class":84,"line":19400},[82,72435,486],{"emptyLinePlaceholder":485},[82,72437,72438],{"class":84,"line":19405},[82,72439,72440],{"class":2828},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[82,72442,72443],{"class":84,"line":19411},[82,72444,72445],{"class":2828},"      \u002F\u002F 先遍历循环\n",[82,72447,72448,72450,72452,72454,72456,72458,72460,72462,72464,72467,72469,72471,72473],{"class":84,"line":19416},[82,72449,54844],{"class":112},[82,72451,4265],{"class":92},[82,72453,54408],{"class":112},[82,72455,12029],{"class":92},[82,72457,113],{"class":112},[82,72459,6688],{"class":88},[82,72461,12036],{"class":92},[82,72463,3659],{"class":112},[82,72465,72466],{"class":92}," items.",[82,72468,54529],{"class":88},[82,72470,5810],{"class":92},[82,72472,4892],{"class":112},[82,72474,15031],{"class":92},[82,72476,72477,72479,72482,72484,72487],{"class":84,"line":19430},[82,72478,5096],{"class":112},[82,72480,72481],{"class":92}," (items[i].value ",[82,72483,57046],{"class":112},[82,72485,72486],{"class":96}," ''",[82,72488,15031],{"class":92},[82,72490,72491,72494,72497,72499,72502],{"class":84,"line":19435},[82,72492,72493],{"class":112},"          return",[82,72495,72496],{"class":2384}," alert",[82,72498,93],{"class":92},[82,72500,72501],{"class":96},"'输入内容不能为空'",[82,72503,119],{"class":92},[82,72505,72506],{"class":84,"line":19440},[82,72507,5128],{"class":92},[82,72509,72510],{"class":84,"line":19454},[82,72511,54958],{"class":92},[82,72513,72514],{"class":84,"line":19466},[82,72515,486],{"emptyLinePlaceholder":485},[82,72517,72518],{"class":84,"line":19471},[82,72519,72520],{"class":2828},"      \u002F\u002F 创建新的对象\n",[82,72522,72523,72525,72528,72530],{"class":84,"line":19484},[82,72524,60786],{"class":112},[82,72526,72527],{"class":88}," obj",[82,72529,259],{"class":112},[82,72531,1349],{"class":92},[82,72533,72534,72537,72539,72541,72543],{"class":84,"line":19489},[82,72535,72536],{"class":92},"        stuID: arr.",[82,72538,54529],{"class":88},[82,72540,48130],{"class":112},[82,72542,27703],{"class":88},[82,72544,1363],{"class":92},[82,72546,72547],{"class":84,"line":19494},[82,72548,72549],{"class":92},"        uname: uname.value,\n",[82,72551,72552],{"class":84,"line":19499},[82,72553,72554],{"class":92},"        age: age.value,\n",[82,72556,72557],{"class":84,"line":19512},[82,72558,72559],{"class":92},"        gender: gender.value,\n",[82,72561,72562],{"class":84,"line":19517},[82,72563,72564],{"class":92},"        salary: salary.value,\n",[82,72566,72567],{"class":84,"line":35202},[82,72568,72569],{"class":92},"        city: city.value\n",[82,72571,72572],{"class":84,"line":35208},[82,72573,54958],{"class":92},[82,72575,72576],{"class":84,"line":35214},[82,72577,72578],{"class":2828},"      \u002F\u002F console.log(obj);\n",[82,72580,72581],{"class":84,"line":35220},[82,72582,72583],{"class":2828},"      \u002F\u002F 追加到数组里面\n",[82,72585,72586,72588,72590],{"class":84,"line":35226},[82,72587,60565],{"class":92},[82,72589,54445],{"class":2384},[82,72591,72592],{"class":92},"(obj)\n",[82,72594,72595],{"class":84,"line":35237},[82,72596,72597],{"class":2828},"      \u002F\u002F console.log(arr);\n",[82,72599,72600],{"class":84,"line":35243},[82,72601,72602],{"class":2828},"      \u002F\u002F 清空表单  reset重置表单\n",[82,72604,72605,72608,72610,72613],{"class":84,"line":35263},[82,72606,72607],{"class":88},"      this",[82,72609,233],{"class":92},[82,72611,72612],{"class":2384},"reset",[82,72614,4576],{"class":92},[82,72616,72617],{"class":84,"line":35269},[82,72618,72619],{"class":2828},"      \u002F\u002F 调用渲染函数\n",[82,72621,72622,72625],{"class":84,"line":35280},[82,72623,72624],{"class":2384},"      render",[82,72626,4576],{"class":92},[82,72628,72629],{"class":84,"line":35286},[82,72630,36029],{"class":92},[82,72632,72633],{"class":84,"line":35292},[82,72634,72635],{"class":2828},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[82,72637,72638,72641,72644],{"class":84,"line":35298},[82,72639,72640],{"class":112},"    function",[82,72642,72643],{"class":2384}," render",[82,72645,13443],{"class":92},[82,72647,72648],{"class":84,"line":35304},[82,72649,72650],{"class":2828},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[82,72652,72653,72656,72658],{"class":84,"line":35310},[82,72654,72655],{"class":92},"      tbody.innerHTML ",[82,72657,113],{"class":112},[82,72659,72660],{"class":96}," ''\n",[82,72662,72663],{"class":84,"line":35316},[82,72664,72665],{"class":2828},"      \u002F\u002F 遍历数组\n",[82,72667,72668,72670,72672,72674,72676,72678,72680,72682,72684,72686,72688,72690,72692],{"class":84,"line":35322},[82,72669,54844],{"class":112},[82,72671,4265],{"class":92},[82,72673,54408],{"class":112},[82,72675,12029],{"class":92},[82,72677,113],{"class":112},[82,72679,6688],{"class":88},[82,72681,12036],{"class":92},[82,72683,3659],{"class":112},[82,72685,54526],{"class":92},[82,72687,54529],{"class":88},[82,72689,5810],{"class":92},[82,72691,4892],{"class":112},[82,72693,15031],{"class":92},[82,72695,72696,72698,72701,72703,72705,72708,72710,72713],{"class":84,"line":35342},[82,72697,63828],{"class":112},[82,72699,72700],{"class":88}," tr",[82,72702,259],{"class":112},[82,72704,56956],{"class":92},[82,72706,72707],{"class":2384},"createElement",[82,72709,93],{"class":92},[82,72711,72712],{"class":96},"'tr'",[82,72714,119],{"class":92},[82,72716,72717,72720,72722],{"class":84,"line":35348},[82,72718,72719],{"class":92},"        tr.innerHTML ",[82,72721,113],{"class":112},[82,72723,72724],{"class":96}," `\n",[82,72726,72727,72730,72732,72734,72736,72739,72742],{"class":84,"line":35364},[82,72728,72729],{"class":96},"        \u003Ctd>${",[82,72731,6475],{"class":92},[82,72733,3639],{"class":96},[82,72735,3199],{"class":92},[82,72737,72738],{"class":96},"].",[82,72740,72741],{"class":92},"stuID",[82,72743,72744],{"class":96},"}\u003C\u002Ftd>\n",[82,72746,72747,72750,72752,72754,72756,72758,72761],{"class":84,"line":35370},[82,72748,72749],{"class":96},"          \u003Ctd>${",[82,72751,6475],{"class":92},[82,72753,3639],{"class":96},[82,72755,3199],{"class":92},[82,72757,72738],{"class":96},[82,72759,72760],{"class":92},"uname",[82,72762,72744],{"class":96},[82,72764,72765,72767,72769,72771,72773,72775,72778],{"class":84,"line":35384},[82,72766,72749],{"class":96},[82,72768,6475],{"class":92},[82,72770,3639],{"class":96},[82,72772,3199],{"class":92},[82,72774,72738],{"class":96},[82,72776,72777],{"class":92},"age",[82,72779,72744],{"class":96},[82,72781,72782,72784,72786,72788,72790,72792,72795],{"class":84,"line":35390},[82,72783,72749],{"class":96},[82,72785,6475],{"class":92},[82,72787,3639],{"class":96},[82,72789,3199],{"class":92},[82,72791,72738],{"class":96},[82,72793,72794],{"class":92},"gender",[82,72796,72744],{"class":96},[82,72798,72799,72801,72803,72805,72807,72809,72812],{"class":84,"line":35405},[82,72800,72749],{"class":96},[82,72802,6475],{"class":92},[82,72804,3639],{"class":96},[82,72806,3199],{"class":92},[82,72808,72738],{"class":96},[82,72810,72811],{"class":92},"salary",[82,72813,72744],{"class":96},[82,72815,72816,72818,72820,72822,72824,72826,72829],{"class":84,"line":35411},[82,72817,72749],{"class":96},[82,72819,6475],{"class":92},[82,72821,3639],{"class":96},[82,72823,3199],{"class":92},[82,72825,72738],{"class":96},[82,72827,72828],{"class":92},"city",[82,72830,72744],{"class":96},[82,72832,72833],{"class":84,"line":35420},[82,72834,72149],{"class":96},[82,72836,72837,72840,72842],{"class":84,"line":35426},[82,72838,72839],{"class":96},"            \u003Ca href=\"javascript:\" data-id=${",[82,72841,3199],{"class":92},[82,72843,72844],{"class":96},"}>删除\u003C\u002Fa>\n",[82,72846,72847],{"class":84,"line":35435},[82,72848,72849],{"class":96},"          \u003C\u002Ftd> \n",[82,72851,72852],{"class":84,"line":35441},[82,72853,72854],{"class":96},"          `\n",[82,72856,72857],{"class":84,"line":35447},[82,72858,72859],{"class":2828},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[82,72861,72862,72865,72868],{"class":84,"line":35456},[82,72863,72864],{"class":92},"        tbody.",[82,72866,72867],{"class":2384},"appendChild",[82,72869,72870],{"class":92},"(tr)\n",[82,72872,72873],{"class":84,"line":35462},[82,72874,54958],{"class":92},[82,72876,72877],{"class":84,"line":35473},[82,72878,4787],{"class":92},[82,72880,72881],{"class":84,"line":35479},[82,72882,486],{"emptyLinePlaceholder":485},[82,72884,72885],{"class":84,"line":35498},[82,72886,72887],{"class":2828},"    \u002F\u002F 3.删除委托\n",[82,72889,72890],{"class":84,"line":35504},[82,72891,72892],{"class":2828},"    \u002F\u002F 3.1 事件委托 tbody\n",[82,72894,72895,72898,72900,72902,72904,72906,72908,72910,72912],{"class":84,"line":35515},[82,72896,72897],{"class":92},"    tbody.",[82,72899,60371],{"class":2384},[82,72901,93],{"class":92},[82,72903,60376],{"class":96},[82,72905,100],{"class":92},[82,72907,57009],{"class":112},[82,72909,4265],{"class":92},[82,72911,2844],{"class":108},[82,72913,15031],{"class":92},[82,72915,72916,72918,72920,72922,72924],{"class":84,"line":35521},[82,72917,57040],{"class":112},[82,72919,69591],{"class":92},[82,72921,57046],{"class":112},[82,72923,70813],{"class":96},[82,72925,15031],{"class":92},[82,72927,72928],{"class":84,"line":35541},[82,72929,72930],{"class":2828},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[82,72932,72933],{"class":84,"line":35557},[82,72934,72935],{"class":2828},"        \u002F\u002F console.log(e.target.dataset.id);\n",[82,72937,72938],{"class":84,"line":35563},[82,72939,72940],{"class":2828},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[82,72942,72943,72946,72948,72951,72953],{"class":84,"line":35577},[82,72944,72945],{"class":92},"        arr.",[82,72947,60568],{"class":2384},[82,72949,72950],{"class":92},"(e.target.dataset.id, ",[82,72952,2283],{"class":88},[82,72954,119],{"class":92},[82,72956,72957],{"class":84,"line":35583},[82,72958,72959],{"class":2828},"        \u002F\u002F 重新渲染一次\n",[82,72961,72962,72965],{"class":84,"line":35589},[82,72963,72964],{"class":2384},"        render",[82,72966,4576],{"class":92},[82,72968,72969],{"class":84,"line":35600},[82,72970,54958],{"class":92},[82,72972,72973],{"class":84,"line":35606},[82,72974,36029],{"class":92},[82,72976,72977,72979,72981],{"class":84,"line":35612},[82,72978,54977],{"class":92},[82,72980,54375],{"class":53863},[82,72982,53870],{"class":92},[82,72984,72985],{"class":84,"line":35622},[82,72986,486],{"emptyLinePlaceholder":485},[82,72988,72989,72991,72993],{"class":84,"line":35628},[82,72990,54347],{"class":92},[82,72992,54362],{"class":53863},[82,72994,53870],{"class":92},[82,72996,72997],{"class":84,"line":35639},[82,72998,486],{"emptyLinePlaceholder":485},[82,73000,73001,73003,73005],{"class":84,"line":35645},[82,73002,54347],{"class":92},[82,73004,53198],{"class":53863},[82,73006,53870],{"class":92},[19,73008,73009],{},"样式：",[73,73011,73015],{"className":73012,"code":73013,"language":73014,"meta":78,"style":78},"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",[32,73016,73017,73022,73032,73041,73045,73049,73054,73064,73069,73073,73078,73088,73093,73102,73106,73110,73115,73120,73130,73140,73145,73149,73154,73163,73173,73178,73188,73198,73202,73207,73215,73219,73224,73229,73234,73242,73251,73255,73260,73269,73273,73278,73287,73291,73296,73305,73314,73322,73326,73331,73340,73350,73359,73369,73375,73384,73394,73404,73408,73413,73422,73430,73440,73448,73457,73466,73476,73484,73488,73493,73502],{"__ignoreMap":78},[82,73018,73019],{"class":84,"line":85},[82,73020,73021],{"class":92},"* {\n",[82,73023,73024,73027,73029],{"class":84,"line":157},[82,73025,73026],{"class":53863},"  margin",[82,73028,1357],{"class":92},[82,73030,73031],{"class":96},"0;\n",[82,73033,73034,73037,73039],{"class":84,"line":404},[82,73035,73036],{"class":96},"  padding",[82,73038,1357],{"class":92},[82,73040,73031],{"class":96},[82,73042,73043],{"class":84,"line":413},[82,73044,1391],{"class":92},[82,73046,73047],{"class":84,"line":508},[82,73048,486],{"emptyLinePlaceholder":485},[82,73050,73051],{"class":84,"line":513},[82,73052,73053],{"class":96},"a {\n",[82,73055,73056,73059,73061],{"class":84,"line":1388},[82,73057,73058],{"class":53863},"  text-decoration",[82,73060,1357],{"class":92},[82,73062,73063],{"class":96},"none;\n",[82,73065,73066],{"class":84,"line":1394},[82,73067,73068],{"class":96},"  color:#721c24;\n",[82,73070,73071],{"class":84,"line":1399},[82,73072,1391],{"class":92},[82,73074,73075],{"class":84,"line":1430},[82,73076,73077],{"class":96},"h1 {\n",[82,73079,73080,73083,73085],{"class":84,"line":1818},[82,73081,73082],{"class":53863},"  text-align",[82,73084,1357],{"class":92},[82,73086,73087],{"class":96},"center;\n",[82,73089,73090],{"class":84,"line":2082},[82,73091,73092],{"class":96},"  color:#333;\n",[82,73094,73095,73097,73099],{"class":84,"line":2233},[82,73096,73026],{"class":53863},[82,73098,1357],{"class":92},[82,73100,73101],{"class":96},"20px 0;\n",[82,73103,73104],{"class":84,"line":2255},[82,73105,5273],{"class":92},[82,73107,73108],{"class":84,"line":2260},[82,73109,1391],{"class":92},[82,73111,73112],{"class":84,"line":2298},[82,73113,73114],{"class":96},"table {\n",[82,73116,73117],{"class":84,"line":2303},[82,73118,73119],{"class":96},"  margin:0 auto;\n",[82,73121,73122,73125,73127],{"class":84,"line":2321},[82,73123,73124],{"class":53863},"  width",[82,73126,1357],{"class":92},[82,73128,73129],{"class":96},"800px;\n",[82,73131,73132,73135,73137],{"class":84,"line":2533},[82,73133,73134],{"class":53863},"  border-collapse",[82,73136,1357],{"class":92},[82,73138,73139],{"class":96},"collapse;\n",[82,73141,73142],{"class":84,"line":2538},[82,73143,73144],{"class":96},"  color:#004085;\n",[82,73146,73147],{"class":84,"line":2548},[82,73148,1391],{"class":92},[82,73150,73151],{"class":84,"line":2579},[82,73152,73153],{"class":96},"th {\n",[82,73155,73156,73158,73160],{"class":84,"line":2585},[82,73157,73036],{"class":53863},[82,73159,1357],{"class":92},[82,73161,73162],{"class":96},"10px;\n",[82,73164,73165,73168,73170],{"class":84,"line":4350},[82,73166,73167],{"class":53863},"  background",[82,73169,1357],{"class":92},[82,73171,73172],{"class":2828},"#cfe5ff;\n",[82,73174,73175],{"class":84,"line":4355},[82,73176,73177],{"class":92},"  \n",[82,73179,73180,73183,73185],{"class":84,"line":4360},[82,73181,73182],{"class":53863},"  font-size",[82,73184,1357],{"class":92},[82,73186,73187],{"class":96},"20px;\n",[82,73189,73190,73193,73195],{"class":84,"line":4365},[82,73191,73192],{"class":53863},"  font-weight",[82,73194,1357],{"class":92},[82,73196,73197],{"class":96},"400;\n",[82,73199,73200],{"class":84,"line":4379},[82,73201,1391],{"class":92},[82,73203,73204],{"class":84,"line":4384},[82,73205,73206],{"class":96},"td,th {\n",[82,73208,73209,73212],{"class":84,"line":5176},[82,73210,73211],{"class":96},"  border:1px solid",[82,73213,73214],{"class":2828}," #b8daff;\n",[82,73216,73217],{"class":84,"line":5190},[82,73218,1391],{"class":92},[82,73220,73221],{"class":84,"line":5198},[82,73222,73223],{"class":96},"td {\n",[82,73225,73226],{"class":84,"line":5203},[82,73227,73228],{"class":96},"  padding:10px;\n",[82,73230,73231],{"class":84,"line":5209},[82,73232,73233],{"class":96},"  color:#666;\n",[82,73235,73236,73238,73240],{"class":84,"line":5215},[82,73237,73082],{"class":53863},[82,73239,1357],{"class":92},[82,73241,73087],{"class":96},[82,73243,73244,73246,73248],{"class":84,"line":5220},[82,73245,73182],{"class":53863},[82,73247,1357],{"class":92},[82,73249,73250],{"class":96},"16px;\n",[82,73252,73253],{"class":84,"line":10539},[82,73254,1391],{"class":92},[82,73256,73257],{"class":84,"line":10563},[82,73258,73259],{"class":96},"tbody tr {\n",[82,73261,73262,73264,73266],{"class":84,"line":10568},[82,73263,73167],{"class":53863},[82,73265,1357],{"class":92},[82,73267,73268],{"class":2828},"#fff;\n",[82,73270,73271],{"class":84,"line":10574},[82,73272,1391],{"class":92},[82,73274,73275],{"class":84,"line":10601},[82,73276,73277],{"class":96},"tbody tr:hover {\n",[82,73279,73280,73282,73284],{"class":84,"line":10606},[82,73281,73167],{"class":53863},[82,73283,1357],{"class":92},[82,73285,73286],{"class":2828},"#e1ecf8;\n",[82,73288,73289],{"class":84,"line":10612},[82,73290,1391],{"class":92},[82,73292,73293],{"class":84,"line":10624},[82,73294,73295],{"class":96},".info {\n",[82,73297,73298,73300,73302],{"class":84,"line":10636},[82,73299,73124],{"class":53863},[82,73301,1357],{"class":92},[82,73303,73304],{"class":96},"900px;\n",[82,73306,73307,73309,73311],{"class":84,"line":10648},[82,73308,73026],{"class":53863},[82,73310,1357],{"class":92},[82,73312,73313],{"class":96},"50px auto;\n",[82,73315,73316,73318,73320],{"class":84,"line":12307},[82,73317,73082],{"class":53863},[82,73319,1357],{"class":92},[82,73321,73087],{"class":96},[82,73323,73324],{"class":84,"line":12332},[82,73325,1391],{"class":92},[82,73327,73328],{"class":84,"line":12355},[82,73329,73330],{"class":96},".info  input, .info select {\n",[82,73332,73333,73335,73337],{"class":84,"line":12379},[82,73334,73124],{"class":53863},[82,73336,1357],{"class":92},[82,73338,73339],{"class":96},"80px;\n",[82,73341,73342,73345,73347],{"class":84,"line":12384},[82,73343,73344],{"class":53863},"  height",[82,73346,1357],{"class":92},[82,73348,73349],{"class":96},"27px;\n",[82,73351,73352,73355,73357],{"class":84,"line":12389},[82,73353,73354],{"class":53863},"  outline",[82,73356,1357],{"class":92},[82,73358,73063],{"class":96},[82,73360,73361,73364,73366],{"class":84,"line":12394},[82,73362,73363],{"class":53863},"  border-radius",[82,73365,1357],{"class":92},[82,73367,73368],{"class":96},"5px;\n",[82,73370,73371,73373],{"class":84,"line":12403},[82,73372,73211],{"class":96},[82,73374,73214],{"class":2828},[82,73376,73377,73380,73382],{"class":84,"line":12408},[82,73378,73379],{"class":53863},"  padding-left",[82,73381,1357],{"class":92},[82,73383,73368],{"class":96},[82,73385,73386,73389,73391],{"class":84,"line":12414},[82,73387,73388],{"class":53863},"  box-sizing",[82,73390,1357],{"class":92},[82,73392,73393],{"class":96},"border-box;\n",[82,73395,73396,73399,73401],{"class":84,"line":12435},[82,73397,73398],{"class":53863},"  margin-right",[82,73400,1357],{"class":92},[82,73402,73403],{"class":96},"15px;\n",[82,73405,73406],{"class":84,"line":12441},[82,73407,1391],{"class":92},[82,73409,73410],{"class":84,"line":12455},[82,73411,73412],{"class":96},".info button {\n",[82,73414,73415,73417,73419],{"class":84,"line":12461},[82,73416,73124],{"class":53863},[82,73418,1357],{"class":92},[82,73420,73421],{"class":96},"60px;\n",[82,73423,73424,73426,73428],{"class":84,"line":12488},[82,73425,73344],{"class":53863},[82,73427,1357],{"class":92},[82,73429,73349],{"class":96},[82,73431,73432,73435,73437],{"class":84,"line":12497},[82,73433,73434],{"class":53863},"  background-color",[82,73436,1357],{"class":92},[82,73438,73439],{"class":2828},"#004085;\n",[82,73441,73442,73444,73446],{"class":84,"line":12503},[82,73443,73354],{"class":53863},[82,73445,1357],{"class":92},[82,73447,73063],{"class":96},[82,73449,73450,73453,73455],{"class":84,"line":12511},[82,73451,73452],{"class":53863},"  border",[82,73454,1357],{"class":92},[82,73456,73031],{"class":96},[82,73458,73459,73462,73464],{"class":84,"line":12516},[82,73460,73461],{"class":53863},"  color",[82,73463,1357],{"class":92},[82,73465,73268],{"class":2828},[82,73467,73468,73471,73473],{"class":84,"line":19189},[82,73469,73470],{"class":53863},"  cursor",[82,73472,1357],{"class":92},[82,73474,73475],{"class":96},"pointer;\n",[82,73477,73478,73480,73482],{"class":84,"line":19195},[82,73479,73363],{"class":53863},[82,73481,1357],{"class":92},[82,73483,73368],{"class":96},[82,73485,73486],{"class":84,"line":19218},[82,73487,1391],{"class":92},[82,73489,73490],{"class":84,"line":19224},[82,73491,73492],{"class":96},".info .age {\n",[82,73494,73495,73497,73499],{"class":84,"line":19247},[82,73496,73124],{"class":53863},[82,73498,1357],{"class":92},[82,73500,73501],{"class":96},"50px;\n",[82,73503,73504],{"class":84,"line":19261},[82,73505,1391],{"class":92},[19,73507,73508],{},"思路：",[19,73510,73511],{},[4078,73512],{"alt":78,"src":73513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73515,73516],{},[4078,73517],{"alt":78,"src":73518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73520,73521],{},[4078,73522],{"alt":78,"src":73523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[65,73525,73527],{"id":73526},"_3315-重绘回流","3.3.15 重绘回流",[19,73529,73530],{},[4078,73531],{"alt":78,"src":73532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73534,73535],{},[4078,73536],{"alt":78,"src":73537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73539,73540],{},[4078,73541],{"alt":78,"src":73542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73544,73546],{"id":73545},"_34-bom","3.4 BOM",[19,73548,73549],{},[4078,73550],{"alt":78,"src":73551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73553,73554],{},"平时写的document省略了window而已，实际上是window.document",[19,73556,73557],{},"函数也是这样，调用的时候实际为window.fn()",[19,73559,73560],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73562,73563],{},"window大部分情况下可以省略",[65,73565,73567],{"id":73566},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73569,73570],{},"只执行一次",[19,73572,73573],{},[4078,73574],{"alt":78,"src":73575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73577,73578],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73580,73581],{},[4078,73582],{"alt":78,"src":73583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[65,73585,73587],{"id":73586},"_342-js执行机制","3.4.2 JS执行机制",[19,73589,73590],{},[4078,73591],{"alt":78,"src":73592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73594,73595],{},"两个的结果都是1111 3333 2222",[19,73597,73598],{},[4078,73599],{"alt":78,"src":73600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73602,73603],{},[4078,73604],{"alt":78,"src":73605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73607,73608],{},[4078,73609],{"alt":78,"src":73610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73612,73613],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73615,73616],{},"工作流程：",[19,73618,73619],{},[4078,73620],{"alt":78,"src":73621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73623,73624],{},[4078,73625],{"alt":78,"src":73626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73628,73629],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73631,73632],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[65,73634,73636],{"id":73635},"_343-location对象","3.4.3 location对象",[19,73638,73639],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73641,73642],{},[4078,73643],{"alt":78,"src":73644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73646,73647],{},"href可以跳转页面",[26,73649,73650],{},[29,73651,73652],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73654,73655],{},"search得到提交信息之后网站后边的地址",[19,73657,73658],{},[4078,73659],{"alt":78,"src":73660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73662,73663],{},[4078,73664],{"alt":78,"src":73665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,73667,73668],{"start":157},[29,73669,73670],{},"hash:这个获取单页面应用#后边的地址",[19,73672,73673],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73675,73676],{},[4078,73677],{"alt":78,"src":73678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[73,73680,73682],{"className":55627,"code":73681,"language":55629,"meta":78,"style":78},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[32,73683,73684,73704,73724],{"__ignoreMap":78},[82,73685,73686,73688,73690,73692,73694,73697,73700,73702],{"class":84,"line":85},[82,73687,54705],{"class":92},[82,73689,323],{"class":53863},[82,73691,63615],{"class":2384},[82,73693,113],{"class":92},[82,73695,73696],{"class":96},"\"#\u002Fmy\"",[82,73698,73699],{"class":92},">我的\u003C\u002F",[82,73701,323],{"class":53863},[82,73703,53870],{"class":92},[82,73705,73706,73708,73710,73712,73714,73717,73720,73722],{"class":84,"line":157},[82,73707,54705],{"class":92},[82,73709,323],{"class":53863},[82,73711,63615],{"class":2384},[82,73713,113],{"class":92},[82,73715,73716],{"class":96},"\"#\u002Ffriend\"",[82,73718,73719],{"class":92},">关注\u003C\u002F",[82,73721,323],{"class":53863},[82,73723,53870],{"class":92},[82,73725,73726,73728,73730,73732,73734,73737,73740,73742],{"class":84,"line":404},[82,73727,54705],{"class":92},[82,73729,323],{"class":53863},[82,73731,63615],{"class":2384},[82,73733,113],{"class":92},[82,73735,73736],{"class":96},"\"#\u002Fdownload\"",[82,73738,73739],{"class":92},">下载\u003C\u002F",[82,73741,323],{"class":53863},[82,73743,53870],{"class":92},[19,73745,73746],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,73748,73749],{"start":404},[29,73750,73751,73752,73754,73755,73757],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56276,73753],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56276,73756],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[65,73759,73761],{"id":73760},"_345-navigator对象","3.4.5 navigator对象",[19,73763,73764],{},[4078,73765],{"alt":78,"src":73766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[73,73768,73772],{"className":73769,"code":73770,"language":73771,"meta":78,"style":78},"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",[32,73773,73774,73779,73790,73802,73807,73858,73899,73904,73917,73929,73934],{"__ignoreMap":78},[82,73775,73776],{"class":84,"line":85},[82,73777,73778],{"class":2828},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[82,73780,73781,73783,73785,73787],{"class":84,"line":157},[82,73782,2986],{"class":112},[82,73784,93],{"class":92},[82,73786,57009],{"class":112},[82,73788,73789],{"class":92}," () { \n",[82,73791,73792,73794,73797,73799],{"class":84,"line":404},[82,73793,9384],{"class":112},[82,73795,73796],{"class":88}," userAgent",[82,73798,259],{"class":112},[82,73800,73801],{"class":92}," navigator.userAgent \n",[82,73803,73804],{"class":84,"line":413},[82,73805,73806],{"class":2828},"\u002F\u002F 验证是否为Android或iPhone \n",[82,73808,73809,73811,73814,73816,73819,73822,73824,73826,73829,73831,73834,73838,73840,73842,73844,73847,73849,73851,73853,73855],{"class":84,"line":508},[82,73810,9384],{"class":112},[82,73812,73813],{"class":88}," android",[82,73815,259],{"class":112},[82,73817,73818],{"class":92}," userAgent.",[82,73820,73821],{"class":2384},"match",[82,73823,93],{"class":92},[82,73825,1147],{"class":96},[82,73827,73828],{"class":219},"(Android);",[82,73830,3735],{"class":112},[82,73832,73833],{"class":88},"[\\s",[82,73835,73837],{"class":73836},"snhLl","\\\u002F",[82,73839,3689],{"class":88},[82,73841,2249],{"class":112},[82,73843,93],{"class":219},[82,73845,73846],{"class":88},"[\\d.]",[82,73848,2249],{"class":112},[82,73850,3187],{"class":219},[82,73852,3735],{"class":112},[82,73854,1147],{"class":96},[82,73856,73857],{"class":92},") \n",[82,73859,73860,73862,73865,73867,73869,73871,73873,73875,73878,73881,73884,73886,73888,73891,73893,73895,73897],{"class":84,"line":513},[82,73861,9384],{"class":112},[82,73863,73864],{"class":88}," iphone",[82,73866,259],{"class":112},[82,73868,73818],{"class":92},[82,73870,73821],{"class":2384},[82,73872,93],{"class":92},[82,73874,1147],{"class":96},[82,73876,73877],{"class":219},"(iPhone",[82,73879,73880],{"class":88},"\\s",[82,73882,73883],{"class":219},"OS)",[82,73885,73880],{"class":88},[82,73887,93],{"class":219},[82,73889,73890],{"class":88},"[\\d_]",[82,73892,2249],{"class":112},[82,73894,3187],{"class":219},[82,73896,1147],{"class":96},[82,73898,73857],{"class":92},[82,73900,73901],{"class":84,"line":1388},[82,73902,73903],{"class":2828},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[82,73905,73906,73908,73911,73914],{"class":84,"line":1394},[82,73907,1237],{"class":112},[82,73909,73910],{"class":92}," (android ",[82,73912,73913],{"class":112},"||",[82,73915,73916],{"class":92}," iphone) { \n",[82,73918,73919,73922,73924,73927],{"class":84,"line":1399},[82,73920,73921],{"class":92},"location.href ",[82,73923,113],{"class":112},[82,73925,73926],{"class":96}," 'http:\u002F\u002Fm.itcast.cn'",[82,73928,5273],{"class":92},[82,73930,73931],{"class":84,"line":1430},[82,73932,73933],{"class":92},"} \n",[82,73935,73936],{"class":84,"line":1818},[82,73937,73938],{"class":92},"})()\n",[65,73940,73942],{"id":73941},"_346-histroy对象","3.4.6 histroy对象",[19,73944,73945],{},[4078,73946],{"alt":78,"src":73947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73949,73950],{},"浏览器地址的前进与后退!!!",[19,73952,73953],{},"history.back() 等效于 history.go(-1)",[19,73955,73956],{},"history.forward() 等效于 history.go(1)",[14,73958,73960],{"id":73959},"_35-本地存储","3.5 本地存储",[26,73962,73963,73966,73969],{},[29,73964,73965],{},"数据存储在用户浏览器中",[29,73967,73968],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73970,73971],{},"容量较大，sessionStorage和localStorage约 5M 左右",[65,73973,73975],{"id":73974},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73977,73978],{},"只能存储字符串",[19,73980,73981],{},[4078,73982],{"alt":78,"src":73983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73985,73986],{},[4078,73987],{"alt":78,"src":73988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73990,73991],{},"键值对要加引号,不然就会当变量来看了",[19,73993,73994],{},"localStorage.setItem('uname', 'pink')",[19,73996,73997],{},"刷新之后信息不再丢失",[19,73999,74000],{},"操作key,value会跟着变",[19,74002,74003],{},"删除只删除键就可以,即名字",[19,74005,73994],{},[19,74007,74008],{},"改:",[19,74010,74011],{},"localStorage.setItem('uname','red')",[19,74013,74014],{},"有这个键就是改,没有这个键就是改",[19,74016,74017],{},[4078,74018],{"alt":78,"src":74019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,74021,74022],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,74024,74025],{},[4078,74026],{"alt":78,"src":74027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,74029,74030],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[65,74032,74034],{"id":74033},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,74036,74037],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,74039,74040],{},"特性:",[26,74042,74043,74046,74049,74052],{},[29,74044,74045],{},"生命周期为关闭浏览器窗口",[29,74047,74048],{},"在同一个窗口(页面)下数据可以共享",[29,74050,74051],{},"以键值对的形式存储使用",[29,74053,74054],{},"用法跟localStorage 基本相同",[65,74056,74058],{"id":74057},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,74060,74061],{},"本地只能存储字符串,无法直接存储复杂数据类型",[73,74063,74065],{"className":55627,"code":74064,"language":55629,"meta":78,"style":78},"\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",[32,74066,74067,74075,74080,74085,74090,74095,74099,74104,74109],{"__ignoreMap":78},[82,74068,74069,74071,74073],{"class":84,"line":85},[82,74070,3659],{"class":92},[82,74072,54375],{"class":53863},[82,74074,53870],{"class":92},[82,74076,74077],{"class":84,"line":157},[82,74078,74079],{"class":92},"    const obj = {\n",[82,74081,74082],{"class":84,"line":404},[82,74083,74084],{"class":92},"      uname: 'pink老师',\n",[82,74086,74087],{"class":84,"line":413},[82,74088,74089],{"class":92},"      age: 18,\n",[82,74091,74092],{"class":84,"line":508},[82,74093,74094],{"class":92},"      gender: '女'\n",[82,74096,74097],{"class":84,"line":513},[82,74098,4787],{"class":92},[82,74100,74101],{"class":84,"line":1388},[82,74102,74103],{"class":92},"    \u002F\u002F 存储复杂数据类型\n",[82,74105,74106],{"class":84,"line":1394},[82,74107,74108],{"class":92},"    localStorage.setItem('obj', obj)\n",[82,74110,74111,74113,74115],{"class":84,"line":1399},[82,74112,54977],{"class":92},[82,74114,54375],{"class":53863},[82,74116,53870],{"class":92},[19,74118,74119],{},[4078,74120],{"alt":78,"src":74121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,74123,74124],{},"如果获取一下数据:",[19,74126,74127],{},"log(localStorage.getItem('obj'))",[19,74129,74130],{},[4078,74131],{"alt":78,"src":74132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,74134,74135],{},"发现直接存对象是使用不了的!!!",[24582,74137,74139],{"id":74138},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,74141,74142],{},[4078,74143],{"alt":78,"src":74144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[73,74146,74148],{"className":53196,"code":74147,"language":53198,"meta":78,"style":78},"\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",[32,74149,74150,74158,74168,74178,74187,74195,74199,74203,74229,74248,74256,74260,74265,74270],{"__ignoreMap":78},[82,74151,74152,74154,74156],{"class":84,"line":85},[82,74153,3659],{"class":92},[82,74155,54375],{"class":53863},[82,74157,53870],{"class":92},[82,74159,74160,74162,74164,74166],{"class":84,"line":157},[82,74161,13811],{"class":112},[82,74163,72527],{"class":88},[82,74165,259],{"class":112},[82,74167,1349],{"class":92},[82,74169,74170,74173,74176],{"class":84,"line":404},[82,74171,74172],{"class":92},"      uname: ",[82,74174,74175],{"class":96},"'pink老师'",[82,74177,1363],{"class":92},[82,74179,74180,74183,74185],{"class":84,"line":413},[82,74181,74182],{"class":92},"      age: ",[82,74184,1373],{"class":88},[82,74186,1363],{"class":92},[82,74188,74189,74192],{"class":84,"line":508},[82,74190,74191],{"class":92},"      gender: ",[82,74193,74194],{"class":96},"'女'\n",[82,74196,74197],{"class":84,"line":513},[82,74198,4787],{"class":92},[82,74200,74201],{"class":84,"line":1388},[82,74202,74103],{"class":2828},[82,74204,74205,74208,74211,74213,74216,74218,74221,74223,74226],{"class":84,"line":1394},[82,74206,74207],{"class":92},"  localStorage.",[82,74209,74210],{"class":2384},"setItem",[82,74212,93],{"class":92},[82,74214,74215],{"class":96},"'obj'",[82,74217,100],{"class":92},[82,74219,74220],{"class":88},"JSON",[82,74222,233],{"class":92},[82,74224,74225],{"class":2384},"stringify",[82,74227,74228],{"class":92},"(obj))\n",[82,74230,74231,74234,74236,74239,74242,74244,74246],{"class":84,"line":1399},[82,74232,74233],{"class":92},"  console.",[82,74235,60805],{"class":2384},[82,74237,74238],{"class":92},"(localStorage.",[82,74240,74241],{"class":2384},"getItem",[82,74243,93],{"class":92},[82,74245,74215],{"class":96},[82,74247,33074],{"class":92},[82,74249,74250,74252,74254],{"class":84,"line":1430},[82,74251,54977],{"class":92},[82,74253,54375],{"class":53863},[82,74255,53870],{"class":92},[82,74257,74258],{"class":84,"line":1818},[82,74259,73177],{"class":92},[82,74261,74262],{"class":84,"line":2082},[82,74263,74264],{"class":92},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[82,74266,74267],{"class":84,"line":2233},[82,74268,74269],{"class":92},"  类型是字符串的\n",[82,74271,74272],{"class":84,"line":2255},[82,74273,74274],{"class":92},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24582,74276,74278],{"id":74277},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,74280,74281],{},[4078,74282],{"alt":78,"src":74283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,74285,74286],{},[4078,74287],{"alt":78,"src":74288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[73,74290,74292],{"className":55627,"code":74291,"language":55629,"meta":78,"style":78},"  \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",[32,74293,74294,74302,74306,74310,74314,74318,74322,74327,74332,74337,74342,74347,74352,74357,74362],{"__ignoreMap":78},[82,74295,74296,74298,74300],{"class":84,"line":85},[82,74297,54705],{"class":92},[82,74299,54375],{"class":53863},[82,74301,53870],{"class":92},[82,74303,74304],{"class":84,"line":157},[82,74305,74079],{"class":92},[82,74307,74308],{"class":84,"line":404},[82,74309,74084],{"class":92},[82,74311,74312],{"class":84,"line":413},[82,74313,74089],{"class":92},[82,74315,74316],{"class":84,"line":508},[82,74317,74094],{"class":92},[82,74319,74320],{"class":84,"line":513},[82,74321,4787],{"class":92},[82,74323,74324],{"class":84,"line":1388},[82,74325,74326],{"class":92},"    \u002F\u002F 1.存储复杂数据类型\n",[82,74328,74329],{"class":84,"line":1394},[82,74330,74331],{"class":92},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[82,74333,74334],{"class":84,"line":1399},[82,74335,74336],{"class":92},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[82,74338,74339],{"class":84,"line":1430},[82,74340,74341],{"class":92},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[82,74343,74344],{"class":84,"line":1818},[82,74345,74346],{"class":92},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[82,74348,74349],{"class":84,"line":2082},[82,74350,74351],{"class":92},"    \u002F\u002F 取\n",[82,74353,74354],{"class":84,"line":2233},[82,74355,74356],{"class":92},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[82,74358,74359],{"class":84,"line":2255},[82,74360,74361],{"class":92},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[82,74363,74364,74366,74368],{"class":84,"line":2260},[82,74365,54977],{"class":92},[82,74367,54375],{"class":53863},[82,74369,53870],{"class":92},[19,74371,74372],{},[4078,74373],{"alt":78,"src":74374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[65,74376,74378],{"id":74377},"_356-数组map方法","3.5.6 数组map方法",[19,74380,74381],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74383,74384],{},[4078,74385],{"alt":78,"src":74386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74388,74389],{},[4078,74390],{"alt":78,"src":74391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74393,74394,74397],{},[2913,74395,74396],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74399,74400],{},"map有返回值，但是forEach没有返回值",[19,74402,74403],{},"map是个方法。用的时候要加 ()",[19,74405,74406],{},"map返回的是一个数组",[65,74408,74410],{"id":74409},"_357-数组中join方法","3.5.7 数组中join方法",[19,74412,74413],{},[4078,74414],{"alt":78,"src":74415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74417,74418],{},"类似于python中拼接字符串一样！",[26,74420,74421,74424,74427],{},[29,74422,74423],{},"小括号为空则逗号分开",[29,74425,74426],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,74428,74429],{},"小括号用啥符号就用进行分割",[65,74431,74433],{"id":74432},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,74435,74436,74439,74442,74445,74448],{},[29,74437,74438],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,74440,74441],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,74443,74444],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,74446,74447],{},"return可以实现函数的结束",[29,74449,74450],{},"禁止跳转是 preventDefault() 不要忘记",[73,74452,74454],{"className":53196,"code":74453,"language":53198,"meta":78,"style":78},"\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",[32,74455,74456,74466,74480,74484,74492,74506,74526,74538,74546,74552,74562,74572,74576,74580,74586,74596,74608,74612,74616,74623,74635,74649,74659,74663,74667,74674,74681,74688,74700,74712,74722,74734,74738,74742,74749,74756,74768,74780,74790,74802,74832,74836,74840,74847,74859,74871,74895,74905,74915,74919,74923,74931,74942,74954,74966,74978,74995,75007,75019,75023,75027,75034,75046,75058,75070,75081,75099,75112,75124,75148,75159,75163,75167,75175,75185,75189,75193,75199,75211,75222,75232,75236,75240,75246,75268,75272,75276,75282,75288,75300,75310,75322,75352,75365,75382,75386,75390,75401,75423,75433,75437,75441,75454,75464,75476,75488,75500,75512,75522,75532,75542,75553,75566,75570,75578,75586,75590,75598,75611,75631,75663,75695,75728,75754,75772,75790,75798,75824,75842,75860,75878,75896,75914,75922,75930,75948,75956,75985,75993,76001,76009,76022,76034,76046,76058,76070,76082,76095,76107,76115,76123,76131,76136,76141,76145,76149,76153,76157,76161,76165,76170,76175,76180,76185,76193,76201,76209,76214,76219,76224,76229,76234,76239,76244,76249,76254,76259,76264,76269,76274,76279,76283,76288,76293,76303,76312,76316,76321,76330,76346,76388,76428,76467,76532,76540,76544,76549,76567,76575,76580,76585,76615,76621,76626,76639,76651,76663,76675,76687,76699,76711,76715,76725,76729,76734,76739,76743,76752,76756,76761,76766,76785,76790,76810,76814,76819,76823,76828,76846,76864,76882,76901,76920,76939,76944,76950,76971,76977,76986,76992,76998,77004,77031,77044,77049,77059,77065,77071,77077,77083,77088,77094,77100,77106,77112,77145,77150,77155,77160,77165,77171,77177,77183,77194,77199,77205,77212,77226,77232,77256,77261,77266,77272,77278,77299,77305,77318,77324,77330,77336,77342,77347,77353,77359,77365,77383,77397,77403,77411,77417,77439,77444,77449,77454,77459,77464,77473,77482,77487],{"__ignoreMap":78},[82,74457,74458,74460,74462,74464],{"class":84,"line":85},[82,74459,53860],{"class":92},[82,74461,53864],{"class":53863},[82,74463,53867],{"class":2384},[82,74465,53870],{"class":92},[82,74467,74468,74470,74472,74474,74476,74478],{"class":84,"line":157},[82,74469,3659],{"class":92},[82,74471,53198],{"class":53863},[82,74473,53879],{"class":2384},[82,74475,113],{"class":92},[82,74477,53884],{"class":96},[82,74479,53870],{"class":92},[82,74481,74482],{"class":84,"line":404},[82,74483,486],{"emptyLinePlaceholder":485},[82,74485,74486,74488,74490],{"class":84,"line":413},[82,74487,3659],{"class":92},[82,74489,53897],{"class":53863},[82,74491,53870],{"class":92},[82,74493,74494,74496,74498,74500,74502,74504],{"class":84,"line":508},[82,74495,54705],{"class":92},[82,74497,53907],{"class":53863},[82,74499,53910],{"class":2384},[82,74501,113],{"class":92},[82,74503,53915],{"class":96},[82,74505,53870],{"class":92},[82,74507,74508,74510,74512,74514,74516,74518,74520,74522,74524],{"class":84,"line":513},[82,74509,54705],{"class":92},[82,74511,53907],{"class":53863},[82,74513,17506],{"class":2384},[82,74515,113],{"class":92},[82,74517,53954],{"class":96},[82,74519,53934],{"class":2384},[82,74521,113],{"class":92},[82,74523,53961],{"class":96},[82,74525,53870],{"class":92},[82,74527,74528,74530,74532,74534,74536],{"class":84,"line":1388},[82,74529,54705],{"class":92},[82,74531,53970],{"class":53863},[82,74533,53973],{"class":92},[82,74535,53970],{"class":53863},[82,74537,53870],{"class":92},[82,74539,74540,74542,74544],{"class":84,"line":1394},[82,74541,54705],{"class":92},[82,74543,2671],{"class":53863},[82,74545,53870],{"class":92},[82,74547,74548,74550],{"class":84,"line":1399},[82,74549,8995],{"class":53863},[82,74551,1349],{"class":92},[82,74553,74554,74556,74558,74560],{"class":84,"line":1430},[82,74555,57255],{"class":88},[82,74557,1357],{"class":92},[82,74559,2244],{"class":88},[82,74561,3909],{"class":92},[82,74563,74564,74566,74568,74570],{"class":84,"line":1818},[82,74565,57266],{"class":88},[82,74567,1357],{"class":92},[82,74569,2244],{"class":88},[82,74571,3909],{"class":92},[82,74573,74574],{"class":84,"line":2082},[82,74575,4787],{"class":92},[82,74577,74578],{"class":84,"line":2233},[82,74579,486],{"emptyLinePlaceholder":485},[82,74581,74582,74584],{"class":84,"line":2255},[82,74583,59837],{"class":53863},[82,74585,1349],{"class":92},[82,74587,74588,74590,74592,74594],{"class":84,"line":2260},[82,74589,59844],{"class":88},[82,74591,1357],{"class":92},[82,74593,54154],{"class":88},[82,74595,3909],{"class":92},[82,74597,74598,74600,74602,74604,74606],{"class":84,"line":2298},[82,74599,64635],{"class":88},[82,74601,1357],{"class":92},[82,74603,3451],{"class":88},[82,74605,54054],{"class":112},[82,74607,3909],{"class":92},[82,74609,74610],{"class":84,"line":2303},[82,74611,4787],{"class":92},[82,74613,74614],{"class":84,"line":2321},[82,74615,486],{"emptyLinePlaceholder":485},[82,74617,74618,74621],{"class":84,"line":2533},[82,74619,74620],{"class":2384},"    .info",[82,74622,1349],{"class":92},[82,74624,74625,74627,74629,74631,74633],{"class":84,"line":2538},[82,74626,57331],{"class":88},[82,74628,1357],{"class":92},[82,74630,54051],{"class":88},[82,74632,54054],{"class":112},[82,74634,3909],{"class":92},[82,74636,74637,74639,74641,74643,74645,74647],{"class":84,"line":2548},[82,74638,57266],{"class":88},[82,74640,1357],{"class":92},[82,74642,440],{"class":88},[82,74644,54054],{"class":112},[82,74646,54118],{"class":88},[82,74648,3909],{"class":92},[82,74650,74651,74653,74655,74657],{"class":84,"line":2579},[82,74652,59844],{"class":88},[82,74654,1357],{"class":92},[82,74656,54154],{"class":88},[82,74658,3909],{"class":92},[82,74660,74661],{"class":84,"line":2585},[82,74662,4787],{"class":92},[82,74664,74665],{"class":84,"line":4350},[82,74666,486],{"emptyLinePlaceholder":485},[82,74668,74669,74672],{"class":84,"line":4355},[82,74670,74671],{"class":2384},"    .uname",[82,74673,1363],{"class":92},[82,74675,74676,74679],{"class":84,"line":4360},[82,74677,74678],{"class":2384},"    .age",[82,74680,1363],{"class":92},[82,74682,74683,74686],{"class":84,"line":4365},[82,74684,74685],{"class":2384},"    .salary",[82,74687,1349],{"class":92},[82,74689,74690,74692,74694,74696,74698],{"class":84,"line":4379},[82,74691,57331],{"class":88},[82,74693,1357],{"class":92},[82,74695,3069],{"class":88},[82,74697,54054],{"class":112},[82,74699,3909],{"class":92},[82,74701,74702,74704,74706,74708,74710],{"class":84,"line":4384},[82,74703,57345],{"class":88},[82,74705,1357],{"class":92},[82,74707,3451],{"class":88},[82,74709,54054],{"class":112},[82,74711,3909],{"class":92},[82,74713,74714,74716,74718,74720],{"class":84,"line":5176},[82,74715,64338],{"class":88},[82,74717,1357],{"class":92},[82,74719,57297],{"class":88},[82,74721,3909],{"class":92},[82,74723,74724,74726,74728,74730,74732],{"class":84,"line":5190},[82,74725,64308],{"class":88},[82,74727,1357],{"class":92},[82,74729,3330],{"class":88},[82,74731,54054],{"class":112},[82,74733,3909],{"class":92},[82,74735,74736],{"class":84,"line":5198},[82,74737,4787],{"class":92},[82,74739,74740],{"class":84,"line":5203},[82,74741,486],{"emptyLinePlaceholder":485},[82,74743,74744,74747],{"class":84,"line":5209},[82,74745,74746],{"class":2384},"    .gender",[82,74748,1363],{"class":92},[82,74750,74751,74754],{"class":84,"line":5215},[82,74752,74753],{"class":2384},"    .city",[82,74755,1349],{"class":92},[82,74757,74758,74760,74762,74764,74766],{"class":84,"line":5220},[82,74759,57331],{"class":88},[82,74761,1357],{"class":92},[82,74763,3069],{"class":88},[82,74765,54054],{"class":112},[82,74767,3909],{"class":92},[82,74769,74770,74772,74774,74776,74778],{"class":84,"line":10539},[82,74771,57345],{"class":88},[82,74773,1357],{"class":92},[82,74775,3574],{"class":88},[82,74777,54054],{"class":112},[82,74779,3909],{"class":92},[82,74781,74782,74784,74786,74788],{"class":84,"line":10563},[82,74783,64338],{"class":88},[82,74785,1357],{"class":92},[82,74787,57297],{"class":88},[82,74789,3909],{"class":92},[82,74791,74792,74794,74796,74798,74800],{"class":84,"line":10568},[82,74793,64308],{"class":88},[82,74795,1357],{"class":92},[82,74797,3330],{"class":88},[82,74799,54054],{"class":112},[82,74801,3909],{"class":92},[82,74803,74804,74806,74808,74810,74812,74814,74817,74819,74821,74823,74826,74828,74830],{"class":84,"line":10574},[82,74805,64535],{"class":88},[82,74807,1357],{"class":92},[82,74809,2283],{"class":88},[82,74811,54054],{"class":112},[82,74813,54083],{"class":88},[82,74815,74816],{"class":88}," rgb",[82,74818,93],{"class":92},[82,74820,4325],{"class":88},[82,74822,100],{"class":92},[82,74824,74825],{"class":88},"197",[82,74827,100],{"class":92},[82,74829,74825],{"class":88},[82,74831,5318],{"class":92},[82,74833,74834],{"class":84,"line":10601},[82,74835,4787],{"class":92},[82,74837,74838],{"class":84,"line":10606},[82,74839,486],{"emptyLinePlaceholder":485},[82,74841,74842,74845],{"class":84,"line":10612},[82,74843,74844],{"class":53863},"    button",[82,74846,1349],{"class":92},[82,74848,74849,74851,74853,74855,74857],{"class":84,"line":10624},[82,74850,57345],{"class":88},[82,74852,1357],{"class":92},[82,74854,3574],{"class":88},[82,74856,54054],{"class":112},[82,74858,3909],{"class":92},[82,74860,74861,74863,74865,74867,74869],{"class":84,"line":10636},[82,74862,57331],{"class":88},[82,74864,1357],{"class":92},[82,74866,3240],{"class":88},[82,74868,54054],{"class":112},[82,74870,3909],{"class":92},[82,74872,74873,74875,74877,74880,74882,74884,74886,74889,74891,74893],{"class":84,"line":10648},[82,74874,57444],{"class":88},[82,74876,1357],{"class":92},[82,74878,74879],{"class":88},"rgb",[82,74881,93],{"class":92},[82,74883,3718],{"class":88},[82,74885,100],{"class":92},[82,74887,74888],{"class":88},"187",[82,74890,100],{"class":92},[82,74892,3057],{"class":88},[82,74894,5318],{"class":92},[82,74896,74897,74899,74901,74903],{"class":84,"line":12307},[82,74898,59974],{"class":88},[82,74900,1357],{"class":92},[82,74902,63400],{"class":88},[82,74904,3909],{"class":92},[82,74906,74907,74909,74911,74913],{"class":84,"line":12332},[82,74908,64535],{"class":88},[82,74910,1357],{"class":92},[82,74912,2244],{"class":88},[82,74914,3909],{"class":92},[82,74916,74917],{"class":84,"line":12355},[82,74918,4787],{"class":92},[82,74920,74921],{"class":84,"line":12379},[82,74922,486],{"emptyLinePlaceholder":485},[82,74924,74925,74927,74929],{"class":84,"line":12384},[82,74926,74844],{"class":53863},[82,74928,54250],{"class":53863},[82,74930,1349],{"class":92},[82,74932,74933,74935,74937,74940],{"class":84,"line":12389},[82,74934,57569],{"class":88},[82,74936,1357],{"class":92},[82,74938,74939],{"class":88},"inline-block",[82,74941,3909],{"class":92},[82,74943,74944,74946,74948,74950,74952],{"class":84,"line":12394},[82,74945,57331],{"class":88},[82,74947,1357],{"class":92},[82,74949,440],{"class":88},[82,74951,54054],{"class":112},[82,74953,3909],{"class":92},[82,74955,74956,74958,74960,74962,74964],{"class":84,"line":12403},[82,74957,57345],{"class":88},[82,74959,1357],{"class":92},[82,74961,440],{"class":88},[82,74963,54054],{"class":112},[82,74965,3909],{"class":92},[82,74967,74968,74970,74972,74974,74976],{"class":84,"line":12408},[82,74969,59917],{"class":88},[82,74971,1357],{"class":92},[82,74973,3229],{"class":88},[82,74975,54054],{"class":112},[82,74977,3909],{"class":92},[82,74979,74980,74982,74984,74986,74988,74990,74993],{"class":84,"line":12414},[82,74981,64535],{"class":88},[82,74983,1357],{"class":92},[82,74985,2283],{"class":88},[82,74987,54054],{"class":112},[82,74989,54083],{"class":88},[82,74991,74992],{"class":88}," #fff",[82,74994,3909],{"class":92},[82,74996,74997,74999,75001,75003,75005],{"class":84,"line":12435},[82,74998,57694],{"class":88},[82,75000,1357],{"class":92},[82,75002,3077],{"class":88},[82,75004,54054],{"class":112},[82,75006,3909],{"class":92},[82,75008,75009,75011,75013,75015,75017],{"class":84,"line":12441},[82,75010,64308],{"class":88},[82,75012,1357],{"class":92},[82,75014,2283],{"class":88},[82,75016,54054],{"class":112},[82,75018,3909],{"class":92},[82,75020,75021],{"class":84,"line":12455},[82,75022,4787],{"class":92},[82,75024,75025],{"class":84,"line":12461},[82,75026,486],{"emptyLinePlaceholder":485},[82,75028,75029,75032],{"class":84,"line":12488},[82,75030,75031],{"class":2384},"    .total",[82,75033,1349],{"class":92},[82,75035,75036,75038,75040,75042,75044],{"class":84,"line":12497},[82,75037,57331],{"class":88},[82,75039,1357],{"class":92},[82,75041,64187],{"class":88},[82,75043,54054],{"class":112},[82,75045,3909],{"class":92},[82,75047,75048,75050,75052,75054,75056],{"class":84,"line":12503},[82,75049,57345],{"class":88},[82,75051,1357],{"class":92},[82,75053,3159],{"class":88},[82,75055,54054],{"class":112},[82,75057,3909],{"class":92},[82,75059,75060,75062,75064,75066,75068],{"class":84,"line":12511},[82,75061,59917],{"class":88},[82,75063,1357],{"class":92},[82,75065,3159],{"class":88},[82,75067,54054],{"class":112},[82,75069,3909],{"class":92},[82,75071,75072,75074,75076,75079],{"class":84,"line":12516},[82,75073,59844],{"class":88},[82,75075,1357],{"class":92},[82,75077,75078],{"class":88},"right",[82,75080,3909],{"class":92},[82,75082,75083,75085,75087,75089,75091,75093,75095,75097],{"class":84,"line":19189},[82,75084,57266],{"class":88},[82,75086,1357],{"class":92},[82,75088,3159],{"class":88},[82,75090,54054],{"class":112},[82,75092,54118],{"class":88},[82,75094,4638],{"class":88},[82,75096,54054],{"class":112},[82,75098,3909],{"class":92},[82,75100,75101,75104,75106,75108,75110],{"class":84,"line":19195},[82,75102,75103],{"class":88},"      padding-right",[82,75105,1357],{"class":92},[82,75107,440],{"class":88},[82,75109,54054],{"class":112},[82,75111,3909],{"class":92},[82,75113,75114,75116,75118,75120,75122],{"class":84,"line":19218},[82,75115,57482],{"class":88},[82,75117,1357],{"class":92},[82,75119,3279],{"class":88},[82,75121,54054],{"class":112},[82,75123,3909],{"class":92},[82,75125,75126,75128,75130,75132,75134,75137,75139,75142,75144,75146],{"class":84,"line":19224},[82,75127,57444],{"class":88},[82,75129,1357],{"class":92},[82,75131,74879],{"class":88},[82,75133,93],{"class":92},[82,75135,75136],{"class":88},"237",[82,75138,100],{"class":92},[82,75140,75141],{"class":88},"235",[82,75143,100],{"class":92},[82,75145,75141],{"class":88},[82,75147,5318],{"class":92},[82,75149,75150,75153,75155,75157],{"class":84,"line":19247},[82,75151,75152],{"class":88},"      box-sizing",[82,75154,1357],{"class":92},[82,75156,63063],{"class":88},[82,75158,3909],{"class":92},[82,75160,75161],{"class":84,"line":19261},[82,75162,4787],{"class":92},[82,75164,75165],{"class":84,"line":19281},[82,75166,486],{"emptyLinePlaceholder":485},[82,75168,75169,75171,75173],{"class":84,"line":19287},[82,75170,75031],{"class":2384},[82,75172,54250],{"class":53863},[82,75174,1349],{"class":92},[82,75176,75177,75179,75181,75183],{"class":84,"line":19298},[82,75178,59974],{"class":88},[82,75180,1357],{"class":92},[82,75182,59979],{"class":88},[82,75184,3909],{"class":92},[82,75186,75187],{"class":84,"line":19321},[82,75188,4787],{"class":92},[82,75190,75191],{"class":84,"line":19343},[82,75192,486],{"emptyLinePlaceholder":485},[82,75194,75195,75197],{"class":84,"line":19348},[82,75196,67580],{"class":53863},[82,75198,1349],{"class":92},[82,75200,75201,75203,75205,75207,75209],{"class":84,"line":19354},[82,75202,57331],{"class":88},[82,75204,1357],{"class":92},[82,75206,64187],{"class":88},[82,75208,54054],{"class":112},[82,75210,3909],{"class":92},[82,75212,75213,75215,75217,75220],{"class":84,"line":19368},[82,75214,57266],{"class":88},[82,75216,1357],{"class":92},[82,75218,75219],{"class":88},"auto",[82,75221,3909],{"class":92},[82,75223,75224,75226,75228,75230],{"class":84,"line":19381},[82,75225,67587],{"class":88},[82,75227,1357],{"class":92},[82,75229,67592],{"class":88},[82,75231,3909],{"class":92},[82,75233,75234],{"class":84,"line":19386},[82,75235,4787],{"class":92},[82,75237,75238],{"class":84,"line":19400},[82,75239,486],{"emptyLinePlaceholder":485},[82,75241,75242,75244],{"class":84,"line":19405},[82,75243,67672],{"class":53863},[82,75245,1349],{"class":92},[82,75247,75248,75250,75252,75254,75256,75258,75260,75262,75264,75266],{"class":84,"line":19411},[82,75249,57444],{"class":88},[82,75251,1357],{"class":92},[82,75253,74879],{"class":88},[82,75255,93],{"class":92},[82,75257,75136],{"class":88},[82,75259,100],{"class":92},[82,75261,75141],{"class":88},[82,75263,100],{"class":92},[82,75265,75141],{"class":88},[82,75267,5318],{"class":92},[82,75269,75270],{"class":84,"line":19416},[82,75271,4787],{"class":92},[82,75273,75274],{"class":84,"line":19430},[82,75275,486],{"emptyLinePlaceholder":485},[82,75277,75278,75280],{"class":84,"line":19435},[82,75279,67672],{"class":53863},[82,75281,1363],{"class":92},[82,75283,75284,75286],{"class":84,"line":19440},[82,75285,67738],{"class":53863},[82,75287,1349],{"class":92},[82,75289,75290,75292,75294,75296,75298],{"class":84,"line":19454},[82,75291,57345],{"class":88},[82,75293,1357],{"class":92},[82,75295,3031],{"class":88},[82,75297,54054],{"class":112},[82,75299,3909],{"class":92},[82,75301,75302,75304,75306,75308],{"class":84,"line":19466},[82,75303,59844],{"class":88},[82,75305,1357],{"class":92},[82,75307,26320],{"class":88},[82,75309,3909],{"class":92},[82,75311,75312,75314,75316,75318,75320],{"class":84,"line":19471},[82,75313,57482],{"class":88},[82,75315,1357],{"class":92},[82,75317,3305],{"class":88},[82,75319,54054],{"class":112},[82,75321,3909],{"class":92},[82,75323,75324,75326,75328,75330,75332,75334,75336,75338,75341,75343,75346,75348,75350],{"class":84,"line":19484},[82,75325,64535],{"class":88},[82,75327,1357],{"class":92},[82,75329,2283],{"class":88},[82,75331,54054],{"class":112},[82,75333,54083],{"class":88},[82,75335,74816],{"class":88},[82,75337,93],{"class":92},[82,75339,75340],{"class":88},"228",[82,75342,100],{"class":92},[82,75344,75345],{"class":88},"225",[82,75347,100],{"class":92},[82,75349,75345],{"class":88},[82,75351,5318],{"class":92},[82,75353,75354,75357,75359,75361,75363],{"class":84,"line":19489},[82,75355,75356],{"class":88},"      padding-left",[82,75358,1357],{"class":92},[82,75360,3077],{"class":88},[82,75362,54054],{"class":112},[82,75364,3909],{"class":92},[82,75366,75367,75369,75371,75373,75376,75378,75380],{"class":84,"line":19494},[82,75368,64418],{"class":88},[82,75370,1357],{"class":92},[82,75372,30703],{"class":88},[82,75374,75375],{"class":88}," linear",[82,75377,64425],{"class":88},[82,75379,3446],{"class":112},[82,75381,3909],{"class":92},[82,75383,75384],{"class":84,"line":19499},[82,75385,4787],{"class":92},[82,75387,75388],{"class":84,"line":19512},[82,75389,486],{"emptyLinePlaceholder":485},[82,75391,75392,75395,75397,75399],{"class":84,"line":19517},[82,75393,75394],{"class":53863},"    tbody",[82,75396,72700],{"class":53863},[82,75398,63498],{"class":2384},[82,75400,1349],{"class":92},[82,75402,75403,75405,75407,75409,75411,75413,75415,75417,75419,75421],{"class":84,"line":35202},[82,75404,57444],{"class":88},[82,75406,1357],{"class":92},[82,75408,74879],{"class":88},[82,75410,93],{"class":92},[82,75412,75136],{"class":88},[82,75414,100],{"class":92},[82,75416,75141],{"class":88},[82,75418,100],{"class":92},[82,75420,75141],{"class":88},[82,75422,5318],{"class":92},[82,75424,75425,75427,75429,75431],{"class":84,"line":35208},[82,75426,64583],{"class":88},[82,75428,1357],{"class":92},[82,75430,64588],{"class":88},[82,75432,3909],{"class":92},[82,75434,75435],{"class":84,"line":35214},[82,75436,4787],{"class":92},[82,75438,75439],{"class":84,"line":35220},[82,75440,486],{"emptyLinePlaceholder":485},[82,75442,75443,75445,75447,75450,75452],{"class":84,"line":35226},[82,75444,75394],{"class":53863},[82,75446,72700],{"class":53863},[82,75448,75449],{"class":53863}," td",[82,75451,4014],{"class":53863},[82,75453,1349],{"class":92},[82,75455,75456,75458,75460,75462],{"class":84,"line":35237},[82,75457,57569],{"class":88},[82,75459,1357],{"class":92},[82,75461,63427],{"class":88},[82,75463,3909],{"class":92},[82,75465,75466,75468,75470,75472,75474],{"class":84,"line":35243},[82,75467,57331],{"class":88},[82,75469,1357],{"class":92},[82,75471,3656],{"class":88},[82,75473,54054],{"class":112},[82,75475,3909],{"class":92},[82,75477,75478,75480,75482,75484,75486],{"class":84,"line":35263},[82,75479,57345],{"class":88},[82,75481,1357],{"class":92},[82,75483,3574],{"class":88},[82,75485,54054],{"class":112},[82,75487,3909],{"class":92},[82,75489,75490,75492,75494,75496,75498],{"class":84,"line":35269},[82,75491,59917],{"class":88},[82,75493,1357],{"class":92},[82,75495,3574],{"class":88},[82,75497,54054],{"class":112},[82,75499,3909],{"class":92},[82,75501,75502,75504,75506,75508,75510],{"class":84,"line":35280},[82,75503,64635],{"class":88},[82,75505,1357],{"class":92},[82,75507,1425],{"class":88},[82,75509,54054],{"class":112},[82,75511,3909],{"class":92},[82,75513,75514,75516,75518,75520],{"class":84,"line":35286},[82,75515,59974],{"class":88},[82,75517,1357],{"class":92},[82,75519,63400],{"class":88},[82,75521,3909],{"class":92},[82,75523,75524,75526,75528,75530],{"class":84,"line":35292},[82,75525,59844],{"class":88},[82,75527,1357],{"class":92},[82,75529,54154],{"class":88},[82,75531,3909],{"class":92},[82,75533,75534,75536,75538,75540],{"class":84,"line":35298},[82,75535,66527],{"class":88},[82,75537,1357],{"class":92},[82,75539,57297],{"class":88},[82,75541,3909],{"class":92},[82,75543,75544,75546,75548,75551],{"class":84,"line":35304},[82,75545,57444],{"class":88},[82,75547,1357],{"class":92},[82,75549,75550],{"class":88},"orange",[82,75552,3909],{"class":92},[82,75554,75555,75557,75559,75562,75564],{"class":84,"line":35310},[82,75556,57694],{"class":88},[82,75558,1357],{"class":92},[82,75560,75561],{"class":88},"12.5",[82,75563,54054],{"class":112},[82,75565,3909],{"class":92},[82,75567,75568],{"class":84,"line":35316},[82,75569,4787],{"class":92},[82,75571,75572,75574,75576],{"class":84,"line":35322},[82,75573,54977],{"class":92},[82,75575,2671],{"class":53863},[82,75577,53870],{"class":92},[82,75579,75580,75582,75584],{"class":84,"line":35342},[82,75581,54347],{"class":92},[82,75583,53897],{"class":53863},[82,75585,53870],{"class":92},[82,75587,75588],{"class":84,"line":35348},[82,75589,486],{"emptyLinePlaceholder":485},[82,75591,75592,75594,75596],{"class":84,"line":35364},[82,75593,3659],{"class":92},[82,75595,54362],{"class":53863},[82,75597,53870],{"class":92},[82,75599,75600,75602,75604,75607,75609],{"class":84,"line":35370},[82,75601,54705],{"class":92},[82,75603,14],{"class":53863},[82,75605,75606],{"class":92},">学生就业统计表\u003C\u002F",[82,75608,14],{"class":53863},[82,75610,53870],{"class":92},[82,75612,75613,75615,75617,75619,75621,75623,75625,75627,75629],{"class":84,"line":35384},[82,75614,54705],{"class":92},[82,75616,69182],{"class":53863},[82,75618,56046],{"class":2384},[82,75620,113],{"class":92},[82,75622,65222],{"class":96},[82,75624,71627],{"class":2384},[82,75626,113],{"class":92},[82,75628,34348],{"class":96},[82,75630,53870],{"class":92},[82,75632,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661],{"class":84,"line":35390},[82,75634,53904],{"class":92},[82,75636,56381],{"class":53863},[82,75638,56384],{"class":2384},[82,75640,113],{"class":92},[82,75642,65256],{"class":96},[82,75644,17506],{"class":2384},[82,75646,113],{"class":92},[82,75648,71653],{"class":96},[82,75650,63578],{"class":2384},[82,75652,113],{"class":92},[82,75654,1707],{"class":96},[82,75656,56046],{"class":2384},[82,75658,113],{"class":92},[82,75660,71653],{"class":96},[82,75662,53870],{"class":92},[82,75664,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693],{"class":84,"line":35405},[82,75666,53904],{"class":92},[82,75668,56381],{"class":53863},[82,75670,56384],{"class":2384},[82,75672,113],{"class":92},[82,75674,65256],{"class":96},[82,75676,17506],{"class":2384},[82,75678,113],{"class":92},[82,75680,1480],{"class":96},[82,75682,63578],{"class":2384},[82,75684,113],{"class":92},[82,75686,1712],{"class":96},[82,75688,56046],{"class":2384},[82,75690,113],{"class":92},[82,75692,1480],{"class":96},[82,75694,53870],{"class":92},[82,75696,75697,75699,75701,75703,75705,75707,75709,75711,75713,75715,75717,75720,75722,75724,75726],{"class":84,"line":35411},[82,75698,53904],{"class":92},[82,75700,56381],{"class":53863},[82,75702,56384],{"class":2384},[82,75704,113],{"class":92},[82,75706,65256],{"class":96},[82,75708,17506],{"class":2384},[82,75710,113],{"class":92},[82,75712,71782],{"class":96},[82,75714,63578],{"class":2384},[82,75716,113],{"class":92},[82,75718,75719],{"class":96},"\"薪资\"",[82,75721,56046],{"class":2384},[82,75723,113],{"class":92},[82,75725,71782],{"class":96},[82,75727,53870],{"class":92},[82,75729,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752],{"class":84,"line":35420},[82,75731,53904],{"class":92},[82,75733,71700],{"class":53863},[82,75735,17506],{"class":2384},[82,75737,113],{"class":92},[82,75739,71707],{"class":96},[82,75741,17545],{"class":2384},[82,75743,113],{"class":92},[82,75745,1793],{"class":96},[82,75747,56046],{"class":2384},[82,75749,113],{"class":92},[82,75751,71707],{"class":96},[82,75753,53870],{"class":92},[82,75755,75756,75758,75760,75762,75764,75766,75768,75770],{"class":84,"line":35426},[82,75757,57794],{"class":92},[82,75759,71722],{"class":53863},[82,75761,69208],{"class":2384},[82,75763,113],{"class":92},[82,75765,12552],{"class":96},[82,75767,71731],{"class":92},[82,75769,71722],{"class":53863},[82,75771,53870],{"class":92},[82,75773,75774,75776,75778,75780,75782,75784,75786,75788],{"class":84,"line":35435},[82,75775,57794],{"class":92},[82,75777,71722],{"class":53863},[82,75779,69208],{"class":2384},[82,75781,113],{"class":92},[82,75783,12621],{"class":96},[82,75785,71750],{"class":92},[82,75787,71722],{"class":53863},[82,75789,53870],{"class":92},[82,75791,75792,75794,75796],{"class":84,"line":35441},[82,75793,54338],{"class":92},[82,75795,71700],{"class":53863},[82,75797,53870],{"class":92},[82,75799,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822],{"class":84,"line":35447},[82,75801,53904],{"class":92},[82,75803,71700],{"class":53863},[82,75805,17506],{"class":2384},[82,75807,113],{"class":92},[82,75809,71804],{"class":96},[82,75811,17545],{"class":2384},[82,75813,113],{"class":92},[82,75815,1793],{"class":96},[82,75817,56046],{"class":2384},[82,75819,113],{"class":92},[82,75821,71804],{"class":96},[82,75823,53870],{"class":92},[82,75825,75826,75828,75830,75832,75834,75836,75838,75840],{"class":84,"line":35456},[82,75827,57794],{"class":92},[82,75829,71722],{"class":53863},[82,75831,69208],{"class":2384},[82,75833,113],{"class":92},[82,75835,71825],{"class":96},[82,75837,71828],{"class":92},[82,75839,71722],{"class":53863},[82,75841,53870],{"class":92},[82,75843,75844,75846,75848,75850,75852,75854,75856,75858],{"class":84,"line":35462},[82,75845,57794],{"class":92},[82,75847,71722],{"class":53863},[82,75849,69208],{"class":2384},[82,75851,113],{"class":92},[82,75853,71845],{"class":96},[82,75855,71848],{"class":92},[82,75857,71722],{"class":53863},[82,75859,53870],{"class":92},[82,75861,75862,75864,75866,75868,75870,75872,75874,75876],{"class":84,"line":35473},[82,75863,57794],{"class":92},[82,75865,71722],{"class":53863},[82,75867,69208],{"class":2384},[82,75869,113],{"class":92},[82,75871,71865],{"class":96},[82,75873,71868],{"class":92},[82,75875,71722],{"class":53863},[82,75877,53870],{"class":92},[82,75879,75880,75882,75884,75886,75888,75890,75892,75894],{"class":84,"line":35479},[82,75881,57794],{"class":92},[82,75883,71722],{"class":53863},[82,75885,69208],{"class":2384},[82,75887,113],{"class":92},[82,75889,71885],{"class":96},[82,75891,71888],{"class":92},[82,75893,71722],{"class":53863},[82,75895,53870],{"class":92},[82,75897,75898,75900,75902,75904,75906,75908,75910,75912],{"class":84,"line":35498},[82,75899,57794],{"class":92},[82,75901,71722],{"class":53863},[82,75903,69208],{"class":2384},[82,75905,113],{"class":92},[82,75907,71905],{"class":96},[82,75909,71908],{"class":92},[82,75911,71722],{"class":53863},[82,75913,53870],{"class":92},[82,75915,75916,75918,75920],{"class":84,"line":35504},[82,75917,54338],{"class":92},[82,75919,71700],{"class":53863},[82,75921,53870],{"class":92},[82,75923,75924,75926,75928],{"class":84,"line":35515},[82,75925,53904],{"class":92},[82,75927,56447],{"class":53863},[82,75929,53870],{"class":92},[82,75931,75932,75934,75936,75939,75941,75944,75946],{"class":84,"line":35521},[82,75933,57794],{"class":92},[82,75935,82],{"class":53863},[82,75937,75938],{"class":92},">+\u003C\u002F",[82,75940,82],{"class":53863},[82,75942,75943],{"class":92},">添加\u003C\u002F",[82,75945,56447],{"class":53863},[82,75947,53870],{"class":92},[82,75949,75950,75952,75954],{"class":84,"line":35541},[82,75951,54977],{"class":92},[82,75953,69182],{"class":53863},[82,75955,53870],{"class":92},[82,75957,75958,75960,75962,75964,75966,75968,75971,75973,75976,75978,75981,75983],{"class":84,"line":35557},[82,75959,54705],{"class":92},[82,75961,54173],{"class":53863},[82,75963,56046],{"class":2384},[82,75965,113],{"class":92},[82,75967,65138],{"class":96},[82,75969,75970],{"class":92},">共有数据 \u003C",[82,75972,82],{"class":53863},[82,75974,75975],{"class":92},">0\u003C\u002F",[82,75977,82],{"class":53863},[82,75979,75980],{"class":92},"> 条\u003C\u002F",[82,75982,54173],{"class":53863},[82,75984,53870],{"class":92},[82,75986,75987,75989,75991],{"class":84,"line":35563},[82,75988,54705],{"class":92},[82,75990,278],{"class":53863},[82,75992,53870],{"class":92},[82,75994,75995,75997,75999],{"class":84,"line":35577},[82,75996,53904],{"class":92},[82,75998,281],{"class":53863},[82,76000,53870],{"class":92},[82,76002,76003,76005,76007],{"class":84,"line":35583},[82,76004,57794],{"class":92},[82,76006,284],{"class":53863},[82,76008,53870],{"class":92},[82,76010,76011,76013,76015,76018,76020],{"class":84,"line":35589},[82,76012,57862],{"class":92},[82,76014,287],{"class":53863},[82,76016,76017],{"class":92},">ID\u003C\u002F",[82,76019,287],{"class":53863},[82,76021,53870],{"class":92},[82,76023,76024,76026,76028,76030,76032],{"class":84,"line":35600},[82,76025,57862],{"class":92},[82,76027,287],{"class":53863},[82,76029,72011],{"class":92},[82,76031,287],{"class":53863},[82,76033,53870],{"class":92},[82,76035,76036,76038,76040,76042,76044],{"class":84,"line":35606},[82,76037,57862],{"class":92},[82,76039,287],{"class":53863},[82,76041,72024],{"class":92},[82,76043,287],{"class":53863},[82,76045,53870],{"class":92},[82,76047,76048,76050,76052,76054,76056],{"class":84,"line":35612},[82,76049,57862],{"class":92},[82,76051,287],{"class":53863},[82,76053,72037],{"class":92},[82,76055,287],{"class":53863},[82,76057,53870],{"class":92},[82,76059,76060,76062,76064,76066,76068],{"class":84,"line":35622},[82,76061,57862],{"class":92},[82,76063,287],{"class":53863},[82,76065,72050],{"class":92},[82,76067,287],{"class":53863},[82,76069,53870],{"class":92},[82,76071,76072,76074,76076,76078,76080],{"class":84,"line":35628},[82,76073,57862],{"class":92},[82,76075,287],{"class":53863},[82,76077,72063],{"class":92},[82,76079,287],{"class":53863},[82,76081,53870],{"class":92},[82,76083,76084,76086,76088,76091,76093],{"class":84,"line":35639},[82,76085,57862],{"class":92},[82,76087,287],{"class":53863},[82,76089,76090],{"class":92},">录入时间\u003C\u002F",[82,76092,287],{"class":53863},[82,76094,53870],{"class":92},[82,76096,76097,76099,76101,76103,76105],{"class":84,"line":35645},[82,76098,57862],{"class":92},[82,76100,287],{"class":53863},[82,76102,72076],{"class":92},[82,76104,287],{"class":53863},[82,76106,53870],{"class":92},[82,76108,76109,76111,76113],{"class":84,"line":35655},[82,76110,57967],{"class":92},[82,76112,284],{"class":53863},[82,76114,53870],{"class":92},[82,76116,76117,76119,76121],{"class":84,"line":35660},[82,76118,54338],{"class":92},[82,76120,281],{"class":53863},[82,76122,53870],{"class":92},[82,76124,76125,76127,76129],{"class":84,"line":35666},[82,76126,53904],{"class":92},[82,76128,294],{"class":53863},[82,76130,53870],{"class":92},[82,76132,76133],{"class":84,"line":35715},[82,76134,76135],{"class":2828},"      \u003C!-- \u003Ctr>\n",[82,76137,76138],{"class":84,"line":35762},[82,76139,76140],{"class":2828},"        \u003Ctd>1\u003C\u002Ftd>\n",[82,76142,76143],{"class":84,"line":35767},[82,76144,76140],{"class":2828},[82,76146,76147],{"class":84,"line":35773},[82,76148,76140],{"class":2828},[82,76150,76151],{"class":84,"line":35792},[82,76152,76140],{"class":2828},[82,76154,76155],{"class":84,"line":35798},[82,76156,76140],{"class":2828},[82,76158,76159],{"class":84,"line":35817},[82,76160,76140],{"class":2828},[82,76162,76163],{"class":84,"line":35823},[82,76164,76140],{"class":2828},[82,76166,76167],{"class":84,"line":35829},[82,76168,76169],{"class":2828},"        \u003Ctd>\n",[82,76171,76172],{"class":84,"line":35839},[82,76173,76174],{"class":2828},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[82,76176,76177],{"class":84,"line":35844},[82,76178,76179],{"class":2828},"        \u003C\u002Ftd>\n",[82,76181,76182],{"class":84,"line":35850},[82,76183,76184],{"class":2828},"      \u003C\u002Ftr> -->\n",[82,76186,76187,76189,76191],{"class":84,"line":35866},[82,76188,54338],{"class":92},[82,76190,294],{"class":53863},[82,76192,53870],{"class":92},[82,76194,76195,76197,76199],{"class":84,"line":35911},[82,76196,54977],{"class":92},[82,76198,278],{"class":53863},[82,76200,53870],{"class":92},[82,76202,76203,76205,76207],{"class":84,"line":35917},[82,76204,54705],{"class":92},[82,76206,54375],{"class":53863},[82,76208,53870],{"class":92},[82,76210,76211],{"class":84,"line":35923},[82,76212,76213],{"class":2828},"    \u002F\u002F const initData = [{\n",[82,76215,76216],{"class":84,"line":35929},[82,76217,76218],{"class":2828},"    \u002F\u002F   unameId: 1,\n",[82,76220,76221],{"class":84,"line":35940},[82,76222,76223],{"class":2828},"    \u002F\u002F   uname: '华晨宇',\n",[82,76225,76226],{"class":84,"line":35946},[82,76227,76228],{"class":2828},"    \u002F\u002F   age: 22,\n",[82,76230,76231],{"class":84,"line":35952},[82,76232,76233],{"class":2828},"    \u002F\u002F   salary: 12000,\n",[82,76235,76236],{"class":84,"line":35958},[82,76237,76238],{"class":2828},"    \u002F\u002F   gender: '男',\n",[82,76240,76241],{"class":84,"line":35976},[82,76242,76243],{"class":2828},"    \u002F\u002F   city: '北京',\n",[82,76245,76246],{"class":84,"line":35990},[82,76247,76248],{"class":2828},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[82,76250,76251],{"class":84,"line":35999},[82,76252,76253],{"class":2828},"    \u002F\u002F }]\n",[82,76255,76256],{"class":84,"line":36008},[82,76257,76258],{"class":2828},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[82,76260,76261],{"class":84,"line":36017},[82,76262,76263],{"class":2828},"    \u002F\u002F 1.渲染业务\n",[82,76265,76266],{"class":84,"line":36026},[82,76267,76268],{"class":2828},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[82,76270,76271],{"class":84,"line":36032},[82,76272,76273],{"class":2828},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[82,76275,76276],{"class":84,"line":36038},[82,76277,76278],{"class":2828},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[82,76280,76281],{"class":84,"line":36046},[82,76282,486],{"emptyLinePlaceholder":485},[82,76284,76285],{"class":84,"line":36051},[82,76286,76287],{"class":2828},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[82,76289,76290],{"class":84,"line":36057},[82,76291,76292],{"class":2828},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[82,76294,76295,76297,76299,76301],{"class":84,"line":36068},[82,76296,13811],{"class":112},[82,76298,60253],{"class":88},[82,76300,259],{"class":112},[82,76302,2408],{"class":92},[82,76304,76305,76308,76310],{"class":84,"line":36074},[82,76306,76307],{"class":92},"    console.",[82,76309,60805],{"class":2384},[82,76311,54972],{"class":92},[82,76313,76314],{"class":84,"line":36094},[82,76315,486],{"emptyLinePlaceholder":485},[82,76317,76318],{"class":84,"line":36100},[82,76319,76320],{"class":2828},"    \u002F\u002F 时间函数\n",[82,76322,76323,76325,76328],{"class":84,"line":36106},[82,76324,72640],{"class":112},[82,76326,76327],{"class":2384}," getTime",[82,76329,13443],{"class":92},[82,76331,76332,76334,76337,76339,76341,76344],{"class":84,"line":36112},[82,76333,60786],{"class":112},[82,76335,76336],{"class":88}," date",[82,76338,259],{"class":112},[82,76340,14168],{"class":112},[82,76342,76343],{"class":2384}," Date",[82,76345,4576],{"class":92},[82,76347,76348,76350,76352,76354,76357,76360,76362,76364,76366,76369,76372,76374,76376,76378,76380,76382,76384,76386],{"class":84,"line":36129},[82,76349,60786],{"class":112},[82,76351,18676],{"class":88},[82,76353,259],{"class":112},[82,76355,76356],{"class":92}," date.",[82,76358,76359],{"class":2384},"getHours",[82,76361,15639],{"class":92},[82,76363,3659],{"class":112},[82,76365,4638],{"class":88},[82,76367,76368],{"class":112}," ?",[82,76370,76371],{"class":96}," '0'",[82,76373,48130],{"class":112},[82,76375,76356],{"class":92},[82,76377,76359],{"class":2384},[82,76379,15639],{"class":92},[82,76381,3608],{"class":112},[82,76383,76356],{"class":92},[82,76385,76359],{"class":2384},[82,76387,4576],{"class":92},[82,76389,76390,76392,76395,76397,76399,76402,76404,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426],{"class":84,"line":36135},[82,76391,60786],{"class":112},[82,76393,76394],{"class":88}," m",[82,76396,259],{"class":112},[82,76398,76356],{"class":92},[82,76400,76401],{"class":2384},"getMinutes",[82,76403,15639],{"class":92},[82,76405,3659],{"class":112},[82,76407,4638],{"class":88},[82,76409,76368],{"class":112},[82,76411,76371],{"class":96},[82,76413,48130],{"class":112},[82,76415,76356],{"class":92},[82,76417,76401],{"class":2384},[82,76419,15639],{"class":92},[82,76421,3608],{"class":112},[82,76423,76356],{"class":92},[82,76425,76401],{"class":2384},[82,76427,4576],{"class":92},[82,76429,76430,76432,76434,76436,76438,76441,76443,76445,76447,76449,76451,76453,76455,76457,76459,76461,76463,76465],{"class":84,"line":36141},[82,76431,60786],{"class":112},[82,76433,11019],{"class":88},[82,76435,259],{"class":112},[82,76437,76356],{"class":92},[82,76439,76440],{"class":2384},"getSeconds",[82,76442,15639],{"class":92},[82,76444,3659],{"class":112},[82,76446,4638],{"class":88},[82,76448,76368],{"class":112},[82,76450,76371],{"class":96},[82,76452,48130],{"class":112},[82,76454,76356],{"class":92},[82,76456,76440],{"class":2384},[82,76458,15639],{"class":92},[82,76460,3608],{"class":112},[82,76462,76356],{"class":92},[82,76464,76440],{"class":2384},[82,76466,4576],{"class":92},[82,76468,76469,76471,76474,76476,76478,76481,76483,76486,76488,76491,76493,76495,76498,76500,76502,76504,76506,76508,76510,76513,76515,76518,76520,76523,76525,76527,76529],{"class":84,"line":36147},[82,76470,60786],{"class":112},[82,76472,76473],{"class":88}," str",[82,76475,259],{"class":112},[82,76477,65460],{"class":96},[82,76479,76480],{"class":92},"date",[82,76482,233],{"class":96},[82,76484,76485],{"class":2384},"getFullYear",[82,76487,5026],{"class":96},[82,76489,76490],{"class":96},"}\u002F${",[82,76492,76480],{"class":92},[82,76494,233],{"class":96},[82,76496,76497],{"class":2384},"getMonth",[82,76499,15639],{"class":96},[82,76501,2249],{"class":112},[82,76503,27703],{"class":88},[82,76505,76490],{"class":96},[82,76507,76480],{"class":92},[82,76509,233],{"class":96},[82,76511,76512],{"class":2384},"getDate",[82,76514,5026],{"class":96},[82,76516,76517],{"class":96},"} ${",[82,76519,3173],{"class":92},[82,76521,76522],{"class":96},"}:${",[82,76524,3300],{"class":92},[82,76526,76522],{"class":96},[82,76528,3446],{"class":92},[82,76530,76531],{"class":96},"}`\n",[82,76533,76534,76537],{"class":84,"line":36153},[82,76535,76536],{"class":112},"      return",[82,76538,76539],{"class":92}," str\n",[82,76541,76542],{"class":84,"line":36159},[82,76543,4787],{"class":92},[82,76545,76546],{"class":84,"line":36186},[82,76547,76548],{"class":2828},"    \u002F\u002F 渲染函数\n",[82,76550,76551,76553,76555,76557,76559,76561,76563,76565],{"class":84,"line":36210},[82,76552,13811],{"class":112},[82,76554,72303],{"class":88},[82,76556,259],{"class":112},[82,76558,56956],{"class":92},[82,76560,56959],{"class":2384},[82,76562,93],{"class":92},[82,76564,72314],{"class":96},[82,76566,119],{"class":92},[82,76568,76569,76571,76573],{"class":84,"line":36216},[82,76570,72640],{"class":112},[82,76572,72643],{"class":2384},[82,76574,13443],{"class":92},[82,76576,76577],{"class":84,"line":36222},[82,76578,76579],{"class":2828},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[82,76581,76582],{"class":84,"line":36228},[82,76583,76584],{"class":2828},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[82,76586,76587,76589,76592,76594,76596,76599,76601,76603,76605,76608,76610,76613],{"class":84,"line":36239},[82,76588,60786],{"class":112},[82,76590,76591],{"class":88}," trArr",[82,76593,259],{"class":112},[82,76595,54526],{"class":92},[82,76597,76598],{"class":2384},"map",[82,76600,93],{"class":92},[82,76602,57009],{"class":112},[82,76604,4265],{"class":92},[82,76606,76607],{"class":108},"ele",[82,76609,100],{"class":92},[82,76611,76612],{"class":108},"index",[82,76614,15031],{"class":92},[82,76616,76617,76619],{"class":84,"line":36250},[82,76618,2405],{"class":112},[82,76620,72724],{"class":96},[82,76622,76623],{"class":84,"line":36256},[82,76624,76625],{"class":96},"      \u003Ctr>\n",[82,76627,76628,76630,76632,76634,76637],{"class":84,"line":36273},[82,76629,72729],{"class":96},[82,76631,76607],{"class":92},[82,76633,233],{"class":96},[82,76635,76636],{"class":92},"unameId",[82,76638,72744],{"class":96},[82,76640,76641,76643,76645,76647,76649],{"class":84,"line":36296},[82,76642,72729],{"class":96},[82,76644,76607],{"class":92},[82,76646,233],{"class":96},[82,76648,72760],{"class":92},[82,76650,72744],{"class":96},[82,76652,76653,76655,76657,76659,76661],{"class":84,"line":36319},[82,76654,72729],{"class":96},[82,76656,76607],{"class":92},[82,76658,233],{"class":96},[82,76660,72777],{"class":92},[82,76662,72744],{"class":96},[82,76664,76665,76667,76669,76671,76673],{"class":84,"line":36325},[82,76666,72729],{"class":96},[82,76668,76607],{"class":92},[82,76670,233],{"class":96},[82,76672,72794],{"class":92},[82,76674,72744],{"class":96},[82,76676,76677,76679,76681,76683,76685],{"class":84,"line":36330},[82,76678,72729],{"class":96},[82,76680,76607],{"class":92},[82,76682,233],{"class":96},[82,76684,72811],{"class":92},[82,76686,72744],{"class":96},[82,76688,76689,76691,76693,76695,76697],{"class":84,"line":36339},[82,76690,72729],{"class":96},[82,76692,76607],{"class":92},[82,76694,233],{"class":96},[82,76696,72828],{"class":92},[82,76698,72744],{"class":96},[82,76700,76701,76703,76705,76707,76709],{"class":84,"line":36349},[82,76702,72729],{"class":96},[82,76704,76607],{"class":92},[82,76706,233],{"class":96},[82,76708,4987],{"class":92},[82,76710,72744],{"class":96},[82,76712,76713],{"class":84,"line":36355},[82,76714,76169],{"class":96},[82,76716,76717,76720,76722],{"class":84,"line":36360},[82,76718,76719],{"class":96},"          \u003Ca href=\"#\" data-id=\"${",[82,76721,76612],{"class":92},[82,76723,76724],{"class":96},"}\">删除\u003C\u002Fa>\n",[82,76726,76727],{"class":84,"line":36366},[82,76728,76179],{"class":96},[82,76730,76731],{"class":84,"line":36379},[82,76732,76733],{"class":96},"      \u003C\u002Ftr>\n",[82,76735,76736],{"class":84,"line":36385},[82,76737,76738],{"class":96},"  `\n",[82,76740,76741],{"class":84,"line":36396},[82,76742,67372],{"class":92},[82,76744,76745,76747,76749],{"class":84,"line":36407},[82,76746,60802],{"class":92},[82,76748,60805],{"class":2384},[82,76750,76751],{"class":92},"(trArr)\n",[82,76753,76754],{"class":84,"line":36426},[82,76755,486],{"emptyLinePlaceholder":485},[82,76757,76758],{"class":84,"line":52081},[82,76759,76760],{"class":2828},"      \u002F\u002F (2) 把数组转换为字符串join\n",[82,76762,76763],{"class":84,"line":52086},[82,76764,76765],{"class":2828},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[82,76767,76768,76770,76772,76775,76778,76780,76783],{"class":84,"line":52095},[82,76769,72655],{"class":92},[82,76771,113],{"class":112},[82,76773,76774],{"class":92}," trArr.",[82,76776,76777],{"class":2384},"join",[82,76779,93],{"class":92},[82,76781,76782],{"class":96},"''",[82,76784,119],{"class":92},[82,76786,76787],{"class":84,"line":52104},[82,76788,76789],{"class":2828},"      \u002F\u002F 显示共有几条\n",[82,76791,76792,76794,76796,76798,76801,76804,76806,76808],{"class":84,"line":52109},[82,76793,58329],{"class":92},[82,76795,56959],{"class":2384},[82,76797,93],{"class":92},[82,76799,76800],{"class":96},"'.total span'",[82,76802,76803],{"class":92},").innerHTML ",[82,76805,113],{"class":112},[82,76807,54526],{"class":92},[82,76809,58389],{"class":88},[82,76811,76812],{"class":84,"line":52114},[82,76813,4787],{"class":92},[82,76815,76816],{"class":84,"line":52119},[82,76817,76818],{"class":2828},"    \u002F\u002F render()\n",[82,76820,76821],{"class":84,"line":52132},[82,76822,486],{"emptyLinePlaceholder":485},[82,76824,76825],{"class":84,"line":52137},[82,76826,76827],{"class":2828},"    \u002F\u002F 获取DOM对象\n",[82,76829,76830,76832,76834,76836,76838,76840,76842,76844],{"class":84,"line":52146},[82,76831,13811],{"class":112},[82,76833,72377],{"class":88},[82,76835,259],{"class":112},[82,76837,56956],{"class":92},[82,76839,56959],{"class":2384},[82,76841,93],{"class":92},[82,76843,72388],{"class":96},[82,76845,119],{"class":92},[82,76847,76848,76850,76852,76854,76856,76858,76860,76862],{"class":84,"line":52155},[82,76849,13811],{"class":112},[82,76851,72204],{"class":88},[82,76853,259],{"class":112},[82,76855,56956],{"class":92},[82,76857,56959],{"class":2384},[82,76859,93],{"class":92},[82,76861,72215],{"class":96},[82,76863,119],{"class":92},[82,76865,76866,76868,76870,76872,76874,76876,76878,76880],{"class":84,"line":52172},[82,76867,13811],{"class":112},[82,76869,18274],{"class":88},[82,76871,259],{"class":112},[82,76873,56956],{"class":92},[82,76875,56959],{"class":2384},[82,76877,93],{"class":92},[82,76879,72234],{"class":96},[82,76881,119],{"class":92},[82,76883,76885,76887,76889,76891,76893,76895,76897,76899],{"class":84,"line":76884},231,[82,76886,13811],{"class":112},[82,76888,72263],{"class":88},[82,76890,259],{"class":112},[82,76892,56956],{"class":92},[82,76894,56959],{"class":2384},[82,76896,93],{"class":92},[82,76898,72274],{"class":96},[82,76900,119],{"class":92},[82,76902,76904,76906,76908,76910,76912,76914,76916,76918],{"class":84,"line":76903},232,[82,76905,13811],{"class":112},[82,76907,72243],{"class":88},[82,76909,259],{"class":112},[82,76911,56956],{"class":92},[82,76913,56959],{"class":2384},[82,76915,93],{"class":92},[82,76917,72254],{"class":96},[82,76919,119],{"class":92},[82,76921,76923,76925,76927,76929,76931,76933,76935,76937],{"class":84,"line":76922},233,[82,76924,13811],{"class":112},[82,76926,72283],{"class":88},[82,76928,259],{"class":112},[82,76930,56956],{"class":92},[82,76932,56959],{"class":2384},[82,76934,93],{"class":92},[82,76936,72294],{"class":96},[82,76938,119],{"class":92},[82,76940,76942],{"class":84,"line":76941},234,[82,76943,486],{"emptyLinePlaceholder":485},[82,76945,76947],{"class":84,"line":76946},235,[82,76948,76949],{"class":2828},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[82,76951,76953,76955,76957,76959,76961,76963,76965,76967,76969],{"class":84,"line":76952},236,[82,76954,72395],{"class":92},[82,76956,60371],{"class":2384},[82,76958,93],{"class":92},[82,76960,72402],{"class":96},[82,76962,100],{"class":92},[82,76964,57009],{"class":112},[82,76966,4265],{"class":92},[82,76968,2844],{"class":108},[82,76970,15031],{"class":92},[82,76972,76974],{"class":84,"line":76973},237,[82,76975,76976],{"class":2828},"      \u002F\u002F 禁止浏览器跳转\n",[82,76978,76980,76982,76984],{"class":84,"line":76979},238,[82,76981,72422],{"class":92},[82,76983,72425],{"class":2384},[82,76985,4576],{"class":92},[82,76987,76989],{"class":84,"line":76988},239,[82,76990,76991],{"class":2828},"      \u002F\u002F 非空判断\n",[82,76993,76995],{"class":84,"line":76994},240,[82,76996,76997],{"class":2828},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[82,76999,77001],{"class":84,"line":77000},241,[82,77002,77003],{"class":2828},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[82,77005,77007,77009,77011,77013,77016,77018,77021,77024,77026,77028],{"class":84,"line":77006},242,[82,77008,57040],{"class":112},[82,77010,4265],{"class":92},[82,77012,2986],{"class":112},[82,77014,77015],{"class":92},"uname.value ",[82,77017,73913],{"class":112},[82,77019,77020],{"class":112}," !",[82,77022,77023],{"class":92},"age.value ",[82,77025,73913],{"class":112},[82,77027,77020],{"class":112},[82,77029,77030],{"class":92},"salary.value) {\n",[82,77032,77034,77036,77038,77040,77042],{"class":84,"line":77033},243,[82,77035,2405],{"class":112},[82,77037,72496],{"class":2384},[82,77039,93],{"class":92},[82,77041,72501],{"class":96},[82,77043,119],{"class":92},[82,77045,77047],{"class":84,"line":77046},244,[82,77048,54958],{"class":92},[82,77050,77052,77054,77056],{"class":84,"line":77051},245,[82,77053,60565],{"class":92},[82,77055,54445],{"class":2384},[82,77057,77058],{"class":92},"({\n",[82,77060,77062],{"class":84,"line":77061},246,[82,77063,77064],{"class":2828},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[82,77066,77068],{"class":84,"line":77067},247,[82,77069,77070],{"class":2828},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[82,77072,77074],{"class":84,"line":77073},248,[82,77075,77076],{"class":2828},"        \u002F\u002F 对象的序号应为数组长度+1\n",[82,77078,77080],{"class":84,"line":77079},249,[82,77081,77082],{"class":2828},"        \u002F\u002F unameId: arr.length + 1,\n",[82,77084,77086],{"class":84,"line":77085},250,[82,77087,486],{"emptyLinePlaceholder":485},[82,77089,77091],{"class":84,"line":77090},251,[82,77092,77093],{"class":2828},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[82,77095,77097],{"class":84,"line":77096},252,[82,77098,77099],{"class":2828},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[82,77101,77103],{"class":84,"line":77102},253,[82,77104,77105],{"class":2828},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[82,77107,77109],{"class":84,"line":77108},254,[82,77110,77111],{"class":2828},"        \u002F\u002F 0当假看\n",[82,77113,77115,77118,77120,77122,77125,77127,77129,77131,77134,77136,77138,77141,77143],{"class":84,"line":77114},255,[82,77116,77117],{"class":92},"        unameId: arr.",[82,77119,54529],{"class":88},[82,77121,76368],{"class":112},[82,77123,77124],{"class":92}," arr[arr.",[82,77126,54529],{"class":88},[82,77128,54831],{"class":112},[82,77130,27703],{"class":88},[82,77132,77133],{"class":92},"].unameId ",[82,77135,2249],{"class":112},[82,77137,27703],{"class":88},[82,77139,77140],{"class":112}," :",[82,77142,27703],{"class":88},[82,77144,1363],{"class":92},[82,77146,77148],{"class":84,"line":77147},256,[82,77149,72549],{"class":92},[82,77151,77153],{"class":84,"line":77152},257,[82,77154,72554],{"class":92},[82,77156,77158],{"class":84,"line":77157},258,[82,77159,72564],{"class":92},[82,77161,77163],{"class":84,"line":77162},259,[82,77164,72559],{"class":92},[82,77166,77168],{"class":84,"line":77167},260,[82,77169,77170],{"class":92},"        city: city.value,\n",[82,77172,77174],{"class":84,"line":77173},261,[82,77175,77176],{"class":2828},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[82,77178,77180],{"class":84,"line":77179},262,[82,77181,77182],{"class":2828},"        \u002F\u002F time: new Date().toDateString()\n",[82,77184,77186,77189,77192],{"class":84,"line":77185},263,[82,77187,77188],{"class":92},"        time: ",[82,77190,77191],{"class":2384},"getTime",[82,77193,4576],{"class":92},[82,77195,77197],{"class":84,"line":77196},264,[82,77198,67372],{"class":92},[82,77200,77202],{"class":84,"line":77201},265,[82,77203,77204],{"class":2828},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[82,77206,77208,77210],{"class":84,"line":77207},266,[82,77209,72624],{"class":2384},[82,77211,4576],{"class":92},[82,77213,77215,77217,77219,77221,77223],{"class":84,"line":77214},267,[82,77216,72607],{"class":88},[82,77218,233],{"class":92},[82,77220,72612],{"class":2384},[82,77222,15639],{"class":92},[82,77224,77225],{"class":2828},"\u002F\u002F重置表单\n",[82,77227,77229],{"class":84,"line":77228},268,[82,77230,77231],{"class":2828},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[82,77233,77235,77238,77240,77242,77245,77247,77249,77251,77253],{"class":84,"line":77234},269,[82,77236,77237],{"class":92},"      localStorage.",[82,77239,74210],{"class":2384},[82,77241,93],{"class":92},[82,77243,77244],{"class":96},"'data'",[82,77246,100],{"class":92},[82,77248,74220],{"class":88},[82,77250,233],{"class":92},[82,77252,74225],{"class":2384},[82,77254,77255],{"class":92},"(arr))\n",[82,77257,77259],{"class":84,"line":77258},270,[82,77260,36029],{"class":92},[82,77262,77264],{"class":84,"line":77263},271,[82,77265,486],{"emptyLinePlaceholder":485},[82,77267,77269],{"class":84,"line":77268},272,[82,77270,77271],{"class":2828},"    \u002F\u002F 3.删除业务\n",[82,77273,77275],{"class":84,"line":77274},273,[82,77276,77277],{"class":2828},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[82,77279,77281,77283,77285,77287,77289,77291,77293,77295,77297],{"class":84,"line":77280},274,[82,77282,72897],{"class":92},[82,77284,60371],{"class":2384},[82,77286,93],{"class":92},[82,77288,60376],{"class":96},[82,77290,100],{"class":92},[82,77292,57009],{"class":112},[82,77294,4265],{"class":92},[82,77296,2844],{"class":108},[82,77298,15031],{"class":92},[82,77300,77302],{"class":84,"line":77301},275,[82,77303,77304],{"class":2828},"      \u002F\u002F 判断是否点击的是删除按钮\n",[82,77306,77308,77310,77312,77314,77316],{"class":84,"line":77307},276,[82,77309,57040],{"class":112},[82,77311,69591],{"class":92},[82,77313,57046],{"class":112},[82,77315,70813],{"class":96},[82,77317,15031],{"class":92},[82,77319,77321],{"class":84,"line":77320},277,[82,77322,77323],{"class":2828},"        \u002F\u002F alert(1)\n",[82,77325,77327],{"class":84,"line":77326},278,[82,77328,77329],{"class":2828},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[82,77331,77333],{"class":84,"line":77332},279,[82,77334,77335],{"class":2828},"        \u002F\u002F console.log(e.target)\n",[82,77337,77339],{"class":84,"line":77338},280,[82,77340,77341],{"class":2828},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[82,77343,77345],{"class":84,"line":77344},281,[82,77346,486],{"emptyLinePlaceholder":485},[82,77348,77350],{"class":84,"line":77349},282,[82,77351,77352],{"class":2828},"        \u002F\u002F 确认框，确然是否真的要删除\n",[82,77354,77356],{"class":84,"line":77355},283,[82,77357,77358],{"class":2828},"        \u002F\u002F confirm()为确认框\n",[82,77360,77362],{"class":84,"line":77361},284,[82,77363,77364],{"class":2828},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[82,77366,77368,77370,77372,77375,77377,77380],{"class":84,"line":77367},285,[82,77369,5096],{"class":112},[82,77371,4265],{"class":92},[82,77373,77374],{"class":2384},"confirm",[82,77376,93],{"class":92},[82,77378,77379],{"class":96},"'您确定要删除这条数据吗？'",[82,77381,77382],{"class":92},")) {\n",[82,77384,77386,77389,77391,77393,77395],{"class":84,"line":77385},286,[82,77387,77388],{"class":92},"          arr.",[82,77390,60568],{"class":2384},[82,77392,72950],{"class":92},[82,77394,2283],{"class":88},[82,77396,119],{"class":92},[82,77398,77400],{"class":84,"line":77399},287,[82,77401,77402],{"class":2828},"          \u002F\u002F 3.4 重新渲染页面\n",[82,77404,77406,77409],{"class":84,"line":77405},288,[82,77407,77408],{"class":2384},"          render",[82,77410,4576],{"class":92},[82,77412,77414],{"class":84,"line":77413},289,[82,77415,77416],{"class":2828},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[82,77418,77420,77423,77425,77427,77429,77431,77433,77435,77437],{"class":84,"line":77419},290,[82,77421,77422],{"class":92},"          localStorage.",[82,77424,74210],{"class":2384},[82,77426,93],{"class":92},[82,77428,77244],{"class":96},[82,77430,100],{"class":92},[82,77432,74220],{"class":88},[82,77434,233],{"class":92},[82,77436,74225],{"class":2384},[82,77438,77255],{"class":92},[82,77440,77442],{"class":84,"line":77441},291,[82,77443,5128],{"class":92},[82,77445,77447],{"class":84,"line":77446},292,[82,77448,54958],{"class":92},[82,77450,77452],{"class":84,"line":77451},293,[82,77453,486],{"emptyLinePlaceholder":485},[82,77455,77457],{"class":84,"line":77456},294,[82,77458,36029],{"class":92},[82,77460,77462],{"class":84,"line":77461},295,[82,77463,486],{"emptyLinePlaceholder":485},[82,77465,77467,77469,77471],{"class":84,"line":77466},296,[82,77468,54977],{"class":92},[82,77470,54375],{"class":53863},[82,77472,53870],{"class":92},[82,77474,77476,77478,77480],{"class":84,"line":77475},297,[82,77477,54347],{"class":92},[82,77479,54362],{"class":53863},[82,77481,53870],{"class":92},[82,77483,77485],{"class":84,"line":77484},298,[82,77486,486],{"emptyLinePlaceholder":485},[82,77488,77490,77492,77494],{"class":84,"line":77489},299,[82,77491,54347],{"class":92},[82,77493,53198],{"class":53863},[82,77495,53870],{"class":92},[14,77497,77499],{"id":77498},"_36-正则表达式","3.6 正则表达式",[19,77501,77502],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77504,77505],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77507,77508],{},"正则表达式的作用：",[3755,77510,77511,77518,77524],{},[29,77512,77513,77514,77517],{},"表单验证（ ",[2913,77515,77516],{},"匹配"," ）",[29,77519,77520,77521,77517],{},"过滤敏感词（ ",[2913,77522,77523],{},"替换",[29,77525,77526,77527,77517],{},"字符串中提取我们想要的部分（ ",[2913,77528,77529],{},"提取",[65,77531,77533],{"id":77532},"_361-语法","3.6.1 语法",[19,77535,77536],{},"正则表达式使用步骤：",[26,77538,77539,77542],{},[29,77540,77541],{},"定义规则",[29,77543,77544],{},"查找是否匹配",[19,77546,77547],{},"正则表达式里边不需要写引号",[19,77549,77550],{},[4078,77551],{"alt":78,"src":77552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77554,77555],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77557,77558],{},"reg.test(str)",[19,77560,77561],{},[4078,77562],{"alt":78,"src":77563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77565,77566],{},[4078,77567],{"alt":78,"src":77568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[65,77570,77572],{"id":77571},"_362-元字符","3.6.2 元字符",[26,77574,77575,77578,77581,77584,77591],{},[29,77576,77577],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,77579,77580],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,77582,77583],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,77585,77586,77587],{},"正则验证工具：",[323,77588,77589],{"href":77589,"rel":77590},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26449],[29,77592,77593],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24582,77595,77597],{"id":77596},"_3621-边界符","3.6.2.1 边界符",[19,77599,77600],{},[4078,77601],{"alt":78,"src":77602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77604,77605],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77607,77608],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77610,77611],{},"只匹配一次",[19,77613,77614],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24582,77616,77618],{"id":77617},"_3622-量词","3.6.2.2 量词",[19,77620,77621],{},[4078,77622],{"alt":78,"src":77623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77625,77626],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24582,77628,77630],{"id":77629},"_3623-元字符","3.6.2.3 元字符",[19,77632,77633],{},[4078,77634],{"alt":78,"src":77635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77637,77638],{},"匹配的是a或b或c []只选一个",[19,77640,77641],{},[4078,77642],{"alt":78,"src":77643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77645,77646],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77648,77649],{},[4078,77650],{"alt":78,"src":77651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77653,77654],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77656,77657],{},[4078,77658],{"alt":78,"src":77659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[73,77661,77663],{"className":53196,"code":77662,"language":53198,"meta":78,"style":78},"\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",[32,77664,77665,77675,77689,77693,77701,77715,77735,77747,77755,77759,77767,77775,77780,77811,77838,77866,77870,77875,77903,77934,77939,77944,77975,78007,78039,78043,78048,78079,78109,78139,78143,78148,78179,78210,78240,78270,78274,78279,78312,78316,78321,78352,78383,78387,78392,78423,78453,78484,78488,78493,78525,78556,78587,78614,78645,78677,78710,78741,78772,78804,78835,78843,78851,78855],{"__ignoreMap":78},[82,77666,77667,77669,77671,77673],{"class":84,"line":85},[82,77668,53860],{"class":92},[82,77670,53864],{"class":53863},[82,77672,53867],{"class":2384},[82,77674,53870],{"class":92},[82,77676,77677,77679,77681,77683,77685,77687],{"class":84,"line":157},[82,77678,3659],{"class":92},[82,77680,53198],{"class":53863},[82,77682,53879],{"class":2384},[82,77684,113],{"class":92},[82,77686,53884],{"class":96},[82,77688,53870],{"class":92},[82,77690,77691],{"class":84,"line":404},[82,77692,486],{"emptyLinePlaceholder":485},[82,77694,77695,77697,77699],{"class":84,"line":413},[82,77696,3659],{"class":92},[82,77698,53897],{"class":53863},[82,77700,53870],{"class":92},[82,77702,77703,77705,77707,77709,77711,77713],{"class":84,"line":508},[82,77704,54705],{"class":92},[82,77706,53907],{"class":53863},[82,77708,53910],{"class":2384},[82,77710,113],{"class":92},[82,77712,53915],{"class":96},[82,77714,53870],{"class":92},[82,77716,77717,77719,77721,77723,77725,77727,77729,77731,77733],{"class":84,"line":513},[82,77718,54705],{"class":92},[82,77720,53907],{"class":53863},[82,77722,17506],{"class":2384},[82,77724,113],{"class":92},[82,77726,53954],{"class":96},[82,77728,53934],{"class":2384},[82,77730,113],{"class":92},[82,77732,53961],{"class":96},[82,77734,53870],{"class":92},[82,77736,77737,77739,77741,77743,77745],{"class":84,"line":1388},[82,77738,54705],{"class":92},[82,77740,53970],{"class":53863},[82,77742,53973],{"class":92},[82,77744,53970],{"class":53863},[82,77746,53870],{"class":92},[82,77748,77749,77751,77753],{"class":84,"line":1394},[82,77750,54347],{"class":92},[82,77752,53897],{"class":53863},[82,77754,53870],{"class":92},[82,77756,77757],{"class":84,"line":1399},[82,77758,486],{"emptyLinePlaceholder":485},[82,77760,77761,77763,77765],{"class":84,"line":1430},[82,77762,3659],{"class":92},[82,77764,54362],{"class":53863},[82,77766,53870],{"class":92},[82,77768,77769,77771,77773],{"class":84,"line":1818},[82,77770,54705],{"class":92},[82,77772,54375],{"class":53863},[82,77774,53870],{"class":92},[82,77776,77777],{"class":84,"line":2082},[82,77778,77779],{"class":2828},"    \u002F\u002F 元字符中\n",[82,77781,77782,77784,77786,77788,77790,77793,77795,77797,77800,77802,77805,77808],{"class":84,"line":2233},[82,77783,76307],{"class":92},[82,77785,60805],{"class":2384},[82,77787,93],{"class":92},[82,77789,1147],{"class":96},[82,77791,77792],{"class":219},"哈",[82,77794,1147],{"class":96},[82,77796,233],{"class":92},[82,77798,77799],{"class":2384},"test",[82,77801,93],{"class":92},[82,77803,77804],{"class":96},"'哈'",[82,77806,77807],{"class":92},"))  ",[82,77809,77810],{"class":2828},"\u002F\u002Ftrue\n",[82,77812,77813,77815,77817,77819,77821,77823,77825,77827,77829,77831,77834,77836],{"class":84,"line":2255},[82,77814,76307],{"class":92},[82,77816,60805],{"class":2384},[82,77818,93],{"class":92},[82,77820,1147],{"class":96},[82,77822,77792],{"class":219},[82,77824,1147],{"class":96},[82,77826,233],{"class":92},[82,77828,77799],{"class":2384},[82,77830,93],{"class":92},[82,77832,77833],{"class":96},"'哈哈'",[82,77835,77807],{"class":92},[82,77837,77810],{"class":2828},[82,77839,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77861,77864],{"class":84,"line":2260},[82,77841,76307],{"class":92},[82,77843,60805],{"class":2384},[82,77845,93],{"class":92},[82,77847,1147],{"class":96},[82,77849,77792],{"class":219},[82,77851,1147],{"class":96},[82,77853,233],{"class":92},[82,77855,77799],{"class":2384},[82,77857,93],{"class":92},[82,77859,77860],{"class":96},"'二哈'",[82,77862,77863],{"class":92},"))   ",[82,77865,77810],{"class":2828},[82,77867,77868],{"class":84,"line":2298},[82,77869,486],{"emptyLinePlaceholder":485},[82,77871,77872],{"class":84,"line":2303},[82,77873,77874],{"class":2828},"    \u002F\u002F 1.边界符\n",[82,77876,77877,77879,77881,77883,77885,77887,77889,77891,77893,77895,77897,77899,77901],{"class":84,"line":2321},[82,77878,76307],{"class":92},[82,77880,60805],{"class":2384},[82,77882,93],{"class":92},[82,77884,1147],{"class":96},[82,77886,3715],{"class":112},[82,77888,77792],{"class":219},[82,77890,1147],{"class":96},[82,77892,233],{"class":92},[82,77894,77799],{"class":2384},[82,77896,93],{"class":92},[82,77898,77804],{"class":96},[82,77900,77807],{"class":92},[82,77902,77810],{"class":2828},[82,77904,77905,77907,77909,77911,77913,77915,77917,77919,77921,77923,77925,77927,77929,77931],{"class":84,"line":2533},[82,77906,76307],{"class":92},[82,77908,60805],{"class":2384},[82,77910,93],{"class":92},[82,77912,1147],{"class":96},[82,77914,3715],{"class":112},[82,77916,77792],{"class":219},[82,77918,3060],{"class":112},[82,77920,1147],{"class":96},[82,77922,233],{"class":92},[82,77924,77799],{"class":2384},[82,77926,93],{"class":92},[82,77928,77833],{"class":96},[82,77930,77807],{"class":92},[82,77932,77933],{"class":2828},"\u002F\u002Ffalse\n",[82,77935,77936],{"class":84,"line":2538},[82,77937,77938],{"class":2828},"    \u002F\u002F 2.量词\n",[82,77940,77941],{"class":84,"line":2548},[82,77942,77943],{"class":2828},"    \u002F\u002F 量词 * 类似于 >= 0\n",[82,77945,77946,77948,77950,77952,77954,77956,77958,77961,77963,77965,77967,77969,77971,77973],{"class":84,"line":2579},[82,77947,76307],{"class":92},[82,77949,60805],{"class":2384},[82,77951,93],{"class":92},[82,77953,1147],{"class":96},[82,77955,3715],{"class":112},[82,77957,77792],{"class":219},[82,77959,77960],{"class":112},"*$",[82,77962,1147],{"class":96},[82,77964,233],{"class":92},[82,77966,77799],{"class":2384},[82,77968,93],{"class":92},[82,77970,77833],{"class":96},[82,77972,77807],{"class":92},[82,77974,77810],{"class":2828},[82,77976,77977,77979,77981,77983,77985,77987,77989,77991,77993,77995,77997,77999,78002,78004],{"class":84,"line":2585},[82,77978,76307],{"class":92},[82,77980,60805],{"class":2384},[82,77982,93],{"class":92},[82,77984,1147],{"class":96},[82,77986,3715],{"class":112},[82,77988,77792],{"class":219},[82,77990,77960],{"class":112},[82,77992,1147],{"class":96},[82,77994,233],{"class":92},[82,77996,77799],{"class":2384},[82,77998,93],{"class":92},[82,78000,78001],{"class":96},"'二哈好傻'",[82,78003,77807],{"class":92},[82,78005,78006],{"class":2828},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[82,78008,78009,78011,78013,78015,78017,78019,78021,78023,78025,78027,78029,78031,78034,78036],{"class":84,"line":4350},[82,78010,76307],{"class":92},[82,78012,60805],{"class":2384},[82,78014,93],{"class":92},[82,78016,1147],{"class":96},[82,78018,3715],{"class":112},[82,78020,77792],{"class":219},[82,78022,77960],{"class":112},[82,78024,1147],{"class":96},[82,78026,233],{"class":92},[82,78028,77799],{"class":2384},[82,78030,93],{"class":92},[82,78032,78033],{"class":96},"'哈好哈'",[82,78035,77863],{"class":92},[82,78037,78038],{"class":2828},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[82,78040,78041],{"class":84,"line":4355},[82,78042,486],{"emptyLinePlaceholder":485},[82,78044,78045],{"class":84,"line":4360},[82,78046,78047],{"class":2828},"    \u002F\u002F +类似于>=1\n",[82,78049,78050,78052,78054,78056,78058,78060,78062,78065,78067,78069,78071,78073,78075,78077],{"class":84,"line":4365},[82,78051,76307],{"class":92},[82,78053,60805],{"class":2384},[82,78055,93],{"class":92},[82,78057,1147],{"class":96},[82,78059,3715],{"class":112},[82,78061,77792],{"class":219},[82,78063,78064],{"class":112},"+$",[82,78066,1147],{"class":96},[82,78068,233],{"class":92},[82,78070,77799],{"class":2384},[82,78072,93],{"class":92},[82,78074,77833],{"class":96},[82,78076,77807],{"class":92},[82,78078,77810],{"class":2828},[82,78080,78081,78083,78085,78087,78089,78091,78093,78095,78097,78099,78101,78103,78105,78107],{"class":84,"line":4379},[82,78082,76307],{"class":92},[82,78084,60805],{"class":2384},[82,78086,93],{"class":92},[82,78088,1147],{"class":96},[82,78090,3715],{"class":112},[82,78092,77792],{"class":219},[82,78094,78064],{"class":112},[82,78096,1147],{"class":96},[82,78098,233],{"class":92},[82,78100,77799],{"class":2384},[82,78102,93],{"class":92},[82,78104,78001],{"class":96},[82,78106,77807],{"class":92},[82,78108,78006],{"class":2828},[82,78110,78111,78113,78115,78117,78119,78121,78123,78125,78127,78129,78131,78133,78135,78137],{"class":84,"line":4384},[82,78112,76307],{"class":92},[82,78114,60805],{"class":2384},[82,78116,93],{"class":92},[82,78118,1147],{"class":96},[82,78120,3715],{"class":112},[82,78122,77792],{"class":219},[82,78124,78064],{"class":112},[82,78126,1147],{"class":96},[82,78128,233],{"class":92},[82,78130,77799],{"class":2384},[82,78132,93],{"class":92},[82,78134,78033],{"class":96},[82,78136,77863],{"class":92},[82,78138,77933],{"class":2828},[82,78140,78141],{"class":84,"line":5176},[82,78142,486],{"emptyLinePlaceholder":485},[82,78144,78145],{"class":84,"line":5190},[82,78146,78147],{"class":2828},"    \u002F\u002F ?类似于0次或一次\n",[82,78149,78150,78152,78154,78156,78158,78160,78163,78165,78167,78169,78171,78173,78175,78177],{"class":84,"line":5198},[82,78151,76307],{"class":92},[82,78153,60805],{"class":2384},[82,78155,93],{"class":92},[82,78157,1147],{"class":96},[82,78159,3715],{"class":112},[82,78161,78162],{"class":219},"哈？",[82,78164,3060],{"class":112},[82,78166,1147],{"class":96},[82,78168,233],{"class":92},[82,78170,77799],{"class":2384},[82,78172,93],{"class":92},[82,78174,76782],{"class":96},[82,78176,77863],{"class":92},[82,78178,77810],{"class":2828},[82,78180,78181,78183,78185,78187,78189,78191,78193,78196,78198,78200,78202,78204,78206,78208],{"class":84,"line":5203},[82,78182,76307],{"class":92},[82,78184,60805],{"class":2384},[82,78186,93],{"class":92},[82,78188,1147],{"class":96},[82,78190,3715],{"class":112},[82,78192,77792],{"class":219},[82,78194,78195],{"class":112},"?$",[82,78197,1147],{"class":96},[82,78199,233],{"class":92},[82,78201,77799],{"class":2384},[82,78203,93],{"class":92},[82,78205,77833],{"class":96},[82,78207,77807],{"class":92},[82,78209,77933],{"class":2828},[82,78211,78212,78214,78216,78218,78220,78222,78224,78226,78228,78230,78232,78234,78236,78238],{"class":84,"line":5209},[82,78213,76307],{"class":92},[82,78215,60805],{"class":2384},[82,78217,93],{"class":92},[82,78219,1147],{"class":96},[82,78221,3715],{"class":112},[82,78223,77792],{"class":219},[82,78225,78195],{"class":112},[82,78227,1147],{"class":96},[82,78229,233],{"class":92},[82,78231,77799],{"class":2384},[82,78233,93],{"class":92},[82,78235,78001],{"class":96},[82,78237,77807],{"class":92},[82,78239,78006],{"class":2828},[82,78241,78242,78244,78246,78248,78250,78252,78254,78256,78258,78260,78262,78264,78266,78268],{"class":84,"line":5215},[82,78243,76307],{"class":92},[82,78245,60805],{"class":2384},[82,78247,93],{"class":92},[82,78249,1147],{"class":96},[82,78251,3715],{"class":112},[82,78253,77792],{"class":219},[82,78255,78195],{"class":112},[82,78257,1147],{"class":96},[82,78259,233],{"class":92},[82,78261,77799],{"class":2384},[82,78263,93],{"class":92},[82,78265,78033],{"class":96},[82,78267,77807],{"class":92},[82,78269,77933],{"class":2828},[82,78271,78272],{"class":84,"line":5220},[82,78273,486],{"emptyLinePlaceholder":485},[82,78275,78276],{"class":84,"line":10539},[82,78277,78278],{"class":2828},"    \u002F\u002F {n}写几，就必须出现几次\n",[82,78280,78281,78283,78285,78287,78289,78291,78293,78296,78298,78300,78302,78304,78307,78310],{"class":84,"line":10563},[82,78282,76307],{"class":92},[82,78284,60805],{"class":2384},[82,78286,93],{"class":92},[82,78288,1147],{"class":96},[82,78290,3715],{"class":112},[82,78292,77792],{"class":219},[82,78294,78295],{"class":112},"{4}$",[82,78297,1147],{"class":96},[82,78299,233],{"class":92},[82,78301,77799],{"class":2384},[82,78303,93],{"class":92},[82,78305,78306],{"class":96},"'哈哈哈哈'",[82,78308,78309],{"class":92},")) ",[82,78311,77810],{"class":2828},[82,78313,78314],{"class":84,"line":10568},[82,78315,486],{"emptyLinePlaceholder":485},[82,78317,78318],{"class":84,"line":10574},[82,78319,78320],{"class":2828},"    \u002F\u002F {n,}大于等于n次\n",[82,78322,78323,78325,78327,78329,78331,78333,78335,78338,78340,78342,78344,78346,78348,78350],{"class":84,"line":10601},[82,78324,76307],{"class":92},[82,78326,60805],{"class":2384},[82,78328,93],{"class":92},[82,78330,1147],{"class":96},[82,78332,3715],{"class":112},[82,78334,77792],{"class":219},[82,78336,78337],{"class":112},"{4,}$",[82,78339,1147],{"class":96},[82,78341,233],{"class":92},[82,78343,77799],{"class":2384},[82,78345,93],{"class":92},[82,78347,78306],{"class":96},[82,78349,78309],{"class":92},[82,78351,77810],{"class":2828},[82,78353,78354,78356,78358,78360,78362,78364,78366,78368,78370,78372,78374,78376,78379,78381],{"class":84,"line":10606},[82,78355,76307],{"class":92},[82,78357,60805],{"class":2384},[82,78359,93],{"class":92},[82,78361,1147],{"class":96},[82,78363,3715],{"class":112},[82,78365,77792],{"class":219},[82,78367,78337],{"class":112},[82,78369,1147],{"class":96},[82,78371,233],{"class":92},[82,78373,77799],{"class":2384},[82,78375,93],{"class":92},[82,78377,78378],{"class":96},"'哈哈哈哈哈'",[82,78380,78309],{"class":92},[82,78382,77810],{"class":2828},[82,78384,78385],{"class":84,"line":10612},[82,78386,486],{"emptyLinePlaceholder":485},[82,78388,78389],{"class":84,"line":10624},[82,78390,78391],{"class":2828},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[82,78393,78394,78396,78398,78400,78402,78404,78406,78409,78411,78413,78415,78417,78419,78421],{"class":84,"line":10636},[82,78395,76307],{"class":92},[82,78397,60805],{"class":2384},[82,78399,93],{"class":92},[82,78401,1147],{"class":96},[82,78403,3715],{"class":112},[82,78405,77792],{"class":219},[82,78407,78408],{"class":112},"{4,6}$",[82,78410,1147],{"class":96},[82,78412,233],{"class":92},[82,78414,77799],{"class":2384},[82,78416,93],{"class":92},[82,78418,78306],{"class":96},[82,78420,78309],{"class":92},[82,78422,77810],{"class":2828},[82,78424,78425,78427,78429,78431,78433,78435,78437,78439,78441,78443,78445,78447,78449,78451],{"class":84,"line":10648},[82,78426,76307],{"class":92},[82,78428,60805],{"class":2384},[82,78430,93],{"class":92},[82,78432,1147],{"class":96},[82,78434,3715],{"class":112},[82,78436,77792],{"class":219},[82,78438,78408],{"class":112},[82,78440,1147],{"class":96},[82,78442,233],{"class":92},[82,78444,77799],{"class":2384},[82,78446,93],{"class":92},[82,78448,78378],{"class":96},[82,78450,78309],{"class":92},[82,78452,77810],{"class":2828},[82,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471,78473,78475,78477,78480,78482],{"class":84,"line":12307},[82,78456,76307],{"class":92},[82,78458,60805],{"class":2384},[82,78460,93],{"class":92},[82,78462,1147],{"class":96},[82,78464,3715],{"class":112},[82,78466,77792],{"class":219},[82,78468,78408],{"class":112},[82,78470,1147],{"class":96},[82,78472,233],{"class":92},[82,78474,77799],{"class":2384},[82,78476,93],{"class":92},[82,78478,78479],{"class":96},"'哈哈哈哈哈哈哈'",[82,78481,78309],{"class":92},[82,78483,77933],{"class":2828},[82,78485,78486],{"class":84,"line":12332},[82,78487,486],{"emptyLinePlaceholder":485},[82,78489,78490],{"class":84,"line":12355},[82,78491,78492],{"class":2828},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[82,78494,78495,78497,78499,78501,78503,78505,78508,78510,78512,78514,78516,78518,78521,78523],{"class":84,"line":12379},[82,78496,76307],{"class":92},[82,78498,60805],{"class":2384},[82,78500,93],{"class":92},[82,78502,1147],{"class":96},[82,78504,3715],{"class":112},[82,78506,78507],{"class":88},"[abc]",[82,78509,3060],{"class":112},[82,78511,1147],{"class":96},[82,78513,233],{"class":92},[82,78515,77799],{"class":2384},[82,78517,93],{"class":92},[82,78519,78520],{"class":96},"'a'",[82,78522,77807],{"class":92},[82,78524,77810],{"class":2828},[82,78526,78527,78529,78531,78533,78535,78537,78539,78541,78543,78545,78547,78549,78552,78554],{"class":84,"line":12384},[82,78528,76307],{"class":92},[82,78530,60805],{"class":2384},[82,78532,93],{"class":92},[82,78534,1147],{"class":96},[82,78536,3715],{"class":112},[82,78538,78507],{"class":88},[82,78540,3060],{"class":112},[82,78542,1147],{"class":96},[82,78544,233],{"class":92},[82,78546,77799],{"class":2384},[82,78548,93],{"class":92},[82,78550,78551],{"class":96},"'b'",[82,78553,77807],{"class":92},[82,78555,77810],{"class":2828},[82,78557,78558,78560,78562,78564,78566,78568,78570,78572,78574,78576,78578,78580,78583,78585],{"class":84,"line":12389},[82,78559,76307],{"class":92},[82,78561,60805],{"class":2384},[82,78563,93],{"class":92},[82,78565,1147],{"class":96},[82,78567,3715],{"class":112},[82,78569,78507],{"class":88},[82,78571,3060],{"class":112},[82,78573,1147],{"class":96},[82,78575,233],{"class":92},[82,78577,77799],{"class":2384},[82,78579,93],{"class":92},[82,78581,78582],{"class":96},"'c'",[82,78584,77807],{"class":92},[82,78586,77810],{"class":2828},[82,78588,78589,78591,78593,78595,78597,78599,78601,78603,78605,78607,78610,78612],{"class":84,"line":12394},[82,78590,76307],{"class":92},[82,78592,60805],{"class":2384},[82,78594,93],{"class":92},[82,78596,1147],{"class":96},[82,78598,78507],{"class":88},[82,78600,1147],{"class":96},[82,78602,233],{"class":92},[82,78604,77799],{"class":2384},[82,78606,93],{"class":92},[82,78608,78609],{"class":96},"'ab'",[82,78611,77807],{"class":92},[82,78613,77810],{"class":2828},[82,78615,78616,78618,78620,78622,78624,78626,78628,78630,78632,78634,78636,78638,78640,78642],{"class":84,"line":12403},[82,78617,76307],{"class":92},[82,78619,60805],{"class":2384},[82,78621,93],{"class":92},[82,78623,1147],{"class":96},[82,78625,3715],{"class":112},[82,78627,78507],{"class":88},[82,78629,3060],{"class":112},[82,78631,1147],{"class":96},[82,78633,233],{"class":92},[82,78635,77799],{"class":2384},[82,78637,93],{"class":92},[82,78639,78609],{"class":96},[82,78641,77807],{"class":92},[82,78643,78644],{"class":2828},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[82,78646,78647,78649,78651,78653,78655,78657,78659,78662,78664,78666,78668,78670,78672,78674],{"class":84,"line":12408},[82,78648,76307],{"class":92},[82,78650,60805],{"class":2384},[82,78652,93],{"class":92},[82,78654,1147],{"class":96},[82,78656,3715],{"class":112},[82,78658,78507],{"class":88},[82,78660,78661],{"class":112},"{2}$",[82,78663,1147],{"class":96},[82,78665,233],{"class":92},[82,78667,77799],{"class":2384},[82,78669,93],{"class":92},[82,78671,78609],{"class":96},[82,78673,77807],{"class":92},[82,78675,78676],{"class":2828},"\u002F\u002Ftrue   可以选两个\n",[82,78678,78679,78681,78683,78685,78687,78689,78692,78694,78696,78698,78700,78702,78705,78707],{"class":84,"line":12414},[82,78680,76307],{"class":92},[82,78682,60805],{"class":2384},[82,78684,93],{"class":92},[82,78686,1147],{"class":96},[82,78688,3715],{"class":112},[82,78690,78691],{"class":88},"[a-z]",[82,78693,3060],{"class":112},[82,78695,1147],{"class":96},[82,78697,233],{"class":92},[82,78699,77799],{"class":2384},[82,78701,93],{"class":92},[82,78703,78704],{"class":96},"'p'",[82,78706,77863],{"class":92},[82,78708,78709],{"class":2828},"\u002F\u002Ftrue   依然只能选一个\n",[82,78711,78712,78714,78716,78718,78720,78722,78725,78727,78729,78731,78733,78735,78737,78739],{"class":84,"line":12435},[82,78713,76307],{"class":92},[82,78715,60805],{"class":2384},[82,78717,93],{"class":92},[82,78719,1147],{"class":96},[82,78721,3715],{"class":112},[82,78723,78724],{"class":88},"[A-Z]",[82,78726,3060],{"class":112},[82,78728,1147],{"class":96},[82,78730,233],{"class":92},[82,78732,77799],{"class":2384},[82,78734,93],{"class":92},[82,78736,78704],{"class":96},[82,78738,77863],{"class":92},[82,78740,77933],{"class":2828},[82,78742,78743,78745,78747,78749,78751,78753,78755,78757,78759,78761,78763,78765,78768,78770],{"class":84,"line":12441},[82,78744,76307],{"class":92},[82,78746,60805],{"class":2384},[82,78748,93],{"class":92},[82,78750,1147],{"class":96},[82,78752,3715],{"class":112},[82,78754,78724],{"class":88},[82,78756,3060],{"class":112},[82,78758,1147],{"class":96},[82,78760,233],{"class":92},[82,78762,77799],{"class":2384},[82,78764,93],{"class":92},[82,78766,78767],{"class":96},"'P'",[82,78769,77863],{"class":92},[82,78771,77810],{"class":2828},[82,78773,78774,78776,78778,78780,78782,78784,78787,78789,78791,78793,78795,78797,78800,78802],{"class":84,"line":12455},[82,78775,76307],{"class":92},[82,78777,60805],{"class":2384},[82,78779,93],{"class":92},[82,78781,1147],{"class":96},[82,78783,3715],{"class":112},[82,78785,78786],{"class":88},"[0-9]",[82,78788,3060],{"class":112},[82,78790,1147],{"class":96},[82,78792,233],{"class":92},[82,78794,77799],{"class":2384},[82,78796,93],{"class":92},[82,78798,78799],{"class":96},"'0'",[82,78801,77863],{"class":92},[82,78803,77810],{"class":2828},[82,78805,78806,78808,78810,78812,78814,78816,78819,78821,78823,78825,78827,78829,78831,78833],{"class":84,"line":12461},[82,78807,76307],{"class":92},[82,78809,60805],{"class":2384},[82,78811,93],{"class":92},[82,78813,1147],{"class":96},[82,78815,3715],{"class":112},[82,78817,78818],{"class":88},"[a-zA-Z0-9]",[82,78820,3060],{"class":112},[82,78822,1147],{"class":96},[82,78824,233],{"class":92},[82,78826,77799],{"class":2384},[82,78828,93],{"class":92},[82,78830,78704],{"class":96},[82,78832,77807],{"class":92},[82,78834,77810],{"class":2828},[82,78836,78837,78839,78841],{"class":84,"line":12488},[82,78838,54977],{"class":92},[82,78840,54375],{"class":53863},[82,78842,53870],{"class":92},[82,78844,78845,78847,78849],{"class":84,"line":12497},[82,78846,54347],{"class":92},[82,78848,54362],{"class":53863},[82,78850,53870],{"class":92},[82,78852,78853],{"class":84,"line":12503},[82,78854,486],{"emptyLinePlaceholder":485},[82,78856,78857,78859,78861],{"class":84,"line":12511},[82,78858,54347],{"class":92},[82,78860,53198],{"class":53863},[82,78862,53870],{"class":92},[24582,78864,78866],{"id":78865},"_3624-修饰符","3.6.2.4 修饰符",[19,78868,78869],{},[4078,78870],{"alt":78,"src":78871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78873,78874],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78876,78877],{},[4078,78878],{"alt":78,"src":78879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[73,78881,78883],{"className":53196,"code":78882,"language":53198,"meta":78,"style":78},"\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",[32,78884,78885,78895,78909,78917,78931,78951,78963,78971,78979,78987,79019,79050,79055,79087,79098,79131,79140,79148,79156],{"__ignoreMap":78},[82,78886,78887,78889,78891,78893],{"class":84,"line":85},[82,78888,53860],{"class":92},[82,78890,53864],{"class":53863},[82,78892,53867],{"class":2384},[82,78894,53870],{"class":92},[82,78896,78897,78899,78901,78903,78905,78907],{"class":84,"line":157},[82,78898,3659],{"class":92},[82,78900,53198],{"class":53863},[82,78902,53879],{"class":2384},[82,78904,113],{"class":92},[82,78906,53884],{"class":96},[82,78908,53870],{"class":92},[82,78910,78911,78913,78915],{"class":84,"line":404},[82,78912,3659],{"class":92},[82,78914,53897],{"class":53863},[82,78916,53870],{"class":92},[82,78918,78919,78921,78923,78925,78927,78929],{"class":84,"line":413},[82,78920,54705],{"class":92},[82,78922,53907],{"class":53863},[82,78924,53910],{"class":2384},[82,78926,113],{"class":92},[82,78928,53915],{"class":96},[82,78930,53870],{"class":92},[82,78932,78933,78935,78937,78939,78941,78943,78945,78947,78949],{"class":84,"line":508},[82,78934,54705],{"class":92},[82,78936,53907],{"class":53863},[82,78938,17506],{"class":2384},[82,78940,113],{"class":92},[82,78942,53954],{"class":96},[82,78944,53934],{"class":2384},[82,78946,113],{"class":92},[82,78948,53961],{"class":96},[82,78950,53870],{"class":92},[82,78952,78953,78955,78957,78959,78961],{"class":84,"line":513},[82,78954,54705],{"class":92},[82,78956,53970],{"class":53863},[82,78958,53973],{"class":92},[82,78960,53970],{"class":53863},[82,78962,53870],{"class":92},[82,78964,78965,78967,78969],{"class":84,"line":1388},[82,78966,54347],{"class":92},[82,78968,53897],{"class":53863},[82,78970,53870],{"class":92},[82,78972,78973,78975,78977],{"class":84,"line":1394},[82,78974,3659],{"class":92},[82,78976,54362],{"class":53863},[82,78978,53870],{"class":92},[82,78980,78981,78983,78985],{"class":84,"line":1399},[82,78982,54705],{"class":92},[82,78984,54375],{"class":53863},[82,78986,53870],{"class":92},[82,78988,78989,78991,78993,78995,78997,78999,79002,79004,79006,79008,79010,79012,79015,79017],{"class":84,"line":1430},[82,78990,76307],{"class":92},[82,78992,60805],{"class":2384},[82,78994,93],{"class":92},[82,78996,1147],{"class":96},[82,78998,3715],{"class":112},[82,79000,79001],{"class":219},"java",[82,79003,3060],{"class":112},[82,79005,1147],{"class":96},[82,79007,233],{"class":92},[82,79009,77799],{"class":2384},[82,79011,93],{"class":92},[82,79013,79014],{"class":96},"'java'",[82,79016,78309],{"class":92},[82,79018,77810],{"class":2828},[82,79020,79021,79023,79025,79027,79029,79031,79033,79035,79037,79039,79041,79043,79046,79048],{"class":84,"line":1818},[82,79022,76307],{"class":92},[82,79024,60805],{"class":2384},[82,79026,93],{"class":92},[82,79028,1147],{"class":96},[82,79030,3715],{"class":112},[82,79032,79001],{"class":219},[82,79034,3060],{"class":112},[82,79036,1147],{"class":96},[82,79038,233],{"class":92},[82,79040,77799],{"class":2384},[82,79042,93],{"class":92},[82,79044,79045],{"class":96},"'Java'",[82,79047,78309],{"class":92},[82,79049,77933],{"class":2828},[82,79051,79052],{"class":84,"line":2082},[82,79053,79054],{"class":2828},"    \u002F\u002F 不区分大小写、\n",[82,79056,79057,79059,79061,79063,79065,79067,79069,79071,79073,79075,79077,79079,79081,79083,79085],{"class":84,"line":2233},[82,79058,76307],{"class":92},[82,79060,60805],{"class":2384},[82,79062,93],{"class":92},[82,79064,1147],{"class":96},[82,79066,3715],{"class":112},[82,79068,79001],{"class":219},[82,79070,3060],{"class":112},[82,79072,1147],{"class":96},[82,79074,3199],{"class":112},[82,79076,233],{"class":92},[82,79078,77799],{"class":2384},[82,79080,93],{"class":92},[82,79082,79045],{"class":96},[82,79084,78309],{"class":92},[82,79086,77810],{"class":2828},[82,79088,79089,79091,79093,79095],{"class":84,"line":2255},[82,79090,13811],{"class":112},[82,79092,76473],{"class":88},[82,79094,259],{"class":112},[82,79096,79097],{"class":96}," 'java是一门编程语言，学完java工资很高'\n",[82,79099,79100,79102,79105,79107,79110,79113,79115,79117,79119,79121,79124,79126,79129],{"class":84,"line":2260},[82,79101,13811],{"class":112},[82,79103,79104],{"class":88}," result",[82,79106,259],{"class":112},[82,79108,79109],{"class":92}," str.",[82,79111,79112],{"class":2384},"replace",[82,79114,93],{"class":92},[82,79116,1147],{"class":96},[82,79118,79001],{"class":219},[82,79120,1147],{"class":96},[82,79122,79123],{"class":112},"ig",[82,79125,100],{"class":92},[82,79127,79128],{"class":96},"'前端'",[82,79130,119],{"class":92},[82,79132,79133,79135,79137],{"class":84,"line":2298},[82,79134,76307],{"class":92},[82,79136,60805],{"class":2384},[82,79138,79139],{"class":92},"(result)\n",[82,79141,79142,79144,79146],{"class":84,"line":2303},[82,79143,54977],{"class":92},[82,79145,54375],{"class":53863},[82,79147,53870],{"class":92},[82,79149,79150,79152,79154],{"class":84,"line":2321},[82,79151,54347],{"class":92},[82,79153,54362],{"class":53863},[82,79155,53870],{"class":92},[82,79157,79158,79160,79162],{"class":84,"line":2533},[82,79159,54347],{"class":92},[82,79161,53198],{"class":53863},[82,79163,53870],{"class":92},[2671,79165,79166],{},"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":78,"searchDepth":157,"depth":157,"links":79168},[79169,79179,79191,79208,79215,79223],{"id":55920,"depth":157,"text":55921,"children":79170},[79171,79172,79173,79174,79175,79176,79177,79178],{"id":55924,"depth":404,"text":55925},{"id":55957,"depth":404,"text":55958},{"id":55996,"depth":404,"text":55997},{"id":56154,"depth":404,"text":56155},{"id":56202,"depth":404,"text":56203},{"id":56339,"depth":404,"text":56340},{"id":56661,"depth":404,"text":56662},{"id":59647,"depth":404,"text":59648},{"id":59675,"depth":157,"text":59676,"children":79180},[79181,79182,79183,79184,79185,79186,79187,79188,79189,79190],{"id":59679,"depth":404,"text":59680},{"id":59702,"depth":404,"text":59703},{"id":60617,"depth":404,"text":60618},{"id":61307,"depth":404,"text":61308},{"id":61589,"depth":404,"text":61590},{"id":65749,"depth":404,"text":65750},{"id":65919,"depth":404,"text":65920},{"id":66047,"depth":404,"text":66048},{"id":66072,"depth":404,"text":66073},{"id":67461,"depth":404,"text":67462},{"id":68614,"depth":157,"text":68615,"children":79192},[79193,79194,79195,79196,79197,79198,79199,79200,79201,79202,79203,79204,79205,79206,79207],{"id":68618,"depth":404,"text":68619},{"id":69272,"depth":404,"text":69273},{"id":70967,"depth":404,"text":70968},{"id":71008,"depth":404,"text":71009},{"id":71050,"depth":404,"text":71051},{"id":71064,"depth":404,"text":71065},{"id":71113,"depth":404,"text":71114},{"id":71125,"depth":404,"text":71126},{"id":71140,"depth":404,"text":71141},{"id":71176,"depth":404,"text":71177},{"id":71257,"depth":404,"text":71258},{"id":71385,"depth":404,"text":71386},{"id":71397,"depth":404,"text":71398},{"id":71416,"depth":404,"text":71417},{"id":73526,"depth":404,"text":73527},{"id":73545,"depth":157,"text":73546,"children":79209},[79210,79211,79212,79213,79214],{"id":73566,"depth":404,"text":73567},{"id":73586,"depth":404,"text":73587},{"id":73635,"depth":404,"text":73636},{"id":73760,"depth":404,"text":73761},{"id":73941,"depth":404,"text":73942},{"id":73959,"depth":157,"text":73960,"children":79216},[79217,79218,79219,79220,79221,79222],{"id":73974,"depth":404,"text":73975},{"id":74033,"depth":404,"text":74034},{"id":74057,"depth":404,"text":74058},{"id":74377,"depth":404,"text":74378},{"id":74409,"depth":404,"text":74410},{"id":74432,"depth":404,"text":74433},{"id":77498,"depth":157,"text":77499,"children":79224},[79225,79226],{"id":77532,"depth":404,"text":77533},{"id":77571,"depth":404,"text":77572},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55892,"description":2699},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79233,"title":79234,"body":79235,"description":2699,"extension":2700,"meta":95369,"navigation":485,"path":95370,"seo":95371,"stem":95372,"__hash__":95373},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79236,"toc":95305},[79237,79240,79243,79247,79251,79256,79261,79272,79276,79281,79284,79288,79291,79296,79300,79304,79307,79312,79315,79319,79322,79330,79333,79337,79342,79347,79350,79354,79359,79364,79367,79371,79376,79379,79384,79387,79392,79395,79400,79405,79408,79411,79415,79420,79425,79428,79432,79436,79439,79442,79445,79449,79453,79458,79463,79466,79470,79475,79480,79483,79486,79489,79492,79495,79498,79501,79504,79507,79512,79516,79521,79526,79529,79532,79535,79538,79541,79544,79547,79550,79554,79558,79561,79564,79567,79572,79574,79577,79580,79583,79586,79589,79592,79595,79598,79601,79604,79607,79610,79613,79618,79623,79628,79631,79635,79638,79643,79647,79649,79660,79665,79766,79769,79772,79775,79778,79781,79784,79787,79790,79792,79795,79798,79801,79804,79807,79809,79812,79815,79818,79821,79824,79827,79829,79832,79834,79836,79839,79843,79847,79850,79853,79856,79859,79862,79865,79868,79871,79874,79879,79999,80002,80005,80010,80013,80016,80019,80022,80027,80030,80033,80036,80039,80044,80047,80147,80212,80286,80290,80293,80296,80300,80303,80317,80346,80349,80352,80355,80358,80361,80364,80367,80369,80372,80375,80378,80381,80385,80390,80394,80399,80474,80477,80660,80663,80666,80669,80672,80675,80677,80680,80683,80686,80689,80692,80695,80697,80701,80704,80709,80712,80715,80718,80721,80723,80728,80731,80734,80737,80740,80742,80747,80750,80753,80755,80757,80760,80764,80767,80770,80775,80778,80781,80784,80834,80839,80843,80848,80851,80920,80923,80932,80936,80941,80944,80947,80955,80958,80975,82777,82781,82785,82790,82793,82797,82803,82809,82961,82966,82971,82974,82977,82980,82983,82986,82989,82992,82995,82998,83001,83004,83007,83012,83016,83019,83030,83034,83039,83042,83045,83048,83051,83054,83056,83059,83062,83065,83068,83070,83087,83090,83094,83097,83102,83107,83110,83113,83117,83120,83123,83132,83135,83139,83142,83147,83152,83219,83223,83226,83229,83234,83239,83325,83330,83334,83337,83340,83355,83358,83363,83367,83372,83481,83484,83495,83645,83649,83654,83763,83767,83772,83777,83782,83785,83792,83812,83848,84012,84017,84020,84025,84032,84035,84038,84041,84100,84156,84212,84216,84221,84536,84539,84543,84546,84551,84660,84665,84669,84674,84678,84749,84753,84755,84758,84761,84799,85075,85079,85096,85162,85196,85200,85203,85208,85237,85244,85253,85258,85273,85278,85287,85290,85427,85431,85493,85497,85502,85747,85751,85756,85759,85762,85765,85768,85772,85777,87358,87362,87366,87372,87375,87380,87384,87387,87392,87395,87406,87410,87415,87419,87424,87429,87432,87437,87441,87445,87448,87453,87458,87461,87464,87467,87589,87594,87696,87699,87702,87706,87711,87883,87888,87892,87895,87900,87966,87971,87974,88105,88108,88113,88116,88119,88210,88215,88218,88221,88224,88227,88232,88237,88240,88245,88250,88255,88259,88262,88265,88270,88275,88280,88285,88339,88342,88345,88350,88353,88356,88361,88366,88371,88375,88380,88394,88399,88402,88407,88411,88416,88421,88426,88431,88436,88441,88446,88451,88454,88458,88463,88466,88469,88472,88477,88482,88485,88488,88492,88495,88498,88503,88508,88513,88518,88521,88526,88531,88592,88597,88600,88605,89845,89850,89854,89858,89863,89866,89871,89876,89879,89884,89886,89891,89895,89898,89901,89912,89916,89921,89926,89981,89986,89991,89996,90207,90212,90216,90221,90224,90226,90229,90232,90677,90682,90689,90695,90698,90701,90965,90970,90974,91239,91244,91248,91253,91258,91263,91268,91599,91602,91607,91612,91615,91619,91623,91628,91633,91638,91643,91648,91653,91657,91660,91665,91670,91673,91747,91752,91757,91762,91764,91767,92137,92142,92147,92152,92155,92158,92260,92265,92270,92373,92377,92382,92386,92390,92395,92400,92403,92408,92411,92414,92807,92812,92815,92818,92821,92824,93344,93348,93353,93358,93363,93366,93371,93374,93377,93759,93764,93766,93768,93771,93774,94286,94290,94351,94354,94357,94360,94364,94367,94372,94377,95302],[10,79238,79234],{"id":79239},"_4js进阶",[19,79241,79242],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79244,79246],{"id":79245},"_41-作用域","4.1 作用域",[65,79248,79250],{"id":79249},"_411-局部作用域","4.1.1 局部作用域",[19,79252,79253],{},[4078,79254],{"alt":78,"src":79255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79257,79258],{},[4078,79259],{"alt":78,"src":79260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3755,79262,79263,79266,79269],{},[29,79264,79265],{},"函数作用域在函数内部",[29,79267,79268],{},"块级作用域在{}",[29,79270,79271],{},"对象的那个{}不是作用域，不是块作用域",[65,79273,79275],{"id":79274},"_412-全局作用域","4.1.2 全局作用域",[19,79277,79278],{},[4078,79279],{"alt":78,"src":79280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,79282,79283],{},"window.a=10不要这样写",[65,79285,79287],{"id":79286},"_413-作用域链","4.1.3 作用域链",[19,79289,79290],{},"变量查找机制",[19,79292,79293],{},[4078,79294],{"alt":78,"src":79295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79297,79299],{"id":79298},"_42-垃圾回收机制","4.2 垃圾回收机制",[65,79301,79303],{"id":79302},"_421-大体介绍","4.2.1 大体介绍",[19,79305,79306],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,79308,79309],{},[4078,79310],{"alt":78,"src":79311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,79313,79314],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[65,79316,79318],{"id":79317},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,79320,79321],{},"堆栈空间分配区别：",[26,79323,79324,79327],{},[29,79325,79326],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,79328,79329],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79331,79332],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24582,79334,79336],{"id":79335},"_4221-引用计数","4.2.2.1 引用计数",[19,79338,79339],{},[4078,79340],{"alt":78,"src":79341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79343,79344],{},[4078,79345],{"alt":78,"src":79346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79348,79349],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24582,79351,79353],{"id":79352},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79355,79356],{},[4078,79357],{"alt":78,"src":79358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79360,79361],{},[4078,79362],{"alt":78,"src":79363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79365,79366],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79368,79370],{"id":79369},"_43-闭包","4.3 闭包",[19,79372,79373],{},[4078,79374],{"alt":78,"src":79375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79377,79378],{},"闭包：内层函数+外层函数的变量",[19,79380,79381],{},[4078,79382],{"alt":78,"src":79383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79385,79386],{},"closure就是闭包",[19,79388,79389],{},[4078,79390],{"alt":78,"src":79391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79393,79394],{},"内层函数必须包含外层函数的变量才是闭包",[19,79396,79397],{},[4078,79398],{"alt":78,"src":79399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79401,79402],{},[4078,79403],{"alt":78,"src":79404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79406,79407],{},"闭包可能会引起内存泄漏",[19,79409,79410],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79412,79414],{"id":79413},"_44-变量提升","4.4 变量提升",[19,79416,79417],{},[4078,79418],{"alt":78,"src":79419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79421,79422],{},[4078,79423],{"alt":78,"src":79424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79426,79427],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79429,79431],{"id":79430},"_45-函数进阶","4.5 函数进阶",[65,79433,79435],{"id":79434},"_451-函数提升","4.5.1 函数提升",[19,79437,79438],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79440,79441],{},"只提升函数声明，不提升函数调用",[54375,79443,79444],{},"\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",[65,79446,79448],{"id":79447},"_452-函数参数","4.5.2 函数参数",[24582,79450,79452],{"id":79451},"_4521-动态参数","4.5.2.1 动态参数",[19,79454,79455],{},[4078,79456],{"alt":78,"src":79457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79459,79460],{},[4078,79461],{"alt":78,"src":79462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79464,79465],{},"箭头函数里边没有arguments",[24582,79467,79469],{"id":79468},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79471,79472],{},[4078,79473],{"alt":78,"src":79474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79476,79477],{},[4078,79478],{"alt":78,"src":79479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79481,79482],{},"剩余参数使用的时候不需要写...",[19,79484,79485],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79487,79488],{},"  function getSum(a,b,...arr) {",[19,79490,79491],{},"  console.log(11)",[19,79493,79494],{},"  }",[19,79496,79497],{},"  getSum(1,2,3,4)",[19,79499,79500],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79502,79503],{},"  getSum(1,2)",[19,79505,79506],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79508,79509],{},[4078,79510],{"alt":78,"src":79511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24582,79513,79515],{"id":79514},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79517,79518],{},[4078,79519],{"alt":78,"src":79520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79522,79523],{},[4078,79524],{"alt":78,"src":79525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79527,79528],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79530,79531],{},"展开运算符可以用于数组之间的合并：",[19,79533,79534],{},"const arr1 = [1, 2, 3]",[19,79536,79537],{},"const arr2 = [3, 4, 5]",[19,79539,79540],{},"const arr = [...arr1, ...arr2]",[19,79542,79543],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79545,79546],{},"剩余参数：函数参数使用，得到真数组",[19,79548,79549],{},"展开运算符：数组中使用，数组展开",[65,79551,79553],{"id":79552},"_453-箭头函数","4.5.3 箭头函数",[24582,79555,79557],{"id":79556},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79559,79560],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79562,79563],{},"它不是万能的！！！",[19,79565,79566],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79568,79569],{},[4078,79570],{"alt":78,"src":79571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79573,2801],{},[19,79575,79576],{},"① 只有一个形参的时候，可以省略小括号：",[19,79578,79579],{},"const fn=x=>{console.log(x)}",[19,79581,79582],{},"② 只有一行代码时可以省略大括号：",[19,79584,79585],{},"const fn=x=>console.log(11)",[19,79587,79588],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79590,79591],{},"const fn=x=>x+x",[19,79593,79594],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79596,79597],{},"⑤ 阻止表单默认提交：",[19,79599,79600],{},"const form = document.querySelector('form')",[19,79602,79603],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79605,79606],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79608,79609],{},"const fn=uname=>({uname:uname})",[19,79611,79612],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79614,79615],{},[4078,79616],{"alt":78,"src":79617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79619,79620],{},[4078,79621],{"alt":78,"src":79622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79624,79625],{},[4078,79626],{"alt":78,"src":79627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79629,79630],{},"一定不要忘记用()，有()就理解为自带return",[24582,79632,79634],{"id":79633},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79636,79637],{},"箭头函数是没有动态参数的arguments",[19,79639,79640],{},[4078,79641],{"alt":78,"src":79642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24582,79644,79646],{"id":79645},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79648,13922],{},[26,79650,79651,79654,79657],{},[29,79652,79653],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,79655,79656],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,79658,79659],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79661,79662],{},[4078,79663],{"alt":78,"src":79664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[73,79666,79668],{"className":55627,"code":79667,"language":55629,"meta":78,"style":78},"  \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",[32,79669,79670,79678,79683,79688,79693,79698,79703,79707,79712,79716,79720,79725,79730,79735,79739,79743,79748,79753,79758],{"__ignoreMap":78},[82,79671,79672,79674,79676],{"class":84,"line":85},[82,79673,54705],{"class":92},[82,79675,54375],{"class":53863},[82,79677,53870],{"class":92},[82,79679,79680],{"class":84,"line":157},[82,79681,79682],{"class":92},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[82,79684,79685],{"class":84,"line":404},[82,79686,79687],{"class":92},"    console.log(this) \u002F\u002F指向window\n",[82,79689,79690],{"class":84,"line":413},[82,79691,79692],{"class":92},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[82,79694,79695],{"class":84,"line":508},[82,79696,79697],{"class":92},"    function fn() {\n",[82,79699,79700],{"class":84,"line":513},[82,79701,79702],{"class":92},"      console.log(this)  \u002F\u002F指向window\n",[82,79704,79705],{"class":84,"line":1388},[82,79706,4787],{"class":92},[82,79708,79709],{"class":84,"line":1394},[82,79710,79711],{"class":92},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[82,79713,79714],{"class":84,"line":1399},[82,79715,486],{"emptyLinePlaceholder":485},[82,79717,79718],{"class":84,"line":1430},[82,79719,74079],{"class":92},[82,79721,79722],{"class":84,"line":1818},[82,79723,79724],{"class":92},"      name: 'andy',\n",[82,79726,79727],{"class":84,"line":2082},[82,79728,79729],{"class":92},"      sayHai: function () {\n",[82,79731,79732],{"class":84,"line":2233},[82,79733,79734],{"class":92},"        console.log(this)\n",[82,79736,79737],{"class":84,"line":2255},[82,79738,54958],{"class":92},[82,79740,79741],{"class":84,"line":2260},[82,79742,4787],{"class":92},[82,79744,79745],{"class":84,"line":2298},[82,79746,79747],{"class":92},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[82,79749,79750],{"class":84,"line":2303},[82,79751,79752],{"class":92},"    \u002F\u002F 2.箭头函数的this\n",[82,79754,79755],{"class":84,"line":2321},[82,79756,79757],{"class":92},"    const fn = () => console.log(this)\n",[82,79759,79760,79762,79764],{"class":84,"line":2533},[82,79761,54977],{"class":92},[82,79763,54375],{"class":53863},[82,79765,53870],{"class":92},[19,79767,79768],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79770,79771],{},"const fn = () => console.log(this)",[19,79773,79774],{},"fn() \u002F\u002F指向window",[19,79776,79777],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79779,79780],{},"①",[19,79782,79783],{},"const obj = {",[19,79785,79786],{},"uname: 'pink老师',",[19,79788,79789],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79791,3695],{},[19,79793,79794],{},"调用对象里边的函数",[19,79796,79797],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79799,79800],{},"obj.sayHai()",[19,79802,79803],{},"②",[19,79805,79806],{},"const obj1 = {",[19,79808,79786],{},[19,79810,79811],{},"sayHai: function () {",[19,79813,79814],{},"let i = 10",[19,79816,79817],{},"const count = () => {",[19,79819,79820],{},"console.log(this)",[19,79822,79823],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79825,79826],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79828,3695],{},[19,79830,79831],{},"count()",[19,79833,3695],{},[19,79835,3695],{},[19,79837,79838],{},"obj1.sayHai()",[14,79840,79842],{"id":79841},"_46-解构赋值","4.6 解构赋值",[65,79844,79846],{"id":79845},"_461-数组解构","4.6.1 数组解构",[19,79848,79849],{},"以前要是使用数组中的值的话：",[19,79851,79852],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79854,79855],{},"const arr=[100,60,80]",[19,79857,79858],{},"const max=arr[0]",[19,79860,79861],{},"const min=arr[1]",[19,79863,79864],{},"const avg=arr[2]",[19,79866,79867],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79869,79870],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79872,79873],{},"这个写法就类似于上边的那种用很多const的方法",[19,79875,79876],{},[4078,79877],{"alt":78,"src":79878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[73,79880,79882],{"className":53196,"code":79881,"language":53198,"meta":78,"style":78},"①变量之间交换值:\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",[32,79883,79884,79889,79894,79899,79904,79909,79913,79917,79922,79926,79931,79936,79940,79945,79950,79961,79971,79976,79981,79986,79990,79994],{"__ignoreMap":78},[82,79885,79886],{"class":84,"line":85},[82,79887,79888],{"class":92},"①变量之间交换值:\n",[82,79890,79891],{"class":84,"line":157},[82,79892,79893],{"class":92},"let a=1\n",[82,79895,79896],{"class":84,"line":404},[82,79897,79898],{"class":92},"let b=2;\n",[82,79900,79901],{"class":84,"line":413},[82,79902,79903],{"class":92},"必须加这行代码，不然就会报错\n",[82,79905,79906],{"class":84,"line":508},[82,79907,79908],{"class":92},"[b,a]=[a,b]\n",[82,79910,79911],{"class":84,"line":513},[82,79912,486],{"emptyLinePlaceholder":485},[82,79914,79915],{"class":84,"line":1388},[82,79916,486],{"emptyLinePlaceholder":485},[82,79918,79919],{"class":84,"line":1394},[82,79920,79921],{"class":92},"可以写成下面的方式：\n",[82,79923,79924],{"class":84,"line":1399},[82,79925,79893],{"class":92},[82,79927,79928],{"class":84,"line":1430},[82,79929,79930],{"class":92},"let b=2\n",[82,79932,79933],{"class":84,"line":1818},[82,79934,79935],{"class":92},";[b,a]=[a,b]\n",[82,79937,79938],{"class":84,"line":2082},[82,79939,486],{"emptyLinePlaceholder":485},[82,79941,79942],{"class":84,"line":2233},[82,79943,79944],{"class":92},"②排序\n",[82,79946,79947],{"class":84,"line":2255},[82,79948,79949],{"class":92},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[82,79951,79952,79955,79958],{"class":84,"line":2260},[82,79953,79954],{"class":92},"for (let i = 0; i ",[82,79956,3659],{"class":79957},"s7hpK",[82,79959,79960],{"class":92}," arr1.length; i++) {\n",[82,79962,79963,79966,79968],{"class":84,"line":2298},[82,79964,79965],{"class":92},"   for (let j = 0; j ",[82,79967,3659],{"class":79957},[82,79969,79970],{"class":92}," arr1.length - 1; j++) {\n",[82,79972,79973],{"class":84,"line":2303},[82,79974,79975],{"class":92},"      if (arr1[j] > arr1[j + 1]) {\n",[82,79977,79978],{"class":84,"line":2321},[82,79979,79980],{"class":92},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[82,79982,79983],{"class":84,"line":2533},[82,79984,79985],{"class":92},"       }\n",[82,79987,79988],{"class":84,"line":2538},[82,79989,6904],{"class":92},[82,79991,79992],{"class":84,"line":2548},[82,79993,1391],{"class":92},[82,79995,79996],{"class":84,"line":2579},[82,79997,79998],{"class":92},"console.log(arr1)\n",[19,80000,80001],{},"数组解构的细节：",[19,80003,80004],{},"①变量多，单元值少",[19,80006,80007],{},[4078,80008],{"alt":78,"src":80009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,80011,80012],{},"防止出现undefined的方法：",[19,80014,80015],{},"const [a=0,b=0] =[1]",[19,80017,80018],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,80020,80021],{},"②变量少，单元值多",[19,80023,80024],{},[4078,80025],{"alt":78,"src":80026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,80028,80029],{},"此时可以使用剩余参数来接收多余的值",[19,80031,80032],{},"const [a,b,...c]=[1,2,3,4]",[19,80034,80035],{},"console.log(c) 输出[3,4]",[19,80037,80038],{},"③可以按需导入，忽略某些返回值",[19,80040,80041],{},[4078,80042],{"alt":78,"src":80043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,80045,80046],{},"④支持多维数组的结构",[73,80048,80052],{"className":80049,"code":80050,"language":80051,"meta":78,"style":78},"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",[32,80053,80054,80082,80098,80113,80128],{"__ignoreMap":78},[82,80055,80056,80058,80060,80062,80064,80066,80068,80070,80073,80075,80077,80079],{"class":84,"line":85},[82,80057,9384],{"class":112},[82,80059,54395],{"class":92},[82,80061,113],{"class":112},[82,80063,847],{"class":92},[82,80065,2283],{"class":88},[82,80067,100],{"class":92},[82,80069,1425],{"class":88},[82,80071,80072],{"class":92},", [",[82,80074,2841],{"class":88},[82,80076,100],{"class":92},[82,80078,3051],{"class":88},[82,80080,80081],{"class":92},"]]\n",[82,80083,80084,80087,80089,80091,80093,80095],{"class":84,"line":157},[82,80085,80086],{"class":92},"console.",[82,80088,60805],{"class":2384},[82,80090,6446],{"class":92},[82,80092,2244],{"class":88},[82,80094,6811],{"class":92},[82,80096,80097],{"class":2828},"  \u002F\u002F1\n",[82,80099,80100,80102,80104,80106,80108,80110],{"class":84,"line":404},[82,80101,80086],{"class":92},[82,80103,60805],{"class":2384},[82,80105,6446],{"class":92},[82,80107,2283],{"class":88},[82,80109,6811],{"class":92},[82,80111,80112],{"class":2828},"  \u002F\u002F2\n",[82,80114,80115,80117,80119,80121,80123,80125],{"class":84,"line":413},[82,80116,80086],{"class":92},[82,80118,60805],{"class":2384},[82,80120,6446],{"class":92},[82,80122,1425],{"class":88},[82,80124,6811],{"class":92},[82,80126,80127],{"class":2828},"  \u002F\u002F[3,4]\n",[82,80129,80130,80132,80134,80136,80138,80140,80142,80144],{"class":84,"line":508},[82,80131,80086],{"class":92},[82,80133,60805],{"class":2384},[82,80135,6446],{"class":92},[82,80137,1425],{"class":88},[82,80139,7496],{"class":92},[82,80141,2244],{"class":88},[82,80143,6811],{"class":92},[82,80145,80146],{"class":2828},"  \u002F\u002F3\n",[73,80148,80150],{"className":80049,"code":80149,"language":80051,"meta":78,"style":78},"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",[32,80151,80152,80179,80190,80201],{"__ignoreMap":78},[82,80153,80154,80156,80159,80161,80163,80165,80167,80169,80171,80173,80175,80177],{"class":84,"line":85},[82,80155,9384],{"class":112},[82,80157,80158],{"class":92}," [a, b, c] ",[82,80160,113],{"class":112},[82,80162,847],{"class":92},[82,80164,2283],{"class":88},[82,80166,100],{"class":92},[82,80168,1425],{"class":88},[82,80170,80072],{"class":92},[82,80172,2841],{"class":88},[82,80174,100],{"class":92},[82,80176,3051],{"class":88},[82,80178,80081],{"class":92},[82,80180,80181,80183,80185,80188],{"class":84,"line":157},[82,80182,80086],{"class":92},[82,80184,60805],{"class":2384},[82,80186,80187],{"class":92},"(a)",[82,80189,80097],{"class":2828},[82,80191,80192,80194,80196,80199],{"class":84,"line":404},[82,80193,80086],{"class":92},[82,80195,60805],{"class":2384},[82,80197,80198],{"class":92},"(b)",[82,80200,80112],{"class":2828},[82,80202,80203,80205,80207,80210],{"class":84,"line":413},[82,80204,80086],{"class":92},[82,80206,60805],{"class":2384},[82,80208,80209],{"class":92},"(c)",[82,80211,80127],{"class":2828},[73,80213,80215],{"className":80049,"code":80214,"language":80051,"meta":78,"style":78},"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",[32,80216,80217,80244,80254,80264,80274],{"__ignoreMap":78},[82,80218,80219,80221,80224,80226,80228,80230,80232,80234,80236,80238,80240,80242],{"class":84,"line":85},[82,80220,9384],{"class":112},[82,80222,80223],{"class":92}," [a, b, [c, d]] ",[82,80225,113],{"class":112},[82,80227,847],{"class":92},[82,80229,2283],{"class":88},[82,80231,100],{"class":92},[82,80233,1425],{"class":88},[82,80235,80072],{"class":92},[82,80237,2841],{"class":88},[82,80239,100],{"class":92},[82,80241,3051],{"class":88},[82,80243,80081],{"class":92},[82,80245,80246,80248,80250,80252],{"class":84,"line":157},[82,80247,80086],{"class":92},[82,80249,60805],{"class":2384},[82,80251,80187],{"class":92},[82,80253,80097],{"class":2828},[82,80255,80256,80258,80260,80262],{"class":84,"line":404},[82,80257,80086],{"class":92},[82,80259,60805],{"class":2384},[82,80261,80198],{"class":92},[82,80263,80112],{"class":2828},[82,80265,80266,80268,80270,80272],{"class":84,"line":413},[82,80267,80086],{"class":92},[82,80269,60805],{"class":2384},[82,80271,80209],{"class":92},[82,80273,80146],{"class":2828},[82,80275,80276,80278,80280,80283],{"class":84,"line":508},[82,80277,80086],{"class":92},[82,80279,60805],{"class":2384},[82,80281,80282],{"class":92},"(d)",[82,80284,80285],{"class":2828},"  \u002F\u002F4\n",[65,80287,80289],{"id":80288},"_462-对象解构","4.6.2 对象解构",[19,80291,80292],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,80294,80295],{},"用的非常非常多！！！！！！",[24582,80297,80299],{"id":80298},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,80301,80302],{},"基本语法：",[26,80304,80305,80308,80311,80314],{},[29,80306,80307],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,80309,80310],{},"对象属性的值将被赋值给与属性名相同的变量",[29,80312,80313],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,80315,80316],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[73,80318,80320],{"className":53196,"code":80319,"language":53198,"meta":78,"style":78},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[32,80321,80322,80327,80332,80337,80341],{"__ignoreMap":78},[82,80323,80324],{"class":84,"line":85},[82,80325,80326],{"class":92},"const obj = {\n",[82,80328,80329],{"class":84,"line":157},[82,80330,80331],{"class":92},"   uname: 'pink老师',\n",[82,80333,80334],{"class":84,"line":404},[82,80335,80336],{"class":92},"   age: 18,\n",[82,80338,80339],{"class":84,"line":413},[82,80340,1391],{"class":92},[82,80342,80343],{"class":84,"line":508},[82,80344,80345],{"class":92},"const { uname, age } = obj\n",[19,80347,80348],{},"上方代码这样写等价于：",[19,80350,80351],{},"const uname等价于obj.uname",[19,80353,80354],{},"变量名可以重新改名：",[19,80356,80357],{},"const uname='red老师'",[19,80359,80360],{},"const user={",[19,80362,80363],{},"  uname:'pink老师',",[19,80365,80366],{},"  age:18",[19,80368,3695],{},[19,80370,80371],{},"const {uname,age}=user",[19,80373,80374],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80376,80377],{},"const {旧变量名：新变量名}=对象",[19,80379,80380],{},"const {uname:username,age}=user",[24582,80382,80384],{"id":80383},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80386,80387],{},[4078,80388],{"alt":78,"src":80389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24582,80391,80393],{"id":80392},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80395,80396],{},[4078,80397],{"alt":78,"src":80398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[73,80400,80402],{"className":55627,"code":80401,"language":55629,"meta":78,"style":78},"  \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",[32,80403,80404,80412,80417,80422,80427,80432,80437,80442,80447,80452,80456,80461,80466],{"__ignoreMap":78},[82,80405,80406,80408,80410],{"class":84,"line":85},[82,80407,54705],{"class":92},[82,80409,54375],{"class":53863},[82,80411,53870],{"class":92},[82,80413,80414],{"class":84,"line":157},[82,80415,80416],{"class":92},"    const pig = {\n",[82,80418,80419],{"class":84,"line":404},[82,80420,80421],{"class":92},"      name: '佩奇',\n",[82,80423,80424],{"class":84,"line":413},[82,80425,80426],{"class":92},"      family: {\n",[82,80428,80429],{"class":84,"line":508},[82,80430,80431],{"class":92},"        mother: '猪妈妈',\n",[82,80433,80434],{"class":84,"line":513},[82,80435,80436],{"class":92},"        father: '猪爸爸',\n",[82,80438,80439],{"class":84,"line":1388},[82,80440,80441],{"class":92},"        sister: '乔治'\n",[82,80443,80444],{"class":84,"line":1394},[82,80445,80446],{"class":92},"      },\n",[82,80448,80449],{"class":84,"line":1399},[82,80450,80451],{"class":92},"      age: 6\n",[82,80453,80454],{"class":84,"line":1430},[82,80455,4787],{"class":92},[82,80457,80458],{"class":84,"line":1818},[82,80459,80460],{"class":92},"    \u002F\u002F 多级对象解构\n",[82,80462,80463],{"class":84,"line":2082},[82,80464,80465],{"class":92},"    const { name, family: { mother, father, sister }, age } = pig\n",[82,80467,80468,80470,80472],{"class":84,"line":2233},[82,80469,54977],{"class":92},[82,80471,54375],{"class":53863},[82,80473,53870],{"class":92},[19,80475,80476],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[73,80478,80481],{"className":80479,"code":80480,"language":79001,"meta":78,"style":78},"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",[32,80482,80483,80488,80499,80511,80523,80532,80536,80547,80559,80569,80574,80578,80588,80599,80608,80612,80616,80627,80638,80647,80651,80656],{"__ignoreMap":78},[82,80484,80485],{"class":84,"line":85},[82,80486,80487],{"class":2828},"    \u002F\u002F 这是后台传递过来的数据\n",[82,80489,80490,80492,80495,80497],{"class":84,"line":157},[82,80491,13811],{"class":112},[82,80493,80494],{"class":92}," msg ",[82,80496,113],{"class":112},[82,80498,1349],{"class":92},[82,80500,80501,80504,80506,80509],{"class":84,"line":404},[82,80502,80503],{"class":96},"      \"code\"",[82,80505,3608],{"class":112},[82,80507,80508],{"class":88}," 200",[82,80510,1363],{"class":92},[82,80512,80513,80516,80518,80521],{"class":84,"line":413},[82,80514,80515],{"class":96},"      \"msg\"",[82,80517,3608],{"class":112},[82,80519,80520],{"class":96}," \"获取新闻列表成功\"",[82,80522,1363],{"class":92},[82,80524,80525,80528,80530],{"class":84,"line":508},[82,80526,80527],{"class":96},"      \"data\"",[82,80529,3608],{"class":112},[82,80531,1463],{"class":92},[82,80533,80534],{"class":84,"line":513},[82,80535,5109],{"class":92},[82,80537,80538,80541,80543,80545],{"class":84,"line":1388},[82,80539,80540],{"class":96},"          \"id\"",[82,80542,3608],{"class":112},[82,80544,27703],{"class":88},[82,80546,1363],{"class":92},[82,80548,80549,80552,80554,80557],{"class":84,"line":1394},[82,80550,80551],{"class":96},"          \"title\"",[82,80553,3608],{"class":112},[82,80555,80556],{"class":96}," \"5G商用自己，三大运用商收入下降\"",[82,80558,1363],{"class":92},[82,80560,80561,80564,80566],{"class":84,"line":1399},[82,80562,80563],{"class":96},"          \"count\"",[82,80565,3608],{"class":112},[82,80567,80568],{"class":88}," 58\n",[82,80570,80571],{"class":84,"line":1430},[82,80572,80573],{"class":92},"        },\n",[82,80575,80576],{"class":84,"line":1818},[82,80577,5109],{"class":92},[82,80579,80580,80582,80584,80586],{"class":84,"line":2082},[82,80581,80540],{"class":96},[82,80583,3608],{"class":112},[82,80585,17341],{"class":88},[82,80587,1363],{"class":92},[82,80589,80590,80592,80594,80597],{"class":84,"line":2233},[82,80591,80551],{"class":96},[82,80593,3608],{"class":112},[82,80595,80596],{"class":96}," \"国际媒体头条速览\"",[82,80598,1363],{"class":92},[82,80600,80601,80603,80605],{"class":84,"line":2255},[82,80602,80563],{"class":96},[82,80604,3608],{"class":112},[82,80606,80607],{"class":88}," 56\n",[82,80609,80610],{"class":84,"line":2260},[82,80611,80573],{"class":92},[82,80613,80614],{"class":84,"line":2298},[82,80615,5109],{"class":92},[82,80617,80618,80620,80622,80625],{"class":84,"line":2303},[82,80619,80540],{"class":96},[82,80621,3608],{"class":112},[82,80623,80624],{"class":88}," 3",[82,80626,1363],{"class":92},[82,80628,80629,80631,80633,80636],{"class":84,"line":2321},[82,80630,80551],{"class":96},[82,80632,3608],{"class":112},[82,80634,80635],{"class":96}," \"乌克兰和俄罗斯持续冲突\"",[82,80637,1363],{"class":92},[82,80639,80640,80642,80644],{"class":84,"line":2533},[82,80641,80563],{"class":96},[82,80643,3608],{"class":112},[82,80645,80646],{"class":88}," 1669\n",[82,80648,80649],{"class":84,"line":2538},[82,80650,80573],{"class":92},[82,80652,80653],{"class":84,"line":2548},[82,80654,80655],{"class":92},"      ]\n",[82,80657,80658],{"class":84,"line":2579},[82,80659,4787],{"class":92},[19,80661,80662],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80664,80665],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80667,80668],{},"\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,80670,80671],{},"function({data}) {",[19,80673,80674],{},"console.log(data)",[19,80676,3695],{},[19,80678,80679],{},"render(msg)",[19,80681,80682],{},"实参传递给形参的时候解构了",[19,80684,80685],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80687,80688],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80690,80691],{},"function render({data:mydata}) {",[19,80693,80694],{},"  console.log(data)",[19,80696,3695],{},[65,80698,80700],{"id":80699},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80702,80703],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,80705,80706],{},[29,80707,80708],{},"如果对一个数组进行遍历，有两种方式：",[19,80710,80711],{},"①法1",[19,80713,80714],{},"const arr=[1,2,3]",[19,80716,80717],{},"arr.map(function(item,index) {",[19,80719,80720],{},"  console.log(item)",[19,80722,55024],{},[19,80724,80725],{},[4078,80726],{"alt":78,"src":80727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80729,80730],{},"②法2",[19,80732,80733],{},"const str='pink'",[19,80735,80736],{},"[1,2,3].map(function(item,index) {",[19,80738,80739],{},"console.log(item)",[19,80741,55024],{},[19,80743,80744],{},[4078,80745],{"alt":78,"src":80746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80748,80749],{},"此时会报错",[19,80751,80752],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80754,80739],{},[19,80756,55024],{},[19,80758,80759],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80761,80763],{"id":80762},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80765,80766],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80768,80769],{},"可以理解为加强版的for循环",[19,80771,80772],{},[4078,80773],{"alt":78,"src":80774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80776,80777],{},"里边不写return，不返回数组，只遍历不返回",[19,80779,80780],{},"map是返回数组",[19,80782,80783],{},"forEach主要用于遍历数组对象",[73,80785,80787],{"className":55627,"code":80786,"language":55629,"meta":78,"style":78},"  \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",[32,80788,80789,80797,80802,80807,80812,80817,80821,80826],{"__ignoreMap":78},[82,80790,80791,80793,80795],{"class":84,"line":85},[82,80792,54705],{"class":92},[82,80794,54375],{"class":53863},[82,80796,53870],{"class":92},[82,80798,80799],{"class":84,"line":157},[82,80800,80801],{"class":92},"    const arr = ['red', 'green', 'pink']\n",[82,80803,80804],{"class":84,"line":404},[82,80805,80806],{"class":92},"    const result = arr.forEach(function (item, index) {\n",[82,80808,80809],{"class":84,"line":413},[82,80810,80811],{"class":92},"      console.log(item)\n",[82,80813,80814],{"class":84,"line":508},[82,80815,80816],{"class":92},"      console.log(index)\n",[82,80818,80819],{"class":84,"line":513},[82,80820,36029],{"class":92},[82,80822,80823],{"class":84,"line":1388},[82,80824,80825],{"class":92},"    console.log(result)\n",[82,80827,80828,80830,80832],{"class":84,"line":1394},[82,80829,54977],{"class":92},[82,80831,54375],{"class":53863},[82,80833,53870],{"class":92},[19,80835,80836],{},[4078,80837],{"alt":78,"src":80838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80840,80842],{"id":80841},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80844,80845],{},[4078,80846],{"alt":78,"src":80847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80849,80850],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[73,80852,80854],{"className":55627,"code":80853,"language":55629,"meta":78,"style":78},"\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",[32,80855,80856,80864,80872,80877,80882,80886,80890,80895,80899,80904,80912],{"__ignoreMap":78},[82,80857,80858,80860,80862],{"class":84,"line":85},[82,80859,3659],{"class":92},[82,80861,54362],{"class":53863},[82,80863,53870],{"class":92},[82,80865,80866,80868,80870],{"class":84,"line":157},[82,80867,54705],{"class":92},[82,80869,54375],{"class":53863},[82,80871,53870],{"class":92},[82,80873,80874],{"class":84,"line":404},[82,80875,80876],{"class":92},"    const arr = [10, 20, 30]\n",[82,80878,80879],{"class":84,"line":413},[82,80880,80881],{"class":92},"    const newArr = arr.filter(function (item, index) {\n",[82,80883,80884],{"class":84,"line":508},[82,80885,80811],{"class":92},[82,80887,80888],{"class":84,"line":513},[82,80889,80816],{"class":92},[82,80891,80892],{"class":84,"line":1388},[82,80893,80894],{"class":92},"      return item >= 20\n",[82,80896,80897],{"class":84,"line":1394},[82,80898,36029],{"class":92},[82,80900,80901],{"class":84,"line":1399},[82,80902,80903],{"class":92},"    console.log(newArr)\n",[82,80905,80906,80908,80910],{"class":84,"line":1430},[82,80907,54977],{"class":92},[82,80909,54375],{"class":53863},[82,80911,53870],{"class":92},[82,80913,80914,80916,80918],{"class":84,"line":1818},[82,80915,54347],{"class":92},[82,80917,54362],{"class":53863},[82,80919,53870],{"class":92},[19,80921,80922],{},"这个也可以写成箭头函数：",[73,80924,80926],{"className":53196,"code":80925,"language":53198,"meta":78,"style":78},"const newArr = arr.filter(item => item >= 20)\n",[32,80927,80928],{"__ignoreMap":78},[82,80929,80930],{"class":84,"line":85},[82,80931,80925],{"class":92},[14,80933,80935],{"id":80934},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80937,80938],{},[4078,80939],{"alt":78,"src":80940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80942,80943],{},"步骤：",[19,80945,80946],{},"①：渲染页面模块",[3755,80948,80949,80952],{},[29,80950,80951],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80953,80954],{},"用forEach+字符串的形式",[19,80956,80957],{},"②：点击不同需求，显示不同页面内容",[3755,80959,80960,80963,80966,80969,80972],{},[29,80961,80962],{},"点击采取事件委托方式 .filter",[29,80964,80965],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80967,80968],{},"筛选条件是根据点击的 data-index 来判断",[29,80970,80971],{},"可以使用对象解构，把事件对象解构",[29,80973,80974],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[73,80976,80978],{"className":53196,"code":80977,"language":53198,"meta":78,"style":78},"\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",[32,80979,80980,80990,81004,81008,81016,81030,81050,81062,81070,81076,81086,81096,81106,81110,81114,81120,81133,81145,81155,81167,81171,81175,81182,81195,81207,81224,81242,81255,81259,81263,81275,81285,81289,81293,81300,81341,81368,81378,81382,81386,81394,81406,81410,81414,81422,81434,81446,81457,81461,81465,81474,81486,81497,81501,81505,81514,81526,81538,81542,81546,81553,81563,81575,81587,81602,81606,81610,81618,81634,81644,81654,81664,81676,81680,81684,81694,81705,81715,81719,81727,81735,81739,81747,81762,81788,81813,81838,81857,81865,81879,81884,81889,81894,81899,81904,81912,81920,81925,81936,81941,81951,81961,81971,81981,81985,81989,81998,82007,82016,82025,82029,82033,82042,82051,82060,82069,82073,82077,82086,82095,82104,82113,82117,82121,82130,82139,82148,82157,82161,82165,82174,82183,82192,82201,82205,82209,82218,82227,82236,82245,82249,82253,82262,82271,82279,82288,82292,82296,82300,82305,82317,82322,82334,82338,82355,82383,82392,82397,82407,82417,82426,82431,82436,82440,82445,82462,82466,82471,82479,82484,82511,82516,82536,82541,82553,82558,82563,82568,82579,82593,82630,82648,82681,82698,82722,82726,82731,82737,82741,82745,82749,82757,82765,82769],{"__ignoreMap":78},[82,80981,80982,80984,80986,80988],{"class":84,"line":85},[82,80983,53860],{"class":92},[82,80985,53864],{"class":53863},[82,80987,53867],{"class":2384},[82,80989,53870],{"class":92},[82,80991,80992,80994,80996,80998,81000,81002],{"class":84,"line":157},[82,80993,3659],{"class":92},[82,80995,53198],{"class":53863},[82,80997,53879],{"class":2384},[82,80999,113],{"class":92},[82,81001,53884],{"class":96},[82,81003,53870],{"class":92},[82,81005,81006],{"class":84,"line":404},[82,81007,486],{"emptyLinePlaceholder":485},[82,81009,81010,81012,81014],{"class":84,"line":413},[82,81011,3659],{"class":92},[82,81013,53897],{"class":53863},[82,81015,53870],{"class":92},[82,81017,81018,81020,81022,81024,81026,81028],{"class":84,"line":508},[82,81019,54705],{"class":92},[82,81021,53907],{"class":53863},[82,81023,53910],{"class":2384},[82,81025,113],{"class":92},[82,81027,53915],{"class":96},[82,81029,53870],{"class":92},[82,81031,81032,81034,81036,81038,81040,81042,81044,81046,81048],{"class":84,"line":513},[82,81033,54705],{"class":92},[82,81035,53907],{"class":53863},[82,81037,17506],{"class":2384},[82,81039,113],{"class":92},[82,81041,53954],{"class":96},[82,81043,53934],{"class":2384},[82,81045,113],{"class":92},[82,81047,53961],{"class":96},[82,81049,53870],{"class":92},[82,81051,81052,81054,81056,81058,81060],{"class":84,"line":1388},[82,81053,54705],{"class":92},[82,81055,53970],{"class":53863},[82,81057,53973],{"class":92},[82,81059,53970],{"class":53863},[82,81061,53870],{"class":92},[82,81063,81064,81066,81068],{"class":84,"line":1394},[82,81065,54705],{"class":92},[82,81067,2671],{"class":53863},[82,81069,53870],{"class":92},[82,81071,81072,81074],{"class":84,"line":1399},[82,81073,8995],{"class":53863},[82,81075,1349],{"class":92},[82,81077,81078,81080,81082,81084],{"class":84,"line":1430},[82,81079,57255],{"class":88},[82,81081,1357],{"class":92},[82,81083,2244],{"class":88},[82,81085,3909],{"class":92},[82,81087,81088,81090,81092,81094],{"class":84,"line":1818},[82,81089,57266],{"class":88},[82,81091,1357],{"class":92},[82,81093,2244],{"class":88},[82,81095,3909],{"class":92},[82,81097,81098,81100,81102,81104],{"class":84,"line":2082},[82,81099,75152],{"class":88},[82,81101,1357],{"class":92},[82,81103,63063],{"class":88},[82,81105,3909],{"class":92},[82,81107,81108],{"class":84,"line":2233},[82,81109,4787],{"class":92},[82,81111,81112],{"class":84,"line":2255},[82,81113,486],{"emptyLinePlaceholder":485},[82,81115,81116,81118],{"class":84,"line":2260},[82,81117,64681],{"class":2384},[82,81119,1349],{"class":92},[82,81121,81122,81124,81126,81129,81131],{"class":84,"line":2298},[82,81123,57331],{"class":88},[82,81125,1357],{"class":92},[82,81127,81128],{"class":88},"990",[82,81130,54054],{"class":112},[82,81132,3909],{"class":92},[82,81134,81135,81137,81139,81141,81143],{"class":84,"line":2303},[82,81136,57266],{"class":88},[82,81138,1357],{"class":92},[82,81140,2244],{"class":88},[82,81142,54118],{"class":88},[82,81144,3909],{"class":92},[82,81146,81147,81149,81151,81153],{"class":84,"line":2321},[82,81148,57569],{"class":88},[82,81150,1357],{"class":92},[82,81152,54039],{"class":88},[82,81154,3909],{"class":92},[82,81156,81157,81160,81162,81165],{"class":84,"line":2533},[82,81158,81159],{"class":88},"      flex-wrap",[82,81161,1357],{"class":92},[82,81163,81164],{"class":88},"wrap",[82,81166,3909],{"class":92},[82,81168,81169],{"class":84,"line":2538},[82,81170,4787],{"class":92},[82,81172,81173],{"class":84,"line":2548},[82,81174,486],{"emptyLinePlaceholder":485},[82,81176,81177,81180],{"class":84,"line":2579},[82,81178,81179],{"class":2384},"    .item",[82,81181,1349],{"class":92},[82,81183,81184,81186,81188,81191,81193],{"class":84,"line":2585},[82,81185,57331],{"class":88},[82,81187,1357],{"class":92},[82,81189,81190],{"class":88},"240",[82,81192,54054],{"class":112},[82,81194,3909],{"class":92},[82,81196,81197,81199,81201,81203,81205],{"class":84,"line":4350},[82,81198,64558],{"class":88},[82,81200,1357],{"class":92},[82,81202,440],{"class":88},[82,81204,54054],{"class":112},[82,81206,3909],{"class":92},[82,81208,81209,81211,81213,81215,81217,81220,81222],{"class":84,"line":4355},[82,81210,57255],{"class":88},[82,81212,1357],{"class":92},[82,81214,3451],{"class":88},[82,81216,54054],{"class":112},[82,81218,81219],{"class":88}," 30",[82,81221,54054],{"class":112},[82,81223,3909],{"class":92},[82,81225,81226,81228,81230,81232,81235,81238,81240],{"class":84,"line":4360},[82,81227,64418],{"class":88},[82,81229,1357],{"class":92},[82,81231,30703],{"class":88},[82,81233,81234],{"class":88}," ease",[82,81236,81237],{"class":88}," .5",[82,81239,3446],{"class":112},[82,81241,3909],{"class":92},[82,81243,81244,81247,81249,81251,81253],{"class":84,"line":4365},[82,81245,81246],{"class":88},"      margin-bottom",[82,81248,1357],{"class":92},[82,81250,3451],{"class":88},[82,81252,54054],{"class":112},[82,81254,3909],{"class":92},[82,81256,81257],{"class":84,"line":4379},[82,81258,4787],{"class":92},[82,81260,81261],{"class":84,"line":4384},[82,81262,486],{"emptyLinePlaceholder":485},[82,81264,81265,81268,81270,81273],{"class":84,"line":5176},[82,81266,81267],{"class":2384},"    .item:nth-child",[82,81269,93],{"class":92},[82,81271,81272],{"class":88},"4n",[82,81274,15031],{"class":92},[82,81276,81277,81279,81281,81283],{"class":84,"line":5190},[82,81278,64558],{"class":88},[82,81280,1357],{"class":92},[82,81282,2244],{"class":88},[82,81284,3909],{"class":92},[82,81286,81287],{"class":84,"line":5198},[82,81288,4787],{"class":92},[82,81290,81291],{"class":84,"line":5203},[82,81292,486],{"emptyLinePlaceholder":485},[82,81294,81295,81298],{"class":84,"line":5209},[82,81296,81297],{"class":2384},"    .item:hover",[82,81299,1349],{"class":92},[82,81301,81302,81305,81307,81309,81311,81313,81315,81317,81319,81322,81324,81326,81328,81330,81332,81334,81336,81339],{"class":84,"line":5215},[82,81303,81304],{"class":88},"      box-shadow",[82,81306,1357],{"class":92},[82,81308,2244],{"class":88},[82,81310,54054],{"class":112},[82,81312,6688],{"class":88},[82,81314,54054],{"class":112},[82,81316,4748],{"class":88},[82,81318,54054],{"class":112},[82,81320,81321],{"class":88}," rgba",[82,81323,93],{"class":92},[82,81325,2244],{"class":88},[82,81327,100],{"class":92},[82,81329,2244],{"class":88},[82,81331,100],{"class":92},[82,81333,2244],{"class":88},[82,81335,100],{"class":92},[82,81337,81338],{"class":88},".2",[82,81340,5318],{"class":92},[82,81342,81343,81346,81348,81351,81353,81355,81357,81360,81362,81364,81366],{"class":84,"line":5220},[82,81344,81345],{"class":88},"      transform",[82,81347,1357],{"class":92},[82,81349,81350],{"class":88},"translate3d",[82,81352,93],{"class":92},[82,81354,2244],{"class":88},[82,81356,100],{"class":92},[82,81358,81359],{"class":88},"-4",[82,81361,54054],{"class":112},[82,81363,100],{"class":92},[82,81365,2244],{"class":88},[82,81367,5318],{"class":92},[82,81369,81370,81372,81374,81376],{"class":84,"line":10539},[82,81371,64583],{"class":88},[82,81373,1357],{"class":92},[82,81375,64588],{"class":88},[82,81377,3909],{"class":92},[82,81379,81380],{"class":84,"line":10563},[82,81381,4787],{"class":92},[82,81383,81384],{"class":84,"line":10568},[82,81385,486],{"emptyLinePlaceholder":485},[82,81387,81388,81390,81392],{"class":84,"line":10574},[82,81389,81179],{"class":2384},[82,81391,58174],{"class":53863},[82,81393,1349],{"class":92},[82,81395,81396,81398,81400,81402,81404],{"class":84,"line":10601},[82,81397,57331],{"class":88},[82,81399,1357],{"class":92},[82,81401,3069],{"class":88},[82,81403,3086],{"class":112},[82,81405,3909],{"class":92},[82,81407,81408],{"class":84,"line":10606},[82,81409,4787],{"class":92},[82,81411,81412],{"class":84,"line":10612},[82,81413,486],{"emptyLinePlaceholder":485},[82,81415,81416,81418,81420],{"class":84,"line":10624},[82,81417,81179],{"class":2384},[82,81419,64862],{"class":2384},[82,81421,1349],{"class":92},[82,81423,81424,81426,81428,81430,81432],{"class":84,"line":10636},[82,81425,57482],{"class":88},[82,81427,1357],{"class":92},[82,81429,1373],{"class":88},[82,81431,54054],{"class":112},[82,81433,3909],{"class":92},[82,81435,81436,81438,81440,81442,81444],{"class":84,"line":10648},[82,81437,81246],{"class":88},[82,81439,1357],{"class":92},[82,81441,440],{"class":88},[82,81443,54054],{"class":112},[82,81445,3909],{"class":92},[82,81447,81448,81450,81452,81455],{"class":84,"line":12307},[82,81449,59974],{"class":88},[82,81451,1357],{"class":92},[82,81453,81454],{"class":88},"#666",[82,81456,3909],{"class":92},[82,81458,81459],{"class":84,"line":12332},[82,81460,4787],{"class":92},[82,81462,81463],{"class":84,"line":12355},[82,81464,486],{"emptyLinePlaceholder":485},[82,81466,81467,81469,81472],{"class":84,"line":12379},[82,81468,81179],{"class":2384},[82,81470,81471],{"class":2384}," .price",[82,81473,1349],{"class":92},[82,81475,81476,81478,81480,81482,81484],{"class":84,"line":12384},[82,81477,57482],{"class":88},[82,81479,1357],{"class":92},[82,81481,3501],{"class":88},[82,81483,54054],{"class":112},[82,81485,3909],{"class":92},[82,81487,81488,81490,81492,81495],{"class":84,"line":12389},[82,81489,59974],{"class":88},[82,81491,1357],{"class":92},[82,81493,81494],{"class":88},"firebrick",[82,81496,3909],{"class":92},[82,81498,81499],{"class":84,"line":12394},[82,81500,4787],{"class":92},[82,81502,81503],{"class":84,"line":12403},[82,81504,486],{"emptyLinePlaceholder":485},[82,81506,81507,81509,81512],{"class":84,"line":12408},[82,81508,81179],{"class":2384},[82,81510,81511],{"class":2384}," .price::before",[82,81513,1349],{"class":92},[82,81515,81516,81519,81521,81524],{"class":84,"line":12414},[82,81517,81518],{"class":88},"      content",[82,81520,1357],{"class":92},[82,81522,81523],{"class":96},"'￥'",[82,81525,3909],{"class":92},[82,81527,81528,81530,81532,81534,81536],{"class":84,"line":12435},[82,81529,57482],{"class":88},[82,81531,1357],{"class":92},[82,81533,3305],{"class":88},[82,81535,54054],{"class":112},[82,81537,3909],{"class":92},[82,81539,81540],{"class":84,"line":12441},[82,81541,4787],{"class":92},[82,81543,81544],{"class":84,"line":12455},[82,81545,486],{"emptyLinePlaceholder":485},[82,81547,81548,81551],{"class":84,"line":12461},[82,81549,81550],{"class":2384},"    .filter",[82,81552,1349],{"class":92},[82,81554,81555,81557,81559,81561],{"class":84,"line":12488},[82,81556,57569],{"class":88},[82,81558,1357],{"class":92},[82,81560,54039],{"class":88},[82,81562,3909],{"class":92},[82,81564,81565,81567,81569,81571,81573],{"class":84,"line":12497},[82,81566,57331],{"class":88},[82,81568,1357],{"class":92},[82,81570,81128],{"class":88},[82,81572,54054],{"class":112},[82,81574,3909],{"class":92},[82,81576,81577,81579,81581,81583,81585],{"class":84,"line":12503},[82,81578,57266],{"class":88},[82,81580,1357],{"class":92},[82,81582,2244],{"class":88},[82,81584,54118],{"class":88},[82,81586,3909],{"class":92},[82,81588,81589,81591,81593,81595,81597,81599],{"class":84,"line":12511},[82,81590,57255],{"class":88},[82,81592,1357],{"class":92},[82,81594,3408],{"class":88},[82,81596,54054],{"class":112},[82,81598,81219],{"class":88},[82,81600,81601],{"class":112},"px\n",[82,81603,81604],{"class":84,"line":12516},[82,81605,4787],{"class":92},[82,81607,81608],{"class":84,"line":19189},[82,81609,486],{"emptyLinePlaceholder":485},[82,81611,81612,81614,81616],{"class":84,"line":19195},[82,81613,81550],{"class":2384},[82,81615,4014],{"class":53863},[82,81617,1349],{"class":92},[82,81619,81620,81622,81624,81626,81628,81630,81632],{"class":84,"line":19218},[82,81621,57255],{"class":88},[82,81623,1357],{"class":92},[82,81625,440],{"class":88},[82,81627,54054],{"class":112},[82,81629,11541],{"class":88},[82,81631,54054],{"class":112},[82,81633,3909],{"class":92},[82,81635,81636,81638,81640,81642],{"class":84,"line":19224},[82,81637,64279],{"class":88},[82,81639,1357],{"class":92},[82,81641,64376],{"class":88},[82,81643,3909],{"class":92},[82,81645,81646,81648,81650,81652],{"class":84,"line":19247},[82,81647,59974],{"class":88},[82,81649,1357],{"class":92},[82,81651,81454],{"class":88},[82,81653,3909],{"class":92},[82,81655,81656,81658,81660,81662],{"class":84,"line":19261},[82,81657,66527],{"class":88},[82,81659,1357],{"class":92},[82,81661,57297],{"class":88},[82,81663,3909],{"class":92},[82,81665,81666,81668,81670,81672,81674],{"class":84,"line":19281},[82,81667,64308],{"class":88},[82,81669,1357],{"class":92},[82,81671,3451],{"class":88},[82,81673,54054],{"class":112},[82,81675,3909],{"class":92},[82,81677,81678],{"class":84,"line":19287},[82,81679,4787],{"class":92},[82,81681,81682],{"class":84,"line":19298},[82,81683,486],{"emptyLinePlaceholder":485},[82,81685,81686,81688,81690,81692],{"class":84,"line":19321},[82,81687,81550],{"class":2384},[82,81689,4014],{"class":53863},[82,81691,64458],{"class":2384},[82,81693,1349],{"class":92},[82,81695,81696,81698,81700,81703],{"class":84,"line":19343},[82,81697,57444],{"class":88},[82,81699,1357],{"class":92},[82,81701,81702],{"class":88},"#05943c",[82,81704,3909],{"class":92},[82,81706,81707,81709,81711,81713],{"class":84,"line":19348},[82,81708,59974],{"class":88},[82,81710,1357],{"class":92},[82,81712,63400],{"class":88},[82,81714,3909],{"class":92},[82,81716,81717],{"class":84,"line":19354},[82,81718,4787],{"class":92},[82,81720,81721,81723,81725],{"class":84,"line":19368},[82,81722,54977],{"class":92},[82,81724,2671],{"class":53863},[82,81726,53870],{"class":92},[82,81728,81729,81731,81733],{"class":84,"line":19381},[82,81730,54347],{"class":92},[82,81732,53897],{"class":53863},[82,81734,53870],{"class":92},[82,81736,81737],{"class":84,"line":19386},[82,81738,486],{"emptyLinePlaceholder":485},[82,81740,81741,81743,81745],{"class":84,"line":19400},[82,81742,3659],{"class":92},[82,81744,54362],{"class":53863},[82,81746,53870],{"class":92},[82,81748,81749,81751,81753,81755,81757,81760],{"class":84,"line":19405},[82,81750,54705],{"class":92},[82,81752,54173],{"class":53863},[82,81754,56046],{"class":2384},[82,81756,113],{"class":92},[82,81758,81759],{"class":96},"\"filter\"",[82,81761,53870],{"class":92},[82,81763,81764,81766,81768,81770,81772,81774,81777,81779,81781,81784,81786],{"class":84,"line":19411},[82,81765,53904],{"class":92},[82,81767,323],{"class":53863},[82,81769,63615],{"class":2384},[82,81771,113],{"class":92},[82,81773,63620],{"class":96},[82,81775,81776],{"class":2384}," data-index",[82,81778,113],{"class":92},[82,81780,6274],{"class":96},[82,81782,81783],{"class":92},">0-100元\u003C\u002F",[82,81785,323],{"class":53863},[82,81787,53870],{"class":92},[82,81789,81790,81792,81794,81796,81798,81800,81802,81804,81806,81809,81811],{"class":84,"line":19416},[82,81791,53904],{"class":92},[82,81793,323],{"class":53863},[82,81795,63615],{"class":2384},[82,81797,113],{"class":92},[82,81799,63620],{"class":96},[82,81801,81776],{"class":2384},[82,81803,113],{"class":92},[82,81805,6297],{"class":96},[82,81807,81808],{"class":92},">100-300元\u003C\u002F",[82,81810,323],{"class":53863},[82,81812,53870],{"class":92},[82,81814,81815,81817,81819,81821,81823,81825,81827,81829,81831,81834,81836],{"class":84,"line":19430},[82,81816,53904],{"class":92},[82,81818,323],{"class":53863},[82,81820,63615],{"class":2384},[82,81822,113],{"class":92},[82,81824,63620],{"class":96},[82,81826,81776],{"class":2384},[82,81828,113],{"class":92},[82,81830,6310],{"class":96},[82,81832,81833],{"class":92},">300元以上\u003C\u002F",[82,81835,323],{"class":53863},[82,81837,53870],{"class":92},[82,81839,81840,81842,81844,81846,81848,81850,81853,81855],{"class":84,"line":19435},[82,81841,53904],{"class":92},[82,81843,323],{"class":53863},[82,81845,63615],{"class":2384},[82,81847,113],{"class":92},[82,81849,63620],{"class":96},[82,81851,81852],{"class":92},">全部区间\u003C\u002F",[82,81854,323],{"class":53863},[82,81856,53870],{"class":92},[82,81858,81859,81861,81863],{"class":84,"line":19440},[82,81860,54977],{"class":92},[82,81862,54173],{"class":53863},[82,81864,53870],{"class":92},[82,81866,81867,81869,81871,81873,81875,81877],{"class":84,"line":19454},[82,81868,54705],{"class":92},[82,81870,54173],{"class":53863},[82,81872,56046],{"class":2384},[82,81874,113],{"class":92},[82,81876,65166],{"class":96},[82,81878,53870],{"class":92},[82,81880,81881],{"class":84,"line":19466},[82,81882,81883],{"class":2828},"    \u003C!-- \u003Cdiv class=\"item\">\n",[82,81885,81886],{"class":84,"line":19471},[82,81887,81888],{"class":2828},"      \u003Cimg src=\"\" alt=\"\">\n",[82,81890,81891],{"class":84,"line":19484},[82,81892,81893],{"class":2828},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[82,81895,81896],{"class":84,"line":19489},[82,81897,81898],{"class":2828},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[82,81900,81901],{"class":84,"line":19494},[82,81902,81903],{"class":2828},"    \u003C\u002Fdiv> -->\n",[82,81905,81906,81908,81910],{"class":84,"line":19499},[82,81907,54977],{"class":92},[82,81909,54173],{"class":53863},[82,81911,53870],{"class":92},[82,81913,81914,81916,81918],{"class":84,"line":19512},[82,81915,54705],{"class":92},[82,81917,54375],{"class":53863},[82,81919,53870],{"class":92},[82,81921,81922],{"class":84,"line":19517},[82,81923,81924],{"class":2828},"    \u002F\u002F 2. 初始化数据\n",[82,81926,81927,81929,81932,81934],{"class":84,"line":35202},[82,81928,13811],{"class":112},[82,81930,81931],{"class":88}," goodsList",[82,81933,259],{"class":112},[82,81935,1463],{"class":92},[82,81937,81938],{"class":84,"line":35208},[82,81939,81940],{"class":92},"      {\n",[82,81942,81943,81946,81949],{"class":84,"line":35214},[82,81944,81945],{"class":92},"        id: ",[82,81947,81948],{"class":96},"'4001172'",[82,81950,1363],{"class":92},[82,81952,81953,81956,81959],{"class":84,"line":35220},[82,81954,81955],{"class":92},"        name: ",[82,81957,81958],{"class":96},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[82,81960,1363],{"class":92},[82,81962,81963,81966,81969],{"class":84,"line":35226},[82,81964,81965],{"class":92},"        price: ",[82,81967,81968],{"class":96},"'289.00'",[82,81970,1363],{"class":92},[82,81972,81973,81976,81979],{"class":84,"line":35237},[82,81974,81975],{"class":92},"        picture: ",[82,81977,81978],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[82,81980,1363],{"class":92},[82,81982,81983],{"class":84,"line":35243},[82,81984,80446],{"class":92},[82,81986,81987],{"class":84,"line":35263},[82,81988,81940],{"class":92},[82,81990,81991,81993,81996],{"class":84,"line":35269},[82,81992,81945],{"class":92},[82,81994,81995],{"class":96},"'4001594'",[82,81997,1363],{"class":92},[82,81999,82000,82002,82005],{"class":84,"line":35280},[82,82001,81955],{"class":92},[82,82003,82004],{"class":96},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[82,82006,1363],{"class":92},[82,82008,82009,82011,82014],{"class":84,"line":35286},[82,82010,81965],{"class":92},[82,82012,82013],{"class":96},"'288.00'",[82,82015,1363],{"class":92},[82,82017,82018,82020,82023],{"class":84,"line":35292},[82,82019,81975],{"class":92},[82,82021,82022],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[82,82024,1363],{"class":92},[82,82026,82027],{"class":84,"line":35298},[82,82028,80446],{"class":92},[82,82030,82031],{"class":84,"line":35304},[82,82032,81940],{"class":92},[82,82034,82035,82037,82040],{"class":84,"line":35310},[82,82036,81945],{"class":92},[82,82038,82039],{"class":96},"'4001009'",[82,82041,1363],{"class":92},[82,82043,82044,82046,82049],{"class":84,"line":35316},[82,82045,81955],{"class":92},[82,82047,82048],{"class":96},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[82,82050,1363],{"class":92},[82,82052,82053,82055,82058],{"class":84,"line":35322},[82,82054,81965],{"class":92},[82,82056,82057],{"class":96},"'109.00'",[82,82059,1363],{"class":92},[82,82061,82062,82064,82067],{"class":84,"line":35342},[82,82063,81975],{"class":92},[82,82065,82066],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[82,82068,1363],{"class":92},[82,82070,82071],{"class":84,"line":35348},[82,82072,80446],{"class":92},[82,82074,82075],{"class":84,"line":35364},[82,82076,81940],{"class":92},[82,82078,82079,82081,82084],{"class":84,"line":35370},[82,82080,81945],{"class":92},[82,82082,82083],{"class":96},"'4001874'",[82,82085,1363],{"class":92},[82,82087,82088,82090,82093],{"class":84,"line":35384},[82,82089,81955],{"class":92},[82,82091,82092],{"class":96},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[82,82094,1363],{"class":92},[82,82096,82097,82099,82102],{"class":84,"line":35390},[82,82098,81965],{"class":92},[82,82100,82101],{"class":96},"'488.00'",[82,82103,1363],{"class":92},[82,82105,82106,82108,82111],{"class":84,"line":35405},[82,82107,81975],{"class":92},[82,82109,82110],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[82,82112,1363],{"class":92},[82,82114,82115],{"class":84,"line":35411},[82,82116,80446],{"class":92},[82,82118,82119],{"class":84,"line":35420},[82,82120,81940],{"class":92},[82,82122,82123,82125,82128],{"class":84,"line":35426},[82,82124,81945],{"class":92},[82,82126,82127],{"class":96},"'4001649'",[82,82129,1363],{"class":92},[82,82131,82132,82134,82137],{"class":84,"line":35435},[82,82133,81955],{"class":92},[82,82135,82136],{"class":96},"'大师监制龙泉青瓷茶叶罐'",[82,82138,1363],{"class":92},[82,82140,82141,82143,82146],{"class":84,"line":35441},[82,82142,81965],{"class":92},[82,82144,82145],{"class":96},"'139.00'",[82,82147,1363],{"class":92},[82,82149,82150,82152,82155],{"class":84,"line":35447},[82,82151,81975],{"class":92},[82,82153,82154],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[82,82156,1363],{"class":92},[82,82158,82159],{"class":84,"line":35456},[82,82160,80446],{"class":92},[82,82162,82163],{"class":84,"line":35462},[82,82164,81940],{"class":92},[82,82166,82167,82169,82172],{"class":84,"line":35473},[82,82168,81945],{"class":92},[82,82170,82171],{"class":96},"'3997185'",[82,82173,1363],{"class":92},[82,82175,82176,82178,82181],{"class":84,"line":35479},[82,82177,81955],{"class":92},[82,82179,82180],{"class":96},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[82,82182,1363],{"class":92},[82,82184,82185,82187,82190],{"class":84,"line":35498},[82,82186,81965],{"class":92},[82,82188,82189],{"class":96},"'108.00'",[82,82191,1363],{"class":92},[82,82193,82194,82196,82199],{"class":84,"line":35504},[82,82195,81975],{"class":92},[82,82197,82198],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[82,82200,1363],{"class":92},[82,82202,82203],{"class":84,"line":35515},[82,82204,80446],{"class":92},[82,82206,82207],{"class":84,"line":35521},[82,82208,81940],{"class":92},[82,82210,82211,82213,82216],{"class":84,"line":35541},[82,82212,81945],{"class":92},[82,82214,82215],{"class":96},"'3997403'",[82,82217,1363],{"class":92},[82,82219,82220,82222,82225],{"class":84,"line":35557},[82,82221,81955],{"class":92},[82,82223,82224],{"class":96},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[82,82226,1363],{"class":92},[82,82228,82229,82231,82234],{"class":84,"line":35563},[82,82230,81965],{"class":92},[82,82232,82233],{"class":96},"'100.00'",[82,82235,1363],{"class":92},[82,82237,82238,82240,82243],{"class":84,"line":35577},[82,82239,81975],{"class":92},[82,82241,82242],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[82,82244,1363],{"class":92},[82,82246,82247],{"class":84,"line":35583},[82,82248,80446],{"class":92},[82,82250,82251],{"class":84,"line":35589},[82,82252,81940],{"class":92},[82,82254,82255,82257,82260],{"class":84,"line":35600},[82,82256,81945],{"class":92},[82,82258,82259],{"class":96},"'3998274'",[82,82261,1363],{"class":92},[82,82263,82264,82266,82269],{"class":84,"line":35606},[82,82265,81955],{"class":92},[82,82267,82268],{"class":96},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[82,82270,1363],{"class":92},[82,82272,82273,82275,82277],{"class":84,"line":35612},[82,82274,81965],{"class":92},[82,82276,82145],{"class":96},[82,82278,1363],{"class":92},[82,82280,82281,82283,82286],{"class":84,"line":35622},[82,82282,81975],{"class":92},[82,82284,82285],{"class":96},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[82,82287,1363],{"class":92},[82,82289,82290],{"class":84,"line":35628},[82,82291,80446],{"class":92},[82,82293,82294],{"class":84,"line":35639},[82,82295,55669],{"class":92},[82,82297,82298],{"class":84,"line":35645},[82,82299,486],{"emptyLinePlaceholder":485},[82,82301,82302],{"class":84,"line":35655},[82,82303,82304],{"class":2828},"    \u002F\u002F 1.渲染函数\n",[82,82306,82307,82309,82311,82313,82315],{"class":84,"line":35660},[82,82308,72640],{"class":112},[82,82310,72643],{"class":2384},[82,82312,93],{"class":92},[82,82314,6475],{"class":108},[82,82316,15031],{"class":92},[82,82318,82319],{"class":84,"line":35666},[82,82320,82321],{"class":2828},"      \u002F\u002F 声明空字符串\n",[82,82323,82324,82327,82330,82332],{"class":84,"line":35715},[82,82325,82326],{"class":112},"      let",[82,82328,82329],{"class":92}," str ",[82,82331,113],{"class":112},[82,82333,72660],{"class":96},[82,82335,82336],{"class":84,"line":35762},[82,82337,72665],{"class":2828},[82,82339,82340,82342,82345,82347,82350,82353],{"class":84,"line":35767},[82,82341,60565],{"class":92},[82,82343,82344],{"class":2384},"forEach",[82,82346,93],{"class":92},[82,82348,82349],{"class":108},"item",[82,82351,82352],{"class":112}," =>",[82,82354,1349],{"class":92},[82,82356,82357,82359,82362,82365,82367,82370,82372,82375,82378,82380],{"class":84,"line":35773},[82,82358,63828],{"class":112},[82,82360,82361],{"class":92}," { ",[82,82363,82364],{"class":88},"name",[82,82366,100],{"class":92},[82,82368,82369],{"class":88},"price",[82,82371,100],{"class":92},[82,82373,82374],{"class":88},"picture",[82,82376,82377],{"class":92}," } ",[82,82379,113],{"class":112},[82,82381,82382],{"class":92}," item\n",[82,82384,82385,82388,82390],{"class":84,"line":35792},[82,82386,82387],{"class":92},"        str ",[82,82389,12068],{"class":112},[82,82391,72724],{"class":96},[82,82393,82394],{"class":84,"line":35798},[82,82395,82396],{"class":96},"          \u003Cdiv class=\"item\">\n",[82,82398,82399,82402,82404],{"class":84,"line":35817},[82,82400,82401],{"class":96},"            \u003Cimg src=\"${",[82,82403,82374],{"class":92},[82,82405,82406],{"class":96},"}\" alt=\"\">\n",[82,82408,82409,82412,82414],{"class":84,"line":35823},[82,82410,82411],{"class":96},"            \u003Cp class=\"name\">${",[82,82413,82364],{"class":92},[82,82415,82416],{"class":96},"}\u003C\u002Fp>\n",[82,82418,82419,82422,82424],{"class":84,"line":35829},[82,82420,82421],{"class":96},"            \u003Cp class=\"price\">${",[82,82423,82369],{"class":92},[82,82425,82416],{"class":96},[82,82427,82428],{"class":84,"line":35839},[82,82429,82430],{"class":96},"          \u003C\u002Fdiv>\n",[82,82432,82433],{"class":84,"line":35844},[82,82434,82435],{"class":96},"        `\n",[82,82437,82438],{"class":84,"line":35850},[82,82439,67372],{"class":92},[82,82441,82442],{"class":84,"line":35866},[82,82443,82444],{"class":2828},"      \u002F\u002F 追加给List\n",[82,82446,82447,82449,82451,82453,82456,82458,82460],{"class":84,"line":35911},[82,82448,58329],{"class":92},[82,82450,56959],{"class":2384},[82,82452,93],{"class":92},[82,82454,82455],{"class":96},"'.list'",[82,82457,76803],{"class":92},[82,82459,113],{"class":112},[82,82461,76539],{"class":92},[82,82463,82464],{"class":84,"line":35917},[82,82465,4787],{"class":92},[82,82467,82468],{"class":84,"line":35923},[82,82469,82470],{"class":2828},"    \u002F\u002F 页面一打开就需要渲染\n",[82,82472,82473,82476],{"class":84,"line":35929},[82,82474,82475],{"class":2384},"    render",[82,82477,82478],{"class":92},"(goodsList)\n",[82,82480,82481],{"class":84,"line":35940},[82,82482,82483],{"class":2828},"    \u002F\u002F 2.过滤筛选\n",[82,82485,82486,82488,82490,82492,82495,82497,82499,82501,82503,82505,82507,82509],{"class":84,"line":35946},[82,82487,54967],{"class":92},[82,82489,56959],{"class":2384},[82,82491,93],{"class":92},[82,82493,82494],{"class":96},"'.filter'",[82,82496,33402],{"class":92},[82,82498,60371],{"class":2384},[82,82500,93],{"class":92},[82,82502,60376],{"class":96},[82,82504,100],{"class":92},[82,82506,2844],{"class":108},[82,82508,82352],{"class":112},[82,82510,1349],{"class":92},[82,82512,82513],{"class":84,"line":35952},[82,82514,82515],{"class":2828},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[82,82517,82518,82520,82522,82525,82527,82529,82531,82533],{"class":84,"line":35958},[82,82519,60786],{"class":112},[82,82521,82361],{"class":92},[82,82523,82524],{"class":88},"tagName",[82,82526,100],{"class":92},[82,82528,34109],{"class":88},[82,82530,82377],{"class":92},[82,82532,113],{"class":112},[82,82534,82535],{"class":92}," e.target\n",[82,82537,82538],{"class":84,"line":35976},[82,82539,82540],{"class":2828},"      \u002F\u002F 判断\n",[82,82542,82543,82545,82547,82549,82551],{"class":84,"line":35990},[82,82544,57040],{"class":112},[82,82546,69591],{"class":92},[82,82548,57046],{"class":112},[82,82550,70813],{"class":96},[82,82552,15031],{"class":92},[82,82554,82555],{"class":84,"line":35999},[82,82556,82557],{"class":2828},"        \u002F\u002F console.log(11)\n",[82,82559,82560],{"class":84,"line":36008},[82,82561,82562],{"class":2828},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[82,82564,82565],{"class":84,"line":36017},[82,82566,82567],{"class":2828},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[82,82569,82570,82572,82574,82576],{"class":84,"line":36026},[82,82571,54392],{"class":112},[82,82573,54395],{"class":92},[82,82575,113],{"class":112},[82,82577,82578],{"class":92}," goodsList\n",[82,82580,82581,82583,82586,82588,82591],{"class":84,"line":36032},[82,82582,5096],{"class":112},[82,82584,82585],{"class":92}," (dataset.index ",[82,82587,57046],{"class":112},[82,82589,82590],{"class":96}," '1'",[82,82592,15031],{"class":92},[82,82594,82595,82598,82600,82603,82606,82608,82610,82612,82615,82617,82619,82622,82624,82626,82628],{"class":84,"line":36038},[82,82596,82597],{"class":92},"          arr ",[82,82599,113],{"class":112},[82,82601,82602],{"class":92}," goodsList.",[82,82604,82605],{"class":2384},"filter",[82,82607,93],{"class":92},[82,82609,82349],{"class":108},[82,82611,82352],{"class":112},[82,82613,82614],{"class":92}," item.price ",[82,82616,4313],{"class":112},[82,82618,6688],{"class":88},[82,82620,82621],{"class":112}," &&",[82,82623,82614],{"class":92},[82,82625,4202],{"class":112},[82,82627,8346],{"class":88},[82,82629,119],{"class":92},[82,82631,82632,82635,82637,82639,82641,82643,82646],{"class":84,"line":36046},[82,82633,82634],{"class":92},"        } ",[82,82636,4304],{"class":112},[82,82638,4307],{"class":112},[82,82640,82585],{"class":92},[82,82642,57046],{"class":112},[82,82644,82645],{"class":96}," '2'",[82,82647,15031],{"class":92},[82,82649,82650,82652,82654,82656,82658,82660,82662,82664,82666,82668,82670,82672,82674,82676,82679],{"class":84,"line":36051},[82,82651,82597],{"class":92},[82,82653,113],{"class":112},[82,82655,82602],{"class":92},[82,82657,82605],{"class":2384},[82,82659,93],{"class":92},[82,82661,82349],{"class":108},[82,82663,82352],{"class":112},[82,82665,82614],{"class":92},[82,82667,4313],{"class":112},[82,82669,8346],{"class":88},[82,82671,82621],{"class":112},[82,82673,82614],{"class":92},[82,82675,4202],{"class":112},[82,82677,82678],{"class":88}," 300",[82,82680,119],{"class":92},[82,82682,82683,82685,82687,82689,82691,82693,82696],{"class":84,"line":36057},[82,82684,82634],{"class":92},[82,82686,4304],{"class":112},[82,82688,4307],{"class":112},[82,82690,82585],{"class":92},[82,82692,57046],{"class":112},[82,82694,82695],{"class":96}," '3'",[82,82697,15031],{"class":92},[82,82699,82700,82702,82704,82706,82708,82710,82712,82714,82716,82718,82720],{"class":84,"line":36068},[82,82701,82597],{"class":92},[82,82703,113],{"class":112},[82,82705,82602],{"class":92},[82,82707,82605],{"class":2384},[82,82709,93],{"class":92},[82,82711,82349],{"class":108},[82,82713,82352],{"class":112},[82,82715,82614],{"class":92},[82,82717,4313],{"class":112},[82,82719,82678],{"class":88},[82,82721,119],{"class":92},[82,82723,82724],{"class":84,"line":36074},[82,82725,5128],{"class":92},[82,82727,82728],{"class":84,"line":36094},[82,82729,82730],{"class":2828},"        \u002F\u002F 渲染函数\n",[82,82732,82733,82735],{"class":84,"line":36100},[82,82734,72964],{"class":2384},[82,82736,54972],{"class":92},[82,82738,82739],{"class":84,"line":36106},[82,82740,54958],{"class":92},[82,82742,82743],{"class":84,"line":36112},[82,82744,486],{"emptyLinePlaceholder":485},[82,82746,82747],{"class":84,"line":36129},[82,82748,36029],{"class":92},[82,82750,82751,82753,82755],{"class":84,"line":36135},[82,82752,54977],{"class":92},[82,82754,54375],{"class":53863},[82,82756,53870],{"class":92},[82,82758,82759,82761,82763],{"class":84,"line":36141},[82,82760,54347],{"class":92},[82,82762,54362],{"class":53863},[82,82764,53870],{"class":92},[82,82766,82767],{"class":84,"line":36147},[82,82768,486],{"emptyLinePlaceholder":485},[82,82770,82771,82773,82775],{"class":84,"line":36153},[82,82772,54347],{"class":92},[82,82774,53198],{"class":53863},[82,82776,53870],{"class":92},[14,82778,82780],{"id":82779},"_410-深入了解对象","4.10 深入了解对象",[65,82782,82784],{"id":82783},"_4101-创建对象","4.10.1 创建对象",[19,82786,82787],{},[4078,82788],{"alt":78,"src":82789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82791,82792],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[65,82794,82796],{"id":82795},"_4102-构造函数","4.10.2 构造函数",[19,82798,82799,82802],{},[2913,82800,82801],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82804,82805,82808],{},[2913,82806,82807],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[73,82810,82812],{"className":53196,"code":82811,"language":53198,"meta":78,"style":78},"\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",[32,82813,82814,82822,82827,82848,82861,82873,82885,82889,82894,82921,82926,82953],{"__ignoreMap":78},[82,82815,82816,82818,82820],{"class":84,"line":85},[82,82817,3659],{"class":92},[82,82819,54375],{"class":53863},[82,82821,53870],{"class":92},[82,82823,82824],{"class":84,"line":157},[82,82825,82826],{"class":2828},"\u002F\u002F例：\n",[82,82828,82829,82831,82834,82836,82838,82840,82842,82844,82846],{"class":84,"line":404},[82,82830,57009],{"class":112},[82,82832,82833],{"class":2384}," Pig",[82,82835,93],{"class":92},[82,82837,82364],{"class":108},[82,82839,3136],{"class":92},[82,82841,72777],{"class":108},[82,82843,3136],{"class":92},[82,82845,72794],{"class":108},[82,82847,15031],{"class":92},[82,82849,82850,82853,82856,82858],{"class":84,"line":413},[82,82851,82852],{"class":88},"    this",[82,82854,82855],{"class":92},".name",[82,82857,113],{"class":112},[82,82859,82860],{"class":92},"name\n",[82,82862,82863,82865,82868,82870],{"class":84,"line":508},[82,82864,82852],{"class":88},[82,82866,82867],{"class":92},".age",[82,82869,113],{"class":112},[82,82871,82872],{"class":92},"age\n",[82,82874,82875,82877,82880,82882],{"class":84,"line":513},[82,82876,82852],{"class":88},[82,82878,82879],{"class":92},".gender",[82,82881,113],{"class":112},[82,82883,82884],{"class":92},"gender    \n",[82,82886,82887],{"class":84,"line":1388},[82,82888,1391],{"class":92},[82,82890,82891],{"class":84,"line":1394},[82,82892,82893],{"class":2828},"\u002F\u002F创建佩奇对象\n",[82,82895,82896,82898,82901,82903,82905,82907,82910,82912,82914,82916,82919],{"class":84,"line":1399},[82,82897,9384],{"class":112},[82,82899,82900],{"class":88}," Peppa",[82,82902,14307],{"class":112},[82,82904,82833],{"class":2384},[82,82906,93],{"class":92},[82,82908,82909],{"class":96},"'佩奇'",[82,82911,3136],{"class":92},[82,82913,3102],{"class":88},[82,82915,3136],{"class":92},[82,82917,82918],{"class":96},"'女'",[82,82920,119],{"class":92},[82,82922,82923],{"class":84,"line":1430},[82,82924,82925],{"class":2828},"\u002F\u002F创建乔治对象\n",[82,82927,82928,82930,82933,82935,82937,82939,82942,82944,82946,82948,82951],{"class":84,"line":1818},[82,82929,9384],{"class":112},[82,82931,82932],{"class":88}," George",[82,82934,14307],{"class":112},[82,82936,82833],{"class":2384},[82,82938,93],{"class":92},[82,82940,82941],{"class":96},"'乔治'",[82,82943,3136],{"class":92},[82,82945,2841],{"class":88},[82,82947,3136],{"class":92},[82,82949,82950],{"class":96},"'男'",[82,82952,119],{"class":92},[82,82954,82955,82957,82959],{"class":84,"line":2082},[82,82956,54347],{"class":92},[82,82958,54375],{"class":53863},[82,82960,53870],{"class":92},[19,82962,82963],{},[4078,82964],{"alt":78,"src":82965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82967,82968],{},[4078,82969],{"alt":78,"src":82970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82972,82973],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82975,82976],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82978,82979],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82981,82982],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82984,82985],{},"这里用等号是因为：对象.属性=值",[19,82987,82988],{},"①利用对象字面量创建对象",[19,82990,82991],{},"const o={",[19,82993,82994],{},"name:'pink'",[19,82996,82997],{},"} ②利用new Object创建对象",[19,82999,83000],{},"const o=new Object({name:'pink'})",[19,83002,83003],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,83005,83006],{},"构造函数创建对象的执行过程：",[19,83008,83009],{},[4078,83010],{"alt":78,"src":83011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[65,83013,83015],{"id":83014},"_4103-实例成员","4.10.3 实例成员",[19,83017,83018],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,83020,83021,83024,83027],{},[29,83022,83023],{},"实例对象的属性和方法即为实例成员",[29,83025,83026],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,83028,83029],{},"构造函数创建的实例对象彼此独立互不影响",[65,83031,83033],{"id":83032},"_4104-静态成员","4.10.4 静态成员",[19,83035,83036],{},[4078,83037],{"alt":78,"src":83038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,83040,83041],{},"静态成员有Date.now() Math.PI Math.random()",[19,83043,83044],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,83046,83047],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,83049,83050],{},"function Pig(name) n {",[19,83052,83053],{},"this.name=name",[19,83055,3695],{},[19,83057,83058],{},"Pig.eyes=2",[19,83060,83061],{},"Pig.sayHai=function () { console.log(this) }",[19,83063,83064],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,83066,83067],{},"console.log(Pig.eyes) \u002F\u002F2",[19,83069,13922],{},[26,83071,83072,83075,83078,83081,83084],{},[29,83073,83074],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,83076,83077],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,83079,83080],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,83082,83083],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,83085,83086],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,83088,83089],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[65,83091,83093],{"id":83092},"_4105-内置构造函数","4.10.5 内置构造函数",[19,83095,83096],{},"内置构造函数包含：",[19,83098,83099],{},[4078,83100],{"alt":78,"src":83101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,83103,83104],{},[4078,83105],{"alt":78,"src":83106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,83108,83109],{},"这些基本数据类型，js对他们进行了包装",[54375,83111,83112],{},"\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",[24582,83114,83116],{"id":83115},"_41051-object","4.10.5.1 Object",[19,83118,83119],{},"Object 是内置的构造函数，用于创建普通对象",[19,83121,83122],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[73,83124,83126],{"className":53196,"code":83125,"language":53198,"meta":78,"style":78},"const user=new Object({name:'小明',age:15})\n",[32,83127,83128],{"__ignoreMap":78},[82,83129,83130],{"class":84,"line":85},[82,83131,83125],{"class":92},[19,83133,83134],{},"三个常用的静态方法：",[25494,83136,83138],{"id":83137},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,83140,83141],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,83143,83144],{},[4078,83145],{"alt":78,"src":83146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,83148,83149],{},[4078,83150],{"alt":78,"src":83151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[73,83153,83155],{"className":55627,"code":83154,"language":55629,"meta":78,"style":78},"\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",[32,83156,83157,83165,83173,83178,83183,83188,83193,83198,83203,83211],{"__ignoreMap":78},[82,83158,83159,83161,83163],{"class":84,"line":85},[82,83160,3659],{"class":92},[82,83162,54362],{"class":53863},[82,83164,53870],{"class":92},[82,83166,83167,83169,83171],{"class":84,"line":157},[82,83168,54705],{"class":92},[82,83170,54375],{"class":53863},[82,83172,53870],{"class":92},[82,83174,83175],{"class":84,"line":404},[82,83176,83177],{"class":92},"    const o = { name: 'pink', age: 6 }\n",[82,83179,83180],{"class":84,"line":413},[82,83181,83182],{"class":92},"    \u002F\u002F 获得所有属性名\n",[82,83184,83185],{"class":84,"line":508},[82,83186,83187],{"class":92},"    const arr = Object.keys(o)\n",[82,83189,83190],{"class":84,"line":513},[82,83191,83192],{"class":92},"    console.log(arr)\n",[82,83194,83195],{"class":84,"line":1388},[82,83196,83197],{"class":92},"    \u002F\u002F 获得所有属性值\n",[82,83199,83200],{"class":84,"line":1394},[82,83201,83202],{"class":92},"    console.log(Object.values(o))\n",[82,83204,83205,83207,83209],{"class":84,"line":1399},[82,83206,54977],{"class":92},[82,83208,54375],{"class":53863},[82,83210,53870],{"class":92},[82,83212,83213,83215,83217],{"class":84,"line":1430},[82,83214,54347],{"class":92},[82,83216,54362],{"class":53863},[82,83218,53870],{"class":92},[25494,83220,83222],{"id":83221},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83224,83225],{},"Object.assign(oo,o)",[19,83227,83228],{},"后的东西添加给前 是追加",[19,83230,83231],{},[4078,83232],{"alt":78,"src":83233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83235,83236],{},[4078,83237],{"alt":78,"src":83238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[73,83240,83242],{"className":55627,"code":83241,"language":55629,"meta":78,"style":78},"\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",[32,83243,83244,83252,83260,83264,83268,83272,83276,83280,83284,83289,83294,83299,83304,83309,83317],{"__ignoreMap":78},[82,83245,83246,83248,83250],{"class":84,"line":85},[82,83247,3659],{"class":92},[82,83249,54362],{"class":53863},[82,83251,53870],{"class":92},[82,83253,83254,83256,83258],{"class":84,"line":157},[82,83255,54705],{"class":92},[82,83257,54375],{"class":53863},[82,83259,53870],{"class":92},[82,83261,83262],{"class":84,"line":404},[82,83263,83177],{"class":92},[82,83265,83266],{"class":84,"line":413},[82,83267,83182],{"class":92},[82,83269,83270],{"class":84,"line":508},[82,83271,83187],{"class":92},[82,83273,83274],{"class":84,"line":513},[82,83275,83192],{"class":92},[82,83277,83278],{"class":84,"line":1388},[82,83279,83197],{"class":92},[82,83281,83282],{"class":84,"line":1394},[82,83283,83202],{"class":92},[82,83285,83286],{"class":84,"line":1399},[82,83287,83288],{"class":92},"    const oo = {}\n",[82,83290,83291],{"class":84,"line":1430},[82,83292,83293],{"class":92},"    Object.assign(oo, o)\n",[82,83295,83296],{"class":84,"line":1818},[82,83297,83298],{"class":92},"    console.log(oo)\n",[82,83300,83301],{"class":84,"line":2082},[82,83302,83303],{"class":92},"    Object.assign(o, { gender: '女' })\n",[82,83305,83306],{"class":84,"line":2233},[82,83307,83308],{"class":92},"    console.log(o)\n",[82,83310,83311,83313,83315],{"class":84,"line":2255},[82,83312,54977],{"class":92},[82,83314,54375],{"class":53863},[82,83316,53870],{"class":92},[82,83318,83319,83321,83323],{"class":84,"line":2260},[82,83320,54347],{"class":92},[82,83322,54362],{"class":53863},[82,83324,53870],{"class":92},[19,83326,83327],{},[4078,83328],{"alt":78,"src":83329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24582,83331,83333],{"id":83332},"_41052-array","4.10.5.2 Array",[19,83335,83336],{},"Array 是内置的构造函数，用于创建数组",[19,83338,83339],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[73,83341,83343],{"className":53196,"code":83342,"language":53198,"meta":78,"style":78},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[32,83344,83345,83350],{"__ignoreMap":78},[82,83346,83347],{"class":84,"line":85},[82,83348,83349],{"class":92},"const arr=new Array(3,5)\n",[82,83351,83352],{"class":84,"line":157},[82,83353,83354],{"class":92},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83356,83357],{},"Array的实例方法，这个方法是实例成员",[19,83359,83360],{},[4078,83361],{"alt":78,"src":83362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25494,83364,83366],{"id":83365},"_410521-reduce","4.10.5.2.1 reduce",[19,83368,83369],{},[4078,83370],{"alt":78,"src":83371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[73,83373,83375],{"className":55627,"code":83374,"language":55629,"meta":78,"style":78},"\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",[32,83376,83377,83385,83393,83398,83403,83408,83413,83417,83422,83427,83432,83436,83441,83446,83450,83455,83460,83465,83473],{"__ignoreMap":78},[82,83378,83379,83381,83383],{"class":84,"line":85},[82,83380,3659],{"class":92},[82,83382,54362],{"class":53863},[82,83384,53870],{"class":92},[82,83386,83387,83389,83391],{"class":84,"line":157},[82,83388,54705],{"class":92},[82,83390,54375],{"class":53863},[82,83392,53870],{"class":92},[82,83394,83395],{"class":84,"line":404},[82,83396,83397],{"class":92},"    const arr = [1, 5, 8]\n",[82,83399,83400],{"class":84,"line":413},[82,83401,83402],{"class":92},"    \u002F\u002F 1.没有初始值\n",[82,83404,83405],{"class":84,"line":508},[82,83406,83407],{"class":92},"    const total = arr.reduce(function (prev, current) {\n",[82,83409,83410],{"class":84,"line":513},[82,83411,83412],{"class":92},"      return prev + current\n",[82,83414,83415],{"class":84,"line":1388},[82,83416,36029],{"class":92},[82,83418,83419],{"class":84,"line":1394},[82,83420,83421],{"class":92},"    console.log(total)   \u002F\u002F14\n",[82,83423,83424],{"class":84,"line":1399},[82,83425,83426],{"class":92},"    \u002F\u002F 2.有初始值\n",[82,83428,83429],{"class":84,"line":1430},[82,83430,83431],{"class":92},"    const total1 = arr.reduce(function (prev, current) {\n",[82,83433,83434],{"class":84,"line":1818},[82,83435,83412],{"class":92},[82,83437,83438],{"class":84,"line":2082},[82,83439,83440],{"class":92},"    }, 10)\n",[82,83442,83443],{"class":84,"line":2233},[82,83444,83445],{"class":92},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[82,83447,83448],{"class":84,"line":2255},[82,83449,486],{"emptyLinePlaceholder":485},[82,83451,83452],{"class":84,"line":2260},[82,83453,83454],{"class":92},"    \u002F\u002F 3.箭头函数写法\n",[82,83456,83457],{"class":84,"line":2298},[82,83458,83459],{"class":92},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[82,83461,83462],{"class":84,"line":2303},[82,83463,83464],{"class":92},"    console.log(total2)   \u002F\u002F24\n",[82,83466,83467,83469,83471],{"class":84,"line":2321},[82,83468,54977],{"class":92},[82,83470,54375],{"class":53863},[82,83472,53870],{"class":92},[82,83474,83475,83477,83479],{"class":84,"line":2533},[82,83476,54347],{"class":92},[82,83478,54362],{"class":53863},[82,83480,53870],{"class":92},[19,83482,83483],{},"执行过程：",[26,83485,83486,83489,83492],{},[29,83487,83488],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,83490,83491],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,83493,83494],{},"如果有起始值，则起始值作为上一次值",[73,83496,83498],{"className":55627,"code":83497,"language":55629,"meta":78,"style":78},"\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",[32,83499,83500,83508,83516,83520,83524,83528,83532,83536,83540,83545,83550,83555,83560,83565,83569,83573,83577,83581,83585,83589,83594,83598,83603,83607,83612,83617,83621,83625,83629,83637],{"__ignoreMap":78},[82,83501,83502,83504,83506],{"class":84,"line":85},[82,83503,3659],{"class":92},[82,83505,54362],{"class":53863},[82,83507,53870],{"class":92},[82,83509,83510,83512,83514],{"class":84,"line":157},[82,83511,54705],{"class":92},[82,83513,54375],{"class":53863},[82,83515,53870],{"class":92},[82,83517,83518],{"class":84,"line":404},[82,83519,83397],{"class":92},[82,83521,83522],{"class":84,"line":413},[82,83523,83402],{"class":92},[82,83525,83526],{"class":84,"line":508},[82,83527,83407],{"class":92},[82,83529,83530],{"class":84,"line":513},[82,83531,83412],{"class":92},[82,83533,83534],{"class":84,"line":1388},[82,83535,36029],{"class":92},[82,83537,83538],{"class":84,"line":1394},[82,83539,83421],{"class":92},[82,83541,83542],{"class":84,"line":1399},[82,83543,83544],{"class":92},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[82,83546,83547],{"class":84,"line":1430},[82,83548,83549],{"class":92},"    \u002F\u002F     1              5                    6\n",[82,83551,83552],{"class":84,"line":1818},[82,83553,83554],{"class":92},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[82,83556,83557],{"class":84,"line":2082},[82,83558,83559],{"class":92},"    \u002F\u002F     6              8                    14\n",[82,83561,83562],{"class":84,"line":2233},[82,83563,83564],{"class":92},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[82,83566,83567],{"class":84,"line":2255},[82,83568,83426],{"class":92},[82,83570,83571],{"class":84,"line":2260},[82,83572,83431],{"class":92},[82,83574,83575],{"class":84,"line":2298},[82,83576,83412],{"class":92},[82,83578,83579],{"class":84,"line":2303},[82,83580,83440],{"class":92},[82,83582,83583],{"class":84,"line":2321},[82,83584,83445],{"class":92},[82,83586,83587],{"class":84,"line":2533},[82,83588,83544],{"class":92},[82,83590,83591],{"class":84,"line":2538},[82,83592,83593],{"class":92},"    \u002F\u002F     10             1                     11\n",[82,83595,83596],{"class":84,"line":2548},[82,83597,83554],{"class":92},[82,83599,83600],{"class":84,"line":2579},[82,83601,83602],{"class":92},"    \u002F\u002F     11             5                    16\n",[82,83604,83605],{"class":84,"line":2585},[82,83606,83554],{"class":92},[82,83608,83609],{"class":84,"line":4350},[82,83610,83611],{"class":92},"    \u002F\u002F     16             8                    24\n",[82,83613,83614],{"class":84,"line":4355},[82,83615,83616],{"class":92},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[82,83618,83619],{"class":84,"line":4360},[82,83620,83454],{"class":92},[82,83622,83623],{"class":84,"line":4365},[82,83624,83459],{"class":92},[82,83626,83627],{"class":84,"line":4379},[82,83628,83464],{"class":92},[82,83630,83631,83633,83635],{"class":84,"line":4384},[82,83632,54977],{"class":92},[82,83634,54375],{"class":53863},[82,83636,53870],{"class":92},[82,83638,83639,83641,83643],{"class":84,"line":5176},[82,83640,54347],{"class":92},[82,83642,54362],{"class":53863},[82,83644,53870],{"class":92},[25494,83646,83648],{"id":83647},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83650,83651],{},[4078,83652],{"alt":78,"src":83653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[73,83655,83657],{"className":55627,"code":83656,"language":55629,"meta":78,"style":78},"\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",[32,83658,83659,83667,83675,83680,83685,83690,83695,83699,83704,83709,83714,83719,83724,83729,83733,83738,83742,83747,83755],{"__ignoreMap":78},[82,83660,83661,83663,83665],{"class":84,"line":85},[82,83662,3659],{"class":92},[82,83664,54362],{"class":53863},[82,83666,53870],{"class":92},[82,83668,83669,83671,83673],{"class":84,"line":157},[82,83670,54705],{"class":92},[82,83672,54375],{"class":53863},[82,83674,53870],{"class":92},[82,83676,83677],{"class":84,"line":404},[82,83678,83679],{"class":92},"    const arr = [\n",[82,83681,83682],{"class":84,"line":413},[82,83683,83684],{"class":92},"      { name: '张三', salary: 10000 },\n",[82,83686,83687],{"class":84,"line":508},[82,83688,83689],{"class":92},"      { name: '李四', salary: 10000 },\n",[82,83691,83692],{"class":84,"line":513},[82,83693,83694],{"class":92},"      { name: '王五', salary: 10000 }\n",[82,83696,83697],{"class":84,"line":1388},[82,83698,55669],{"class":92},[82,83700,83701],{"class":84,"line":1394},[82,83702,83703],{"class":92},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[82,83705,83706],{"class":84,"line":1399},[82,83707,83708],{"class":92},"    \u002F\u002F prev是累计值\n",[82,83710,83711],{"class":84,"line":1430},[82,83712,83713],{"class":92},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[82,83715,83716],{"class":84,"line":1818},[82,83717,83718],{"class":92},"    console.log(total)\n",[82,83720,83721],{"class":84,"line":2082},[82,83722,83723],{"class":92},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[82,83725,83726],{"class":84,"line":2233},[82,83727,83728],{"class":92},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[82,83730,83731],{"class":84,"line":2255},[82,83732,83723],{"class":92},[82,83734,83735],{"class":84,"line":2260},[82,83736,83737],{"class":92},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[82,83739,83740],{"class":84,"line":2298},[82,83741,83723],{"class":92},[82,83743,83744],{"class":84,"line":2303},[82,83745,83746],{"class":92},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[82,83748,83749,83751,83753],{"class":84,"line":2321},[82,83750,54977],{"class":92},[82,83752,54375],{"class":53863},[82,83754,53870],{"class":92},[82,83756,83757,83759,83761],{"class":84,"line":2533},[82,83758,54347],{"class":92},[82,83760,54362],{"class":53863},[82,83762,53870],{"class":92},[25494,83764,83766],{"id":83765},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83768,83769],{},[4078,83770],{"alt":78,"src":83771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83773,83774],{},[4078,83775],{"alt":78,"src":83776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,83778,83779],{},[29,83780,83781],{},"find()",[19,83783,83784],{},"循环查找，找到第一个就ok",[19,83786,83787],{},[323,83788,83791],{"href":83789,"rel":83790},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26449],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[73,83793,83795],{"className":53196,"code":83794,"language":53198,"meta":78,"style":78},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[32,83796,83797,83802,83807],{"__ignoreMap":78},[82,83798,83799],{"class":84,"line":85},[82,83800,83801],{"class":92},"const array1 = [5, 12, 8, 130, 44]\n",[82,83803,83804],{"class":84,"line":157},[82,83805,83806],{"class":92},"const found = array1.find((element) => element > 10)\n",[82,83808,83809],{"class":84,"line":404},[82,83810,83811],{"class":92},"console.log(found)  \u002F\u002F12\n",[19,83813,83814,83816,83817,83822,83823,83826,83827,83829,83830,83835,83836,83838,83839,83841,83842,83844,83845],{},[32,83815,83781],{}," 方法是一个",[323,83818,83821],{"href":83819,"rel":83820},"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",[26449],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[32,83824,83825],{},"callbackFn"," 函数，直到 ",[32,83828,83825],{}," 返回一个",[323,83831,83834],{"href":83832,"rel":83833},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26449],"真值","。然后 ",[32,83837,83781],{}," 返回该元素并停止迭代数组。如果 ",[32,83840,83825],{}," 从未返回真值，则 ",[32,83843,83781],{}," 返回 ",[32,83846,83847],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[73,83849,83851],{"className":55627,"code":83850,"language":55629,"meta":78,"style":78},"\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",[32,83852,83853,83861,83869,83874,83879,83884,83888,83893,83898,83902,83907,83912,83916,83920,83925,83930,83934,83938,83943,83948,83953,83958,83963,83967,83972,83977,83982,83987,83991,83996,84004],{"__ignoreMap":78},[82,83854,83855,83857,83859],{"class":84,"line":85},[82,83856,3659],{"class":92},[82,83858,54362],{"class":53863},[82,83860,53870],{"class":92},[82,83862,83863,83865,83867],{"class":84,"line":157},[82,83864,54705],{"class":92},[82,83866,54375],{"class":53863},[82,83868,53870],{"class":92},[82,83870,83871],{"class":84,"line":404},[82,83872,83873],{"class":92},"    const arr = ['red', 'blue', 'green']\n",[82,83875,83876],{"class":84,"line":413},[82,83877,83878],{"class":92},"    const found = arr.find(item => item === 'pink')\n",[82,83880,83881],{"class":84,"line":508},[82,83882,83883],{"class":92},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[82,83885,83886],{"class":84,"line":513},[82,83887,486],{"emptyLinePlaceholder":485},[82,83889,83890],{"class":84,"line":1388},[82,83891,83892],{"class":92},"    \u002F\u002F 使用场景，用于查找数据\n",[82,83894,83895],{"class":84,"line":1394},[82,83896,83897],{"class":92},"    const arr1 = [\n",[82,83899,83900],{"class":84,"line":1399},[82,83901,81940],{"class":92},[82,83903,83904],{"class":84,"line":1430},[82,83905,83906],{"class":92},"        name: '小米',\n",[82,83908,83909],{"class":84,"line":1818},[82,83910,83911],{"class":92},"        price: 1999\n",[82,83913,83914],{"class":84,"line":2082},[82,83915,80446],{"class":92},[82,83917,83918],{"class":84,"line":2233},[82,83919,81940],{"class":92},[82,83921,83922],{"class":84,"line":2255},[82,83923,83924],{"class":92},"        name: '华为',\n",[82,83926,83927],{"class":84,"line":2260},[82,83928,83929],{"class":92},"        price: 3999\n",[82,83931,83932],{"class":84,"line":2298},[82,83933,54958],{"class":92},[82,83935,83936],{"class":84,"line":2303},[82,83937,55669],{"class":92},[82,83939,83940],{"class":84,"line":2321},[82,83941,83942],{"class":92},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[82,83944,83945],{"class":84,"line":2533},[82,83946,83947],{"class":92},"    \u002F\u002F const found1 = arr1.find(item => {\n",[82,83949,83950],{"class":84,"line":2538},[82,83951,83952],{"class":92},"    \u002F\u002F   if (item.name === '小米') {\n",[82,83954,83955],{"class":84,"line":2548},[82,83956,83957],{"class":92},"    \u002F\u002F     return item\n",[82,83959,83960],{"class":84,"line":2579},[82,83961,83962],{"class":92},"    \u002F\u002F   }\n",[82,83964,83965],{"class":84,"line":2585},[82,83966,65847],{"class":92},[82,83968,83969],{"class":84,"line":4350},[82,83970,83971],{"class":92},"    \u002F\u002F 另一种写法\n",[82,83973,83974],{"class":84,"line":4355},[82,83975,83976],{"class":92},"    const found1 = arr1.find(item => {\n",[82,83978,83979],{"class":84,"line":4360},[82,83980,83981],{"class":92},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[82,83983,83984],{"class":84,"line":4365},[82,83985,83986],{"class":92},"      return item.name = '小米'\n",[82,83988,83989],{"class":84,"line":4379},[82,83990,36029],{"class":92},[82,83992,83993],{"class":84,"line":4384},[82,83994,83995],{"class":92},"    console.log(found1)\n",[82,83997,83998,84000,84002],{"class":84,"line":5176},[82,83999,54977],{"class":92},[82,84001,54375],{"class":53863},[82,84003,53870],{"class":92},[82,84005,84006,84008,84010],{"class":84,"line":5190},[82,84007,54347],{"class":92},[82,84009,54362],{"class":53863},[82,84011,53870],{"class":92},[19,84013,84014],{},[4078,84015],{"alt":78,"src":84016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,84018,84019],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,84021,84022],{"start":157},[29,84023,84024],{},"every()返回的是布尔值",[19,84026,84027],{},[323,84028,84031],{"href":84029,"rel":84030},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26449],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,84033,84034],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,84036,84037],{},"some是只有有一个就没问题",[19,84039,84040],{},"every是必须全是才行",[73,84042,84046],{"className":84043,"code":84044,"language":84045,"meta":78,"style":78},"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",[32,84047,84048,84064,84078,84082,84091],{"__ignoreMap":78},[82,84049,84050,84052,84055,84057,84059,84062],{"class":84,"line":85},[82,84051,57009],{"class":112},[82,84053,84054],{"class":92}," isBigEnough(element, ",[82,84056,76612],{"class":112},[82,84058,100],{"class":92},[82,84060,84061],{"class":112},"array",[82,84063,15031],{"class":92},[82,84065,84066,84069,84072,84074,84076],{"class":84,"line":157},[82,84067,84068],{"class":112},"  return",[82,84070,84071],{"class":92}," element ",[82,84073,4313],{"class":112},[82,84075,4638],{"class":88},[82,84077,3909],{"class":92},[82,84079,84080],{"class":84,"line":404},[82,84081,1391],{"class":92},[82,84083,84084,84087,84089],{"class":84,"line":413},[82,84085,84086],{"class":92},"[12, 5, 8, 130, 44].every(isBigEnough); ",[82,84088,35897],{"class":112},[82,84090,57076],{"class":92},[82,84092,84093,84096,84098],{"class":84,"line":508},[82,84094,84095],{"class":92},"[12, 54, 18, 130, 44].every(isBigEnough); ",[82,84097,35897],{"class":112},[82,84099,60498],{"class":92},[73,84101,84103],{"className":55627,"code":84102,"language":55629,"meta":78,"style":78},"\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",[32,84104,84105,84113,84121,84126,84130,84135,84140,84148],{"__ignoreMap":78},[82,84106,84107,84109,84111],{"class":84,"line":85},[82,84108,3659],{"class":92},[82,84110,54362],{"class":53863},[82,84112,53870],{"class":92},[82,84114,84115,84117,84119],{"class":84,"line":157},[82,84116,54705],{"class":92},[82,84118,54375],{"class":53863},[82,84120,53870],{"class":92},[82,84122,84123],{"class":84,"line":404},[82,84124,84125],{"class":92},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[82,84127,84128],{"class":84,"line":413},[82,84129,80876],{"class":92},[82,84131,84132],{"class":84,"line":508},[82,84133,84134],{"class":92},"    const flag = arr.every(item => item >= 10)\n",[82,84136,84137],{"class":84,"line":513},[82,84138,84139],{"class":92},"    console.log(flag)    \u002F\u002Ftrue\n",[82,84141,84142,84144,84146],{"class":84,"line":1388},[82,84143,54977],{"class":92},[82,84145,54375],{"class":53863},[82,84147,53870],{"class":92},[82,84149,84150,84152,84154],{"class":84,"line":1394},[82,84151,54347],{"class":92},[82,84153,54362],{"class":53863},[82,84155,53870],{"class":92},[73,84157,84159],{"className":55627,"code":84158,"language":55629,"meta":78,"style":78},"\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",[32,84160,84161,84169,84177,84181,84186,84191,84196,84204],{"__ignoreMap":78},[82,84162,84163,84165,84167],{"class":84,"line":85},[82,84164,3659],{"class":92},[82,84166,54362],{"class":53863},[82,84168,53870],{"class":92},[82,84170,84171,84173,84175],{"class":84,"line":157},[82,84172,54705],{"class":92},[82,84174,54375],{"class":53863},[82,84176,53870],{"class":92},[82,84178,84179],{"class":84,"line":404},[82,84180,84125],{"class":92},[82,84182,84183],{"class":84,"line":413},[82,84184,84185],{"class":92},"    const arr = [10, 0, 5]\n",[82,84187,84188],{"class":84,"line":508},[82,84189,84190],{"class":92},"    const flag = arr.some(item => item >= 10)\n",[82,84192,84193],{"class":84,"line":513},[82,84194,84195],{"class":92},"    console.log(flag)   \u002F\u002Ftrue\n",[82,84197,84198,84200,84202],{"class":84,"line":1388},[82,84199,54977],{"class":92},[82,84201,54375],{"class":53863},[82,84203,53870],{"class":92},[82,84205,84206,84208,84210],{"class":84,"line":1394},[82,84207,54347],{"class":92},[82,84209,54362],{"class":53863},[82,84211,53870],{"class":92},[25494,84213,84215],{"id":84214},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84217,84218],{},[4078,84219],{"alt":78,"src":84220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[73,84222,84224],{"className":53196,"code":84223,"language":53198,"meta":78,"style":78},"\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",[32,84225,84226,84236,84250,84254,84262,84276,84296,84308,84316,84323,84335,84347,84359,84371,84381,84391,84395,84403,84411,84415,84423,84435,84443,84465,84470,84475,84508,84516,84524,84528],{"__ignoreMap":78},[82,84227,84228,84230,84232,84234],{"class":84,"line":85},[82,84229,53860],{"class":92},[82,84231,53864],{"class":53863},[82,84233,53867],{"class":2384},[82,84235,53870],{"class":92},[82,84237,84238,84240,84242,84244,84246,84248],{"class":84,"line":157},[82,84239,3659],{"class":92},[82,84241,53198],{"class":53863},[82,84243,53879],{"class":2384},[82,84245,113],{"class":92},[82,84247,53884],{"class":96},[82,84249,53870],{"class":92},[82,84251,84252],{"class":84,"line":404},[82,84253,486],{"emptyLinePlaceholder":485},[82,84255,84256,84258,84260],{"class":84,"line":413},[82,84257,3659],{"class":92},[82,84259,53897],{"class":53863},[82,84261,53870],{"class":92},[82,84263,84264,84266,84268,84270,84272,84274],{"class":84,"line":508},[82,84265,54705],{"class":92},[82,84267,53907],{"class":53863},[82,84269,53910],{"class":2384},[82,84271,113],{"class":92},[82,84273,53915],{"class":96},[82,84275,53870],{"class":92},[82,84277,84278,84280,84282,84284,84286,84288,84290,84292,84294],{"class":84,"line":513},[82,84279,54705],{"class":92},[82,84281,53907],{"class":53863},[82,84283,17506],{"class":2384},[82,84285,113],{"class":92},[82,84287,53954],{"class":96},[82,84289,53934],{"class":2384},[82,84291,113],{"class":92},[82,84293,53961],{"class":96},[82,84295,53870],{"class":92},[82,84297,84298,84300,84302,84304,84306],{"class":84,"line":1388},[82,84299,54705],{"class":92},[82,84301,53970],{"class":53863},[82,84303,53973],{"class":92},[82,84305,53970],{"class":53863},[82,84307,53870],{"class":92},[82,84309,84310,84312,84314],{"class":84,"line":1394},[82,84311,54705],{"class":92},[82,84313,2671],{"class":53863},[82,84315,53870],{"class":92},[82,84317,84318,84321],{"class":84,"line":1399},[82,84319,84320],{"class":53863},"    div",[82,84322,1349],{"class":92},[82,84324,84325,84327,84329,84331,84333],{"class":84,"line":1430},[82,84326,57331],{"class":88},[82,84328,1357],{"class":92},[82,84330,4325],{"class":88},[82,84332,54054],{"class":112},[82,84334,3909],{"class":92},[82,84336,84337,84339,84341,84343,84345],{"class":84,"line":1818},[82,84338,57345],{"class":88},[82,84340,1357],{"class":92},[82,84342,3159],{"class":88},[82,84344,54054],{"class":112},[82,84346,3909],{"class":92},[82,84348,84349,84351,84353,84355,84357],{"class":84,"line":2082},[82,84350,59917],{"class":88},[82,84352,1357],{"class":92},[82,84354,3159],{"class":88},[82,84356,54054],{"class":112},[82,84358,3909],{"class":92},[82,84360,84361,84363,84365,84367,84369],{"class":84,"line":2233},[82,84362,67690],{"class":88},[82,84364,1357],{"class":92},[82,84366,3254],{"class":88},[82,84368,54054],{"class":112},[82,84370,3909],{"class":92},[82,84372,84373,84375,84377,84379],{"class":84,"line":2255},[82,84374,59844],{"class":88},[82,84376,1357],{"class":92},[82,84378,54154],{"class":88},[82,84380,3909],{"class":92},[82,84382,84383,84385,84387,84389],{"class":84,"line":2260},[82,84384,57444],{"class":88},[82,84386,1357],{"class":92},[82,84388,54207],{"class":88},[82,84390,3909],{"class":92},[82,84392,84393],{"class":84,"line":2298},[82,84394,4787],{"class":92},[82,84396,84397,84399,84401],{"class":84,"line":2303},[82,84398,54977],{"class":92},[82,84400,2671],{"class":53863},[82,84402,53870],{"class":92},[82,84404,84405,84407,84409],{"class":84,"line":2321},[82,84406,54347],{"class":92},[82,84408,53897],{"class":53863},[82,84410,53870],{"class":92},[82,84412,84413],{"class":84,"line":2533},[82,84414,486],{"emptyLinePlaceholder":485},[82,84416,84417,84419,84421],{"class":84,"line":2538},[82,84418,3659],{"class":92},[82,84420,54362],{"class":53863},[82,84422,53870],{"class":92},[82,84424,84425,84427,84429,84431,84433],{"class":84,"line":2548},[82,84426,54705],{"class":92},[82,84428,54173],{"class":53863},[82,84430,57874],{"class":92},[82,84432,54173],{"class":53863},[82,84434,53870],{"class":92},[82,84436,84437,84439,84441],{"class":84,"line":2579},[82,84438,54705],{"class":92},[82,84440,54375],{"class":53863},[82,84442,53870],{"class":92},[82,84444,84445,84447,84450,84452,84455,84458,84460,84463],{"class":84,"line":2585},[82,84446,13811],{"class":112},[82,84448,84449],{"class":88}," spec",[82,84451,259],{"class":112},[82,84453,84454],{"class":92}," { size: ",[82,84456,84457],{"class":96},"'40cm*40cm'",[82,84459,58023],{"class":92},[82,84461,84462],{"class":96},"'黑色'",[82,84464,58163],{"class":92},[82,84466,84467],{"class":84,"line":4350},[82,84468,84469],{"class":2828},"    \u002F\u002F const arr = Object.values(spec)\n",[82,84471,84472],{"class":84,"line":4355},[82,84473,84474],{"class":2828},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[82,84476,84477,84479,84481,84483,84486,84488,84490,84493,84496,84499,84501,84503,84506],{"class":84,"line":4360},[82,84478,54967],{"class":92},[82,84480,56959],{"class":2384},[82,84482,93],{"class":92},[82,84484,84485],{"class":96},"'div'",[82,84487,76803],{"class":92},[82,84489,113],{"class":112},[82,84491,84492],{"class":92}," Object.",[82,84494,84495],{"class":2384},"values",[82,84497,84498],{"class":92},"(spec).",[82,84500,76777],{"class":2384},[82,84502,93],{"class":92},[82,84504,84505],{"class":96},"'\u002F'",[82,84507,119],{"class":92},[82,84509,84510,84512,84514],{"class":84,"line":4365},[82,84511,54977],{"class":92},[82,84513,54375],{"class":53863},[82,84515,53870],{"class":92},[82,84517,84518,84520,84522],{"class":84,"line":4379},[82,84519,54347],{"class":92},[82,84521,54362],{"class":53863},[82,84523,53870],{"class":92},[82,84525,84526],{"class":84,"line":4384},[82,84527,486],{"emptyLinePlaceholder":485},[82,84529,84530,84532,84534],{"class":84,"line":5176},[82,84531,54347],{"class":92},[82,84533,53198],{"class":53863},[82,84535,53870],{"class":92},[19,84537,84538],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25494,84540,84542],{"id":84541},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84544,84545],{},"静态方法，将伪数组转换为真数组",[19,84547,84548],{},[4078,84549],{"alt":78,"src":84550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[73,84552,84554],{"className":55627,"code":84553,"language":55629,"meta":78,"style":78},"\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",[32,84555,84556,84564,84572,84584,84596,84608,84616,84624,84629,84634,84639,84644,84652],{"__ignoreMap":78},[82,84557,84558,84560,84562],{"class":84,"line":85},[82,84559,3659],{"class":92},[82,84561,54362],{"class":53863},[82,84563,53870],{"class":92},[82,84565,84566,84568,84570],{"class":84,"line":157},[82,84567,54705],{"class":92},[82,84569,3755],{"class":53863},[82,84571,53870],{"class":92},[82,84573,84574,84576,84578,84580,84582],{"class":84,"line":404},[82,84575,53904],{"class":92},[82,84577,29],{"class":53863},[82,84579,57874],{"class":92},[82,84581,29],{"class":53863},[82,84583,53870],{"class":92},[82,84585,84586,84588,84590,84592,84594],{"class":84,"line":413},[82,84587,53904],{"class":92},[82,84589,29],{"class":53863},[82,84591,57874],{"class":92},[82,84593,29],{"class":53863},[82,84595,53870],{"class":92},[82,84597,84598,84600,84602,84604,84606],{"class":84,"line":508},[82,84599,53904],{"class":92},[82,84601,29],{"class":53863},[82,84603,57874],{"class":92},[82,84605,29],{"class":53863},[82,84607,53870],{"class":92},[82,84609,84610,84612,84614],{"class":84,"line":513},[82,84611,54977],{"class":92},[82,84613,3755],{"class":53863},[82,84615,53870],{"class":92},[82,84617,84618,84620,84622],{"class":84,"line":1388},[82,84619,54705],{"class":92},[82,84621,54375],{"class":53863},[82,84623,53870],{"class":92},[82,84625,84626],{"class":84,"line":1394},[82,84627,84628],{"class":92},"    const lis = document.querySelectorAll('li')\n",[82,84630,84631],{"class":84,"line":1399},[82,84632,84633],{"class":92},"    const liss = Array.from(lis)\n",[82,84635,84636],{"class":84,"line":1430},[82,84637,84638],{"class":92},"    liss.pop()\n",[82,84640,84641],{"class":84,"line":1818},[82,84642,84643],{"class":92},"    console.log(liss)\n",[82,84645,84646,84648,84650],{"class":84,"line":2082},[82,84647,54977],{"class":92},[82,84649,54375],{"class":53863},[82,84651,53870],{"class":92},[82,84653,84654,84656,84658],{"class":84,"line":2233},[82,84655,54347],{"class":92},[82,84657,54362],{"class":53863},[82,84659,53870],{"class":92},[19,84661,84662],{},[4078,84663],{"alt":78,"src":84664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24582,84666,84668],{"id":84667},"_41053-string","4.10.5.3 String",[19,84670,84671],{},[4078,84672],{"alt":78,"src":84673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25494,84675,84677],{"id":84676},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[73,84679,84681],{"className":55627,"code":84680,"language":55629,"meta":78,"style":78},"\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",[32,84682,84683,84691,84699,84704,84709,84714,84718,84723,84728,84733,84741],{"__ignoreMap":78},[82,84684,84685,84687,84689],{"class":84,"line":85},[82,84686,3659],{"class":92},[82,84688,54362],{"class":53863},[82,84690,53870],{"class":92},[82,84692,84693,84695,84697],{"class":84,"line":157},[82,84694,54705],{"class":92},[82,84696,54375],{"class":53863},[82,84698,53870],{"class":92},[82,84700,84701],{"class":84,"line":404},[82,84702,84703],{"class":92},"    \u002F\u002F 把字符串转化为数组\n",[82,84705,84706],{"class":84,"line":413},[82,84707,84708],{"class":92},"    const str = 'pink,red'\n",[82,84710,84711],{"class":84,"line":508},[82,84712,84713],{"class":92},"    const arr = str.split(',')\n",[82,84715,84716],{"class":84,"line":513},[82,84717,83192],{"class":92},[82,84719,84720],{"class":84,"line":1388},[82,84721,84722],{"class":92},"    const str1 = '2025-8-25'\n",[82,84724,84725],{"class":84,"line":1394},[82,84726,84727],{"class":92},"    const arr1 = str1.split('-')\n",[82,84729,84730],{"class":84,"line":1399},[82,84731,84732],{"class":92},"    console.log(arr1)\n",[82,84734,84735,84737,84739],{"class":84,"line":1430},[82,84736,54977],{"class":92},[82,84738,54375],{"class":53863},[82,84740,53870],{"class":92},[82,84742,84743,84745,84747],{"class":84,"line":1818},[82,84744,54347],{"class":92},[82,84746,54362],{"class":53863},[82,84748,53870],{"class":92},[25494,84750,84752],{"id":84751},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84754,246],{},[19,84756,84757],{},"substring(indexStart)",[19,84759,84760],{},"substring(indexStart, indexEnd)",[3755,84762,84763,84774,84786,84796],{},[29,84764,84765,84766,84769,84770,84773],{},"如果省略了 ",[32,84767,84768],{},"indexEnd","，则 ",[32,84771,84772],{},"substring()"," 提取字符直到字符串的末尾",[29,84775,84776,84777,84780,84781,84769,84783,84785],{},"如果 ",[32,84778,84779],{},"indexStart"," 等于 ",[32,84782,84768],{},[32,84784,84772],{}," 返回一个空字符串",[29,84787,84776,84788,84790,84791,84769,84793,84795],{},[32,84789,84779],{}," 大于 ",[32,84792,84768],{},[32,84794,84772],{}," 的效果就像交换了这两个参数一样",[29,84797,84798],{},"结束的索引号不包含想要截取的部分",[73,84800,84802],{"className":84043,"code":84801,"language":84045,"meta":78,"style":78},"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",[32,84803,84804,84816,84820,84854,84884,84888,84919,84923,84950,84980,85010,85014,85045],{"__ignoreMap":78},[82,84805,84806,84809,84811,84814],{"class":84,"line":85},[82,84807,84808],{"class":92},"const anyString ",[82,84810,113],{"class":112},[82,84812,84813],{"class":96}," \"Mozilla\"",[82,84815,3909],{"class":92},[82,84817,84818],{"class":84,"line":157},[82,84819,486],{"emptyLinePlaceholder":485},[82,84821,84822,84825,84827,84829,84831,84834,84836,84839,84841,84843,84845,84847,84849,84851],{"class":84,"line":404},[82,84823,84824],{"class":88},"console",[82,84826,233],{"class":92},[82,84828,60805],{"class":88},[82,84830,93],{"class":92},[82,84832,84833],{"class":88},"anyString",[82,84835,233],{"class":92},[82,84837,84838],{"class":88},"substring",[82,84840,93],{"class":92},[82,84842,2244],{"class":88},[82,84844,100],{"class":92},[82,84846,2283],{"class":88},[82,84848,77807],{"class":92},[82,84850,35897],{"class":112},[82,84852,84853],{"class":96}," 'M'\n",[82,84855,84856,84858,84860,84862,84864,84866,84868,84870,84872,84874,84876,84878,84880,84882],{"class":84,"line":413},[82,84857,84824],{"class":88},[82,84859,233],{"class":92},[82,84861,60805],{"class":88},[82,84863,93],{"class":92},[82,84865,84833],{"class":88},[82,84867,233],{"class":92},[82,84869,84838],{"class":88},[82,84871,93],{"class":92},[82,84873,2283],{"class":88},[82,84875,100],{"class":92},[82,84877,2244],{"class":88},[82,84879,77807],{"class":92},[82,84881,35897],{"class":112},[82,84883,84853],{"class":96},[82,84885,84886],{"class":84,"line":508},[82,84887,486],{"emptyLinePlaceholder":485},[82,84889,84890,84892,84894,84896,84898,84900,84902,84904,84906,84908,84910,84912,84914,84916],{"class":84,"line":513},[82,84891,84824],{"class":88},[82,84893,233],{"class":92},[82,84895,60805],{"class":88},[82,84897,93],{"class":92},[82,84899,84833],{"class":88},[82,84901,233],{"class":92},[82,84903,84838],{"class":88},[82,84905,93],{"class":92},[82,84907,2244],{"class":88},[82,84909,100],{"class":92},[82,84911,3102],{"class":88},[82,84913,77807],{"class":92},[82,84915,35897],{"class":112},[82,84917,84918],{"class":96}," 'Mozill'\n",[82,84920,84921],{"class":84,"line":1388},[82,84922,486],{"emptyLinePlaceholder":485},[82,84924,84925,84927,84929,84931,84933,84935,84937,84939,84941,84943,84945,84947],{"class":84,"line":1394},[82,84926,84824],{"class":88},[82,84928,233],{"class":92},[82,84930,60805],{"class":88},[82,84932,93],{"class":92},[82,84934,84833],{"class":88},[82,84936,233],{"class":92},[82,84938,84838],{"class":88},[82,84940,93],{"class":92},[82,84942,3051],{"class":88},[82,84944,77807],{"class":92},[82,84946,35897],{"class":112},[82,84948,84949],{"class":96}," 'lla'\n",[82,84951,84952,84954,84956,84958,84960,84962,84964,84966,84968,84970,84972,84974,84976,84978],{"class":84,"line":1399},[82,84953,84824],{"class":88},[82,84955,233],{"class":92},[82,84957,60805],{"class":88},[82,84959,93],{"class":92},[82,84961,84833],{"class":88},[82,84963,233],{"class":92},[82,84965,84838],{"class":88},[82,84967,93],{"class":92},[82,84969,3051],{"class":88},[82,84971,100],{"class":92},[82,84973,3127],{"class":88},[82,84975,77863],{"class":92},[82,84977,35897],{"class":112},[82,84979,84949],{"class":96},[82,84981,84982,84984,84986,84988,84990,84992,84994,84996,84998,85000,85002,85004,85006,85008],{"class":84,"line":1430},[82,84983,84824],{"class":88},[82,84985,233],{"class":92},[82,84987,60805],{"class":88},[82,84989,93],{"class":92},[82,84991,84833],{"class":88},[82,84993,233],{"class":92},[82,84995,84838],{"class":88},[82,84997,93],{"class":92},[82,84999,3127],{"class":88},[82,85001,100],{"class":92},[82,85003,3051],{"class":88},[82,85005,77807],{"class":92},[82,85007,35897],{"class":112},[82,85009,84949],{"class":96},[82,85011,85012],{"class":84,"line":1818},[82,85013,486],{"emptyLinePlaceholder":485},[82,85015,85016,85018,85020,85022,85024,85026,85028,85030,85032,85034,85036,85038,85040,85042],{"class":84,"line":2082},[82,85017,84824],{"class":88},[82,85019,233],{"class":92},[82,85021,60805],{"class":88},[82,85023,93],{"class":92},[82,85025,84833],{"class":88},[82,85027,233],{"class":92},[82,85029,84838],{"class":88},[82,85031,93],{"class":92},[82,85033,2244],{"class":88},[82,85035,100],{"class":92},[82,85037,3127],{"class":88},[82,85039,77807],{"class":92},[82,85041,35897],{"class":112},[82,85043,85044],{"class":96}," 'Mozilla'\n",[82,85046,85047,85049,85051,85053,85055,85057,85059,85061,85063,85065,85067,85069,85071,85073],{"class":84,"line":2233},[82,85048,84824],{"class":88},[82,85050,233],{"class":92},[82,85052,60805],{"class":88},[82,85054,93],{"class":92},[82,85056,84833],{"class":88},[82,85058,233],{"class":92},[82,85060,84838],{"class":88},[82,85062,93],{"class":92},[82,85064,2244],{"class":88},[82,85066,100],{"class":92},[82,85068,440],{"class":88},[82,85070,77807],{"class":92},[82,85072,35897],{"class":112},[82,85074,85044],{"class":96},[25494,85076,85078],{"id":85077},"_410533-startswith","4.10.5.3.3 startsWith",[19,85080,85081,85084,85085,85090,85091,85093,85094],{},[32,85082,85083],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2913,85086,85087],{},[32,85088,85089],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[32,85092,3978],{}," 或 ",[32,85095,68577],{},[73,85097,85099],{"className":80049,"code":85098,"language":80051,"meta":78,"style":78},"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",[32,85100,85101,85113,85132,85137,85157],{"__ignoreMap":78},[82,85102,85103,85105,85108,85110],{"class":84,"line":85},[82,85104,9384],{"class":112},[82,85106,85107],{"class":92}," str1 ",[82,85109,113],{"class":112},[82,85111,85112],{"class":96}," \"Saturday night plans\"\n",[82,85114,85115,85117,85119,85122,85125,85127,85130],{"class":84,"line":157},[82,85116,80086],{"class":92},[82,85118,60805],{"class":2384},[82,85120,85121],{"class":92},"(str1.",[82,85123,85124],{"class":2384},"startsWith",[82,85126,93],{"class":92},[82,85128,85129],{"class":96},"\"Sat\"",[82,85131,33074],{"class":92},[82,85133,85134],{"class":84,"line":404},[82,85135,85136],{"class":2828},"\u002F\u002F Expected output: true\n",[82,85138,85139,85141,85143,85145,85147,85149,85151,85153,85155],{"class":84,"line":413},[82,85140,80086],{"class":92},[82,85142,60805],{"class":2384},[82,85144,85121],{"class":92},[82,85146,85124],{"class":2384},[82,85148,93],{"class":92},[82,85150,85129],{"class":96},[82,85152,100],{"class":92},[82,85154,2841],{"class":88},[82,85156,33074],{"class":92},[82,85158,85159],{"class":84,"line":508},[82,85160,85161],{"class":2828},"\u002F\u002F Expected output: false\n",[73,85163,85165],{"className":53196,"code":85164,"language":53198,"meta":78,"style":78},"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",[32,85166,85167,85172,85177,85181,85186,85191],{"__ignoreMap":78},[82,85168,85169],{"class":84,"line":85},[82,85170,85171],{"class":92},"startsWith(searchString)\n",[82,85173,85174],{"class":84,"line":157},[82,85175,85176],{"class":92},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[82,85178,85179],{"class":84,"line":404},[82,85180,486],{"emptyLinePlaceholder":485},[82,85182,85183],{"class":84,"line":413},[82,85184,85185],{"class":92},"const str3 = 'pink老师上课中'\n",[82,85187,85188],{"class":84,"line":508},[82,85189,85190],{"class":92},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[82,85192,85193],{"class":84,"line":513},[82,85194,85195],{"class":92},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25494,85197,85199],{"id":85198},"_410534-includes","4.10.5.3.4 includes",[19,85201,85202],{},"includes(searchString) includes(searchString, position)",[26,85204,85205],{},[29,85206,85207],{},"searchString:",[19,85209,85210,85211,85213,85214,85219,85220,85225,85226,24084,85229,85232,85233,85236],{},"一个要在 ",[32,85212,3918],{}," 中查找的字符串。",[323,85215,85218],{"href":85216,"rel":85217},"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",[26449],"不能是正则表达式","。所有非正则表达式的值都会被",[323,85221,85224],{"href":85222,"rel":85223},"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",[26449],"强制转换为字符串","，因此如果该参数被省略或传入 ",[32,85227,85228],{},"undefined",[32,85230,85231],{},"includes()"," 方法会在字符串中搜索 ",[32,85234,85235],{},"\"undefined\"","，这通常不是你想要的",[26,85238,85239],{"start":157},[29,85240,85241,3608],{},[32,85242,85243],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85245,85246,85247,85250,85251],{},"在字符串中开始搜索 ",[32,85248,85249],{},"searchString"," 的位置。默认值为 ",[32,85252,2244],{},[26,85254,85255],{"start":404},[29,85256,85257],{},"返回值：",[19,85259,85260,85261,85263,85264,85268,85269],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[32,85262,85249],{}," 为空字符串的情况），则返回 ",[2913,85265,85266],{},[32,85267,3978],{}," ，否则返回 ",[2913,85270,85271],{},[32,85272,68577],{},[26,85274,85275],{"start":413},[29,85276,85277],{},"异常：",[19,85279,84776,85280,16382,85282,85286],{},[32,85281,85249],{},[323,85283,85285],{"href":85216,"rel":85284},[26449],"是一个正则表达式","，则会抛出",[19,85288,85289],{},"只要是有就是true，不需要非得以谁开头结尾",[73,85291,85293],{"className":80049,"code":85292,"language":80051,"meta":78,"style":78},"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",[32,85294,85295,85306,85329,85348,85368,85390,85409],{"__ignoreMap":78},[82,85296,85297,85299,85301,85303],{"class":84,"line":85},[82,85298,9384],{"class":112},[82,85300,82329],{"class":92},[82,85302,113],{"class":112},[82,85304,85305],{"class":96}," \"To be, or not to be, that is the question.\"\n",[82,85307,85308,85310,85312,85315,85318,85320,85323,85326],{"class":84,"line":157},[82,85309,80086],{"class":92},[82,85311,60805],{"class":2384},[82,85313,85314],{"class":92},"(str.",[82,85316,85317],{"class":2384},"includes",[82,85319,93],{"class":92},[82,85321,85322],{"class":96},"\"To be\"",[82,85324,85325],{"class":92},"))",[82,85327,85328],{"class":2828},"  \u002F\u002F true\n",[82,85330,85331,85333,85335,85337,85339,85341,85344,85346],{"class":84,"line":404},[82,85332,80086],{"class":92},[82,85334,60805],{"class":2384},[82,85336,85314],{"class":92},[82,85338,85317],{"class":2384},[82,85340,93],{"class":92},[82,85342,85343],{"class":96},"\"question\"",[82,85345,85325],{"class":92},[82,85347,85328],{"class":2828},[82,85349,85350,85352,85354,85356,85358,85360,85363,85365],{"class":84,"line":413},[82,85351,80086],{"class":92},[82,85353,60805],{"class":2384},[82,85355,85314],{"class":92},[82,85357,85317],{"class":2384},[82,85359,93],{"class":92},[82,85361,85362],{"class":96},"\"nonexistent\"",[82,85364,85325],{"class":92},[82,85366,85367],{"class":2828},"  \u002F\u002F false\n",[82,85369,85370,85372,85374,85376,85378,85380,85382,85384,85386,85388],{"class":84,"line":508},[82,85371,80086],{"class":92},[82,85373,60805],{"class":2384},[82,85375,85314],{"class":92},[82,85377,85317],{"class":2384},[82,85379,93],{"class":92},[82,85381,85322],{"class":96},[82,85383,100],{"class":92},[82,85385,2283],{"class":88},[82,85387,85325],{"class":92},[82,85389,85367],{"class":2828},[82,85391,85392,85394,85396,85398,85400,85402,85405,85407],{"class":84,"line":513},[82,85393,80086],{"class":92},[82,85395,60805],{"class":2384},[82,85397,85314],{"class":92},[82,85399,85317],{"class":2384},[82,85401,93],{"class":92},[82,85403,85404],{"class":96},"\"TO BE\"",[82,85406,85325],{"class":92},[82,85408,85367],{"class":2828},[82,85410,85411,85413,85415,85417,85419,85421,85423,85425],{"class":84,"line":1388},[82,85412,80086],{"class":92},[82,85414,60805],{"class":2384},[82,85416,85314],{"class":92},[82,85418,85317],{"class":2384},[82,85420,93],{"class":92},[82,85422,1793],{"class":96},[82,85424,85325],{"class":92},[82,85426,85328],{"class":2828},[25494,85428,85430],{"id":85429},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[73,85432,85434],{"className":55627,"code":85433,"language":55629,"meta":78,"style":78},"\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",[32,85435,85436,85444,85452,85457,85462,85467,85472,85477,85485],{"__ignoreMap":78},[82,85437,85438,85440,85442],{"class":84,"line":85},[82,85439,3659],{"class":92},[82,85441,54362],{"class":53863},[82,85443,53870],{"class":92},[82,85445,85446,85448,85450],{"class":84,"line":157},[82,85447,54705],{"class":92},[82,85449,54375],{"class":53863},[82,85451,53870],{"class":92},[82,85453,85454],{"class":84,"line":404},[82,85455,85456],{"class":92},"    const num = 10\n",[82,85458,85459],{"class":84,"line":413},[82,85460,85461],{"class":92},"    \u002F\u002F 强制转换\n",[82,85463,85464],{"class":84,"line":508},[82,85465,85466],{"class":92},"    console.log(String(num))\n",[82,85468,85469],{"class":84,"line":513},[82,85470,85471],{"class":92},"    \u002F\u002F toString()方法转换\n",[82,85473,85474],{"class":84,"line":1388},[82,85475,85476],{"class":92},"    console.log(num.toString())\n",[82,85478,85479,85481,85483],{"class":84,"line":1394},[82,85480,54977],{"class":92},[82,85482,54375],{"class":53863},[82,85484,53870],{"class":92},[82,85486,85487,85489,85491],{"class":84,"line":1399},[82,85488,54347],{"class":92},[82,85490,54362],{"class":53863},[82,85492,53870],{"class":92},[25494,85494,85496],{"id":85495},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85498,85499],{},[4078,85500],{"alt":78,"src":85501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[73,85503,85505],{"className":53196,"code":85504,"language":53198,"meta":78,"style":78},"\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",[32,85506,85507,85517,85531,85535,85543,85557,85577,85589,85597,85601,85609,85621,85629,85641,85646,85651,85656,85703,85719,85727,85735,85739],{"__ignoreMap":78},[82,85508,85509,85511,85513,85515],{"class":84,"line":85},[82,85510,53860],{"class":92},[82,85512,53864],{"class":53863},[82,85514,53867],{"class":2384},[82,85516,53870],{"class":92},[82,85518,85519,85521,85523,85525,85527,85529],{"class":84,"line":157},[82,85520,3659],{"class":92},[82,85522,53198],{"class":53863},[82,85524,53879],{"class":2384},[82,85526,113],{"class":92},[82,85528,53884],{"class":96},[82,85530,53870],{"class":92},[82,85532,85533],{"class":84,"line":404},[82,85534,486],{"emptyLinePlaceholder":485},[82,85536,85537,85539,85541],{"class":84,"line":413},[82,85538,3659],{"class":92},[82,85540,53897],{"class":53863},[82,85542,53870],{"class":92},[82,85544,85545,85547,85549,85551,85553,85555],{"class":84,"line":508},[82,85546,54705],{"class":92},[82,85548,53907],{"class":53863},[82,85550,53910],{"class":2384},[82,85552,113],{"class":92},[82,85554,53915],{"class":96},[82,85556,53870],{"class":92},[82,85558,85559,85561,85563,85565,85567,85569,85571,85573,85575],{"class":84,"line":513},[82,85560,54705],{"class":92},[82,85562,53907],{"class":53863},[82,85564,17506],{"class":2384},[82,85566,113],{"class":92},[82,85568,53954],{"class":96},[82,85570,53934],{"class":2384},[82,85572,113],{"class":92},[82,85574,53961],{"class":96},[82,85576,53870],{"class":92},[82,85578,85579,85581,85583,85585,85587],{"class":84,"line":1388},[82,85580,54705],{"class":92},[82,85582,53970],{"class":53863},[82,85584,53973],{"class":92},[82,85586,53970],{"class":53863},[82,85588,53870],{"class":92},[82,85590,85591,85593,85595],{"class":84,"line":1394},[82,85592,54347],{"class":92},[82,85594,53897],{"class":53863},[82,85596,53870],{"class":92},[82,85598,85599],{"class":84,"line":1399},[82,85600,486],{"emptyLinePlaceholder":485},[82,85602,85603,85605,85607],{"class":84,"line":1430},[82,85604,3659],{"class":92},[82,85606,54362],{"class":53863},[82,85608,53870],{"class":92},[82,85610,85611,85613,85615,85617,85619],{"class":84,"line":1818},[82,85612,54705],{"class":92},[82,85614,54173],{"class":53863},[82,85616,57874],{"class":92},[82,85618,54173],{"class":53863},[82,85620,53870],{"class":92},[82,85622,85623,85625,85627],{"class":84,"line":2082},[82,85624,54705],{"class":92},[82,85626,54375],{"class":53863},[82,85628,53870],{"class":92},[82,85630,85631,85633,85636,85638],{"class":84,"line":2233},[82,85632,13811],{"class":112},[82,85634,85635],{"class":88}," gift",[82,85637,259],{"class":112},[82,85639,85640],{"class":96}," '50g的茶叶，清洗球'\n",[82,85642,85643],{"class":84,"line":2255},[82,85644,85645],{"class":2828},"    \u002F\u002F 1.把字符串拆分为数组\n",[82,85647,85648],{"class":84,"line":2260},[82,85649,85650],{"class":2828},"    \u002F\u002F console.log(gift.split(','))\n",[82,85652,85653],{"class":84,"line":2298},[82,85654,85655],{"class":2828},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[82,85657,85658,85660,85662,85664,85667,85670,85672,85675,85677,85679,85681,85683,85685,85688,85690,85693,85695,85697,85699,85701],{"class":84,"line":2303},[82,85659,13811],{"class":112},[82,85661,76473],{"class":88},[82,85663,259],{"class":112},[82,85665,85666],{"class":92}," gift.",[82,85668,85669],{"class":2384},"split",[82,85671,93],{"class":92},[82,85673,85674],{"class":96},"'，'",[82,85676,33402],{"class":92},[82,85678,76598],{"class":2384},[82,85680,93],{"class":92},[82,85682,82349],{"class":108},[82,85684,82352],{"class":112},[82,85686,85687],{"class":96}," `\u003Cspan>【赠品】${",[82,85689,82349],{"class":92},[82,85691,85692],{"class":96},"}\u003C\u002Fspan>\u003Cbr>`",[82,85694,33402],{"class":92},[82,85696,76777],{"class":2384},[82,85698,93],{"class":92},[82,85700,76782],{"class":96},[82,85702,119],{"class":92},[82,85704,85705,85707,85709,85711,85713,85715,85717],{"class":84,"line":2321},[82,85706,54967],{"class":92},[82,85708,56959],{"class":2384},[82,85710,93],{"class":92},[82,85712,84485],{"class":96},[82,85714,76803],{"class":92},[82,85716,113],{"class":112},[82,85718,76539],{"class":92},[82,85720,85721,85723,85725],{"class":84,"line":2533},[82,85722,54977],{"class":92},[82,85724,54375],{"class":53863},[82,85726,53870],{"class":92},[82,85728,85729,85731,85733],{"class":84,"line":2538},[82,85730,54347],{"class":92},[82,85732,54362],{"class":53863},[82,85734,53870],{"class":92},[82,85736,85737],{"class":84,"line":2548},[82,85738,486],{"emptyLinePlaceholder":485},[82,85740,85741,85743,85745],{"class":84,"line":2579},[82,85742,54347],{"class":92},[82,85744,53198],{"class":53863},[82,85746,53870],{"class":92},[24582,85748,85750],{"id":85749},"_41054-number","4.10.5.4 Number",[19,85752,85753],{},[4078,85754],{"alt":78,"src":85755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85757,85758],{},"整数也可以进行toFixed来保留小数",[19,85760,85761],{},"比如：",[19,85763,85764],{},"const price=10",[19,85766,85767],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24582,85769,85771],{"id":85770},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85773,85774],{},[4078,85775],{"alt":78,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[73,85778,85780],{"className":53196,"code":85779,"language":53198,"meta":78,"style":78},"\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",[32,85781,85782,85792,85806,85810,85818,85832,85852,85864,85872,85878,85888,85898,85908,85912,85916,85922,85934,85948,85952,85956,85962,85974,85990,86000,86016,86020,86024,86030,86040,86050,86054,86058,86066,86078,86090,86102,86106,86110,86118,86130,86134,86138,86149,86159,86171,86183,86193,86197,86201,86209,86218,86230,86240,86250,86254,86258,86266,86275,86282,86292,86304,86308,86312,86321,86331,86342,86354,86366,86370,86374,86383,86393,86404,86408,86412,86418,86430,86442,86452,86462,86480,86492,86496,86500,86509,86521,86531,86541,86553,86557,86565,86573,86577,86585,86599,86607,86621,86649,86657,86665,86675,86679,86687,86695,86704,86712,86721,86731,86735,86739,86747,86755,86764,86772,86780,86793,86797,86801,86809,86817,86826,86834,86842,86857,86861,86865,86873,86881,86890,86898,86906,86920,86928,86932,86936,86941,86967,86972,87009,87014,87037,87042,87096,87101,87137,87141,87147,87152,87161,87175,87184,87203,87212,87222,87227,87232,87245,87250,87304,87330,87338,87346,87350],{"__ignoreMap":78},[82,85783,85784,85786,85788,85790],{"class":84,"line":85},[82,85785,53860],{"class":92},[82,85787,53864],{"class":53863},[82,85789,53867],{"class":2384},[82,85791,53870],{"class":92},[82,85793,85794,85796,85798,85800,85802,85804],{"class":84,"line":157},[82,85795,3659],{"class":92},[82,85797,53198],{"class":53863},[82,85799,53879],{"class":2384},[82,85801,113],{"class":92},[82,85803,53884],{"class":96},[82,85805,53870],{"class":92},[82,85807,85808],{"class":84,"line":404},[82,85809,486],{"emptyLinePlaceholder":485},[82,85811,85812,85814,85816],{"class":84,"line":413},[82,85813,3659],{"class":92},[82,85815,53897],{"class":53863},[82,85817,53870],{"class":92},[82,85819,85820,85822,85824,85826,85828,85830],{"class":84,"line":508},[82,85821,54705],{"class":92},[82,85823,53907],{"class":53863},[82,85825,53910],{"class":2384},[82,85827,113],{"class":92},[82,85829,53915],{"class":96},[82,85831,53870],{"class":92},[82,85833,85834,85836,85838,85840,85842,85844,85846,85848,85850],{"class":84,"line":513},[82,85835,54705],{"class":92},[82,85837,53907],{"class":53863},[82,85839,17506],{"class":2384},[82,85841,113],{"class":92},[82,85843,53954],{"class":96},[82,85845,53934],{"class":2384},[82,85847,113],{"class":92},[82,85849,53961],{"class":96},[82,85851,53870],{"class":92},[82,85853,85854,85856,85858,85860,85862],{"class":84,"line":1388},[82,85855,54705],{"class":92},[82,85857,53970],{"class":53863},[82,85859,53973],{"class":92},[82,85861,53970],{"class":53863},[82,85863,53870],{"class":92},[82,85865,85866,85868,85870],{"class":84,"line":1394},[82,85867,54705],{"class":92},[82,85869,2671],{"class":53863},[82,85871,53870],{"class":92},[82,85873,85874,85876],{"class":84,"line":1399},[82,85875,8995],{"class":53863},[82,85877,1349],{"class":92},[82,85879,85880,85882,85884,85886],{"class":84,"line":1430},[82,85881,57255],{"class":88},[82,85883,1357],{"class":92},[82,85885,2244],{"class":88},[82,85887,3909],{"class":92},[82,85889,85890,85892,85894,85896],{"class":84,"line":1818},[82,85891,57266],{"class":88},[82,85893,1357],{"class":92},[82,85895,2244],{"class":88},[82,85897,3909],{"class":92},[82,85899,85900,85902,85904,85906],{"class":84,"line":2082},[82,85901,75152],{"class":88},[82,85903,1357],{"class":92},[82,85905,63063],{"class":88},[82,85907,3909],{"class":92},[82,85909,85910],{"class":84,"line":2233},[82,85911,4787],{"class":92},[82,85913,85914],{"class":84,"line":2255},[82,85915,486],{"emptyLinePlaceholder":485},[82,85917,85918,85920],{"class":84,"line":2260},[82,85919,64681],{"class":2384},[82,85921,1349],{"class":92},[82,85923,85924,85926,85928,85930,85932],{"class":84,"line":2298},[82,85925,57331],{"class":88},[82,85927,1357],{"class":92},[82,85929,81128],{"class":88},[82,85931,54054],{"class":112},[82,85933,3909],{"class":92},[82,85935,85936,85938,85940,85942,85944,85946],{"class":84,"line":2303},[82,85937,57266],{"class":88},[82,85939,1357],{"class":92},[82,85941,3069],{"class":88},[82,85943,54054],{"class":112},[82,85945,54118],{"class":88},[82,85947,3909],{"class":92},[82,85949,85950],{"class":84,"line":2321},[82,85951,4787],{"class":92},[82,85953,85954],{"class":84,"line":2533},[82,85955,486],{"emptyLinePlaceholder":485},[82,85957,85958,85960],{"class":84,"line":2538},[82,85959,81179],{"class":2384},[82,85961,1349],{"class":92},[82,85963,85964,85966,85968,85970,85972],{"class":84,"line":2548},[82,85965,57255],{"class":88},[82,85967,1357],{"class":92},[82,85969,3330],{"class":88},[82,85971,54054],{"class":112},[82,85973,3909],{"class":92},[82,85975,85976,85978,85980,85982,85984,85986,85988],{"class":84,"line":2579},[82,85977,64418],{"class":88},[82,85979,1357],{"class":92},[82,85981,30703],{"class":88},[82,85983,81234],{"class":88},[82,85985,81237],{"class":88},[82,85987,3446],{"class":112},[82,85989,3909],{"class":92},[82,85991,85992,85994,85996,85998],{"class":84,"line":2585},[82,85993,57569],{"class":88},[82,85995,1357],{"class":92},[82,85997,54039],{"class":88},[82,85999,3909],{"class":92},[82,86001,86002,86004,86006,86008,86010,86012,86014],{"class":84,"line":4350},[82,86003,64535],{"class":88},[82,86005,1357],{"class":92},[82,86007,2283],{"class":88},[82,86009,54054],{"class":112},[82,86011,54083],{"class":88},[82,86013,64802],{"class":88},[82,86015,3909],{"class":92},[82,86017,86018],{"class":84,"line":4355},[82,86019,4787],{"class":92},[82,86021,86022],{"class":84,"line":4360},[82,86023,486],{"emptyLinePlaceholder":485},[82,86025,86026,86028],{"class":84,"line":4365},[82,86027,81297],{"class":2384},[82,86029,1349],{"class":92},[82,86031,86032,86034,86036,86038],{"class":84,"line":4379},[82,86033,64583],{"class":88},[82,86035,1357],{"class":92},[82,86037,64588],{"class":88},[82,86039,3909],{"class":92},[82,86041,86042,86044,86046,86048],{"class":84,"line":4384},[82,86043,57444],{"class":88},[82,86045,1357],{"class":92},[82,86047,64376],{"class":88},[82,86049,3909],{"class":92},[82,86051,86052],{"class":84,"line":5176},[82,86053,4787],{"class":92},[82,86055,86056],{"class":84,"line":5190},[82,86057,486],{"emptyLinePlaceholder":485},[82,86059,86060,86062,86064],{"class":84,"line":5198},[82,86061,81179],{"class":2384},[82,86063,58174],{"class":53863},[82,86065,1349],{"class":92},[82,86067,86068,86070,86072,86074,86076],{"class":84,"line":5203},[82,86069,57331],{"class":88},[82,86071,1357],{"class":92},[82,86073,3366],{"class":88},[82,86075,54054],{"class":112},[82,86077,3909],{"class":92},[82,86079,86080,86082,86084,86086,86088],{"class":84,"line":5209},[82,86081,57345],{"class":88},[82,86083,1357],{"class":92},[82,86085,3366],{"class":88},[82,86087,54054],{"class":112},[82,86089,3909],{"class":92},[82,86091,86092,86094,86096,86098,86100],{"class":84,"line":5215},[82,86093,64308],{"class":88},[82,86095,1357],{"class":92},[82,86097,3077],{"class":88},[82,86099,54054],{"class":112},[82,86101,3909],{"class":92},[82,86103,86104],{"class":84,"line":5220},[82,86105,4787],{"class":92},[82,86107,86108],{"class":84,"line":10539},[82,86109,486],{"emptyLinePlaceholder":485},[82,86111,86112,86114,86116],{"class":84,"line":10563},[82,86113,81179],{"class":2384},[82,86115,64862],{"class":2384},[82,86117,1349],{"class":92},[82,86119,86120,86122,86124,86126,86128],{"class":84,"line":10568},[82,86121,57331],{"class":88},[82,86123,1357],{"class":92},[82,86125,4325],{"class":88},[82,86127,54054],{"class":112},[82,86129,3909],{"class":92},[82,86131,86132],{"class":84,"line":10574},[82,86133,4787],{"class":92},[82,86135,86136],{"class":84,"line":10601},[82,86137,486],{"emptyLinePlaceholder":485},[82,86139,86140,86142,86144,86147],{"class":84,"line":10606},[82,86141,81179],{"class":2384},[82,86143,64862],{"class":2384},[82,86145,86146],{"class":2384}," .tag",[82,86148,1349],{"class":92},[82,86150,86151,86153,86155,86157],{"class":84,"line":10612},[82,86152,57569],{"class":88},[82,86154,1357],{"class":92},[82,86156,63427],{"class":88},[82,86158,3909],{"class":92},[82,86160,86161,86163,86165,86167,86169],{"class":84,"line":10624},[82,86162,57255],{"class":88},[82,86164,1357],{"class":92},[82,86166,1425],{"class":88},[82,86168,54054],{"class":112},[82,86170,3909],{"class":92},[82,86172,86173,86175,86177,86179,86181],{"class":84,"line":10636},[82,86174,57482],{"class":88},[82,86176,1357],{"class":92},[82,86178,3254],{"class":88},[82,86180,54054],{"class":112},[82,86182,3909],{"class":92},[82,86184,86185,86187,86189,86191],{"class":84,"line":10648},[82,86186,59974],{"class":88},[82,86188,1357],{"class":92},[82,86190,64628],{"class":88},[82,86192,3909],{"class":92},[82,86194,86195],{"class":84,"line":12307},[82,86196,4787],{"class":92},[82,86198,86199],{"class":84,"line":12332},[82,86200,486],{"emptyLinePlaceholder":485},[82,86202,86203,86205,86207],{"class":84,"line":12355},[82,86204,81179],{"class":2384},[82,86206,81471],{"class":2384},[82,86208,1363],{"class":92},[82,86210,86211,86213,86216],{"class":84,"line":12379},[82,86212,81179],{"class":2384},[82,86214,86215],{"class":2384}," .sub-total",[82,86217,1349],{"class":92},[82,86219,86220,86222,86224,86226,86228],{"class":84,"line":12384},[82,86221,57482],{"class":88},[82,86223,1357],{"class":92},[82,86225,1373],{"class":88},[82,86227,54054],{"class":112},[82,86229,3909],{"class":92},[82,86231,86232,86234,86236,86238],{"class":84,"line":12389},[82,86233,59974],{"class":88},[82,86235,1357],{"class":92},[82,86237,81494],{"class":88},[82,86239,3909],{"class":92},[82,86241,86242,86244,86246,86248],{"class":84,"line":12394},[82,86243,64395],{"class":88},[82,86245,1357],{"class":92},[82,86247,2283],{"class":88},[82,86249,3909],{"class":92},[82,86251,86252],{"class":84,"line":12403},[82,86253,4787],{"class":92},[82,86255,86256],{"class":84,"line":12408},[82,86257,486],{"emptyLinePlaceholder":485},[82,86259,86260,86262,86264],{"class":84,"line":12414},[82,86261,81179],{"class":2384},[82,86263,81511],{"class":2384},[82,86265,1363],{"class":92},[82,86267,86268,86270,86273],{"class":84,"line":12435},[82,86269,81179],{"class":2384},[82,86271,86272],{"class":2384}," .sub-total::before",[82,86274,1363],{"class":92},[82,86276,86277,86280],{"class":84,"line":12441},[82,86278,86279],{"class":2384},"    .amount::before",[82,86281,1349],{"class":92},[82,86283,86284,86286,86288,86290],{"class":84,"line":12455},[82,86285,81518],{"class":88},[82,86287,1357],{"class":92},[82,86289,81523],{"class":96},[82,86291,3909],{"class":92},[82,86293,86294,86296,86298,86300,86302],{"class":84,"line":12461},[82,86295,57482],{"class":88},[82,86297,1357],{"class":92},[82,86299,3254],{"class":88},[82,86301,54054],{"class":112},[82,86303,3909],{"class":92},[82,86305,86306],{"class":84,"line":12488},[82,86307,4787],{"class":92},[82,86309,86310],{"class":84,"line":12497},[82,86311,486],{"emptyLinePlaceholder":485},[82,86313,86314,86316,86319],{"class":84,"line":12503},[82,86315,81179],{"class":2384},[82,86317,86318],{"class":2384}," .spec",[82,86320,1349],{"class":92},[82,86322,86323,86325,86327,86329],{"class":84,"line":12511},[82,86324,64395],{"class":88},[82,86326,1357],{"class":92},[82,86328,1425],{"class":88},[82,86330,3909],{"class":92},[82,86332,86333,86335,86337,86340],{"class":84,"line":12516},[82,86334,59974],{"class":88},[82,86336,1357],{"class":92},[82,86338,86339],{"class":88},"#888",[82,86341,3909],{"class":92},[82,86343,86344,86346,86348,86350,86352],{"class":84,"line":19189},[82,86345,57482],{"class":88},[82,86347,1357],{"class":92},[82,86349,3305],{"class":88},[82,86351,54054],{"class":112},[82,86353,3909],{"class":92},[82,86355,86356,86358,86360,86362,86364],{"class":84,"line":19195},[82,86357,64558],{"class":88},[82,86359,1357],{"class":92},[82,86361,3451],{"class":88},[82,86363,54054],{"class":112},[82,86365,3909],{"class":92},[82,86367,86368],{"class":84,"line":19218},[82,86369,4787],{"class":92},[82,86371,86372],{"class":84,"line":19224},[82,86373,486],{"emptyLinePlaceholder":485},[82,86375,86376,86378,86381],{"class":84,"line":19247},[82,86377,81179],{"class":2384},[82,86379,86380],{"class":2384}," .count",[82,86382,1349],{"class":92},[82,86384,86385,86387,86389,86391],{"class":84,"line":19261},[82,86386,64395],{"class":88},[82,86388,1357],{"class":92},[82,86390,2283],{"class":88},[82,86392,3909],{"class":92},[82,86394,86395,86397,86399,86402],{"class":84,"line":19281},[82,86396,59974],{"class":88},[82,86398,1357],{"class":92},[82,86400,86401],{"class":88},"#aaa",[82,86403,3909],{"class":92},[82,86405,86406],{"class":84,"line":19287},[82,86407,4787],{"class":92},[82,86409,86410],{"class":84,"line":19298},[82,86411,486],{"emptyLinePlaceholder":485},[82,86413,86414,86416],{"class":84,"line":19321},[82,86415,75031],{"class":2384},[82,86417,1349],{"class":92},[82,86419,86420,86422,86424,86426,86428],{"class":84,"line":19343},[82,86421,57331],{"class":88},[82,86423,1357],{"class":92},[82,86425,81128],{"class":88},[82,86427,54054],{"class":112},[82,86429,3909],{"class":92},[82,86431,86432,86434,86436,86438,86440],{"class":84,"line":19348},[82,86433,57266],{"class":88},[82,86435,1357],{"class":92},[82,86437,2244],{"class":88},[82,86439,54118],{"class":88},[82,86441,3909],{"class":92},[82,86443,86444,86446,86448,86450],{"class":84,"line":19354},[82,86445,57569],{"class":88},[82,86447,1357],{"class":92},[82,86449,54039],{"class":88},[82,86451,3909],{"class":92},[82,86453,86454,86456,86458,86460],{"class":84,"line":19368},[82,86455,57580],{"class":88},[82,86457,1357],{"class":92},[82,86459,54142],{"class":88},[82,86461,3909],{"class":92},[82,86463,86464,86467,86469,86471,86473,86475,86478],{"class":84,"line":19381},[82,86465,86466],{"class":88},"      border-top",[82,86468,1357],{"class":92},[82,86470,2283],{"class":88},[82,86472,54054],{"class":112},[82,86474,54083],{"class":88},[82,86476,86477],{"class":88}," #4e4e4e",[82,86479,3909],{"class":92},[82,86481,86482,86484,86486,86488,86490],{"class":84,"line":19386},[82,86483,57255],{"class":88},[82,86485,1357],{"class":92},[82,86487,3451],{"class":88},[82,86489,54054],{"class":112},[82,86491,3909],{"class":92},[82,86493,86494],{"class":84,"line":19400},[82,86495,4787],{"class":92},[82,86497,86498],{"class":84,"line":19405},[82,86499,486],{"emptyLinePlaceholder":485},[82,86501,86502,86504,86507],{"class":84,"line":19411},[82,86503,75031],{"class":2384},[82,86505,86506],{"class":2384}," .amount",[82,86508,1349],{"class":92},[82,86510,86511,86513,86515,86517,86519],{"class":84,"line":19416},[82,86512,57482],{"class":88},[82,86514,1357],{"class":92},[82,86516,1373],{"class":88},[82,86518,54054],{"class":112},[82,86520,3909],{"class":92},[82,86522,86523,86525,86527,86529],{"class":84,"line":19430},[82,86524,59974],{"class":88},[82,86526,1357],{"class":92},[82,86528,81494],{"class":88},[82,86530,3909],{"class":92},[82,86532,86533,86535,86537,86539],{"class":84,"line":19435},[82,86534,64892],{"class":88},[82,86536,1357],{"class":92},[82,86538,54051],{"class":88},[82,86540,3909],{"class":92},[82,86542,86543,86545,86547,86549,86551],{"class":84,"line":19440},[82,86544,64308],{"class":88},[82,86546,1357],{"class":92},[82,86548,3408],{"class":88},[82,86550,54054],{"class":112},[82,86552,3909],{"class":92},[82,86554,86555],{"class":84,"line":19454},[82,86556,4787],{"class":92},[82,86558,86559,86561,86563],{"class":84,"line":19466},[82,86560,54977],{"class":92},[82,86562,2671],{"class":53863},[82,86564,53870],{"class":92},[82,86566,86567,86569,86571],{"class":84,"line":19471},[82,86568,54347],{"class":92},[82,86570,53897],{"class":53863},[82,86572,53870],{"class":92},[82,86574,86575],{"class":84,"line":19484},[82,86576,486],{"emptyLinePlaceholder":485},[82,86578,86579,86581,86583],{"class":84,"line":19489},[82,86580,3659],{"class":92},[82,86582,54362],{"class":53863},[82,86584,53870],{"class":92},[82,86586,86587,86589,86591,86593,86595,86597],{"class":84,"line":19494},[82,86588,54705],{"class":92},[82,86590,54173],{"class":53863},[82,86592,56046],{"class":2384},[82,86594,113],{"class":92},[82,86596,65166],{"class":96},[82,86598,53870],{"class":92},[82,86600,86601,86603,86605],{"class":84,"line":19499},[82,86602,54977],{"class":92},[82,86604,54173],{"class":53863},[82,86606,53870],{"class":92},[82,86608,86609,86611,86613,86615,86617,86619],{"class":84,"line":19512},[82,86610,54705],{"class":92},[82,86612,54173],{"class":53863},[82,86614,56046],{"class":2384},[82,86616,113],{"class":92},[82,86618,65138],{"class":96},[82,86620,53870],{"class":92},[82,86622,86623,86625,86627,86630,86632,86634,86636,86639,86641,86643,86645,86647],{"class":84,"line":19517},[82,86624,53904],{"class":92},[82,86626,54173],{"class":53863},[82,86628,86629],{"class":92},">合计：\u003C",[82,86631,82],{"class":53863},[82,86633,56046],{"class":2384},[82,86635,113],{"class":92},[82,86637,86638],{"class":96},"\"amount\"",[82,86640,57874],{"class":92},[82,86642,82],{"class":53863},[82,86644,57874],{"class":92},[82,86646,54173],{"class":53863},[82,86648,53870],{"class":92},[82,86650,86651,86653,86655],{"class":84,"line":35202},[82,86652,54977],{"class":92},[82,86654,54173],{"class":53863},[82,86656,53870],{"class":92},[82,86658,86659,86661,86663],{"class":84,"line":35208},[82,86660,54705],{"class":92},[82,86662,54375],{"class":53863},[82,86664,53870],{"class":92},[82,86666,86667,86669,86671,86673],{"class":84,"line":35214},[82,86668,13811],{"class":112},[82,86670,81931],{"class":88},[82,86672,259],{"class":112},[82,86674,1463],{"class":92},[82,86676,86677],{"class":84,"line":35220},[82,86678,81940],{"class":92},[82,86680,86681,86683,86685],{"class":84,"line":35226},[82,86682,81945],{"class":92},[82,86684,81948],{"class":96},[82,86686,1363],{"class":92},[82,86688,86689,86691,86693],{"class":84,"line":35237},[82,86690,81955],{"class":92},[82,86692,81958],{"class":96},[82,86694,1363],{"class":92},[82,86696,86697,86699,86702],{"class":84,"line":35243},[82,86698,81965],{"class":92},[82,86700,86701],{"class":88},"289.9",[82,86703,1363],{"class":92},[82,86705,86706,86708,86710],{"class":84,"line":35263},[82,86707,81975],{"class":92},[82,86709,81978],{"class":96},[82,86711,1363],{"class":92},[82,86713,86714,86717,86719],{"class":84,"line":35269},[82,86715,86716],{"class":92},"        count: ",[82,86718,1425],{"class":88},[82,86720,1363],{"class":92},[82,86722,86723,86726,86729],{"class":84,"line":35280},[82,86724,86725],{"class":92},"        spec: { color: ",[82,86727,86728],{"class":96},"'白色'",[82,86730,58163],{"class":92},[82,86732,86733],{"class":84,"line":35286},[82,86734,80446],{"class":92},[82,86736,86737],{"class":84,"line":35292},[82,86738,81940],{"class":92},[82,86740,86741,86743,86745],{"class":84,"line":35298},[82,86742,81945],{"class":92},[82,86744,82039],{"class":96},[82,86746,1363],{"class":92},[82,86748,86749,86751,86753],{"class":84,"line":35304},[82,86750,81955],{"class":92},[82,86752,82048],{"class":96},[82,86754,1363],{"class":92},[82,86756,86757,86759,86762],{"class":84,"line":35310},[82,86758,81965],{"class":92},[82,86760,86761],{"class":88},"109.8",[82,86763,1363],{"class":92},[82,86765,86766,86768,86770],{"class":84,"line":35316},[82,86767,81975],{"class":92},[82,86769,82066],{"class":96},[82,86771,1363],{"class":92},[82,86773,86774,86776,86778],{"class":84,"line":35322},[82,86775,86716],{"class":92},[82,86777,2841],{"class":88},[82,86779,1363],{"class":92},[82,86781,86782,86785,86787,86789,86791],{"class":84,"line":35342},[82,86783,86784],{"class":92},"        spec: { size: ",[82,86786,84457],{"class":96},[82,86788,58023],{"class":92},[82,86790,84462],{"class":96},[82,86792,58163],{"class":92},[82,86794,86795],{"class":84,"line":35348},[82,86796,80446],{"class":92},[82,86798,86799],{"class":84,"line":35364},[82,86800,81940],{"class":92},[82,86802,86803,86805,86807],{"class":84,"line":35370},[82,86804,81945],{"class":92},[82,86806,82083],{"class":96},[82,86808,1363],{"class":92},[82,86810,86811,86813,86815],{"class":84,"line":35384},[82,86812,81955],{"class":92},[82,86814,82092],{"class":96},[82,86816,1363],{"class":92},[82,86818,86819,86821,86824],{"class":84,"line":35390},[82,86820,81965],{"class":92},[82,86822,86823],{"class":88},"488",[82,86825,1363],{"class":92},[82,86827,86828,86830,86832],{"class":84,"line":35405},[82,86829,81975],{"class":92},[82,86831,82110],{"class":96},[82,86833,1363],{"class":92},[82,86835,86836,86838,86840],{"class":84,"line":35411},[82,86837,86716],{"class":92},[82,86839,2283],{"class":88},[82,86841,1363],{"class":92},[82,86843,86844,86846,86849,86852,86855],{"class":84,"line":35420},[82,86845,86725],{"class":92},[82,86847,86848],{"class":96},"'青色'",[82,86850,86851],{"class":92},", sum: ",[82,86853,86854],{"class":96},"'一大四小'",[82,86856,58163],{"class":92},[82,86858,86859],{"class":84,"line":35426},[82,86860,80446],{"class":92},[82,86862,86863],{"class":84,"line":35435},[82,86864,81940],{"class":92},[82,86866,86867,86869,86871],{"class":84,"line":35441},[82,86868,81945],{"class":92},[82,86870,82127],{"class":96},[82,86872,1363],{"class":92},[82,86874,86875,86877,86879],{"class":84,"line":35447},[82,86876,81955],{"class":92},[82,86878,82136],{"class":96},[82,86880,1363],{"class":92},[82,86882,86883,86885,86888],{"class":84,"line":35456},[82,86884,81965],{"class":92},[82,86886,86887],{"class":88},"139",[82,86889,1363],{"class":92},[82,86891,86892,86894,86896],{"class":84,"line":35462},[82,86893,81975],{"class":92},[82,86895,82154],{"class":96},[82,86897,1363],{"class":92},[82,86899,86900,86902,86904],{"class":84,"line":35473},[82,86901,86716],{"class":92},[82,86903,2283],{"class":88},[82,86905,1363],{"class":92},[82,86907,86908,86910,86913,86915,86918],{"class":84,"line":35479},[82,86909,86784],{"class":92},[82,86911,86912],{"class":96},"'小号'",[82,86914,58023],{"class":92},[82,86916,86917],{"class":96},"'紫色'",[82,86919,58029],{"class":92},[82,86921,86922,86925],{"class":84,"line":35498},[82,86923,86924],{"class":92},"        gift: ",[82,86926,86927],{"class":96},"'50g茶叶,清洗球'\n",[82,86929,86930],{"class":84,"line":35504},[82,86931,54958],{"class":92},[82,86933,86934],{"class":84,"line":35515},[82,86935,55669],{"class":92},[82,86937,86938],{"class":84,"line":35521},[82,86939,86940],{"class":2828},"    \u002F\u002F  1.根据数据渲染页面\n",[82,86942,86943,86945,86947,86949,86951,86953,86955,86957,86959,86961,86963,86965],{"class":84,"line":35541},[82,86944,54967],{"class":92},[82,86946,56959],{"class":2384},[82,86948,93],{"class":92},[82,86950,82455],{"class":96},[82,86952,76803],{"class":92},[82,86954,113],{"class":112},[82,86956,82602],{"class":92},[82,86958,76598],{"class":2384},[82,86960,93],{"class":92},[82,86962,82349],{"class":108},[82,86964,82352],{"class":112},[82,86966,1349],{"class":92},[82,86968,86969],{"class":84,"line":35557},[82,86970,86971],{"class":2828},"      \u002F\u002F 对象解构\n",[82,86973,86974,86976,86978,86980,86982,86984,86986,86989,86991,86993,86995,86998,87000,87003,87005,87007],{"class":84,"line":35563},[82,86975,60786],{"class":112},[82,86977,82361],{"class":92},[82,86979,82374],{"class":88},[82,86981,100],{"class":92},[82,86983,82364],{"class":88},[82,86985,100],{"class":92},[82,86987,86988],{"class":88},"count",[82,86990,100],{"class":92},[82,86992,82369],{"class":88},[82,86994,100],{"class":92},[82,86996,86997],{"class":88},"spec",[82,86999,100],{"class":92},[82,87001,87002],{"class":88},"gift",[82,87004,82377],{"class":92},[82,87006,113],{"class":112},[82,87008,82382],{"class":92},[82,87010,87011],{"class":84,"line":35577},[82,87012,87013],{"class":2828},"      \u002F\u002F 规格文字模块处理\n",[82,87015,87016,87018,87021,87023,87025,87027,87029,87031,87033,87035],{"class":84,"line":35583},[82,87017,60786],{"class":112},[82,87019,87020],{"class":88}," text",[82,87022,259],{"class":112},[82,87024,84492],{"class":92},[82,87026,84495],{"class":2384},[82,87028,84498],{"class":92},[82,87030,76777],{"class":2384},[82,87032,93],{"class":92},[82,87034,84505],{"class":96},[82,87036,119],{"class":92},[82,87038,87039],{"class":84,"line":35589},[82,87040,87041],{"class":2828},"      \u002F\u002F 处理赠品模块\n",[82,87043,87044,87046,87048,87050,87053,87055,87057,87059,87061,87064,87066,87068,87070,87072,87074,87077,87079,87082,87084,87086,87088,87090,87092,87094],{"class":84,"line":35600},[82,87045,60786],{"class":112},[82,87047,76473],{"class":88},[82,87049,259],{"class":112},[82,87051,87052],{"class":92}," gift ",[82,87054,3735],{"class":112},[82,87056,85666],{"class":92},[82,87058,85669],{"class":2384},[82,87060,93],{"class":92},[82,87062,87063],{"class":96},"','",[82,87065,33402],{"class":92},[82,87067,76598],{"class":2384},[82,87069,93],{"class":92},[82,87071,82349],{"class":108},[82,87073,82352],{"class":112},[82,87075,87076],{"class":96}," `\u003Cspan class=\"tag\">【赠品】${",[82,87078,82349],{"class":92},[82,87080,87081],{"class":96},"}\u003C\u002Fspan>`",[82,87083,33402],{"class":92},[82,87085,76777],{"class":2384},[82,87087,93],{"class":92},[82,87089,76782],{"class":96},[82,87091,725],{"class":92},[82,87093,3608],{"class":112},[82,87095,72660],{"class":96},[82,87097,87098],{"class":84,"line":35606},[82,87099,87100],{"class":2828},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[82,87102,87103,87105,87108,87110,87113,87115,87117,87119,87122,87124,87126,87128,87131,87133,87135],{"class":84,"line":35612},[82,87104,60786],{"class":112},[82,87106,87107],{"class":88}," subtotal",[82,87109,259],{"class":112},[82,87111,87112],{"class":92}," ((price ",[82,87114,3212],{"class":112},[82,87116,8346],{"class":88},[82,87118,9110],{"class":112},[82,87120,87121],{"class":92}," count) ",[82,87123,1147],{"class":112},[82,87125,8346],{"class":88},[82,87127,33402],{"class":92},[82,87129,87130],{"class":2384},"toFixed",[82,87132,93],{"class":92},[82,87134,1425],{"class":88},[82,87136,119],{"class":92},[82,87138,87139],{"class":84,"line":35622},[82,87140,486],{"emptyLinePlaceholder":485},[82,87142,87143,87145],{"class":84,"line":35628},[82,87144,76536],{"class":112},[82,87146,72724],{"class":96},[82,87148,87149],{"class":84,"line":35639},[82,87150,87151],{"class":96},"        \u003Cdiv class=\"item\">\n",[82,87153,87154,87157,87159],{"class":84,"line":35645},[82,87155,87156],{"class":96},"          \u003Cimg src=\"${",[82,87158,82374],{"class":92},[82,87160,82406],{"class":96},[82,87162,87163,87166,87168,87171,87173],{"class":84,"line":35655},[82,87164,87165],{"class":96},"          \u003Cp class=\"name\">${",[82,87167,82364],{"class":92},[82,87169,87170],{"class":96},"}${",[82,87172,3918],{"class":92},[82,87174,82416],{"class":96},[82,87176,87177,87180,87182],{"class":84,"line":35660},[82,87178,87179],{"class":96},"          \u003Cp class=\"spec\">${",[82,87181,7780],{"class":92},[82,87183,82416],{"class":96},[82,87185,87186,87189,87191,87193,87195,87197,87199,87201],{"class":84,"line":35666},[82,87187,87188],{"class":96},"          \u003Cp class=\"price\">${",[82,87190,82369],{"class":92},[82,87192,233],{"class":96},[82,87194,87130],{"class":2384},[82,87196,93],{"class":96},[82,87198,1425],{"class":88},[82,87200,3187],{"class":96},[82,87202,82416],{"class":96},[82,87204,87205,87208,87210],{"class":84,"line":35715},[82,87206,87207],{"class":96},"          \u003Cp class=\"count\">x${",[82,87209,86988],{"class":92},[82,87211,82416],{"class":96},[82,87213,87214,87217,87220],{"class":84,"line":35762},[82,87215,87216],{"class":96},"          \u003Cp class=\"sub-total\">${",[82,87218,87219],{"class":92},"subtotal",[82,87221,82416],{"class":96},[82,87223,87224],{"class":84,"line":35767},[82,87225,87226],{"class":96},"        \u003C\u002Fdiv> \n",[82,87228,87229],{"class":84,"line":35773},[82,87230,87231],{"class":96},"             `\n",[82,87233,87234,87237,87239,87241,87243],{"class":84,"line":35792},[82,87235,87236],{"class":92},"    }).",[82,87238,76777],{"class":2384},[82,87240,93],{"class":92},[82,87242,76782],{"class":96},[82,87244,119],{"class":92},[82,87246,87247],{"class":84,"line":35798},[82,87248,87249],{"class":2828},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[82,87251,87252,87254,87256,87258,87260,87263,87265,87268,87270,87272,87274,87277,87280,87282,87285,87287,87289,87291,87294,87296,87298,87300,87302],{"class":84,"line":35817},[82,87253,13811],{"class":112},[82,87255,65342],{"class":88},[82,87257,259],{"class":112},[82,87259,82602],{"class":92},[82,87261,87262],{"class":2384},"reduce",[82,87264,4976],{"class":92},[82,87266,87267],{"class":108},"prev",[82,87269,100],{"class":92},[82,87271,82349],{"class":108},[82,87273,725],{"class":92},[82,87275,87276],{"class":112},"=>",[82,87278,87279],{"class":92}," prev ",[82,87281,2249],{"class":112},[82,87283,87284],{"class":92}," (item.price ",[82,87286,3212],{"class":112},[82,87288,8346],{"class":88},[82,87290,9110],{"class":112},[82,87292,87293],{"class":92}," item.count) ",[82,87295,1147],{"class":112},[82,87297,8346],{"class":88},[82,87299,100],{"class":92},[82,87301,2244],{"class":88},[82,87303,119],{"class":92},[82,87305,87306,87308,87310,87312,87315,87317,87319,87322,87324,87326,87328],{"class":84,"line":35823},[82,87307,54967],{"class":92},[82,87309,56959],{"class":2384},[82,87311,93],{"class":92},[82,87313,87314],{"class":96},"'.amount'",[82,87316,76803],{"class":92},[82,87318,113],{"class":112},[82,87320,87321],{"class":92}," total.",[82,87323,87130],{"class":2384},[82,87325,93],{"class":92},[82,87327,1425],{"class":88},[82,87329,119],{"class":92},[82,87331,87332,87334,87336],{"class":84,"line":35829},[82,87333,54977],{"class":92},[82,87335,54375],{"class":53863},[82,87337,53870],{"class":92},[82,87339,87340,87342,87344],{"class":84,"line":35839},[82,87341,54347],{"class":92},[82,87343,54362],{"class":53863},[82,87345,53870],{"class":92},[82,87347,87348],{"class":84,"line":35844},[82,87349,486],{"emptyLinePlaceholder":485},[82,87351,87352,87354,87356],{"class":84,"line":35850},[82,87353,54347],{"class":92},[82,87355,53198],{"class":53863},[82,87357,53870],{"class":92},[14,87359,87361],{"id":87360},"_411-编程思想","4.11 编程思想",[65,87363,87365],{"id":87364},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87367,87368,87371],{},[2913,87369,87370],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87373,87374],{},"调用就可以了",[19,87376,87377],{},[4078,87378],{"alt":78,"src":87379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[65,87381,87383],{"id":87382},"_4112-面向对象","4.11.2 面向对象",[19,87385,87386],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87388,87389],{},[4078,87390],{"alt":78,"src":87391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87393,87394],{},"面向对象的特性：",[3755,87396,87397,87400,87403],{},[29,87398,87399],{},"封装性",[29,87401,87402],{},"继承性",[29,87404,87405],{},"多态性",[65,87407,87409],{"id":87408},"_4113-两者比较","4.11.3 两者比较",[19,87411,87412],{},[4078,87413],{"alt":78,"src":87414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87416,87418],{"id":87417},"_412-构造函数回顾","4.12 构造函数回顾",[19,87420,87421],{},[4078,87422],{"alt":78,"src":87423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87425,87426],{},[4078,87427],{"alt":78,"src":87428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87430,87431],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87433,87434],{},[4078,87435],{"alt":78,"src":87436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87438,87440],{"id":87439},"_413-原型","4.13 原型",[65,87442,87444],{"id":87443},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87446,87447],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87449,87450],{},[4078,87451],{"alt":78,"src":87452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87454,87455],{},[4078,87456],{"alt":78,"src":87457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87459,87460],{},"原型是构造函数的属性，它也是一个对象",[19,87462,87463],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87465,87466],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[73,87468,87470],{"className":55627,"code":87469,"language":55629,"meta":78,"style":78},"\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",[32,87471,87472,87480,87485,87493,87498,87503,87508,87513,87518,87522,87526,87530,87535,87540,87544,87549,87554,87559,87564,87569,87573,87581],{"__ignoreMap":78},[82,87473,87474,87476,87478],{"class":84,"line":85},[82,87475,3659],{"class":92},[82,87477,54362],{"class":53863},[82,87479,53870],{"class":92},[82,87481,87482],{"class":84,"line":157},[82,87483,87484],{"class":2828},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[82,87486,87487,87489,87491],{"class":84,"line":404},[82,87488,54705],{"class":92},[82,87490,54375],{"class":53863},[82,87492,53870],{"class":92},[82,87494,87495],{"class":84,"line":413},[82,87496,87497],{"class":92},"    function Star(uname, age) {\n",[82,87499,87500],{"class":84,"line":508},[82,87501,87502],{"class":92},"      this.uname = uname,\n",[82,87504,87505],{"class":84,"line":513},[82,87506,87507],{"class":92},"        this.age = age\n",[82,87509,87510],{"class":84,"line":1388},[82,87511,87512],{"class":92},"      \u002F\u002F this.sing = function () {\n",[82,87514,87515],{"class":84,"line":1394},[82,87516,87517],{"class":92},"      \u002F\u002F   console.log('唱歌')\n",[82,87519,87520],{"class":84,"line":1399},[82,87521,486],{"emptyLinePlaceholder":485},[82,87523,87524],{"class":84,"line":1430},[82,87525,62595],{"class":92},[82,87527,87528],{"class":84,"line":1818},[82,87529,4787],{"class":92},[82,87531,87532],{"class":84,"line":2082},[82,87533,87534],{"class":92},"    Star.prototype.sing = function () {\n",[82,87536,87537],{"class":84,"line":2233},[82,87538,87539],{"class":92},"      console.log('唱歌')\n",[82,87541,87542],{"class":84,"line":2255},[82,87543,4787],{"class":92},[82,87545,87546],{"class":84,"line":2260},[82,87547,87548],{"class":92},"    \u002F\u002F console.dir(Star.prototype)\n",[82,87550,87551],{"class":84,"line":2298},[82,87552,87553],{"class":92},"    const pink = new Star('pink', 18)\n",[82,87555,87556],{"class":84,"line":2303},[82,87557,87558],{"class":92},"    const red = new Star('red', 20)\n",[82,87560,87561],{"class":84,"line":2321},[82,87562,87563],{"class":92},"    pink.sing()\n",[82,87565,87566],{"class":84,"line":2533},[82,87567,87568],{"class":92},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[82,87570,87571],{"class":84,"line":2538},[82,87572,486],{"emptyLinePlaceholder":485},[82,87574,87575,87577,87579],{"class":84,"line":2548},[82,87576,54977],{"class":92},[82,87578,54375],{"class":53863},[82,87580,53870],{"class":92},[82,87582,87583,87585,87587],{"class":84,"line":2579},[82,87584,54347],{"class":92},[82,87586,54362],{"class":53863},[82,87588,53870],{"class":92},[19,87590,87591],{},[4078,87592],{"alt":78,"src":87593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[73,87595,87597],{"className":55627,"code":87596,"language":55629,"meta":78,"style":78},"\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",[32,87598,87599,87607,87615,87620,87625,87630,87635,87639,87644,87649,87654,87658,87663,87667,87671,87676,87680,87688],{"__ignoreMap":78},[82,87600,87601,87603,87605],{"class":84,"line":85},[82,87602,3659],{"class":92},[82,87604,54362],{"class":53863},[82,87606,53870],{"class":92},[82,87608,87609,87611,87613],{"class":84,"line":157},[82,87610,54705],{"class":92},[82,87612,54375],{"class":53863},[82,87614,53870],{"class":92},[82,87616,87617],{"class":84,"line":404},[82,87618,87619],{"class":92},"    let that\n",[82,87621,87622],{"class":84,"line":413},[82,87623,87624],{"class":92},"    function Star(uname) {\n",[82,87626,87627],{"class":84,"line":508},[82,87628,87629],{"class":92},"      this.uname = uname\n",[82,87631,87632],{"class":84,"line":513},[82,87633,87634],{"class":92},"      that = this\n",[82,87636,87637],{"class":84,"line":1388},[82,87638,4787],{"class":92},[82,87640,87641],{"class":84,"line":1394},[82,87642,87643],{"class":92},"    \u002F\u002F 实例对象是 ldh\n",[82,87645,87646],{"class":84,"line":1399},[82,87647,87648],{"class":92},"    const ldh = new Star('刘德华')\n",[82,87650,87651],{"class":84,"line":1430},[82,87652,87653],{"class":92},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[82,87655,87656],{"class":84,"line":1818},[82,87657,486],{"emptyLinePlaceholder":485},[82,87659,87660],{"class":84,"line":2082},[82,87661,87662],{"class":92},"    Star.sing = function () {\n",[82,87664,87665],{"class":84,"line":2233},[82,87666,87539],{"class":92},[82,87668,87669],{"class":84,"line":2255},[82,87670,4787],{"class":92},[82,87672,87673],{"class":84,"line":2260},[82,87674,87675],{"class":92},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[82,87677,87678],{"class":84,"line":2298},[82,87679,486],{"emptyLinePlaceholder":485},[82,87681,87682,87684,87686],{"class":84,"line":2303},[82,87683,54977],{"class":92},[82,87685,54375],{"class":53863},[82,87687,53870],{"class":92},[82,87689,87690,87692,87694],{"class":84,"line":2321},[82,87691,54347],{"class":92},[82,87693,54362],{"class":53863},[82,87695,53870],{"class":92},[19,87697,87698],{},"构造函数的this指向的是实例对象；",[19,87700,87701],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[65,87703,87705],{"id":87704},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87707,87708],{},[4078,87709],{"alt":78,"src":87710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[73,87712,87714],{"className":55627,"code":87713,"language":55629,"meta":78,"style":78},"\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",[32,87715,87716,87724,87732,87737,87742,87747,87752,87757,87762,87767,87772,87777,87782,87786,87791,87796,87801,87806,87810,87815,87820,87825,87830,87834,87839,87844,87849,87854,87858,87863,87867,87875],{"__ignoreMap":78},[82,87717,87718,87720,87722],{"class":84,"line":85},[82,87719,3659],{"class":92},[82,87721,54362],{"class":53863},[82,87723,53870],{"class":92},[82,87725,87726,87728,87730],{"class":84,"line":157},[82,87727,54705],{"class":92},[82,87729,54375],{"class":53863},[82,87731,53870],{"class":92},[82,87733,87734],{"class":84,"line":404},[82,87735,87736],{"class":92},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[82,87738,87739],{"class":84,"line":413},[82,87740,87741],{"class":92},"    const arr = [1, 2, 3]\n",[82,87743,87744],{"class":84,"line":508},[82,87745,87746],{"class":92},"    \u002F\u002F 自己定义数组的扩展方法\n",[82,87748,87749],{"class":84,"line":513},[82,87750,87751],{"class":92},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[82,87753,87754],{"class":84,"line":1388},[82,87755,87756],{"class":92},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[82,87758,87759],{"class":84,"line":1394},[82,87760,87761],{"class":92},"    \u002F\u002F ①.最大值\n",[82,87763,87764],{"class":84,"line":1399},[82,87765,87766],{"class":92},"    Array.prototype.max = function () {\n",[82,87768,87769],{"class":84,"line":1430},[82,87770,87771],{"class":92},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[82,87773,87774],{"class":84,"line":1818},[82,87775,87776],{"class":92},"      return Math.max(...this)\n",[82,87778,87779],{"class":84,"line":2082},[82,87780,87781],{"class":92},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[82,87783,87784],{"class":84,"line":2233},[82,87785,4787],{"class":92},[82,87787,87788],{"class":84,"line":2255},[82,87789,87790],{"class":92},"    console.log(arr.max())\n",[82,87792,87793],{"class":84,"line":2260},[82,87794,87795],{"class":92},"    \u002F\u002F ②最小值\n",[82,87797,87798],{"class":84,"line":2298},[82,87799,87800],{"class":92},"    Array.prototype.min = function () {\n",[82,87802,87803],{"class":84,"line":2303},[82,87804,87805],{"class":92},"      return Math.min(...this)\n",[82,87807,87808],{"class":84,"line":2321},[82,87809,4787],{"class":92},[82,87811,87812],{"class":84,"line":2533},[82,87813,87814],{"class":92},"    console.log(arr.min())\n",[82,87816,87817],{"class":84,"line":2538},[82,87818,87819],{"class":92},"    \u002F\u002F③求和\n",[82,87821,87822],{"class":84,"line":2548},[82,87823,87824],{"class":92},"    Array.prototype.sum = function () {\n",[82,87826,87827],{"class":84,"line":2579},[82,87828,87829],{"class":92},"      return this.reduce((prev, current) => prev + current, 0)\n",[82,87831,87832],{"class":84,"line":2585},[82,87833,4787],{"class":92},[82,87835,87836],{"class":84,"line":4350},[82,87837,87838],{"class":92},"    console.log(arr.sum())\n",[82,87840,87841],{"class":84,"line":4355},[82,87842,87843],{"class":92},"    \u002F\u002F ③排序\n",[82,87845,87846],{"class":84,"line":4360},[82,87847,87848],{"class":92},"    Array.prototype.rever = function () {\n",[82,87850,87851],{"class":84,"line":4365},[82,87852,87853],{"class":92},"      return this.reverse()\n",[82,87855,87856],{"class":84,"line":4379},[82,87857,4787],{"class":92},[82,87859,87860],{"class":84,"line":4384},[82,87861,87862],{"class":92},"    console.log(arr.rever())\n",[82,87864,87865],{"class":84,"line":5176},[82,87866,486],{"emptyLinePlaceholder":485},[82,87868,87869,87871,87873],{"class":84,"line":5190},[82,87870,54977],{"class":92},[82,87872,54375],{"class":53863},[82,87874,53870],{"class":92},[82,87876,87877,87879,87881],{"class":84,"line":5198},[82,87878,54347],{"class":92},[82,87880,54362],{"class":53863},[82,87882,53870],{"class":92},[19,87884,87885],{},[4078,87886],{"alt":78,"src":87887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[65,87889,87891],{"id":87890},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87893,87894],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87896,87897],{},[4078,87898],{"alt":78,"src":87899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[73,87901,87903],{"className":55627,"code":87902,"language":55629,"meta":78,"style":78},"\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",[32,87904,87905,87913,87921,87926,87931,87935,87940,87945,87950,87958],{"__ignoreMap":78},[82,87906,87907,87909,87911],{"class":84,"line":85},[82,87908,3659],{"class":92},[82,87910,54362],{"class":53863},[82,87912,53870],{"class":92},[82,87914,87915,87917,87919],{"class":84,"line":157},[82,87916,54705],{"class":92},[82,87918,54375],{"class":53863},[82,87920,53870],{"class":92},[82,87922,87923],{"class":84,"line":404},[82,87924,87925],{"class":92},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[82,87927,87928],{"class":84,"line":413},[82,87929,87930],{"class":92},"    function Star() {\n",[82,87932,87933],{"class":84,"line":508},[82,87934,4787],{"class":92},[82,87936,87937],{"class":84,"line":513},[82,87938,87939],{"class":92},"    const ldh = new Star()\n",[82,87941,87942],{"class":84,"line":1388},[82,87943,87944],{"class":92},"    console.log(Star.prototype)\n",[82,87946,87947],{"class":84,"line":1394},[82,87948,87949],{"class":92},"    console.log(Star.prototype.constructor === Star)\n",[82,87951,87952,87954,87956],{"class":84,"line":1399},[82,87953,54977],{"class":92},[82,87955,54375],{"class":53863},[82,87957,53870],{"class":92},[82,87959,87960,87962,87964],{"class":84,"line":1430},[82,87961,54347],{"class":92},[82,87963,54362],{"class":53863},[82,87965,53870],{"class":92},[19,87967,87968],{},[4078,87969],{"alt":78,"src":87970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87972,87973],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[73,87975,87977],{"className":55627,"code":87976,"language":55629,"meta":78,"style":78},"  \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",[32,87978,87979,87987,87991,87995,87999,88004,88009,88014,88018,88023,88028,88033,88038,88043,88048,88052,88056,88061,88066,88071,88075,88080,88085,88089,88093,88097],{"__ignoreMap":78},[82,87980,87981,87983,87985],{"class":84,"line":85},[82,87982,54705],{"class":92},[82,87984,54375],{"class":53863},[82,87986,53870],{"class":92},[82,87988,87989],{"class":84,"line":157},[82,87990,87925],{"class":92},[82,87992,87993],{"class":84,"line":404},[82,87994,87930],{"class":92},[82,87996,87997],{"class":84,"line":413},[82,87998,4787],{"class":92},[82,88000,88001],{"class":84,"line":508},[82,88002,88003],{"class":92},"    \u002F\u002F const ldh = new Star()\n",[82,88005,88006],{"class":84,"line":513},[82,88007,88008],{"class":92},"    \u002F\u002F console.log(Star.prototype)\n",[82,88010,88011],{"class":84,"line":1388},[82,88012,88013],{"class":92},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[82,88015,88016],{"class":84,"line":1394},[82,88017,486],{"emptyLinePlaceholder":485},[82,88019,88020],{"class":84,"line":1399},[82,88021,88022],{"class":92},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[82,88024,88025],{"class":84,"line":1430},[82,88026,88027],{"class":92},"    \u002F\u002F Star.prototype.sing = function () {\n",[82,88029,88030],{"class":84,"line":1818},[82,88031,88032],{"class":92},"    \u002F\u002F   console.log('唱歌')\n",[82,88034,88035],{"class":84,"line":2082},[82,88036,88037],{"class":92},"    \u002F\u002F }\n",[82,88039,88040],{"class":84,"line":2233},[82,88041,88042],{"class":92},"    \u002F\u002F Star.prototype.dance = function () {\n",[82,88044,88045],{"class":84,"line":2255},[82,88046,88047],{"class":92},"    \u002F\u002F   console.log('跳舞')\n",[82,88049,88050],{"class":84,"line":2260},[82,88051,88037],{"class":92},[82,88053,88054],{"class":84,"line":2298},[82,88055,87944],{"class":92},[82,88057,88058],{"class":84,"line":2303},[82,88059,88060],{"class":92},"    Star.prototype = {\n",[82,88062,88063],{"class":84,"line":2321},[82,88064,88065],{"class":92},"      sing: function () {\n",[82,88067,88068],{"class":84,"line":2533},[82,88069,88070],{"class":92},"        console.log('唱歌')\n",[82,88072,88073],{"class":84,"line":2538},[82,88074,80446],{"class":92},[82,88076,88077],{"class":84,"line":2548},[82,88078,88079],{"class":92},"      dance: function () {\n",[82,88081,88082],{"class":84,"line":2579},[82,88083,88084],{"class":92},"        console.log('跳舞')\n",[82,88086,88087],{"class":84,"line":2585},[82,88088,54958],{"class":92},[82,88090,88091],{"class":84,"line":4350},[82,88092,4787],{"class":92},[82,88094,88095],{"class":84,"line":4355},[82,88096,87944],{"class":92},[82,88098,88099,88101,88103],{"class":84,"line":4360},[82,88100,54977],{"class":92},[82,88102,54375],{"class":53863},[82,88104,53870],{"class":92},[19,88106,88107],{},"进行输出结果后会发现：",[19,88109,88110],{},[4078,88111],{"alt":78,"src":88112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,88114,88115],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,88117,88118],{},"所以，要重新指回创造这个原型对象的构造函数",[73,88120,88122],{"className":73769,"code":88121,"language":73771,"meta":78,"style":78},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[32,88123,88124,88138,88143,88148,88159,88172,88177,88188,88202,88206],{"__ignoreMap":78},[82,88125,88126,88129,88131,88134,88136],{"class":84,"line":85},[82,88127,88128],{"class":88},"Star",[82,88130,233],{"class":92},[82,88132,88133],{"class":88},"prototype",[82,88135,259],{"class":112},[82,88137,1349],{"class":92},[82,88139,88140],{"class":84,"line":157},[82,88141,88142],{"class":2828},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[82,88144,88145],{"class":84,"line":404},[82,88146,88147],{"class":92},"  constructor: Star,\n",[82,88149,88150,88153,88155,88157],{"class":84,"line":413},[82,88151,88152],{"class":2384},"  sing",[82,88154,1357],{"class":92},[82,88156,57009],{"class":112},[82,88158,57012],{"class":92},[82,88160,88161,88163,88165,88167,88170],{"class":84,"line":508},[82,88162,76307],{"class":92},[82,88164,60805],{"class":2384},[82,88166,93],{"class":92},[82,88168,88169],{"class":96},"'唱歌'",[82,88171,119],{"class":92},[82,88173,88174],{"class":84,"line":513},[82,88175,88176],{"class":92},"   },\n",[82,88178,88179,88182,88184,88186],{"class":84,"line":1388},[82,88180,88181],{"class":2384},"   dance",[82,88183,1357],{"class":92},[82,88185,57009],{"class":112},[82,88187,57012],{"class":92},[82,88189,88190,88193,88195,88197,88200],{"class":84,"line":1394},[82,88191,88192],{"class":92},"     console.",[82,88194,60805],{"class":2384},[82,88196,93],{"class":92},[82,88198,88199],{"class":96},"'跳舞'",[82,88201,119],{"class":92},[82,88203,88204],{"class":84,"line":1399},[82,88205,6904],{"class":92},[82,88207,88208],{"class":84,"line":1430},[82,88209,1391],{"class":92},[19,88211,88212],{},[4078,88213],{"alt":78,"src":88214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88216,88217],{},"总结1：",[19,88219,88220],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88222,88223],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88225,88226],{},"constructor指的是他的来源",[19,88228,88229],{},[4078,88230],{"alt":78,"src":88231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88233,88234],{},[4078,88235],{"alt":78,"src":88236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88238,88239],{},"总结2：",[19,88241,88242],{},[4078,88243],{"alt":78,"src":88244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88246,88247],{},[4078,88248],{"alt":78,"src":88249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88251,88252],{},[4078,88253],{"alt":78,"src":88254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[65,88256,88258],{"id":88257},"_4134-对象原型","4.13.4 对象原型",[19,88260,88261],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,88263,88264],{},"对象原型就是__proto__这个属性",[19,88266,88267],{},[4078,88268],{"alt":78,"src":88269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,88271,88272],{},[4078,88273],{"alt":78,"src":88274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,88276,88277],{},[4078,88278],{"alt":78,"src":88279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,88281,88282],{},[4078,88283],{"alt":78,"src":88284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[73,88286,88288],{"className":55627,"code":88287,"language":55629,"meta":78,"style":78},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,88289,88290,88298,88306,88310,88314,88318,88323,88331],{"__ignoreMap":78},[82,88291,88292,88294,88296],{"class":84,"line":85},[82,88293,3659],{"class":92},[82,88295,54362],{"class":53863},[82,88297,53870],{"class":92},[82,88299,88300,88302,88304],{"class":84,"line":157},[82,88301,54705],{"class":92},[82,88303,54375],{"class":53863},[82,88305,53870],{"class":92},[82,88307,88308],{"class":84,"line":404},[82,88309,87930],{"class":92},[82,88311,88312],{"class":84,"line":413},[82,88313,4787],{"class":92},[82,88315,88316],{"class":84,"line":508},[82,88317,87939],{"class":92},[82,88319,88320],{"class":84,"line":513},[82,88321,88322],{"class":92},"    console.log(ldh)\n",[82,88324,88325,88327,88329],{"class":84,"line":1388},[82,88326,54977],{"class":92},[82,88328,54375],{"class":53863},[82,88330,53870],{"class":92},[82,88332,88333,88335,88337],{"class":84,"line":1394},[82,88334,54347],{"class":92},[82,88336,54362],{"class":53863},[82,88338,53870],{"class":92},[19,88340,88341],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88343,88344],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88346,88347],{},[4078,88348],{"alt":78,"src":88349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88351,88352],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88354,88355],{},"对象原型指向原型对象",[19,88357,88358],{},[4078,88359],{"alt":78,"src":88360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88362,88363],{},[4078,88364],{"alt":78,"src":88365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88367,88368],{},[4078,88369],{"alt":78,"src":88370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[65,88372,88374],{"id":88373},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88376,88377],{},[4078,88378],{"alt":78,"src":88379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,88381,88382,88385,88388,88391],{},[29,88383,88384],{},"构造函数通过new的形式实例化得到实例对象",[29,88386,88387],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,88389,88390],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,88392,88393],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88395,88396],{},[4078,88397],{"alt":78,"src":88398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88400,88401],{},"题目梳理：",[19,88403,88404],{},[4078,88405],{"alt":78,"src":88406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[65,88408,88410],{"id":88409},"_4136-原型继承","4.13.6 原型继承",[19,88412,88413],{},[4078,88414],{"alt":78,"src":88415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88417,88418],{},[4078,88419],{"alt":78,"src":88420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88422,88423],{},[4078,88424],{"alt":78,"src":88425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88427,88428],{},[4078,88429],{"alt":78,"src":88430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88432,88433],{},[4078,88434],{"alt":78,"src":88435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88437,88438],{},[4078,88439],{"alt":78,"src":88440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88442,88443],{},[4078,88444],{"alt":78,"src":88445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88447,88448],{},[4078,88449],{"alt":78,"src":88450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88452,88453],{},"回顾：构造函数每次new得到对象都是不同的",[65,88455,88457],{"id":88456},"_4137-原型链","4.13.7 原型链",[19,88459,88460],{},[4078,88461],{"alt":78,"src":88462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88464,88465],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88467,88468],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88470,88471],{},"大哥是Object",[19,88473,88474],{},[4078,88475],{"alt":78,"src":88476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88478,88479],{},[4078,88480],{"alt":78,"src":88481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88483,88484],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88486,88487],{},"万物皆对象",[65,88489,88491],{"id":88490},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88493,88494],{},"模态框",[19,88496,88497],{},"以后遇见这个效果直接使用这个就行",[19,88499,88500],{},[4078,88501],{"alt":78,"src":88502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88504,88505],{},[4078,88506],{"alt":78,"src":88507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88509,88510],{},[4078,88511],{"alt":78,"src":88512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88514,88515],{},[4078,88516],{"alt":78,"src":88517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88519,88520],{},"补充知识点：",[26,88522,88523],{},[29,88524,88525],{},"append()",[19,88527,88528],{},[4078,88529],{"alt":78,"src":88530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[73,88532,88534],{"className":53196,"code":88533,"language":53198,"meta":78,"style":78},"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",[32,88535,88536,88541,88546,88551,88555,88559,88563,88568,88573,88578,88582],{"__ignoreMap":78},[82,88537,88538],{"class":84,"line":85},[82,88539,88540],{"class":92},"append(param1)\n",[82,88542,88543],{"class":84,"line":157},[82,88544,88545],{"class":92},"append(param1, param2)\n",[82,88547,88548],{"class":84,"line":404},[82,88549,88550],{"class":92},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[82,88552,88553],{"class":84,"line":413},[82,88554,486],{"emptyLinePlaceholder":485},[82,88556,88557],{"class":84,"line":508},[82,88558,486],{"emptyLinePlaceholder":485},[82,88560,88561],{"class":84,"line":513},[82,88562,486],{"emptyLinePlaceholder":485},[82,88564,88565],{"class":84,"line":1388},[82,88566,88567],{"class":92},"let div = document.createElement(\"div\");\n",[82,88569,88570],{"class":84,"line":1394},[82,88571,88572],{"class":92},"let p = document.createElement(\"p\");\n",[82,88574,88575],{"class":84,"line":1399},[82,88576,88577],{"class":92},"div.append(p);\n",[82,88579,88580],{"class":84,"line":1430},[82,88581,486],{"emptyLinePlaceholder":485},[82,88583,88584,88587,88589],{"class":84,"line":1818},[82,88585,88586],{"class":92},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[82,88588,19],{"class":53863},[82,88590,88591],{"class":92},"> ]\n",[26,88593,88594],{"start":157},[29,88595,88596],{},"remove()",[19,88598,88599],{},"自己删自己",[19,88601,88602],{},[4078,88603],{"alt":78,"src":88604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[73,88606,88608],{"className":53196,"code":88607,"language":53198,"meta":78,"style":78},"\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",[32,88609,88610,88620,88634,88638,88646,88660,88680,88692,88700,88707,88719,88732,88767,88779,88790,88802,88814,88826,88853,88863,88867,88871,88880,88892,88906,88916,88928,88932,88936,88946,88957,88967,88977,88990,89003,89013,89017,89021,89030,89040,89052,89056,89060,89069,89079,89089,89101,89105,89109,89119,89135,89146,89156,89166,89178,89190,89202,89206,89210,89223,89234,89238,89246,89254,89258,89266,89286,89306,89314,89319,89345,89350,89355,89374,89379,89391,89396,89407,89417,89427,89432,89437,89441,89446,89451,89456,89475,89480,89500,89505,89519,89524,89529,89534,89550,89554,89559,89588,89593,89598,89603,89614,89618,89622,89626,89631,89656,89661,89686,89691,89700,89704,89709,89734,89738,89763,89767,89776,89780,89785,89803,89813,89817,89825,89833,89837],{"__ignoreMap":78},[82,88611,88612,88614,88616,88618],{"class":84,"line":85},[82,88613,53860],{"class":92},[82,88615,53864],{"class":53863},[82,88617,53867],{"class":2384},[82,88619,53870],{"class":92},[82,88621,88622,88624,88626,88628,88630,88632],{"class":84,"line":157},[82,88623,3659],{"class":92},[82,88625,53198],{"class":53863},[82,88627,53879],{"class":2384},[82,88629,113],{"class":92},[82,88631,53884],{"class":96},[82,88633,53870],{"class":92},[82,88635,88636],{"class":84,"line":404},[82,88637,486],{"emptyLinePlaceholder":485},[82,88639,88640,88642,88644],{"class":84,"line":413},[82,88641,3659],{"class":92},[82,88643,53897],{"class":53863},[82,88645,53870],{"class":92},[82,88647,88648,88650,88652,88654,88656,88658],{"class":84,"line":508},[82,88649,54705],{"class":92},[82,88651,53907],{"class":53863},[82,88653,53910],{"class":2384},[82,88655,113],{"class":92},[82,88657,53915],{"class":96},[82,88659,53870],{"class":92},[82,88661,88662,88664,88666,88668,88670,88672,88674,88676,88678],{"class":84,"line":513},[82,88663,54705],{"class":92},[82,88665,53907],{"class":53863},[82,88667,17506],{"class":2384},[82,88669,113],{"class":92},[82,88671,53954],{"class":96},[82,88673,53934],{"class":2384},[82,88675,113],{"class":92},[82,88677,53961],{"class":96},[82,88679,53870],{"class":92},[82,88681,88682,88684,88686,88688,88690],{"class":84,"line":1388},[82,88683,54705],{"class":92},[82,88685,53970],{"class":53863},[82,88687,53973],{"class":92},[82,88689,53970],{"class":53863},[82,88691,53870],{"class":92},[82,88693,88694,88696,88698],{"class":84,"line":1394},[82,88695,54705],{"class":92},[82,88697,2671],{"class":53863},[82,88699,53870],{"class":92},[82,88701,88702,88705],{"class":84,"line":1399},[82,88703,88704],{"class":2384},"    .modal",[82,88706,1349],{"class":92},[82,88708,88709,88711,88713,88715,88717],{"class":84,"line":1430},[82,88710,57331],{"class":88},[82,88712,1357],{"class":92},[82,88714,6568],{"class":88},[82,88716,54054],{"class":112},[82,88718,3909],{"class":92},[82,88720,88721,88724,88726,88728,88730],{"class":84,"line":1818},[82,88722,88723],{"class":88},"      min-height",[82,88725,1357],{"class":92},[82,88727,3069],{"class":88},[82,88729,54054],{"class":112},[82,88731,3909],{"class":92},[82,88733,88734,88736,88738,88740,88742,88744,88746,88748,88750,88752,88754,88756,88758,88760,88762,88765],{"class":84,"line":2082},[82,88735,81304],{"class":88},[82,88737,1357],{"class":92},[82,88739,2244],{"class":88},[82,88741,6688],{"class":88},[82,88743,4638],{"class":88},[82,88745,54054],{"class":112},[82,88747,81321],{"class":88},[82,88749,93],{"class":92},[82,88751,2244],{"class":88},[82,88753,100],{"class":92},[82,88755,2244],{"class":88},[82,88757,100],{"class":92},[82,88759,2244],{"class":88},[82,88761,100],{"class":92},[82,88763,88764],{"class":88},"0.1",[82,88766,5318],{"class":92},[82,88768,88769,88771,88773,88775,88777],{"class":84,"line":2233},[82,88770,57694],{"class":88},[82,88772,1357],{"class":92},[82,88774,3051],{"class":88},[82,88776,54054],{"class":112},[82,88778,3909],{"class":92},[82,88780,88781,88783,88785,88788],{"class":84,"line":2255},[82,88782,57319],{"class":88},[82,88784,1357],{"class":92},[82,88786,88787],{"class":88},"fixed",[82,88789,3909],{"class":92},[82,88791,88792,88795,88797,88800],{"class":84,"line":2260},[82,88793,88794],{"class":88},"      z-index",[82,88796,1357],{"class":92},[82,88798,88799],{"class":88},"999",[82,88801,3909],{"class":92},[82,88803,88804,88806,88808,88810,88812],{"class":84,"line":2298},[82,88805,57398],{"class":88},[82,88807,1357],{"class":92},[82,88809,3408],{"class":88},[82,88811,3086],{"class":112},[82,88813,3909],{"class":92},[82,88815,88816,88818,88820,88822,88824],{"class":84,"line":2303},[82,88817,57507],{"class":88},[82,88819,1357],{"class":92},[82,88821,3408],{"class":88},[82,88823,3086],{"class":112},[82,88825,3909],{"class":92},[82,88827,88828,88830,88832,88834,88836,88839,88841,88843,88845,88847,88849,88851],{"class":84,"line":2321},[82,88829,81345],{"class":88},[82,88831,1357],{"class":92},[82,88833,81350],{"class":88},[82,88835,93],{"class":92},[82,88837,88838],{"class":88},"-50",[82,88840,3086],{"class":112},[82,88842,100],{"class":92},[82,88844,88838],{"class":88},[82,88846,3086],{"class":112},[82,88848,100],{"class":92},[82,88850,2244],{"class":88},[82,88852,5318],{"class":92},[82,88854,88855,88857,88859,88861],{"class":84,"line":2533},[82,88856,57444],{"class":88},[82,88858,1357],{"class":92},[82,88860,63400],{"class":88},[82,88862,3909],{"class":92},[82,88864,88865],{"class":84,"line":2538},[82,88866,4787],{"class":92},[82,88868,88869],{"class":84,"line":2548},[82,88870,486],{"emptyLinePlaceholder":485},[82,88872,88873,88875,88878],{"class":84,"line":2579},[82,88874,88704],{"class":2384},[82,88876,88877],{"class":2384}," .header",[82,88879,1349],{"class":92},[82,88881,88882,88884,88886,88888,88890],{"class":84,"line":2585},[82,88883,59917],{"class":88},[82,88885,1357],{"class":92},[82,88887,3159],{"class":88},[82,88889,54054],{"class":112},[82,88891,3909],{"class":92},[82,88893,88894,88896,88898,88900,88902,88904],{"class":84,"line":4350},[82,88895,57255],{"class":88},[82,88897,1357],{"class":92},[82,88899,2244],{"class":88},[82,88901,4638],{"class":88},[82,88903,54054],{"class":112},[82,88905,3909],{"class":92},[82,88907,88908,88910,88912,88914],{"class":84,"line":4355},[82,88909,57319],{"class":88},[82,88911,1357],{"class":92},[82,88913,57324],{"class":88},[82,88915,3909],{"class":92},[82,88917,88918,88920,88922,88924,88926],{"class":84,"line":4360},[82,88919,57482],{"class":88},[82,88921,1357],{"class":92},[82,88923,3451],{"class":88},[82,88925,54054],{"class":112},[82,88927,3909],{"class":92},[82,88929,88930],{"class":84,"line":4365},[82,88931,4787],{"class":92},[82,88933,88934],{"class":84,"line":4379},[82,88935,486],{"emptyLinePlaceholder":485},[82,88937,88938,88940,88942,88944],{"class":84,"line":4384},[82,88939,88704],{"class":2384},[82,88941,88877],{"class":2384},[82,88943,5630],{"class":53863},[82,88945,1349],{"class":92},[82,88947,88948,88951,88953,88955],{"class":84,"line":5176},[82,88949,88950],{"class":88},"      font-style",[82,88952,1357],{"class":92},[82,88954,66398],{"class":88},[82,88956,3909],{"class":92},[82,88958,88959,88961,88963,88965],{"class":84,"line":5190},[82,88960,59974],{"class":88},[82,88962,1357],{"class":92},[82,88964,64628],{"class":88},[82,88966,3909],{"class":92},[82,88968,88969,88971,88973,88975],{"class":84,"line":5198},[82,88970,57319],{"class":88},[82,88972,1357],{"class":92},[82,88974,57391],{"class":88},[82,88976,3909],{"class":92},[82,88978,88979,88982,88984,88986,88988],{"class":84,"line":5203},[82,88980,88981],{"class":88},"      right",[82,88983,1357],{"class":92},[82,88985,3330],{"class":88},[82,88987,54054],{"class":112},[82,88989,3909],{"class":92},[82,88991,88992,88994,88996,88999,89001],{"class":84,"line":5209},[82,88993,57507],{"class":88},[82,88995,1357],{"class":92},[82,88997,88998],{"class":88},"-2",[82,89000,54054],{"class":112},[82,89002,3909],{"class":92},[82,89004,89005,89007,89009,89011],{"class":84,"line":5215},[82,89006,64583],{"class":88},[82,89008,1357],{"class":92},[82,89010,64588],{"class":88},[82,89012,3909],{"class":92},[82,89014,89015],{"class":84,"line":5220},[82,89016,4787],{"class":92},[82,89018,89019],{"class":84,"line":10539},[82,89020,486],{"emptyLinePlaceholder":485},[82,89022,89023,89025,89028],{"class":84,"line":10563},[82,89024,88704],{"class":2384},[82,89026,89027],{"class":2384}," .body",[82,89029,1349],{"class":92},[82,89031,89032,89034,89036,89038],{"class":84,"line":10568},[82,89033,59844],{"class":88},[82,89035,1357],{"class":92},[82,89037,54154],{"class":88},[82,89039,3909],{"class":92},[82,89041,89042,89044,89046,89048,89050],{"class":84,"line":10574},[82,89043,57255],{"class":88},[82,89045,1357],{"class":92},[82,89047,440],{"class":88},[82,89049,54054],{"class":112},[82,89051,3909],{"class":92},[82,89053,89054],{"class":84,"line":10601},[82,89055,4787],{"class":92},[82,89057,89058],{"class":84,"line":10606},[82,89059,486],{"emptyLinePlaceholder":485},[82,89061,89062,89064,89067],{"class":84,"line":10612},[82,89063,88704],{"class":2384},[82,89065,89066],{"class":2384}," .footer",[82,89068,1349],{"class":92},[82,89070,89071,89073,89075,89077],{"class":84,"line":10624},[82,89072,57569],{"class":88},[82,89074,1357],{"class":92},[82,89076,54039],{"class":88},[82,89078,3909],{"class":92},[82,89080,89081,89083,89085,89087],{"class":84,"line":10636},[82,89082,57580],{"class":88},[82,89084,1357],{"class":92},[82,89086,54142],{"class":88},[82,89088,3909],{"class":92},[82,89090,89091,89093,89095,89097,89099],{"class":84,"line":10648},[82,89092,57255],{"class":88},[82,89094,1357],{"class":92},[82,89096,440],{"class":88},[82,89098,54054],{"class":112},[82,89100,3909],{"class":92},[82,89102,89103],{"class":84,"line":12307},[82,89104,4787],{"class":92},[82,89106,89107],{"class":84,"line":12332},[82,89108,486],{"emptyLinePlaceholder":485},[82,89110,89111,89113,89115,89117],{"class":84,"line":12355},[82,89112,88704],{"class":2384},[82,89114,89066],{"class":2384},[82,89116,4014],{"class":53863},[82,89118,1349],{"class":92},[82,89120,89121,89123,89125,89127,89129,89131,89133],{"class":84,"line":12379},[82,89122,57255],{"class":88},[82,89124,1357],{"class":92},[82,89126,2841],{"class":88},[82,89128,54054],{"class":112},[82,89130,4683],{"class":88},[82,89132,54054],{"class":112},[82,89134,3909],{"class":92},[82,89136,89137,89139,89141,89144],{"class":84,"line":12384},[82,89138,64279],{"class":88},[82,89140,1357],{"class":92},[82,89142,89143],{"class":88},"#ccc",[82,89145,3909],{"class":92},[82,89147,89148,89150,89152,89154],{"class":84,"line":12389},[82,89149,66527],{"class":88},[82,89151,1357],{"class":92},[82,89153,57297],{"class":88},[82,89155,3909],{"class":92},[82,89157,89158,89160,89162,89164],{"class":84,"line":12394},[82,89159,59974],{"class":88},[82,89161,1357],{"class":92},[82,89163,63400],{"class":88},[82,89165,3909],{"class":92},[82,89167,89168,89170,89172,89174,89176],{"class":84,"line":12403},[82,89169,57694],{"class":88},[82,89171,1357],{"class":92},[82,89173,1425],{"class":88},[82,89175,54054],{"class":112},[82,89177,3909],{"class":92},[82,89179,89180,89182,89184,89186,89188],{"class":84,"line":12408},[82,89181,64308],{"class":88},[82,89183,1357],{"class":92},[82,89185,440],{"class":88},[82,89187,54054],{"class":112},[82,89189,3909],{"class":92},[82,89191,89192,89194,89196,89198,89200],{"class":84,"line":12414},[82,89193,57482],{"class":88},[82,89195,1357],{"class":92},[82,89197,3305],{"class":88},[82,89199,54054],{"class":112},[82,89201,3909],{"class":92},[82,89203,89204],{"class":84,"line":12435},[82,89205,4787],{"class":92},[82,89207,89208],{"class":84,"line":12441},[82,89209,486],{"emptyLinePlaceholder":485},[82,89211,89212,89214,89216,89218,89221],{"class":84,"line":12455},[82,89213,88704],{"class":2384},[82,89215,89066],{"class":2384},[82,89217,4014],{"class":53863},[82,89219,89220],{"class":2384},".submit",[82,89222,1349],{"class":92},[82,89224,89225,89227,89229,89232],{"class":84,"line":12461},[82,89226,57444],{"class":88},[82,89228,1357],{"class":92},[82,89230,89231],{"class":88},"#369",[82,89233,3909],{"class":92},[82,89235,89236],{"class":84,"line":12488},[82,89237,4787],{"class":92},[82,89239,89240,89242,89244],{"class":84,"line":12497},[82,89241,54977],{"class":92},[82,89243,2671],{"class":53863},[82,89245,53870],{"class":92},[82,89247,89248,89250,89252],{"class":84,"line":12503},[82,89249,54347],{"class":92},[82,89251,53897],{"class":53863},[82,89253,53870],{"class":92},[82,89255,89256],{"class":84,"line":12511},[82,89257,486],{"emptyLinePlaceholder":485},[82,89259,89260,89262,89264],{"class":84,"line":12516},[82,89261,3659],{"class":92},[82,89263,54362],{"class":53863},[82,89265,53870],{"class":92},[82,89267,89268,89270,89272,89274,89276,89279,89282,89284],{"class":84,"line":19189},[82,89269,54705],{"class":92},[82,89271,56447],{"class":53863},[82,89273,17545],{"class":2384},[82,89275,113],{"class":92},[82,89277,89278],{"class":96},"\"delete\"",[82,89280,89281],{"class":92},">删除\u003C\u002F",[82,89283,56447],{"class":53863},[82,89285,53870],{"class":92},[82,89287,89288,89290,89292,89294,89296,89299,89302,89304],{"class":84,"line":19195},[82,89289,54705],{"class":92},[82,89291,56447],{"class":53863},[82,89293,17545],{"class":2384},[82,89295,113],{"class":92},[82,89297,89298],{"class":96},"\"login\"",[82,89300,89301],{"class":92},">登录\u003C\u002F",[82,89303,56447],{"class":53863},[82,89305,53870],{"class":92},[82,89307,89308,89310,89312],{"class":84,"line":19218},[82,89309,54705],{"class":92},[82,89311,54375],{"class":53863},[82,89313,53870],{"class":92},[82,89315,89316],{"class":84,"line":19224},[82,89317,89318],{"class":2828},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[82,89320,89321,89323,89326,89328,89330,89332,89334,89336,89339,89341,89343],{"class":84,"line":19247},[82,89322,72640],{"class":112},[82,89324,89325],{"class":2384}," Modal",[82,89327,93],{"class":92},[82,89329,53970],{"class":108},[82,89331,259],{"class":112},[82,89333,72486],{"class":96},[82,89335,100],{"class":92},[82,89337,89338],{"class":108},"message",[82,89340,259],{"class":112},[82,89342,72486],{"class":96},[82,89344,15031],{"class":92},[82,89346,89347],{"class":84,"line":19261},[82,89348,89349],{"class":2828},"      \u002F\u002F 创建Model 模态框盒子\n",[82,89351,89352],{"class":84,"line":19281},[82,89353,89354],{"class":2828},"      \u002F\u002F 1.1 创建div标签\n",[82,89356,89357,89359,89362,89364,89366,89368,89370,89372],{"class":84,"line":19287},[82,89358,72607],{"class":88},[82,89360,89361],{"class":92},".modalBox ",[82,89363,113],{"class":112},[82,89365,56956],{"class":92},[82,89367,72707],{"class":2384},[82,89369,93],{"class":92},[82,89371,84485],{"class":96},[82,89373,119],{"class":92},[82,89375,89376],{"class":84,"line":19298},[82,89377,89378],{"class":2828},"      \u002F\u002F 1.2 给div 添加类名为model\n",[82,89380,89381,89383,89386,89388],{"class":84,"line":19321},[82,89382,72607],{"class":88},[82,89384,89385],{"class":92},".modalBox.className ",[82,89387,113],{"class":112},[82,89389,89390],{"class":96}," 'modal'\n",[82,89392,89393],{"class":84,"line":19343},[82,89394,89395],{"class":2828},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[82,89397,89398,89400,89403,89405],{"class":84,"line":19348},[82,89399,72607],{"class":88},[82,89401,89402],{"class":92},".modalBox.innerHTML ",[82,89404,113],{"class":112},[82,89406,72724],{"class":96},[82,89408,89409,89412,89414],{"class":84,"line":19354},[82,89410,89411],{"class":96},"        \u003Cdiv class=\"header\">${",[82,89413,53970],{"class":92},[82,89415,89416],{"class":96},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[82,89418,89419,89422,89424],{"class":84,"line":19368},[82,89420,89421],{"class":96},"        \u003Cdiv class=\"body\">${",[82,89423,89338],{"class":92},[82,89425,89426],{"class":96},"}\u003C\u002Fdiv>\n",[82,89428,89429],{"class":84,"line":19381},[82,89430,89431],{"class":96},"      `\n",[82,89433,89434],{"class":84,"line":19386},[82,89435,89436],{"class":2828},"      \u002F\u002F console.log(this.modalBox)\n",[82,89438,89439],{"class":84,"line":19400},[82,89440,4787],{"class":92},[82,89442,89443],{"class":84,"line":19405},[82,89444,89445],{"class":2828},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[82,89447,89448],{"class":84,"line":19411},[82,89449,89450],{"class":2828},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[82,89452,89453],{"class":84,"line":19416},[82,89454,89455],{"class":2828},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[82,89457,89458,89461,89463,89465,89467,89469,89471,89473],{"class":84,"line":19430},[82,89459,89460],{"class":88},"    Modal",[82,89462,233],{"class":92},[82,89464,88133],{"class":88},[82,89466,233],{"class":92},[82,89468,89],{"class":2384},[82,89470,259],{"class":112},[82,89472,61476],{"class":112},[82,89474,57012],{"class":92},[82,89476,89477],{"class":84,"line":19435},[82,89478,89479],{"class":2828},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[82,89481,89482,89484,89487,89489,89491,89493,89495,89498],{"class":84,"line":19440},[82,89483,60786],{"class":112},[82,89485,89486],{"class":88}," box",[82,89488,259],{"class":112},[82,89490,56956],{"class":92},[82,89492,56959],{"class":2384},[82,89494,93],{"class":92},[82,89496,89497],{"class":96},"'.modal'",[82,89499,119],{"class":92},[82,89501,89502],{"class":84,"line":19454},[82,89503,89504],{"class":2828},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[82,89506,89507,89510,89512,89515,89517],{"class":84,"line":19466},[82,89508,89509],{"class":92},"      box ",[82,89511,4318],{"class":112},[82,89513,89514],{"class":92}," box.",[82,89516,59564],{"class":2384},[82,89518,4576],{"class":92},[82,89520,89521],{"class":84,"line":19471},[82,89522,89523],{"class":2828},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[82,89525,89526],{"class":84,"line":19484},[82,89527,89528],{"class":2828},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[82,89530,89531],{"class":84,"line":19489},[82,89532,89533],{"class":2828},"      \u002F\u002F append可以增加对象\n",[82,89535,89536,89539,89542,89544,89547],{"class":84,"line":19494},[82,89537,89538],{"class":92},"      document.body.",[82,89540,89541],{"class":2384},"append",[82,89543,93],{"class":92},[82,89545,89546],{"class":88},"this",[82,89548,89549],{"class":92},".modalBox)\n",[82,89551,89552],{"class":84,"line":19499},[82,89553,486],{"emptyLinePlaceholder":485},[82,89555,89556],{"class":84,"line":19512},[82,89557,89558],{"class":2828},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[82,89560,89561,89563,89566,89568,89570,89573,89575,89577,89579,89581,89584,89586],{"class":84,"line":19517},[82,89562,72607],{"class":88},[82,89564,89565],{"class":92},".modalBox.",[82,89567,56959],{"class":2384},[82,89569,93],{"class":92},[82,89571,89572],{"class":96},"'i'",[82,89574,33402],{"class":92},[82,89576,60371],{"class":2384},[82,89578,93],{"class":92},[82,89580,60376],{"class":96},[82,89582,89583],{"class":92},", () ",[82,89585,87276],{"class":112},[82,89587,1349],{"class":92},[82,89589,89590],{"class":84,"line":35202},[82,89591,89592],{"class":2828},"        \u002F\u002F 这个地方需要用到箭头函数\n",[82,89594,89595],{"class":84,"line":35208},[82,89596,89597],{"class":2828},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[82,89599,89600],{"class":84,"line":35214},[82,89601,89602],{"class":2828},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[82,89604,89605,89607,89609,89612],{"class":84,"line":35220},[82,89606,67283],{"class":88},[82,89608,233],{"class":92},[82,89610,89611],{"class":2384},"close",[82,89613,4576],{"class":92},[82,89615,89616],{"class":84,"line":35226},[82,89617,67372],{"class":92},[82,89619,89620],{"class":84,"line":35237},[82,89621,4787],{"class":92},[82,89623,89624],{"class":84,"line":35243},[82,89625,486],{"emptyLinePlaceholder":485},[82,89627,89628],{"class":84,"line":35263},[82,89629,89630],{"class":2828},"    \u002F\u002F 测试一下 点击 删除按钮\n",[82,89632,89633,89635,89637,89639,89642,89644,89646,89648,89650,89652,89654],{"class":84,"line":35269},[82,89634,54967],{"class":92},[82,89636,56959],{"class":2384},[82,89638,93],{"class":92},[82,89640,89641],{"class":96},"'#delete'",[82,89643,33402],{"class":92},[82,89645,60371],{"class":2384},[82,89647,93],{"class":92},[82,89649,60376],{"class":96},[82,89651,89583],{"class":92},[82,89653,87276],{"class":112},[82,89655,1349],{"class":92},[82,89657,89658],{"class":84,"line":35280},[82,89659,89660],{"class":2828},"      \u002F\u002F 先调用Model构造函数\n",[82,89662,89663,89665,89668,89670,89672,89674,89676,89679,89681,89684],{"class":84,"line":35286},[82,89664,60786],{"class":112},[82,89666,89667],{"class":88}," del",[82,89669,259],{"class":112},[82,89671,14168],{"class":112},[82,89673,89325],{"class":2384},[82,89675,93],{"class":92},[82,89677,89678],{"class":96},"'温馨的提示'",[82,89680,100],{"class":92},[82,89682,89683],{"class":96},"'您没有删除权限操作'",[82,89685,119],{"class":92},[82,89687,89688],{"class":84,"line":35292},[82,89689,89690],{"class":2828},"      \u002F\u002F 实例对象调用open方法\n",[82,89692,89693,89696,89698],{"class":84,"line":35298},[82,89694,89695],{"class":92},"      del.",[82,89697,89],{"class":2384},[82,89699,4576],{"class":92},[82,89701,89702],{"class":84,"line":35304},[82,89703,36029],{"class":92},[82,89705,89706],{"class":84,"line":35310},[82,89707,89708],{"class":2828},"    \u002F\u002F 测试一下 点击 登录按钮\n",[82,89710,89711,89713,89715,89717,89720,89722,89724,89726,89728,89730,89732],{"class":84,"line":35316},[82,89712,54967],{"class":92},[82,89714,56959],{"class":2384},[82,89716,93],{"class":92},[82,89718,89719],{"class":96},"'#login'",[82,89721,33402],{"class":92},[82,89723,60371],{"class":2384},[82,89725,93],{"class":92},[82,89727,60376],{"class":96},[82,89729,89583],{"class":92},[82,89731,87276],{"class":112},[82,89733,1349],{"class":92},[82,89735,89736],{"class":84,"line":35322},[82,89737,89660],{"class":2828},[82,89739,89740,89742,89745,89747,89749,89751,89753,89756,89758,89761],{"class":84,"line":35342},[82,89741,60786],{"class":112},[82,89743,89744],{"class":88}," log",[82,89746,259],{"class":112},[82,89748,14168],{"class":112},[82,89750,89325],{"class":2384},[82,89752,93],{"class":92},[82,89754,89755],{"class":96},"'友情提示'",[82,89757,100],{"class":92},[82,89759,89760],{"class":96},"'您还没有登录呢'",[82,89762,119],{"class":92},[82,89764,89765],{"class":84,"line":35348},[82,89766,89690],{"class":2828},[82,89768,89769,89772,89774],{"class":84,"line":35364},[82,89770,89771],{"class":92},"      log.",[82,89773,89],{"class":2384},[82,89775,4576],{"class":92},[82,89777,89778],{"class":84,"line":35370},[82,89779,36029],{"class":92},[82,89781,89782],{"class":84,"line":35384},[82,89783,89784],{"class":2828},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[82,89786,89787,89789,89791,89793,89795,89797,89799,89801],{"class":84,"line":35390},[82,89788,89460],{"class":88},[82,89790,233],{"class":92},[82,89792,88133],{"class":88},[82,89794,233],{"class":92},[82,89796,89611],{"class":2384},[82,89798,259],{"class":112},[82,89800,61476],{"class":112},[82,89802,57012],{"class":92},[82,89804,89805,89807,89809,89811],{"class":84,"line":35405},[82,89806,72607],{"class":88},[82,89808,89565],{"class":92},[82,89810,59564],{"class":2384},[82,89812,4576],{"class":92},[82,89814,89815],{"class":84,"line":35411},[82,89816,4787],{"class":92},[82,89818,89819,89821,89823],{"class":84,"line":35420},[82,89820,54977],{"class":92},[82,89822,54375],{"class":53863},[82,89824,53870],{"class":92},[82,89826,89827,89829,89831],{"class":84,"line":35426},[82,89828,54347],{"class":92},[82,89830,54362],{"class":53863},[82,89832,53870],{"class":92},[82,89834,89835],{"class":84,"line":35435},[82,89836,486],{"emptyLinePlaceholder":485},[82,89838,89839,89841,89843],{"class":84,"line":35441},[82,89840,54347],{"class":92},[82,89842,53198],{"class":53863},[82,89844,53870],{"class":92},[19,89846,89847],{},[4078,89848],{"alt":78,"src":89849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89851,89853],{"id":89852},"_414-深浅拷贝","4.14 深浅拷贝",[65,89855,89857],{"id":89856},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89859,89860],{},[4078,89861],{"alt":78,"src":89862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89864,89865],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89867,89868],{},[4078,89869],{"alt":78,"src":89870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89872,89873],{},[4078,89874],{"alt":78,"src":89875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89877,89878],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89880,89881],{},[4078,89882],{"alt":78,"src":89883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89885,13922],{},[19,89887,89888],{},[4078,89889],{"alt":78,"src":89890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[65,89892,89894],{"id":89893},"_4142-深拷贝","4.14.2 深拷贝",[19,89896,89897],{},"深拷贝：拷贝的是对象，不是地址",[19,89899,89900],{},"常用的三种方法：",[26,89902,89903,89906,89909],{},[29,89904,89905],{},"通过递归实现深拷贝",[29,89907,89908],{},"lodash\u002FcloneDeep",[29,89910,89911],{},"通过JSON.stringify()实现",[24582,89913,89915],{"id":89914},"_41421-递归函数","4.14.2.1 递归函数",[19,89917,89918],{},[4078,89919],{"alt":78,"src":89920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89922,89923],{},[29,89924,89925],{},"死递归占溢出：",[73,89927,89929],{"className":55627,"code":89928,"language":55629,"meta":78,"style":78},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,89930,89931,89939,89947,89951,89956,89960,89965,89973],{"__ignoreMap":78},[82,89932,89933,89935,89937],{"class":84,"line":85},[82,89934,3659],{"class":92},[82,89936,54362],{"class":53863},[82,89938,53870],{"class":92},[82,89940,89941,89943,89945],{"class":84,"line":157},[82,89942,54705],{"class":92},[82,89944,54375],{"class":53863},[82,89946,53870],{"class":92},[82,89948,89949],{"class":84,"line":404},[82,89950,79697],{"class":92},[82,89952,89953],{"class":84,"line":413},[82,89954,89955],{"class":92},"      fn()\n",[82,89957,89958],{"class":84,"line":508},[82,89959,4787],{"class":92},[82,89961,89962],{"class":84,"line":513},[82,89963,89964],{"class":92},"    fn()\n",[82,89966,89967,89969,89971],{"class":84,"line":1388},[82,89968,54977],{"class":92},[82,89970,54375],{"class":53863},[82,89972,53870],{"class":92},[82,89974,89975,89977,89979],{"class":84,"line":1394},[82,89976,54347],{"class":92},[82,89978,54362],{"class":53863},[82,89980,53870],{"class":92},[26,89982,89983],{"start":157},[29,89984,89985],{},"递归函数要加判断条件：",[19,89987,89988],{},[4078,89989],{"alt":78,"src":89990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89992,89993],{"start":404},[29,89994,89995],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[73,89997,89999],{"className":53196,"code":89998,"language":53198,"meta":78,"style":78},"\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",[32,90000,90001,90011,90025,90029,90037,90051,90071,90083,90091,90095,90103,90115,90123,90131,90156,90168,90172,90179,90187,90195,90199],{"__ignoreMap":78},[82,90002,90003,90005,90007,90009],{"class":84,"line":85},[82,90004,53860],{"class":92},[82,90006,53864],{"class":53863},[82,90008,53867],{"class":2384},[82,90010,53870],{"class":92},[82,90012,90013,90015,90017,90019,90021,90023],{"class":84,"line":157},[82,90014,3659],{"class":92},[82,90016,53198],{"class":53863},[82,90018,53879],{"class":2384},[82,90020,113],{"class":92},[82,90022,53884],{"class":96},[82,90024,53870],{"class":92},[82,90026,90027],{"class":84,"line":404},[82,90028,486],{"emptyLinePlaceholder":485},[82,90030,90031,90033,90035],{"class":84,"line":413},[82,90032,3659],{"class":92},[82,90034,53897],{"class":53863},[82,90036,53870],{"class":92},[82,90038,90039,90041,90043,90045,90047,90049],{"class":84,"line":508},[82,90040,54705],{"class":92},[82,90042,53907],{"class":53863},[82,90044,53910],{"class":2384},[82,90046,113],{"class":92},[82,90048,53915],{"class":96},[82,90050,53870],{"class":92},[82,90052,90053,90055,90057,90059,90061,90063,90065,90067,90069],{"class":84,"line":513},[82,90054,54705],{"class":92},[82,90056,53907],{"class":53863},[82,90058,17506],{"class":2384},[82,90060,113],{"class":92},[82,90062,53954],{"class":96},[82,90064,53934],{"class":2384},[82,90066,113],{"class":92},[82,90068,53961],{"class":96},[82,90070,53870],{"class":92},[82,90072,90073,90075,90077,90079,90081],{"class":84,"line":1388},[82,90074,54705],{"class":92},[82,90076,53970],{"class":53863},[82,90078,53973],{"class":92},[82,90080,53970],{"class":53863},[82,90082,53870],{"class":92},[82,90084,90085,90087,90089],{"class":84,"line":1394},[82,90086,54347],{"class":92},[82,90088,53897],{"class":53863},[82,90090,53870],{"class":92},[82,90092,90093],{"class":84,"line":1399},[82,90094,486],{"emptyLinePlaceholder":485},[82,90096,90097,90099,90101],{"class":84,"line":1430},[82,90098,3659],{"class":92},[82,90100,54362],{"class":53863},[82,90102,53870],{"class":92},[82,90104,90105,90107,90109,90111,90113],{"class":84,"line":1818},[82,90106,54705],{"class":92},[82,90108,54173],{"class":53863},[82,90110,57874],{"class":92},[82,90112,54173],{"class":53863},[82,90114,53870],{"class":92},[82,90116,90117,90119,90121],{"class":84,"line":2082},[82,90118,54705],{"class":92},[82,90120,54375],{"class":53863},[82,90122,53870],{"class":92},[82,90124,90125,90127,90129],{"class":84,"line":2233},[82,90126,72640],{"class":112},[82,90128,76327],{"class":2384},[82,90130,13443],{"class":92},[82,90132,90133,90135,90137,90139,90141,90143,90145,90147,90149,90151,90154],{"class":84,"line":2255},[82,90134,58329],{"class":92},[82,90136,56959],{"class":2384},[82,90138,93],{"class":92},[82,90140,84485],{"class":96},[82,90142,76803],{"class":92},[82,90144,113],{"class":112},[82,90146,14168],{"class":112},[82,90148,76343],{"class":2384},[82,90150,19845],{"class":92},[82,90152,90153],{"class":2384},"toLocaleString",[82,90155,4576],{"class":92},[82,90157,90158,90161,90164,90166],{"class":84,"line":2260},[82,90159,90160],{"class":2384},"      setTimeout",[82,90162,90163],{"class":92},"(getTime, ",[82,90165,9002],{"class":88},[82,90167,119],{"class":92},[82,90169,90170],{"class":84,"line":2298},[82,90171,4787],{"class":92},[82,90173,90174,90177],{"class":84,"line":2303},[82,90175,90176],{"class":2384},"    getTime",[82,90178,4576],{"class":92},[82,90180,90181,90183,90185],{"class":84,"line":2321},[82,90182,54977],{"class":92},[82,90184,54375],{"class":53863},[82,90186,53870],{"class":92},[82,90188,90189,90191,90193],{"class":84,"line":2533},[82,90190,54347],{"class":92},[82,90192,54362],{"class":53863},[82,90194,53870],{"class":92},[82,90196,90197],{"class":84,"line":2538},[82,90198,486],{"emptyLinePlaceholder":485},[82,90200,90201,90203,90205],{"class":84,"line":2548},[82,90202,54347],{"class":92},[82,90204,53198],{"class":53863},[82,90206,53870],{"class":92},[19,90208,90209],{},[4078,90210],{"alt":78,"src":90211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,90213,90214],{"start":413},[29,90215,89905],{},[19,90217,90218],{},[4078,90219],{"alt":78,"src":90220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90222,90223],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90225,41754],{},[19,90227,90228],{},"这个是简易版的递归函数深拷贝",[19,90230,90231],{},"一定要注意先数组再对象，因为万物皆可对象",[73,90233,90235],{"className":53196,"code":90234,"language":53198,"meta":78,"style":78},"\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",[32,90236,90237,90247,90261,90265,90273,90287,90307,90319,90327,90331,90339,90347,90357,90366,90374,90389,90393,90401,90405,90409,90420,90425,90444,90460,90465,90470,90475,90490,90495,90500,90509,90517,90534,90542,90548,90556,90561,90566,90575,90579,90583,90587,90598,90607,90617,90631,90641,90649,90657,90665,90669],{"__ignoreMap":78},[82,90238,90239,90241,90243,90245],{"class":84,"line":85},[82,90240,53860],{"class":92},[82,90242,53864],{"class":53863},[82,90244,53867],{"class":2384},[82,90246,53870],{"class":92},[82,90248,90249,90251,90253,90255,90257,90259],{"class":84,"line":157},[82,90250,3659],{"class":92},[82,90252,53198],{"class":53863},[82,90254,53879],{"class":2384},[82,90256,113],{"class":92},[82,90258,53884],{"class":96},[82,90260,53870],{"class":92},[82,90262,90263],{"class":84,"line":404},[82,90264,486],{"emptyLinePlaceholder":485},[82,90266,90267,90269,90271],{"class":84,"line":413},[82,90268,3659],{"class":92},[82,90270,53897],{"class":53863},[82,90272,53870],{"class":92},[82,90274,90275,90277,90279,90281,90283,90285],{"class":84,"line":508},[82,90276,54705],{"class":92},[82,90278,53907],{"class":53863},[82,90280,53910],{"class":2384},[82,90282,113],{"class":92},[82,90284,53915],{"class":96},[82,90286,53870],{"class":92},[82,90288,90289,90291,90293,90295,90297,90299,90301,90303,90305],{"class":84,"line":513},[82,90290,54705],{"class":92},[82,90292,53907],{"class":53863},[82,90294,17506],{"class":2384},[82,90296,113],{"class":92},[82,90298,53954],{"class":96},[82,90300,53934],{"class":2384},[82,90302,113],{"class":92},[82,90304,53961],{"class":96},[82,90306,53870],{"class":92},[82,90308,90309,90311,90313,90315,90317],{"class":84,"line":1388},[82,90310,54705],{"class":92},[82,90312,53970],{"class":53863},[82,90314,53973],{"class":92},[82,90316,53970],{"class":53863},[82,90318,53870],{"class":92},[82,90320,90321,90323,90325],{"class":84,"line":1394},[82,90322,54347],{"class":92},[82,90324,53897],{"class":53863},[82,90326,53870],{"class":92},[82,90328,90329],{"class":84,"line":1399},[82,90330,486],{"emptyLinePlaceholder":485},[82,90332,90333,90335,90337],{"class":84,"line":1430},[82,90334,3659],{"class":92},[82,90336,54362],{"class":53863},[82,90338,53870],{"class":92},[82,90340,90341,90343,90345],{"class":84,"line":1818},[82,90342,54705],{"class":92},[82,90344,54375],{"class":53863},[82,90346,53870],{"class":92},[82,90348,90349,90351,90353,90355],{"class":84,"line":2082},[82,90350,13811],{"class":112},[82,90352,72527],{"class":88},[82,90354,259],{"class":112},[82,90356,1349],{"class":92},[82,90358,90359,90361,90364],{"class":84,"line":2233},[82,90360,74172],{"class":92},[82,90362,90363],{"class":96},"'pink'",[82,90365,1363],{"class":92},[82,90367,90368,90370,90372],{"class":84,"line":2255},[82,90369,74182],{"class":92},[82,90371,1373],{"class":88},[82,90373,1363],{"class":92},[82,90375,90376,90379,90382,90384,90387],{"class":84,"line":2260},[82,90377,90378],{"class":92},"      hobby: [",[82,90380,90381],{"class":96},"'乒乓球'",[82,90383,100],{"class":92},[82,90385,90386],{"class":96},"'足球'",[82,90388,1720],{"class":92},[82,90390,90391],{"class":84,"line":2298},[82,90392,80426],{"class":92},[82,90394,90395,90398],{"class":84,"line":2303},[82,90396,90397],{"class":92},"        baby: ",[82,90399,90400],{"class":96},"'小pink'\n",[82,90402,90403],{"class":84,"line":2321},[82,90404,54958],{"class":92},[82,90406,90407],{"class":84,"line":2533},[82,90408,4787],{"class":92},[82,90410,90411,90413,90416,90418],{"class":84,"line":2538},[82,90412,13811],{"class":112},[82,90414,90415],{"class":88}," o",[82,90417,259],{"class":112},[82,90419,2177],{"class":92},[82,90421,90422],{"class":84,"line":2548},[82,90423,90424],{"class":2828},"    \u002F\u002F 拷贝函数\n",[82,90426,90427,90429,90432,90434,90437,90439,90442],{"class":84,"line":2579},[82,90428,72640],{"class":112},[82,90430,90431],{"class":2384}," deepCopy",[82,90433,93],{"class":92},[82,90435,90436],{"class":108},"newObj",[82,90438,100],{"class":92},[82,90440,90441],{"class":108},"oldObj",[82,90443,15031],{"class":92},[82,90445,90446,90448,90450,90452,90455,90457],{"class":84,"line":2585},[82,90447,54844],{"class":112},[82,90449,4265],{"class":92},[82,90451,54408],{"class":112},[82,90453,90454],{"class":92}," k ",[82,90456,603],{"class":112},[82,90458,90459],{"class":92}," oldObj) {\n",[82,90461,90462],{"class":84,"line":4350},[82,90463,90464],{"class":2828},"        \u002F\u002F 处理数组的问题\n",[82,90466,90467],{"class":84,"line":4355},[82,90468,90469],{"class":2828},"        \u002F\u002F 判断是否属于数组\n",[82,90471,90472],{"class":84,"line":4360},[82,90473,90474],{"class":2828},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[82,90476,90477,90479,90482,90485,90488],{"class":84,"line":4365},[82,90478,5096],{"class":112},[82,90480,90481],{"class":92}," (oldObj[k] ",[82,90483,90484],{"class":112},"instanceof",[82,90486,90487],{"class":2384}," Array",[82,90489,15031],{"class":92},[82,90491,90492],{"class":84,"line":4379},[82,90493,90494],{"class":2828},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[82,90496,90497],{"class":84,"line":4384},[82,90498,90499],{"class":2828},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[82,90501,90502,90505,90507],{"class":84,"line":5176},[82,90503,90504],{"class":92},"          newObj[k] ",[82,90506,113],{"class":112},[82,90508,2408],{"class":92},[82,90510,90511,90514],{"class":84,"line":5190},[82,90512,90513],{"class":2384},"          deepCopy",[82,90515,90516],{"class":92},"(newObj[k], oldObj[k])\n",[82,90518,90519,90521,90523,90525,90527,90529,90532],{"class":84,"line":5198},[82,90520,82634],{"class":92},[82,90522,4304],{"class":112},[82,90524,4307],{"class":112},[82,90526,90481],{"class":92},[82,90528,90484],{"class":112},[82,90530,90531],{"class":2384}," Object",[82,90533,15031],{"class":92},[82,90535,90536,90538,90540],{"class":84,"line":5203},[82,90537,90504],{"class":92},[82,90539,113],{"class":112},[82,90541,2177],{"class":92},[82,90543,90544,90546],{"class":84,"line":5209},[82,90545,90513],{"class":2384},[82,90547,90516],{"class":92},[82,90549,90550,90552,90554],{"class":84,"line":5215},[82,90551,82634],{"class":92},[82,90553,4304],{"class":112},[82,90555,1349],{"class":92},[82,90557,90558],{"class":84,"line":5220},[82,90559,90560],{"class":2828},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[82,90562,90563],{"class":84,"line":10539},[82,90564,90565],{"class":2828},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[82,90567,90568,90570,90572],{"class":84,"line":10563},[82,90569,90504],{"class":92},[82,90571,113],{"class":112},[82,90573,90574],{"class":92}," oldObj[k]\n",[82,90576,90577],{"class":84,"line":10568},[82,90578,5128],{"class":92},[82,90580,90581],{"class":84,"line":10574},[82,90582,54958],{"class":92},[82,90584,90585],{"class":84,"line":10601},[82,90586,4787],{"class":92},[82,90588,90589,90592,90595],{"class":84,"line":10606},[82,90590,90591],{"class":2384},"    deepCopy",[82,90593,90594],{"class":92},"(o, obj) ",[82,90596,90597],{"class":2828},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[82,90599,90600,90602,90604],{"class":84,"line":10612},[82,90601,76307],{"class":92},[82,90603,60805],{"class":2384},[82,90605,90606],{"class":92},"(o)\n",[82,90608,90609,90612,90614],{"class":84,"line":10624},[82,90610,90611],{"class":92},"    o.age ",[82,90613,113],{"class":112},[82,90615,90616],{"class":88}," 20\n",[82,90618,90619,90622,90624,90626,90628],{"class":84,"line":10636},[82,90620,90621],{"class":92},"    o.hobby[",[82,90623,2244],{"class":88},[82,90625,7038],{"class":92},[82,90627,113],{"class":112},[82,90629,90630],{"class":96}," '篮球'\n",[82,90632,90633,90636,90638],{"class":84,"line":10648},[82,90634,90635],{"class":92},"    o.family ",[82,90637,113],{"class":112},[82,90639,90640],{"class":96}," '老pink'\n",[82,90642,90643,90645,90647],{"class":84,"line":12307},[82,90644,76307],{"class":92},[82,90646,60805],{"class":2384},[82,90648,72592],{"class":92},[82,90650,90651,90653,90655],{"class":84,"line":12332},[82,90652,54977],{"class":92},[82,90654,54375],{"class":53863},[82,90656,53870],{"class":92},[82,90658,90659,90661,90663],{"class":84,"line":12355},[82,90660,54347],{"class":92},[82,90662,54362],{"class":53863},[82,90664,53870],{"class":92},[82,90666,90667],{"class":84,"line":12379},[82,90668,486],{"emptyLinePlaceholder":485},[82,90670,90671,90673,90675],{"class":84,"line":12384},[82,90672,54347],{"class":92},[82,90674,53198],{"class":53863},[82,90676,53870],{"class":92},[19,90678,90679],{},[4078,90680],{"alt":78,"src":90681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24582,90683,90685,90686],{"id":90684},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2913,90687,90688],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90690,90691],{},[323,90692,90693],{"href":90693,"rel":90694},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26449],[19,90696,90697],{},"lodash里边的方法都要加上一个下划线_",[19,90699,90700],{},"_.cloneDeep()",[73,90702,90704],{"className":53196,"code":90703,"language":53198,"meta":78,"style":78},"\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",[32,90705,90706,90716,90730,90734,90742,90756,90776,90788,90796,90800,90808,90813,90832,90840,90850,90858,90866,90878,90882,90888,90892,90896,90912,90920,90929,90937,90945,90953,90957],{"__ignoreMap":78},[82,90707,90708,90710,90712,90714],{"class":84,"line":85},[82,90709,53860],{"class":92},[82,90711,53864],{"class":53863},[82,90713,53867],{"class":2384},[82,90715,53870],{"class":92},[82,90717,90718,90720,90722,90724,90726,90728],{"class":84,"line":157},[82,90719,3659],{"class":92},[82,90721,53198],{"class":53863},[82,90723,53879],{"class":2384},[82,90725,113],{"class":92},[82,90727,53884],{"class":96},[82,90729,53870],{"class":92},[82,90731,90732],{"class":84,"line":404},[82,90733,486],{"emptyLinePlaceholder":485},[82,90735,90736,90738,90740],{"class":84,"line":413},[82,90737,3659],{"class":92},[82,90739,53897],{"class":53863},[82,90741,53870],{"class":92},[82,90743,90744,90746,90748,90750,90752,90754],{"class":84,"line":508},[82,90745,54705],{"class":92},[82,90747,53907],{"class":53863},[82,90749,53910],{"class":2384},[82,90751,113],{"class":92},[82,90753,53915],{"class":96},[82,90755,53870],{"class":92},[82,90757,90758,90760,90762,90764,90766,90768,90770,90772,90774],{"class":84,"line":513},[82,90759,54705],{"class":92},[82,90761,53907],{"class":53863},[82,90763,17506],{"class":2384},[82,90765,113],{"class":92},[82,90767,53954],{"class":96},[82,90769,53934],{"class":2384},[82,90771,113],{"class":92},[82,90773,53961],{"class":96},[82,90775,53870],{"class":92},[82,90777,90778,90780,90782,90784,90786],{"class":84,"line":1388},[82,90779,54705],{"class":92},[82,90781,53970],{"class":53863},[82,90783,53973],{"class":92},[82,90785,53970],{"class":53863},[82,90787,53870],{"class":92},[82,90789,90790,90792,90794],{"class":84,"line":1394},[82,90791,54347],{"class":92},[82,90793,53897],{"class":53863},[82,90795,53870],{"class":92},[82,90797,90798],{"class":84,"line":1399},[82,90799,486],{"emptyLinePlaceholder":485},[82,90801,90802,90804,90806],{"class":84,"line":1430},[82,90803,3659],{"class":92},[82,90805,54362],{"class":53863},[82,90807,53870],{"class":92},[82,90809,90810],{"class":84,"line":1818},[82,90811,90812],{"class":2828},"  \u003C!-- 先引用这个库 -->\n",[82,90814,90815,90817,90819,90821,90823,90826,90828,90830],{"class":84,"line":2082},[82,90816,54705],{"class":92},[82,90818,54375],{"class":53863},[82,90820,57799],{"class":2384},[82,90822,113],{"class":92},[82,90824,90825],{"class":96},"\"lodash.min.js\"",[82,90827,57874],{"class":92},[82,90829,54375],{"class":53863},[82,90831,53870],{"class":92},[82,90833,90834,90836,90838],{"class":84,"line":2233},[82,90835,54705],{"class":92},[82,90837,54375],{"class":53863},[82,90839,53870],{"class":92},[82,90841,90842,90844,90846,90848],{"class":84,"line":2255},[82,90843,13811],{"class":112},[82,90845,72527],{"class":88},[82,90847,259],{"class":112},[82,90849,1349],{"class":92},[82,90851,90852,90854,90856],{"class":84,"line":2260},[82,90853,74172],{"class":92},[82,90855,90363],{"class":96},[82,90857,1363],{"class":92},[82,90859,90860,90862,90864],{"class":84,"line":2298},[82,90861,74182],{"class":92},[82,90863,1373],{"class":88},[82,90865,1363],{"class":92},[82,90867,90868,90870,90872,90874,90876],{"class":84,"line":2303},[82,90869,90378],{"class":92},[82,90871,90381],{"class":96},[82,90873,100],{"class":92},[82,90875,90386],{"class":96},[82,90877,1720],{"class":92},[82,90879,90880],{"class":84,"line":2321},[82,90881,80426],{"class":92},[82,90883,90884,90886],{"class":84,"line":2533},[82,90885,90397],{"class":92},[82,90887,90400],{"class":96},[82,90889,90890],{"class":84,"line":2538},[82,90891,54958],{"class":92},[82,90893,90894],{"class":84,"line":2548},[82,90895,4787],{"class":92},[82,90897,90898,90900,90902,90904,90907,90910],{"class":84,"line":2579},[82,90899,13811],{"class":112},[82,90901,90415],{"class":88},[82,90903,259],{"class":112},[82,90905,90906],{"class":92}," _.",[82,90908,90909],{"class":2384},"cloneDeep",[82,90911,72592],{"class":92},[82,90913,90914,90916,90918],{"class":84,"line":2585},[82,90915,76307],{"class":92},[82,90917,60805],{"class":2384},[82,90919,90606],{"class":92},[82,90921,90922,90925,90927],{"class":84,"line":4350},[82,90923,90924],{"class":92},"    o.family.baby ",[82,90926,113],{"class":112},[82,90928,90640],{"class":96},[82,90930,90931,90933,90935],{"class":84,"line":4355},[82,90932,76307],{"class":92},[82,90934,60805],{"class":2384},[82,90936,72592],{"class":92},[82,90938,90939,90941,90943],{"class":84,"line":4360},[82,90940,54977],{"class":92},[82,90942,54375],{"class":53863},[82,90944,53870],{"class":92},[82,90946,90947,90949,90951],{"class":84,"line":4365},[82,90948,54347],{"class":92},[82,90950,54362],{"class":53863},[82,90952,53870],{"class":92},[82,90954,90955],{"class":84,"line":4379},[82,90956,486],{"emptyLinePlaceholder":485},[82,90958,90959,90961,90963],{"class":84,"line":4384},[82,90960,54347],{"class":92},[82,90962,53198],{"class":53863},[82,90964,53870],{"class":92},[19,90966,90967],{},[4078,90968],{"alt":78,"src":90969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24582,90971,90973],{"id":90972},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[73,90975,90977],{"className":53196,"code":90976,"language":53198,"meta":78,"style":78},"\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",[32,90978,90979,90989,91003,91007,91015,91029,91049,91061,91069,91073,91081,91089,91099,91107,91115,91127,91131,91137,91141,91145,91150,91155,91160,91186,91194,91203,91211,91219,91227,91231],{"__ignoreMap":78},[82,90980,90981,90983,90985,90987],{"class":84,"line":85},[82,90982,53860],{"class":92},[82,90984,53864],{"class":53863},[82,90986,53867],{"class":2384},[82,90988,53870],{"class":92},[82,90990,90991,90993,90995,90997,90999,91001],{"class":84,"line":157},[82,90992,3659],{"class":92},[82,90994,53198],{"class":53863},[82,90996,53879],{"class":2384},[82,90998,113],{"class":92},[82,91000,53884],{"class":96},[82,91002,53870],{"class":92},[82,91004,91005],{"class":84,"line":404},[82,91006,486],{"emptyLinePlaceholder":485},[82,91008,91009,91011,91013],{"class":84,"line":413},[82,91010,3659],{"class":92},[82,91012,53897],{"class":53863},[82,91014,53870],{"class":92},[82,91016,91017,91019,91021,91023,91025,91027],{"class":84,"line":508},[82,91018,54705],{"class":92},[82,91020,53907],{"class":53863},[82,91022,53910],{"class":2384},[82,91024,113],{"class":92},[82,91026,53915],{"class":96},[82,91028,53870],{"class":92},[82,91030,91031,91033,91035,91037,91039,91041,91043,91045,91047],{"class":84,"line":513},[82,91032,54705],{"class":92},[82,91034,53907],{"class":53863},[82,91036,17506],{"class":2384},[82,91038,113],{"class":92},[82,91040,53954],{"class":96},[82,91042,53934],{"class":2384},[82,91044,113],{"class":92},[82,91046,53961],{"class":96},[82,91048,53870],{"class":92},[82,91050,91051,91053,91055,91057,91059],{"class":84,"line":1388},[82,91052,54705],{"class":92},[82,91054,53970],{"class":53863},[82,91056,53973],{"class":92},[82,91058,53970],{"class":53863},[82,91060,53870],{"class":92},[82,91062,91063,91065,91067],{"class":84,"line":1394},[82,91064,54347],{"class":92},[82,91066,53897],{"class":53863},[82,91068,53870],{"class":92},[82,91070,91071],{"class":84,"line":1399},[82,91072,486],{"emptyLinePlaceholder":485},[82,91074,91075,91077,91079],{"class":84,"line":1430},[82,91076,3659],{"class":92},[82,91078,54362],{"class":53863},[82,91080,53870],{"class":92},[82,91082,91083,91085,91087],{"class":84,"line":1818},[82,91084,54705],{"class":92},[82,91086,54375],{"class":53863},[82,91088,53870],{"class":92},[82,91090,91091,91093,91095,91097],{"class":84,"line":2082},[82,91092,13811],{"class":112},[82,91094,72527],{"class":88},[82,91096,259],{"class":112},[82,91098,1349],{"class":92},[82,91100,91101,91103,91105],{"class":84,"line":2233},[82,91102,74172],{"class":92},[82,91104,90363],{"class":96},[82,91106,1363],{"class":92},[82,91108,91109,91111,91113],{"class":84,"line":2255},[82,91110,74182],{"class":92},[82,91112,1373],{"class":88},[82,91114,1363],{"class":92},[82,91116,91117,91119,91121,91123,91125],{"class":84,"line":2260},[82,91118,90378],{"class":92},[82,91120,90381],{"class":96},[82,91122,100],{"class":92},[82,91124,90386],{"class":96},[82,91126,1720],{"class":92},[82,91128,91129],{"class":84,"line":2298},[82,91130,80426],{"class":92},[82,91132,91133,91135],{"class":84,"line":2303},[82,91134,90397],{"class":92},[82,91136,90400],{"class":96},[82,91138,91139],{"class":84,"line":2321},[82,91140,54958],{"class":92},[82,91142,91143],{"class":84,"line":2533},[82,91144,4787],{"class":92},[82,91146,91147],{"class":84,"line":2538},[82,91148,91149],{"class":2828},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[82,91151,91152],{"class":84,"line":2548},[82,91153,91154],{"class":2828},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[82,91156,91157],{"class":84,"line":2579},[82,91158,91159],{"class":2828},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[82,91161,91162,91164,91166,91168,91171,91173,91176,91178,91180,91182,91184],{"class":84,"line":2585},[82,91163,13811],{"class":112},[82,91165,90415],{"class":88},[82,91167,259],{"class":112},[82,91169,91170],{"class":88}," JSON",[82,91172,233],{"class":92},[82,91174,91175],{"class":2384},"parse",[82,91177,93],{"class":92},[82,91179,74220],{"class":88},[82,91181,233],{"class":92},[82,91183,74225],{"class":2384},[82,91185,74228],{"class":92},[82,91187,91188,91190,91192],{"class":84,"line":4350},[82,91189,76307],{"class":92},[82,91191,60805],{"class":2384},[82,91193,90606],{"class":92},[82,91195,91196,91198,91200],{"class":84,"line":4355},[82,91197,90924],{"class":92},[82,91199,113],{"class":112},[82,91201,91202],{"class":96}," '123'\n",[82,91204,91205,91207,91209],{"class":84,"line":4360},[82,91206,76307],{"class":92},[82,91208,60805],{"class":2384},[82,91210,72592],{"class":92},[82,91212,91213,91215,91217],{"class":84,"line":4365},[82,91214,54977],{"class":92},[82,91216,54375],{"class":53863},[82,91218,53870],{"class":92},[82,91220,91221,91223,91225],{"class":84,"line":4379},[82,91222,54347],{"class":92},[82,91224,54362],{"class":53863},[82,91226,53870],{"class":92},[82,91228,91229],{"class":84,"line":4384},[82,91230,486],{"emptyLinePlaceholder":485},[82,91232,91233,91235,91237],{"class":84,"line":5176},[82,91234,54347],{"class":92},[82,91236,53198],{"class":53863},[82,91238,53870],{"class":92},[19,91240,91241],{},[4078,91242],{"alt":78,"src":91243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91245,91247],{"id":91246},"_415-异常处理","4.15 异常处理",[26,91249,91250],{},[29,91251,91252],{},"throw抛异常",[19,91254,91255],{},[4078,91256],{"alt":78,"src":91257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,91259,91260],{"start":157},[29,91261,91262],{},"try\u002Fcatch 捕获错误信息",[19,91264,91265],{},[4078,91266],{"alt":78,"src":91267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[73,91269,91271],{"className":53196,"code":91270,"language":53198,"meta":78,"style":78},"\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",[32,91272,91273,91283,91297,91301,91309,91323,91343,91355,91363,91367,91375,91387,91395,91404,91411,91416,91435,91444,91455,91460,91470,91475,91480,91485,91502,91506,91511,91518,91530,91534,91546,91550,91554,91559,91564,91571,91579,91587,91591],{"__ignoreMap":78},[82,91274,91275,91277,91279,91281],{"class":84,"line":85},[82,91276,53860],{"class":92},[82,91278,53864],{"class":53863},[82,91280,53867],{"class":2384},[82,91282,53870],{"class":92},[82,91284,91285,91287,91289,91291,91293,91295],{"class":84,"line":157},[82,91286,3659],{"class":92},[82,91288,53198],{"class":53863},[82,91290,53879],{"class":2384},[82,91292,113],{"class":92},[82,91294,53884],{"class":96},[82,91296,53870],{"class":92},[82,91298,91299],{"class":84,"line":404},[82,91300,486],{"emptyLinePlaceholder":485},[82,91302,91303,91305,91307],{"class":84,"line":413},[82,91304,3659],{"class":92},[82,91306,53897],{"class":53863},[82,91308,53870],{"class":92},[82,91310,91311,91313,91315,91317,91319,91321],{"class":84,"line":508},[82,91312,54705],{"class":92},[82,91314,53907],{"class":53863},[82,91316,53910],{"class":2384},[82,91318,113],{"class":92},[82,91320,53915],{"class":96},[82,91322,53870],{"class":92},[82,91324,91325,91327,91329,91331,91333,91335,91337,91339,91341],{"class":84,"line":513},[82,91326,54705],{"class":92},[82,91328,53907],{"class":53863},[82,91330,17506],{"class":2384},[82,91332,113],{"class":92},[82,91334,53954],{"class":96},[82,91336,53934],{"class":2384},[82,91338,113],{"class":92},[82,91340,53961],{"class":96},[82,91342,53870],{"class":92},[82,91344,91345,91347,91349,91351,91353],{"class":84,"line":1388},[82,91346,54705],{"class":92},[82,91348,53970],{"class":53863},[82,91350,53973],{"class":92},[82,91352,53970],{"class":53863},[82,91354,53870],{"class":92},[82,91356,91357,91359,91361],{"class":84,"line":1394},[82,91358,54347],{"class":92},[82,91360,53897],{"class":53863},[82,91362,53870],{"class":92},[82,91364,91365],{"class":84,"line":1399},[82,91366,486],{"emptyLinePlaceholder":485},[82,91368,91369,91371,91373],{"class":84,"line":1430},[82,91370,3659],{"class":92},[82,91372,54362],{"class":53863},[82,91374,53870],{"class":92},[82,91376,91377,91379,91381,91383,91385],{"class":84,"line":1818},[82,91378,54705],{"class":92},[82,91380,19],{"class":53863},[82,91382,56054],{"class":92},[82,91384,19],{"class":53863},[82,91386,53870],{"class":92},[82,91388,91389,91391,91393],{"class":84,"line":2082},[82,91390,54705],{"class":92},[82,91392,54375],{"class":53863},[82,91394,53870],{"class":92},[82,91396,91397,91399,91402],{"class":84,"line":2233},[82,91398,72640],{"class":112},[82,91400,91401],{"class":2384}," fn",[82,91403,13443],{"class":92},[82,91405,91406,91409],{"class":84,"line":2255},[82,91407,91408],{"class":112},"      try",[82,91410,1349],{"class":92},[82,91412,91413],{"class":84,"line":2260},[82,91414,91415],{"class":2828},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[82,91417,91418,91420,91422,91424,91426,91428,91430,91433],{"class":84,"line":2298},[82,91419,63828],{"class":112},[82,91421,9417],{"class":88},[82,91423,259],{"class":112},[82,91425,56956],{"class":92},[82,91427,56959],{"class":2384},[82,91429,93],{"class":92},[82,91431,91432],{"class":96},"'.p'",[82,91434,119],{"class":92},[82,91436,91437,91440,91442],{"class":84,"line":2303},[82,91438,91439],{"class":92},"        p.style.color ",[82,91441,113],{"class":112},[82,91443,69608],{"class":96},[82,91445,91446,91449,91452],{"class":84,"line":2321},[82,91447,91448],{"class":92},"      } ",[82,91450,91451],{"class":112},"catch",[82,91453,91454],{"class":92}," (err) {\n",[82,91456,91457],{"class":84,"line":2533},[82,91458,91459],{"class":2828},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[82,91461,91462,91465,91467],{"class":84,"line":2538},[82,91463,91464],{"class":92},"        console.",[82,91466,60805],{"class":2384},[82,91468,91469],{"class":92},"(err.message)\n",[82,91471,91472],{"class":84,"line":2548},[82,91473,91474],{"class":2828},"        \u002F\u002F 想要中断程序，需要加return\n",[82,91476,91477],{"class":84,"line":2579},[82,91478,91479],{"class":2828},"        \u002F\u002F return\n",[82,91481,91482],{"class":84,"line":2585},[82,91483,91484],{"class":2828},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[82,91486,91487,91490,91492,91495,91497,91500],{"class":84,"line":4350},[82,91488,91489],{"class":112},"        throw",[82,91491,14168],{"class":112},[82,91493,91494],{"class":2384}," Error",[82,91496,93],{"class":92},[82,91498,91499],{"class":96},"'你看看，选择器错误了吧'",[82,91501,119],{"class":92},[82,91503,91504],{"class":84,"line":4355},[82,91505,54958],{"class":92},[82,91507,91508],{"class":84,"line":4360},[82,91509,91510],{"class":2828},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[82,91512,91513,91516],{"class":84,"line":4365},[82,91514,91515],{"class":112},"      finally",[82,91517,1349],{"class":92},[82,91519,91520,91523,91525,91528],{"class":84,"line":4379},[82,91521,91522],{"class":2384},"        alert",[82,91524,93],{"class":92},[82,91526,91527],{"class":96},"'弹出对话框'",[82,91529,119],{"class":92},[82,91531,91532],{"class":84,"line":4384},[82,91533,54958],{"class":92},[82,91535,91536,91538,91540,91542,91544],{"class":84,"line":5176},[82,91537,60802],{"class":92},[82,91539,60805],{"class":2384},[82,91541,93],{"class":92},[82,91543,3229],{"class":88},[82,91545,119],{"class":92},[82,91547,91548],{"class":84,"line":5190},[82,91549,486],{"emptyLinePlaceholder":485},[82,91551,91552],{"class":84,"line":5198},[82,91553,4787],{"class":92},[82,91555,91556],{"class":84,"line":5203},[82,91557,91558],{"class":2828},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[82,91560,91561],{"class":84,"line":5209},[82,91562,91563],{"class":2828},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[82,91565,91566,91569],{"class":84,"line":5215},[82,91567,91568],{"class":2384},"    fn",[82,91570,4576],{"class":92},[82,91572,91573,91575,91577],{"class":84,"line":5220},[82,91574,54977],{"class":92},[82,91576,54375],{"class":53863},[82,91578,53870],{"class":92},[82,91580,91581,91583,91585],{"class":84,"line":10539},[82,91582,54347],{"class":92},[82,91584,54362],{"class":53863},[82,91586,53870],{"class":92},[82,91588,91589],{"class":84,"line":10563},[82,91590,486],{"emptyLinePlaceholder":485},[82,91592,91593,91595,91597],{"class":84,"line":10568},[82,91594,54347],{"class":92},[82,91596,53198],{"class":53863},[82,91598,53870],{"class":92},[19,91600,91601],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,91603,91604],{"start":404},[29,91605,91606],{},"debugger",[19,91608,91609],{},[4078,91610],{"alt":78,"src":91611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91613,91614],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91616,91618],{"id":91617},"_416-处理this","4.16 处理this",[65,91620,91622],{"id":91621},"_4161-this的指向","4.16.1 this的指向",[26,91624,91625],{},[29,91626,91627],{},"普通函数的this",[19,91629,91630],{},[4078,91631],{"alt":78,"src":91632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,91634,91635],{"start":157},[29,91636,91637],{},"箭头函数的this",[19,91639,91640],{},[4078,91641],{"alt":78,"src":91642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91644,91645],{},[4078,91646],{"alt":78,"src":91647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91649,91650],{},[4078,91651],{"alt":78,"src":91652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[65,91654,91656],{"id":91655},"_4162-this的改变","4.16.2 this的改变",[19,91658,91659],{},"call() apply() bind()",[26,91661,91662],{},[29,91663,91664],{},"call()",[19,91666,91667],{},[4078,91668],{"alt":78,"src":91669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91671,91672],{},"两个作用：①调用函数；②改变this指向",[73,91674,91676],{"className":55627,"code":91675,"language":55629,"meta":78,"style":78},"\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",[32,91677,91678,91686,91694,91698,91703,91707,91712,91717,91722,91726,91731,91739],{"__ignoreMap":78},[82,91679,91680,91682,91684],{"class":84,"line":85},[82,91681,3659],{"class":92},[82,91683,54362],{"class":53863},[82,91685,53870],{"class":92},[82,91687,91688,91690,91692],{"class":84,"line":157},[82,91689,54705],{"class":92},[82,91691,54375],{"class":53863},[82,91693,53870],{"class":92},[82,91695,91696],{"class":84,"line":404},[82,91697,74079],{"class":92},[82,91699,91700],{"class":84,"line":413},[82,91701,91702],{"class":92},"      uname: 'pink'\n",[82,91704,91705],{"class":84,"line":508},[82,91706,4787],{"class":92},[82,91708,91709],{"class":84,"line":513},[82,91710,91711],{"class":92},"    function fn(x, y) {\n",[82,91713,91714],{"class":84,"line":1388},[82,91715,91716],{"class":92},"      console.log(this)  \u002F\u002Fwindow\n",[82,91718,91719],{"class":84,"line":1394},[82,91720,91721],{"class":92},"      console.log(x + y)\n",[82,91723,91724],{"class":84,"line":1399},[82,91725,4787],{"class":92},[82,91727,91728],{"class":84,"line":1430},[82,91729,91730],{"class":92},"    fn.call(obj, 1, 2)\n",[82,91732,91733,91735,91737],{"class":84,"line":1818},[82,91734,54977],{"class":92},[82,91736,54375],{"class":53863},[82,91738,53870],{"class":92},[82,91740,91741,91743,91745],{"class":84,"line":2082},[82,91742,54347],{"class":92},[82,91744,54362],{"class":53863},[82,91746,53870],{"class":92},[19,91748,91749],{},[4078,91750],{"alt":78,"src":91751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,91753,91754],{"start":157},[29,91755,91756],{},"apply()",[19,91758,91759],{},[4078,91760],{"alt":78,"src":91761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91763,91672],{},[19,91765,91766],{},"call传递的是普通参数，而apply必须传递的是数组",[73,91768,91770],{"className":53196,"code":91769,"language":53198,"meta":78,"style":78},"\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",[32,91771,91772,91782,91796,91800,91808,91822,91842,91854,91862,91866,91874,91882,91892,91899,91903,91908,91924,91936,91950,91954,91959,91978,91983,91987,91992,91997,92005,92010,92032,92037,92053,92069,92081,92085,92090,92109,92117,92125,92129],{"__ignoreMap":78},[82,91773,91774,91776,91778,91780],{"class":84,"line":85},[82,91775,53860],{"class":92},[82,91777,53864],{"class":53863},[82,91779,53867],{"class":2384},[82,91781,53870],{"class":92},[82,91783,91784,91786,91788,91790,91792,91794],{"class":84,"line":157},[82,91785,3659],{"class":92},[82,91787,53198],{"class":53863},[82,91789,53879],{"class":2384},[82,91791,113],{"class":92},[82,91793,53884],{"class":96},[82,91795,53870],{"class":92},[82,91797,91798],{"class":84,"line":404},[82,91799,486],{"emptyLinePlaceholder":485},[82,91801,91802,91804,91806],{"class":84,"line":413},[82,91803,3659],{"class":92},[82,91805,53897],{"class":53863},[82,91807,53870],{"class":92},[82,91809,91810,91812,91814,91816,91818,91820],{"class":84,"line":508},[82,91811,54705],{"class":92},[82,91813,53907],{"class":53863},[82,91815,53910],{"class":2384},[82,91817,113],{"class":92},[82,91819,53915],{"class":96},[82,91821,53870],{"class":92},[82,91823,91824,91826,91828,91830,91832,91834,91836,91838,91840],{"class":84,"line":513},[82,91825,54705],{"class":92},[82,91827,53907],{"class":53863},[82,91829,17506],{"class":2384},[82,91831,113],{"class":92},[82,91833,53954],{"class":96},[82,91835,53934],{"class":2384},[82,91837,113],{"class":92},[82,91839,53961],{"class":96},[82,91841,53870],{"class":92},[82,91843,91844,91846,91848,91850,91852],{"class":84,"line":1388},[82,91845,54705],{"class":92},[82,91847,53970],{"class":53863},[82,91849,53973],{"class":92},[82,91851,53970],{"class":53863},[82,91853,53870],{"class":92},[82,91855,91856,91858,91860],{"class":84,"line":1394},[82,91857,54347],{"class":92},[82,91859,53897],{"class":53863},[82,91861,53870],{"class":92},[82,91863,91864],{"class":84,"line":1399},[82,91865,486],{"emptyLinePlaceholder":485},[82,91867,91868,91870,91872],{"class":84,"line":1430},[82,91869,3659],{"class":92},[82,91871,54362],{"class":53863},[82,91873,53870],{"class":92},[82,91875,91876,91878,91880],{"class":84,"line":1818},[82,91877,54705],{"class":92},[82,91879,54375],{"class":53863},[82,91881,53870],{"class":92},[82,91883,91884,91886,91888,91890],{"class":84,"line":2082},[82,91885,13811],{"class":112},[82,91887,72527],{"class":88},[82,91889,259],{"class":112},[82,91891,1349],{"class":92},[82,91893,91894,91896],{"class":84,"line":2233},[82,91895,74182],{"class":92},[82,91897,91898],{"class":88},"18\n",[82,91900,91901],{"class":84,"line":2255},[82,91902,4787],{"class":92},[82,91904,91905],{"class":84,"line":2260},[82,91906,91907],{"class":2828},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[82,91909,91910,91912,91914,91916,91918,91920,91922],{"class":84,"line":2298},[82,91911,72640],{"class":112},[82,91913,91401],{"class":2384},[82,91915,93],{"class":92},[82,91917,3569],{"class":108},[82,91919,100],{"class":92},[82,91921,3594],{"class":108},[82,91923,15031],{"class":92},[82,91925,91926,91928,91930,91932,91934],{"class":84,"line":2303},[82,91927,60802],{"class":92},[82,91929,60805],{"class":2384},[82,91931,93],{"class":92},[82,91933,89546],{"class":88},[82,91935,119],{"class":92},[82,91937,91938,91940,91942,91945,91947],{"class":84,"line":2321},[82,91939,60802],{"class":92},[82,91941,60805],{"class":2384},[82,91943,91944],{"class":92},"(x ",[82,91946,2249],{"class":112},[82,91948,91949],{"class":92}," y)\n",[82,91951,91952],{"class":84,"line":2533},[82,91953,4787],{"class":92},[82,91955,91956],{"class":84,"line":2538},[82,91957,91958],{"class":2828},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[82,91960,91961,91964,91967,91970,91972,91974,91976],{"class":84,"line":2548},[82,91962,91963],{"class":92},"    fn.",[82,91965,91966],{"class":2384},"apply",[82,91968,91969],{"class":92},"(obj, [",[82,91971,2283],{"class":88},[82,91973,100],{"class":92},[82,91975,1425],{"class":88},[82,91977,7252],{"class":92},[82,91979,91980],{"class":84,"line":2579},[82,91981,91982],{"class":2828},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[82,91984,91985],{"class":84,"line":2585},[82,91986,486],{"emptyLinePlaceholder":485},[82,91988,91989],{"class":84,"line":4350},[82,91990,91991],{"class":2828},"    \u002F\u002F 使用场景：求数组最大值\n",[82,91993,91994],{"class":84,"line":4355},[82,91995,91996],{"class":2828},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[82,91998,91999,92002],{"class":84,"line":4360},[82,92000,92001],{"class":2828},"    \u002F\u002F console.log(max)",[82,92003,92004],{"class":2828},"   \u002F\u002F3\n",[82,92006,92007],{"class":84,"line":4365},[82,92008,92009],{"class":2828},"    \u002F\u002F 指向空或者Math都是可以的\n",[82,92011,92012,92014,92016,92018,92020,92022,92024,92026,92028,92030],{"class":84,"line":4379},[82,92013,13811],{"class":112},[82,92015,60253],{"class":88},[82,92017,259],{"class":112},[82,92019,847],{"class":92},[82,92021,3069],{"class":88},[82,92023,100],{"class":92},[82,92025,3260],{"class":88},[82,92027,100],{"class":92},[82,92029,3291],{"class":88},[82,92031,875],{"class":92},[82,92033,92034],{"class":84,"line":4384},[82,92035,92036],{"class":2828},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[82,92038,92039,92041,92043,92045,92048,92050],{"class":84,"line":5176},[82,92040,13811],{"class":112},[82,92042,8543],{"class":88},[82,92044,259],{"class":112},[82,92046,92047],{"class":92}," Math.max.",[82,92049,91966],{"class":2384},[82,92051,92052],{"class":92},"(Math, arr)\n",[82,92054,92055,92057,92060,92062,92065,92067],{"class":84,"line":5190},[82,92056,13811],{"class":112},[82,92058,92059],{"class":88}," min",[82,92061,259],{"class":112},[82,92063,92064],{"class":92}," Math.min.",[82,92066,91966],{"class":2384},[82,92068,92052],{"class":92},[82,92070,92071,92073,92075,92078],{"class":84,"line":5198},[82,92072,76307],{"class":92},[82,92074,60805],{"class":2384},[82,92076,92077],{"class":92},"(max, min)     ",[82,92079,92080],{"class":2828},"\u002F\u002F100,4\n",[82,92082,92083],{"class":84,"line":5203},[82,92084,486],{"emptyLinePlaceholder":485},[82,92086,92087],{"class":84,"line":5209},[82,92088,92089],{"class":2828},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[82,92091,92092,92094,92096,92099,92101,92103,92106],{"class":84,"line":5215},[82,92093,76307],{"class":92},[82,92095,60805],{"class":2384},[82,92097,92098],{"class":92},"(Max.",[82,92100,8607],{"class":2384},[82,92102,93],{"class":92},[82,92104,92105],{"class":112},"...",[82,92107,92108],{"class":92},"arr))\n",[82,92110,92111,92113,92115],{"class":84,"line":5220},[82,92112,54977],{"class":92},[82,92114,54375],{"class":53863},[82,92116,53870],{"class":92},[82,92118,92119,92121,92123],{"class":84,"line":10539},[82,92120,54347],{"class":92},[82,92122,54362],{"class":53863},[82,92124,53870],{"class":92},[82,92126,92127],{"class":84,"line":10563},[82,92128,486],{"emptyLinePlaceholder":485},[82,92130,92131,92133,92135],{"class":84,"line":10568},[82,92132,54347],{"class":92},[82,92134,53198],{"class":53863},[82,92136,53870],{"class":92},[19,92138,92139],{},[4078,92140],{"alt":78,"src":92141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,92143,92144],{"start":404},[29,92145,92146],{},"bind()",[19,92148,92149],{},[4078,92150],{"alt":78,"src":92151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,92153,92154],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92156,92157],{},"bind的语法跟call很相似",[73,92159,92161],{"className":55627,"code":92160,"language":55629,"meta":78,"style":78},"\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",[32,92162,92163,92171,92179,92183,92188,92192,92196,92201,92205,92210,92215,92220,92225,92230,92235,92240,92244,92252],{"__ignoreMap":78},[82,92164,92165,92167,92169],{"class":84,"line":85},[82,92166,3659],{"class":92},[82,92168,54362],{"class":53863},[82,92170,53870],{"class":92},[82,92172,92173,92175,92177],{"class":84,"line":157},[82,92174,54705],{"class":92},[82,92176,54375],{"class":53863},[82,92178,53870],{"class":92},[82,92180,92181],{"class":84,"line":404},[82,92182,74079],{"class":92},[82,92184,92185],{"class":84,"line":413},[82,92186,92187],{"class":92},"      age: 18\n",[82,92189,92190],{"class":84,"line":508},[82,92191,4787],{"class":92},[82,92193,92194],{"class":84,"line":513},[82,92195,79697],{"class":92},[82,92197,92198],{"class":84,"line":1388},[82,92199,92200],{"class":92},"      console.log(this)\n",[82,92202,92203],{"class":84,"line":1394},[82,92204,4787],{"class":92},[82,92206,92207],{"class":84,"line":1399},[82,92208,92209],{"class":92},"    \u002F\u002F 1.bind 不会调用函数\n",[82,92211,92212],{"class":84,"line":1430},[82,92213,92214],{"class":92},"    \u002F\u002F 2.bind能改变this的指向\n",[82,92216,92217],{"class":84,"line":1818},[82,92218,92219],{"class":92},"    fn.bind()\n",[82,92221,92222],{"class":84,"line":2082},[82,92223,92224],{"class":92},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[82,92226,92227],{"class":84,"line":2233},[82,92228,92229],{"class":92},"    const fun = fn.bind(obj)\n",[82,92231,92232],{"class":84,"line":2255},[82,92233,92234],{"class":92},"    \u002F\u002F console.log(fun)\n",[82,92236,92237],{"class":84,"line":2260},[82,92238,92239],{"class":92},"    \u002F\u002F 调用,查看this的指向\n",[82,92241,92242],{"class":84,"line":2298},[82,92243,55211],{"class":92},[82,92245,92246,92248,92250],{"class":84,"line":2303},[82,92247,54977],{"class":92},[82,92249,54375],{"class":53863},[82,92251,53870],{"class":92},[82,92253,92254,92256,92258],{"class":84,"line":2321},[82,92255,54347],{"class":92},[82,92257,54362],{"class":53863},[82,92259,53870],{"class":92},[19,92261,92262],{},[4078,92263],{"alt":78,"src":92264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,92266,92267],{"start":413},[29,92268,92269],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[73,92271,92273],{"className":55627,"code":92272,"language":55629,"meta":78,"style":78},"\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",[32,92274,92275,92283,92296,92304,92309,92313,92318,92323,92328,92333,92338,92343,92348,92353,92357,92365],{"__ignoreMap":78},[82,92276,92277,92279,92281],{"class":84,"line":85},[82,92278,3659],{"class":92},[82,92280,54362],{"class":53863},[82,92282,53870],{"class":92},[82,92284,92285,92287,92289,92292,92294],{"class":84,"line":157},[82,92286,54705],{"class":92},[82,92288,56447],{"class":53863},[82,92290,92291],{"class":92},">禁用\u003C\u002F",[82,92293,56447],{"class":53863},[82,92295,53870],{"class":92},[82,92297,92298,92300,92302],{"class":84,"line":404},[82,92299,54705],{"class":92},[82,92301,54375],{"class":53863},[82,92303,53870],{"class":92},[82,92305,92306],{"class":84,"line":413},[82,92307,92308],{"class":92},"    const btn = document.querySelector('button')\n",[82,92310,92311],{"class":84,"line":508},[82,92312,61574],{"class":92},[82,92314,92315],{"class":84,"line":513},[82,92316,92317],{"class":92},"      this.disabled = true\n",[82,92319,92320],{"class":84,"line":1388},[82,92321,92322],{"class":92},"      \u002F\u002F 定时器是window进行调用的\n",[82,92324,92325],{"class":84,"line":1394},[82,92326,92327],{"class":92},"      setTimeout(function () {\n",[82,92329,92330],{"class":84,"line":1399},[82,92331,92332],{"class":92},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[82,92334,92335],{"class":84,"line":1430},[82,92336,92337],{"class":92},"        this.disabled = false\n",[82,92339,92340],{"class":84,"line":1818},[82,92341,92342],{"class":92},"      }.bind(this), 2000)\n",[82,92344,92345],{"class":84,"line":2082},[82,92346,92347],{"class":92},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[82,92349,92350],{"class":84,"line":2233},[82,92351,92352],{"class":92},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[82,92354,92355],{"class":84,"line":2255},[82,92356,36029],{"class":92},[82,92358,92359,92361,92363],{"class":84,"line":2260},[82,92360,54977],{"class":92},[82,92362,54375],{"class":53863},[82,92364,53870],{"class":92},[82,92366,92367,92369,92371],{"class":84,"line":2298},[82,92368,54347],{"class":92},[82,92370,54362],{"class":53863},[82,92372,53870],{"class":92},[26,92374,92375],{"start":508},[29,92376,24537],{},[19,92378,92379],{},[4078,92380],{"alt":78,"src":92381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92383,92385],{"id":92384},"_417-性能优化","4.17 性能优化",[65,92387,92389],{"id":92388},"_4171-防抖","4.17.1 防抖",[19,92391,92392],{},[4078,92393],{"alt":78,"src":92394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92396,92397],{},[2913,92398,92399],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92401,92402],{},"防抖实现方式：",[3755,92404,92405],{},[29,92406,92407],{},"lodash 提供了防抖处理",[19,92409,92410],{},"_.debounce(func,[wait=0],[options={}])",[19,92412,92413],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[73,92415,92417],{"className":53196,"code":92416,"language":53198,"meta":78,"style":78},"\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",[32,92418,92419,92429,92443,92447,92455,92469,92489,92501,92509,92515,92525,92537,92549,92560,92572,92582,92592,92605,92609,92617,92625,92629,92637,92655,92673,92681,92700,92710,92719,92730,92735,92739,92744,92749,92754,92779,92787,92795,92799],{"__ignoreMap":78},[82,92420,92421,92423,92425,92427],{"class":84,"line":85},[82,92422,53860],{"class":92},[82,92424,53864],{"class":53863},[82,92426,53867],{"class":2384},[82,92428,53870],{"class":92},[82,92430,92431,92433,92435,92437,92439,92441],{"class":84,"line":157},[82,92432,3659],{"class":92},[82,92434,53198],{"class":53863},[82,92436,53879],{"class":2384},[82,92438,113],{"class":92},[82,92440,53884],{"class":96},[82,92442,53870],{"class":92},[82,92444,92445],{"class":84,"line":404},[82,92446,486],{"emptyLinePlaceholder":485},[82,92448,92449,92451,92453],{"class":84,"line":413},[82,92450,3659],{"class":92},[82,92452,53897],{"class":53863},[82,92454,53870],{"class":92},[82,92456,92457,92459,92461,92463,92465,92467],{"class":84,"line":508},[82,92458,54705],{"class":92},[82,92460,53907],{"class":53863},[82,92462,53910],{"class":2384},[82,92464,113],{"class":92},[82,92466,53915],{"class":96},[82,92468,53870],{"class":92},[82,92470,92471,92473,92475,92477,92479,92481,92483,92485,92487],{"class":84,"line":513},[82,92472,54705],{"class":92},[82,92474,53907],{"class":53863},[82,92476,17506],{"class":2384},[82,92478,113],{"class":92},[82,92480,53954],{"class":96},[82,92482,53934],{"class":2384},[82,92484,113],{"class":92},[82,92486,53961],{"class":96},[82,92488,53870],{"class":92},[82,92490,92491,92493,92495,92497,92499],{"class":84,"line":1388},[82,92492,54705],{"class":92},[82,92494,53970],{"class":53863},[82,92496,53973],{"class":92},[82,92498,53970],{"class":53863},[82,92500,53870],{"class":92},[82,92502,92503,92505,92507],{"class":84,"line":1394},[82,92504,54705],{"class":92},[82,92506,2671],{"class":53863},[82,92508,53870],{"class":92},[82,92510,92511,92513],{"class":84,"line":1399},[82,92512,57312],{"class":2384},[82,92514,1349],{"class":92},[82,92516,92517,92519,92521,92523],{"class":84,"line":1430},[82,92518,75152],{"class":88},[82,92520,1357],{"class":92},[82,92522,63063],{"class":88},[82,92524,3909],{"class":92},[82,92526,92527,92529,92531,92533,92535],{"class":84,"line":1818},[82,92528,57331],{"class":88},[82,92530,1357],{"class":92},[82,92532,4325],{"class":88},[82,92534,54054],{"class":112},[82,92536,3909],{"class":92},[82,92538,92539,92541,92543,92545,92547],{"class":84,"line":2082},[82,92540,57345],{"class":88},[82,92542,1357],{"class":92},[82,92544,4325],{"class":88},[82,92546,54054],{"class":112},[82,92548,3909],{"class":92},[82,92550,92551,92553,92555,92558],{"class":84,"line":2233},[82,92552,57444],{"class":88},[82,92554,1357],{"class":92},[82,92556,92557],{"class":88},"gray",[82,92559,3909],{"class":92},[82,92561,92562,92564,92566,92568,92570],{"class":84,"line":2255},[82,92563,57482],{"class":88},[82,92565,1357],{"class":92},[82,92567,3574],{"class":88},[82,92569,54054],{"class":112},[82,92571,3909],{"class":92},[82,92573,92574,92576,92578,92580],{"class":84,"line":2260},[82,92575,59974],{"class":88},[82,92577,1357],{"class":92},[82,92579,63400],{"class":88},[82,92581,3909],{"class":92},[82,92583,92584,92586,92588,92590],{"class":84,"line":2298},[82,92585,59844],{"class":88},[82,92587,1357],{"class":92},[82,92589,54154],{"class":88},[82,92591,3909],{"class":92},[82,92593,92594,92597,92599,92601,92603],{"class":84,"line":2303},[82,92595,92596],{"class":88},"      padding-top",[82,92598,1357],{"class":92},[82,92600,3077],{"class":88},[82,92602,54054],{"class":112},[82,92604,3909],{"class":92},[82,92606,92607],{"class":84,"line":2321},[82,92608,4787],{"class":92},[82,92610,92611,92613,92615],{"class":84,"line":2533},[82,92612,54977],{"class":92},[82,92614,2671],{"class":53863},[82,92616,53870],{"class":92},[82,92618,92619,92621,92623],{"class":84,"line":2538},[82,92620,54347],{"class":92},[82,92622,53897],{"class":53863},[82,92624,53870],{"class":92},[82,92626,92627],{"class":84,"line":2548},[82,92628,486],{"emptyLinePlaceholder":485},[82,92630,92631,92633,92635],{"class":84,"line":2579},[82,92632,3659],{"class":92},[82,92634,54362],{"class":53863},[82,92636,53870],{"class":92},[82,92638,92639,92641,92643,92645,92647,92649,92651,92653],{"class":84,"line":2585},[82,92640,54705],{"class":92},[82,92642,54173],{"class":53863},[82,92644,56046],{"class":2384},[82,92646,113],{"class":92},[82,92648,56051],{"class":96},[82,92650,57874],{"class":92},[82,92652,54173],{"class":53863},[82,92654,53870],{"class":92},[82,92656,92657,92659,92661,92663,92665,92667,92669,92671],{"class":84,"line":4350},[82,92658,54705],{"class":92},[82,92660,54375],{"class":53863},[82,92662,57799],{"class":2384},[82,92664,113],{"class":92},[82,92666,90825],{"class":96},[82,92668,57874],{"class":92},[82,92670,54375],{"class":53863},[82,92672,53870],{"class":92},[82,92674,92675,92677,92679],{"class":84,"line":4355},[82,92676,54705],{"class":92},[82,92678,54375],{"class":53863},[82,92680,53870],{"class":92},[82,92682,92683,92685,92687,92689,92691,92693,92695,92698],{"class":84,"line":4360},[82,92684,13811],{"class":112},[82,92686,89486],{"class":88},[82,92688,259],{"class":112},[82,92690,56956],{"class":92},[82,92692,56959],{"class":2384},[82,92694,93],{"class":92},[82,92696,92697],{"class":96},"'.box'",[82,92699,119],{"class":92},[82,92701,92702,92704,92706,92708],{"class":84,"line":4365},[82,92703,54780],{"class":112},[82,92705,12029],{"class":92},[82,92707,113],{"class":112},[82,92709,49897],{"class":88},[82,92711,92712,92714,92717],{"class":84,"line":4379},[82,92713,72640],{"class":112},[82,92715,92716],{"class":2384}," mouseMove",[82,92718,13443],{"class":92},[82,92720,92721,92724,92726,92728],{"class":84,"line":4384},[82,92722,92723],{"class":92},"      box.innerHTML ",[82,92725,113],{"class":112},[82,92727,5630],{"class":92},[82,92729,5301],{"class":112},[82,92731,92732],{"class":84,"line":5176},[82,92733,92734],{"class":2828},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[82,92736,92737],{"class":84,"line":5190},[82,92738,4787],{"class":92},[82,92740,92741],{"class":84,"line":5198},[82,92742,92743],{"class":2828},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[82,92745,92746],{"class":84,"line":5203},[82,92747,92748],{"class":2828},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[82,92750,92751],{"class":84,"line":5209},[82,92752,92753],{"class":2828},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[82,92755,92756,92759,92761,92763,92766,92769,92772,92775,92777],{"class":84,"line":5215},[82,92757,92758],{"class":92},"    box.",[82,92760,60371],{"class":2384},[82,92762,93],{"class":92},[82,92764,92765],{"class":96},"'mousemove'",[82,92767,92768],{"class":92},", _.",[82,92770,92771],{"class":2384},"debounce",[82,92773,92774],{"class":92},"(mouseMove, ",[82,92776,67631],{"class":88},[82,92778,33074],{"class":92},[82,92780,92781,92783,92785],{"class":84,"line":5220},[82,92782,54977],{"class":92},[82,92784,54375],{"class":53863},[82,92786,53870],{"class":92},[82,92788,92789,92791,92793],{"class":84,"line":10539},[82,92790,54347],{"class":92},[82,92792,54362],{"class":53863},[82,92794,53870],{"class":92},[82,92796,92797],{"class":84,"line":10563},[82,92798,486],{"emptyLinePlaceholder":485},[82,92800,92801,92803,92805],{"class":84,"line":10568},[82,92802,54347],{"class":92},[82,92804,53198],{"class":53863},[82,92806,53870],{"class":92},[3755,92808,92809],{},[29,92810,92811],{},"手写一个防抖函数来处理",[19,92813,92814],{},"防抖的核心就是利用定时器来实现的：",[19,92816,92817],{},"①声明一个定时器变量",[19,92819,92820],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92822,92823],{},"③如果没有定时器则开启定时器，记得存到变量里面",[73,92825,92827],{"className":53196,"code":92826,"language":53198,"meta":78,"style":78},"\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",[32,92828,92829,92839,92853,92857,92865,92879,92899,92911,92919,92925,92935,92947,92959,92969,92981,92991,93001,93013,93017,93025,93033,93037,93045,93063,93081,93089,93107,93117,93125,93135,93139,93143,93147,93152,93157,93162,93167,93172,93177,93195,93202,93207,93215,93220,93233,93249,93259,93264,93268,93272,93292,93296,93301,93306,93311,93316,93324,93332,93336],{"__ignoreMap":78},[82,92830,92831,92833,92835,92837],{"class":84,"line":85},[82,92832,53860],{"class":92},[82,92834,53864],{"class":53863},[82,92836,53867],{"class":2384},[82,92838,53870],{"class":92},[82,92840,92841,92843,92845,92847,92849,92851],{"class":84,"line":157},[82,92842,3659],{"class":92},[82,92844,53198],{"class":53863},[82,92846,53879],{"class":2384},[82,92848,113],{"class":92},[82,92850,53884],{"class":96},[82,92852,53870],{"class":92},[82,92854,92855],{"class":84,"line":404},[82,92856,486],{"emptyLinePlaceholder":485},[82,92858,92859,92861,92863],{"class":84,"line":413},[82,92860,3659],{"class":92},[82,92862,53897],{"class":53863},[82,92864,53870],{"class":92},[82,92866,92867,92869,92871,92873,92875,92877],{"class":84,"line":508},[82,92868,54705],{"class":92},[82,92870,53907],{"class":53863},[82,92872,53910],{"class":2384},[82,92874,113],{"class":92},[82,92876,53915],{"class":96},[82,92878,53870],{"class":92},[82,92880,92881,92883,92885,92887,92889,92891,92893,92895,92897],{"class":84,"line":513},[82,92882,54705],{"class":92},[82,92884,53907],{"class":53863},[82,92886,17506],{"class":2384},[82,92888,113],{"class":92},[82,92890,53954],{"class":96},[82,92892,53934],{"class":2384},[82,92894,113],{"class":92},[82,92896,53961],{"class":96},[82,92898,53870],{"class":92},[82,92900,92901,92903,92905,92907,92909],{"class":84,"line":1388},[82,92902,54705],{"class":92},[82,92904,53970],{"class":53863},[82,92906,53973],{"class":92},[82,92908,53970],{"class":53863},[82,92910,53870],{"class":92},[82,92912,92913,92915,92917],{"class":84,"line":1394},[82,92914,54705],{"class":92},[82,92916,2671],{"class":53863},[82,92918,53870],{"class":92},[82,92920,92921,92923],{"class":84,"line":1399},[82,92922,57312],{"class":2384},[82,92924,1349],{"class":92},[82,92926,92927,92929,92931,92933],{"class":84,"line":1430},[82,92928,75152],{"class":88},[82,92930,1357],{"class":92},[82,92932,63063],{"class":88},[82,92934,3909],{"class":92},[82,92936,92937,92939,92941,92943,92945],{"class":84,"line":1818},[82,92938,57331],{"class":88},[82,92940,1357],{"class":92},[82,92942,4325],{"class":88},[82,92944,54054],{"class":112},[82,92946,3909],{"class":92},[82,92948,92949,92951,92953,92955,92957],{"class":84,"line":2082},[82,92950,57345],{"class":88},[82,92952,1357],{"class":92},[82,92954,4325],{"class":88},[82,92956,54054],{"class":112},[82,92958,3909],{"class":92},[82,92960,92961,92963,92965,92967],{"class":84,"line":2233},[82,92962,57444],{"class":88},[82,92964,1357],{"class":92},[82,92966,92557],{"class":88},[82,92968,3909],{"class":92},[82,92970,92971,92973,92975,92977,92979],{"class":84,"line":2255},[82,92972,57482],{"class":88},[82,92974,1357],{"class":92},[82,92976,3574],{"class":88},[82,92978,54054],{"class":112},[82,92980,3909],{"class":92},[82,92982,92983,92985,92987,92989],{"class":84,"line":2260},[82,92984,59974],{"class":88},[82,92986,1357],{"class":92},[82,92988,63400],{"class":88},[82,92990,3909],{"class":92},[82,92992,92993,92995,92997,92999],{"class":84,"line":2298},[82,92994,59844],{"class":88},[82,92996,1357],{"class":92},[82,92998,54154],{"class":88},[82,93000,3909],{"class":92},[82,93002,93003,93005,93007,93009,93011],{"class":84,"line":2303},[82,93004,92596],{"class":88},[82,93006,1357],{"class":92},[82,93008,3077],{"class":88},[82,93010,54054],{"class":112},[82,93012,3909],{"class":92},[82,93014,93015],{"class":84,"line":2321},[82,93016,4787],{"class":92},[82,93018,93019,93021,93023],{"class":84,"line":2533},[82,93020,54977],{"class":92},[82,93022,2671],{"class":53863},[82,93024,53870],{"class":92},[82,93026,93027,93029,93031],{"class":84,"line":2538},[82,93028,54347],{"class":92},[82,93030,53897],{"class":53863},[82,93032,53870],{"class":92},[82,93034,93035],{"class":84,"line":2548},[82,93036,486],{"emptyLinePlaceholder":485},[82,93038,93039,93041,93043],{"class":84,"line":2579},[82,93040,3659],{"class":92},[82,93042,54362],{"class":53863},[82,93044,53870],{"class":92},[82,93046,93047,93049,93051,93053,93055,93057,93059,93061],{"class":84,"line":2585},[82,93048,54705],{"class":92},[82,93050,54173],{"class":53863},[82,93052,56046],{"class":2384},[82,93054,113],{"class":92},[82,93056,56051],{"class":96},[82,93058,57874],{"class":92},[82,93060,54173],{"class":53863},[82,93062,53870],{"class":92},[82,93064,93065,93067,93069,93071,93073,93075,93077,93079],{"class":84,"line":4350},[82,93066,54705],{"class":92},[82,93068,54375],{"class":53863},[82,93070,57799],{"class":2384},[82,93072,113],{"class":92},[82,93074,90825],{"class":96},[82,93076,57874],{"class":92},[82,93078,54375],{"class":53863},[82,93080,53870],{"class":92},[82,93082,93083,93085,93087],{"class":84,"line":4355},[82,93084,54705],{"class":92},[82,93086,54375],{"class":53863},[82,93088,53870],{"class":92},[82,93090,93091,93093,93095,93097,93099,93101,93103,93105],{"class":84,"line":4360},[82,93092,13811],{"class":112},[82,93094,89486],{"class":88},[82,93096,259],{"class":112},[82,93098,56956],{"class":92},[82,93100,56959],{"class":2384},[82,93102,93],{"class":92},[82,93104,92697],{"class":96},[82,93106,119],{"class":92},[82,93108,93109,93111,93113,93115],{"class":84,"line":4365},[82,93110,54780],{"class":112},[82,93112,12029],{"class":92},[82,93114,113],{"class":112},[82,93116,49897],{"class":88},[82,93118,93119,93121,93123],{"class":84,"line":4379},[82,93120,72640],{"class":112},[82,93122,92716],{"class":2384},[82,93124,13443],{"class":92},[82,93126,93127,93129,93131,93133],{"class":84,"line":4384},[82,93128,92723],{"class":92},[82,93130,113],{"class":112},[82,93132,5630],{"class":92},[82,93134,5301],{"class":112},[82,93136,93137],{"class":84,"line":5176},[82,93138,92734],{"class":2828},[82,93140,93141],{"class":84,"line":5190},[82,93142,4787],{"class":92},[82,93144,93145],{"class":84,"line":5198},[82,93146,92743],{"class":2828},[82,93148,93149],{"class":84,"line":5203},[82,93150,93151],{"class":2828},"    \u002F\u002F 手写防抖函数\n",[82,93153,93154],{"class":84,"line":5209},[82,93155,93156],{"class":2828},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[82,93158,93159],{"class":84,"line":5215},[82,93160,93161],{"class":2828},"    \u002F\u002F 1.声明定时器变量\n",[82,93163,93164],{"class":84,"line":5220},[82,93165,93166],{"class":2828},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[82,93168,93169],{"class":84,"line":10539},[82,93170,93171],{"class":2828},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[82,93173,93174],{"class":84,"line":10563},[82,93175,93176],{"class":2828},"    \u002F\u002F 4.定时器里面写函数调用\n",[82,93178,93179,93181,93184,93186,93189,93191,93193],{"class":84,"line":10568},[82,93180,72640],{"class":112},[82,93182,93183],{"class":2384}," debounce",[82,93185,93],{"class":92},[82,93187,93188],{"class":108},"fn",[82,93190,100],{"class":92},[82,93192,3471],{"class":108},[82,93194,15031],{"class":92},[82,93196,93197,93199],{"class":84,"line":10574},[82,93198,82326],{"class":112},[82,93200,93201],{"class":92}," timer\n",[82,93203,93204],{"class":84,"line":10601},[82,93205,93206],{"class":2828},"      \u002F\u002F return 返回一个匿名函数\n",[82,93208,93209,93211,93213],{"class":84,"line":10606},[82,93210,76536],{"class":112},[82,93212,61476],{"class":112},[82,93214,57012],{"class":92},[82,93216,93217],{"class":84,"line":10612},[82,93218,93219],{"class":2828},"        \u002F\u002F 这里边写第二三四步\n",[82,93221,93222,93224,93227,93230],{"class":84,"line":10624},[82,93223,5096],{"class":112},[82,93225,93226],{"class":92}," (timer) ",[82,93228,93229],{"class":2384},"clearTimeout",[82,93231,93232],{"class":92},"(timer)\n",[82,93234,93235,93238,93240,93243,93245,93247],{"class":84,"line":10636},[82,93236,93237],{"class":92},"        timer ",[82,93239,113],{"class":112},[82,93241,93242],{"class":2384}," setTimeout",[82,93244,93],{"class":92},[82,93246,57009],{"class":112},[82,93248,57012],{"class":92},[82,93250,93251,93254,93256],{"class":84,"line":10648},[82,93252,93253],{"class":2384},"          fn",[82,93255,15639],{"class":92},[82,93257,93258],{"class":2828},"\u002F\u002F加小括号调用fn }, t)\n",[82,93260,93261],{"class":84,"line":12307},[82,93262,93263],{"class":92},"        }, t)\n",[82,93265,93266],{"class":84,"line":12332},[82,93267,54958],{"class":92},[82,93269,93270],{"class":84,"line":12355},[82,93271,4787],{"class":92},[82,93273,93274,93276,93278,93280,93282,93284,93286,93288,93290],{"class":84,"line":12379},[82,93275,92758],{"class":92},[82,93277,60371],{"class":2384},[82,93279,93],{"class":92},[82,93281,92765],{"class":96},[82,93283,100],{"class":92},[82,93285,92771],{"class":2384},[82,93287,92774],{"class":92},[82,93289,67631],{"class":88},[82,93291,33074],{"class":92},[82,93293,93294],{"class":84,"line":12384},[82,93295,486],{"emptyLinePlaceholder":485},[82,93297,93298],{"class":84,"line":12389},[82,93299,93300],{"class":2828},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[82,93302,93303],{"class":84,"line":12394},[82,93304,93305],{"class":2828},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[82,93307,93308],{"class":84,"line":12403},[82,93309,93310],{"class":2828},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[82,93312,93313],{"class":84,"line":12408},[82,93314,93315],{"class":2828},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[82,93317,93318,93320,93322],{"class":84,"line":12414},[82,93319,54977],{"class":92},[82,93321,54375],{"class":53863},[82,93323,53870],{"class":92},[82,93325,93326,93328,93330],{"class":84,"line":12435},[82,93327,54347],{"class":92},[82,93329,54362],{"class":53863},[82,93331,53870],{"class":92},[82,93333,93334],{"class":84,"line":12441},[82,93335,486],{"emptyLinePlaceholder":485},[82,93337,93338,93340,93342],{"class":84,"line":12455},[82,93339,54347],{"class":92},[82,93341,53198],{"class":53863},[82,93343,53870],{"class":92},[65,93345,93347],{"id":93346},"_4172-节流","4.17.2 节流",[19,93349,93350],{},[4078,93351],{"alt":78,"src":93352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93354,93355],{},[4078,93356],{"alt":78,"src":93357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93359,93360],{},[2913,93361,93362],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93364,93365],{},"实现方式：",[3755,93367,93368],{},[29,93369,93370],{},"lodash 提供的节流函数来处理",[19,93372,93373],{},"_.throttle(func,[wait=0],[options=])",[19,93375,93376],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[73,93378,93380],{"className":53196,"code":93379,"language":53198,"meta":78,"style":78},"\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",[32,93381,93382,93392,93406,93410,93418,93432,93452,93464,93472,93478,93488,93500,93512,93522,93534,93544,93554,93566,93570,93578,93586,93590,93598,93616,93634,93642,93660,93670,93678,93688,93692,93696,93700,93705,93710,93731,93739,93747,93751],{"__ignoreMap":78},[82,93383,93384,93386,93388,93390],{"class":84,"line":85},[82,93385,53860],{"class":92},[82,93387,53864],{"class":53863},[82,93389,53867],{"class":2384},[82,93391,53870],{"class":92},[82,93393,93394,93396,93398,93400,93402,93404],{"class":84,"line":157},[82,93395,3659],{"class":92},[82,93397,53198],{"class":53863},[82,93399,53879],{"class":2384},[82,93401,113],{"class":92},[82,93403,53884],{"class":96},[82,93405,53870],{"class":92},[82,93407,93408],{"class":84,"line":404},[82,93409,486],{"emptyLinePlaceholder":485},[82,93411,93412,93414,93416],{"class":84,"line":413},[82,93413,3659],{"class":92},[82,93415,53897],{"class":53863},[82,93417,53870],{"class":92},[82,93419,93420,93422,93424,93426,93428,93430],{"class":84,"line":508},[82,93421,54705],{"class":92},[82,93423,53907],{"class":53863},[82,93425,53910],{"class":2384},[82,93427,113],{"class":92},[82,93429,53915],{"class":96},[82,93431,53870],{"class":92},[82,93433,93434,93436,93438,93440,93442,93444,93446,93448,93450],{"class":84,"line":513},[82,93435,54705],{"class":92},[82,93437,53907],{"class":53863},[82,93439,17506],{"class":2384},[82,93441,113],{"class":92},[82,93443,53954],{"class":96},[82,93445,53934],{"class":2384},[82,93447,113],{"class":92},[82,93449,53961],{"class":96},[82,93451,53870],{"class":92},[82,93453,93454,93456,93458,93460,93462],{"class":84,"line":1388},[82,93455,54705],{"class":92},[82,93457,53970],{"class":53863},[82,93459,53973],{"class":92},[82,93461,53970],{"class":53863},[82,93463,53870],{"class":92},[82,93465,93466,93468,93470],{"class":84,"line":1394},[82,93467,54705],{"class":92},[82,93469,2671],{"class":53863},[82,93471,53870],{"class":92},[82,93473,93474,93476],{"class":84,"line":1399},[82,93475,57312],{"class":2384},[82,93477,1349],{"class":92},[82,93479,93480,93482,93484,93486],{"class":84,"line":1430},[82,93481,75152],{"class":88},[82,93483,1357],{"class":92},[82,93485,63063],{"class":88},[82,93487,3909],{"class":92},[82,93489,93490,93492,93494,93496,93498],{"class":84,"line":1818},[82,93491,57331],{"class":88},[82,93493,1357],{"class":92},[82,93495,4325],{"class":88},[82,93497,54054],{"class":112},[82,93499,3909],{"class":92},[82,93501,93502,93504,93506,93508,93510],{"class":84,"line":2082},[82,93503,57345],{"class":88},[82,93505,1357],{"class":92},[82,93507,4325],{"class":88},[82,93509,54054],{"class":112},[82,93511,3909],{"class":92},[82,93513,93514,93516,93518,93520],{"class":84,"line":2233},[82,93515,57444],{"class":88},[82,93517,1357],{"class":92},[82,93519,92557],{"class":88},[82,93521,3909],{"class":92},[82,93523,93524,93526,93528,93530,93532],{"class":84,"line":2255},[82,93525,57482],{"class":88},[82,93527,1357],{"class":92},[82,93529,3574],{"class":88},[82,93531,54054],{"class":112},[82,93533,3909],{"class":92},[82,93535,93536,93538,93540,93542],{"class":84,"line":2260},[82,93537,59974],{"class":88},[82,93539,1357],{"class":92},[82,93541,63400],{"class":88},[82,93543,3909],{"class":92},[82,93545,93546,93548,93550,93552],{"class":84,"line":2298},[82,93547,59844],{"class":88},[82,93549,1357],{"class":92},[82,93551,54154],{"class":88},[82,93553,3909],{"class":92},[82,93555,93556,93558,93560,93562,93564],{"class":84,"line":2303},[82,93557,92596],{"class":88},[82,93559,1357],{"class":92},[82,93561,3077],{"class":88},[82,93563,54054],{"class":112},[82,93565,3909],{"class":92},[82,93567,93568],{"class":84,"line":2321},[82,93569,4787],{"class":92},[82,93571,93572,93574,93576],{"class":84,"line":2533},[82,93573,54977],{"class":92},[82,93575,2671],{"class":53863},[82,93577,53870],{"class":92},[82,93579,93580,93582,93584],{"class":84,"line":2538},[82,93581,54347],{"class":92},[82,93583,53897],{"class":53863},[82,93585,53870],{"class":92},[82,93587,93588],{"class":84,"line":2548},[82,93589,486],{"emptyLinePlaceholder":485},[82,93591,93592,93594,93596],{"class":84,"line":2579},[82,93593,3659],{"class":92},[82,93595,54362],{"class":53863},[82,93597,53870],{"class":92},[82,93599,93600,93602,93604,93606,93608,93610,93612,93614],{"class":84,"line":2585},[82,93601,54705],{"class":92},[82,93603,54173],{"class":53863},[82,93605,56046],{"class":2384},[82,93607,113],{"class":92},[82,93609,56051],{"class":96},[82,93611,57874],{"class":92},[82,93613,54173],{"class":53863},[82,93615,53870],{"class":92},[82,93617,93618,93620,93622,93624,93626,93628,93630,93632],{"class":84,"line":4350},[82,93619,54705],{"class":92},[82,93621,54375],{"class":53863},[82,93623,57799],{"class":2384},[82,93625,113],{"class":92},[82,93627,90825],{"class":96},[82,93629,57874],{"class":92},[82,93631,54375],{"class":53863},[82,93633,53870],{"class":92},[82,93635,93636,93638,93640],{"class":84,"line":4355},[82,93637,54705],{"class":92},[82,93639,54375],{"class":53863},[82,93641,53870],{"class":92},[82,93643,93644,93646,93648,93650,93652,93654,93656,93658],{"class":84,"line":4360},[82,93645,13811],{"class":112},[82,93647,89486],{"class":88},[82,93649,259],{"class":112},[82,93651,56956],{"class":92},[82,93653,56959],{"class":2384},[82,93655,93],{"class":92},[82,93657,92697],{"class":96},[82,93659,119],{"class":92},[82,93661,93662,93664,93666,93668],{"class":84,"line":4365},[82,93663,54780],{"class":112},[82,93665,12029],{"class":92},[82,93667,113],{"class":112},[82,93669,49897],{"class":88},[82,93671,93672,93674,93676],{"class":84,"line":4379},[82,93673,72640],{"class":112},[82,93675,92716],{"class":2384},[82,93677,13443],{"class":92},[82,93679,93680,93682,93684,93686],{"class":84,"line":4384},[82,93681,92723],{"class":92},[82,93683,113],{"class":112},[82,93685,5630],{"class":92},[82,93687,5301],{"class":112},[82,93689,93690],{"class":84,"line":5176},[82,93691,92734],{"class":2828},[82,93693,93694],{"class":84,"line":5190},[82,93695,4787],{"class":92},[82,93697,93698],{"class":84,"line":5198},[82,93699,92743],{"class":2828},[82,93701,93702],{"class":84,"line":5203},[82,93703,93704],{"class":2828},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[82,93706,93707],{"class":84,"line":5209},[82,93708,93709],{"class":2828},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[82,93711,93712,93714,93716,93718,93720,93722,93725,93727,93729],{"class":84,"line":5215},[82,93713,92758],{"class":92},[82,93715,60371],{"class":2384},[82,93717,93],{"class":92},[82,93719,92765],{"class":96},[82,93721,92768],{"class":92},[82,93723,93724],{"class":2384},"throttle",[82,93726,92774],{"class":92},[82,93728,67631],{"class":88},[82,93730,33074],{"class":92},[82,93732,93733,93735,93737],{"class":84,"line":5220},[82,93734,54977],{"class":92},[82,93736,54375],{"class":53863},[82,93738,53870],{"class":92},[82,93740,93741,93743,93745],{"class":84,"line":10539},[82,93742,54347],{"class":92},[82,93744,54362],{"class":53863},[82,93746,53870],{"class":92},[82,93748,93749],{"class":84,"line":10563},[82,93750,486],{"emptyLinePlaceholder":485},[82,93752,93753,93755,93757],{"class":84,"line":10568},[82,93754,54347],{"class":92},[82,93756,53198],{"class":53863},[82,93758,53870],{"class":92},[3755,93760,93761],{},[29,93762,93763],{},"手写一个节流函数来处理",[19,93765,73508],{},[19,93767,92817],{},[19,93769,93770],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93772,93773],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[73,93775,93777],{"className":53196,"code":93776,"language":53198,"meta":78,"style":78},"\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",[32,93778,93779,93789,93803,93807,93815,93829,93849,93861,93869,93875,93885,93897,93909,93919,93931,93941,93951,93963,93967,93975,93983,93987,93995,94013,94031,94039,94057,94067,94075,94085,94089,94093,94097,94102,94107,94112,94117,94122,94127,94144,94150,94158,94169,94184,94191,94196,94201,94211,94216,94221,94226,94230,94234,94238,94258,94266,94274,94278],{"__ignoreMap":78},[82,93780,93781,93783,93785,93787],{"class":84,"line":85},[82,93782,53860],{"class":92},[82,93784,53864],{"class":53863},[82,93786,53867],{"class":2384},[82,93788,53870],{"class":92},[82,93790,93791,93793,93795,93797,93799,93801],{"class":84,"line":157},[82,93792,3659],{"class":92},[82,93794,53198],{"class":53863},[82,93796,53879],{"class":2384},[82,93798,113],{"class":92},[82,93800,53884],{"class":96},[82,93802,53870],{"class":92},[82,93804,93805],{"class":84,"line":404},[82,93806,486],{"emptyLinePlaceholder":485},[82,93808,93809,93811,93813],{"class":84,"line":413},[82,93810,3659],{"class":92},[82,93812,53897],{"class":53863},[82,93814,53870],{"class":92},[82,93816,93817,93819,93821,93823,93825,93827],{"class":84,"line":508},[82,93818,54705],{"class":92},[82,93820,53907],{"class":53863},[82,93822,53910],{"class":2384},[82,93824,113],{"class":92},[82,93826,53915],{"class":96},[82,93828,53870],{"class":92},[82,93830,93831,93833,93835,93837,93839,93841,93843,93845,93847],{"class":84,"line":513},[82,93832,54705],{"class":92},[82,93834,53907],{"class":53863},[82,93836,17506],{"class":2384},[82,93838,113],{"class":92},[82,93840,53954],{"class":96},[82,93842,53934],{"class":2384},[82,93844,113],{"class":92},[82,93846,53961],{"class":96},[82,93848,53870],{"class":92},[82,93850,93851,93853,93855,93857,93859],{"class":84,"line":1388},[82,93852,54705],{"class":92},[82,93854,53970],{"class":53863},[82,93856,53973],{"class":92},[82,93858,53970],{"class":53863},[82,93860,53870],{"class":92},[82,93862,93863,93865,93867],{"class":84,"line":1394},[82,93864,54705],{"class":92},[82,93866,2671],{"class":53863},[82,93868,53870],{"class":92},[82,93870,93871,93873],{"class":84,"line":1399},[82,93872,57312],{"class":2384},[82,93874,1349],{"class":92},[82,93876,93877,93879,93881,93883],{"class":84,"line":1430},[82,93878,75152],{"class":88},[82,93880,1357],{"class":92},[82,93882,63063],{"class":88},[82,93884,3909],{"class":92},[82,93886,93887,93889,93891,93893,93895],{"class":84,"line":1818},[82,93888,57331],{"class":88},[82,93890,1357],{"class":92},[82,93892,4325],{"class":88},[82,93894,54054],{"class":112},[82,93896,3909],{"class":92},[82,93898,93899,93901,93903,93905,93907],{"class":84,"line":2082},[82,93900,57345],{"class":88},[82,93902,1357],{"class":92},[82,93904,4325],{"class":88},[82,93906,54054],{"class":112},[82,93908,3909],{"class":92},[82,93910,93911,93913,93915,93917],{"class":84,"line":2233},[82,93912,57444],{"class":88},[82,93914,1357],{"class":92},[82,93916,92557],{"class":88},[82,93918,3909],{"class":92},[82,93920,93921,93923,93925,93927,93929],{"class":84,"line":2255},[82,93922,57482],{"class":88},[82,93924,1357],{"class":92},[82,93926,3574],{"class":88},[82,93928,54054],{"class":112},[82,93930,3909],{"class":92},[82,93932,93933,93935,93937,93939],{"class":84,"line":2260},[82,93934,59974],{"class":88},[82,93936,1357],{"class":92},[82,93938,63400],{"class":88},[82,93940,3909],{"class":92},[82,93942,93943,93945,93947,93949],{"class":84,"line":2298},[82,93944,59844],{"class":88},[82,93946,1357],{"class":92},[82,93948,54154],{"class":88},[82,93950,3909],{"class":92},[82,93952,93953,93955,93957,93959,93961],{"class":84,"line":2303},[82,93954,92596],{"class":88},[82,93956,1357],{"class":92},[82,93958,3077],{"class":88},[82,93960,54054],{"class":112},[82,93962,3909],{"class":92},[82,93964,93965],{"class":84,"line":2321},[82,93966,4787],{"class":92},[82,93968,93969,93971,93973],{"class":84,"line":2533},[82,93970,54977],{"class":92},[82,93972,2671],{"class":53863},[82,93974,53870],{"class":92},[82,93976,93977,93979,93981],{"class":84,"line":2538},[82,93978,54347],{"class":92},[82,93980,53897],{"class":53863},[82,93982,53870],{"class":92},[82,93984,93985],{"class":84,"line":2548},[82,93986,486],{"emptyLinePlaceholder":485},[82,93988,93989,93991,93993],{"class":84,"line":2579},[82,93990,3659],{"class":92},[82,93992,54362],{"class":53863},[82,93994,53870],{"class":92},[82,93996,93997,93999,94001,94003,94005,94007,94009,94011],{"class":84,"line":2585},[82,93998,54705],{"class":92},[82,94000,54173],{"class":53863},[82,94002,56046],{"class":2384},[82,94004,113],{"class":92},[82,94006,56051],{"class":96},[82,94008,57874],{"class":92},[82,94010,54173],{"class":53863},[82,94012,53870],{"class":92},[82,94014,94015,94017,94019,94021,94023,94025,94027,94029],{"class":84,"line":4350},[82,94016,54705],{"class":92},[82,94018,54375],{"class":53863},[82,94020,57799],{"class":2384},[82,94022,113],{"class":92},[82,94024,90825],{"class":96},[82,94026,57874],{"class":92},[82,94028,54375],{"class":53863},[82,94030,53870],{"class":92},[82,94032,94033,94035,94037],{"class":84,"line":4355},[82,94034,54705],{"class":92},[82,94036,54375],{"class":53863},[82,94038,53870],{"class":92},[82,94040,94041,94043,94045,94047,94049,94051,94053,94055],{"class":84,"line":4360},[82,94042,13811],{"class":112},[82,94044,89486],{"class":88},[82,94046,259],{"class":112},[82,94048,56956],{"class":92},[82,94050,56959],{"class":2384},[82,94052,93],{"class":92},[82,94054,92697],{"class":96},[82,94056,119],{"class":92},[82,94058,94059,94061,94063,94065],{"class":84,"line":4365},[82,94060,54780],{"class":112},[82,94062,12029],{"class":92},[82,94064,113],{"class":112},[82,94066,49897],{"class":88},[82,94068,94069,94071,94073],{"class":84,"line":4379},[82,94070,72640],{"class":112},[82,94072,92716],{"class":2384},[82,94074,13443],{"class":92},[82,94076,94077,94079,94081,94083],{"class":84,"line":4384},[82,94078,92723],{"class":92},[82,94080,113],{"class":112},[82,94082,5630],{"class":92},[82,94084,5301],{"class":112},[82,94086,94087],{"class":84,"line":5176},[82,94088,92734],{"class":2828},[82,94090,94091],{"class":84,"line":5190},[82,94092,4787],{"class":92},[82,94094,94095],{"class":84,"line":5198},[82,94096,92743],{"class":2828},[82,94098,94099],{"class":84,"line":5203},[82,94100,94101],{"class":2828},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[82,94103,94104],{"class":84,"line":5209},[82,94105,94106],{"class":2828},"    \u002F\u002F 1.声明一个定时器变量\n",[82,94108,94109],{"class":84,"line":5215},[82,94110,94111],{"class":2828},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[82,94113,94114],{"class":84,"line":5220},[82,94115,94116],{"class":2828},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[82,94118,94119],{"class":84,"line":10539},[82,94120,94121],{"class":2828},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[82,94123,94124],{"class":84,"line":10563},[82,94125,94126],{"class":2828},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[82,94128,94129,94131,94134,94136,94138,94140,94142],{"class":84,"line":10568},[82,94130,72640],{"class":112},[82,94132,94133],{"class":2384}," throttle",[82,94135,93],{"class":92},[82,94137,93188],{"class":108},[82,94139,100],{"class":92},[82,94141,3471],{"class":108},[82,94143,15031],{"class":92},[82,94145,94146,94148],{"class":84,"line":10574},[82,94147,82326],{"class":112},[82,94149,93201],{"class":92},[82,94151,94152,94154,94156],{"class":84,"line":10601},[82,94153,76536],{"class":112},[82,94155,61476],{"class":112},[82,94157,57012],{"class":92},[82,94159,94160,94162,94164,94166],{"class":84,"line":10606},[82,94161,5096],{"class":112},[82,94163,4265],{"class":92},[82,94165,2986],{"class":112},[82,94167,94168],{"class":92},"timer) {\n",[82,94170,94171,94174,94176,94178,94180,94182],{"class":84,"line":10612},[82,94172,94173],{"class":92},"          timer ",[82,94175,113],{"class":112},[82,94177,93242],{"class":2384},[82,94179,93],{"class":92},[82,94181,57009],{"class":112},[82,94183,57012],{"class":92},[82,94185,94186,94189],{"class":84,"line":10624},[82,94187,94188],{"class":2384},"            fn",[82,94190,4576],{"class":92},[82,94192,94193],{"class":84,"line":10636},[82,94194,94195],{"class":2828},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[82,94197,94198],{"class":84,"line":10648},[82,94199,94200],{"class":2828},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[82,94202,94203,94206,94208],{"class":84,"line":12307},[82,94204,94205],{"class":92},"            timer ",[82,94207,113],{"class":112},[82,94209,94210],{"class":88}," null\n",[82,94212,94213],{"class":84,"line":12332},[82,94214,94215],{"class":2828},"            \u002F\u002F 不能用clearTimeout(timer)\n",[82,94217,94218],{"class":84,"line":12355},[82,94219,94220],{"class":2828},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[82,94222,94223],{"class":84,"line":12379},[82,94224,94225],{"class":92},"          }, t)\n",[82,94227,94228],{"class":84,"line":12384},[82,94229,5128],{"class":92},[82,94231,94232],{"class":84,"line":12389},[82,94233,54958],{"class":92},[82,94235,94236],{"class":84,"line":12394},[82,94237,4787],{"class":92},[82,94239,94240,94242,94244,94246,94248,94250,94252,94254,94256],{"class":84,"line":12403},[82,94241,92758],{"class":92},[82,94243,60371],{"class":2384},[82,94245,93],{"class":92},[82,94247,92765],{"class":96},[82,94249,100],{"class":92},[82,94251,93724],{"class":2384},[82,94253,92774],{"class":92},[82,94255,67631],{"class":88},[82,94257,33074],{"class":92},[82,94259,94260,94262,94264],{"class":84,"line":12408},[82,94261,54977],{"class":92},[82,94263,54375],{"class":53863},[82,94265,53870],{"class":92},[82,94267,94268,94270,94272],{"class":84,"line":12414},[82,94269,54347],{"class":92},[82,94271,54362],{"class":53863},[82,94273,53870],{"class":92},[82,94275,94276],{"class":84,"line":12435},[82,94277,486],{"emptyLinePlaceholder":485},[82,94279,94280,94282,94284],{"class":84,"line":12441},[82,94281,54347],{"class":92},[82,94283,53198],{"class":53863},[82,94285,53870],{"class":92},[65,94287,94289],{"id":94288},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[73,94291,94293],{"className":55627,"code":94292,"language":55629,"meta":78,"style":78},"\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",[32,94294,94295,94303,94311,94316,94321,94326,94331,94335,94343],{"__ignoreMap":78},[82,94296,94297,94299,94301],{"class":84,"line":85},[82,94298,3659],{"class":92},[82,94300,54362],{"class":53863},[82,94302,53870],{"class":92},[82,94304,94305,94307,94309],{"class":84,"line":157},[82,94306,54705],{"class":92},[82,94308,54375],{"class":53863},[82,94310,53870],{"class":92},[82,94312,94313],{"class":84,"line":404},[82,94314,94315],{"class":92},"    let timer = null\n",[82,94317,94318],{"class":84,"line":413},[82,94319,94320],{"class":92},"    timer = setTimeout(() => {\n",[82,94322,94323],{"class":84,"line":508},[82,94324,94325],{"class":92},"      clearTimeout(timer)\n",[82,94327,94328],{"class":84,"line":513},[82,94329,94330],{"class":92},"      console.log(timer)\n",[82,94332,94333],{"class":84,"line":1388},[82,94334,62783],{"class":92},[82,94336,94337,94339,94341],{"class":84,"line":1394},[82,94338,54977],{"class":92},[82,94340,54375],{"class":53863},[82,94342,53870],{"class":92},[82,94344,94345,94347,94349],{"class":84,"line":1399},[82,94346,54347],{"class":92},[82,94348,54362],{"class":53863},[82,94350,53870],{"class":92},[19,94352,94353],{},"输出为1",[19,94355,94356],{},"在开启的定时器里边写清除定时器",[19,94358,94359],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[65,94361,94363],{"id":94362},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94365,94366],{},"页面打开，可以记录上一次的视频播放位置",[19,94368,94369],{},[4078,94370],{"alt":78,"src":94371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94373,94374],{},[4078,94375],{"alt":78,"src":94376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[73,94378,94380],{"className":53196,"code":94379,"language":53198,"meta":78,"style":78},"\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",[32,94381,94382,94392,94406,94410,94418,94432,94452,94472,94494,94507,94515,94521,94531,94541,94551,94555,94559,94566,94579,94591,94595,94599,94609,94621,94635,94639,94643,94650,94660,94673,94685,94695,94705,94721,94733,94737,94741,94749,94759,94771,94781,94791,94801,94805,94809,94819,94830,94834,94842,94850,94854,94862,94877,94892,94907,94928,94936,94944,94959,94981,94989,95004,95030,95056,95082,95090,95098,95117,95125,95130,95149,95154,95172,95177,95182,95190,95195,95209,95217,95222,95239,95243,95248,95270,95274,95282,95290,95294],{"__ignoreMap":78},[82,94383,94384,94386,94388,94390],{"class":84,"line":85},[82,94385,53860],{"class":92},[82,94387,53864],{"class":53863},[82,94389,53867],{"class":2384},[82,94391,53870],{"class":92},[82,94393,94394,94396,94398,94400,94402,94404],{"class":84,"line":157},[82,94395,3659],{"class":92},[82,94397,53198],{"class":53863},[82,94399,53879],{"class":2384},[82,94401,113],{"class":92},[82,94403,53884],{"class":96},[82,94405,53870],{"class":92},[82,94407,94408],{"class":84,"line":404},[82,94409,486],{"emptyLinePlaceholder":485},[82,94411,94412,94414,94416],{"class":84,"line":413},[82,94413,3659],{"class":92},[82,94415,53897],{"class":53863},[82,94417,53870],{"class":92},[82,94419,94420,94422,94424,94426,94428,94430],{"class":84,"line":508},[82,94421,54705],{"class":92},[82,94423,53907],{"class":53863},[82,94425,53910],{"class":2384},[82,94427,113],{"class":92},[82,94429,53915],{"class":96},[82,94431,61685],{"class":92},[82,94433,94434,94436,94438,94440,94442,94444,94446,94448,94450],{"class":84,"line":513},[82,94435,54705],{"class":92},[82,94437,53907],{"class":53863},[82,94439,53926],{"class":2384},[82,94441,113],{"class":92},[82,94443,53931],{"class":96},[82,94445,53934],{"class":2384},[82,94447,113],{"class":92},[82,94449,53939],{"class":96},[82,94451,61685],{"class":92},[82,94453,94454,94456,94458,94460,94462,94464,94466,94468,94470],{"class":84,"line":1388},[82,94455,54705],{"class":92},[82,94457,53907],{"class":53863},[82,94459,17506],{"class":2384},[82,94461,113],{"class":92},[82,94463,53954],{"class":96},[82,94465,53934],{"class":2384},[82,94467,113],{"class":92},[82,94469,53961],{"class":96},[82,94471,61685],{"class":92},[82,94473,94474,94476,94478,94480,94482,94485,94487,94489,94492],{"class":84,"line":1394},[82,94475,54705],{"class":92},[82,94477,53907],{"class":53863},[82,94479,17506],{"class":2384},[82,94481,113],{"class":92},[82,94483,94484],{"class":96},"\"referrer\"",[82,94486,53934],{"class":2384},[82,94488,113],{"class":92},[82,94490,94491],{"class":96},"\"never\"",[82,94493,61685],{"class":92},[82,94495,94496,94498,94500,94503,94505],{"class":84,"line":1399},[82,94497,54705],{"class":92},[82,94499,53970],{"class":53863},[82,94501,94502],{"class":92},">综合案例\u003C\u002F",[82,94504,53970],{"class":53863},[82,94506,53870],{"class":92},[82,94508,94509,94511,94513],{"class":84,"line":1430},[82,94510,54705],{"class":92},[82,94512,2671],{"class":53863},[82,94514,53870],{"class":92},[82,94516,94517,94519],{"class":84,"line":1818},[82,94518,8995],{"class":53863},[82,94520,1349],{"class":92},[82,94522,94523,94525,94527,94529],{"class":84,"line":2082},[82,94524,57255],{"class":88},[82,94526,1357],{"class":92},[82,94528,2244],{"class":88},[82,94530,3909],{"class":92},[82,94532,94533,94535,94537,94539],{"class":84,"line":2233},[82,94534,57266],{"class":88},[82,94536,1357],{"class":92},[82,94538,2244],{"class":88},[82,94540,3909],{"class":92},[82,94542,94543,94545,94547,94549],{"class":84,"line":2255},[82,94544,75152],{"class":88},[82,94546,1357],{"class":92},[82,94548,63063],{"class":88},[82,94550,3909],{"class":92},[82,94552,94553],{"class":84,"line":2260},[82,94554,4787],{"class":92},[82,94556,94557],{"class":84,"line":2298},[82,94558,486],{"emptyLinePlaceholder":485},[82,94560,94561,94564],{"class":84,"line":2303},[82,94562,94563],{"class":2384},"    .container",[82,94565,1349],{"class":92},[82,94567,94568,94570,94572,94575,94577],{"class":84,"line":2321},[82,94569,57331],{"class":88},[82,94571,1357],{"class":92},[82,94573,94574],{"class":88},"1200",[82,94576,54054],{"class":112},[82,94578,3909],{"class":92},[82,94580,94581,94583,94585,94587,94589],{"class":84,"line":2533},[82,94582,57266],{"class":88},[82,94584,1357],{"class":92},[82,94586,2244],{"class":88},[82,94588,54118],{"class":88},[82,94590,3909],{"class":92},[82,94592,94593],{"class":84,"line":2538},[82,94594,4787],{"class":92},[82,94596,94597],{"class":84,"line":2548},[82,94598,486],{"emptyLinePlaceholder":485},[82,94600,94601,94604,94607],{"class":84,"line":2579},[82,94602,94603],{"class":2384},"    .video",[82,94605,94606],{"class":53863}," video",[82,94608,1349],{"class":92},[82,94610,94611,94613,94615,94617,94619],{"class":84,"line":2585},[82,94612,57331],{"class":88},[82,94614,1357],{"class":92},[82,94616,3069],{"class":88},[82,94618,3086],{"class":112},[82,94620,3909],{"class":92},[82,94622,94623,94625,94627,94629,94631,94633],{"class":84,"line":4350},[82,94624,57255],{"class":88},[82,94626,1357],{"class":92},[82,94628,3451],{"class":88},[82,94630,54054],{"class":112},[82,94632,6688],{"class":88},[82,94634,3909],{"class":92},[82,94636,94637],{"class":84,"line":4355},[82,94638,4787],{"class":92},[82,94640,94641],{"class":84,"line":4360},[82,94642,486],{"emptyLinePlaceholder":485},[82,94644,94645,94648],{"class":84,"line":4365},[82,94646,94647],{"class":2384},"    .elevator",[82,94649,1349],{"class":92},[82,94651,94652,94654,94656,94658],{"class":84,"line":4379},[82,94653,57319],{"class":88},[82,94655,1357],{"class":92},[82,94657,88787],{"class":88},[82,94659,3909],{"class":92},[82,94661,94662,94664,94666,94669,94671],{"class":84,"line":4384},[82,94663,57507],{"class":88},[82,94665,1357],{"class":92},[82,94667,94668],{"class":88},"280",[82,94670,54054],{"class":112},[82,94672,3909],{"class":92},[82,94674,94675,94677,94679,94681,94683],{"class":84,"line":5176},[82,94676,88981],{"class":88},[82,94678,1357],{"class":92},[82,94680,3451],{"class":88},[82,94682,54054],{"class":112},[82,94684,3909],{"class":92},[82,94686,94687,94689,94691,94693],{"class":84,"line":5190},[82,94688,88794],{"class":88},[82,94690,1357],{"class":92},[82,94692,88799],{"class":88},[82,94694,3909],{"class":92},[82,94696,94697,94699,94701,94703],{"class":84,"line":5198},[82,94698,64279],{"class":88},[82,94700,1357],{"class":92},[82,94702,63400],{"class":88},[82,94704,3909],{"class":92},[82,94706,94707,94709,94711,94713,94715,94717,94719],{"class":84,"line":5203},[82,94708,64535],{"class":88},[82,94710,1357],{"class":92},[82,94712,2283],{"class":88},[82,94714,54054],{"class":112},[82,94716,54083],{"class":88},[82,94718,64802],{"class":88},[82,94720,3909],{"class":92},[82,94722,94723,94725,94727,94729,94731],{"class":84,"line":5209},[82,94724,57331],{"class":88},[82,94726,1357],{"class":92},[82,94728,3656],{"class":88},[82,94730,54054],{"class":112},[82,94732,3909],{"class":92},[82,94734,94735],{"class":84,"line":5215},[82,94736,4787],{"class":92},[82,94738,94739],{"class":84,"line":5220},[82,94740,486],{"emptyLinePlaceholder":485},[82,94742,94743,94745,94747],{"class":84,"line":10539},[82,94744,94647],{"class":2384},[82,94746,4014],{"class":53863},[82,94748,1349],{"class":92},[82,94750,94751,94753,94755,94757],{"class":84,"line":10563},[82,94752,57569],{"class":88},[82,94754,1357],{"class":92},[82,94756,63427],{"class":88},[82,94758,3909],{"class":92},[82,94760,94761,94763,94765,94767,94769],{"class":84,"line":10568},[82,94762,57255],{"class":88},[82,94764,1357],{"class":92},[82,94766,440],{"class":88},[82,94768,54054],{"class":112},[82,94770,3909],{"class":92},[82,94772,94773,94775,94777,94779],{"class":84,"line":10574},[82,94774,66527],{"class":88},[82,94776,1357],{"class":92},[82,94778,57297],{"class":88},[82,94780,3909],{"class":92},[82,94782,94783,94785,94787,94789],{"class":84,"line":10601},[82,94784,59844],{"class":88},[82,94786,1357],{"class":92},[82,94788,54154],{"class":88},[82,94790,3909],{"class":92},[82,94792,94793,94795,94797,94799],{"class":84,"line":10606},[82,94794,59974],{"class":88},[82,94796,1357],{"class":92},[82,94798,64628],{"class":88},[82,94800,3909],{"class":92},[82,94802,94803],{"class":84,"line":10612},[82,94804,4787],{"class":92},[82,94806,94807],{"class":84,"line":10624},[82,94808,486],{"emptyLinePlaceholder":485},[82,94810,94811,94813,94815,94817],{"class":84,"line":10636},[82,94812,94647],{"class":2384},[82,94814,4014],{"class":53863},[82,94816,66581],{"class":2384},[82,94818,1349],{"class":92},[82,94820,94821,94823,94825,94828],{"class":84,"line":10648},[82,94822,59974],{"class":88},[82,94824,1357],{"class":92},[82,94826,94827],{"class":88},"#1286ff",[82,94829,3909],{"class":92},[82,94831,94832],{"class":84,"line":12307},[82,94833,4787],{"class":92},[82,94835,94836,94838,94840],{"class":84,"line":12332},[82,94837,54977],{"class":92},[82,94839,2671],{"class":53863},[82,94841,53870],{"class":92},[82,94843,94844,94846,94848],{"class":84,"line":12355},[82,94845,54347],{"class":92},[82,94847,53897],{"class":53863},[82,94849,53870],{"class":92},[82,94851,94852],{"class":84,"line":12379},[82,94853,486],{"emptyLinePlaceholder":485},[82,94855,94856,94858,94860],{"class":84,"line":12384},[82,94857,3659],{"class":92},[82,94859,54362],{"class":53863},[82,94861,53870],{"class":92},[82,94863,94864,94866,94868,94870,94872,94875],{"class":84,"line":12389},[82,94865,54705],{"class":92},[82,94867,54173],{"class":53863},[82,94869,56046],{"class":2384},[82,94871,113],{"class":92},[82,94873,94874],{"class":96},"\"container\"",[82,94876,53870],{"class":92},[82,94878,94879,94881,94883,94885,94887,94890],{"class":84,"line":12394},[82,94880,53904],{"class":92},[82,94882,54173],{"class":53863},[82,94884,56046],{"class":2384},[82,94886,113],{"class":92},[82,94888,94889],{"class":96},"\"header\"",[82,94891,53870],{"class":92},[82,94893,94894,94896,94898,94900,94902,94905],{"class":84,"line":12403},[82,94895,57794],{"class":92},[82,94897,323],{"class":53863},[82,94899,63615],{"class":2384},[82,94901,113],{"class":92},[82,94903,94904],{"class":96},"\"http:\u002F\u002Fpip.itcast.cn\"",[82,94906,53870],{"class":92},[82,94908,94909,94911,94913,94915,94917,94920,94922,94924,94926],{"class":84,"line":12408},[82,94910,57862],{"class":92},[82,94912,4078],{"class":53863},[82,94914,57799],{"class":2384},[82,94916,113],{"class":92},[82,94918,94919],{"class":96},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[82,94921,57807],{"class":2384},[82,94923,113],{"class":92},[82,94925,1793],{"class":96},[82,94927,61685],{"class":92},[82,94929,94930,94932,94934],{"class":84,"line":12414},[82,94931,57967],{"class":92},[82,94933,323],{"class":53863},[82,94935,53870],{"class":92},[82,94937,94938,94940,94942],{"class":84,"line":12435},[82,94939,54338],{"class":92},[82,94941,54173],{"class":53863},[82,94943,53870],{"class":92},[82,94945,94946,94948,94950,94952,94954,94957],{"class":84,"line":12441},[82,94947,53904],{"class":92},[82,94949,54173],{"class":53863},[82,94951,56046],{"class":2384},[82,94953,113],{"class":92},[82,94955,94956],{"class":96},"\"video\"",[82,94958,53870],{"class":92},[82,94960,94961,94963,94965,94967,94969,94972,94975,94977,94979],{"class":84,"line":12455},[82,94962,57794],{"class":92},[82,94964,30765],{"class":53863},[82,94966,57799],{"class":2384},[82,94968,113],{"class":92},[82,94970,94971],{"class":96},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[82,94973,94974],{"class":2384}," controls",[82,94976,57874],{"class":92},[82,94978,30765],{"class":53863},[82,94980,53870],{"class":92},[82,94982,94983,94985,94987],{"class":84,"line":12461},[82,94984,54338],{"class":92},[82,94986,54173],{"class":53863},[82,94988,53870],{"class":92},[82,94990,94991,94993,94995,94997,94999,95002],{"class":84,"line":12488},[82,94992,53904],{"class":92},[82,94994,54173],{"class":53863},[82,94996,56046],{"class":2384},[82,94998,113],{"class":92},[82,95000,95001],{"class":96},"\"elevator\"",[82,95003,53870],{"class":92},[82,95005,95006,95008,95010,95012,95014,95016,95019,95021,95023,95026,95028],{"class":84,"line":12497},[82,95007,57794],{"class":92},[82,95009,323],{"class":53863},[82,95011,63615],{"class":2384},[82,95013,113],{"class":92},[82,95015,66793],{"class":96},[82,95017,95018],{"class":2384}," data-ref",[82,95020,113],{"class":92},[82,95022,94956],{"class":96},[82,95024,95025],{"class":92},">视频介绍\u003C\u002F",[82,95027,323],{"class":53863},[82,95029,53870],{"class":92},[82,95031,95032,95034,95036,95038,95040,95042,95044,95046,95049,95052,95054],{"class":84,"line":12503},[82,95033,57794],{"class":92},[82,95035,323],{"class":53863},[82,95037,63615],{"class":2384},[82,95039,113],{"class":92},[82,95041,66793],{"class":96},[82,95043,95018],{"class":2384},[82,95045,113],{"class":92},[82,95047,95048],{"class":96},"\"intro\"",[82,95050,95051],{"class":92},">课程简介\u003C\u002F",[82,95053,323],{"class":53863},[82,95055,53870],{"class":92},[82,95057,95058,95060,95062,95064,95066,95068,95070,95072,95075,95078,95080],{"class":84,"line":12511},[82,95059,57794],{"class":92},[82,95061,323],{"class":53863},[82,95063,63615],{"class":2384},[82,95065,113],{"class":92},[82,95067,66793],{"class":96},[82,95069,95018],{"class":2384},[82,95071,113],{"class":92},[82,95073,95074],{"class":96},"\"outline\"",[82,95076,95077],{"class":92},">评论列表\u003C\u002F",[82,95079,323],{"class":53863},[82,95081,53870],{"class":92},[82,95083,95084,95086,95088],{"class":84,"line":12516},[82,95085,54338],{"class":92},[82,95087,54173],{"class":53863},[82,95089,53870],{"class":92},[82,95091,95092,95094,95096],{"class":84,"line":19189},[82,95093,54977],{"class":92},[82,95095,54173],{"class":53863},[82,95097,53870],{"class":92},[82,95099,95100,95102,95104,95106,95108,95111,95113,95115],{"class":84,"line":19195},[82,95101,54705],{"class":92},[82,95103,54375],{"class":53863},[82,95105,57799],{"class":2384},[82,95107,113],{"class":92},[82,95109,95110],{"class":96},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[82,95112,57874],{"class":92},[82,95114,54375],{"class":53863},[82,95116,53870],{"class":92},[82,95118,95119,95121,95123],{"class":84,"line":19218},[82,95120,54705],{"class":92},[82,95122,54375],{"class":53863},[82,95124,53870],{"class":92},[82,95126,95127],{"class":84,"line":19224},[82,95128,95129],{"class":2828},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[82,95131,95132,95134,95136,95138,95140,95142,95144,95147],{"class":84,"line":19247},[82,95133,13811],{"class":112},[82,95135,94606],{"class":88},[82,95137,259],{"class":112},[82,95139,56956],{"class":92},[82,95141,56959],{"class":2384},[82,95143,93],{"class":92},[82,95145,95146],{"class":96},"'video'",[82,95148,119],{"class":92},[82,95150,95151],{"class":84,"line":19261},[82,95152,95153],{"class":2828},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[82,95155,95156,95159,95161,95163,95165,95168,95170],{"class":84,"line":19281},[82,95157,95158],{"class":92},"    video.ontimeupdate ",[82,95160,113],{"class":112},[82,95162,90906],{"class":92},[82,95164,93724],{"class":2384},[82,95166,95167],{"class":92},"(() ",[82,95169,87276],{"class":112},[82,95171,1349],{"class":92},[82,95173,95174],{"class":84,"line":19287},[82,95175,95176],{"class":2828},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[82,95178,95179],{"class":84,"line":19298},[82,95180,95181],{"class":2828},"      \u002F\u002F 控制台输出当前的时间\n",[82,95183,95184,95187],{"class":84,"line":19321},[82,95185,95186],{"class":2828},"      \u002F\u002F console.log(video.currentTime)",[82,95188,95189],{"class":2828},"  \u002F\u002F获得当前的视频时间\n",[82,95191,95192],{"class":84,"line":19343},[82,95193,95194],{"class":2828},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[82,95196,95197,95199,95201,95203,95206],{"class":84,"line":19348},[82,95198,77237],{"class":92},[82,95200,74210],{"class":2384},[82,95202,93],{"class":92},[82,95204,95205],{"class":96},"'currentTime'",[82,95207,95208],{"class":92},", video.currentTime)\n",[82,95210,95211,95213,95215],{"class":84,"line":19354},[82,95212,57095],{"class":92},[82,95214,9002],{"class":88},[82,95216,119],{"class":92},[82,95218,95219],{"class":84,"line":19368},[82,95220,95221],{"class":2828},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[82,95223,95224,95227,95230,95232,95235,95237],{"class":84,"line":19381},[82,95225,95226],{"class":92},"    video.",[82,95228,95229],{"class":2384},"onloadeddata",[82,95231,259],{"class":112},[82,95233,95234],{"class":92}," () ",[82,95236,87276],{"class":112},[82,95238,1349],{"class":92},[82,95240,95241],{"class":84,"line":19386},[82,95242,62570],{"class":2828},[82,95244,95245],{"class":84,"line":19400},[82,95246,95247],{"class":2828},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[82,95249,95250,95253,95255,95258,95260,95262,95264,95266,95268],{"class":84,"line":19405},[82,95251,95252],{"class":92},"      video.currentTime ",[82,95254,113],{"class":112},[82,95256,95257],{"class":92}," localStorage.",[82,95259,74241],{"class":2384},[82,95261,93],{"class":92},[82,95263,95205],{"class":96},[82,95265,725],{"class":92},[82,95267,73913],{"class":112},[82,95269,49897],{"class":88},[82,95271,95272],{"class":84,"line":19411},[82,95273,4787],{"class":92},[82,95275,95276,95278,95280],{"class":84,"line":19416},[82,95277,54977],{"class":92},[82,95279,54375],{"class":53863},[82,95281,53870],{"class":92},[82,95283,95284,95286,95288],{"class":84,"line":19430},[82,95285,54347],{"class":92},[82,95287,54362],{"class":53863},[82,95289,53870],{"class":92},[82,95291,95292],{"class":84,"line":19435},[82,95293,486],{"emptyLinePlaceholder":485},[82,95295,95296,95298,95300],{"class":84,"line":19440},[82,95297,54347],{"class":92},[82,95299,53198],{"class":53863},[82,95301,53870],{"class":92},[2671,95303,95304],{},"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":78,"searchDepth":157,"depth":157,"links":95306},[95307,95312,95316,95317,95318,95323,95328,95329,95330,95331,95338,95343,95344,95354,95358,95359,95363],{"id":79245,"depth":157,"text":79246,"children":95308},[95309,95310,95311],{"id":79249,"depth":404,"text":79250},{"id":79274,"depth":404,"text":79275},{"id":79286,"depth":404,"text":79287},{"id":79298,"depth":157,"text":79299,"children":95313},[95314,95315],{"id":79302,"depth":404,"text":79303},{"id":79317,"depth":404,"text":79318},{"id":79369,"depth":157,"text":79370},{"id":79413,"depth":157,"text":79414},{"id":79430,"depth":157,"text":79431,"children":95319},[95320,95321,95322],{"id":79434,"depth":404,"text":79435},{"id":79447,"depth":404,"text":79448},{"id":79552,"depth":404,"text":79553},{"id":79841,"depth":157,"text":79842,"children":95324},[95325,95326,95327],{"id":79845,"depth":404,"text":79846},{"id":80288,"depth":404,"text":80289},{"id":80699,"depth":404,"text":80700},{"id":80762,"depth":157,"text":80763},{"id":80841,"depth":157,"text":80842},{"id":80934,"depth":157,"text":80935},{"id":82779,"depth":157,"text":82780,"children":95332},[95333,95334,95335,95336,95337],{"id":82783,"depth":404,"text":82784},{"id":82795,"depth":404,"text":82796},{"id":83014,"depth":404,"text":83015},{"id":83032,"depth":404,"text":83033},{"id":83092,"depth":404,"text":83093},{"id":87360,"depth":157,"text":87361,"children":95339},[95340,95341,95342],{"id":87364,"depth":404,"text":87365},{"id":87382,"depth":404,"text":87383},{"id":87408,"depth":404,"text":87409},{"id":87417,"depth":157,"text":87418},{"id":87439,"depth":157,"text":87440,"children":95345},[95346,95347,95348,95349,95350,95351,95352,95353],{"id":87443,"depth":404,"text":87444},{"id":87704,"depth":404,"text":87705},{"id":87890,"depth":404,"text":87891},{"id":88257,"depth":404,"text":88258},{"id":88373,"depth":404,"text":88374},{"id":88409,"depth":404,"text":88410},{"id":88456,"depth":404,"text":88457},{"id":88490,"depth":404,"text":88491},{"id":89852,"depth":157,"text":89853,"children":95355},[95356,95357],{"id":89856,"depth":404,"text":89857},{"id":89893,"depth":404,"text":89894},{"id":91246,"depth":157,"text":91247},{"id":91617,"depth":157,"text":91618,"children":95360},[95361,95362],{"id":91621,"depth":404,"text":91622},{"id":91655,"depth":404,"text":91656},{"id":92384,"depth":157,"text":92385,"children":95364},[95365,95366,95367,95368],{"id":92388,"depth":404,"text":92389},{"id":93346,"depth":404,"text":93347},{"id":94288,"depth":404,"text":94289},{"id":94362,"depth":404,"text":94363},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79234,"description":2699},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95375,"title":95376,"body":95377,"description":95388,"extension":2700,"meta":95389,"navigation":485,"path":95391,"seo":95392,"stem":95393,"__hash__":95394},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95378,"toc":95386},[95379],[19,95380,95381,95382],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[323,95383,95384],{"href":95384,"rel":95385},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26449],{"title":78,"searchDepth":157,"depth":157,"links":95387},[],"三件套第三套学习",{"category":95390},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95376,"description":95388},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95396,"title":95397,"body":95398,"description":2699,"extension":2700,"meta":95503,"navigation":485,"path":95504,"seo":95505,"stem":95506,"__hash__":95507},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95399,"toc":95498},[95400,95407,95410,95413,95416,95420,95429,95432,95435,95439,95448,95451,95455,95458,95478,95481,95495],[19,95401,95402],{},[323,95403,95406],{"href":95404,"rel":95405},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26449],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95408,95397],{"id":95409},"_1安装",[19,95411,95412],{},"numpy是科学计算基础库,底层是C语言",[19,95414,95415],{},"三种方式：",[14,95417,95419],{"id":95418},"_11-通过pip安装","1.1 通过pip安装",[73,95421,95423],{"className":75,"code":95422,"language":77,"meta":78,"style":78},"pip install numpy\n",[32,95424,95425],{"__ignoreMap":78},[82,95426,95427],{"class":84,"line":85},[82,95428,95422],{"class":92},[19,95430,95431],{},"首选方式，自动处理依赖项",[19,95433,95434],{},"在提示系统命令符中使用cmd",[14,95436,95438],{"id":95437},"_12-通过anaconda安装","1.2 通过Anaconda安装",[73,95440,95442],{"className":75,"code":95441,"language":77,"meta":78,"style":78},"conda install numpy\n",[32,95443,95444],{"__ignoreMap":78},[82,95445,95446],{"class":84,"line":85},[82,95447,95441],{"class":92},[19,95449,95450],{},"自动解决环境依赖",[14,95452,95454],{"id":95453},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95456,95457],{},"对于Debian\u002FUbuntu",[73,95459,95461],{"className":75,"code":95460,"language":77,"meta":78,"style":78},"sudo apt-get install python3-numpy\n",[32,95462,95463],{"__ignoreMap":78},[82,95464,95465,95468,95470,95473,95475],{"class":84,"line":85},[82,95466,95467],{"class":92},"sudo apt",[82,95469,3288],{"class":112},[82,95471,95472],{"class":92},"get install python3",[82,95474,3288],{"class":112},[82,95476,95477],{"class":92},"numpy\n",[19,95479,95480],{},"对于Fedora:",[73,95482,95484],{"className":75,"code":95483,"language":77,"meta":78,"style":78},"sudo dnf install python3-numpy\n",[32,95485,95486],{"__ignoreMap":78},[82,95487,95488,95491,95493],{"class":84,"line":85},[82,95489,95490],{"class":92},"sudo dnf install python3",[82,95492,3288],{"class":112},[82,95494,95477],{"class":92},[2671,95496,95497],{},"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":78,"searchDepth":157,"depth":157,"links":95499},[95500,95501,95502],{"id":95418,"depth":157,"text":95419},{"id":95437,"depth":157,"text":95438},{"id":95453,"depth":157,"text":95454},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95397,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95509,"title":95510,"body":95511,"description":2699,"extension":2700,"meta":95624,"navigation":485,"path":95625,"seo":95626,"stem":95627,"__hash__":95628},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95512,"toc":95622},[95513,95516,95519,95522,95525,95528,95531,95534,95537,95540,95616,95619],[10,95514,95510],{"id":95515},"_10算数函数",[19,95517,95518],{},"加减乘除运算跟python基础语法没区别",[19,95520,95521],{},"除了python那种方法外还可以使用函数",[19,95523,95524],{},"加：np.add(a,b)",[19,95526,95527],{},"减：np.subtract(a,b)",[19,95529,95530],{},"乘：np.multiply(a,b)",[19,95532,95533],{},"除：np.divide(a,b) == a\u002Fb",[19,95535,95536],{},"取余：np.mod(a,b) == a%b",[19,95538,95539],{},"必须会的用法：",[73,95541,95543],{"className":75,"code":95542,"language":77,"meta":78,"style":78},"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",[32,95544,95545,95567,95588,95598,95611],{"__ignoreMap":78},[82,95546,95547,95549,95551,95554,95556,95559,95561,95563,95565],{"class":84,"line":85},[82,95548,323],{"class":92},[82,95550,113],{"class":112},[82,95552,95553],{"class":92},"np.arange(",[82,95555,3178],{"class":88},[82,95557,95558],{"class":92},").reshape(",[82,95560,2841],{"class":88},[82,95562,3136],{"class":92},[82,95564,2841],{"class":88},[82,95566,119],{"class":92},[82,95568,95569,95571,95573,95576,95578,95580,95582,95584,95586],{"class":84,"line":157},[82,95570,3021],{"class":92},[82,95572,113],{"class":112},[82,95574,95575],{"class":92},"np.array([",[82,95577,440],{"class":88},[82,95579,3136],{"class":92},[82,95581,440],{"class":88},[82,95583,3136],{"class":92},[82,95585,440],{"class":88},[82,95587,7252],{"class":92},[82,95589,95590,95593,95595],{"class":84,"line":404},[82,95591,95592],{"class":92},"result",[82,95594,113],{"class":112},[82,95596,95597],{"class":92},"np.empty_like(a)\n",[82,95599,95600,95603,95606,95608],{"class":84,"line":413},[82,95601,95602],{"class":92},"np.add(a,b,",[82,95604,95605],{"class":108},"out",[82,95607,113],{"class":112},[82,95609,95610],{"class":92},"result)\n",[82,95612,95613],{"class":84,"line":508},[82,95614,95615],{"class":92},"result\n",[19,95617,95618],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2671,95620,95621],{},"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":78,"searchDepth":157,"depth":157,"links":95623},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95510,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95630,"title":95631,"body":95632,"description":2699,"extension":2700,"meta":96394,"navigation":485,"path":96395,"seo":96396,"stem":96397,"__hash__":96398},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95633,"toc":96381},[95634,95637,95640,95643,95647,95686,95690,95734,95794,95798,95801,95840,95843,95888,95892,95928,95932,96001,96005,96069,96073,96076,96079,96082,96085,96121,96125,96165,96169,96241,96244,96248,96311,96315,96378],[10,95635,95631],{"id":95636},"_11统计函数",[19,95638,95639],{},"sum max min mean",[19,95641,95642],{},"这些有axis参数，可以指定方向",[14,95644,95646],{"id":95645},"_111-sum求和函数","11.1 sum()求和函数",[73,95648,95650],{"className":75,"code":95649,"language":77,"meta":78,"style":78},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[32,95651,95652,95657,95678],{"__ignoreMap":78},[82,95653,95654],{"class":84,"line":85},[82,95655,95656],{"class":2828},"#创建一维数组\n",[82,95658,95659,95661,95663,95666,95668,95670,95672,95674,95676],{"class":84,"line":157},[82,95660,323],{"class":92},[82,95662,113],{"class":112},[82,95664,95665],{"class":92},"np.random.randint(",[82,95667,2283],{"class":88},[82,95669,3136],{"class":92},[82,95671,3069],{"class":88},[82,95673,3136],{"class":92},[82,95675,3451],{"class":88},[82,95677,119],{"class":92},[82,95679,95680,95683],{"class":84,"line":404},[82,95681,95682],{"class":92},"np.sum(a)",[82,95684,95685],{"class":2828},"#求和\n",[14,95687,95689],{"id":95688},"_112-max求最大值函数","11.2 max()求最大值函数",[73,95691,95693],{"className":75,"code":95692,"language":77,"meta":78,"style":78},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[32,95694,95695,95699,95719,95724,95729],{"__ignoreMap":78},[82,95696,95697],{"class":84,"line":85},[82,95698,95656],{"class":2828},[82,95700,95701,95703,95705,95707,95709,95711,95713,95715,95717],{"class":84,"line":157},[82,95702,323],{"class":92},[82,95704,113],{"class":112},[82,95706,95665],{"class":92},[82,95708,2283],{"class":88},[82,95710,3136],{"class":92},[82,95712,3069],{"class":88},[82,95714,3136],{"class":92},[82,95716,3451],{"class":88},[82,95718,119],{"class":92},[82,95720,95721],{"class":84,"line":404},[82,95722,95723],{"class":92},"np.max(a)\n",[82,95725,95726],{"class":84,"line":413},[82,95727,95728],{"class":2828},"#最大索引(求最大元素的索引)arg\n",[82,95730,95731],{"class":84,"line":508},[82,95732,95733],{"class":92},"np.argmax(a)\n",[73,95735,95737],{"className":75,"code":95736,"language":77,"meta":78,"style":78},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[32,95738,95739,95760,95780,95784],{"__ignoreMap":78},[82,95740,95741,95743,95745,95748,95750,95752,95754,95756,95758],{"class":84,"line":85},[82,95742,13509],{"class":92},[82,95744,113],{"class":112},[82,95746,95747],{"class":92}," np.array([",[82,95749,2283],{"class":88},[82,95751,100],{"class":92},[82,95753,3077],{"class":88},[82,95755,100],{"class":92},[82,95757,2841],{"class":88},[82,95759,7252],{"class":92},[82,95761,95762,95764,95766,95768,95770,95772,95774,95776,95778],{"class":84,"line":157},[82,95763,13535],{"class":92},[82,95765,113],{"class":112},[82,95767,95747],{"class":92},[82,95769,2841],{"class":88},[82,95771,100],{"class":92},[82,95773,1425],{"class":88},[82,95775,100],{"class":92},[82,95777,3051],{"class":88},[82,95779,7252],{"class":92},[82,95781,95782],{"class":84,"line":404},[82,95783,486],{"emptyLinePlaceholder":485},[82,95785,95786,95788,95791],{"class":84,"line":413},[82,95787,407],{"class":88},[82,95789,95790],{"class":92},"(np.maximum(a, b))   ",[82,95792,95793],{"class":2828},"# [3 5 4]，每个位置上取较大值\n",[14,95795,95797],{"id":95796},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95799,95800],{},"①一维数组：",[73,95802,95804],{"className":75,"code":95803,"language":77,"meta":78,"style":78},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[32,95805,95806,95810,95830,95835],{"__ignoreMap":78},[82,95807,95808],{"class":84,"line":85},[82,95809,95656],{"class":2828},[82,95811,95812,95814,95816,95818,95820,95822,95824,95826,95828],{"class":84,"line":157},[82,95813,323],{"class":92},[82,95815,113],{"class":112},[82,95817,95665],{"class":92},[82,95819,2283],{"class":88},[82,95821,3136],{"class":92},[82,95823,3069],{"class":88},[82,95825,3136],{"class":92},[82,95827,3451],{"class":88},[82,95829,119],{"class":92},[82,95831,95832],{"class":84,"line":404},[82,95833,95834],{"class":2828},"#求平均值\n",[82,95836,95837],{"class":84,"line":413},[82,95838,95839],{"class":92},"np.mean(a)\n",[19,95841,95842],{},"②二维数组",[73,95844,95846],{"className":75,"code":95845,"language":77,"meta":78,"style":78},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[32,95847,95848,95853,95878,95883],{"__ignoreMap":78},[82,95849,95850],{"class":84,"line":85},[82,95851,95852],{"class":2828},"#二维数组\n",[82,95854,95855,95858,95860,95862,95864,95866,95868,95870,95872,95874,95876],{"class":84,"line":157},[82,95856,95857],{"class":92},"aa",[82,95859,113],{"class":112},[82,95861,95553],{"class":92},[82,95863,2283],{"class":88},[82,95865,3136],{"class":92},[82,95867,3279],{"class":88},[82,95869,95558],{"class":92},[82,95871,2841],{"class":88},[82,95873,3136],{"class":92},[82,95875,3051],{"class":88},[82,95877,119],{"class":92},[82,95879,95880],{"class":84,"line":404},[82,95881,95882],{"class":2828},"#对数组中的所有数求平均\n",[82,95884,95885],{"class":84,"line":413},[82,95886,95887],{"class":92},"np.mean(aa)\n",[14,95889,95891],{"id":95890},"_114-median求中位数函数","11.4 median()求中位数函数",[73,95893,95895],{"className":75,"code":95894,"language":77,"meta":78,"style":78},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[32,95896,95897,95902,95918,95923],{"__ignoreMap":78},[82,95898,95899],{"class":84,"line":85},[82,95900,95901],{"class":2828},"#求中位数\n",[82,95903,95904,95906,95908,95910,95912,95914,95916],{"class":84,"line":157},[82,95905,3021],{"class":92},[82,95907,113],{"class":112},[82,95909,95553],{"class":92},[82,95911,2283],{"class":88},[82,95913,3136],{"class":92},[82,95915,440],{"class":88},[82,95917,119],{"class":92},[82,95919,95920],{"class":84,"line":404},[82,95921,95922],{"class":92},"np.median(b)\n",[82,95924,95925],{"class":84,"line":413},[82,95926,95927],{"class":2828},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95929,95931],{"id":95930},"_115-power求幂运算函数","11.5 power()求幂运算函数",[73,95933,95935],{"className":75,"code":95934,"language":77,"meta":78,"style":78},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[32,95936,95937,95953,95958,95963,95972,95977,95986],{"__ignoreMap":78},[82,95938,95939,95941,95943,95945,95947,95949,95951],{"class":84,"line":85},[82,95940,3021],{"class":92},[82,95942,113],{"class":112},[82,95944,95553],{"class":92},[82,95946,2283],{"class":88},[82,95948,3136],{"class":92},[82,95950,440],{"class":88},[82,95952,119],{"class":92},[82,95954,95955],{"class":84,"line":157},[82,95956,95957],{"class":2828},"#幂运算\n",[82,95959,95960],{"class":84,"line":404},[82,95961,95962],{"class":2828},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[82,95964,95965,95968,95970],{"class":84,"line":413},[82,95966,95967],{"class":92},"np.power(b,",[82,95969,1425],{"class":88},[82,95971,119],{"class":92},[82,95973,95974],{"class":84,"line":508},[82,95975,95976],{"class":2828},"#或者以下代码，将数据存储起来\n",[82,95978,95979,95981,95983],{"class":84,"line":513},[82,95980,3594],{"class":92},[82,95982,113],{"class":112},[82,95984,95985],{"class":92},"np.empty_like(b)\n",[82,95987,95988,95990,95992,95994,95996,95998],{"class":84,"line":1388},[82,95989,95967],{"class":92},[82,95991,1425],{"class":88},[82,95993,3136],{"class":92},[82,95995,95605],{"class":108},[82,95997,113],{"class":112},[82,95999,96000],{"class":92},"y)\n",[14,96002,96004],{"id":96003},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[73,96006,96008],{"className":75,"code":96007,"language":77,"meta":78,"style":78},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[32,96009,96010,96026,96031,96036,96040,96058],{"__ignoreMap":78},[82,96011,96012,96014,96016,96018,96020,96022,96024],{"class":84,"line":85},[82,96013,3021],{"class":92},[82,96015,113],{"class":112},[82,96017,95553],{"class":92},[82,96019,2283],{"class":88},[82,96021,3136],{"class":92},[82,96023,440],{"class":88},[82,96025,119],{"class":92},[82,96027,96028],{"class":84,"line":157},[82,96029,96030],{"class":2828},"#开方\n",[82,96032,96033],{"class":84,"line":404},[82,96034,96035],{"class":92},"np.sqrt(b)\n",[82,96037,96038],{"class":84,"line":413},[82,96039,95976],{"class":2828},[82,96041,96042,96044,96046,96049,96052,96054,96056],{"class":84,"line":508},[82,96043,3594],{"class":92},[82,96045,113],{"class":112},[82,96047,96048],{"class":92},"np.empty_like(b,",[82,96050,96051],{"class":108},"dtype",[82,96053,113],{"class":112},[82,96055,2811],{"class":88},[82,96057,119],{"class":92},[82,96059,96060,96063,96065,96067],{"class":84,"line":513},[82,96061,96062],{"class":92},"np.sqrt(b,",[82,96064,95605],{"class":108},[82,96066,113],{"class":112},[82,96068,96000],{"class":92},[14,96070,96072],{"id":96071},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,96074,96075],{},"对数组中的元素累计求和，可指定轴",[19,96077,96078],{},"#累计求和的意思是：",[19,96080,96081],{},"a = np.array([1, 2, 3, 4])",[19,96083,96084],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[73,96086,96088],{"className":75,"code":96087,"language":77,"meta":78,"style":78},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[32,96089,96090,96106,96111,96116],{"__ignoreMap":78},[82,96091,96092,96094,96096,96098,96100,96102,96104],{"class":84,"line":85},[82,96093,3021],{"class":92},[82,96095,113],{"class":112},[82,96097,95553],{"class":92},[82,96099,2283],{"class":88},[82,96101,3136],{"class":92},[82,96103,440],{"class":88},[82,96105,119],{"class":92},[82,96107,96108],{"class":84,"line":157},[82,96109,96110],{"class":92},"np.cumsum(b)\n",[82,96112,96113],{"class":84,"line":404},[82,96114,96115],{"class":2828},"#结果：\n",[82,96117,96118],{"class":84,"line":413},[82,96119,96120],{"class":2828},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96122,96124],{"id":96123},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[73,96126,96128],{"className":75,"code":96127,"language":77,"meta":78,"style":78},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[32,96129,96130,96146,96151,96156,96160],{"__ignoreMap":78},[82,96131,96132,96134,96136,96138,96140,96142,96144],{"class":84,"line":85},[82,96133,3021],{"class":92},[82,96135,113],{"class":112},[82,96137,95553],{"class":92},[82,96139,2283],{"class":88},[82,96141,3136],{"class":92},[82,96143,440],{"class":88},[82,96145,119],{"class":92},[82,96147,96148],{"class":84,"line":157},[82,96149,96150],{"class":2828},"#对数组中的元素累计求积，可指定轴\n",[82,96152,96153],{"class":84,"line":404},[82,96154,96155],{"class":92},"np.cumprod(b)\n",[82,96157,96158],{"class":84,"line":413},[82,96159,96115],{"class":2828},[82,96161,96162],{"class":84,"line":508},[82,96163,96164],{"class":2828},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96166,96168],{"id":96167},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[73,96170,96172],{"className":75,"code":96171,"language":77,"meta":78,"style":78},"#删除数组中的重复数据，并对数据进行排序\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",[32,96173,96174,96179,96227,96232,96236],{"__ignoreMap":78},[82,96175,96176],{"class":84,"line":85},[82,96177,96178],{"class":2828},"#删除数组中的重复数据，并对数据进行排序\n",[82,96180,96181,96183,96185,96187,96189,96191,96193,96195,96197,96199,96201,96203,96205,96207,96209,96211,96213,96215,96217,96219,96221,96223,96225],{"class":84,"line":157},[82,96182,323],{"class":92},[82,96184,113],{"class":112},[82,96186,95575],{"class":92},[82,96188,2283],{"class":88},[82,96190,3136],{"class":92},[82,96192,1425],{"class":88},[82,96194,3136],{"class":92},[82,96196,2841],{"class":88},[82,96198,3136],{"class":92},[82,96200,3254],{"class":88},[82,96202,3136],{"class":92},[82,96204,2841],{"class":88},[82,96206,3136],{"class":92},[82,96208,440],{"class":88},[82,96210,3136],{"class":92},[82,96212,2958],{"class":88},[82,96214,3136],{"class":92},[82,96216,2244],{"class":88},[82,96218,3136],{"class":92},[82,96220,3526],{"class":88},[82,96222,3136],{"class":92},[82,96224,3051],{"class":88},[82,96226,7252],{"class":92},[82,96228,96229],{"class":84,"line":404},[82,96230,96231],{"class":92},"np.unique(a)\n",[82,96233,96234],{"class":84,"line":413},[82,96235,96115],{"class":2828},[82,96237,96238],{"class":84,"line":508},[82,96239,96240],{"class":2828},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96242,96243],{},"升序形式排序",[14,96245,96247],{"id":96246},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[73,96249,96251],{"className":75,"code":96250,"language":77,"meta":78,"style":78},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[32,96252,96253,96301,96306],{"__ignoreMap":78},[82,96254,96255,96257,96259,96261,96263,96265,96267,96269,96271,96273,96275,96277,96279,96281,96283,96285,96287,96289,96291,96293,96295,96297,96299],{"class":84,"line":85},[82,96256,323],{"class":92},[82,96258,113],{"class":112},[82,96260,95575],{"class":92},[82,96262,2283],{"class":88},[82,96264,3136],{"class":92},[82,96266,1425],{"class":88},[82,96268,3136],{"class":92},[82,96270,2841],{"class":88},[82,96272,3136],{"class":92},[82,96274,3254],{"class":88},[82,96276,3136],{"class":92},[82,96278,2841],{"class":88},[82,96280,3136],{"class":92},[82,96282,440],{"class":88},[82,96284,3136],{"class":92},[82,96286,2958],{"class":88},[82,96288,3136],{"class":92},[82,96290,2244],{"class":88},[82,96292,3136],{"class":92},[82,96294,3526],{"class":88},[82,96296,3136],{"class":92},[82,96298,3051],{"class":88},[82,96300,7252],{"class":92},[82,96302,96303],{"class":84,"line":157},[82,96304,96305],{"class":2828},"#返回数组中非零元素的索引\n",[82,96307,96308],{"class":84,"line":404},[82,96309,96310],{"class":92},"np.nonzero(a)\n",[14,96312,96314],{"id":96313},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[73,96316,96318],{"className":75,"code":96317,"language":77,"meta":78,"style":78},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[32,96319,96320,96368,96373],{"__ignoreMap":78},[82,96321,96322,96324,96326,96328,96330,96332,96334,96336,96338,96340,96342,96344,96346,96348,96350,96352,96354,96356,96358,96360,96362,96364,96366],{"class":84,"line":85},[82,96323,323],{"class":92},[82,96325,113],{"class":112},[82,96327,95575],{"class":92},[82,96329,2283],{"class":88},[82,96331,3136],{"class":92},[82,96333,1425],{"class":88},[82,96335,3136],{"class":92},[82,96337,2841],{"class":88},[82,96339,3136],{"class":92},[82,96341,3254],{"class":88},[82,96343,3136],{"class":92},[82,96345,2841],{"class":88},[82,96347,3136],{"class":92},[82,96349,440],{"class":88},[82,96351,3136],{"class":92},[82,96353,2958],{"class":88},[82,96355,3136],{"class":92},[82,96357,2244],{"class":88},[82,96359,3136],{"class":92},[82,96361,3526],{"class":88},[82,96363,3136],{"class":92},[82,96365,3051],{"class":88},[82,96367,7252],{"class":92},[82,96369,96370],{"class":84,"line":157},[82,96371,96372],{"class":2828},"#计算一组数中最大值与最小值的差，可指定轴\n",[82,96374,96375],{"class":84,"line":404},[82,96376,96377],{"class":92},"np.ptp(a)\n",[2671,96379,96380],{},"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":78,"searchDepth":157,"depth":157,"links":96382},[96383,96384,96385,96386,96387,96388,96389,96390,96391,96392,96393],{"id":95645,"depth":157,"text":95646},{"id":95688,"depth":157,"text":95689},{"id":95796,"depth":157,"text":95797},{"id":95890,"depth":157,"text":95891},{"id":95930,"depth":157,"text":95931},{"id":96003,"depth":157,"text":96004},{"id":96071,"depth":157,"text":96072},{"id":96123,"depth":157,"text":96124},{"id":96167,"depth":157,"text":96168},{"id":96246,"depth":157,"text":96247},{"id":96313,"depth":157,"text":96314},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95631,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96400,"title":96401,"body":96402,"description":2699,"extension":2700,"meta":97057,"navigation":485,"path":97058,"seo":97059,"stem":97060,"__hash__":97061},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96403,"toc":97045},[96404,96407,96411,96414,96630,96634,96637,96846,96850,96916,96921,96925,96928,96931,96969,96973,96976,96981,96985,96988,96991,96996,97000,97003,97007,97010,97013,97018,97022,97025,97028,97033,97037,97042],[10,96405,96401],{"id":96406},"_12其他常用函数",[14,96408,96410],{"id":96409},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96412,96413],{},"将数组的数据按照行列复制扩展",[73,96415,96417],{"className":75,"code":96416,"language":77,"meta":78,"style":78},"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",[32,96418,96419,96435,96444,96448,96453,96458,96471,96475,96480,96485,96490,96494,96499,96523,96535,96539,96543,96548,96553,96558,96563,96567,96580,96584,96588,96593,96598,96603,96608,96613,96617,96621,96626],{"__ignoreMap":78},[82,96420,96421,96423,96425,96427,96429,96431,96433],{"class":84,"line":85},[82,96422,323],{"class":92},[82,96424,113],{"class":112},[82,96426,95553],{"class":92},[82,96428,2283],{"class":88},[82,96430,3136],{"class":92},[82,96432,3077],{"class":88},[82,96434,119],{"class":92},[82,96436,96437,96440,96442],{"class":84,"line":157},[82,96438,96439],{"class":92},"np.tile(a,",[82,96441,1425],{"class":88},[82,96443,119],{"class":92},[82,96445,96446],{"class":84,"line":404},[82,96447,96115],{"class":2828},[82,96449,96450],{"class":84,"line":413},[82,96451,96452],{"class":2828},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[82,96454,96455],{"class":84,"line":508},[82,96456,96457],{"class":2828},"#行复制两次，列复制三次\n",[82,96459,96460,96463,96465,96467,96469],{"class":84,"line":513},[82,96461,96462],{"class":92},"np.tile(a,(",[82,96464,1425],{"class":88},[82,96466,3136],{"class":92},[82,96468,2841],{"class":88},[82,96470,33074],{"class":92},[82,96472,96473],{"class":84,"line":1388},[82,96474,96115],{"class":2828},[82,96476,96477],{"class":84,"line":1394},[82,96478,96479],{"class":96},"'''\n",[82,96481,96482],{"class":84,"line":1399},[82,96483,96484],{"class":96},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[82,96486,96487],{"class":84,"line":1430},[82,96488,96489],{"class":96},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[82,96491,96492],{"class":84,"line":1818},[82,96493,96479],{"class":96},[82,96495,96496],{"class":84,"line":2082},[82,96497,96498],{"class":2828},"#创建二维数组\n",[82,96500,96501,96503,96505,96507,96509,96511,96513,96515,96517,96519,96521],{"class":84,"line":2233},[82,96502,95857],{"class":92},[82,96504,113],{"class":112},[82,96506,95553],{"class":92},[82,96508,2283],{"class":88},[82,96510,3136],{"class":92},[82,96512,3279],{"class":88},[82,96514,95558],{"class":92},[82,96516,3051],{"class":88},[82,96518,3136],{"class":92},[82,96520,2841],{"class":88},[82,96522,119],{"class":92},[82,96524,96525,96528,96530,96532],{"class":84,"line":2255},[82,96526,96527],{"class":92},"np.tile(aa,",[82,96529,1425],{"class":88},[82,96531,3187],{"class":92},[82,96533,96534],{"class":2828},"#一个数的时候就是行\n",[82,96536,96537],{"class":84,"line":2260},[82,96538,96115],{"class":2828},[82,96540,96541],{"class":84,"line":2298},[82,96542,96479],{"class":96},[82,96544,96545],{"class":84,"line":2303},[82,96546,96547],{"class":96},"array([[ 1,  2,  3,  1,  2,  3],\n",[82,96549,96550],{"class":84,"line":2321},[82,96551,96552],{"class":96},"       [ 4,  5,  6,  4,  5,  6],\n",[82,96554,96555],{"class":84,"line":2533},[82,96556,96557],{"class":96},"       [ 7,  8,  9,  7,  8,  9],\n",[82,96559,96560],{"class":84,"line":2538},[82,96561,96562],{"class":96},"       [10, 11, 12, 10, 11, 12]])\n",[82,96564,96565],{"class":84,"line":2548},[82,96566,96479],{"class":96},[82,96568,96569,96572,96574,96576,96578],{"class":84,"line":2579},[82,96570,96571],{"class":92},"np.tile(aa,(",[82,96573,1425],{"class":88},[82,96575,3136],{"class":92},[82,96577,2841],{"class":88},[82,96579,33074],{"class":92},[82,96581,96582],{"class":84,"line":2585},[82,96583,96115],{"class":2828},[82,96585,96586],{"class":84,"line":4350},[82,96587,96479],{"class":96},[82,96589,96590],{"class":84,"line":4355},[82,96591,96592],{"class":96},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[82,96594,96595],{"class":84,"line":4360},[82,96596,96597],{"class":96},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[82,96599,96600],{"class":84,"line":4365},[82,96601,96602],{"class":96},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[82,96604,96605],{"class":84,"line":4379},[82,96606,96607],{"class":96},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[82,96609,96610],{"class":84,"line":4384},[82,96611,96612],{"class":96},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[82,96614,96615],{"class":84,"line":5176},[82,96616,96597],{"class":96},[82,96618,96619],{"class":84,"line":5190},[82,96620,96602],{"class":96},[82,96622,96623],{"class":84,"line":5198},[82,96624,96625],{"class":96},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[82,96627,96628],{"class":84,"line":5203},[82,96629,96479],{"class":96},[14,96631,96633],{"id":96632},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96635,96636],{},"repeat()将数组中的每个元素重复若干次",[73,96638,96640],{"className":75,"code":96639,"language":77,"meta":78,"style":78},"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",[32,96641,96642,96658,96667,96671,96676,96700,96705,96714,96718,96723,96727,96732,96748,96752,96756,96761,96766,96771,96775,96780,96784,96789,96794,96798,96814,96818,96822,96827,96832,96837,96842],{"__ignoreMap":78},[82,96643,96644,96646,96648,96650,96652,96654,96656],{"class":84,"line":85},[82,96645,323],{"class":92},[82,96647,113],{"class":112},[82,96649,95553],{"class":92},[82,96651,2283],{"class":88},[82,96653,3136],{"class":92},[82,96655,3077],{"class":88},[82,96657,119],{"class":92},[82,96659,96660,96663,96665],{"class":84,"line":157},[82,96661,96662],{"class":92},"np.repeat(a,",[82,96664,2841],{"class":88},[82,96666,119],{"class":92},[82,96668,96669],{"class":84,"line":404},[82,96670,96115],{"class":2828},[82,96672,96673],{"class":84,"line":413},[82,96674,96675],{"class":2828},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[82,96677,96678,96680,96682,96684,96686,96688,96690,96692,96694,96696,96698],{"class":84,"line":508},[82,96679,95857],{"class":92},[82,96681,113],{"class":112},[82,96683,95553],{"class":92},[82,96685,2283],{"class":88},[82,96687,3136],{"class":92},[82,96689,3279],{"class":88},[82,96691,95558],{"class":92},[82,96693,3051],{"class":88},[82,96695,3136],{"class":92},[82,96697,2841],{"class":88},[82,96699,119],{"class":92},[82,96701,96702],{"class":84,"line":513},[82,96703,96704],{"class":2828},"#这个重复之后二维变成一维\n",[82,96706,96707,96710,96712],{"class":84,"line":1388},[82,96708,96709],{"class":92},"np.repeat(aa,",[82,96711,1425],{"class":88},[82,96713,119],{"class":92},[82,96715,96716],{"class":84,"line":1394},[82,96717,96479],{"class":96},[82,96719,96720],{"class":84,"line":1399},[82,96721,96722],{"class":96},"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",[82,96724,96725],{"class":84,"line":1430},[82,96726,96479],{"class":96},[82,96728,96729],{"class":84,"line":1818},[82,96730,96731],{"class":2828},"#指定axis\n",[82,96733,96734,96736,96738,96740,96742,96744,96746],{"class":84,"line":2082},[82,96735,96709],{"class":92},[82,96737,1425],{"class":88},[82,96739,3136],{"class":92},[82,96741,50078],{"class":108},[82,96743,113],{"class":112},[82,96745,2244],{"class":88},[82,96747,119],{"class":92},[82,96749,96750],{"class":84,"line":2233},[82,96751,96115],{"class":2828},[82,96753,96754],{"class":84,"line":2255},[82,96755,96479],{"class":96},[82,96757,96758],{"class":84,"line":2260},[82,96759,96760],{"class":96},"array([[ 1,  2,  3],\n",[82,96762,96763],{"class":84,"line":2298},[82,96764,96765],{"class":96},"       [ 1,  2,  3],\n",[82,96767,96768],{"class":84,"line":2303},[82,96769,96770],{"class":96},"       [ 4,  5,  6],\n",[82,96772,96773],{"class":84,"line":2321},[82,96774,96770],{"class":96},[82,96776,96777],{"class":84,"line":2533},[82,96778,96779],{"class":96},"       [ 7,  8,  9],\n",[82,96781,96782],{"class":84,"line":2538},[82,96783,96779],{"class":96},[82,96785,96786],{"class":84,"line":2548},[82,96787,96788],{"class":96},"       [10, 11, 12],\n",[82,96790,96791],{"class":84,"line":2579},[82,96792,96793],{"class":96},"       [10, 11, 12]])\n",[82,96795,96796],{"class":84,"line":2585},[82,96797,96479],{"class":96},[82,96799,96800,96802,96804,96806,96808,96810,96812],{"class":84,"line":4350},[82,96801,96709],{"class":92},[82,96803,1425],{"class":88},[82,96805,3136],{"class":92},[82,96807,50078],{"class":108},[82,96809,113],{"class":112},[82,96811,2283],{"class":88},[82,96813,119],{"class":92},[82,96815,96816],{"class":84,"line":4355},[82,96817,96115],{"class":2828},[82,96819,96820],{"class":84,"line":4360},[82,96821,96479],{"class":96},[82,96823,96824],{"class":84,"line":4365},[82,96825,96826],{"class":96},"array([[ 1,  1,  2,  2,  3,  3],\n",[82,96828,96829],{"class":84,"line":4379},[82,96830,96831],{"class":96},"       [ 4,  4,  5,  5,  6,  6],\n",[82,96833,96834],{"class":84,"line":4384},[82,96835,96836],{"class":96},"       [ 7,  7,  8,  8,  9,  9],\n",[82,96838,96839],{"class":84,"line":5176},[82,96840,96841],{"class":96},"       [10, 10, 11, 11, 12, 12]])\n",[82,96843,96844],{"class":84,"line":5190},[82,96845,96479],{"class":96},[14,96847,96849],{"id":96848},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[73,96851,96853],{"className":75,"code":96852,"language":77,"meta":78,"style":78},"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",[32,96854,96855,96871,96876,96888,96892,96897,96907,96911],{"__ignoreMap":78},[82,96856,96857,96859,96861,96863,96865,96867,96869],{"class":84,"line":85},[82,96858,323],{"class":92},[82,96860,113],{"class":112},[82,96862,95553],{"class":92},[82,96864,2283],{"class":88},[82,96866,3136],{"class":92},[82,96868,3077],{"class":88},[82,96870,119],{"class":92},[82,96872,96873],{"class":84,"line":157},[82,96874,96875],{"class":2828},"#array([，2，3，4])\n",[82,96877,96878,96881,96883,96885],{"class":84,"line":404},[82,96879,96880],{"class":92},"np.roll(a,",[82,96882,1425],{"class":88},[82,96884,3187],{"class":92},[82,96886,96887],{"class":2828},"#传正数向后调多少位，传负数向前调多少位\n",[82,96889,96890],{"class":84,"line":413},[82,96891,96115],{"class":2828},[82,96893,96894],{"class":84,"line":508},[82,96895,96896],{"class":2828},"#array([3, 4, 1, 2])\n",[82,96898,96899,96901,96903,96905],{"class":84,"line":513},[82,96900,96880],{"class":92},[82,96902,3288],{"class":112},[82,96904,2283],{"class":88},[82,96906,119],{"class":92},[82,96908,96909],{"class":84,"line":1388},[82,96910,96115],{"class":2828},[82,96912,96913],{"class":84,"line":1394},[82,96914,96915],{"class":2828},"#array([2, 3, 4, 1])\n",[19,96917,96918],{},[4078,96919],{"alt":78,"src":96920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96922,96924],{"id":96923},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96926,96927],{},"resize()重新调整数组的大小",[19,96929,96930],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[73,96932,96934],{"className":75,"code":96933,"language":77,"meta":78,"style":78},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[32,96935,96936,96941,96954],{"__ignoreMap":78},[82,96937,96938],{"class":84,"line":85},[82,96939,96940],{"class":2828},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[82,96942,96943,96946,96948,96950,96952],{"class":84,"line":157},[82,96944,96945],{"class":92},"np.resize(aa,(",[82,96947,1425],{"class":88},[82,96949,3136],{"class":92},[82,96951,3102],{"class":88},[82,96953,33074],{"class":92},[82,96955,96956,96958,96960,96962,96964,96966],{"class":84,"line":404},[82,96957,96945],{"class":92},[82,96959,1425],{"class":88},[82,96961,3136],{"class":92},[82,96963,3178],{"class":88},[82,96965,85325],{"class":92},[82,96967,96968],{"class":2828},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96970,96972],{"id":96971},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96974,96975],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96977,96978],{},[4078,96979],{"alt":78,"src":96980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96982,96984],{"id":96983},"_126-保存加载文件","12.6 保存加载文件",[19,96986,96987],{},"savetxt():将数据保存到txt文件中",[19,96989,96990],{},"loadtxt():从文件加载数据",[19,96992,96993],{},[4078,96994],{"alt":78,"src":96995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96997,96999],{"id":96998},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,97001,97002],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,97004,97006],{"id":97005},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,97008,97009],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,97011,97012],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,97014,97015],{},[4078,97016],{"alt":78,"src":97017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,97019,97021],{"id":97020},"_129-where语句","12.9 where语句",[19,97023,97024],{},"np.where(条件,x,y)",[19,97026,97027],{},"如果条件为True,对应值为x,否则对应值为y",[19,97029,97030],{},[4078,97031],{"alt":78,"src":97032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,97034,97036],{"id":97035},"_1210-dot矩阵","12.10 dot()矩阵",[19,97038,97039],{},[4078,97040],{"alt":78,"src":97041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2671,97043,97044],{},"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":78,"searchDepth":157,"depth":157,"links":97046},[97047,97048,97049,97050,97051,97052,97053,97054,97055,97056],{"id":96409,"depth":157,"text":96410},{"id":96632,"depth":157,"text":96633},{"id":96848,"depth":157,"text":96849},{"id":96923,"depth":157,"text":96924},{"id":96971,"depth":157,"text":96972},{"id":96983,"depth":157,"text":96984},{"id":96998,"depth":157,"text":96999},{"id":97005,"depth":157,"text":97006},{"id":97020,"depth":157,"text":97021},{"id":97035,"depth":157,"text":97036},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96401,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97063,"title":97064,"body":97065,"description":2699,"extension":2700,"meta":97418,"navigation":485,"path":97419,"seo":97420,"stem":97421,"__hash__":97422},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97066,"toc":97416},[97067,97070,97073,97076,97079,97082,97147,97149,97413],[10,97068,97064],{"id":97069},"_13数组排序",[19,97071,97072],{},"排序主要用到的方法是np.sort和np.argsort",[19,97074,97075],{},"其中np.sort()对数组直接排序",[19,97077,97078],{},"而np.argsort()是返回排序后的原始索引",[19,97080,97081],{},"①一维数组",[73,97083,97085],{"className":75,"code":97084,"language":77,"meta":78,"style":78},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[32,97086,97087,97091,97131,97139],{"__ignoreMap":78},[82,97088,97089],{"class":84,"line":85},[82,97090,95656],{"class":2828},[82,97092,97093,97095,97097,97099,97101,97103,97105,97107,97109,97111,97113,97115,97117,97119,97121,97123,97125,97127,97129],{"class":84,"line":157},[82,97094,323],{"class":92},[82,97096,113],{"class":112},[82,97098,95575],{"class":92},[82,97100,2841],{"class":88},[82,97102,3136],{"class":92},[82,97104,3254],{"class":88},[82,97106,3136],{"class":92},[82,97108,3153],{"class":88},[82,97110,3136],{"class":92},[82,97112,3526],{"class":88},[82,97114,3136],{"class":92},[82,97116,3037],{"class":88},[82,97118,3136],{"class":92},[82,97120,3642],{"class":88},[82,97122,3136],{"class":92},[82,97124,3102],{"class":88},[82,97126,3136],{"class":92},[82,97128,440],{"class":88},[82,97130,7252],{"class":92},[82,97132,97133,97136],{"class":84,"line":404},[82,97134,97135],{"class":92},"np.sort(a)",[82,97137,97138],{"class":2828},"#升序排序\n",[82,97140,97141,97144],{"class":84,"line":413},[82,97142,97143],{"class":92},"np.argsort(a)",[82,97145,97146],{"class":2828},"#按照元素大小来索引排序\n",[19,97148,95842],{},[73,97150,97152],{"className":75,"code":97151,"language":77,"meta":78,"style":78},"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",[32,97153,97154,97166,97192,97197,97201,97206,97211,97216,97221,97225,97233,97237,97242,97247,97252,97257,97261,97266,97279,97283,97288,97293,97298,97303,97307,97312,97324,97328,97332,97336,97340,97344,97348,97353,97368,97373,97382,97387,97391,97395,97400,97404,97409],{"__ignoreMap":78},[82,97155,97156,97159,97161,97163],{"class":84,"line":85},[82,97157,97158],{"class":92},"np.random.seed(",[82,97160,2244],{"class":88},[82,97162,3187],{"class":92},[82,97164,97165],{"class":2828},"#保证每次值一样\n",[82,97167,97168,97170,97172,97174,97176,97178,97180,97182,97184,97186,97188,97190],{"class":84,"line":157},[82,97169,95857],{"class":92},[82,97171,113],{"class":112},[82,97173,95665],{"class":92},[82,97175,3069],{"class":88},[82,97177,3136],{"class":92},[82,97179,34068],{"class":108},[82,97181,113],{"class":112},[82,97183,93],{"class":92},[82,97185,3051],{"class":88},[82,97187,3136],{"class":92},[82,97189,3102],{"class":88},[82,97191,33074],{"class":92},[82,97193,97194],{"class":84,"line":404},[82,97195,97196],{"class":2828},"#原数组：\n",[82,97198,97199],{"class":84,"line":413},[82,97200,96479],{"class":96},[82,97202,97203],{"class":84,"line":508},[82,97204,97205],{"class":96},"array([[44, 47, 64, 67, 67,  9],\n",[82,97207,97208],{"class":84,"line":513},[82,97209,97210],{"class":96},"       [83, 21, 36, 87, 70, 88],\n",[82,97212,97213],{"class":84,"line":1388},[82,97214,97215],{"class":96},"       [88, 12, 58, 65, 39, 87],\n",[82,97217,97218],{"class":84,"line":1394},[82,97219,97220],{"class":96},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[82,97222,97223],{"class":84,"line":1399},[82,97224,96479],{"class":96},[82,97226,97227,97230],{"class":84,"line":1430},[82,97228,97229],{"class":92},"np.sort(aa)",[82,97231,97232],{"class":2828},"#每行进行了排序\n",[82,97234,97235],{"class":84,"line":1818},[82,97236,96479],{"class":96},[82,97238,97239],{"class":84,"line":2082},[82,97240,97241],{"class":96},"array([[ 9, 44, 47, 64, 67, 67],\n",[82,97243,97244],{"class":84,"line":2233},[82,97245,97246],{"class":96},"       [21, 36, 70, 83, 87, 88],\n",[82,97248,97249],{"class":84,"line":2255},[82,97250,97251],{"class":96},"       [12, 39, 58, 65, 87, 88],\n",[82,97253,97254],{"class":84,"line":2260},[82,97255,97256],{"class":96},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[82,97258,97259],{"class":84,"line":2298},[82,97260,96479],{"class":96},[82,97262,97263],{"class":84,"line":2303},[82,97264,97265],{"class":2828},"#axis=0时\n",[82,97267,97268,97271,97273,97275,97277],{"class":84,"line":2321},[82,97269,97270],{"class":92},"np.sort(aa,",[82,97272,50078],{"class":108},[82,97274,113],{"class":112},[82,97276,2244],{"class":88},[82,97278,119],{"class":92},[82,97280,97281],{"class":84,"line":2533},[82,97282,96479],{"class":96},[82,97284,97285],{"class":84,"line":2538},[82,97286,97287],{"class":96},"array([[44, 12, 36, 37, 25,  9],\n",[82,97289,97290],{"class":84,"line":2548},[82,97291,97292],{"class":96},"       [46, 21, 58, 65, 39, 77],\n",[82,97294,97295],{"class":84,"line":2579},[82,97296,97297],{"class":96},"       [83, 47, 64, 67, 67, 87],\n",[82,97299,97300],{"class":84,"line":2585},[82,97301,97302],{"class":96},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[82,97304,97305],{"class":84,"line":4350},[82,97306,96479],{"class":96},[82,97308,97309],{"class":84,"line":4355},[82,97310,97311],{"class":2828},"#axis=1时,为默认值\n",[82,97313,97314,97316,97318,97320,97322],{"class":84,"line":4360},[82,97315,97270],{"class":92},[82,97317,50078],{"class":108},[82,97319,113],{"class":112},[82,97321,2283],{"class":88},[82,97323,119],{"class":92},[82,97325,97326],{"class":84,"line":4365},[82,97327,96479],{"class":96},[82,97329,97330],{"class":84,"line":4379},[82,97331,97241],{"class":96},[82,97333,97334],{"class":84,"line":4384},[82,97335,97246],{"class":96},[82,97337,97338],{"class":84,"line":5176},[82,97339,97251],{"class":96},[82,97341,97342],{"class":84,"line":5190},[82,97343,97256],{"class":96},[82,97345,97346],{"class":84,"line":5198},[82,97347,96479],{"class":96},[82,97349,97350],{"class":84,"line":5203},[82,97351,97352],{"class":2828},"#按最后一列排序\n",[82,97354,97355,97357,97359,97362,97364,97366],{"class":84,"line":5209},[82,97356,3021],{"class":92},[82,97358,113],{"class":112},[82,97360,97361],{"class":92},"aa[:,",[82,97363,3288],{"class":112},[82,97365,2283],{"class":88},[82,97367,875],{"class":92},[82,97369,97370],{"class":84,"line":5215},[82,97371,97372],{"class":2828},"#获取最后一列排好序的索引\n",[82,97374,97375,97377,97379],{"class":84,"line":5220},[82,97376,76612],{"class":92},[82,97378,113],{"class":112},[82,97380,97381],{"class":92},"np.argsort(b)\n",[82,97383,97384],{"class":84,"line":10539},[82,97385,97386],{"class":92},"aa[index]\n",[82,97388,97389],{"class":84,"line":10563},[82,97390,96479],{"class":96},[82,97392,97393],{"class":84,"line":10568},[82,97394,97205],{"class":96},[82,97396,97397],{"class":84,"line":10574},[82,97398,97399],{"class":96},"       [46, 88, 81, 37, 25, 77],\n",[82,97401,97402],{"class":84,"line":10601},[82,97403,97215],{"class":96},[82,97405,97406],{"class":84,"line":10606},[82,97407,97408],{"class":96},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[82,97410,97411],{"class":84,"line":10612},[82,97412,96479],{"class":96},[2671,97414,97415],{},"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":78,"searchDepth":157,"depth":157,"links":97417},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97064,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97424,"title":97425,"body":97426,"description":2699,"extension":2700,"meta":97456,"navigation":485,"path":97457,"seo":97458,"stem":97459,"__hash__":97460},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97427,"toc":97454},[97428,97431,97434,97437,97440,97443,97446,97449],[10,97429,97425],{"id":97430},"_14广播机制",[19,97432,97433],{},"广播的规则：",[19,97435,97436],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97438,97439],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97441,97442],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97444,97445],{},"3.如果没有维度形状为1，则会引发异常",[19,97447,97448],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97450,97451],{},[4078,97452],{"alt":78,"src":97453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":78,"searchDepth":157,"depth":157,"links":97455},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97425,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97462,"title":97463,"body":97464,"description":2699,"extension":2700,"meta":97562,"navigation":485,"path":97563,"seo":97564,"stem":97565,"__hash__":97566},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97465,"toc":97560},[97466,97469,97472,97557],[10,97467,97463],{"id":97468},"_15比较掩码",[19,97470,97471],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[73,97473,97475],{"className":75,"code":97474,"language":77,"meta":78,"style":78},"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",[32,97476,97477,97523,97534,97548,97552],{"__ignoreMap":78},[82,97478,97479,97481,97483,97486,97488,97490,97492,97494,97496,97498,97500,97502,97504,97506,97508,97510,97512,97514,97516,97518,97520],{"class":84,"line":85},[82,97480,323],{"class":92},[82,97482,113],{"class":112},[82,97484,97485],{"class":92},"np.array([[",[82,97487,2283],{"class":88},[82,97489,3136],{"class":92},[82,97491,1425],{"class":88},[82,97493,3136],{"class":92},[82,97495,2841],{"class":88},[82,97497,50593],{"class":92},[82,97499,3229],{"class":88},[82,97501,3136],{"class":92},[82,97503,3254],{"class":88},[82,97505,3136],{"class":92},[82,97507,3279],{"class":88},[82,97509,50593],{"class":92},[82,97511,3476],{"class":88},[82,97513,3136],{"class":92},[82,97515,3501],{"class":88},[82,97517,3136],{"class":92},[82,97519,3526],{"class":88},[82,97521,97522],{"class":92},"]])\n",[82,97524,97525,97527,97529,97531],{"class":84,"line":157},[82,97526,323],{"class":92},[82,97528,3659],{"class":112},[82,97530,3451],{"class":88},[82,97532,97533],{"class":2828},"#结果是一个由True,False组成的数组\n",[82,97535,97536,97539,97541,97543,97545],{"class":84,"line":404},[82,97537,97538],{"class":92},"a[a",[82,97540,3659],{"class":112},[82,97542,3451],{"class":88},[82,97544,3689],{"class":92},[82,97546,97547],{"class":2828},"#小于20的元素会存到这个数组中\n",[82,97549,97550],{"class":84,"line":413},[82,97551,96115],{"class":2828},[82,97553,97554],{"class":84,"line":508},[82,97555,97556],{"class":2828},"#array([ 1,  2,  3, 11, 12, 13])\n",[2671,97558,97559],{},"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":78,"searchDepth":157,"depth":157,"links":97561},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97463,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97568,"title":97569,"body":97570,"description":2699,"extension":2700,"meta":97662,"navigation":485,"path":97663,"seo":97664,"stem":97665,"__hash__":97666},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97571,"toc":97660},[97572,97575,97578,97581,97584,97587,97652,97657],[10,97573,97569],{"id":97574},"_16魔法命令time",[19,97576,97577],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97579,97580],{},"%:行模式",[19,97582,97583],{},"%%:单元格模式",[19,97585,97586],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[73,97588,97590],{"className":75,"code":97589,"language":77,"meta":78,"style":78},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[32,97591,97592,97597,97604,97609,97618,97631,97635,97643],{"__ignoreMap":78},[82,97593,97594],{"class":84,"line":85},[82,97595,97596],{"class":2828},"#程序执行时间\n",[82,97598,97599,97601],{"class":84,"line":157},[82,97600,1123],{"class":112},[82,97602,97603],{"class":92}," time \n",[82,97605,97606],{"class":84,"line":404},[82,97607,97608],{"class":2828},"#获取时间\n",[82,97610,97611,97614,97616],{"class":84,"line":413},[82,97612,97613],{"class":92},"start",[82,97615,113],{"class":112},[82,97617,34988],{"class":92},[82,97619,97620,97623,97626,97628],{"class":84,"line":508},[82,97621,97622],{"class":92},"time.sleep(",[82,97624,97625],{"class":88},"0.4",[82,97627,3187],{"class":92},[82,97629,97630],{"class":2828},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[82,97632,97633],{"class":84,"line":513},[82,97634,97608],{"class":2828},[82,97636,97637,97639,97641],{"class":84,"line":1388},[82,97638,48365],{"class":92},[82,97640,113],{"class":112},[82,97642,34988],{"class":92},[82,97644,97645,97647,97649],{"class":84,"line":1394},[82,97646,48365],{"class":92},[82,97648,3288],{"class":112},[82,97650,97651],{"class":92},"start\n",[19,97653,97654],{},[4078,97655],{"alt":78,"src":97656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2671,97658,97659],{},"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":78,"searchDepth":157,"depth":157,"links":97661},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97569,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97668,"title":97669,"body":97670,"description":2699,"extension":2700,"meta":97705,"navigation":485,"path":97706,"seo":97707,"stem":97708,"__hash__":97709},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97671,"toc":97703},[97672,97675,97678,97681,97684,97687,97690,97693,97698],[10,97673,97669],{"id":97674},"_17魔法命令timeit",[19,97676,97677],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97679,97680],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97682,97683],{},"单元格模式：",[19,97685,97686],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97688,97689],{},"初始化语句执行次数由轮数来决定",[19,97691,97692],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97694,97695],{},[4078,97696],{"alt":78,"src":97697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97699,97700],{},[4078,97701],{"alt":78,"src":97702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":78,"searchDepth":157,"depth":157,"links":97704},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97669,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97711,"title":97712,"body":97713,"description":2699,"extension":2700,"meta":97731,"navigation":485,"path":97732,"seo":97733,"stem":97734,"__hash__":97735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97714,"toc":97729},[97715,97718,97721,97724],[10,97716,97712],{"id":97717},"_18魔法命令writefile和run",[19,97719,97720],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97722,97723],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97725,97726],{},[4078,97727],{"alt":78,"src":97728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":78,"searchDepth":157,"depth":157,"links":97730},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97712,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97737,"title":97738,"body":97739,"description":2699,"extension":2700,"meta":97792,"navigation":485,"path":97793,"seo":97794,"stem":97795,"__hash__":97796},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97740,"toc":97790},[97741,97744,97747,97749,97752,97755,97760,97763,97766,97769,97772,97775,97778,97781,97784,97787],[10,97742,97738],{"id":97743},"_19魔法命令memit",[19,97745,97746],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97748,27184],{},[19,97750,97751],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97753,97754],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97756,97757],{},[4078,97758],{"alt":78,"src":97759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97761,97762],{},"补充：",[19,97764,97765],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97767,97768],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97770,97771],{},"解决方法：",[19,97773,97774],{},"1.cmd",[19,97776,97777],{},"2.依次输入以下代码：",[19,97779,97780],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97782,97783],{},"pip install --upgrade ipython",[19,97785,97786],{},"#升级 memory_profiler 和 setuptools",[19,97788,97789],{},"pip install --upgrade memory_profiler setuptools",{"title":78,"searchDepth":157,"depth":157,"links":97791},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97738,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97798,"title":97799,"body":97800,"description":2699,"extension":2700,"meta":99446,"navigation":485,"path":99447,"seo":99448,"stem":99449,"__hash__":99450},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97801,"toc":99416},[97802,97805,97809,97813,97874,97877,97882,97886,97891,97896,97901,97906,97909,97914,97918,97922,97955,97958,97961,97964,98016,98019,98055,98058,98100,98104,98125,98127,98164,98166,98171,98173,98178,98182,98185,98213,98217,98221,98274,98278,98370,98374,98378,98381,98386,98390,98415,98420,98424,98427,98430,98433,98436,98439,98442,98445,98457,98461,98465,98468,98500,98503,98526,98529,98555,98558,98584,98587,98621,98624,98686,98690,98693,98697,98700,98726,98729,98732,98737,98740,98809,98811,98816,98877,98880,98891,98897,98902,98906,98909,98922,98926,98941,98943,98966,98968,98994,98997,99000,99003,99051,99053,99058,99062,99066,99093,99097,99124,99127,99132,99137,99227,99231,99289,99294,99297,99300,99342,99346,99402,99407,99410,99413],[10,97803,97799],{"id":97804},"_2创建数组",[14,97806,97808],{"id":97807},"_21-array函数创建数组","2.1 array()函数创建数组",[65,97810,97812],{"id":97811},"_221-函数语句","2.2.1 函数语句",[73,97814,97816],{"className":75,"code":97815,"language":77,"meta":78,"style":78},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[32,97817,97818],{"__ignoreMap":78},[82,97819,97820,97823,97826,97828,97830,97832,97834,97836,97839,97841,97844,97846,97849,97851,97853,97855,97858,97860,97863,97865,97868,97870,97872],{"class":84,"line":85},[82,97821,97822],{"class":92},"numpy.array(",[82,97824,97825],{"class":88},"object",[82,97827,100],{"class":92},[82,97829,96051],{"class":108},[82,97831,259],{"class":112},[82,97833,41498],{"class":88},[82,97835,100],{"class":92},[82,97837,97838],{"class":108},"copy",[82,97840,259],{"class":112},[82,97842,97843],{"class":88}," True",[82,97845,100],{"class":92},[82,97847,97848],{"class":108},"order",[82,97850,259],{"class":112},[82,97852,41498],{"class":88},[82,97854,100],{"class":92},[82,97856,97857],{"class":108},"subok",[82,97859,259],{"class":112},[82,97861,97862],{"class":88}," False",[82,97864,100],{"class":92},[82,97866,97867],{"class":108},"ndmin",[82,97869,259],{"class":112},[82,97871,6688],{"class":88},[82,97873,119],{"class":92},[19,97875,97876],{},"参数：",[19,97878,97879],{},[4078,97880],{"alt":78,"src":97881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[65,97883,97885],{"id":97884},"_222-实例","2.2.2 实例",[19,97887,97888],{},[4078,97889],{"alt":78,"src":97890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97892,97893],{},[4078,97894],{"alt":78,"src":97895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97897,97898],{},[4078,97899],{"alt":78,"src":97900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97902,97903],{},[4078,97904],{"alt":78,"src":97905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97907,97908],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97910,97911],{},[4078,97912],{"alt":78,"src":97913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97915,97917],{"id":97916},"_22-随机数创建数组","2.2 随机数创建数组",[65,97919,97921],{"id":97920},"_221-random语句","2.2.1 random语句",[73,97923,97925],{"className":75,"code":97924,"language":77,"meta":78,"style":78},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[32,97926,97927,97932,97937,97945,97950],{"__ignoreMap":78},[82,97928,97929],{"class":84,"line":85},[82,97930,97931],{"class":2828},"#random.random()\n",[82,97933,97934],{"class":84,"line":157},[82,97935,97936],{"class":2828},"#确定随机种子,就是每次运行结果是相同的\n",[82,97938,97939,97941,97943],{"class":84,"line":404},[82,97940,97158],{"class":92},[82,97942,2244],{"class":88},[82,97944,119],{"class":92},[82,97946,97947],{"class":84,"line":413},[82,97948,97949],{"class":92},"np.random.random()\n",[82,97951,97952],{"class":84,"line":508},[82,97953,97954],{"class":2828},"#生成一个随机的数目\n",[19,97956,97957],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97959,97960],{},"可以指定数组形状 size",[19,97962,97963],{},"①生成一维数组",[73,97965,97967],{"className":75,"code":97966,"language":77,"meta":78,"style":78},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[32,97968,97969,97974,97987,97992,98008],{"__ignoreMap":78},[82,97970,97971],{"class":84,"line":85},[82,97972,97973],{"class":2828},"#random.random(size())\n",[82,97975,97976,97979,97981,97983,97985],{"class":84,"line":157},[82,97977,97978],{"class":92},"np.random.random(",[82,97980,34068],{"class":108},[82,97982,113],{"class":112},[82,97984,3077],{"class":88},[82,97986,119],{"class":92},[82,97988,97989],{"class":84,"line":404},[82,97990,97991],{"class":2828},"#生成一位的五个元素\n",[82,97993,97994,97996,97998,98000,98002,98004,98006],{"class":84,"line":413},[82,97995,323],{"class":92},[82,97997,113],{"class":112},[82,97999,97978],{"class":92},[82,98001,34068],{"class":108},[82,98003,113],{"class":112},[82,98005,3051],{"class":88},[82,98007,119],{"class":92},[82,98009,98010,98013],{"class":84,"line":508},[82,98011,98012],{"class":92},"a.shape ",[82,98014,98015],{"class":2828},"#输出数组形状\n",[19,98017,98018],{},"②生成二维数组",[73,98020,98022],{"className":75,"code":98021,"language":77,"meta":78,"style":78},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[32,98023,98024,98028,98050],{"__ignoreMap":78},[82,98025,98026],{"class":84,"line":85},[82,98027,95852],{"class":2828},[82,98029,98030,98032,98034,98036,98038,98040,98042,98044,98046,98048],{"class":84,"line":157},[82,98031,95857],{"class":92},[82,98033,113],{"class":112},[82,98035,97978],{"class":92},[82,98037,34068],{"class":108},[82,98039,113],{"class":112},[82,98041,93],{"class":92},[82,98043,3051],{"class":88},[82,98045,3136],{"class":92},[82,98047,3077],{"class":88},[82,98049,33074],{"class":92},[82,98051,98052],{"class":84,"line":404},[82,98053,98054],{"class":2828},"#生成四行五列的数组\n",[19,98056,98057],{},"③生成三维数组",[73,98059,98061],{"className":75,"code":98060,"language":77,"meta":78,"style":78},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[32,98062,98063,98068,98095],{"__ignoreMap":78},[82,98064,98065],{"class":84,"line":85},[82,98066,98067],{"class":2828},"#三维数组\n",[82,98069,98070,98073,98075,98077,98079,98081,98083,98085,98087,98089,98091,98093],{"class":84,"line":157},[82,98071,98072],{"class":92},"aaa",[82,98074,113],{"class":112},[82,98076,97978],{"class":92},[82,98078,34068],{"class":108},[82,98080,113],{"class":112},[82,98082,93],{"class":92},[82,98084,1425],{"class":88},[82,98086,3136],{"class":92},[82,98088,2841],{"class":88},[82,98090,3136],{"class":92},[82,98092,3051],{"class":88},[82,98094,33074],{"class":92},[82,98096,98097],{"class":84,"line":404},[82,98098,98099],{"class":92},"aaa.shape\n",[65,98101,98103],{"id":98102},"_222-randint语句","2.2.2 randint语句",[73,98105,98107],{"className":75,"code":98106,"language":77,"meta":78,"style":78},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[32,98108,98109,98114],{"__ignoreMap":78},[82,98110,98111],{"class":84,"line":85},[82,98112,98113],{"class":2828},"#生成随机的整数 random.randint(low,high,size)\n",[82,98115,98116,98118,98120,98122],{"class":84,"line":157},[82,98117,95665],{"class":92},[82,98119,3077],{"class":88},[82,98121,725],{"class":92},[82,98123,98124],{"class":2828},"#0~5中的随机一个数\n",[19,98126,97963],{},[73,98128,98130],{"className":75,"code":98129,"language":77,"meta":78,"style":78},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[32,98131,98132,98137,98159],{"__ignoreMap":78},[82,98133,98134],{"class":84,"line":85},[82,98135,98136],{"class":2828},"#一维\n",[82,98138,98139,98141,98143,98145,98147,98149,98151,98153,98155,98157],{"class":84,"line":157},[82,98140,95665],{"class":92},[82,98142,2283],{"class":88},[82,98144,3136],{"class":92},[82,98146,3229],{"class":88},[82,98148,3136],{"class":92},[82,98150,34068],{"class":108},[82,98152,113],{"class":112},[82,98154,93],{"class":92},[82,98156,440],{"class":88},[82,98158,33074],{"class":92},[82,98160,98161],{"class":84,"line":404},[82,98162,98163],{"class":2828},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98165,98018],{},[19,98167,98168],{},[4078,98169],{"alt":78,"src":98170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98172,98057],{},[19,98174,98175],{},[4078,98176],{"alt":78,"src":98177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[65,98179,98181],{"id":98180},"_222-rand语句","2.2.2 rand语句",[19,98183,98184],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[73,98186,98188],{"className":75,"code":98187,"language":77,"meta":78,"style":78},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[32,98189,98190,98203,98208],{"__ignoreMap":78},[82,98191,98192,98195,98197,98199,98201],{"class":84,"line":85},[82,98193,98194],{"class":92},"np.random.rand(",[82,98196,3069],{"class":88},[82,98198,3136],{"class":92},[82,98200,440],{"class":88},[82,98202,119],{"class":92},[82,98204,98205],{"class":84,"line":157},[82,98206,98207],{"class":2828},"#第一个参数100：行数，表示有100个样本\n",[82,98209,98210],{"class":84,"line":404},[82,98211,98212],{"class":2828},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98214,98216],{"id":98215},"_23-arange创建数组","2.3 arange()创建数组",[65,98218,98220],{"id":98219},"_231-函数语句","2.3.1 函数语句",[73,98222,98224],{"className":75,"code":98223,"language":77,"meta":78,"style":78},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[32,98225,98226,98240,98245,98250,98255,98260,98265,98270],{"__ignoreMap":78},[82,98227,98228,98231,98233,98235,98238],{"class":84,"line":85},[82,98229,98230],{"class":92},"numpy.arange([start,] stop[, step], ",[82,98232,96051],{"class":108},[82,98234,113],{"class":112},[82,98236,98237],{"class":88},"None",[82,98239,119],{"class":92},[82,98241,98242],{"class":84,"line":157},[82,98243,98244],{"class":2828},"#参数\n",[82,98246,98247],{"class":84,"line":404},[82,98248,98249],{"class":96},"\"\"\"\n",[82,98251,98252],{"class":84,"line":413},[82,98253,98254],{"class":96},"start:起始值，可选，默认从 0 开始。\n",[82,98256,98257],{"class":84,"line":508},[82,98258,98259],{"class":96},"stop:结束值（不包含该值）。\n",[82,98261,98262],{"class":84,"line":513},[82,98263,98264],{"class":96},"step:步长，可选，默认是 1。可以为浮点数。\n",[82,98266,98267],{"class":84,"line":1388},[82,98268,98269],{"class":96},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[82,98271,98272],{"class":84,"line":1394},[82,98273,98249],{"class":96},[65,98275,98277],{"id":98276},"_232-实例","2.3.2 实例",[73,98279,98281],{"className":75,"code":98280,"language":77,"meta":78,"style":78},"#创建一维数组\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",[32,98282,98283,98287,98311,98316,98321,98325,98348,98352,98356,98361,98366],{"__ignoreMap":78},[82,98284,98285],{"class":84,"line":85},[82,98286,95656],{"class":2828},[82,98288,98289,98291,98293,98295,98297,98299,98301,98303,98305,98307,98309],{"class":84,"line":157},[82,98290,95553],{"class":92},[82,98292,2283],{"class":88},[82,98294,3136],{"class":92},[82,98296,3476],{"class":88},[82,98298,3136],{"class":92},[82,98300,2283],{"class":88},[82,98302,3136],{"class":92},[82,98304,96051],{"class":108},[82,98306,113],{"class":112},[82,98308,2776],{"class":88},[82,98310,119],{"class":92},[82,98312,98313],{"class":84,"line":404},[82,98314,98315],{"class":2828},"#输出结果：\n",[82,98317,98318],{"class":84,"line":413},[82,98319,98320],{"class":2828},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[82,98322,98323],{"class":84,"line":508},[82,98324,96498],{"class":2828},[82,98326,98327,98330,98332,98334,98336,98339,98341,98343,98345],{"class":84,"line":513},[82,98328,98329],{"class":92},"np.array([np.arange(",[82,98331,2283],{"class":88},[82,98333,3136],{"class":92},[82,98335,3051],{"class":88},[82,98337,98338],{"class":92},"),np.arange(",[82,98340,3051],{"class":88},[82,98342,3136],{"class":92},[82,98344,3127],{"class":88},[82,98346,98347],{"class":92},")])\n",[82,98349,98350],{"class":84,"line":1388},[82,98351,96115],{"class":2828},[82,98353,98354],{"class":84,"line":1394},[82,98355,98249],{"class":96},[82,98357,98358],{"class":84,"line":1399},[82,98359,98360],{"class":96},"array([[1, 2, 3],\n",[82,98362,98363],{"class":84,"line":1430},[82,98364,98365],{"class":96},"       [4, 5, 6]])\n",[82,98367,98368],{"class":84,"line":1818},[82,98369,98249],{"class":96},[14,98371,98373],{"id":98372},"_24-生态分布","2.4 生态分布",[65,98375,98377],{"id":98376},"_241-标准正态分布","2.4.1 标准正态分布",[19,98379,98380],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98382,98383],{},[4078,98384],{"alt":78,"src":98385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[65,98387,98389],{"id":98388},"_242-常规正态分布","2.4.2 常规正态分布",[73,98391,98393],{"className":75,"code":98392,"language":77,"meta":78,"style":78},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[32,98394,98395,98400,98405,98410],{"__ignoreMap":78},[82,98396,98397],{"class":84,"line":85},[82,98398,98399],{"class":92},"random.normal(loc,scale,size)也可以生成正态分布\n",[82,98401,98402],{"class":84,"line":157},[82,98403,98404],{"class":2828},"#loc:期望\n",[82,98406,98407],{"class":84,"line":404},[82,98408,98409],{"class":2828},"#scale:方差\n",[82,98411,98412],{"class":84,"line":413},[82,98413,98414],{"class":2828},"#size:用于确定是几维的数列\n",[19,98416,98417],{},[4078,98418],{"alt":78,"src":98419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98421,98423],{"id":98422},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98425,98426],{},"ndim:秩，维度个数",[19,98428,98429],{},"size:数组元素的个数",[19,98431,98432],{},"shape:数组的形状",[19,98434,98435],{},"dtype:数组元素的类型",[19,98437,98438],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98440,98441],{},"他们都是属性，通过数组.属性的形式来确定",[19,98443,98444],{},"如果需要输出多个可以通过以下方式：",[73,98446,98448],{"className":75,"code":98447,"language":77,"meta":78,"style":78},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[32,98449,98450],{"__ignoreMap":78},[82,98451,98452,98454],{"class":84,"line":85},[82,98453,407],{"class":88},[82,98455,98456],{"class":92},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98458,98460],{"id":98459},"_26-其他方式创建数组","2.6 其他方式创建数组",[65,98462,98464],{"id":98463},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98466,98467],{},"①创建一维数组",[73,98469,98471],{"className":75,"code":98470,"language":77,"meta":78,"style":78},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[32,98472,98473,98482,98486,98491,98496],{"__ignoreMap":78},[82,98474,98475,98478,98480],{"class":84,"line":85},[82,98476,98477],{"class":92},"np.zeros(",[82,98479,440],{"class":88},[82,98481,119],{"class":92},[82,98483,98484],{"class":84,"line":157},[82,98485,98249],{"class":96},[82,98487,98488],{"class":84,"line":404},[82,98489,98490],{"class":96},"输出结果：\n",[82,98492,98493],{"class":84,"line":413},[82,98494,98495],{"class":96},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[82,98497,98498],{"class":84,"line":508},[82,98499,98249],{"class":96},[19,98501,98502],{},"上方代码等价于：",[73,98504,98506],{"className":75,"code":98505,"language":77,"meta":78,"style":78},"np.zeros(shape=(10))#创建10个元素的0数组\n",[32,98507,98508],{"__ignoreMap":78},[82,98509,98510,98512,98515,98517,98519,98521,98523],{"class":84,"line":85},[82,98511,98477],{"class":92},[82,98513,98514],{"class":108},"shape",[82,98516,113],{"class":112},[82,98518,93],{"class":92},[82,98520,440],{"class":88},[82,98522,85325],{"class":92},[82,98524,98525],{"class":2828},"#创建10个元素的0数组\n",[19,98527,98528],{},"也可以指定类型",[73,98530,98532],{"className":75,"code":98531,"language":77,"meta":78,"style":78},"#指定类型\nnp.zeros(5,dtype=int)\n",[32,98533,98534,98539],{"__ignoreMap":78},[82,98535,98536],{"class":84,"line":85},[82,98537,98538],{"class":2828},"#指定类型\n",[82,98540,98541,98543,98545,98547,98549,98551,98553],{"class":84,"line":157},[82,98542,98477],{"class":92},[82,98544,3077],{"class":88},[82,98546,3136],{"class":92},[82,98548,96051],{"class":108},[82,98550,113],{"class":112},[82,98552,2776],{"class":88},[82,98554,119],{"class":92},[19,98556,98557],{},"②创建二维数组",[73,98559,98561],{"className":75,"code":98560,"language":77,"meta":78,"style":78},"np.zeros((3,4),dtype=int)\n",[32,98562,98563],{"__ignoreMap":78},[82,98564,98565,98568,98570,98572,98574,98576,98578,98580,98582],{"class":84,"line":85},[82,98566,98567],{"class":92},"np.zeros((",[82,98569,2841],{"class":88},[82,98571,3136],{"class":92},[82,98573,3051],{"class":88},[82,98575,44821],{"class":92},[82,98577,96051],{"class":108},[82,98579,113],{"class":112},[82,98581,2776],{"class":88},[82,98583,119],{"class":92},[19,98585,98586],{},"③创建三维数组",[73,98588,98590],{"className":75,"code":98589,"language":77,"meta":78,"style":78},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[32,98591,98592,98597],{"__ignoreMap":78},[82,98593,98594],{"class":84,"line":85},[82,98595,98596],{"class":2828},"#创建三维数组\n",[82,98598,98599,98601,98603,98605,98607,98609,98611,98613,98615,98617,98619],{"class":84,"line":157},[82,98600,98567],{"class":92},[82,98602,2841],{"class":88},[82,98604,3136],{"class":92},[82,98606,3051],{"class":88},[82,98608,3136],{"class":92},[82,98610,3077],{"class":88},[82,98612,44821],{"class":92},[82,98614,96051],{"class":108},[82,98616,113],{"class":112},[82,98618,2776],{"class":88},[82,98620,119],{"class":92},[19,98622,98623],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[73,98625,98627],{"className":75,"code":98626,"language":77,"meta":78,"style":78},"#使用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",[32,98628,98629,98634,98649,98654,98659,98681],{"__ignoreMap":78},[82,98630,98631],{"class":84,"line":85},[82,98632,98633],{"class":2828},"#使用zeros_like将创建的一维数组变成全0的数组\n",[82,98635,98636,98638,98640,98642,98644,98646],{"class":84,"line":157},[82,98637,323],{"class":92},[82,98639,113],{"class":112},[82,98641,95553],{"class":92},[82,98643,3051],{"class":88},[82,98645,3187],{"class":92},[82,98647,98648],{"class":2828},"#这个得到的结果：一维数组0，1，2，3\n",[82,98650,98651],{"class":84,"line":404},[82,98652,98653],{"class":92},"np.zeros_like(a)\n",[82,98655,98656],{"class":84,"line":413},[82,98657,98658],{"class":2828},"#使用zeros_like将创建的二维数组变成全0的数组\n",[82,98660,98661,98663,98665,98667,98669,98671,98673,98675,98677,98679],{"class":84,"line":508},[82,98662,95857],{"class":92},[82,98664,113],{"class":112},[82,98666,97978],{"class":92},[82,98668,34068],{"class":108},[82,98670,113],{"class":112},[82,98672,93],{"class":92},[82,98674,3051],{"class":88},[82,98676,3136],{"class":92},[82,98678,3077],{"class":88},[82,98680,33074],{"class":92},[82,98682,98683],{"class":84,"line":513},[82,98684,98685],{"class":92},"np.zeros_like(aa)\n",[65,98687,98689],{"id":98688},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98691,98692],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[65,98694,98696],{"id":98695},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98698,98699],{},"①empty()用法",[73,98701,98703],{"className":75,"code":98702,"language":77,"meta":78,"style":78},"numpy.empty(shape,dtype=float,order='c')\n",[32,98704,98705],{"__ignoreMap":78},[82,98706,98707,98710,98712,98714,98716,98718,98720,98722,98724],{"class":84,"line":85},[82,98708,98709],{"class":92},"numpy.empty(shape,",[82,98711,96051],{"class":108},[82,98713,113],{"class":112},[82,98715,2811],{"class":88},[82,98717,3136],{"class":92},[82,98719,97848],{"class":108},[82,98721,113],{"class":112},[82,98723,78582],{"class":96},[82,98725,119],{"class":92},[19,98727,98728],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98730,98731],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98733,98734],{},[4078,98735],{"alt":78,"src":98736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98738,98739],{},"②empty()用法",[73,98741,98743],{"className":75,"code":98742,"language":77,"meta":78,"style":78},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[32,98744,98745,98766,98778,98799,98804],{"__ignoreMap":78},[82,98746,98747,98749,98751,98754,98756,98758,98760,98762,98764],{"class":84,"line":85},[82,98748,3594],{"class":92},[82,98750,113],{"class":112},[82,98752,98753],{"class":92},"np.empty(",[82,98755,440],{"class":88},[82,98757,3136],{"class":92},[82,98759,96051],{"class":108},[82,98761,113],{"class":112},[82,98763,2776],{"class":88},[82,98765,119],{"class":92},[82,98767,98768,98770,98772,98774,98776],{"class":84,"line":157},[82,98769,3569],{"class":92},[82,98771,113],{"class":112},[82,98773,95553],{"class":92},[82,98775,3077],{"class":88},[82,98777,119],{"class":92},[82,98779,98780,98783,98785,98788,98790,98792,98795,98797],{"class":84,"line":404},[82,98781,98782],{"class":92},"np.add(",[82,98784,1425],{"class":88},[82,98786,98787],{"class":92},",x,",[82,98789,95605],{"class":108},[82,98791,113],{"class":112},[82,98793,98794],{"class":92},"y[:",[82,98796,3077],{"class":88},[82,98798,7252],{"class":92},[82,98800,98801],{"class":84,"line":413},[82,98802,98803],{"class":2828},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[82,98805,98806],{"class":84,"line":508},[82,98807,98808],{"class":92},"y\n",[19,98810,14104],{},[19,98812,98813],{},[4078,98814],{"alt":78,"src":98815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[73,98817,98819],{"className":75,"code":98818,"language":77,"meta":78,"style":78},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[32,98820,98821,98837,98857,98872],{"__ignoreMap":78},[82,98822,98823,98825,98827,98829,98831,98833,98835],{"class":84,"line":85},[82,98824,3569],{"class":92},[82,98826,113],{"class":112},[82,98828,95553],{"class":92},[82,98830,2283],{"class":88},[82,98832,3136],{"class":92},[82,98834,3102],{"class":88},[82,98836,119],{"class":92},[82,98838,98839,98841,98843,98845,98847,98849,98851,98853,98855],{"class":84,"line":157},[82,98840,3594],{"class":92},[82,98842,113],{"class":112},[82,98844,98753],{"class":92},[82,98846,3077],{"class":88},[82,98848,3136],{"class":92},[82,98850,96051],{"class":108},[82,98852,113],{"class":112},[82,98854,2776],{"class":88},[82,98856,119],{"class":92},[82,98858,98859,98862,98864,98866,98868,98870],{"class":84,"line":404},[82,98860,98861],{"class":92},"np.add(x,",[82,98863,1425],{"class":88},[82,98865,3136],{"class":92},[82,98867,95605],{"class":108},[82,98869,113],{"class":112},[82,98871,96000],{"class":92},[82,98873,98874],{"class":84,"line":413},[82,98875,98876],{"class":2828},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98878,98879],{},"③empty_like()",[19,98881,98882],{},[2913,98883,98884,98885,98890],{},"创建一个",[2913,98886,98887],{},[2913,98888,98889],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98892,98893,98896],{},[32,98894,98895],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98898,98899],{},[4078,98900],{"alt":78,"src":98901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[65,98903,98905],{"id":98904},"_264-用法","2.6.4 ？？用法",[19,98907,98908],{},"当想查看一个函数的参数时，可以通过？？来实现",[73,98910,98912],{"className":75,"code":98911,"language":77,"meta":78,"style":78},"np.full??\n",[32,98913,98914],{"__ignoreMap":78},[82,98915,98916,98919],{"class":84,"line":85},[82,98917,98918],{"class":92},"np.full",[82,98920,98921],{"class":79957},"??\n",[65,98923,98925],{"id":98924},"_265-full创建数组","2.6.5 full()创建数组",[73,98927,98929],{"className":75,"code":98928,"language":77,"meta":78,"style":78},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[32,98930,98931,98936],{"__ignoreMap":78},[82,98932,98933],{"class":84,"line":85},[82,98934,98935],{"class":92},"full(shape,fill_value)\n",[82,98937,98938],{"class":84,"line":157},[82,98939,98940],{"class":92},"创建全为某个指定值的数组\n",[19,98942,97081],{},[73,98944,98946],{"className":75,"code":98945,"language":77,"meta":78,"style":78},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[32,98947,98948,98953],{"__ignoreMap":78},[82,98949,98950],{"class":84,"line":85},[82,98951,98952],{"class":2828},"#创建一个一维数组,以20进行填充\n",[82,98954,98955,98958,98960,98962,98964],{"class":84,"line":157},[82,98956,98957],{"class":92},"np.full(",[82,98959,440],{"class":88},[82,98961,3136],{"class":92},[82,98963,3451],{"class":88},[82,98965,119],{"class":92},[19,98967,95842],{},[73,98969,98971],{"className":75,"code":98970,"language":77,"meta":78,"style":78},"#创建二维数组\nnp.full((3,5),11)\n",[32,98972,98973,98977],{"__ignoreMap":78},[82,98974,98975],{"class":84,"line":85},[82,98976,96498],{"class":2828},[82,98978,98979,98982,98984,98986,98988,98990,98992],{"class":84,"line":157},[82,98980,98981],{"class":92},"np.full((",[82,98983,2841],{"class":88},[82,98985,3136],{"class":92},[82,98987,3077],{"class":88},[82,98989,44821],{"class":92},[82,98991,3229],{"class":88},[82,98993,119],{"class":92},[19,98995,98996],{},"③full_like用法",[19,98998,98999],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,99001,99002],{},"这里是指定填充而已",[73,99004,99006],{"className":75,"code":99005,"language":77,"meta":78,"style":78},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[32,99007,99008,99013,99037,99042],{"__ignoreMap":78},[82,99009,99010],{"class":84,"line":85},[82,99011,99012],{"class":2828},"#创建一个指定形状数组\n",[82,99014,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035],{"class":84,"line":157},[82,99016,323],{"class":92},[82,99018,113],{"class":112},[82,99020,95553],{"class":92},[82,99022,2283],{"class":88},[82,99024,3136],{"class":92},[82,99026,3083],{"class":88},[82,99028,95558],{"class":92},[82,99030,3051],{"class":88},[82,99032,3136],{"class":92},[82,99034,3178],{"class":88},[82,99036,119],{"class":92},[82,99038,99039],{"class":84,"line":404},[82,99040,99041],{"class":2828},"#进行指定填充\n",[82,99043,99044,99047,99049],{"class":84,"line":413},[82,99045,99046],{"class":92},"np.full_like(a,",[82,99048,440],{"class":88},[82,99050,119],{"class":92},[19,99052,14104],{},[19,99054,99055],{},[4078,99056],{"alt":78,"src":99057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[65,99059,99061],{"id":99060},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24582,99063,99065],{"id":99064},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[73,99067,99069],{"className":75,"code":99068,"language":77,"meta":78,"style":78},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[32,99070,99071,99088],{"__ignoreMap":78},[82,99072,99073,99076,99078,99080,99082,99084,99086],{"class":84,"line":85},[82,99074,99075],{"class":92},"np.eye(",[82,99077,3051],{"class":88},[82,99079,3136],{"class":92},[82,99081,96051],{"class":108},[82,99083,113],{"class":112},[82,99085,2776],{"class":88},[82,99087,119],{"class":92},[82,99089,99090],{"class":84,"line":157},[82,99091,99092],{"class":2828},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24582,99094,99096],{"id":99095},"_2662-法2identity","2.6.6.2 法2：identity()",[73,99098,99100],{"className":75,"code":99099,"language":77,"meta":78,"style":78},"#identity()\nnp.identity(5,dtype=int)\n",[32,99101,99102,99107],{"__ignoreMap":78},[82,99103,99104],{"class":84,"line":85},[82,99105,99106],{"class":2828},"#identity()\n",[82,99108,99109,99112,99114,99116,99118,99120,99122],{"class":84,"line":157},[82,99110,99111],{"class":92},"np.identity(",[82,99113,3077],{"class":88},[82,99115,3136],{"class":92},[82,99117,96051],{"class":108},[82,99119,113],{"class":112},[82,99121,2776],{"class":88},[82,99123,119],{"class":92},[19,99125,99126],{},"两个函数是有区别的",[19,99128,99129],{},[4078,99130],{"alt":78,"src":99131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,99133,99134],{},[4078,99135],{"alt":78,"src":99136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[73,99138,99140],{"className":75,"code":99139,"language":77,"meta":78,"style":78},"# 创建一个 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",[32,99141,99142,99147,99159,99164,99169,99174,99179,99183,99188,99208,99212,99217,99222],{"__ignoreMap":78},[82,99143,99144],{"class":84,"line":85},[82,99145,99146],{"class":2828},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[82,99148,99149,99151,99153,99155,99157],{"class":84,"line":157},[82,99150,99075],{"class":92},[82,99152,2841],{"class":88},[82,99154,100],{"class":92},[82,99156,3051],{"class":88},[82,99158,119],{"class":92},[82,99160,99161],{"class":84,"line":404},[82,99162,99163],{"class":2828},"# 输出:\n",[82,99165,99166],{"class":84,"line":413},[82,99167,99168],{"class":2828},"# [[1. 0. 0. 0.]\n",[82,99170,99171],{"class":84,"line":508},[82,99172,99173],{"class":2828},"#  [0. 1. 0. 0.]\n",[82,99175,99176],{"class":84,"line":513},[82,99177,99178],{"class":2828},"#  [0. 0. 1. 0.]]\n",[82,99180,99181],{"class":84,"line":1388},[82,99182,486],{"emptyLinePlaceholder":485},[82,99184,99185],{"class":84,"line":1394},[82,99186,99187],{"class":2828},"# 对角线向上偏移1\n",[82,99189,99190,99192,99194,99196,99198,99200,99202,99204,99206],{"class":84,"line":1399},[82,99191,99075],{"class":92},[82,99193,2841],{"class":88},[82,99195,100],{"class":92},[82,99197,3051],{"class":88},[82,99199,100],{"class":92},[82,99201,3249],{"class":108},[82,99203,113],{"class":112},[82,99205,2283],{"class":88},[82,99207,119],{"class":92},[82,99209,99210],{"class":84,"line":1430},[82,99211,99163],{"class":2828},[82,99213,99214],{"class":84,"line":1818},[82,99215,99216],{"class":2828},"# [[0. 1. 0. 0.]\n",[82,99218,99219],{"class":84,"line":2082},[82,99220,99221],{"class":2828},"#  [0. 0. 1. 0.]\n",[82,99223,99224],{"class":84,"line":2233},[82,99225,99226],{"class":2828},"#  [0. 0. 0. 1.]]\n",[65,99228,99230],{"id":99229},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[73,99232,99234],{"className":75,"code":99233,"language":77,"meta":78,"style":78},"#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",[32,99235,99236,99241,99245,99250,99255,99260,99265,99270,99275,99280,99285],{"__ignoreMap":78},[82,99237,99238],{"class":84,"line":85},[82,99239,99240],{"class":2828},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[82,99242,99243],{"class":84,"line":157},[82,99244,98249],{"class":96},[82,99246,99247],{"class":84,"line":404},[82,99248,99249],{"class":96},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[82,99251,99252],{"class":84,"line":413},[82,99253,99254],{"class":96},"参数介绍：\n",[82,99256,99257],{"class":84,"line":508},[82,99258,99259],{"class":96},"start：序列的起始值\n",[82,99261,99262],{"class":84,"line":513},[82,99263,99264],{"class":96},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[82,99266,99267],{"class":84,"line":1388},[82,99268,99269],{"class":96},"num：要生长的等步长的样本数量，默认为50\n",[82,99271,99272],{"class":84,"line":1394},[82,99273,99274],{"class":96},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[82,99276,99277],{"class":84,"line":1399},[82,99278,99279],{"class":96},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[82,99281,99282],{"class":84,"line":1430},[82,99283,99284],{"class":96},"dtype：ndarry的数据类型\n",[82,99286,99287],{"class":84,"line":1818},[82,99288,98249],{"class":96},[19,99290,99291],{},[4078,99292],{"alt":78,"src":99293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,99295,99296],{},"这里num=是可以省略的",[19,99298,99299],{},"也就是下方两行代码结果是一模一样的",[73,99301,99303],{"className":75,"code":99302,"language":77,"meta":78,"style":78},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[32,99304,99305,99322],{"__ignoreMap":78},[82,99306,99307,99310,99312,99314,99316,99318,99320],{"class":84,"line":85},[82,99308,99309],{"class":92},"np.linspace(",[82,99311,2283],{"class":88},[82,99313,3136],{"class":92},[82,99315,3077],{"class":88},[82,99317,3136],{"class":92},[82,99319,3077],{"class":88},[82,99321,119],{"class":92},[82,99323,99324,99326,99328,99330,99332,99334,99336,99338,99340],{"class":84,"line":157},[82,99325,99309],{"class":92},[82,99327,2283],{"class":88},[82,99329,3136],{"class":92},[82,99331,3077],{"class":88},[82,99333,3136],{"class":92},[82,99335,4272],{"class":108},[82,99337,113],{"class":112},[82,99339,3077],{"class":88},[82,99341,119],{"class":92},[65,99343,99345],{"id":99344},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[73,99347,99349],{"className":75,"code":99348,"language":77,"meta":78,"style":78},"#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",[32,99350,99351,99356,99360,99365,99370,99375,99380,99384,99389,99394,99398],{"__ignoreMap":78},[82,99352,99353],{"class":84,"line":85},[82,99354,99355],{"class":2828},"#logspace函数用于创建一个等比数列，格式如下：\n",[82,99357,99358],{"class":84,"line":157},[82,99359,98249],{"class":96},[82,99361,99362],{"class":84,"line":404},[82,99363,99364],{"class":96},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[82,99366,99367],{"class":84,"line":413},[82,99368,99369],{"class":96},"参数为：\n",[82,99371,99372],{"class":84,"line":508},[82,99373,99374],{"class":96},"start:序列的起始位置为：base**start\n",[82,99376,99377],{"class":84,"line":513},[82,99378,99379],{"class":96},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[82,99381,99382],{"class":84,"line":1388},[82,99383,99269],{"class":96},[82,99385,99386],{"class":84,"line":1394},[82,99387,99388],{"class":96},"endpoint：是否包含 stop 这个值，默认是 True\n",[82,99390,99391],{"class":84,"line":1399},[82,99392,99393],{"class":96},"base：对数的底数，默认是 10（常见对数）\n",[82,99395,99396],{"class":84,"line":1430},[82,99397,99284],{"class":96},[82,99399,99400],{"class":84,"line":1818},[82,99401,98249],{"class":96},[19,99403,99404],{},[4078,99405],{"alt":78,"src":99406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99408,99409],{},"logspace()函数中的num参数也是可以不写num=的",[19,99411,99412],{},"endpoint是不可以省略的",[2671,99414,99415],{},"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":78,"searchDepth":157,"depth":157,"links":99417},[99418,99422,99427,99431,99435,99436],{"id":97807,"depth":157,"text":97808,"children":99419},[99420,99421],{"id":97811,"depth":404,"text":97812},{"id":97884,"depth":404,"text":97885},{"id":97916,"depth":157,"text":97917,"children":99423},[99424,99425,99426],{"id":97920,"depth":404,"text":97921},{"id":98102,"depth":404,"text":98103},{"id":98180,"depth":404,"text":98181},{"id":98215,"depth":157,"text":98216,"children":99428},[99429,99430],{"id":98219,"depth":404,"text":98220},{"id":98276,"depth":404,"text":98277},{"id":98372,"depth":157,"text":98373,"children":99432},[99433,99434],{"id":98376,"depth":404,"text":98377},{"id":98388,"depth":404,"text":98389},{"id":98422,"depth":157,"text":98423},{"id":98459,"depth":157,"text":98460,"children":99437},[99438,99439,99440,99441,99442,99443,99444,99445],{"id":98463,"depth":404,"text":98464},{"id":98688,"depth":404,"text":98689},{"id":98695,"depth":404,"text":98696},{"id":98904,"depth":404,"text":98905},{"id":98924,"depth":404,"text":98925},{"id":99060,"depth":404,"text":99061},{"id":99229,"depth":404,"text":99230},{"id":99344,"depth":404,"text":99345},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97799,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99452,"title":99453,"body":99454,"description":2699,"extension":2700,"meta":99547,"navigation":485,"path":99548,"seo":99549,"stem":99550,"__hash__":99551},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99455,"toc":99545},[99456,99459,99462,99465,99468,99471,99474,99477,99480,99483,99486,99489,99491,99494,99497,99502,99505,99508,99542],[10,99457,99453],{"id":99458},"_20魔法命令mprun",[19,99460,99461],{},"逐行分析数据内存的使用情况",[19,99463,99464],{},"语法格式：",[19,99466,99467],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99469,99470],{},"分析结果列如下：",[19,99472,99473],{},"Line行号",[19,99475,99476],{},"Mem usage内存使用大小",[19,99478,99479],{},"increment内存增量",[19,99481,99482],{},"Line content代码内容",[19,99484,99485],{},"补充说明：",[19,99487,99488],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99490,97754],{},[19,99492,99493],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99495,99496],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99498,99499],{},[4078,99500],{"alt":78,"src":99501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99503,99504],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99506,99507],{},"这时候需要重新加载模块",[73,99509,99511],{"className":75,"code":99510,"language":77,"meta":78,"style":78},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[32,99512,99513,99518,99525,99530],{"__ignoreMap":78},[82,99514,99515],{"class":84,"line":85},[82,99516,99517],{"class":2828},"#重新加载模块\n",[82,99519,99520,99522],{"class":84,"line":157},[82,99521,1123],{"class":112},[82,99523,99524],{"class":92}," importlib\n",[82,99526,99527],{"class":84,"line":404},[82,99528,99529],{"class":92},"importlib.reload(mprun_test)\n",[82,99531,99532,99534,99537,99539],{"class":84,"line":413},[82,99533,3086],{"class":112},[82,99535,99536],{"class":92},"mprun ",[82,99538,3288],{"class":112},[82,99540,99541],{"class":92},"f mprun_test.fun_test mprun_test.fun_test()\n",[2671,99543,99544],{},"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":78,"searchDepth":157,"depth":157,"links":99546},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99453,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99553,"title":99554,"body":99555,"description":2699,"extension":2700,"meta":99572,"navigation":485,"path":99573,"seo":99574,"stem":99575,"__hash__":99576},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99556,"toc":99570},[99557,99560,99565],[10,99558,99554],{"id":99559},"_3一维数组的索引和切片",[19,99561,99562],{},[4078,99563],{"alt":78,"src":99564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99566,99567],{},[4078,99568],{"alt":78,"src":99569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":78,"searchDepth":157,"depth":157,"links":99571},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99554,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99578,"title":99579,"body":99580,"description":2699,"extension":2700,"meta":100063,"navigation":485,"path":100064,"seo":100065,"stem":100066,"__hash__":100067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99581,"toc":100061},[99582,99585,99588,99593,99626,99629,99667,99670,99704,99707,99812,99815,99852,99855,99956,99959,100010,100013,100055,100058],[10,99583,99579],{"id":99584},"_4二维数组的索引与切片",[19,99586,99587],{},"①获取指定单个元素",[19,99589,99590],{},[4078,99591],{"alt":78,"src":99592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[73,99594,99596],{"className":75,"code":99595,"language":77,"meta":78,"style":78},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[32,99597,99598,99603,99608,99613],{"__ignoreMap":78},[82,99599,99600],{"class":84,"line":85},[82,99601,99602],{"class":2828},"#获取元素9\n",[82,99604,99605],{"class":84,"line":157},[82,99606,99607],{"class":2828},"#先获取所在行，再获取所在列\n",[82,99609,99610],{"class":84,"line":404},[82,99611,99612],{"class":2828},"#数组[行索引号，列索引号]\n",[82,99614,99615,99618,99620,99622,99624],{"class":84,"line":413},[82,99616,99617],{"class":92},"a[",[82,99619,2283],{"class":88},[82,99621,3136],{"class":92},[82,99623,1425],{"class":88},[82,99625,875],{"class":92},[19,99627,99628],{},"②获取整行元素",[73,99630,99632],{"className":75,"code":99631,"language":77,"meta":78,"style":78},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[32,99633,99634,99639,99644,99652,99657],{"__ignoreMap":78},[82,99635,99636],{"class":84,"line":85},[82,99637,99638],{"class":2828},"#获取整行 数组[行索引号]\n",[82,99640,99641],{"class":84,"line":157},[82,99642,99643],{"class":2828},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[82,99645,99646,99648,99650],{"class":84,"line":404},[82,99647,99617],{"class":92},[82,99649,1425],{"class":88},[82,99651,875],{"class":92},[82,99653,99654],{"class":84,"line":413},[82,99655,99656],{"class":2828},"#也可以负索引获取一行\n",[82,99658,99659,99661,99663,99665],{"class":84,"line":508},[82,99660,99617],{"class":92},[82,99662,3288],{"class":112},[82,99664,2283],{"class":88},[82,99666,875],{"class":92},[19,99668,99669],{},"③获取整列元素",[73,99671,99673],{"className":75,"code":99672,"language":77,"meta":78,"style":78},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[32,99674,99675,99680,99689,99694],{"__ignoreMap":78},[82,99676,99677],{"class":84,"line":85},[82,99678,99679],{"class":2828},"#获取整列 数组名[:,列索引]\n",[82,99681,99682,99685,99687],{"class":84,"line":157},[82,99683,99684],{"class":92},"a[:,",[82,99686,1425],{"class":88},[82,99688,875],{"class":92},[82,99690,99691],{"class":84,"line":404},[82,99692,99693],{"class":2828},"#也可以负索引获取一列\n",[82,99695,99696,99698,99700,99702],{"class":84,"line":413},[82,99697,99684],{"class":92},[82,99699,3288],{"class":112},[82,99701,2283],{"class":88},[82,99703,875],{"class":92},[19,99705,99706],{},"④部分行部分列的元素",[73,99708,99710],{"className":75,"code":99709,"language":77,"meta":78,"style":78},"#部分行部分列 数组名[行切片，列切片]\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",[32,99711,99712,99717,99727,99731,99735,99740,99745,99749,99761,99765,99769,99774,99779,99784,99789,99793,99798],{"__ignoreMap":78},[82,99713,99714],{"class":84,"line":85},[82,99715,99716],{"class":2828},"#部分行部分列 数组名[行切片，列切片]\n",[82,99718,99719,99722,99724],{"class":84,"line":157},[82,99720,99721],{"class":92},"a[:",[82,99723,1425],{"class":88},[82,99725,99726],{"class":92},",:]\n",[82,99728,99729],{"class":84,"line":404},[82,99730,96115],{"class":2828},[82,99732,99733],{"class":84,"line":413},[82,99734,96479],{"class":96},[82,99736,99737],{"class":84,"line":508},[82,99738,99739],{"class":96},"array([[ 1,  2,  3,  4,  5,  6],\n",[82,99741,99742],{"class":84,"line":513},[82,99743,99744],{"class":96},"       [ 7,  8,  9, 10, 11, 12]])\n",[82,99746,99747],{"class":84,"line":1388},[82,99748,96479],{"class":96},[82,99750,99751,99753,99755,99757,99759],{"class":84,"line":1394},[82,99752,99684],{"class":92},[82,99754,2283],{"class":88},[82,99756,3608],{"class":92},[82,99758,3051],{"class":88},[82,99760,875],{"class":92},[82,99762,99763],{"class":84,"line":1399},[82,99764,96115],{"class":2828},[82,99766,99767],{"class":84,"line":1430},[82,99768,96479],{"class":96},[82,99770,99771],{"class":84,"line":1818},[82,99772,99773],{"class":96},"array([[ 2,  3,  4],\n",[82,99775,99776],{"class":84,"line":2082},[82,99777,99778],{"class":96},"       [ 8,  9, 10],\n",[82,99780,99781],{"class":84,"line":2233},[82,99782,99783],{"class":96},"       [14, 15, 16],\n",[82,99785,99786],{"class":84,"line":2255},[82,99787,99788],{"class":96},"       [20, 21, 22]])\n",[82,99790,99791],{"class":84,"line":2260},[82,99792,96479],{"class":96},[82,99794,99795],{"class":84,"line":2298},[82,99796,99797],{"class":2828},"#对列行同时进行切片，使用了step参数\n",[82,99799,99800,99803,99805,99808,99810],{"class":84,"line":2303},[82,99801,99802],{"class":92},"a[::",[82,99804,1425],{"class":88},[82,99806,99807],{"class":92},",::",[82,99809,1425],{"class":88},[82,99811,875],{"class":92},[19,99813,99814],{},"⑤同时获取两个元素",[73,99816,99818],{"className":75,"code":99817,"language":77,"meta":78,"style":78},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[32,99819,99820,99825,99830],{"__ignoreMap":78},[82,99821,99822],{"class":84,"line":85},[82,99823,99824],{"class":2828},"#同时获取第三行第二列，第四行第一列\n",[82,99826,99827],{"class":84,"line":157},[82,99828,99829],{"class":2828},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[82,99831,99832,99835,99837,99839,99841,99843,99845,99847,99849],{"class":84,"line":404},[82,99833,99834],{"class":92},"a[(",[82,99836,1425],{"class":88},[82,99838,3136],{"class":92},[82,99840,2841],{"class":88},[82,99842,44812],{"class":92},[82,99844,2283],{"class":88},[82,99846,3136],{"class":92},[82,99848,2244],{"class":88},[82,99850,99851],{"class":92},")]\n",[19,99853,99854],{},"⑥切片，对行进行反向获取",[73,99856,99858],{"className":75,"code":99857,"language":77,"meta":78,"style":78},"#切片 对所有行进行反向获取\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",[32,99859,99860,99865,99875,99879,99883,99888,99893,99898,99903,99907,99912,99928,99932,99937,99942,99947,99952],{"__ignoreMap":78},[82,99861,99862],{"class":84,"line":85},[82,99863,99864],{"class":2828},"#切片 对所有行进行反向获取\n",[82,99866,99867,99869,99871,99873],{"class":84,"line":157},[82,99868,99802],{"class":92},[82,99870,3288],{"class":112},[82,99872,2283],{"class":88},[82,99874,875],{"class":92},[82,99876,99877],{"class":84,"line":404},[82,99878,96115],{"class":2828},[82,99880,99881],{"class":84,"line":413},[82,99882,96479],{"class":96},[82,99884,99885],{"class":84,"line":508},[82,99886,99887],{"class":96},"array([[19, 20, 21, 22, 23, 24],\n",[82,99889,99890],{"class":84,"line":513},[82,99891,99892],{"class":96},"       [13, 14, 15, 16, 17, 18],\n",[82,99894,99895],{"class":84,"line":1388},[82,99896,99897],{"class":96},"       [ 7,  8,  9, 10, 11, 12],\n",[82,99899,99900],{"class":84,"line":1394},[82,99901,99902],{"class":96},"       [ 1,  2,  3,  4,  5,  6]])\n",[82,99904,99905],{"class":84,"line":1399},[82,99906,96479],{"class":96},[82,99908,99909],{"class":84,"line":1430},[82,99910,99911],{"class":2828},"#对行列都进行反向切片获取\n",[82,99913,99914,99916,99918,99920,99922,99924,99926],{"class":84,"line":1818},[82,99915,99802],{"class":92},[82,99917,3288],{"class":112},[82,99919,2283],{"class":88},[82,99921,99807],{"class":92},[82,99923,3288],{"class":112},[82,99925,2283],{"class":88},[82,99927,875],{"class":92},[82,99929,99930],{"class":84,"line":2082},[82,99931,96479],{"class":96},[82,99933,99934],{"class":84,"line":2233},[82,99935,99936],{"class":96},"array([[24, 23, 22, 21, 20, 19],\n",[82,99938,99939],{"class":84,"line":2255},[82,99940,99941],{"class":96},"       [18, 17, 16, 15, 14, 13],\n",[82,99943,99944],{"class":84,"line":2260},[82,99945,99946],{"class":96},"       [12, 11, 10,  9,  8,  7],\n",[82,99948,99949],{"class":84,"line":2298},[82,99950,99951],{"class":96},"       [ 6,  5,  4,  3,  2,  1]])\n",[82,99953,99954],{"class":84,"line":2303},[82,99955,96479],{"class":96},[19,99957,99958],{},"⑦修改元素",[73,99960,99962],{"className":75,"code":99961,"language":77,"meta":78,"style":78},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[32,99963,99964,99969,99987,99992],{"__ignoreMap":78},[82,99965,99966],{"class":84,"line":85},[82,99967,99968],{"class":2828},"#获取前两行和前两列\n",[82,99970,99971,99974,99976,99978,99980,99983,99985],{"class":84,"line":157},[82,99972,99973],{"class":92},"sub_a",[82,99975,113],{"class":112},[82,99977,99721],{"class":92},[82,99979,1425],{"class":88},[82,99981,99982],{"class":92},",:",[82,99984,1425],{"class":88},[82,99986,875],{"class":92},[82,99988,99989],{"class":84,"line":404},[82,99990,99991],{"class":2828},"#修改sub_a第一个元素的值\n",[82,99993,99994,99997,99999,100001,100003,100005,100007],{"class":84,"line":413},[82,99995,99996],{"class":92},"sub_a[",[82,99998,2244],{"class":88},[82,100000,3136],{"class":92},[82,100002,2244],{"class":88},[82,100004,3689],{"class":92},[82,100006,113],{"class":112},[82,100008,100009],{"class":88},"100\n",[19,100011,100012],{},"⑧数组复制copy()",[73,100014,100016],{"className":75,"code":100015,"language":77,"meta":78,"style":78},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[32,100017,100018,100023,100033,100038],{"__ignoreMap":78},[82,100019,100020],{"class":84,"line":85},[82,100021,100022],{"class":2828},"#数组复制\n",[82,100024,100025,100028,100030],{"class":84,"line":157},[82,100026,100027],{"class":92},"copy_a",[82,100029,113],{"class":112},[82,100031,100032],{"class":92},"np.copy(sub_a)\n",[82,100034,100035],{"class":84,"line":404},[82,100036,100037],{"class":2828},"#修改copy_a后不影响原数组\n",[82,100039,100040,100043,100045,100047,100049,100051,100053],{"class":84,"line":413},[82,100041,100042],{"class":92},"copy_a[",[82,100044,2244],{"class":88},[82,100046,3136],{"class":92},[82,100048,2244],{"class":88},[82,100050,3689],{"class":92},[82,100052,113],{"class":112},[82,100054,100009],{"class":88},[19,100056,100057],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2671,100059,100060],{},"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":78,"searchDepth":157,"depth":157,"links":100062},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99579,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100069,"title":100070,"body":100071,"description":2699,"extension":2700,"meta":100563,"navigation":485,"path":100564,"seo":100565,"stem":100566,"__hash__":100567},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100072,"toc":100555},[100073,100076,100080,100083,100086,100139,100142,100167,100170,100189,100209,100212,100228,100232,100278,100282,100324,100328,100331,100334,100337,100340,100343,100405,100465,100469,100472,100529,100533,100538,100547,100552],[10,100074,100070],{"id":100075},"_5改变数组的维度",[14,100077,100079],{"id":100078},"_51-使用reshape","5.1 使用reshape()",[19,100081,100082],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,100084,100085],{},"①一维数组转换为二维数组",[73,100087,100089],{"className":75,"code":100088,"language":77,"meta":78,"style":78},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[32,100090,100091,100107,100112,100117,100122],{"__ignoreMap":78},[82,100092,100093,100095,100097,100099,100101,100103,100105],{"class":84,"line":85},[82,100094,323],{"class":92},[82,100096,113],{"class":112},[82,100098,95553],{"class":92},[82,100100,2283],{"class":88},[82,100102,3136],{"class":92},[82,100104,3279],{"class":88},[82,100106,119],{"class":92},[82,100108,100109],{"class":84,"line":157},[82,100110,100111],{"class":2828},"#将一维数组进行转换\n",[82,100113,100114],{"class":84,"line":404},[82,100115,100116],{"class":2828},"#注意点：元素个数不可以变\n",[82,100118,100119],{"class":84,"line":413},[82,100120,100121],{"class":2828},"#转换维度要保持一致，不一致就异常！！！\n",[82,100123,100124,100126,100128,100131,100133,100135,100137],{"class":84,"line":508},[82,100125,95857],{"class":92},[82,100127,113],{"class":112},[82,100129,100130],{"class":92},"a.reshape(",[82,100132,1425],{"class":88},[82,100134,3136],{"class":92},[82,100136,3102],{"class":88},[82,100138,119],{"class":92},[19,100140,100141],{},"②一维数组转换为三维数组",[73,100143,100145],{"className":75,"code":100144,"language":77,"meta":78,"style":78},"aaa=a.reshape(2,3,2)\n",[32,100146,100147],{"__ignoreMap":78},[82,100148,100149,100151,100153,100155,100157,100159,100161,100163,100165],{"class":84,"line":85},[82,100150,98072],{"class":92},[82,100152,113],{"class":112},[82,100154,100130],{"class":92},[82,100156,1425],{"class":88},[82,100158,3136],{"class":92},[82,100160,2841],{"class":88},[82,100162,3136],{"class":92},[82,100164,1425],{"class":88},[82,100166,119],{"class":92},[19,100168,100169],{},"③二维数组转化为一维数组",[73,100171,100173],{"className":75,"code":100172,"language":77,"meta":78,"style":78},"#知道元素个数：\naa.reshape(12)\n",[32,100174,100175,100180],{"__ignoreMap":78},[82,100176,100177],{"class":84,"line":85},[82,100178,100179],{"class":2828},"#知道元素个数：\n",[82,100181,100182,100185,100187],{"class":84,"line":157},[82,100183,100184],{"class":92},"aa.reshape(",[82,100186,3254],{"class":88},[82,100188,119],{"class":92},[73,100190,100192],{"className":75,"code":100191,"language":77,"meta":78,"style":78},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[32,100193,100194,100199],{"__ignoreMap":78},[82,100195,100196],{"class":84,"line":85},[82,100197,100198],{"class":2828},"#不知道元素个数，参数传递-1\n",[82,100200,100201,100203,100205,100207],{"class":84,"line":157},[82,100202,100184],{"class":92},[82,100204,3288],{"class":112},[82,100206,2283],{"class":88},[82,100208,119],{"class":92},[19,100210,100211],{},"④三维数组转换为一维数组",[73,100213,100215],{"className":75,"code":100214,"language":77,"meta":78,"style":78},"aaa.reshape(-1)\n",[32,100216,100217],{"__ignoreMap":78},[82,100218,100219,100222,100224,100226],{"class":84,"line":85},[82,100220,100221],{"class":92},"aaa.reshape(",[82,100223,3288],{"class":112},[82,100225,2283],{"class":88},[82,100227,119],{"class":92},[14,100229,100231],{"id":100230},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[73,100233,100235],{"className":75,"code":100234,"language":77,"meta":78,"style":78},"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",[32,100236,100237,100264,100269,100273],{"__ignoreMap":78},[82,100238,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257,100259,100261],{"class":84,"line":85},[82,100240,95857],{"class":92},[82,100242,113],{"class":112},[82,100244,95553],{"class":92},[82,100246,2283],{"class":88},[82,100248,3136],{"class":92},[82,100250,3279],{"class":88},[82,100252,95558],{"class":92},[82,100254,1425],{"class":88},[82,100256,3136],{"class":92},[82,100258,3102],{"class":88},[82,100260,3187],{"class":92},[82,100262,100263],{"class":2828},"#转换为2行6列的数组\n",[82,100265,100266],{"class":84,"line":157},[82,100267,100268],{"class":92},"aa.revel()\n",[82,100270,100271],{"class":84,"line":404},[82,100272,96115],{"class":2828},[82,100274,100275],{"class":84,"line":413},[82,100276,100277],{"class":2828},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100279,100281],{"id":100280},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[73,100283,100285],{"className":75,"code":100284,"language":77,"meta":78,"style":78},"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",[32,100286,100287,100311,100316,100320],{"__ignoreMap":78},[82,100288,100289,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309],{"class":84,"line":85},[82,100290,95857],{"class":92},[82,100292,113],{"class":112},[82,100294,95553],{"class":92},[82,100296,2283],{"class":88},[82,100298,3136],{"class":92},[82,100300,3279],{"class":88},[82,100302,95558],{"class":92},[82,100304,1425],{"class":88},[82,100306,3136],{"class":92},[82,100308,3102],{"class":88},[82,100310,119],{"class":92},[82,100312,100313],{"class":84,"line":157},[82,100314,100315],{"class":92},"aa.flatten()\n",[82,100317,100318],{"class":84,"line":404},[82,100319,96115],{"class":2828},[82,100321,100322],{"class":84,"line":413},[82,100323,100277],{"class":2828},[14,100325,100327],{"id":100326},"_54-使用resize","5.4 使用resize()",[19,100329,100330],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100332,100333],{},"通过resize方法可以改变数组的维度",[19,100335,100336],{},"#resize修改数组维度",[19,100338,100339],{},"#以元组的形式指定形状",[19,100341,100342],{},"#改变的是原数组",[73,100344,100346],{"className":75,"code":100345,"language":77,"meta":78,"style":78},"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",[32,100347,100348,100364,100384,100397,100401],{"__ignoreMap":78},[82,100349,100350,100352,100354,100356,100358,100360,100362],{"class":84,"line":85},[82,100351,323],{"class":92},[82,100353,113],{"class":112},[82,100355,95553],{"class":92},[82,100357,2283],{"class":88},[82,100359,3136],{"class":92},[82,100361,3279],{"class":88},[82,100363,119],{"class":92},[82,100365,100366,100369,100371,100373,100375,100377,100379,100381],{"class":84,"line":157},[82,100367,100368],{"class":92},"a.shape",[82,100370,113],{"class":112},[82,100372,93],{"class":92},[82,100374,1425],{"class":88},[82,100376,3136],{"class":92},[82,100378,3102],{"class":88},[82,100380,3187],{"class":92},[82,100382,100383],{"class":2828},"#改变了原数组\n",[82,100385,100386,100388,100390,100393,100395],{"class":84,"line":404},[82,100387,323],{"class":92},[82,100389,113],{"class":112},[82,100391,100392],{"class":92},"resize((",[82,100394,3254],{"class":88},[82,100396,33074],{"class":92},[82,100398,100399],{"class":84,"line":413},[82,100400,96115],{"class":2828},[82,100402,100403],{"class":84,"line":508},[82,100404,100277],{"class":2828},[73,100406,100408],{"className":75,"code":100407,"language":77,"meta":78,"style":78},"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",[32,100409,100410,100423,100427,100431,100436,100441,100446,100451,100456,100461],{"__ignoreMap":78},[82,100411,100412,100415,100417,100419,100421],{"class":84,"line":85},[82,100413,100414],{"class":92},"a.resize((",[82,100416,3102],{"class":88},[82,100418,3136],{"class":92},[82,100420,1425],{"class":88},[82,100422,33074],{"class":92},[82,100424,100425],{"class":84,"line":157},[82,100426,96115],{"class":2828},[82,100428,100429],{"class":84,"line":404},[82,100430,96479],{"class":96},[82,100432,100433],{"class":84,"line":413},[82,100434,100435],{"class":96},"array([[ 1,  2],\n",[82,100437,100438],{"class":84,"line":508},[82,100439,100440],{"class":96},"       [ 3,  4],\n",[82,100442,100443],{"class":84,"line":513},[82,100444,100445],{"class":96},"       [ 5,  6],\n",[82,100447,100448],{"class":84,"line":1388},[82,100449,100450],{"class":96},"       [ 7,  8],\n",[82,100452,100453],{"class":84,"line":1394},[82,100454,100455],{"class":96},"       [ 9, 10],\n",[82,100457,100458],{"class":84,"line":1399},[82,100459,100460],{"class":96},"       [11, 12]])\n",[82,100462,100463],{"class":84,"line":1430},[82,100464,96479],{"class":96},[14,100466,100468],{"id":100467},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100470,100471],{},"改变了原数组",[73,100473,100475],{"className":75,"code":100474,"language":77,"meta":78,"style":78},"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",[32,100476,100477,100493,100509,100513,100517,100521,100525],{"__ignoreMap":78},[82,100478,100479,100481,100483,100485,100487,100489,100491],{"class":84,"line":85},[82,100480,323],{"class":92},[82,100482,113],{"class":112},[82,100484,95553],{"class":92},[82,100486,2283],{"class":88},[82,100488,3136],{"class":92},[82,100490,3279],{"class":88},[82,100492,119],{"class":92},[82,100494,100495,100497,100499,100501,100503,100505,100507],{"class":84,"line":157},[82,100496,100368],{"class":92},[82,100498,113],{"class":112},[82,100500,93],{"class":92},[82,100502,1425],{"class":88},[82,100504,3136],{"class":92},[82,100506,3102],{"class":88},[82,100508,119],{"class":92},[82,100510,100511],{"class":84,"line":404},[82,100512,96115],{"class":2828},[82,100514,100515],{"class":84,"line":413},[82,100516,96479],{"class":96},[82,100518,100519],{"class":84,"line":508},[82,100520,99739],{"class":96},[82,100522,100523],{"class":84,"line":513},[82,100524,99744],{"class":96},[82,100526,100527],{"class":84,"line":1388},[82,100528,96479],{"class":96},[14,100530,100532],{"id":100531},"_56-重要比较","5.6 重要比较：",[19,100534,100535],{},[4078,100536],{"alt":78,"src":100537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100539,100540,100541,100543,100544,100546],{},"口诀：NumPy 函数要么用 ",[32,100542,98514],{},"，要么用 ",[32,100545,34068],{},"，创建结构用 shape，造数据用 size",[19,100548,100549],{},[4078,100550],{"alt":78,"src":100551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2671,100553,100554],{},"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":78,"searchDepth":157,"depth":157,"links":100556},[100557,100558,100559,100560,100561,100562],{"id":100078,"depth":157,"text":100079},{"id":100230,"depth":157,"text":100231},{"id":100280,"depth":157,"text":100281},{"id":100326,"depth":157,"text":100327},{"id":100467,"depth":157,"text":100468},{"id":100531,"depth":157,"text":100532},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100070,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100569,"title":100570,"body":100571,"description":2699,"extension":2700,"meta":101643,"navigation":485,"path":101644,"seo":101645,"stem":101646,"__hash__":101647},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100572,"toc":101637},[100573,100576,100580,100583,100586,100589,100654,100657,100697,100700,100782,100785,100790,100812,100814,100819,100824,100827,100830,100985,100988,101190,101194,101197,101200,101268,101270,101275,101278,101281,101361,101365,101368,101370,101443,101445,101450,101452,101532,101536,101539,101542,101545,101548,101551,101554,101634],[10,100574,100570],{"id":100575},"_6数组的拼接",[14,100577,100579],{"id":100578},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100581,100582],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100584,100585],{},"函数内部传两个数列构成的数列或者元组",[19,100587,100588],{},"①一维数组的拼接",[73,100590,100592],{"className":75,"code":100591,"language":77,"meta":78,"style":78},"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",[32,100593,100594,100614,100634,100639,100644,100649],{"__ignoreMap":78},[82,100595,100596,100598,100600,100602,100604,100606,100608,100610,100612],{"class":84,"line":85},[82,100597,323],{"class":92},[82,100599,113],{"class":112},[82,100601,95575],{"class":92},[82,100603,2283],{"class":88},[82,100605,3136],{"class":92},[82,100607,1425],{"class":88},[82,100609,3136],{"class":92},[82,100611,2841],{"class":88},[82,100613,7252],{"class":92},[82,100615,100616,100618,100620,100622,100624,100626,100628,100630,100632],{"class":84,"line":157},[82,100617,3021],{"class":92},[82,100619,113],{"class":112},[82,100621,95575],{"class":92},[82,100623,3051],{"class":88},[82,100625,3136],{"class":92},[82,100627,3077],{"class":88},[82,100629,3136],{"class":92},[82,100631,3102],{"class":88},[82,100633,7252],{"class":92},[82,100635,100636],{"class":84,"line":404},[82,100637,100638],{"class":2828},"#调用concatenate进行数组拼接\n",[82,100640,100641],{"class":84,"line":413},[82,100642,100643],{"class":92},"np.concatenate((a,b))\n",[82,100645,100646],{"class":84,"line":508},[82,100647,100648],{"class":2828},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[82,100650,100651],{"class":84,"line":513},[82,100652,100653],{"class":2828},"#np.concatenate([a,b])\n",[19,100655,100656],{},"②一维多个数组拼接",[73,100658,100660],{"className":75,"code":100659,"language":77,"meta":78,"style":78},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[32,100661,100662,100667,100687,100692],{"__ignoreMap":78},[82,100663,100664],{"class":84,"line":85},[82,100665,100666],{"class":2828},"#也可以多个数组进行拼接\n",[82,100668,100669,100671,100673,100675,100677,100679,100681,100683,100685],{"class":84,"line":157},[82,100670,3046],{"class":92},[82,100672,113],{"class":112},[82,100674,95575],{"class":92},[82,100676,440],{"class":88},[82,100678,3136],{"class":92},[82,100680,3229],{"class":88},[82,100682,3136],{"class":92},[82,100684,3279],{"class":88},[82,100686,7252],{"class":92},[82,100688,100689],{"class":84,"line":404},[82,100690,100691],{"class":92},"c\n",[82,100693,100694],{"class":84,"line":413},[82,100695,100696],{"class":92},"np.concatenate((a,b,c))\n",[19,100698,100699],{},"③二维数组拼接",[73,100701,100703],{"className":75,"code":100702,"language":77,"meta":78,"style":78},"#二维数组使用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",[32,100704,100705,100710,100734,100759,100764,100769],{"__ignoreMap":78},[82,100706,100707],{"class":84,"line":85},[82,100708,100709],{"class":2828},"#二维数组使用concatenate进行拼接\n",[82,100711,100712,100714,100716,100718,100720,100722,100724,100726,100728,100730,100732],{"class":84,"line":157},[82,100713,95857],{"class":92},[82,100715,113],{"class":112},[82,100717,95553],{"class":92},[82,100719,2283],{"class":88},[82,100721,3136],{"class":92},[82,100723,3279],{"class":88},[82,100725,95558],{"class":92},[82,100727,2841],{"class":88},[82,100729,3136],{"class":92},[82,100731,3051],{"class":88},[82,100733,119],{"class":92},[82,100735,100736,100739,100741,100743,100745,100747,100749,100751,100753,100755,100757],{"class":84,"line":404},[82,100737,100738],{"class":92},"bb",[82,100740,113],{"class":112},[82,100742,95553],{"class":92},[82,100744,3095],{"class":88},[82,100746,3136],{"class":92},[82,100748,3395],{"class":88},[82,100750,95558],{"class":92},[82,100752,2841],{"class":88},[82,100754,3136],{"class":92},[82,100756,3051],{"class":88},[82,100758,119],{"class":92},[82,100760,100761],{"class":84,"line":413},[82,100762,100763],{"class":2828},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[82,100765,100766],{"class":84,"line":508},[82,100767,100768],{"class":2828},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[82,100770,100771,100774,100776,100778,100780],{"class":84,"line":513},[82,100772,100773],{"class":92},"np.concatenate((aa,bb),",[82,100775,50078],{"class":108},[82,100777,113],{"class":112},[82,100779,2244],{"class":88},[82,100781,119],{"class":92},[19,100783,100784],{},"结果：",[19,100786,100787],{},[4078,100788],{"alt":78,"src":100789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[73,100791,100793],{"className":75,"code":100792,"language":77,"meta":78,"style":78},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[32,100794,100795,100800],{"__ignoreMap":78},[82,100796,100797],{"class":84,"line":85},[82,100798,100799],{"class":2828},"#指定axis为1进行拼接\n",[82,100801,100802,100804,100806,100808,100810],{"class":84,"line":157},[82,100803,100773],{"class":92},[82,100805,50078],{"class":108},[82,100807,113],{"class":112},[82,100809,2283],{"class":88},[82,100811,119],{"class":92},[19,100813,100784],{},[19,100815,100816],{},[4078,100817],{"alt":78,"src":100818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100820,100821],{},[2913,100822,100823],{},"二维数组总结：0竖着方向，1横着方向",[19,100825,100826],{},"④三维数组拼接",[19,100828,100829],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[73,100831,100833],{"className":75,"code":100832,"language":77,"meta":78,"style":78},"#两个三行六列\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",[32,100834,100835,100840,100868,100898,100903,100920,100925,100930,100935,100952,100957,100962,100967,100980],{"__ignoreMap":78},[82,100836,100837],{"class":84,"line":85},[82,100838,100839],{"class":2828},"#两个三行六列\n",[82,100841,100842,100844,100846,100848,100850,100852,100854,100856,100858,100860,100862,100864,100866],{"class":84,"line":157},[82,100843,98072],{"class":92},[82,100845,113],{"class":112},[82,100847,95553],{"class":92},[82,100849,2283],{"class":88},[82,100851,3136],{"class":92},[82,100853,3083],{"class":88},[82,100855,95558],{"class":92},[82,100857,1425],{"class":88},[82,100859,3136],{"class":92},[82,100861,2841],{"class":88},[82,100863,3136],{"class":92},[82,100865,3102],{"class":88},[82,100867,119],{"class":92},[82,100869,100870,100873,100875,100877,100879,100881,100884,100886,100888,100890,100892,100894,100896],{"class":84,"line":404},[82,100871,100872],{"class":92},"bbb",[82,100874,113],{"class":112},[82,100876,95553],{"class":92},[82,100878,3095],{"class":88},[82,100880,3136],{"class":92},[82,100882,100883],{"class":88},"137",[82,100885,95558],{"class":92},[82,100887,1425],{"class":88},[82,100889,3136],{"class":92},[82,100891,2841],{"class":88},[82,100893,3136],{"class":92},[82,100895,3102],{"class":88},[82,100897,119],{"class":92},[82,100899,100900],{"class":84,"line":413},[82,100901,100902],{"class":2828},"#axis=0\n",[82,100904,100905,100907,100909,100912,100914,100916,100918],{"class":84,"line":508},[82,100906,3446],{"class":92},[82,100908,113],{"class":112},[82,100910,100911],{"class":92},"np.concatenate((aaa,bbb),",[82,100913,50078],{"class":108},[82,100915,113],{"class":112},[82,100917,2244],{"class":88},[82,100919,119],{"class":92},[82,100921,100922],{"class":84,"line":513},[82,100923,100924],{"class":92},"s.shape\n",[82,100926,100927],{"class":84,"line":1388},[82,100928,100929],{"class":2828},"#输出：(4,3,6)\n",[82,100931,100932],{"class":84,"line":1394},[82,100933,100934],{"class":2828},"#axis=1\n",[82,100936,100937,100940,100942,100944,100946,100948,100950],{"class":84,"line":1399},[82,100938,100939],{"class":92},"ss",[82,100941,113],{"class":112},[82,100943,100911],{"class":92},[82,100945,50078],{"class":108},[82,100947,113],{"class":112},[82,100949,2283],{"class":88},[82,100951,119],{"class":92},[82,100953,100954],{"class":84,"line":1430},[82,100955,100956],{"class":92},"ss.shape\n",[82,100958,100959],{"class":84,"line":1818},[82,100960,100961],{"class":2828},"#输出：(2,6,6)\n",[82,100963,100964],{"class":84,"line":2082},[82,100965,100966],{"class":2828},"#axis=2\n",[82,100968,100969,100971,100973,100975,100977],{"class":84,"line":2233},[82,100970,100911],{"class":92},[82,100972,50078],{"class":108},[82,100974,113],{"class":112},[82,100976,1425],{"class":88},[82,100978,100979],{"class":92},").shape\n",[82,100981,100982],{"class":84,"line":2255},[82,100983,100984],{"class":2828},"#输出：（2，3，12）\n",[19,100986,100987],{},"⑤四维数组拼接",[73,100989,100991],{"className":75,"code":100990,"language":77,"meta":78,"style":78},"#两个三行六列\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",[32,100992,100993,100997,101025,101053,101078,101104,101108,101121,101126,101130,101142,101147,101151,101163,101168,101173,101185],{"__ignoreMap":78},[82,100994,100995],{"class":84,"line":85},[82,100996,100839],{"class":2828},[82,100998,100999,101001,101003,101005,101007,101009,101011,101013,101015,101017,101019,101021,101023],{"class":84,"line":157},[82,101000,98072],{"class":92},[82,101002,113],{"class":112},[82,101004,95553],{"class":92},[82,101006,2283],{"class":88},[82,101008,3136],{"class":92},[82,101010,3083],{"class":88},[82,101012,95558],{"class":92},[82,101014,1425],{"class":88},[82,101016,3136],{"class":92},[82,101018,2841],{"class":88},[82,101020,3136],{"class":92},[82,101022,3102],{"class":88},[82,101024,119],{"class":92},[82,101026,101027,101029,101031,101033,101035,101037,101039,101041,101043,101045,101047,101049,101051],{"class":84,"line":404},[82,101028,100872],{"class":92},[82,101030,113],{"class":112},[82,101032,95553],{"class":92},[82,101034,3095],{"class":88},[82,101036,3136],{"class":92},[82,101038,100883],{"class":88},[82,101040,95558],{"class":92},[82,101042,1425],{"class":88},[82,101044,3136],{"class":92},[82,101046,2841],{"class":88},[82,101048,3136],{"class":92},[82,101050,3102],{"class":88},[82,101052,119],{"class":92},[82,101054,101055,101058,101060,101062,101064,101066,101068,101070,101072,101074,101076],{"class":84,"line":413},[82,101056,101057],{"class":92},"aaaa",[82,101059,113],{"class":112},[82,101061,100221],{"class":92},[82,101063,1425],{"class":88},[82,101065,3136],{"class":92},[82,101067,2841],{"class":88},[82,101069,3136],{"class":92},[82,101071,2841],{"class":88},[82,101073,3136],{"class":92},[82,101075,1425],{"class":88},[82,101077,119],{"class":92},[82,101079,101080,101083,101085,101088,101090,101092,101094,101096,101098,101100,101102],{"class":84,"line":508},[82,101081,101082],{"class":92},"bbbb",[82,101084,113],{"class":112},[82,101086,101087],{"class":92},"bbb.reshape(",[82,101089,1425],{"class":88},[82,101091,3136],{"class":92},[82,101093,2841],{"class":88},[82,101095,3136],{"class":92},[82,101097,2841],{"class":88},[82,101099,3136],{"class":92},[82,101101,1425],{"class":88},[82,101103,119],{"class":92},[82,101105,101106],{"class":84,"line":513},[82,101107,100902],{"class":2828},[82,101109,101110,101113,101115,101117,101119],{"class":84,"line":1388},[82,101111,101112],{"class":92},"np.concatenate((aaaa,bbbb),",[82,101114,50078],{"class":108},[82,101116,113],{"class":112},[82,101118,2244],{"class":88},[82,101120,100979],{"class":92},[82,101122,101123],{"class":84,"line":1394},[82,101124,101125],{"class":2828},"#结果：（4，3，3，2）\n",[82,101127,101128],{"class":84,"line":1399},[82,101129,100934],{"class":2828},[82,101131,101132,101134,101136,101138,101140],{"class":84,"line":1430},[82,101133,101112],{"class":92},[82,101135,50078],{"class":108},[82,101137,113],{"class":112},[82,101139,2283],{"class":88},[82,101141,100979],{"class":92},[82,101143,101144],{"class":84,"line":1818},[82,101145,101146],{"class":2828},"#结果：（2，6，3，2）\n",[82,101148,101149],{"class":84,"line":2082},[82,101150,100966],{"class":2828},[82,101152,101153,101155,101157,101159,101161],{"class":84,"line":2233},[82,101154,101112],{"class":92},[82,101156,50078],{"class":108},[82,101158,113],{"class":112},[82,101160,1425],{"class":88},[82,101162,100979],{"class":92},[82,101164,101165],{"class":84,"line":2255},[82,101166,101167],{"class":2828},"#结果：（2，3，6，2）\n",[82,101169,101170],{"class":84,"line":2260},[82,101171,101172],{"class":2828},"#axis=3\n",[82,101174,101175,101177,101179,101181,101183],{"class":84,"line":2298},[82,101176,101112],{"class":92},[82,101178,50078],{"class":108},[82,101180,113],{"class":112},[82,101182,2841],{"class":88},[82,101184,100979],{"class":92},[82,101186,101187],{"class":84,"line":2303},[82,101188,101189],{"class":2828},"#结果：（2，3，3，4）\n",[14,101191,101193],{"id":101192},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,101195,101196],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,101198,101199],{},"①二维数组",[73,101201,101203],{"className":75,"code":101202,"language":77,"meta":78,"style":78},"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",[32,101204,101205,101229,101253,101258,101263],{"__ignoreMap":78},[82,101206,101207,101209,101211,101213,101215,101217,101219,101221,101223,101225,101227],{"class":84,"line":85},[82,101208,95857],{"class":92},[82,101210,113],{"class":112},[82,101212,95553],{"class":92},[82,101214,2283],{"class":88},[82,101216,3136],{"class":92},[82,101218,3279],{"class":88},[82,101220,95558],{"class":92},[82,101222,2841],{"class":88},[82,101224,3136],{"class":92},[82,101226,3051],{"class":88},[82,101228,119],{"class":92},[82,101230,101231,101233,101235,101237,101239,101241,101243,101245,101247,101249,101251],{"class":84,"line":157},[82,101232,100738],{"class":92},[82,101234,113],{"class":112},[82,101236,95553],{"class":92},[82,101238,3095],{"class":88},[82,101240,3136],{"class":92},[82,101242,3395],{"class":88},[82,101244,95558],{"class":92},[82,101246,2841],{"class":88},[82,101248,3136],{"class":92},[82,101250,3051],{"class":88},[82,101252,119],{"class":92},[82,101254,101255],{"class":84,"line":404},[82,101256,101257],{"class":92},"np.hstack((aa,bb))\n",[82,101259,101260],{"class":84,"line":413},[82,101261,101262],{"class":2828},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[82,101264,101265],{"class":84,"line":508},[82,101266,101267],{"class":2828},"#np.hstack([aa,bb])\n",[19,101269,100784],{},[19,101271,101272],{},[4078,101273],{"alt":78,"src":101274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,101276,101277],{},"等效于concatenate()函数中axis=1时的情况",[19,101279,101280],{},"②三维数组",[73,101282,101284],{"className":75,"code":101283,"language":77,"meta":78,"style":78},"#两个三行六列\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",[32,101285,101286,101290,101318,101346,101351,101356],{"__ignoreMap":78},[82,101287,101288],{"class":84,"line":85},[82,101289,100839],{"class":2828},[82,101291,101292,101294,101296,101298,101300,101302,101304,101306,101308,101310,101312,101314,101316],{"class":84,"line":157},[82,101293,98072],{"class":92},[82,101295,113],{"class":112},[82,101297,95553],{"class":92},[82,101299,2283],{"class":88},[82,101301,3136],{"class":92},[82,101303,3083],{"class":88},[82,101305,95558],{"class":92},[82,101307,1425],{"class":88},[82,101309,3136],{"class":92},[82,101311,2841],{"class":88},[82,101313,3136],{"class":92},[82,101315,3102],{"class":88},[82,101317,119],{"class":92},[82,101319,101320,101322,101324,101326,101328,101330,101332,101334,101336,101338,101340,101342,101344],{"class":84,"line":404},[82,101321,100872],{"class":92},[82,101323,113],{"class":112},[82,101325,95553],{"class":92},[82,101327,3095],{"class":88},[82,101329,3136],{"class":92},[82,101331,100883],{"class":88},[82,101333,95558],{"class":92},[82,101335,1425],{"class":88},[82,101337,3136],{"class":92},[82,101339,2841],{"class":88},[82,101341,3136],{"class":92},[82,101343,3102],{"class":88},[82,101345,119],{"class":92},[82,101347,101348],{"class":84,"line":413},[82,101349,101350],{"class":2828},"#使用hstack\n",[82,101352,101353],{"class":84,"line":508},[82,101354,101355],{"class":92},"np.hstack((aaa,bbb)).shape\n",[82,101357,101358],{"class":84,"line":513},[82,101359,101360],{"class":2828},"#输出：（2，6，6）\n",[14,101362,101364],{"id":101363},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101366,101367],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101369,101199],{},[73,101371,101373],{"className":75,"code":101372,"language":77,"meta":78,"style":78},"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",[32,101374,101375,101399,101423,101428,101433,101438],{"__ignoreMap":78},[82,101376,101377,101379,101381,101383,101385,101387,101389,101391,101393,101395,101397],{"class":84,"line":85},[82,101378,95857],{"class":92},[82,101380,113],{"class":112},[82,101382,95553],{"class":92},[82,101384,2283],{"class":88},[82,101386,3136],{"class":92},[82,101388,3279],{"class":88},[82,101390,95558],{"class":92},[82,101392,2841],{"class":88},[82,101394,3136],{"class":92},[82,101396,3051],{"class":88},[82,101398,119],{"class":92},[82,101400,101401,101403,101405,101407,101409,101411,101413,101415,101417,101419,101421],{"class":84,"line":157},[82,101402,100738],{"class":92},[82,101404,113],{"class":112},[82,101406,95553],{"class":92},[82,101408,3095],{"class":88},[82,101410,3136],{"class":92},[82,101412,3395],{"class":88},[82,101414,95558],{"class":92},[82,101416,2841],{"class":88},[82,101418,3136],{"class":92},[82,101420,3051],{"class":88},[82,101422,119],{"class":92},[82,101424,101425],{"class":84,"line":404},[82,101426,101427],{"class":2828},"#vstack 垂直方向进行堆叠\n",[82,101429,101430],{"class":84,"line":413},[82,101431,101432],{"class":92},"np.vstack((aa,bb))\n",[82,101434,101435],{"class":84,"line":508},[82,101436,101437],{"class":2828},"#与hstack传的参数类似，等价于：\n",[82,101439,101440],{"class":84,"line":513},[82,101441,101442],{"class":92},"np.vstack([aa,bb])\n",[19,101444,100784],{},[19,101446,101447],{},[4078,101448],{"alt":78,"src":101449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101451,101280],{},[73,101453,101455],{"className":75,"code":101454,"language":77,"meta":78,"style":78},"#两个三行六列\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",[32,101456,101457,101461,101489,101517,101522,101527],{"__ignoreMap":78},[82,101458,101459],{"class":84,"line":85},[82,101460,100839],{"class":2828},[82,101462,101463,101465,101467,101469,101471,101473,101475,101477,101479,101481,101483,101485,101487],{"class":84,"line":157},[82,101464,98072],{"class":92},[82,101466,113],{"class":112},[82,101468,95553],{"class":92},[82,101470,2283],{"class":88},[82,101472,3136],{"class":92},[82,101474,3083],{"class":88},[82,101476,95558],{"class":92},[82,101478,1425],{"class":88},[82,101480,3136],{"class":92},[82,101482,2841],{"class":88},[82,101484,3136],{"class":92},[82,101486,3102],{"class":88},[82,101488,119],{"class":92},[82,101490,101491,101493,101495,101497,101499,101501,101503,101505,101507,101509,101511,101513,101515],{"class":84,"line":404},[82,101492,100872],{"class":92},[82,101494,113],{"class":112},[82,101496,95553],{"class":92},[82,101498,3095],{"class":88},[82,101500,3136],{"class":92},[82,101502,100883],{"class":88},[82,101504,95558],{"class":92},[82,101506,1425],{"class":88},[82,101508,3136],{"class":92},[82,101510,2841],{"class":88},[82,101512,3136],{"class":92},[82,101514,3102],{"class":88},[82,101516,119],{"class":92},[82,101518,101519],{"class":84,"line":413},[82,101520,101521],{"class":2828},"#使用vstack\n",[82,101523,101524],{"class":84,"line":508},[82,101525,101526],{"class":92},"np.vstack((aaa,bbb)).shape\n",[82,101528,101529],{"class":84,"line":513},[82,101530,101531],{"class":2828},"#输出：（4，3，6）\n",[14,101533,101535],{"id":101534},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101537,101538],{},"该方法是三维数组特有的方法",[19,101540,101541],{},"也就是说",[19,101543,101544],{},"一维数组拼接方法用：concatenate()",[19,101546,101547],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101549,101550],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101552,101553],{},"四维数组及多维数组只能用concatenate进行拼接",[73,101555,101557],{"className":75,"code":101556,"language":77,"meta":78,"style":78},"#两个三行六列\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",[32,101558,101559,101563,101591,101619,101624,101629],{"__ignoreMap":78},[82,101560,101561],{"class":84,"line":85},[82,101562,100839],{"class":2828},[82,101564,101565,101567,101569,101571,101573,101575,101577,101579,101581,101583,101585,101587,101589],{"class":84,"line":157},[82,101566,98072],{"class":92},[82,101568,113],{"class":112},[82,101570,95553],{"class":92},[82,101572,2283],{"class":88},[82,101574,3136],{"class":92},[82,101576,3083],{"class":88},[82,101578,95558],{"class":92},[82,101580,1425],{"class":88},[82,101582,3136],{"class":92},[82,101584,2841],{"class":88},[82,101586,3136],{"class":92},[82,101588,3102],{"class":88},[82,101590,119],{"class":92},[82,101592,101593,101595,101597,101599,101601,101603,101605,101607,101609,101611,101613,101615,101617],{"class":84,"line":404},[82,101594,100872],{"class":92},[82,101596,113],{"class":112},[82,101598,95553],{"class":92},[82,101600,3095],{"class":88},[82,101602,3136],{"class":92},[82,101604,100883],{"class":88},[82,101606,95558],{"class":92},[82,101608,1425],{"class":88},[82,101610,3136],{"class":92},[82,101612,2841],{"class":88},[82,101614,3136],{"class":92},[82,101616,3102],{"class":88},[82,101618,119],{"class":92},[82,101620,101621],{"class":84,"line":413},[82,101622,101623],{"class":2828},"#使用dstack\n",[82,101625,101626],{"class":84,"line":508},[82,101627,101628],{"class":92},"np.dstack((aaa,bbb)).shape\n",[82,101630,101631],{"class":84,"line":513},[82,101632,101633],{"class":2828},"#结果：（2，3，12）\n",[2671,101635,101636],{},"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":78,"searchDepth":157,"depth":157,"links":101638},[101639,101640,101641,101642],{"id":100578,"depth":157,"text":100579},{"id":101192,"depth":157,"text":101193},{"id":101363,"depth":157,"text":101364},{"id":101534,"depth":157,"text":101535},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100570,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101649,"title":101650,"body":101651,"description":2699,"extension":2700,"meta":101926,"navigation":485,"path":101927,"seo":101928,"stem":101929,"__hash__":101930},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101652,"toc":101924},[101653,101656,101659,101753,101756,101759,101762,101765,101768,101771,101774,101777,101921],[10,101654,101650],{"id":101655},"_7数组转置",[19,101657,101658],{},"使用transpose()函数",[73,101660,101662],{"className":75,"code":101661,"language":77,"meta":78,"style":78},"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",[32,101663,101664,101674,101698,101703,101708,101713,101718,101726,101730,101734,101739,101744,101749],{"__ignoreMap":78},[82,101665,101666,101668,101670,101672],{"class":84,"line":85},[82,101667,1123],{"class":112},[82,101669,33955],{"class":92},[82,101671,728],{"class":112},[82,101673,33960],{"class":92},[82,101675,101676,101678,101680,101682,101684,101686,101688,101690,101692,101694,101696],{"class":84,"line":157},[82,101677,323],{"class":92},[82,101679,113],{"class":112},[82,101681,34289],{"class":92},[82,101683,2283],{"class":88},[82,101685,3136],{"class":92},[82,101687,3279],{"class":88},[82,101689,95558],{"class":92},[82,101691,3051],{"class":88},[82,101693,3136],{"class":92},[82,101695,2841],{"class":88},[82,101697,119],{"class":92},[82,101699,101700],{"class":84,"line":404},[82,101701,101702],{"class":2828},"#二维数组转置\n",[82,101704,101705],{"class":84,"line":413},[82,101706,101707],{"class":2828},"#调用transpose()函数\n",[82,101709,101710],{"class":84,"line":508},[82,101711,101712],{"class":92},"a.transpose()\n",[82,101714,101715],{"class":84,"line":513},[82,101716,101717],{"class":2828},"#对于二维数组也可以采用.T来实现\n",[82,101719,101720,101723],{"class":84,"line":1388},[82,101721,101722],{"class":92},"a.T",[82,101724,101725],{"class":2828},"#与上述代码一样\n",[82,101727,101728],{"class":84,"line":1394},[82,101729,96115],{"class":2828},[82,101731,101732],{"class":84,"line":1399},[82,101733,96479],{"class":96},[82,101735,101736],{"class":84,"line":1430},[82,101737,101738],{"class":96},"array([[ 1,  4,  7, 10],\n",[82,101740,101741],{"class":84,"line":1818},[82,101742,101743],{"class":96},"       [ 2,  5,  8, 11],\n",[82,101745,101746],{"class":84,"line":2082},[82,101747,101748],{"class":96},"       [ 3,  6,  9, 12]])\n",[82,101750,101751],{"class":84,"line":2233},[82,101752,96479],{"class":96},[19,101754,101755],{},"也可以使用np.transpose()的形式",[19,101757,101758],{},"#多维数组进行转置 np.transpose()",[19,101760,101761],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101763,101764],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101766,101767],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101769,101770],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101772,101773],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101775,101776],{},"四维及以上的数组也是一样的道理",[73,101778,101780],{"className":75,"code":101779,"language":77,"meta":78,"style":78},"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",[32,101781,101782,101810,101815,101820,101825,101843,101848,101880,101885,101890,101895,101916],{"__ignoreMap":78},[82,101783,101784,101786,101788,101790,101792,101794,101796,101798,101800,101802,101804,101806,101808],{"class":84,"line":85},[82,101785,3569],{"class":92},[82,101787,113],{"class":112},[82,101789,95553],{"class":92},[82,101791,2283],{"class":88},[82,101793,3136],{"class":92},[82,101795,3083],{"class":88},[82,101797,95558],{"class":92},[82,101799,2841],{"class":88},[82,101801,3136],{"class":92},[82,101803,3102],{"class":88},[82,101805,3136],{"class":92},[82,101807,1425],{"class":88},[82,101809,119],{"class":92},[82,101811,101812],{"class":84,"line":157},[82,101813,101814],{"class":92},"x.shape\n",[82,101816,101817],{"class":84,"line":404},[82,101818,101819],{"class":2828},"#结果：（3,6,2）\n",[82,101821,101822],{"class":84,"line":413},[82,101823,101824],{"class":2828},"#使用np.transpose()进行转置 变为(2,6,3)\n",[82,101826,101827,101830,101832,101834,101836,101838,101840],{"class":84,"line":508},[82,101828,101829],{"class":92},"np.transpose(x,(",[82,101831,1425],{"class":88},[82,101833,3136],{"class":92},[82,101835,2283],{"class":88},[82,101837,3136],{"class":92},[82,101839,2244],{"class":88},[82,101841,101842],{"class":92},")).shape\n",[82,101844,101845],{"class":84,"line":513},[82,101846,101847],{"class":2828},"#结果：(2,6,3)\n",[82,101849,101850,101852,101854,101856,101858,101860,101862,101864,101866,101868,101870,101872,101874,101876,101878],{"class":84,"line":1388},[82,101851,101057],{"class":92},[82,101853,113],{"class":112},[82,101855,95553],{"class":92},[82,101857,2283],{"class":88},[82,101859,3136],{"class":92},[82,101861,3083],{"class":88},[82,101863,95558],{"class":92},[82,101865,2841],{"class":88},[82,101867,3136],{"class":92},[82,101869,1425],{"class":88},[82,101871,3136],{"class":92},[82,101873,2283],{"class":88},[82,101875,3136],{"class":92},[82,101877,3102],{"class":88},[82,101879,119],{"class":92},[82,101881,101882],{"class":84,"line":1394},[82,101883,101884],{"class":92},"aaaa.shape\n",[82,101886,101887],{"class":84,"line":1399},[82,101888,101889],{"class":2828},"#结果：（3，2，1，6）\n",[82,101891,101892],{"class":84,"line":1430},[82,101893,101894],{"class":2828},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[82,101896,101897,101900,101902,101904,101906,101908,101910,101912,101914],{"class":84,"line":1818},[82,101898,101899],{"class":92},"np.transpose(aaaa,(",[82,101901,2283],{"class":88},[82,101903,3136],{"class":92},[82,101905,1425],{"class":88},[82,101907,3136],{"class":92},[82,101909,2244],{"class":88},[82,101911,3136],{"class":92},[82,101913,2841],{"class":88},[82,101915,101842],{"class":92},[82,101917,101918],{"class":84,"line":2082},[82,101919,101920],{"class":2828},"#结果：(2,1,3,6)\n",[2671,101922,101923],{},"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":78,"searchDepth":157,"depth":157,"links":101925},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101650,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101932,"title":101933,"body":101934,"description":2699,"extension":2700,"meta":102668,"navigation":485,"path":102669,"seo":102670,"stem":102671,"__hash__":102672},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101935,"toc":102666},[101936,101939,101942,101945,101948,101951,101954,101957,101960,102069,102072,102075,102663],[10,101937,101933],{"id":101938},"_8数组分割",[19,101940,101941],{},"split分割",[19,101943,101944],{},"numpy.split(ary,indics_or_sections,axis)",[19,101946,101947],{},"解释：",[19,101949,101950],{},"ary:被分割的数组",[19,101952,101953],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101955,101956],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101958,101959],{},"①一维数组的分割",[73,101961,101963],{"className":75,"code":101962,"language":77,"meta":78,"style":78},"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",[32,101964,101965,101981,101986,101995,101999,102004,102012,102016,102021,102026,102039,102043,102048,102060,102064],{"__ignoreMap":78},[82,101966,101967,101969,101971,101973,101975,101977,101979],{"class":84,"line":85},[82,101968,323],{"class":92},[82,101970,113],{"class":112},[82,101972,95553],{"class":92},[82,101974,2283],{"class":88},[82,101976,3136],{"class":92},[82,101978,3178],{"class":88},[82,101980,119],{"class":92},[82,101982,101983],{"class":84,"line":157},[82,101984,101985],{"class":2828},"#如果传入整数，必须能够平分，否则会报错\n",[82,101987,101988,101991,101993],{"class":84,"line":404},[82,101989,101990],{"class":92},"np.split(a,",[82,101992,1425],{"class":88},[82,101994,119],{"class":92},[82,101996,101997],{"class":84,"line":413},[82,101998,96115],{"class":2828},[82,102000,102001],{"class":84,"line":508},[82,102002,102003],{"class":2828},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[82,102005,102006,102008,102010],{"class":84,"line":513},[82,102007,101990],{"class":92},[82,102009,3051],{"class":88},[82,102011,119],{"class":92},[82,102013,102014],{"class":84,"line":1388},[82,102015,96115],{"class":2828},[82,102017,102018],{"class":84,"line":1394},[82,102019,102020],{"class":2828},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[82,102022,102023],{"class":84,"line":1399},[82,102024,102025],{"class":2828},"#传入数组\n",[82,102027,102028,102031,102033,102035,102037],{"class":84,"line":1430},[82,102029,102030],{"class":92},"np.split(a,[",[82,102032,2841],{"class":88},[82,102034,3136],{"class":92},[82,102036,3077],{"class":88},[82,102038,7252],{"class":92},[82,102040,102041],{"class":84,"line":1818},[82,102042,96115],{"class":2828},[82,102044,102045],{"class":84,"line":2082},[82,102046,102047],{"class":2828},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[82,102049,102050,102052,102054,102056,102058],{"class":84,"line":2233},[82,102051,102030],{"class":92},[82,102053,3077],{"class":88},[82,102055,3136],{"class":92},[82,102057,3127],{"class":88},[82,102059,7252],{"class":92},[82,102061,102062],{"class":84,"line":2255},[82,102063,96115],{"class":2828},[82,102065,102066],{"class":84,"line":2260},[82,102067,102068],{"class":2828},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,102070,102071],{},"②二维数组的分割",[19,102073,102074],{},"使用split()",[73,102076,102078],{"className":75,"code":102077,"language":77,"meta":78,"style":78},"#二维数组分割\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",[32,102079,102080,102085,102109,102114,102123,102127,102131,102136,102141,102146,102151,102156,102161,102166,102170,102183,102187,102191,102195,102199,102203,102208,102213,102218,102222,102227,102243,102247,102251,102256,102261,102266,102271,102276,102281,102286,102291,102296,102301,102306,102311,102316,102321,102326,102331,102336,102341,102345,102349,102369,102373,102377,102382,102387,102392,102397,102402,102407,102412,102417,102422,102427,102432,102437,102442,102447,102452,102457,102462,102467,102471,102476,102485,102489,102493,102497,102501,102505,102509,102513,102517,102521,102530,102534,102538,102542,102546,102550,102554,102558,102562,102566,102570,102574,102578,102582,102586,102590,102594,102598,102602,102606,102610,102614,102627,102631,102635,102639,102643,102647,102651,102655,102659],{"__ignoreMap":78},[82,102081,102082],{"class":84,"line":85},[82,102083,102084],{"class":2828},"#二维数组分割\n",[82,102086,102087,102089,102091,102093,102095,102097,102099,102101,102103,102105,102107],{"class":84,"line":157},[82,102088,95857],{"class":92},[82,102090,113],{"class":112},[82,102092,95553],{"class":92},[82,102094,2283],{"class":88},[82,102096,3136],{"class":92},[82,102098,3083],{"class":88},[82,102100,95558],{"class":92},[82,102102,3102],{"class":88},[82,102104,3136],{"class":92},[82,102106,3102],{"class":88},[82,102108,119],{"class":92},[82,102110,102111],{"class":84,"line":404},[82,102112,102113],{"class":2828},"#默认axis=0  传入整数平均分,按行来的\n",[82,102115,102116,102119,102121],{"class":84,"line":413},[82,102117,102118],{"class":92},"np.split(aa,",[82,102120,2841],{"class":88},[82,102122,119],{"class":92},[82,102124,102125],{"class":84,"line":508},[82,102126,98315],{"class":2828},[82,102128,102129],{"class":84,"line":513},[82,102130,96479],{"class":96},[82,102132,102133],{"class":84,"line":1388},[82,102134,102135],{"class":96},"[array([[ 1,  2,  3,  4,  5,  6],\n",[82,102137,102138],{"class":84,"line":1394},[82,102139,102140],{"class":96},"        [ 7,  8,  9, 10, 11, 12]]),\n",[82,102142,102143],{"class":84,"line":1399},[82,102144,102145],{"class":96}," array([[13, 14, 15, 16, 17, 18],\n",[82,102147,102148],{"class":84,"line":1430},[82,102149,102150],{"class":96},"        [19, 20, 21, 22, 23, 24]]),\n",[82,102152,102153],{"class":84,"line":1818},[82,102154,102155],{"class":96}," array([[25, 26, 27, 28, 29, 30],\n",[82,102157,102158],{"class":84,"line":2082},[82,102159,102160],{"class":96},"        [31, 32, 33, 34, 35, 36]])]\n",[82,102162,102163],{"class":84,"line":2233},[82,102164,102165],{"class":96}," '''\n",[82,102167,102168],{"class":84,"line":2255},[82,102169,102025],{"class":2828},[82,102171,102172,102175,102177,102179,102181],{"class":84,"line":2260},[82,102173,102174],{"class":92},"np.split(aa,[",[82,102176,1425],{"class":88},[82,102178,3136],{"class":92},[82,102180,3077],{"class":88},[82,102182,7252],{"class":92},[82,102184,102185],{"class":84,"line":2298},[82,102186,98315],{"class":2828},[82,102188,102189],{"class":84,"line":2303},[82,102190,96479],{"class":96},[82,102192,102193],{"class":84,"line":2321},[82,102194,102135],{"class":96},[82,102196,102197],{"class":84,"line":2533},[82,102198,102140],{"class":96},[82,102200,102201],{"class":84,"line":2538},[82,102202,102145],{"class":96},[82,102204,102205],{"class":84,"line":2548},[82,102206,102207],{"class":96},"        [19, 20, 21, 22, 23, 24],\n",[82,102209,102210],{"class":84,"line":2579},[82,102211,102212],{"class":96},"        [25, 26, 27, 28, 29, 30]]),\n",[82,102214,102215],{"class":84,"line":2585},[82,102216,102217],{"class":96}," array([[31, 32, 33, 34, 35, 36]])]\n",[82,102219,102220],{"class":84,"line":4350},[82,102221,96479],{"class":96},[82,102223,102224],{"class":84,"line":4355},[82,102225,102226],{"class":2828},"#axis=1 按照列来分\n",[82,102228,102229,102231,102233,102235,102237,102239,102241],{"class":84,"line":4360},[82,102230,102118],{"class":92},[82,102232,2841],{"class":88},[82,102234,3136],{"class":92},[82,102236,50078],{"class":108},[82,102238,113],{"class":112},[82,102240,2283],{"class":88},[82,102242,119],{"class":92},[82,102244,102245],{"class":84,"line":4365},[82,102246,98315],{"class":2828},[82,102248,102249],{"class":84,"line":4379},[82,102250,96479],{"class":96},[82,102252,102253],{"class":84,"line":4384},[82,102254,102255],{"class":96},"[array([[ 1,  2],\n",[82,102257,102258],{"class":84,"line":5176},[82,102259,102260],{"class":96},"        [ 7,  8],\n",[82,102262,102263],{"class":84,"line":5190},[82,102264,102265],{"class":96},"        [13, 14],\n",[82,102267,102268],{"class":84,"line":5198},[82,102269,102270],{"class":96},"        [19, 20],\n",[82,102272,102273],{"class":84,"line":5203},[82,102274,102275],{"class":96},"        [25, 26],\n",[82,102277,102278],{"class":84,"line":5209},[82,102279,102280],{"class":96},"        [31, 32]]),\n",[82,102282,102283],{"class":84,"line":5215},[82,102284,102285],{"class":96}," array([[ 3,  4],\n",[82,102287,102288],{"class":84,"line":5220},[82,102289,102290],{"class":96},"        [ 9, 10],\n",[82,102292,102293],{"class":84,"line":10539},[82,102294,102295],{"class":96},"        [15, 16],\n",[82,102297,102298],{"class":84,"line":10563},[82,102299,102300],{"class":96},"        [21, 22],\n",[82,102302,102303],{"class":84,"line":10568},[82,102304,102305],{"class":96},"        [27, 28],\n",[82,102307,102308],{"class":84,"line":10574},[82,102309,102310],{"class":96},"        [33, 34]]),\n",[82,102312,102313],{"class":84,"line":10601},[82,102314,102315],{"class":96}," array([[ 5,  6],\n",[82,102317,102318],{"class":84,"line":10606},[82,102319,102320],{"class":96},"        [11, 12],\n",[82,102322,102323],{"class":84,"line":10612},[82,102324,102325],{"class":96},"        [17, 18],\n",[82,102327,102328],{"class":84,"line":10624},[82,102329,102330],{"class":96},"        [23, 24],\n",[82,102332,102333],{"class":84,"line":10636},[82,102334,102335],{"class":96},"        [29, 30],\n",[82,102337,102338],{"class":84,"line":10648},[82,102339,102340],{"class":96},"        [35, 36]])]\n",[82,102342,102343],{"class":84,"line":12307},[82,102344,102165],{"class":96},[82,102346,102347],{"class":84,"line":12332},[82,102348,102025],{"class":2828},[82,102350,102351,102353,102355,102357,102359,102361,102363,102365,102367],{"class":84,"line":12355},[82,102352,102174],{"class":92},[82,102354,2283],{"class":88},[82,102356,3136],{"class":92},[82,102358,1425],{"class":88},[82,102360,44174],{"class":92},[82,102362,50078],{"class":108},[82,102364,113],{"class":112},[82,102366,2283],{"class":88},[82,102368,119],{"class":92},[82,102370,102371],{"class":84,"line":12379},[82,102372,96115],{"class":2828},[82,102374,102375],{"class":84,"line":12384},[82,102376,96479],{"class":96},[82,102378,102379],{"class":84,"line":12389},[82,102380,102381],{"class":96},"[array([[ 1],\n",[82,102383,102384],{"class":84,"line":12394},[82,102385,102386],{"class":96},"        [ 7],\n",[82,102388,102389],{"class":84,"line":12403},[82,102390,102391],{"class":96},"        [13],\n",[82,102393,102394],{"class":84,"line":12408},[82,102395,102396],{"class":96},"        [19],\n",[82,102398,102399],{"class":84,"line":12414},[82,102400,102401],{"class":96},"        [25],\n",[82,102403,102404],{"class":84,"line":12435},[82,102405,102406],{"class":96},"        [31]]),\n",[82,102408,102409],{"class":84,"line":12441},[82,102410,102411],{"class":96}," array([[ 2],\n",[82,102413,102414],{"class":84,"line":12455},[82,102415,102416],{"class":96},"        [ 8],\n",[82,102418,102419],{"class":84,"line":12461},[82,102420,102421],{"class":96},"        [14],\n",[82,102423,102424],{"class":84,"line":12488},[82,102425,102426],{"class":96},"        [20],\n",[82,102428,102429],{"class":84,"line":12497},[82,102430,102431],{"class":96},"        [26],\n",[82,102433,102434],{"class":84,"line":12503},[82,102435,102436],{"class":96},"        [32]]),\n",[82,102438,102439],{"class":84,"line":12511},[82,102440,102441],{"class":96}," array([[ 3,  4,  5,  6],\n",[82,102443,102444],{"class":84,"line":12516},[82,102445,102446],{"class":96},"        [ 9, 10, 11, 12],\n",[82,102448,102449],{"class":84,"line":19189},[82,102450,102451],{"class":96},"        [15, 16, 17, 18],\n",[82,102453,102454],{"class":84,"line":19195},[82,102455,102456],{"class":96},"        [21, 22, 23, 24],\n",[82,102458,102459],{"class":84,"line":19218},[82,102460,102461],{"class":96},"        [27, 28, 29, 30],\n",[82,102463,102464],{"class":84,"line":19224},[82,102465,102466],{"class":96},"        [33, 34, 35, 36]])]\n",[82,102468,102469],{"class":84,"line":19247},[82,102470,96479],{"class":96},[82,102472,102473],{"class":84,"line":19261},[82,102474,102475],{"class":2828},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[82,102477,102478,102481,102483],{"class":84,"line":19281},[82,102479,102480],{"class":92},"np.vsplit(aa,",[82,102482,2841],{"class":88},[82,102484,119],{"class":92},[82,102486,102487],{"class":84,"line":19287},[82,102488,96115],{"class":2828},[82,102490,102491],{"class":84,"line":19298},[82,102492,96479],{"class":96},[82,102494,102495],{"class":84,"line":19321},[82,102496,102135],{"class":96},[82,102498,102499],{"class":84,"line":19343},[82,102500,102140],{"class":96},[82,102502,102503],{"class":84,"line":19348},[82,102504,102145],{"class":96},[82,102506,102507],{"class":84,"line":19354},[82,102508,102150],{"class":96},[82,102510,102511],{"class":84,"line":19368},[82,102512,102155],{"class":96},[82,102514,102515],{"class":84,"line":19381},[82,102516,102160],{"class":96},[82,102518,102519],{"class":84,"line":19386},[82,102520,96479],{"class":96},[82,102522,102523,102526,102528],{"class":84,"line":19400},[82,102524,102525],{"class":92},"np.hsplit(aa,",[82,102527,2841],{"class":88},[82,102529,119],{"class":92},[82,102531,102532],{"class":84,"line":19405},[82,102533,96115],{"class":2828},[82,102535,102536],{"class":84,"line":19411},[82,102537,96479],{"class":96},[82,102539,102540],{"class":84,"line":19416},[82,102541,102255],{"class":96},[82,102543,102544],{"class":84,"line":19430},[82,102545,102260],{"class":96},[82,102547,102548],{"class":84,"line":19435},[82,102549,102265],{"class":96},[82,102551,102552],{"class":84,"line":19440},[82,102553,102270],{"class":96},[82,102555,102556],{"class":84,"line":19454},[82,102557,102275],{"class":96},[82,102559,102560],{"class":84,"line":19466},[82,102561,102280],{"class":96},[82,102563,102564],{"class":84,"line":19471},[82,102565,102285],{"class":96},[82,102567,102568],{"class":84,"line":19484},[82,102569,102290],{"class":96},[82,102571,102572],{"class":84,"line":19489},[82,102573,102295],{"class":96},[82,102575,102576],{"class":84,"line":19494},[82,102577,102300],{"class":96},[82,102579,102580],{"class":84,"line":19499},[82,102581,102305],{"class":96},[82,102583,102584],{"class":84,"line":19512},[82,102585,102310],{"class":96},[82,102587,102588],{"class":84,"line":19517},[82,102589,102315],{"class":96},[82,102591,102592],{"class":84,"line":35202},[82,102593,102320],{"class":96},[82,102595,102596],{"class":84,"line":35208},[82,102597,102325],{"class":96},[82,102599,102600],{"class":84,"line":35214},[82,102601,102330],{"class":96},[82,102603,102604],{"class":84,"line":35220},[82,102605,102335],{"class":96},[82,102607,102608],{"class":84,"line":35226},[82,102609,102340],{"class":96},[82,102611,102612],{"class":84,"line":35237},[82,102613,96479],{"class":96},[82,102615,102616,102619,102621,102623,102625],{"class":84,"line":35243},[82,102617,102618],{"class":92},"np.vsplit(aa,[",[82,102620,1425],{"class":88},[82,102622,3136],{"class":92},[82,102624,3077],{"class":88},[82,102626,7252],{"class":92},[82,102628,102629],{"class":84,"line":35263},[82,102630,96115],{"class":2828},[82,102632,102633],{"class":84,"line":35269},[82,102634,96479],{"class":96},[82,102636,102637],{"class":84,"line":35280},[82,102638,102135],{"class":96},[82,102640,102641],{"class":84,"line":35286},[82,102642,102140],{"class":96},[82,102644,102645],{"class":84,"line":35292},[82,102646,102145],{"class":96},[82,102648,102649],{"class":84,"line":35298},[82,102650,102207],{"class":96},[82,102652,102653],{"class":84,"line":35304},[82,102654,102212],{"class":96},[82,102656,102657],{"class":84,"line":35310},[82,102658,102217],{"class":96},[82,102660,102661],{"class":84,"line":35316},[82,102662,102165],{"class":96},[2671,102664,102665],{},"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":78,"searchDepth":157,"depth":157,"links":102667},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101933,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102674,"title":102675,"body":102676,"description":2699,"extension":2700,"meta":103170,"navigation":485,"path":103171,"seo":103172,"stem":103173,"__hash__":103174},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102677,"toc":103161},[102678,102681,102684,102709,102713,102772,102824,102828,102830,102866,102920,102922,102960,103031,103035,103040,103044,103047,103080,103083,103087,103090,103093,103096,103099,103104,103108,103111,103114,103117,103120,103125,103129,103134,103137,103158],[10,102679,102675],{"id":102680},"_9数学函数",[19,102682,102683],{},"补充回顾：python的列表推导式",[73,102685,102687],{"className":75,"code":102686,"language":77,"meta":78,"style":78},"[1\u002Fi for i in a]\n",[32,102688,102689],{"__ignoreMap":78},[82,102690,102691,102693,102695,102697,102700,102702,102704,102706],{"class":84,"line":85},[82,102692,3639],{"class":92},[82,102694,2283],{"class":88},[82,102696,1147],{"class":112},[82,102698,102699],{"class":92},"i ",[82,102701,597],{"class":112},[82,102703,12029],{"class":92},[82,102705,603],{"class":112},[82,102707,102708],{"class":92}," a]\n",[14,102710,102712],{"id":102711},"_91-求倒数","9.1 求倒数",[73,102714,102716],{"className":75,"code":102715,"language":77,"meta":78,"style":78},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[32,102717,102718,102723,102751,102763],{"__ignoreMap":78},[82,102719,102720],{"class":84,"line":85},[82,102721,102722],{"class":2828},"#数组求倒数\n",[82,102724,102725,102727,102729,102731,102733,102735,102737,102739,102741,102743,102745,102747,102749],{"class":84,"line":157},[82,102726,323],{"class":92},[82,102728,113],{"class":112},[82,102730,3639],{"class":92},[82,102732,2283],{"class":88},[82,102734,3136],{"class":92},[82,102736,1425],{"class":88},[82,102738,3136],{"class":92},[82,102740,2841],{"class":88},[82,102742,3136],{"class":92},[82,102744,3051],{"class":88},[82,102746,3136],{"class":92},[82,102748,3077],{"class":88},[82,102750,875],{"class":92},[82,102752,102753,102755,102757,102760],{"class":84,"line":404},[82,102754,3021],{"class":92},[82,102756,113],{"class":112},[82,102758,102759],{"class":92},"np.array(a)",[82,102761,102762],{"class":2828},"#将列表转换为数组\n",[82,102764,102765,102767,102769],{"class":84,"line":413},[82,102766,2283],{"class":88},[82,102768,1147],{"class":112},[82,102770,102771],{"class":92},"b\n",[73,102773,102775],{"className":75,"code":102774,"language":77,"meta":78,"style":78},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[32,102776,102777,102805,102814,102819],{"__ignoreMap":78},[82,102778,102779,102781,102783,102785,102787,102789,102791,102793,102795,102797,102799,102801,102803],{"class":84,"line":85},[82,102780,323],{"class":92},[82,102782,113],{"class":112},[82,102784,3639],{"class":92},[82,102786,2283],{"class":88},[82,102788,3136],{"class":92},[82,102790,1425],{"class":88},[82,102792,3136],{"class":92},[82,102794,2841],{"class":88},[82,102796,3136],{"class":92},[82,102798,3051],{"class":88},[82,102800,3136],{"class":92},[82,102802,3077],{"class":88},[82,102804,875],{"class":92},[82,102806,102807,102809,102811],{"class":84,"line":157},[82,102808,3021],{"class":92},[82,102810,113],{"class":112},[82,102812,102813],{"class":92},"np.array(a)\n",[82,102815,102816],{"class":84,"line":404},[82,102817,102818],{"class":2828},"#调用numpy中的函数reciprocal()\n",[82,102820,102821],{"class":84,"line":413},[82,102822,102823],{"class":92},"np.reciprocal(b)\n",[14,102825,102827],{"id":102826},"_92-求平方","9.2 求平方",[19,102829,97081],{},[73,102831,102833],{"className":75,"code":102832,"language":77,"meta":78,"style":78},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[32,102834,102835,102840,102845,102861],{"__ignoreMap":78},[82,102836,102837],{"class":84,"line":85},[82,102838,102839],{"class":2828},"#square()，求平方\n",[82,102841,102842],{"class":84,"line":157},[82,102843,102844],{"class":2828},"#一维数组\n",[82,102846,102847,102849,102851,102853,102855,102857,102859],{"class":84,"line":404},[82,102848,323],{"class":92},[82,102850,113],{"class":112},[82,102852,95553],{"class":92},[82,102854,2283],{"class":88},[82,102856,3136],{"class":92},[82,102858,440],{"class":88},[82,102860,119],{"class":92},[82,102862,102863],{"class":84,"line":413},[82,102864,102865],{"class":92},"np.square(a)\n",[73,102867,102869],{"className":75,"code":102868,"language":77,"meta":78,"style":78},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[32,102870,102871,102876,102881,102902],{"__ignoreMap":78},[82,102872,102873],{"class":84,"line":85},[82,102874,102875],{"class":2828},"#或者通过循环遍历的形式来计算\n",[82,102877,102878],{"class":84,"line":157},[82,102879,102880],{"class":2828},"#这是一个列表\n",[82,102882,102883,102886,102888,102890,102892,102894,102896,102899],{"class":84,"line":404},[82,102884,102885],{"class":92},"[i",[82,102887,3212],{"class":112},[82,102889,102699],{"class":92},[82,102891,597],{"class":112},[82,102893,12029],{"class":92},[82,102895,603],{"class":112},[82,102897,102898],{"class":92}," a]",[82,102900,102901],{"class":2828},"#这个求完之后在数列当中\n",[82,102903,102904,102907,102909,102911,102913,102915,102917],{"class":84,"line":413},[82,102905,102906],{"class":92},"np.array([i",[82,102908,3212],{"class":112},[82,102910,102699],{"class":92},[82,102912,597],{"class":112},[82,102914,12029],{"class":92},[82,102916,603],{"class":112},[82,102918,102919],{"class":92}," a])\n",[19,102921,95842],{},[73,102923,102925],{"className":75,"code":102924,"language":77,"meta":78,"style":78},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[32,102926,102927,102931,102955],{"__ignoreMap":78},[82,102928,102929],{"class":84,"line":85},[82,102930,95852],{"class":2828},[82,102932,102933,102935,102937,102939,102941,102943,102945,102947,102949,102951,102953],{"class":84,"line":157},[82,102934,95857],{"class":92},[82,102936,113],{"class":112},[82,102938,95553],{"class":92},[82,102940,2283],{"class":88},[82,102942,3136],{"class":92},[82,102944,3279],{"class":88},[82,102946,95558],{"class":92},[82,102948,3051],{"class":88},[82,102950,3136],{"class":92},[82,102952,2841],{"class":88},[82,102954,119],{"class":92},[82,102956,102957],{"class":84,"line":404},[82,102958,102959],{"class":92},"np.square(aa)\n",[73,102961,102963],{"className":75,"code":102962,"language":77,"meta":78,"style":78},"#传统的方式\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",[32,102964,102965,102970,102979,102995,103011,103026],{"__ignoreMap":78},[82,102966,102967],{"class":84,"line":85},[82,102968,102969],{"class":2828},"#传统的方式\n",[82,102971,102972,102974,102976],{"class":84,"line":157},[82,102973,100738],{"class":92},[82,102975,113],{"class":112},[82,102977,102978],{"class":92},"np.empty_like(aa)\n",[82,102980,102981,102983,102985,102987,102989,102991,102993],{"class":84,"line":404},[82,102982,597],{"class":112},[82,102984,12029],{"class":92},[82,102986,603],{"class":112},[82,102988,35013],{"class":88},[82,102990,93],{"class":92},[82,102992,3051],{"class":88},[82,102994,33362],{"class":92},[82,102996,102997,102999,103001,103003,103005,103007,103009],{"class":84,"line":413},[82,102998,1888],{"class":112},[82,103000,12091],{"class":92},[82,103002,603],{"class":112},[82,103004,35013],{"class":88},[82,103006,93],{"class":92},[82,103008,2841],{"class":88},[82,103010,33362],{"class":92},[82,103012,103013,103016,103018,103021,103023],{"class":84,"line":508},[82,103014,103015],{"class":92},"        bb[i,j]",[82,103017,113],{"class":112},[82,103019,103020],{"class":92},"aa[i,j]",[82,103022,3212],{"class":112},[82,103024,103025],{"class":92},"aa[i,j]\n",[82,103027,103028],{"class":84,"line":513},[82,103029,103030],{"class":92},"bb\n",[14,103032,103034],{"id":103033},"_93-求各元素的符号","9.3 求各元素的符号",[19,103036,103037],{},[4078,103038],{"alt":78,"src":103039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,103041,103043],{"id":103042},"_94-modf函数","9.4 modf函数",[19,103045,103046],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[73,103048,103050],{"className":75,"code":103049,"language":77,"meta":78,"style":78},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[32,103051,103052,103075],{"__ignoreMap":78},[82,103053,103054,103056,103058,103060,103062,103064,103066,103068,103070,103073],{"class":84,"line":85},[82,103055,323],{"class":92},[82,103057,113],{"class":112},[82,103059,95553],{"class":92},[82,103061,3288],{"class":112},[82,103063,440],{"class":88},[82,103065,3136],{"class":92},[82,103067,440],{"class":88},[82,103069,3136],{"class":92},[82,103071,103072],{"class":88},"0.3",[82,103074,119],{"class":92},[82,103076,103077],{"class":84,"line":157},[82,103078,103079],{"class":92},"np.modf(a)\n",[19,103081,103082],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103084,103086],{"id":103085},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,103088,103089],{},"np.cell()",[19,103091,103092],{},"np.floor()",[19,103094,103095],{},"np.rint()",[19,103097,103098],{},"对各元素分别向上取整、向下取整、四舍五入",[19,103100,103101],{},[4078,103102],{"alt":78,"src":103103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103105,103107],{"id":103106},"_96-around函数","9.6 around()函数",[19,103109,103110],{},"around()函数也可以实现对数的小数位数进行操作",[19,103112,103113],{},"其中的参数：",[19,103115,103116],{},"1.要传的数组",[19,103118,103119],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,103121,103122],{},[4078,103123],{"alt":78,"src":103124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103126,103128],{"id":103127},"_97-三角函数","9.7 三角函数",[19,103130,103131],{},[4078,103132],{"alt":78,"src":103133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,103135,103136],{},"引入图像模块非常重要",[73,103138,103140],{"className":75,"code":103139,"language":77,"meta":78,"style":78},"from matplotlib import pyplot as plt\n",[32,103141,103142],{"__ignoreMap":78},[82,103143,103144,103146,103149,103151,103154,103156],{"class":84,"line":85},[82,103145,1117],{"class":112},[82,103147,103148],{"class":92}," matplotlib ",[82,103150,1123],{"class":112},[82,103152,103153],{"class":92}," pyplot ",[82,103155,728],{"class":112},[82,103157,34011],{"class":92},[2671,103159,103160],{},"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":78,"searchDepth":157,"depth":157,"links":103162},[103163,103164,103165,103166,103167,103168,103169],{"id":102711,"depth":157,"text":102712},{"id":102826,"depth":157,"text":102827},{"id":103033,"depth":157,"text":103034},{"id":103042,"depth":157,"text":103043},{"id":103085,"depth":157,"text":103086},{"id":103106,"depth":157,"text":103107},{"id":103127,"depth":157,"text":103128},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102675,"description":2699},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103176,"title":103177,"body":103178,"description":2699,"extension":2700,"meta":103182,"navigation":485,"path":103183,"seo":103184,"stem":103185,"__hash__":103186},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103179,"toc":103180},[],{"title":78,"searchDepth":157,"depth":157,"links":103181},[],{"category":52983},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103177,"description":2699},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103188,"title":103189,"body":103190,"description":78,"extension":2700,"meta":105198,"navigation":485,"path":105199,"seo":105200,"stem":105201,"__hash__":105202},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103191,"toc":105174},[103192,103195,103199,103202,103205,103211,103214,103237,103240,103274,103277,103318,103322,103325,103418,103421,103465,103468,103485,103488,103502,103505,103508,103553,103556,103593,103597,103600,103606,103611,103631,103635,103638,103704,103707,103725,103729,103732,103761,103771,103777,103781,103784,103790,103801,103805,103808,103838,103841,104121,104124,104127,104138,104141,104144,104166,104173,104176,104194,104197,104200,104214,104222,104225,104251,104257,104260,104263,104273,104285,104305,104314,104334,104344,104368,104381,104395,104400,104441,104458,104483,104495,104515,104521,104566,104585,104602,104615,104631,104638,104650,104659,104694,104715,104740,104753,104777,104792,104817,104820,104841,104850,104853,104864,104868,104871,104877,104889,104896,104900,104903,104915,104918,104932,104935,104945,104955,104958,104998,105001,105005,105011,105014,105028,105032,105035,105068,105072,105075,105098,105106,105109,105115,105121,105124,105127,105155,105159,105162,105168,105171],[10,103193,103189],{"id":103194},"_1环境安装与第一个-mujoco-程序",[14,103196,103198],{"id":103197},"_1目标说明","1.目标说明",[19,103200,103201],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,103203,103204],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[73,103206,103209],{"className":103207,"code":103208,"language":7780,"meta":78},[7778],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[32,103210,103208],{"__ignoreMap":78},[19,103212,103213],{},"需要掌握:",[26,103215,103216,103219,103222,103227,103232],{},[29,103217,103218],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,103220,103221],{},"Python 虚拟环境创建",[29,103223,103224],{},[32,103225,103226],{},"mujoco.MjModel",[29,103228,103229],{},[32,103230,103231],{},"mujoco.MjData",[29,103233,103234],{},[32,103235,103236],{},"mujoco.mj_step(model, data)",[19,103238,103239],{},"MuJoCo 中最重要的两个对象:",[278,103241,103242,103252],{},[281,103243,103244],{},[284,103245,103246,103249],{},[287,103247,103248],{"align":26320},"对象",[287,103250,103251],{"align":26320},"含义",[294,103253,103254,103264],{},[284,103255,103256,103261],{},[299,103257,103258],{"align":26320},[32,103259,103260],{},"MjModel",[299,103262,103263],{"align":26320},"模型结构，来自 XML，基本不随时间变化",[284,103265,103266,103271],{},[299,103267,103268],{"align":26320},[32,103269,103270],{},"MjData",[299,103272,103273],{"align":26320},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,103275,103276],{},"可以先用一个类比理解：",[278,103278,103279,103289],{},[281,103280,103281],{},[284,103282,103283,103286],{},[287,103284,103285],{"align":26320},"类比",[287,103287,103288],{"align":26320},"MuJoCo 对象",[294,103290,103291,103300,103309],{},[284,103292,103293,103296],{},[299,103294,103295],{"align":26320},"游戏地图和角色配置",[299,103297,103298],{"align":26320},[32,103299,103260],{},[284,103301,103302,103305],{},[299,103303,103304],{"align":26320},"游戏运行到当前帧的状态",[299,103306,103307],{"align":26320},[32,103308,103270],{},[284,103310,103311,103314],{},[299,103312,103313],{"align":26320},"前进一帧",[299,103315,103316],{"align":26320},[32,103317,103236],{},[14,103319,103321],{"id":103320},"_2环境与依赖安装","2.环境与依赖安装",[19,103323,103324],{},"Fedora 44 系统依赖:",[73,103326,103328],{"className":26406,"code":103327,"language":26408,"meta":78,"style":78},"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",[32,103329,103330,103342,103355,103368,103378,103388,103407],{"__ignoreMap":78},[82,103331,103332,103334,103336,103338,103340],{"class":84,"line":85},[82,103333,27161],{"class":2384},[82,103335,28897],{"class":96},[82,103337,26418],{"class":96},[82,103339,28982],{"class":88},[82,103341,27263],{"class":88},[82,103343,103344,103347,103350,103353],{"class":84,"line":157},[82,103345,103346],{"class":96},"  python3",[82,103348,103349],{"class":96}," python3-pip",[82,103351,103352],{"class":96}," python3-virtualenv",[82,103354,27263],{"class":88},[82,103356,103357,103360,103363,103366],{"class":84,"line":404},[82,103358,103359],{"class":96},"  mesa-libGL",[82,103361,103362],{"class":96}," mesa-libGLU",[82,103364,103365],{"class":96}," mesa-dri-drivers",[82,103367,27263],{"class":88},[82,103369,103370,103373,103376],{"class":84,"line":413},[82,103371,103372],{"class":96},"  libglvnd-glx",[82,103374,103375],{"class":96}," libglvnd-opengl",[82,103377,27263],{"class":88},[82,103379,103380,103383,103386],{"class":84,"line":508},[82,103381,103382],{"class":96},"  glfw",[82,103384,103385],{"class":96}," glfw-devel",[82,103387,27263],{"class":88},[82,103389,103390,103393,103396,103399,103402,103405],{"class":84,"line":513},[82,103391,103392],{"class":96},"  libX11",[82,103394,103395],{"class":96}," libXcursor",[82,103397,103398],{"class":96}," libXi",[82,103400,103401],{"class":96}," libXinerama",[82,103403,103404],{"class":96}," libXrandr",[82,103406,27263],{"class":88},[82,103408,103409,103412,103415],{"class":84,"line":1388},[82,103410,103411],{"class":96},"  gcc",[82,103413,103414],{"class":96}," gcc-c++",[82,103416,103417],{"class":96}," make\n",[19,103419,103420],{},"创建 Python 环境:",[73,103422,103424],{"className":26406,"code":103423,"language":26408,"meta":78,"style":78},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[32,103425,103426,103440,103448],{"__ignoreMap":78},[82,103427,103428,103431,103434,103437],{"class":84,"line":85},[82,103429,103430],{"class":2384},"python3",[82,103432,103433],{"class":88}," -m",[82,103435,103436],{"class":96}," venv",[82,103438,103439],{"class":96}," .venv\n",[82,103441,103442,103445],{"class":84,"line":157},[82,103443,103444],{"class":88},"source",[82,103446,103447],{"class":96}," .venv\u002Fbin\u002Factivate\n",[82,103449,103450,103452,103454,103457,103459,103462],{"class":84,"line":404},[82,103451,77],{"class":2384},[82,103453,103433],{"class":88},[82,103455,103456],{"class":96}," pip",[82,103458,26418],{"class":96},[82,103460,103461],{"class":88}," --upgrade",[82,103463,103464],{"class":96}," pip\n",[19,103466,103467],{},"pip 安装:",[73,103469,103471],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},"pip install \"mujoco>=2.3\" numpy\n",[32,103472,103473],{"__ignoreMap":78},[82,103474,103475,103477,103479,103482],{"class":84,"line":85},[82,103476,26415],{"class":2384},[82,103478,26418],{"class":96},[82,103480,103481],{"class":96}," \"mujoco>=2.3\"",[82,103483,103484],{"class":96}," numpy\n",[19,103486,103487],{},"安装完成后，先做最小检查：",[73,103489,103491],{"className":26406,"code":103490,"language":26408,"meta":78,"style":78},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[32,103492,103493],{"__ignoreMap":78},[82,103494,103495,103497,103499],{"class":84,"line":85},[82,103496,77],{"class":2384},[82,103498,32939],{"class":88},[82,103500,103501],{"class":96}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103503,103504],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103506,103507],{},"conda 安装:",[73,103509,103511],{"className":26406,"code":103510,"language":26408,"meta":78,"style":78},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[32,103512,103513,103533,103543],{"__ignoreMap":78},[82,103514,103515,103517,103519,103521,103524,103527,103530],{"class":84,"line":85},[82,103516,32911],{"class":2384},[82,103518,31757],{"class":96},[82,103520,27700],{"class":88},[82,103522,103523],{"class":96}," mujoco-study",[82,103525,103526],{"class":96}," python=",[82,103528,103529],{"class":88},"3.10",[82,103531,103532],{"class":88}," -y\n",[82,103534,103535,103537,103540],{"class":84,"line":157},[82,103536,32911],{"class":2384},[82,103538,103539],{"class":96}," activate",[82,103541,103542],{"class":96}," mujoco-study\n",[82,103544,103545,103547,103549,103551],{"class":84,"line":404},[82,103546,26415],{"class":2384},[82,103548,26418],{"class":96},[82,103550,103481],{"class":96},[82,103552,103484],{"class":96},[19,103554,103555],{},"版本冲突说明:",[26,103557,103558,103564,103574,103583],{},[29,103559,103560,103561,2611],{},"不要安装 ",[32,103562,103563],{},"mujoco-py",[29,103565,103566,103567,103569,103570,103573],{},"如果旧项目里同时安装了 ",[32,103568,103563],{}," 和 ",[32,103571,103572],{},"mujoco","，建议新建干净虚拟环境。",[29,103575,103576,103579,103580,2611],{},[32,103577,103578],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[32,103581,103582],{},"~\u002F.mujoco\u002Fmujoco210",[29,103584,103585,103586,85093,103589,103592],{},"离屏渲染可能涉及 OpenGL 后端，",[32,103587,103588],{},"MUJOCO_GL=egl",[32,103590,103591],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103594,103596],{"id":103595},"_3核心概念解释","3.核心概念解释",[19,103598,103599],{},"MuJoCo 的基本执行流程:",[73,103601,103604],{"className":103602,"code":103603,"language":7780,"meta":78},[7778],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[32,103605,103603],{"__ignoreMap":78},[19,103607,103608,103610],{},[32,103609,103260],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103612,103613,103615,103616,2973,103619,2973,103622,2973,103625,2973,103628,2611],{},[32,103614,103270],{}," 存放仿真运行时状态，例如 ",[32,103617,103618],{},"data.time",[32,103620,103621],{},"data.qpos",[32,103623,103624],{},"data.qvel",[32,103626,103627],{},"data.ctrl",[32,103629,103630],{},"data.xpos",[65,103632,103634],{"id":103633},"xml-是什么","XML 是什么",[19,103636,103637],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[73,103639,103641],{"className":55627,"code":103640,"language":55629,"meta":78,"style":78},"\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",[32,103642,103643,103665,103696],{"__ignoreMap":78},[82,103644,103645,103647,103649,103651,103653,103655,103658,103660,103663],{"class":84,"line":85},[82,103646,3659],{"class":92},[82,103648,54362],{"class":53863},[82,103650,17506],{"class":2384},[82,103652,113],{"class":92},[82,103654,56051],{"class":96},[82,103656,103657],{"class":2384}," pos",[82,103659,113],{"class":92},[82,103661,103662],{"class":96},"\"0 0 1\"",[82,103664,53870],{"class":92},[82,103666,103667,103669,103672,103674,103676,103679,103681,103683,103685,103688,103690,103693],{"class":84,"line":157},[82,103668,54705],{"class":92},[82,103670,103671],{"class":53863},"geom",[82,103673,17506],{"class":2384},[82,103675,113],{"class":92},[82,103677,103678],{"class":96},"\"box_geom\"",[82,103680,56384],{"class":2384},[82,103682,113],{"class":92},[82,103684,56051],{"class":96},[82,103686,103687],{"class":2384}," size",[82,103689,113],{"class":92},[82,103691,103692],{"class":96},"\"0.1 0.1 0.1\"",[82,103694,103695],{"class":92},"\u002F>\n",[82,103697,103698,103700,103702],{"class":84,"line":404},[82,103699,54347],{"class":92},[82,103701,54362],{"class":53863},[82,103703,53870],{"class":92},[19,103705,103706],{},"这段意思是：",[26,103708,103709,103715,103722],{},[29,103710,103711,103712,103714],{},"创建一个叫 ",[32,103713,56274],{}," 的刚体。",[29,103716,103717,103718,103721],{},"它初始放在 ",[32,103719,103720],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,103723,103724],{},"它里面有一个盒子形状的几何体。",[65,103726,103728],{"id":103727},"timestep-是什么","timestep 是什么",[19,103730,103731],{},"XML 里的：",[73,103733,103735],{"className":55627,"code":103734,"language":55629,"meta":78,"style":78},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[32,103736,103737],{"__ignoreMap":78},[82,103738,103739,103741,103743,103746,103748,103751,103754,103756,103759],{"class":84,"line":85},[82,103740,3659],{"class":92},[82,103742,71722],{"class":53863},[82,103744,103745],{"class":2384}," timestep",[82,103747,113],{"class":92},[82,103749,103750],{"class":96},"\"0.01\"",[82,103752,103753],{"class":2384}," gravity",[82,103755,113],{"class":92},[82,103757,103758],{"class":96},"\"0 0 -9.81\"",[82,103760,103695],{"class":92},[19,103762,103763,103764,103767,103768,103770],{},"表示每调用一次 ",[32,103765,103766],{},"mj_step","，仿真时间前进 ",[32,103769,41551],{}," 秒。循环 100 次，大约就是 1 秒：",[73,103772,103775],{"className":103773,"code":103774,"language":7780,"meta":78},[7778],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[32,103776,103774],{"__ignoreMap":78},[65,103778,103780],{"id":103779},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103782,103783],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[73,103785,103788],{"className":103786,"code":103787,"language":7780,"meta":78},[7778],"x y z qw qx qy qz\n",[32,103789,103787],{"__ignoreMap":78},[19,103791,103792,103793,103796,103797,103800],{},"表示一个自由刚体的位置和姿态。其中 ",[32,103794,103795],{},"x y z"," 是位置，",[32,103798,103799],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103802,103804],{"id":103803},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103806,103807],{},"新建文件:",[73,103809,103811],{"className":26406,"code":103810,"language":26408,"meta":78,"style":78},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[32,103812,103813,103823,103830],{"__ignoreMap":78},[82,103814,103815,103818,103820],{"class":84,"line":85},[82,103816,103817],{"class":2384},"mkdir",[82,103819,31797],{"class":88},[82,103821,103822],{"class":96}," mujoco_tutorial\n",[82,103824,103825,103828],{"class":84,"line":157},[82,103826,103827],{"class":88},"cd",[82,103829,103822],{"class":96},[82,103831,103832,103835],{"class":84,"line":404},[82,103833,103834],{"class":2384},"touch",[82,103836,103837],{"class":96}," ch1_first_sim.py\n",[19,103839,103840],{},"写入:",[73,103842,103844],{"className":75,"code":103843,"language":77,"meta":78,"style":78},"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",[32,103845,103846,103853,103857,103861,103871,103876,103881,103885,103890,103895,103899,103904,103909,103914,103919,103924,103929,103933,103937,103941,103954,103968,103978,103982,103994,104006,104018,104030,104042,104046,104063,104068,104072,104083,104094,104098,104102,104116],{"__ignoreMap":78},[82,103847,103848,103850],{"class":84,"line":85},[82,103849,1123],{"class":112},[82,103851,103852],{"class":92}," mujoco\n",[82,103854,103855],{"class":84,"line":157},[82,103856,486],{"emptyLinePlaceholder":485},[82,103858,103859],{"class":84,"line":404},[82,103860,486],{"emptyLinePlaceholder":485},[82,103862,103863,103866,103868],{"class":84,"line":413},[82,103864,103865],{"class":88},"XML",[82,103867,259],{"class":112},[82,103869,103870],{"class":96}," \"\"\"\n",[82,103872,103873],{"class":84,"line":508},[82,103874,103875],{"class":96},"\u003Cmujoco model=\"first_sim\">\n",[82,103877,103878],{"class":84,"line":513},[82,103879,103880],{"class":96},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[82,103882,103883],{"class":84,"line":1388},[82,103884,486],{"emptyLinePlaceholder":485},[82,103886,103887],{"class":84,"line":1394},[82,103888,103889],{"class":96},"  \u003Cworldbody>\n",[82,103891,103892],{"class":84,"line":1399},[82,103893,103894],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[82,103896,103897],{"class":84,"line":1430},[82,103898,486],{"emptyLinePlaceholder":485},[82,103900,103901],{"class":84,"line":1818},[82,103902,103903],{"class":96},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[82,103905,103906],{"class":84,"line":2082},[82,103907,103908],{"class":96},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[82,103910,103911],{"class":84,"line":2233},[82,103912,103913],{"class":96},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[82,103915,103916],{"class":84,"line":2255},[82,103917,103918],{"class":96},"    \u003C\u002Fbody>\n",[82,103920,103921],{"class":84,"line":2260},[82,103922,103923],{"class":96},"  \u003C\u002Fworldbody>\n",[82,103925,103926],{"class":84,"line":2298},[82,103927,103928],{"class":96},"\u003C\u002Fmujoco>\n",[82,103930,103931],{"class":84,"line":2303},[82,103932,98249],{"class":96},[82,103934,103935],{"class":84,"line":2321},[82,103936,486],{"emptyLinePlaceholder":485},[82,103938,103939],{"class":84,"line":2533},[82,103940,486],{"emptyLinePlaceholder":485},[82,103942,103943,103945,103947,103950,103952],{"class":84,"line":2538},[82,103944,2381],{"class":112},[82,103946,4573],{"class":2384},[82,103948,103949],{"class":92},"() -> ",[82,103951,98237],{"class":88},[82,103953,669],{"class":92},[82,103955,103956,103959,103961,103964,103966],{"class":84,"line":2548},[82,103957,103958],{"class":92},"    model ",[82,103960,113],{"class":112},[82,103962,103963],{"class":92}," mujoco.MjModel.from_xml_string(",[82,103965,103865],{"class":88},[82,103967,119],{"class":92},[82,103969,103970,103973,103975],{"class":84,"line":2579},[82,103971,103972],{"class":92},"    data ",[82,103974,113],{"class":112},[82,103976,103977],{"class":92}," mujoco.MjData(model)\n",[82,103979,103980],{"class":84,"line":2585},[82,103981,486],{"emptyLinePlaceholder":485},[82,103983,103984,103986,103988,103991],{"class":84,"line":4350},[82,103985,611],{"class":88},[82,103987,93],{"class":92},[82,103989,103990],{"class":96},"\"nq:\"",[82,103992,103993],{"class":92},", model.nq)\n",[82,103995,103996,103998,104000,104003],{"class":84,"line":4355},[82,103997,611],{"class":88},[82,103999,93],{"class":92},[82,104001,104002],{"class":96},"\"nv:\"",[82,104004,104005],{"class":92},", model.nv)\n",[82,104007,104008,104010,104012,104015],{"class":84,"line":4360},[82,104009,611],{"class":88},[82,104011,93],{"class":92},[82,104013,104014],{"class":96},"\"nu:\"",[82,104016,104017],{"class":92},", model.nu)\n",[82,104019,104020,104022,104024,104027],{"class":84,"line":4365},[82,104021,611],{"class":88},[82,104023,93],{"class":92},[82,104025,104026],{"class":96},"\"initial time:\"",[82,104028,104029],{"class":92},", data.time)\n",[82,104031,104032,104034,104036,104039],{"class":84,"line":4379},[82,104033,611],{"class":88},[82,104035,93],{"class":92},[82,104037,104038],{"class":96},"\"initial qpos:\"",[82,104040,104041],{"class":92},", data.qpos.copy())\n",[82,104043,104044],{"class":84,"line":4384},[82,104045,486],{"emptyLinePlaceholder":485},[82,104047,104048,104050,104053,104055,104057,104059,104061],{"class":84,"line":5176},[82,104049,1888],{"class":112},[82,104051,104052],{"class":92}," _ ",[82,104054,603],{"class":112},[82,104056,35013],{"class":88},[82,104058,93],{"class":92},[82,104060,3069],{"class":88},[82,104062,33362],{"class":92},[82,104064,104065],{"class":84,"line":5190},[82,104066,104067],{"class":92},"        mujoco.mj_step(model, data)\n",[82,104069,104070],{"class":84,"line":5198},[82,104071,486],{"emptyLinePlaceholder":485},[82,104073,104074,104076,104078,104081],{"class":84,"line":5203},[82,104075,611],{"class":88},[82,104077,93],{"class":92},[82,104079,104080],{"class":96},"\"final time:\"",[82,104082,104029],{"class":92},[82,104084,104085,104087,104089,104092],{"class":84,"line":5209},[82,104086,611],{"class":88},[82,104088,93],{"class":92},[82,104090,104091],{"class":96},"\"final qpos:\"",[82,104093,104041],{"class":92},[82,104095,104096],{"class":84,"line":5215},[82,104097,486],{"emptyLinePlaceholder":485},[82,104099,104100],{"class":84,"line":5220},[82,104101,486],{"emptyLinePlaceholder":485},[82,104103,104104,104106,104108,104111,104114],{"class":84,"line":10539},[82,104105,1237],{"class":112},[82,104107,33796],{"class":88},[82,104109,104110],{"class":112}," ==",[82,104112,104113],{"class":96}," \"__main__\"",[82,104115,669],{"class":92},[82,104117,104118],{"class":84,"line":10563},[82,104119,104120],{"class":92},"    main()\n",[65,104122,104123],{"id":104123},"代码逐段解释",[19,104125,104126],{},"导入库：",[73,104128,104130],{"className":75,"code":104129,"language":77,"meta":78,"style":78},"import mujoco\n",[32,104131,104132],{"__ignoreMap":78},[82,104133,104134,104136],{"class":84,"line":85},[82,104135,1123],{"class":112},[82,104137,103852],{"class":92},[19,104139,104140],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,104142,104143],{},"定义 XML：",[73,104145,104147],{"className":75,"code":104146,"language":77,"meta":78,"style":78},"XML = \"\"\"\n...\n\"\"\"\n",[32,104148,104149,104157,104162],{"__ignoreMap":78},[82,104150,104151,104153,104155],{"class":84,"line":85},[82,104152,103865],{"class":88},[82,104154,259],{"class":112},[82,104156,103870],{"class":96},[82,104158,104159],{"class":84,"line":157},[82,104160,104161],{"class":96},"...\n",[82,104163,104164],{"class":84,"line":404},[82,104165,98249],{"class":96},[19,104167,104168,104169,104172],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[32,104170,104171],{},"freejoint"," 的方块。",[19,104174,104175],{},"编译模型：",[73,104177,104179],{"className":75,"code":104178,"language":77,"meta":78,"style":78},"model = mujoco.MjModel.from_xml_string(XML)\n",[32,104180,104181],{"__ignoreMap":78},[82,104182,104183,104186,104188,104190,104192],{"class":84,"line":85},[82,104184,104185],{"class":92},"model ",[82,104187,113],{"class":112},[82,104189,103963],{"class":92},[82,104191,103865],{"class":88},[82,104193,119],{"class":92},[19,104195,104196],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,104198,104199],{},"创建数据：",[73,104201,104203],{"className":75,"code":104202,"language":77,"meta":78,"style":78},"data = mujoco.MjData(model)\n",[32,104204,104205],{"__ignoreMap":78},[82,104206,104207,104210,104212],{"class":84,"line":85},[82,104208,104209],{"class":92},"data ",[82,104211,113],{"class":112},[82,104213,103977],{"class":92},[19,104215,104216,104218,104219,104221],{},[32,104217,35969],{}," 会保存仿真当前状态。刚创建时，时间是 ",[32,104220,2244],{},"，方块还在初始位置。",[19,104223,104224],{},"推进仿真：",[73,104226,104228],{"className":75,"code":104227,"language":77,"meta":78,"style":78},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[32,104229,104230,104246],{"__ignoreMap":78},[82,104231,104232,104234,104236,104238,104240,104242,104244],{"class":84,"line":85},[82,104233,597],{"class":112},[82,104235,104052],{"class":92},[82,104237,603],{"class":112},[82,104239,35013],{"class":88},[82,104241,93],{"class":92},[82,104243,3069],{"class":88},[82,104245,33362],{"class":92},[82,104247,104248],{"class":84,"line":157},[82,104249,104250],{"class":92},"    mujoco.mj_step(model, data)\n",[19,104252,104253,104254,104256],{},"每次 ",[32,104255,103766],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[65,104258,104259],{"id":104259},"代码逐行细讲",[19,104261,104262],{},"下面把完整代码按新手视角拆开讲。",[73,104264,104265],{"className":75,"code":104129,"language":77,"meta":78,"style":78},[32,104266,104267],{"__ignoreMap":78},[82,104268,104269,104271],{"class":84,"line":85},[82,104270,1123],{"class":112},[82,104272,103852],{"class":92},[19,104274,104275,104277,104278,2973,104280,2973,104282,2611],{},[32,104276,1123],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[32,104279,103226],{},[32,104281,103231],{},[32,104283,104284],{},"mujoco.mj_step",[73,104286,104287],{"className":75,"code":104146,"language":77,"meta":78,"style":78},[32,104288,104289,104297,104301],{"__ignoreMap":78},[82,104290,104291,104293,104295],{"class":84,"line":85},[82,104292,103865],{"class":88},[82,104294,259],{"class":112},[82,104296,103870],{"class":96},[82,104298,104299],{"class":84,"line":157},[82,104300,104161],{"class":96},[82,104302,104303],{"class":84,"line":404},[82,104304,98249],{"class":96},[19,104306,104307,104309,104310,104313],{},[32,104308,103865],{}," 是一个变量名。右边的三引号 ",[32,104311,104312],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[73,104315,104316],{"className":55627,"code":103875,"language":55629,"meta":78,"style":78},[32,104317,104318],{"__ignoreMap":78},[82,104319,104320,104322,104324,104327,104329,104332],{"class":84,"line":85},[82,104321,3659],{"class":92},[82,104323,103572],{"class":53863},[82,104325,104326],{"class":2384}," model",[82,104328,113],{"class":92},[82,104330,104331],{"class":96},"\"first_sim\"",[82,104333,53870],{"class":92},[19,104335,104336,104337,104340,104341,2611],{},"这是 XML 的根标签。",[32,104338,104339],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[32,104342,104343],{},"first_sim",[73,104345,104346],{"className":55627,"code":103734,"language":55629,"meta":78,"style":78},[32,104347,104348],{"__ignoreMap":78},[82,104349,104350,104352,104354,104356,104358,104360,104362,104364,104366],{"class":84,"line":85},[82,104351,3659],{"class":92},[82,104353,71722],{"class":53863},[82,104355,103745],{"class":2384},[82,104357,113],{"class":92},[82,104359,103750],{"class":96},[82,104361,103753],{"class":2384},[82,104363,113],{"class":92},[82,104365,103758],{"class":96},[82,104367,103695],{"class":92},[19,104369,104370,104372,104373,104376,104377,104380],{},[32,104371,71722],{}," 用来设置仿真参数。",[32,104374,104375],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[32,104378,104379],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[73,104382,104384],{"className":55627,"code":104383,"language":55629,"meta":78,"style":78},"\u003Cworldbody>\n",[32,104385,104386],{"__ignoreMap":78},[82,104387,104388,104390,104393],{"class":84,"line":85},[82,104389,3659],{"class":92},[82,104391,104392],{"class":53863},"worldbody",[82,104394,53870],{"class":92},[19,104396,104397,104399],{},[32,104398,104392],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[73,104401,104403],{"className":55627,"code":104402,"language":55629,"meta":78,"style":78},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[32,104404,104405],{"__ignoreMap":78},[82,104406,104407,104409,104411,104413,104415,104418,104420,104422,104425,104427,104429,104432,104434,104436,104439],{"class":84,"line":85},[82,104408,3659],{"class":92},[82,104410,103671],{"class":53863},[82,104412,17506],{"class":2384},[82,104414,113],{"class":92},[82,104416,104417],{"class":96},"\"floor\"",[82,104419,56384],{"class":2384},[82,104421,113],{"class":92},[82,104423,104424],{"class":96},"\"plane\"",[82,104426,103687],{"class":2384},[82,104428,113],{"class":92},[82,104430,104431],{"class":96},"\"2 2 0.1\"",[82,104433,81321],{"class":2384},[82,104435,113],{"class":92},[82,104437,104438],{"class":96},"\"0.8 0.8 0.8 1\"",[82,104440,103695],{"class":92},[19,104442,104443,104444,104446,104447,104450,104451,104454,104455,104457],{},"这行创建地面。",[32,104445,103671],{}," 是几何体。",[32,104448,104449],{},"name=\"floor\""," 是名字。",[32,104452,104453],{},"type=\"plane\""," 表示平面。",[32,104456,57670],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[73,104459,104461],{"className":55627,"code":104460,"language":55629,"meta":78,"style":78},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[32,104462,104463],{"__ignoreMap":78},[82,104464,104465,104467,104469,104471,104473,104475,104477,104479,104481],{"class":84,"line":85},[82,104466,3659],{"class":92},[82,104468,54362],{"class":53863},[82,104470,17506],{"class":2384},[82,104472,113],{"class":92},[82,104474,56051],{"class":96},[82,104476,103657],{"class":2384},[82,104478,113],{"class":92},[82,104480,103662],{"class":96},[82,104482,53870],{"class":92},[19,104484,104485,104486,2611,104488,104491,104492,104494],{},"这行创建一个刚体，名字叫 ",[32,104487,56274],{},[32,104489,104490],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[32,104493,103720],{},"，也就是离地面 1 米高。",[73,104496,104498],{"className":55627,"code":104497,"language":55629,"meta":78,"style":78},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[32,104499,104500],{"__ignoreMap":78},[82,104501,104502,104504,104506,104508,104510,104513],{"class":84,"line":85},[82,104503,3659],{"class":92},[82,104505,104171],{"class":53863},[82,104507,17506],{"class":2384},[82,104509,113],{"class":92},[82,104511,104512],{"class":96},"\"box_free\"",[82,104514,103695],{"class":92},[19,104516,104517,104518,104520],{},"这行很重要。",[32,104519,104171],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[73,104522,104524],{"className":55627,"code":104523,"language":55629,"meta":78,"style":78},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[32,104525,104526],{"__ignoreMap":78},[82,104527,104528,104530,104532,104534,104536,104538,104540,104542,104544,104546,104548,104550,104553,104555,104557,104559,104561,104564],{"class":84,"line":85},[82,104529,3659],{"class":92},[82,104531,103671],{"class":53863},[82,104533,17506],{"class":2384},[82,104535,113],{"class":92},[82,104537,103678],{"class":96},[82,104539,56384],{"class":2384},[82,104541,113],{"class":92},[82,104543,56051],{"class":96},[82,104545,103687],{"class":2384},[82,104547,113],{"class":92},[82,104549,103692],{"class":96},[82,104551,104552],{"class":2384}," mass",[82,104554,113],{"class":92},[82,104556,6274],{"class":96},[82,104558,81321],{"class":2384},[82,104560,113],{"class":92},[82,104562,104563],{"class":96},"\"1 0 0 1\"",[82,104565,103695],{"class":92},[19,104567,104568,104569,104572,104573,104576,104577,104580,104581,104584],{},"这行给 box body 添加一个盒子形状。",[32,104570,104571],{},"type=\"box\""," 表示形状是盒子。",[32,104574,104575],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[32,104578,104579],{},"mass=\"1\""," 表示质量是 1。",[32,104582,104583],{},"rgba=\"1 0 0 1\""," 表示红色。",[73,104586,104588],{"className":75,"code":104587,"language":77,"meta":78,"style":78},"def main() -> None:\n",[32,104589,104590],{"__ignoreMap":78},[82,104591,104592,104594,104596,104598,104600],{"class":84,"line":85},[82,104593,2381],{"class":112},[82,104595,4573],{"class":2384},[82,104597,103949],{"class":92},[82,104599,98237],{"class":88},[82,104601,669],{"class":92},[19,104603,104604,104606,104607,104610,104611,104614],{},[32,104605,2381],{}," 用来定义函数。这里定义了一个叫 ",[32,104608,104609],{},"main"," 的函数。",[32,104612,104613],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[73,104616,104617],{"className":75,"code":104178,"language":77,"meta":78,"style":78},[32,104618,104619],{"__ignoreMap":78},[82,104620,104621,104623,104625,104627,104629],{"class":84,"line":85},[82,104622,104185],{"class":92},[82,104624,113],{"class":112},[82,104626,103963],{"class":92},[82,104628,103865],{"class":88},[82,104630,119],{"class":92},[19,104632,104633,104634,104637],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[32,104635,104636],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[73,104639,104640],{"className":75,"code":104202,"language":77,"meta":78,"style":78},[32,104641,104642],{"__ignoreMap":78},[82,104643,104644,104646,104648],{"class":84,"line":85},[82,104645,104209],{"class":92},[82,104647,113],{"class":112},[82,104649,103977],{"class":92},[19,104651,104652,104653,104655,104656,104658],{},"这行创建仿真数据。",[32,104654,35969],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[32,104657,35969],{}," 都会变化。",[73,104660,104662],{"className":75,"code":104661,"language":77,"meta":78,"style":78},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[32,104663,104664,104674,104684],{"__ignoreMap":78},[82,104665,104666,104668,104670,104672],{"class":84,"line":85},[82,104667,407],{"class":88},[82,104669,93],{"class":92},[82,104671,103990],{"class":96},[82,104673,103993],{"class":92},[82,104675,104676,104678,104680,104682],{"class":84,"line":157},[82,104677,407],{"class":88},[82,104679,93],{"class":92},[82,104681,104002],{"class":96},[82,104683,104005],{"class":92},[82,104685,104686,104688,104690,104692],{"class":84,"line":404},[82,104687,407],{"class":88},[82,104689,93],{"class":92},[82,104691,104014],{"class":96},[82,104693,104017],{"class":92},[19,104695,104696,104698,104699,104702,104703,104706,104707,104710,104711,104714],{},[32,104697,407],{}," 用来输出信息。",[32,104700,104701],{},"model.nq"," 是位置变量数量，",[32,104704,104705],{},"model.nv"," 是速度变量数量，",[32,104708,104709],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[32,104712,104713],{},"nu"," 是 0。",[73,104716,104718],{"className":75,"code":104717,"language":77,"meta":78,"style":78},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[32,104719,104720,104730],{"__ignoreMap":78},[82,104721,104722,104724,104726,104728],{"class":84,"line":85},[82,104723,407],{"class":88},[82,104725,93],{"class":92},[82,104727,104026],{"class":96},[82,104729,104029],{"class":92},[82,104731,104732,104734,104736,104738],{"class":84,"line":157},[82,104733,407],{"class":88},[82,104735,93],{"class":92},[82,104737,104038],{"class":96},[82,104739,104041],{"class":92},[19,104741,104742,104743,104745,104746,104748,104749,104752],{},"这里打印初始时间和初始位置。",[32,104744,103618],{}," 一开始是 0。",[32,104747,103621],{}," 是位置数组。",[32,104750,104751],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[73,104754,104755],{"className":75,"code":104227,"language":77,"meta":78,"style":78},[32,104756,104757,104773],{"__ignoreMap":78},[82,104758,104759,104761,104763,104765,104767,104769,104771],{"class":84,"line":85},[82,104760,597],{"class":112},[82,104762,104052],{"class":92},[82,104764,603],{"class":112},[82,104766,35013],{"class":88},[82,104768,93],{"class":92},[82,104770,3069],{"class":88},[82,104772,33362],{"class":92},[82,104774,104775],{"class":84,"line":157},[82,104776,104250],{"class":92},[19,104778,104779,104781,104782,104785,104786,104788,104789,104791],{},[32,104780,597],{}," 是循环。",[32,104783,104784],{},"range(100)"," 表示循环 100 次。",[32,104787,3740],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[32,104790,103766],{},"，仿真就前进一步。",[73,104793,104795],{"className":75,"code":104794,"language":77,"meta":78,"style":78},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[32,104796,104797,104807],{"__ignoreMap":78},[82,104798,104799,104801,104803,104805],{"class":84,"line":85},[82,104800,407],{"class":88},[82,104802,93],{"class":92},[82,104804,104080],{"class":96},[82,104806,104029],{"class":92},[82,104808,104809,104811,104813,104815],{"class":84,"line":157},[82,104810,407],{"class":88},[82,104812,93],{"class":92},[82,104814,104091],{"class":96},[82,104816,104041],{"class":92},[19,104818,104819],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[73,104821,104823],{"className":75,"code":104822,"language":77,"meta":78,"style":78},"if __name__ == \"__main__\":\n    main()\n",[32,104824,104825,104837],{"__ignoreMap":78},[82,104826,104827,104829,104831,104833,104835],{"class":84,"line":85},[82,104828,1237],{"class":112},[82,104830,33796],{"class":88},[82,104832,104110],{"class":112},[82,104834,104113],{"class":96},[82,104836,669],{"class":92},[82,104838,104839],{"class":84,"line":157},[82,104840,104120],{"class":92},[19,104842,104843,104844,104847,104848,2611],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[32,104845,104846],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[32,104849,104846],{},[19,104851,104852],{},"运行:",[73,104854,104856],{"className":26406,"code":104855,"language":26408,"meta":78,"style":78},"python ch1_first_sim.py\n",[32,104857,104858],{"__ignoreMap":78},[82,104859,104860,104862],{"class":84,"line":85},[82,104861,77],{"class":2384},[82,104863,103837],{"class":96},[14,104865,104867],{"id":104866},"_5运行结果说明","5.运行结果说明",[19,104869,104870],{},"你应该看到类似输出:",[73,104872,104875],{"className":104873,"code":104874,"language":7780,"meta":78},[7778],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[32,104876,104874],{"__ignoreMap":78},[19,104878,104879,104881,104882,104885,104886,2611],{},[32,104880,104171],{}," 有 7 个位置变量: ",[32,104883,104884],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[32,104887,104888],{},"vx vy vz wx wy wz",[19,104890,104891,104892,104895],{},"你还会看到 ",[32,104893,104894],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104897,104899],{"id":104898},"_6验证步骤","6.验证步骤",[19,104901,104902],{},"确认版本:",[73,104904,104905],{"className":26406,"code":103490,"language":26408,"meta":78,"style":78},[32,104906,104907],{"__ignoreMap":78},[82,104908,104909,104911,104913],{"class":84,"line":85},[82,104910,77],{"class":2384},[82,104912,32939],{"class":88},[82,104914,103501],{"class":96},[19,104916,104917],{},"确认导入的是官方 bindings:",[73,104919,104921],{"className":26406,"code":104920,"language":26408,"meta":78,"style":78},"python -c \"import mujoco; print(mujoco)\"\n",[32,104922,104923],{"__ignoreMap":78},[82,104924,104925,104927,104929],{"class":84,"line":85},[82,104926,77],{"class":2384},[82,104928,32939],{"class":88},[82,104930,104931],{"class":96}," \"import mujoco; print(mujoco)\"\n",[19,104933,104934],{},"运行程序:",[73,104936,104937],{"className":26406,"code":104855,"language":26408,"meta":78,"style":78},[32,104938,104939],{"__ignoreMap":78},[82,104940,104941,104943],{"class":84,"line":85},[82,104942,77],{"class":2384},[82,104944,103837],{"class":96},[19,104946,104947,104948,104951,104952,2611],{},"检查 ",[32,104949,104950],{},"final time"," 是否约等于 ",[32,104953,104954],{},"1.0",[19,104956,104957],{},"再做几个小实验：",[26,104959,104960,104970,104978,104991],{},[29,104961,104962,104963,104965,104966,104969],{},"把 ",[32,104964,104490],{}," 改成 ",[32,104967,104968],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104971,104962,104972,104965,104974,104977],{},[32,104973,104379],{},[32,104975,104976],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104979,104962,104980,104965,104982,104985,104986,104988,104989,2611],{},[32,104981,104375],{},[32,104983,104984],{},"timestep=\"0.005\"","，观察 100 步后的 ",[32,104987,104950],{}," 是否变成约 ",[32,104990,37895],{},[29,104992,104993,104994,104997],{},"删除 ",[32,104995,104996],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104999,105000],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105002,105004],{"id":105003},"_7常见错误与解决方案","7.常见错误与解决方案",[65,105006,105008],{"id":105007},"modulenotfounderror-no-module-named-mujoco",[32,105009,105010],{},"ModuleNotFoundError: No module named 'mujoco'",[19,105012,105013],{},"解决:",[73,105015,105017],{"className":26406,"code":105016,"language":26408,"meta":78,"style":78},"pip install \"mujoco>=2.3\"\n",[32,105018,105019],{"__ignoreMap":78},[82,105020,105021,105023,105025],{"class":84,"line":85},[82,105022,26415],{"class":2384},[82,105024,26418],{"class":96},[82,105026,105027],{"class":96}," \"mujoco>=2.3\"\n",[65,105029,105031],{"id":105030},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,105033,105034],{},"先安装系统依赖:",[73,105036,105038],{"className":26406,"code":105037,"language":26408,"meta":78,"style":78},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[32,105039,105040],{"__ignoreMap":78},[82,105041,105042,105044,105046,105048,105050,105053,105055,105058,105060,105063,105065],{"class":84,"line":85},[82,105043,27161],{"class":2384},[82,105045,28897],{"class":96},[82,105047,26418],{"class":96},[82,105049,28982],{"class":88},[82,105051,105052],{"class":96}," mesa-libGL",[82,105054,103365],{"class":96},[82,105056,105057],{"class":96}," glfw",[82,105059,103385],{"class":96},[82,105061,105062],{"class":96}," libX11",[82,105064,103398],{"class":96},[82,105066,105067],{"class":96}," libXrandr\n",[65,105069,105071],{"id":105070},"xml-解析失败","XML 解析失败",[19,105073,105074],{},"检查:",[26,105076,105077,105080,105083,105089],{},[29,105078,105079],{},"标签是否闭合",[29,105081,105082],{},"属性是否带引号",[29,105084,105085,105086],{},"根节点是否是 ",[32,105087,105088],{},"\u003Cmujoco>",[29,105090,105091,105093,105094,105097],{},[32,105092,54362],{}," 是否放在 ",[32,105095,105096],{},"\u003Cworldbody>"," 内部",[65,105099,105101,105103,105104],{"id":105100},"final-time-不是严格等于-10",[32,105102,104950],{}," 不是严格等于 ",[32,105105,104954],{},[19,105107,105108],{},"这通常不是错误。浮点数计算可能得到：",[73,105110,105113],{"className":105111,"code":105112,"language":7780,"meta":78},[7778],"1.0000000000000007\n",[32,105114,105112],{"__ignoreMap":78},[19,105116,105117,105118,105120],{},"只要接近 ",[32,105119,104954],{}," 就正常。",[65,105122,105123],{"id":105123},"方块没有掉下来",[19,105125,105126],{},"检查：",[26,105128,105129,105135,105141,105146],{},[29,105130,105131,105132],{},"方块 body 里是否有 ",[32,105133,105134],{},"\u003Cfreejoint\u002F>",[29,105136,105137,105138],{},"重力是否是 ",[32,105139,105140],{},"0 0 -9.81",[29,105142,105143,105144],{},"是否真的调用了 ",[32,105145,103236],{},[29,105147,105148,105149,105151,105152],{},"你看的是否是 ",[32,105150,104894],{},"，不是 ",[32,105153,105154],{},"initial qpos",[14,105156,105158],{"id":105157},"_8本章小结","8.本章小结",[19,105160,105161],{},"本章你已经完成了 MuJoCo 的最小闭环：",[73,105163,105166],{"className":105164,"code":105165,"language":7780,"meta":78},[7778],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[32,105167,105165],{"__ignoreMap":78},[19,105169,105170],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2671,105172,105173],{},"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":78,"searchDepth":157,"depth":157,"links":105175},[105176,105177,105178,105183,105187,105188,105189,105197],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":105179},[105180,105181,105182],{"id":103633,"depth":404,"text":103634},{"id":103727,"depth":404,"text":103728},{"id":103779,"depth":404,"text":103780},{"id":103803,"depth":157,"text":103804,"children":105184},[105185,105186],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":105190},[105191,105192,105193,105194,105196],{"id":105007,"depth":404,"text":105010},{"id":105030,"depth":404,"text":105031},{"id":105070,"depth":404,"text":105071},{"id":105100,"depth":404,"text":105195},"final time 不是严格等于 1.0",{"id":105123,"depth":404,"text":105123},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103189,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105204,"title":105205,"body":105206,"description":78,"extension":2700,"meta":106862,"navigation":485,"path":106863,"seo":106864,"stem":106865,"__hash__":106866},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105207,"toc":106838},[105208,105211,105213,105216,105219,105236,105331,105334,105340,105342,105344,105368,105371,105385,105388,105429,105431,105444,105446,105449,105497,105509,105512,105515,105521,105534,105601,105604,105623,105626,105629,105635,105637,105646,105649,105653,105662,105744,105753,105757,105763,105777,105787,105789,106119,106122,106134,106136,106147,106149,106152,106170,106173,106176,106194,106205,106208,106223,106233,106235,106256,106273,106293,106299,106339,106355,106371,106377,106380,106404,106420,106425,106455,106472,106497,106500,106515,106524,106539,106548,106563,106570,106572,106582,106595,106602,106605,106644,106651,106653,106705,106707,106713,106716,106723,106730,106733,106735,106753,106756,106759,106793,106805,106807,106810,106832,106835],[10,105209,105205],{"id":105210},"_2xml-与-mjcf-物理建模基础",[14,105212,103198],{"id":103197},[19,105214,105215],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105217,105218],{},"本章结束后，你应该能看懂一个简单模型里：",[26,105220,105221,105224,105227,105230,105233],{},[29,105222,105223],{},"地面在哪里。",[29,105225,105226],{},"物体初始位置在哪里。",[29,105228,105229],{},"几何体是什么形状。",[29,105231,105232],{},"哪些 body 可以自由运动。",[29,105234,105235],{},"如何用名字在 Python 里找到 XML 中的对象。",[278,105237,105238,105248],{},[281,105239,105240],{},[284,105241,105242,105245],{},[287,105243,105244],{"align":26320},"标签",[287,105246,105247],{"align":26320},"作用",[294,105249,105250,105259,105269,105278,105288,105298,105311,105321],{},[284,105251,105252,105256],{},[299,105253,105254],{"align":26320},[32,105255,105088],{},[299,105257,105258],{"align":26320},"根节点",[284,105260,105261,105266],{},[299,105262,105263],{"align":26320},[32,105264,105265],{},"\u003Coption>",[299,105267,105268],{"align":26320},"仿真参数",[284,105270,105271,105275],{},[299,105272,105273],{"align":26320},[32,105274,105096],{},[299,105276,105277],{"align":26320},"世界中的物体",[284,105279,105280,105285],{},[299,105281,105282],{"align":26320},[32,105283,105284],{},"\u003Cbody>",[299,105286,105287],{"align":26320},"刚体",[284,105289,105290,105295],{},[299,105291,105292],{"align":26320},[32,105293,105294],{},"\u003Cgeom>",[299,105296,105297],{"align":26320},"几何体、碰撞体、可视体",[284,105299,105300,105308],{},[299,105301,105302,27563,105305],{"align":26320},[32,105303,105304],{},"\u003Cjoint>",[32,105306,105307],{},"\u003Cfreejoint>",[299,105309,105310],{"align":26320},"关节",[284,105312,105313,105318],{},[299,105314,105315],{"align":26320},[32,105316,105317],{},"\u003Csite>",[299,105319,105320],{"align":26320},"标记点",[284,105322,105323,105328],{},[299,105324,105325],{"align":26320},[32,105326,105327],{},"\u003Cactuator>",[299,105329,105330],{"align":26320},"控制器",[19,105332,105333],{},"初学时可以先记住：",[73,105335,105338],{"className":105336,"code":105337,"language":7780,"meta":78},[7778],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[32,105339,105337],{"__ignoreMap":78},[14,105341,103321],{"id":103320},[19,105343,103324],{},[73,105345,105347],{"className":26406,"code":105346,"language":26408,"meta":78,"style":78},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[32,105348,105349],{"__ignoreMap":78},[82,105350,105351,105353,105355,105357,105359,105361,105363,105365],{"class":84,"line":85},[82,105352,27161],{"class":2384},[82,105354,28897],{"class":96},[82,105356,26418],{"class":96},[82,105358,28982],{"class":88},[82,105360,105052],{"class":96},[82,105362,103365],{"class":96},[82,105364,105057],{"class":96},[82,105366,105367],{"class":96}," glfw-devel\n",[19,105369,105370],{},"pip:",[73,105372,105373],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},[32,105374,105375],{"__ignoreMap":78},[82,105376,105377,105379,105381,105383],{"class":84,"line":85},[82,105378,26415],{"class":2384},[82,105380,26418],{"class":96},[82,105382,103481],{"class":96},[82,105384,103484],{"class":96},[19,105386,105387],{},"conda:",[73,105389,105391],{"className":26406,"code":105390,"language":26408,"meta":78,"style":78},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[32,105392,105393,105410,105419],{"__ignoreMap":78},[82,105394,105395,105397,105399,105401,105404,105406,105408],{"class":84,"line":85},[82,105396,32911],{"class":2384},[82,105398,31757],{"class":96},[82,105400,27700],{"class":88},[82,105402,105403],{"class":96}," mujoco-xml",[82,105405,103526],{"class":96},[82,105407,103529],{"class":88},[82,105409,103532],{"class":88},[82,105411,105412,105414,105416],{"class":84,"line":157},[82,105413,32911],{"class":2384},[82,105415,103539],{"class":96},[82,105417,105418],{"class":96}," mujoco-xml\n",[82,105420,105421,105423,105425,105427],{"class":84,"line":404},[82,105422,26415],{"class":2384},[82,105424,26418],{"class":96},[82,105426,103481],{"class":96},[82,105428,103484],{"class":96},[19,105430,103555],{},[26,105432,105433,105436,105441],{},[29,105434,105435],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,105437,105438,105439,2611],{},"本章使用基础标签，适用于 ",[32,105440,103578],{},[29,105442,105443],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105445,103596],{"id":103595},[19,105447,105448],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[73,105450,105452],{"className":55627,"code":105451,"language":55629,"meta":78,"style":78},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[32,105453,105454,105468,105476,105481,105489],{"__ignoreMap":78},[82,105455,105456,105458,105460,105462,105464,105466],{"class":84,"line":85},[82,105457,3659],{"class":92},[82,105459,103572],{"class":53863},[82,105461,104326],{"class":2384},[82,105463,113],{"class":92},[82,105465,1471],{"class":96},[82,105467,53870],{"class":92},[82,105469,105470,105472,105474],{"class":84,"line":157},[82,105471,54705],{"class":92},[82,105473,104392],{"class":53863},[82,105475,53870],{"class":92},[82,105477,105478],{"class":84,"line":404},[82,105479,105480],{"class":92},"    ...\n",[82,105482,105483,105485,105487],{"class":84,"line":413},[82,105484,54977],{"class":92},[82,105486,104392],{"class":53863},[82,105488,53870],{"class":92},[82,105490,105491,105493,105495],{"class":84,"line":508},[82,105492,54347],{"class":92},[82,105494,103572],{"class":53863},[82,105496,53870],{"class":92},[19,105498,105499,105501,105502,105504,105505,105508],{},[32,105500,54362],{}," 表示刚体。",[32,105503,103671],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[32,105506,105507],{},"joint"," 表示刚体相对父刚体如何运动。",[65,105510,105511],{"id":105511},"层级结构非常重要",[19,105513,105514],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[73,105516,105519],{"className":105517,"code":105518,"language":7780,"meta":78},[7778],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[32,105520,105518],{"__ignoreMap":78},[19,105522,105523,103569,105526,105529,105530,105533],{},[32,105524,105525],{},"red_box_geom",[32,105527,105528],{},"box_center"," 都属于 ",[32,105531,105532],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[73,105535,105537],{"className":55627,"code":105536,"language":55629,"meta":78,"style":78},"\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",[32,105538,105539,105559,105573,105593],{"__ignoreMap":78},[82,105540,105541,105543,105545,105547,105549,105551,105553,105555,105557],{"class":84,"line":85},[82,105542,3659],{"class":92},[82,105544,54362],{"class":53863},[82,105546,17506],{"class":2384},[82,105548,113],{"class":92},[82,105550,56051],{"class":96},[82,105552,103657],{"class":2384},[82,105554,113],{"class":92},[82,105556,103662],{"class":96},[82,105558,53870],{"class":92},[82,105560,105561,105563,105565,105567,105569,105571],{"class":84,"line":157},[82,105562,54705],{"class":92},[82,105564,104171],{"class":53863},[82,105566,17506],{"class":2384},[82,105568,113],{"class":92},[82,105570,104512],{"class":96},[82,105572,103695],{"class":92},[82,105574,105575,105577,105579,105581,105583,105585,105587,105589,105591],{"class":84,"line":404},[82,105576,54705],{"class":92},[82,105578,103671],{"class":53863},[82,105580,56384],{"class":2384},[82,105582,113],{"class":92},[82,105584,56051],{"class":96},[82,105586,103687],{"class":2384},[82,105588,113],{"class":92},[82,105590,103692],{"class":96},[82,105592,103695],{"class":92},[82,105594,105595,105597,105599],{"class":84,"line":413},[82,105596,54347],{"class":92},[82,105598,54362],{"class":53863},[82,105600,53870],{"class":92},[19,105602,105603],{},"含义:",[26,105605,105606,105612,105617,105620],{},[29,105607,105608,105609,105611],{},"创建名为 ",[32,105610,56274],{}," 的刚体",[29,105613,105614,105615],{},"初始位置在世界坐标 ",[32,105616,103720],{},[29,105618,105619],{},"它有一个自由关节",[29,105621,105622],{},"它有一个盒子几何体",[65,105624,105625],{"id":105625},"坐标怎么理解",[19,105627,105628],{},"MuJoCo 默认使用三维坐标：",[73,105630,105633],{"className":105631,"code":105632,"language":7780,"meta":78},[7778],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[32,105634,105632],{"__ignoreMap":78},[19,105636,17220],{},[73,105638,105640],{"className":55627,"code":105639,"language":55629,"meta":78,"style":78},"pos=\"0 0 1\"\n",[32,105641,105642],{"__ignoreMap":78},[82,105643,105644],{"class":84,"line":85},[82,105645,105639],{"class":92},[19,105647,105648],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[65,105650,105652],{"id":105651},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105654,105655,105656,85084,105659,105661],{},"不同 ",[32,105657,105658],{},"type",[32,105660,34068],{}," 含义不同：",[278,105663,105664,105679],{},[281,105665,105666],{},[284,105667,105668,105672,105677],{},[287,105669,105670],{"align":26320},[32,105671,105658],{},[287,105673,105674,105676],{"align":26320},[32,105675,34068],{}," 示例",[287,105678,103251],{"align":26320},[294,105680,105681,105695,105710,105729],{},[284,105682,105683,105687,105692],{},[299,105684,105685],{"align":26320},[32,105686,56274],{},[299,105688,105689],{"align":26320},[32,105690,105691],{},"size=\"0.1 0.2 0.3\"",[299,105693,105694],{"align":26320},"x\u002Fy\u002Fz 半边长，不是完整长度",[284,105696,105697,105702,105707],{},[299,105698,105699],{"align":26320},[32,105700,105701],{},"sphere",[299,105703,105704],{"align":26320},[32,105705,105706],{},"size=\"0.1\"",[299,105708,105709],{"align":26320},"球半径",[284,105711,105712,105717,105722],{},[299,105713,105714],{"align":26320},[32,105715,105716],{},"capsule",[299,105718,105719],{"align":26320},[32,105720,105721],{},"size=\"0.03\"",[299,105723,105724,105725,105728],{"align":26320},"胶囊半径，长度常用 ",[32,105726,105727],{},"fromto"," 指定",[284,105730,105731,105736,105741],{},[299,105732,105733],{"align":26320},[32,105734,105735],{},"plane",[299,105737,105738],{"align":26320},[32,105739,105740],{},"size=\"3 3 0.1\"",[299,105742,105743],{"align":26320},"可视平面大小，通常当地面",[19,105745,105746,105747,105749,105750,105752],{},"最容易踩坑的是 box：",[32,105748,104575],{}," 表示边长大约是 ",[32,105751,34607],{},"，因为 MuJoCo 用的是半边长。",[65,105754,105756],{"id":105755},"site-是什么","site 是什么",[19,105758,105759,105762],{},[32,105760,105761],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,105764,105765,105768,105771,105774],{},[29,105766,105767],{},"标记机械臂末端。",[29,105769,105770],{},"标记目标位置。",[29,105772,105773],{},"放传感器或相机参考点。",[29,105775,105776],{},"在 Python 中读取某个关键点的世界坐标。",[19,105778,105779,105780,103569,105783,105786],{},"在后面的 Reacher 任务中，",[32,105781,105782],{},"tip",[32,105784,105785],{},"target"," 就会用 site 表示。",[14,105788,103804],{"id":103803},[73,105790,105792],{"className":75,"code":105791,"language":77,"meta":78,"style":78},"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",[32,105793,105794,105800,105810,105814,105818,105826,105831,105835,105839,105843,105848,105852,105857,105862,105867,105872,105876,105880,105884,105888,105892,105896,105908,105920,105928,105932,105947,105962,105966,105979,105994,106007,106020,106024,106040,106044,106048,106059,106071,106083,106095,106099,106103,106115],{"__ignoreMap":78},[82,105795,105796,105798],{"class":84,"line":85},[82,105797,1123],{"class":112},[82,105799,103852],{"class":92},[82,105801,105802,105804,105806,105808],{"class":84,"line":157},[82,105803,1123],{"class":112},[82,105805,33955],{"class":92},[82,105807,728],{"class":112},[82,105809,33960],{"class":92},[82,105811,105812],{"class":84,"line":404},[82,105813,486],{"emptyLinePlaceholder":485},[82,105815,105816],{"class":84,"line":413},[82,105817,486],{"emptyLinePlaceholder":485},[82,105819,105820,105822,105824],{"class":84,"line":508},[82,105821,103865],{"class":88},[82,105823,259],{"class":112},[82,105825,103870],{"class":96},[82,105827,105828],{"class":84,"line":513},[82,105829,105830],{"class":96},"\u003Cmujoco model=\"xml_basic\">\n",[82,105832,105833],{"class":84,"line":1388},[82,105834,103880],{"class":96},[82,105836,105837],{"class":84,"line":1394},[82,105838,486],{"emptyLinePlaceholder":485},[82,105840,105841],{"class":84,"line":1399},[82,105842,103889],{"class":96},[82,105844,105845],{"class":84,"line":1430},[82,105846,105847],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[82,105849,105850],{"class":84,"line":1818},[82,105851,486],{"emptyLinePlaceholder":485},[82,105853,105854],{"class":84,"line":2082},[82,105855,105856],{"class":96},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[82,105858,105859],{"class":84,"line":2233},[82,105860,105861],{"class":96},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[82,105863,105864],{"class":84,"line":2255},[82,105865,105866],{"class":96},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[82,105868,105869],{"class":84,"line":2260},[82,105870,105871],{"class":96},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[82,105873,105874],{"class":84,"line":2298},[82,105875,103918],{"class":96},[82,105877,105878],{"class":84,"line":2303},[82,105879,103923],{"class":96},[82,105881,105882],{"class":84,"line":2321},[82,105883,103928],{"class":96},[82,105885,105886],{"class":84,"line":2533},[82,105887,98249],{"class":96},[82,105889,105890],{"class":84,"line":2538},[82,105891,486],{"emptyLinePlaceholder":485},[82,105893,105894],{"class":84,"line":2548},[82,105895,486],{"emptyLinePlaceholder":485},[82,105897,105898,105900,105902,105904,105906],{"class":84,"line":2579},[82,105899,2381],{"class":112},[82,105901,4573],{"class":2384},[82,105903,103949],{"class":92},[82,105905,98237],{"class":88},[82,105907,669],{"class":92},[82,105909,105910,105912,105914,105916,105918],{"class":84,"line":2585},[82,105911,103958],{"class":92},[82,105913,113],{"class":112},[82,105915,103963],{"class":92},[82,105917,103865],{"class":88},[82,105919,119],{"class":92},[82,105921,105922,105924,105926],{"class":84,"line":4350},[82,105923,103972],{"class":92},[82,105925,113],{"class":112},[82,105927,103977],{"class":92},[82,105929,105930],{"class":84,"line":4355},[82,105931,486],{"emptyLinePlaceholder":485},[82,105933,105934,105937,105939,105942,105945],{"class":84,"line":4360},[82,105935,105936],{"class":92},"    box_body_id ",[82,105938,113],{"class":112},[82,105940,105941],{"class":92}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[82,105943,105944],{"class":96},"\"red_box\"",[82,105946,119],{"class":92},[82,105948,105949,105952,105954,105957,105960],{"class":84,"line":4365},[82,105950,105951],{"class":92},"    site_id ",[82,105953,113],{"class":112},[82,105955,105956],{"class":92}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[82,105958,105959],{"class":96},"\"box_center\"",[82,105961,119],{"class":92},[82,105963,105964],{"class":84,"line":4379},[82,105965,486],{"emptyLinePlaceholder":485},[82,105967,105968,105970,105973,105975,105977],{"class":84,"line":4384},[82,105969,2219],{"class":112},[82,105971,105972],{"class":92}," box_body_id ",[82,105974,3659],{"class":112},[82,105976,6688],{"class":88},[82,105978,669],{"class":92},[82,105980,105981,105984,105987,105989,105992],{"class":84,"line":5176},[82,105982,105983],{"class":112},"        raise",[82,105985,105986],{"class":88}," RuntimeError",[82,105988,93],{"class":92},[82,105990,105991],{"class":96},"\"body red_box not found\"",[82,105993,119],{"class":92},[82,105995,105996,105998,106001,106003,106005],{"class":84,"line":5190},[82,105997,2219],{"class":112},[82,105999,106000],{"class":92}," site_id ",[82,106002,3659],{"class":112},[82,106004,6688],{"class":88},[82,106006,669],{"class":92},[82,106008,106009,106011,106013,106015,106018],{"class":84,"line":5198},[82,106010,105983],{"class":112},[82,106012,105986],{"class":88},[82,106014,93],{"class":92},[82,106016,106017],{"class":96},"\"site box_center not found\"",[82,106019,119],{"class":92},[82,106021,106022],{"class":84,"line":5203},[82,106023,486],{"emptyLinePlaceholder":485},[82,106025,106026,106028,106030,106032,106034,106036,106038],{"class":84,"line":5209},[82,106027,1888],{"class":112},[82,106029,104052],{"class":92},[82,106031,603],{"class":112},[82,106033,35013],{"class":88},[82,106035,93],{"class":92},[82,106037,4325],{"class":88},[82,106039,33362],{"class":92},[82,106041,106042],{"class":84,"line":5215},[82,106043,104067],{"class":92},[82,106045,106046],{"class":84,"line":5220},[82,106047,486],{"emptyLinePlaceholder":485},[82,106049,106050,106052,106054,106057],{"class":84,"line":10539},[82,106051,611],{"class":88},[82,106053,93],{"class":92},[82,106055,106056],{"class":96},"\"simulation time:\"",[82,106058,104029],{"class":92},[82,106060,106061,106063,106065,106068],{"class":84,"line":10563},[82,106062,611],{"class":88},[82,106064,93],{"class":92},[82,106066,106067],{"class":96},"\"box body position:\"",[82,106069,106070],{"class":92},", data.xpos[box_body_id].copy())\n",[82,106072,106073,106075,106077,106080],{"class":84,"line":10568},[82,106074,611],{"class":88},[82,106076,93],{"class":92},[82,106078,106079],{"class":96},"\"site position:\"",[82,106081,106082],{"class":92},", data.site_xpos[site_id].copy())\n",[82,106084,106085,106087,106089,106092],{"class":84,"line":10574},[82,106086,611],{"class":88},[82,106088,93],{"class":92},[82,106090,106091],{"class":96},"\"box qpos:\"",[82,106093,106094],{"class":92},", np.array(data.qpos))\n",[82,106096,106097],{"class":84,"line":10601},[82,106098,486],{"emptyLinePlaceholder":485},[82,106100,106101],{"class":84,"line":10606},[82,106102,486],{"emptyLinePlaceholder":485},[82,106104,106105,106107,106109,106111,106113],{"class":84,"line":10612},[82,106106,1237],{"class":112},[82,106108,33796],{"class":88},[82,106110,104110],{"class":112},[82,106112,104113],{"class":96},[82,106114,669],{"class":92},[82,106116,106117],{"class":84,"line":10624},[82,106118,104120],{"class":92},[19,106120,106121],{},"保存为：",[73,106123,106125],{"className":26406,"code":106124,"language":26408,"meta":78,"style":78},"touch ch2_xml_basic.py\n",[32,106126,106127],{"__ignoreMap":78},[82,106128,106129,106131],{"class":84,"line":85},[82,106130,103834],{"class":2384},[82,106132,106133],{"class":96}," ch2_xml_basic.py\n",[19,106135,104852],{},[73,106137,106139],{"className":26406,"code":106138,"language":26408,"meta":78,"style":78},"python ch2_xml_basic.py\n",[32,106140,106141],{"__ignoreMap":78},[82,106142,106143,106145],{"class":84,"line":85},[82,106144,77],{"class":2384},[82,106146,106133],{"class":96},[65,106148,104123],{"id":104123},[19,106150,106151],{},"用名字查找 body：",[73,106153,106155],{"className":75,"code":106154,"language":77,"meta":78,"style":78},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[32,106156,106157],{"__ignoreMap":78},[82,106158,106159,106162,106164,106166,106168],{"class":84,"line":85},[82,106160,106161],{"class":92},"box_body_id ",[82,106163,113],{"class":112},[82,106165,105941],{"class":92},[82,106167,105944],{"class":96},[82,106169,119],{"class":92},[19,106171,106172],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106174,106175],{},"用名字查找 site：",[73,106177,106179],{"className":75,"code":106178,"language":77,"meta":78,"style":78},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[32,106180,106181],{"__ignoreMap":78},[82,106182,106183,106186,106188,106190,106192],{"class":84,"line":85},[82,106184,106185],{"class":92},"site_id ",[82,106187,113],{"class":112},[82,106189,105956],{"class":92},[82,106191,105959],{"class":96},[82,106193,119],{"class":92},[19,106195,106196,106197,106200,106201,106204],{},"注意第二个参数是对象类型。查 body 就用 ",[32,106198,106199],{},"mjOBJ_BODY","，查 site 就用 ",[32,106202,106203],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,106206,106207],{},"读取世界坐标：",[73,106209,106211],{"className":75,"code":106210,"language":77,"meta":78,"style":78},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[32,106212,106213,106218],{"__ignoreMap":78},[82,106214,106215],{"class":84,"line":85},[82,106216,106217],{"class":92},"data.xpos[box_body_id]\n",[82,106219,106220],{"class":84,"line":157},[82,106221,106222],{"class":92},"data.site_xpos[site_id]\n",[19,106224,106225,106228,106229,106232],{},[32,106226,106227],{},"xpos"," 是 body 的世界坐标，",[32,106230,106231],{},"site_xpos"," 是 site 的世界坐标。",[65,106234,104259],{"id":104259},[73,106236,106238],{"className":75,"code":106237,"language":77,"meta":78,"style":78},"import mujoco\nimport numpy as np\n",[32,106239,106240,106246],{"__ignoreMap":78},[82,106241,106242,106244],{"class":84,"line":85},[82,106243,1123],{"class":112},[82,106245,103852],{"class":92},[82,106247,106248,106250,106252,106254],{"class":84,"line":157},[82,106249,1123],{"class":112},[82,106251,33955],{"class":92},[82,106253,728],{"class":112},[82,106255,33960],{"class":92},[19,106257,106258,106259,106262,106263,106266,106267,2973,106270,2611],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[32,106260,106261],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[32,106264,106265],{},"as np"," 是习惯写法，后面就可以写 ",[32,106268,106269],{},"np.array(...)",[32,106271,106272],{},"np.round(...)",[73,106274,106275],{"className":75,"code":104146,"language":77,"meta":78,"style":78},[32,106276,106277,106285,106289],{"__ignoreMap":78},[82,106278,106279,106281,106283],{"class":84,"line":85},[82,106280,103865],{"class":88},[82,106282,259],{"class":112},[82,106284,103870],{"class":96},[82,106286,106287],{"class":84,"line":157},[82,106288,104161],{"class":96},[82,106290,106291],{"class":84,"line":404},[82,106292,98249],{"class":96},[19,106294,106295,106296,2611],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[32,106297,106298],{},"mujoco.MjModel.from_xml_string(XML)",[73,106300,106302],{"className":55627,"code":106301,"language":55629,"meta":78,"style":78},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,106303,106304],{"__ignoreMap":78},[82,106305,106306,106308,106310,106312,106314,106316,106318,106320,106323,106325,106327,106330,106332,106334,106337],{"class":84,"line":85},[82,106307,3659],{"class":92},[82,106309,105761],{"class":53863},[82,106311,17506],{"class":2384},[82,106313,113],{"class":92},[82,106315,105959],{"class":96},[82,106317,103657],{"class":2384},[82,106319,113],{"class":92},[82,106321,106322],{"class":96},"\"0 0 0\"",[82,106324,103687],{"class":2384},[82,106326,113],{"class":92},[82,106328,106329],{"class":96},"\"0.03\"",[82,106331,81321],{"class":2384},[82,106333,113],{"class":92},[82,106335,106336],{"class":96},"\"0 1 0 1\"",[82,106338,103695],{"class":92},[19,106340,106341,106343,106344,106347,106348,106350,106351,106354],{},[32,106342,105761],{}," 是标记点。",[32,106345,106346],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[32,106349,105721],{}," 表示显示出来的小球大小。",[32,106352,106353],{},"rgba=\"0 1 0 1\""," 表示绿色。",[73,106356,106357],{"className":75,"code":106154,"language":77,"meta":78,"style":78},[32,106358,106359],{"__ignoreMap":78},[82,106360,106361,106363,106365,106367,106369],{"class":84,"line":85},[82,106362,106161],{"class":92},[82,106364,113],{"class":112},[82,106366,105941],{"class":92},[82,106368,105944],{"class":96},[82,106370,119],{"class":92},[19,106372,106373,106374,106376],{},"这行的作用是：根据名字 ",[32,106375,105944],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106378,106379],{},"拆开看：",[26,106381,106382,106388,106393,106399],{},[29,106383,106384,106387],{},[32,106385,106386],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,106389,106390,106392],{},[32,106391,104636],{}," 是被查询的模型。",[29,106394,106395,106398],{},[32,106396,106397],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,106400,106401,106403],{},[32,106402,105944],{}," 是 XML 里写的名字。",[73,106405,106406],{"className":75,"code":106178,"language":77,"meta":78,"style":78},[32,106407,106408],{"__ignoreMap":78},[82,106409,106410,106412,106414,106416,106418],{"class":84,"line":85},[82,106411,106185],{"class":92},[82,106413,113],{"class":112},[82,106415,105956],{"class":92},[82,106417,105959],{"class":96},[82,106419,119],{"class":92},[19,106421,106422,106423,2611],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[32,106424,105959],{},[73,106426,106428],{"className":75,"code":106427,"language":77,"meta":78,"style":78},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[32,106429,106430,106442],{"__ignoreMap":78},[82,106431,106432,106434,106436,106438,106440],{"class":84,"line":85},[82,106433,1237],{"class":112},[82,106435,105972],{"class":92},[82,106437,3659],{"class":112},[82,106439,6688],{"class":88},[82,106441,669],{"class":92},[82,106443,106444,106447,106449,106451,106453],{"class":84,"line":157},[82,106445,106446],{"class":112},"    raise",[82,106448,105986],{"class":88},[82,106450,93],{"class":92},[82,106452,105991],{"class":96},[82,106454,119],{"class":92},[19,106456,106457,106459,106460,106463,106464,106467,106468,106471],{},[32,106458,1237],{}," 是条件判断。",[32,106461,106462],{},"mj_name2id"," 找不到对象时会返回 ",[32,106465,106466],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[32,106469,106470],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[73,106473,106475],{"className":75,"code":106474,"language":77,"meta":78,"style":78},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[32,106476,106477,106493],{"__ignoreMap":78},[82,106478,106479,106481,106483,106485,106487,106489,106491],{"class":84,"line":85},[82,106480,597],{"class":112},[82,106482,104052],{"class":92},[82,106484,603],{"class":112},[82,106486,35013],{"class":88},[82,106488,93],{"class":92},[82,106490,4325],{"class":88},[82,106492,33362],{"class":92},[82,106494,106495],{"class":84,"line":157},[82,106496,104250],{"class":92},[19,106498,106499],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[73,106501,106503],{"className":75,"code":106502,"language":77,"meta":78,"style":78},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[32,106504,106505],{"__ignoreMap":78},[82,106506,106507,106509,106511,106513],{"class":84,"line":85},[82,106508,407],{"class":88},[82,106510,93],{"class":92},[82,106512,106067],{"class":96},[82,106514,106070],{"class":92},[19,106516,106517,106519,106520,106523],{},[32,106518,103630],{}," 保存所有 body 的世界坐标。",[32,106521,106522],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[73,106525,106527],{"className":75,"code":106526,"language":77,"meta":78,"style":78},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[32,106528,106529],{"__ignoreMap":78},[82,106530,106531,106533,106535,106537],{"class":84,"line":85},[82,106532,407],{"class":88},[82,106534,93],{"class":92},[82,106536,106079],{"class":96},[82,106538,106082],{"class":92},[19,106540,106541,106544,106545,106547],{},[32,106542,106543],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[32,106546,105528],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[73,106549,106551],{"className":75,"code":106550,"language":77,"meta":78,"style":78},"print(\"box qpos:\", np.array(data.qpos))\n",[32,106552,106553],{"__ignoreMap":78},[82,106554,106555,106557,106559,106561],{"class":84,"line":85},[82,106556,407],{"class":88},[82,106558,93],{"class":92},[82,106560,106091],{"class":96},[82,106562,106094],{"class":92},[19,106564,106565,106566,106569],{},"这里打印广义位置数组。",[32,106567,106568],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106571,104867],{"id":104866},[19,106573,106574,106575,106578,106579,2611],{},"程序会输出 ",[32,106576,106577],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[32,106580,106581],{},"qpos",[19,106583,106584,106586,106587,106590,106591,106594],{},[32,106585,106522],{}," 是 body 的世界坐标位置。",[32,106588,106589],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[32,106592,106593],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106596,84776,106597,85084,106599,106601],{},[32,106598,105528],{},[32,106600,106346],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106603,106604],{},"如果你把 site 改成：",[73,106606,106608],{"className":55627,"code":106607,"language":55629,"meta":78,"style":78},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,106609,106610],{"__ignoreMap":78},[82,106611,106612,106614,106616,106618,106620,106623,106625,106627,106630,106632,106634,106636,106638,106640,106642],{"class":84,"line":85},[82,106613,3659],{"class":92},[82,106615,105761],{"class":53863},[82,106617,17506],{"class":2384},[82,106619,113],{"class":92},[82,106621,106622],{"class":96},"\"box_top\"",[82,106624,103657],{"class":2384},[82,106626,113],{"class":92},[82,106628,106629],{"class":96},"\"0 0 0.15\"",[82,106631,103687],{"class":2384},[82,106633,113],{"class":92},[82,106635,106329],{"class":96},[82,106637,81321],{"class":2384},[82,106639,113],{"class":92},[82,106641,106336],{"class":96},[82,106643,103695],{"class":92},[19,106645,106646,106647,106650],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[32,106648,106649],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106652,104899],{"id":104898},[26,106654,106655,106664,106667,106674,106680,106691],{},[29,106656,104962,106657,106659,106660,104965,106662,2611],{},[32,106658,105532],{}," 的初始高度从 ",[32,106661,2283],{},[32,106663,1425],{},[29,106665,106666],{},"重新运行程序。",[29,106668,106669,106670,106673],{},"观察 ",[32,106671,106672],{},"box qpos"," 和最终位置是否变化。",[29,106675,106676,106677,106679],{},"故意把 ",[32,106678,105761],{}," 名称改错，确认程序能报错。",[29,106681,104962,106682,106684,106685,104965,106687,106690],{},[32,106683,103671],{}," 的颜色 ",[32,106686,104583],{},[32,106688,106689],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,106692,104962,106693,85084,106695,104965,106698,106701,106702,106704],{},[32,106694,105528],{},[32,106696,106697],{},"pos",[32,106699,106700],{},"0 0 0.2","，观察 ",[32,106703,106649],{}," 如何变化。",[14,106706,105004],{"id":105003},[65,106708,106710],{"id":106709},"xml-error-schema-violation",[32,106711,106712],{},"XML Error: Schema violation",[19,106714,106715],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[65,106717,106719,83844,106721],{"id":106718},"mj_name2id-返回-1",[32,106720,106462],{},[32,106722,106466],{},[19,106724,106725,106726,106729],{},"说明名字没有找到。检查 XML 中 ",[32,106727,106728],{},"name=\"...\"","，并确认对象类型正确。",[65,106731,106732],{"id":106732},"物体不下落",[19,106734,105074],{},[26,106736,106737,106742,106747],{},[29,106738,106739,106740],{},"body 是否有 ",[32,106741,104171],{},[29,106743,106744,106745],{},"gravity 是否为 ",[32,106746,105140],{},[29,106748,106749,106750,106752],{},"body 是否被固定在 ",[32,106751,104392],{}," 中",[65,106754,106755],{"id":106755},"坐标看起来不符合预期",[19,106757,106758],{},"先区分两种坐标：",[278,106760,106761,106770],{},[281,106762,106763],{},[284,106764,106765,106768],{},[287,106766,106767],{"align":26320},"坐标",[287,106769,103251],{"align":26320},[294,106771,106772,106782],{},[284,106773,106774,106779],{},[299,106775,106776,106777],{"align":26320},"XML 里的 ",[32,106778,106697],{},[299,106780,106781],{"align":26320},"相对父 body 的局部坐标",[284,106783,106784,106790],{},[299,106785,106786,27563,106788],{"align":26320},[32,106787,103630],{},[32,106789,106543],{},[299,106791,106792],{"align":26320},"仿真更新后的世界坐标",[19,106794,106795,106796,106798,106799,85093,106802,106804],{},"如果你修改了 ",[32,106797,103621],{},"，但还没调用 ",[32,106800,106801],{},"mj_forward",[32,106803,103766],{},"，世界坐标可能还没有更新。",[14,106806,105158],{"id":105157},[19,106808,106809],{},"MJCF 建模先掌握四件事：",[26,106811,106812,106817,106822,106827],{},[29,106813,106814,106816],{},[32,106815,54362],{}," 表示刚体层级。",[29,106818,106819,106821],{},[32,106820,103671],{}," 表示形状、碰撞和质量。",[29,106823,106824,106826],{},[32,106825,105507],{}," 决定 body 能不能动、怎么动。",[29,106828,106829,106831],{},[32,106830,105761],{}," 用来标记关键点，方便 Python 读取位置。",[19,106833,106834],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2671,106836,106837],{},"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":78,"searchDepth":157,"depth":157,"links":106839},[106840,106841,106842,106848,106852,106853,106854,106861],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":106843},[106844,106845,106846,106847],{"id":105511,"depth":404,"text":105511},{"id":105625,"depth":404,"text":105625},{"id":105651,"depth":404,"text":105652},{"id":105755,"depth":404,"text":105756},{"id":103803,"depth":157,"text":103804,"children":106849},[106850,106851],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":106855},[106856,106857,106859,106860],{"id":106709,"depth":404,"text":106712},{"id":106718,"depth":404,"text":106858},"mj_name2id 返回 -1",{"id":106732,"depth":404,"text":106732},{"id":106755,"depth":404,"text":106755},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105205,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106868,"title":106869,"body":106870,"description":78,"extension":2700,"meta":108364,"navigation":485,"path":108365,"seo":108366,"stem":108367,"__hash__":108368},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106871,"toc":108336},[106872,106875,106877,106880,106883,106920,106923,106929,106932,106934,106936,106963,106965,106979,106981,107022,107024,107048,107050,107053,107062,107071,107074,107083,107091,107100,107103,107113,107116,107168,107175,107181,107189,107237,107240,107259,107262,107270,107274,107283,107316,107318,107666,107668,107680,107682,107693,107695,107698,107719,107725,107728,107753,107763,107766,107774,107777,107780,107801,107812,107814,107834,107837,107858,107867,107886,107892,107917,107920,107934,107941,107965,107968,107976,107985,108001,108013,108021,108030,108032,108035,108059,108064,108067,108089,108091,108130,108132,108139,108141,108149,108152,108155,108167,108208,108215,108226,108233,108236,108285,108288,108291,108297,108299,108304,108330,108333],[10,106873,106869],{"id":106874},"_3python-控制接口读取状态与推进仿真",[14,106876,103198],{"id":103197},[19,106878,106879],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106881,106882],{},"你将学习:",[26,106884,106885,106890,106895,106899,106904,106914],{},[29,106886,106887],{},[32,106888,106889],{},"MjModel.from_xml_string",[29,106891,106892],{},[32,106893,106894],{},"MjData(model)",[29,106896,106897],{},[32,106898,103766],{},[29,106900,106901],{},[32,106902,106903],{},"mj_resetData",[29,106905,2649,106906,2973,106908,2973,106911],{},[32,106907,106581],{},[32,106909,106910],{},"qvel",[32,106912,106913],{},"ctrl",[29,106915,106916,106917],{},"使用 ",[32,106918,106919],{},"model.opt.timestep",[19,106921,106922],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[73,106924,106927],{"className":106925,"code":106926,"language":7780,"meta":78},[7778],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[32,106928,106926],{"__ignoreMap":78},[19,106930,106931],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106933,103321],{"id":103320},[19,106935,103324],{},[73,106937,106939],{"className":26406,"code":106938,"language":26408,"meta":78,"style":78},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[32,106940,106941],{"__ignoreMap":78},[82,106942,106943,106945,106947,106949,106951,106954,106956,106958,106960],{"class":84,"line":85},[82,106944,27161],{"class":2384},[82,106946,28897],{"class":96},[82,106948,26418],{"class":96},[82,106950,28982],{"class":88},[82,106952,106953],{"class":96}," python3",[82,106955,103349],{"class":96},[82,106957,105052],{"class":96},[82,106959,103365],{"class":96},[82,106961,106962],{"class":96}," glfw\n",[19,106964,105370],{},[73,106966,106967],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},[32,106968,106969],{"__ignoreMap":78},[82,106970,106971,106973,106975,106977],{"class":84,"line":85},[82,106972,26415],{"class":2384},[82,106974,26418],{"class":96},[82,106976,103481],{"class":96},[82,106978,103484],{"class":96},[19,106980,105387],{},[73,106982,106984],{"className":26406,"code":106983,"language":26408,"meta":78,"style":78},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[32,106985,106986,107003,107012],{"__ignoreMap":78},[82,106987,106988,106990,106992,106994,106997,106999,107001],{"class":84,"line":85},[82,106989,32911],{"class":2384},[82,106991,31757],{"class":96},[82,106993,27700],{"class":88},[82,106995,106996],{"class":96}," mujoco-python-api",[82,106998,103526],{"class":96},[82,107000,103529],{"class":88},[82,107002,103532],{"class":88},[82,107004,107005,107007,107009],{"class":84,"line":157},[82,107006,32911],{"class":2384},[82,107008,103539],{"class":96},[82,107010,107011],{"class":96}," mujoco-python-api\n",[82,107013,107014,107016,107018,107020],{"class":84,"line":404},[82,107015,26415],{"class":2384},[82,107017,26418],{"class":96},[82,107019,103481],{"class":96},[82,107021,103484],{"class":96},[19,107023,103555],{},[26,107025,107026,107033,107042],{},[29,107027,107028,103569,107030,107032],{},[32,107029,103226],{},[32,107031,103231],{}," 是官方 Python bindings 的类名。",[29,107034,107035,107036,107039,107040,2611],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[32,107037,107038],{},"mjModel"," 在 Python 中是 ",[32,107041,103260],{},[29,107043,107044,107045,2611],{},"不要使用 ",[32,107046,107047],{},"sim = mujoco_py.MjSim(...)",[14,107049,103596],{"id":103595},[19,107051,107052],{},"仿真推进核心代码:",[73,107054,107056],{"className":75,"code":107055,"language":77,"meta":78,"style":78},"mujoco.mj_step(model, data)\n",[32,107057,107058],{"__ignoreMap":78},[82,107059,107060],{"class":84,"line":85},[82,107061,107055],{"class":92},[19,107063,107064,107065,2973,107067,2973,107069,2611],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[32,107066,103621],{},[32,107068,103624],{},[32,107070,103618],{},[19,107072,107073],{},"重置仿真:",[73,107075,107077],{"className":75,"code":107076,"language":77,"meta":78,"style":78},"mujoco.mj_resetData(model, data)\n",[32,107078,107079],{"__ignoreMap":78},[82,107080,107081],{"class":84,"line":85},[82,107082,107076],{"class":92},[19,107084,107085,107086,85093,107088,107090],{},"如果手动修改了 ",[32,107087,103621],{},[32,107089,103624],{},"，通常应调用:",[73,107092,107094],{"className":75,"code":107093,"language":77,"meta":78,"style":78},"mujoco.mj_forward(model, data)\n",[32,107095,107096],{"__ignoreMap":78},[82,107097,107098],{"class":84,"line":85},[82,107099,107093],{"class":92},[19,107101,107102],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[65,107104,107106,2973,107108,2973,107110,107112],{"id":107105},"qposqvelctrl-是什么",[32,107107,106581],{},[32,107109,106910],{},[32,107111,106913],{}," 是什么",[19,107114,107115],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[278,107117,107118,107130],{},[281,107119,107120],{},[284,107121,107122,107125,107127],{},[287,107123,107124],{"align":26320},"字段",[287,107126,103251],{"align":26320},[287,107128,107129],{"align":26320},"谁来修改",[294,107131,107132,107144,107156],{},[284,107133,107134,107138,107141],{},[299,107135,107136],{"align":26320},[32,107137,103621],{},[299,107139,107140],{"align":26320},"广义位置，例如小车位置、关节角、自由物体位置姿态",[299,107142,107143],{"align":26320},"MuJoCo 更新，也可以手动设置初始状态",[284,107145,107146,107150,107153],{},[299,107147,107148],{"align":26320},[32,107149,103624],{},[299,107151,107152],{"align":26320},"广义速度，例如小车速度、关节角速度",[299,107154,107155],{"align":26320},"MuJoCo 更新，也可以手动清零",[284,107157,107158,107162,107165],{},[299,107159,107160],{"align":26320},[32,107161,103627],{},[299,107163,107164],{"align":26320},"actuator 的控制输入",[299,107166,107167],{"align":26320},"主要由你的控制代码写入",[19,107169,11616,107170,103569,107172,107174],{},[32,107171,106581],{},[32,107173,106910],{}," 不一定同维。自由刚体就是典型例子：",[73,107176,107179],{"className":107177,"code":107178,"language":7780,"meta":78},[7778],"freejoint: qpos 7 维，qvel 6 维\n",[32,107180,107178],{"__ignoreMap":78},[65,107182,107184,103569,107186,107188],{"id":107183},"mj_step-和-mj_forward-的区别",[32,107185,103766],{},[32,107187,106801],{}," 的区别",[278,107190,107191,107204],{},[281,107192,107193],{},[284,107194,107195,107198,107201],{},[287,107196,107197],{"align":26320},"函数",[287,107199,107200],{"align":26320},"是否推进时间",[287,107202,107203],{"align":26320},"什么时候用",[294,107205,107206,107219],{},[284,107207,107208,107213,107216],{},[299,107209,107210],{"align":26320},[32,107211,107212],{},"mj_step(model, data)",[299,107214,107215],{"align":26320},"是",[299,107217,107218],{"align":26320},"正常仿真循环，每调用一次前进一步",[284,107220,107221,107226,107229],{},[299,107222,107223],{"align":26320},[32,107224,107225],{},"mj_forward(model, data)",[299,107227,107228],{"align":26320},"否",[299,107230,107231,107232,2973,107234,107236],{"align":26320},"手动改了 ",[32,107233,106581],{},[32,107235,106910],{}," 后，刷新派生量",[19,107238,107239],{},"例如你写：",[73,107241,107243],{"className":75,"code":107242,"language":77,"meta":78,"style":78},"data.qpos[2] = 2.0\n",[32,107244,107245],{"__ignoreMap":78},[82,107246,107247,107250,107252,107254,107256],{"class":84,"line":85},[82,107248,107249],{"class":92},"data.qpos[",[82,107251,1425],{"class":88},[82,107253,7038],{"class":92},[82,107255,113],{"class":112},[82,107257,107258],{"class":88}," 2.0\n",[19,107260,107261],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[73,107263,107264],{"className":75,"code":107093,"language":77,"meta":78,"style":78},[32,107265,107266],{"__ignoreMap":78},[82,107267,107268],{"class":84,"line":85},[82,107269,107093],{"class":92},[65,107271,107273],{"id":107272},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,107275,107276,107279,107280,107282],{},[32,107277,107278],{},"mujoco.mj_resetData(model, data)"," 会把 ",[32,107281,35969],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[73,107284,107286],{"className":75,"code":107285,"language":77,"meta":78,"style":78},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[32,107287,107288,107292,107302,107312],{"__ignoreMap":78},[82,107289,107290],{"class":84,"line":85},[82,107291,107076],{"class":92},[82,107293,107294,107297,107299],{"class":84,"line":157},[82,107295,107296],{"class":92},"data.qpos[:] ",[82,107298,113],{"class":112},[82,107300,107301],{"class":92}," random_qpos\n",[82,107303,107304,107307,107309],{"class":84,"line":404},[82,107305,107306],{"class":92},"data.qvel[:] ",[82,107308,113],{"class":112},[82,107310,107311],{"class":88}," 0.0\n",[82,107313,107314],{"class":84,"line":413},[82,107315,107093],{"class":92},[14,107317,103804],{"id":103803},[73,107319,107321],{"className":75,"code":107320,"language":77,"meta":78,"style":78},"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",[32,107322,107323,107329,107339,107343,107347,107355,107360,107364,107368,107372,107377,107381,107386,107391,107396,107400,107404,107408,107412,107416,107420,107439,107446,107458,107469,107485,107501,107505,107509,107521,107533,107541,107545,107556,107560,107576,107580,107584,107593,107597,107602,107611,107615,107628,107633,107642,107646,107650,107662],{"__ignoreMap":78},[82,107324,107325,107327],{"class":84,"line":85},[82,107326,1123],{"class":112},[82,107328,103852],{"class":92},[82,107330,107331,107333,107335,107337],{"class":84,"line":157},[82,107332,1123],{"class":112},[82,107334,33955],{"class":92},[82,107336,728],{"class":112},[82,107338,33960],{"class":92},[82,107340,107341],{"class":84,"line":404},[82,107342,486],{"emptyLinePlaceholder":485},[82,107344,107345],{"class":84,"line":413},[82,107346,486],{"emptyLinePlaceholder":485},[82,107348,107349,107351,107353],{"class":84,"line":508},[82,107350,103865],{"class":88},[82,107352,259],{"class":112},[82,107354,103870],{"class":96},[82,107356,107357],{"class":84,"line":513},[82,107358,107359],{"class":96},"\u003Cmujoco model=\"state_api\">\n",[82,107361,107362],{"class":84,"line":1388},[82,107363,103880],{"class":96},[82,107365,107366],{"class":84,"line":1394},[82,107367,486],{"emptyLinePlaceholder":485},[82,107369,107370],{"class":84,"line":1399},[82,107371,103889],{"class":96},[82,107373,107374],{"class":84,"line":1430},[82,107375,107376],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[82,107378,107379],{"class":84,"line":1818},[82,107380,486],{"emptyLinePlaceholder":485},[82,107382,107383],{"class":84,"line":2082},[82,107384,107385],{"class":96},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[82,107387,107388],{"class":84,"line":2233},[82,107389,107390],{"class":96},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[82,107392,107393],{"class":84,"line":2255},[82,107394,107395],{"class":96},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[82,107397,107398],{"class":84,"line":2260},[82,107399,103918],{"class":96},[82,107401,107402],{"class":84,"line":2298},[82,107403,103923],{"class":96},[82,107405,107406],{"class":84,"line":2303},[82,107407,103928],{"class":96},[82,107409,107410],{"class":84,"line":2321},[82,107411,98249],{"class":96},[82,107413,107414],{"class":84,"line":2533},[82,107415,486],{"emptyLinePlaceholder":485},[82,107417,107418],{"class":84,"line":2538},[82,107419,486],{"emptyLinePlaceholder":485},[82,107421,107422,107424,107427,107430,107432,107435,107437],{"class":84,"line":2548},[82,107423,2381],{"class":112},[82,107425,107426],{"class":2384}," print_state",[82,107428,107429],{"class":92},"(prefix: ",[82,107431,3918],{"class":88},[82,107433,107434],{"class":92},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[82,107436,98237],{"class":88},[82,107438,669],{"class":92},[82,107440,107441,107443],{"class":84,"line":2579},[82,107442,611],{"class":88},[82,107444,107445],{"class":92},"(prefix)\n",[82,107447,107448,107450,107452,107455],{"class":84,"line":2585},[82,107449,611],{"class":88},[82,107451,93],{"class":92},[82,107453,107454],{"class":96},"\"  timestep:\"",[82,107456,107457],{"class":92},", model.opt.timestep)\n",[82,107459,107460,107462,107464,107467],{"class":84,"line":4350},[82,107461,611],{"class":88},[82,107463,93],{"class":92},[82,107465,107466],{"class":96},"\"  time:\"",[82,107468,104029],{"class":92},[82,107470,107471,107473,107475,107478,107481,107483],{"class":84,"line":4355},[82,107472,611],{"class":88},[82,107474,93],{"class":92},[82,107476,107477],{"class":96},"\"  qpos:\"",[82,107479,107480],{"class":92},", np.round(data.qpos.copy(), ",[82,107482,3051],{"class":88},[82,107484,33074],{"class":92},[82,107486,107487,107489,107491,107494,107497,107499],{"class":84,"line":4360},[82,107488,611],{"class":88},[82,107490,93],{"class":92},[82,107492,107493],{"class":96},"\"  qvel:\"",[82,107495,107496],{"class":92},", np.round(data.qvel.copy(), ",[82,107498,3051],{"class":88},[82,107500,33074],{"class":92},[82,107502,107503],{"class":84,"line":4365},[82,107504,486],{"emptyLinePlaceholder":485},[82,107506,107507],{"class":84,"line":4379},[82,107508,486],{"emptyLinePlaceholder":485},[82,107510,107511,107513,107515,107517,107519],{"class":84,"line":4384},[82,107512,2381],{"class":112},[82,107514,4573],{"class":2384},[82,107516,103949],{"class":92},[82,107518,98237],{"class":88},[82,107520,669],{"class":92},[82,107522,107523,107525,107527,107529,107531],{"class":84,"line":5176},[82,107524,103958],{"class":92},[82,107526,113],{"class":112},[82,107528,103963],{"class":92},[82,107530,103865],{"class":88},[82,107532,119],{"class":92},[82,107534,107535,107537,107539],{"class":84,"line":5190},[82,107536,103972],{"class":92},[82,107538,113],{"class":112},[82,107540,103977],{"class":92},[82,107542,107543],{"class":84,"line":5198},[82,107544,486],{"emptyLinePlaceholder":485},[82,107546,107547,107550,107553],{"class":84,"line":5203},[82,107548,107549],{"class":92},"    print_state(",[82,107551,107552],{"class":96},"\"initial\"",[82,107554,107555],{"class":92},", model, data)\n",[82,107557,107558],{"class":84,"line":5209},[82,107559,486],{"emptyLinePlaceholder":485},[82,107561,107562,107564,107566,107568,107570,107572,107574],{"class":84,"line":5215},[82,107563,1888],{"class":112},[82,107565,104052],{"class":92},[82,107567,603],{"class":112},[82,107569,35013],{"class":88},[82,107571,93],{"class":92},[82,107573,3408],{"class":88},[82,107575,33362],{"class":92},[82,107577,107578],{"class":84,"line":5220},[82,107579,104067],{"class":92},[82,107581,107582],{"class":84,"line":10539},[82,107583,486],{"emptyLinePlaceholder":485},[82,107585,107586,107588,107591],{"class":84,"line":10563},[82,107587,107549],{"class":92},[82,107589,107590],{"class":96},"\"after 50 steps\"",[82,107592,107555],{"class":92},[82,107594,107595],{"class":84,"line":10568},[82,107596,486],{"emptyLinePlaceholder":485},[82,107598,107599],{"class":84,"line":10574},[82,107600,107601],{"class":92},"    mujoco.mj_resetData(model, data)\n",[82,107603,107604,107606,107609],{"class":84,"line":10601},[82,107605,107549],{"class":92},[82,107607,107608],{"class":96},"\"after reset\"",[82,107610,107555],{"class":92},[82,107612,107613],{"class":84,"line":10606},[82,107614,486],{"emptyLinePlaceholder":485},[82,107616,107617,107620,107622,107624,107626],{"class":84,"line":10612},[82,107618,107619],{"class":92},"    data.qpos[",[82,107621,1425],{"class":88},[82,107623,7038],{"class":92},[82,107625,113],{"class":112},[82,107627,107258],{"class":88},[82,107629,107630],{"class":84,"line":10624},[82,107631,107632],{"class":92},"    mujoco.mj_forward(model, data)\n",[82,107634,107635,107637,107640],{"class":84,"line":10636},[82,107636,107549],{"class":92},[82,107638,107639],{"class":96},"\"after manual qpos edit\"",[82,107641,107555],{"class":92},[82,107643,107644],{"class":84,"line":10648},[82,107645,486],{"emptyLinePlaceholder":485},[82,107647,107648],{"class":84,"line":12307},[82,107649,486],{"emptyLinePlaceholder":485},[82,107651,107652,107654,107656,107658,107660],{"class":84,"line":12332},[82,107653,1237],{"class":112},[82,107655,33796],{"class":88},[82,107657,104110],{"class":112},[82,107659,104113],{"class":96},[82,107661,669],{"class":92},[82,107663,107664],{"class":84,"line":12355},[82,107665,104120],{"class":92},[19,107667,106121],{},[73,107669,107671],{"className":26406,"code":107670,"language":26408,"meta":78,"style":78},"touch ch3_python_state.py\n",[32,107672,107673],{"__ignoreMap":78},[82,107674,107675,107677],{"class":84,"line":85},[82,107676,103834],{"class":2384},[82,107678,107679],{"class":96}," ch3_python_state.py\n",[19,107681,104852],{},[73,107683,107685],{"className":26406,"code":107684,"language":26408,"meta":78,"style":78},"python ch3_python_state.py\n",[32,107686,107687],{"__ignoreMap":78},[82,107688,107689,107691],{"class":84,"line":85},[82,107690,77],{"class":2384},[82,107692,107679],{"class":96},[65,107694,104123],{"id":104123},[19,107696,107697],{},"打印状态的函数：",[73,107699,107701],{"className":75,"code":107700,"language":77,"meta":78,"style":78},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[32,107702,107703],{"__ignoreMap":78},[82,107704,107705,107707,107709,107711,107713,107715,107717],{"class":84,"line":85},[82,107706,2381],{"class":112},[82,107708,107426],{"class":2384},[82,107710,107429],{"class":92},[82,107712,3918],{"class":88},[82,107714,107434],{"class":92},[82,107716,98237],{"class":88},[82,107718,669],{"class":92},[19,107720,107721,107722,107724],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[32,107723,35969],{}," 里发生了什么。",[19,107726,107727],{},"推进 50 步：",[73,107729,107731],{"className":75,"code":107730,"language":77,"meta":78,"style":78},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[32,107732,107733,107749],{"__ignoreMap":78},[82,107734,107735,107737,107739,107741,107743,107745,107747],{"class":84,"line":85},[82,107736,597],{"class":112},[82,107738,104052],{"class":92},[82,107740,603],{"class":112},[82,107742,35013],{"class":88},[82,107744,93],{"class":92},[82,107746,3408],{"class":88},[82,107748,33362],{"class":92},[82,107750,107751],{"class":84,"line":157},[82,107752,104250],{"class":92},[19,107754,107755,107756,107759,107760,107762],{},"由于 ",[32,107757,107758],{},"timestep=0.01","，所以 50 步后时间约为 ",[32,107761,37895],{}," 秒。",[19,107764,107765],{},"重置：",[73,107767,107768],{"className":75,"code":107076,"language":77,"meta":78,"style":78},[32,107769,107770],{"__ignoreMap":78},[82,107771,107772],{"class":84,"line":85},[82,107773,107076],{"class":92},[19,107775,107776],{},"这会把时间、位置、速度恢复到初始状态。",[19,107778,107779],{},"手动改高度：",[73,107781,107783],{"className":75,"code":107782,"language":77,"meta":78,"style":78},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[32,107784,107785,107797],{"__ignoreMap":78},[82,107786,107787,107789,107791,107793,107795],{"class":84,"line":85},[82,107788,107249],{"class":92},[82,107790,1425],{"class":88},[82,107792,7038],{"class":92},[82,107794,113],{"class":112},[82,107796,107258],{"class":88},[82,107798,107799],{"class":84,"line":157},[82,107800,107093],{"class":92},[19,107802,107803,107804,107807,107808,107811],{},"这个例子里 ",[32,107805,107806],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[32,107809,107810],{},"2.0"," 表示把小球放到更高的位置。",[65,107813,104259],{"id":104259},[73,107815,107816],{"className":75,"code":107700,"language":77,"meta":78,"style":78},[32,107817,107818],{"__ignoreMap":78},[82,107819,107820,107822,107824,107826,107828,107830,107832],{"class":84,"line":85},[82,107821,2381],{"class":112},[82,107823,107426],{"class":2384},[82,107825,107429],{"class":92},[82,107827,3918],{"class":88},[82,107829,107434],{"class":92},[82,107831,98237],{"class":88},[82,107833,669],{"class":92},[19,107835,107836],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,107838,107839,107848,107853],{},[29,107840,107841,107844,107845,107847],{},[32,107842,107843],{},"prefix","：一段文字，比如 ",[32,107846,107552],{},"，用来说明现在打印的是哪个阶段。",[29,107849,107850,107852],{},[32,107851,104636],{},"：MuJoCo 模型。",[29,107854,107855,107857],{},[32,107856,35969],{},"：MuJoCo 当前状态。",[19,107859,107860,2973,107863,107866],{},[32,107861,107862],{},"prefix: str",[32,107864,107865],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[73,107868,107870],{"className":75,"code":107869,"language":77,"meta":78,"style":78},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[32,107871,107872],{"__ignoreMap":78},[82,107873,107874,107876,107878,107880,107882,107884],{"class":84,"line":85},[82,107875,407],{"class":88},[82,107877,93],{"class":92},[82,107879,107477],{"class":96},[82,107881,107480],{"class":92},[82,107883,3051],{"class":88},[82,107885,33074],{"class":92},[19,107887,107888,107891],{},[32,107889,107890],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[73,107893,107895],{"className":75,"code":107894,"language":77,"meta":78,"style":78},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[32,107896,107897,107909],{"__ignoreMap":78},[82,107898,107899,107901,107903,107905,107907],{"class":84,"line":85},[82,107900,104185],{"class":92},[82,107902,113],{"class":112},[82,107904,103963],{"class":92},[82,107906,103865],{"class":88},[82,107908,119],{"class":92},[82,107910,107911,107913,107915],{"class":84,"line":157},[82,107912,104209],{"class":92},[82,107914,113],{"class":112},[82,107916,103977],{"class":92},[19,107918,107919],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[73,107921,107923],{"className":75,"code":107922,"language":77,"meta":78,"style":78},"print_state(\"initial\", model, data)\n",[32,107924,107925],{"__ignoreMap":78},[82,107926,107927,107930,107932],{"class":84,"line":85},[82,107928,107929],{"class":92},"print_state(",[82,107931,107552],{"class":96},[82,107933,107555],{"class":92},[19,107935,107936,107937,107940],{},"调用刚才定义的 ",[32,107938,107939],{},"print_state"," 函数，打印初始状态。",[73,107942,107943],{"className":75,"code":107730,"language":77,"meta":78,"style":78},[32,107944,107945,107961],{"__ignoreMap":78},[82,107946,107947,107949,107951,107953,107955,107957,107959],{"class":84,"line":85},[82,107948,597],{"class":112},[82,107950,104052],{"class":92},[82,107952,603],{"class":112},[82,107954,35013],{"class":88},[82,107956,93],{"class":92},[82,107958,3408],{"class":88},[82,107960,33362],{"class":92},[82,107962,107963],{"class":84,"line":157},[82,107964,104250],{"class":92},[19,107966,107967],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[73,107969,107970],{"className":75,"code":107076,"language":77,"meta":78,"style":78},[32,107971,107972],{"__ignoreMap":78},[82,107973,107974],{"class":84,"line":85},[82,107975,107076],{"class":92},[19,107977,107978,107979,107981,107982,107984],{},"重置 ",[32,107980,35969],{},"。注意它不会重新创建 ",[32,107983,104636],{},"，因为模型结构没有变，只是状态回到初始值。",[73,107986,107987],{"className":75,"code":107242,"language":77,"meta":78,"style":78},[32,107988,107989],{"__ignoreMap":78},[82,107990,107991,107993,107995,107997,107999],{"class":84,"line":85},[82,107992,107249],{"class":92},[82,107994,1425],{"class":88},[82,107996,7038],{"class":92},[82,107998,113],{"class":112},[82,108000,107258],{"class":88},[19,108002,108003,108004,2973,108007,2973,108010,108012],{},"这行是“手动改状态”。在 freejoint 中，",[32,108005,108006],{},"qpos[0]",[32,108008,108009],{},"qpos[1]",[32,108011,107806],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[73,108014,108015],{"className":75,"code":107093,"language":77,"meta":78,"style":78},[32,108016,108017],{"__ignoreMap":78},[82,108018,108019],{"class":84,"line":85},[82,108020,107093],{"class":92},[19,108022,108023,108024,108026,108027,108029],{},"手动改完 ",[32,108025,106581],{}," 后，调用 ",[32,108028,106801],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108031,104867],{"id":104866},[19,108033,108034],{},"你会看到:",[26,108036,108037,108042,108047,108050],{},[29,108038,108039,108040],{},"初始时间为 ",[32,108041,2244],{},[29,108043,108044,108045],{},"50 步后时间约为 ",[32,108046,37895],{},[29,108048,108049],{},"reset 后状态恢复",[29,108051,108052,108053,108056,108057],{},"手动修改 ",[32,108054,108055],{},"data.qpos[2]"," 后，小球高度变为 ",[32,108058,107810],{},[19,108060,108061,108063],{},[32,108062,107806],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,108065,108066],{},"输出里可以重点看三件事：",[26,108068,108069,108077,108082],{},[29,108070,108071,108073,108074,108076],{},[32,108072,4987],{}," 是否随着 ",[32,108075,103766],{}," 增加。",[29,108078,108079,108081],{},[32,108080,106581],{}," 的 z 坐标是否因为下落而变化。",[29,108083,108084,108086,108087,2611],{},[32,108085,106903],{}," 后时间是否回到 ",[32,108088,2244],{},[14,108090,104899],{"id":104898},[26,108092,108093,108099,108105,108111,108114,108123],{},[29,108094,108095,108096,2611],{},"修改 timestep 为 ",[32,108097,108098],{},"0.005",[29,108100,108101,108102,2611],{},"重新运行，检查 50 步后时间是否约为 ",[32,108103,108104],{},"0.25",[29,108106,108107,108108,2611],{},"修改重力为 ",[32,108109,108110],{},"0 0 -1.0",[29,108112,108113],{},"观察小球下降速度是否变慢。",[29,108115,104962,108116,104965,108119,108122],{},[32,108117,108118],{},"data.qpos[2] = 2.0",[32,108120,108121],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,108124,108125,108126,108129],{},"注释掉 ",[32,108127,108128],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108131,105004],{"id":105003},[65,108133,108135,108136,108138],{"id":108134},"修改-dataqpos-后位置没有更新","修改 ",[32,108137,103621],{}," 后位置没有更新",[19,108140,105013],{},[73,108142,108143],{"className":75,"code":107093,"language":77,"meta":78,"style":78},[32,108144,108145],{"__ignoreMap":78},[82,108146,108147],{"class":84,"line":85},[82,108148,107093],{"class":92},[65,108150,108151],{"id":108151},"数组维度看不懂",[19,108153,108154],{},"打印模型维度:",[73,108156,108158],{"className":75,"code":108157,"language":77,"meta":78,"style":78},"print(model.nq, model.nv, model.nu)\n",[32,108159,108160],{"__ignoreMap":78},[82,108161,108162,108164],{"class":84,"line":85},[82,108163,407],{"class":88},[82,108165,108166],{"class":92},"(model.nq, model.nv, model.nu)\n",[278,108168,108169,108177],{},[281,108170,108171],{},[284,108172,108173,108175],{},[287,108174,107124],{"align":26320},[287,108176,103251],{"align":26320},[294,108178,108179,108189,108199],{},[284,108180,108181,108186],{},[299,108182,108183],{"align":26320},[32,108184,108185],{},"nq",[299,108187,108188],{"align":26320},"位置变量数量",[284,108190,108191,108196],{},[299,108192,108193],{"align":26320},[32,108194,108195],{},"nv",[299,108197,108198],{"align":26320},"速度变量数量",[284,108200,108201,108205],{},[299,108202,108203],{"align":26320},[32,108204,104713],{},[299,108206,108207],{"align":26320},"控制输入数量",[65,108209,108211,108212,108214],{"id":108210},"误以为-qpos-一定等于关节数","误以为 ",[32,108213,106581],{}," 一定等于关节数",[19,108216,108217,108218,85084,108220,108222,108223,108225],{},"不是。例如 ",[32,108219,104171],{},[32,108221,106581],{}," 是 7 维，但 ",[32,108224,106910],{}," 是 6 维。",[65,108227,108229,108230,108232],{"id":108228},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[32,108231,106581],{}," 的第几位",[19,108234,108235],{},"初学时可以先打印：",[73,108237,108239],{"className":75,"code":108238,"language":77,"meta":78,"style":78},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[32,108240,108241,108251,108261,108273],{"__ignoreMap":78},[82,108242,108243,108245,108247,108249],{"class":84,"line":85},[82,108244,407],{"class":88},[82,108246,93],{"class":92},[82,108248,103990],{"class":96},[82,108250,103993],{"class":92},[82,108252,108253,108255,108257,108259],{"class":84,"line":157},[82,108254,407],{"class":88},[82,108256,93],{"class":92},[82,108258,104002],{"class":96},[82,108260,104005],{"class":92},[82,108262,108263,108265,108267,108270],{"class":84,"line":404},[82,108264,407],{"class":88},[82,108266,93],{"class":92},[82,108268,108269],{"class":96},"\"qpos:\"",[82,108271,108272],{"class":92},", data.qpos)\n",[82,108274,108275,108277,108279,108282],{"class":84,"line":413},[82,108276,407],{"class":88},[82,108278,93],{"class":92},[82,108280,108281],{"class":96},"\"qvel:\"",[82,108283,108284],{"class":92},", data.qvel)\n",[19,108286,108287],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[65,108289,108290],{"id":108290},"仿真结果每次都一样",[19,108292,108293,108294,108296],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[32,108295,106581],{},"、目标点或控制输入。",[14,108298,105158],{"id":105157},[19,108300,108301,108302,27203],{},"Python 控制 MuJoCo 的核心就是读写 ",[32,108303,35969],{},[26,108305,108306,108314,108319,108324],{},[29,108307,108308,108309,103569,108311,108313],{},"用 ",[32,108310,103621],{},[32,108312,103624],{}," 读取状态。",[29,108315,108308,108316,108318],{},[32,108317,103627],{}," 写入控制。",[29,108320,108308,108321,108323],{},[32,108322,103766],{}," 推进时间。",[29,108325,108326,108327,108329],{},"手动改状态后用 ",[32,108328,106801],{}," 刷新派生量。",[19,108331,108332],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2671,108334,108335],{},"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":78,"searchDepth":157,"depth":157,"links":108337},[108338,108339,108340,108347,108351,108352,108353,108363],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":108341},[108342,108344,108346],{"id":107105,"depth":404,"text":108343},"qpos、qvel、ctrl 是什么",{"id":107183,"depth":404,"text":108345},"mj_step 和 mj_forward 的区别",{"id":107272,"depth":404,"text":107273},{"id":103803,"depth":157,"text":103804,"children":108348},[108349,108350],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":108354},[108355,108357,108358,108360,108362],{"id":108134,"depth":404,"text":108356},"修改 data.qpos 后位置没有更新",{"id":108151,"depth":404,"text":108151},{"id":108210,"depth":404,"text":108359},"误以为 qpos 一定等于关节数",{"id":108228,"depth":404,"text":108361},"不知道某个元素在 qpos 的第几位",{"id":108290,"depth":404,"text":108290},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106869,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108370,"title":108371,"body":108372,"description":78,"extension":2700,"meta":110062,"navigation":485,"path":110063,"seo":110064,"stem":110065,"__hash__":110066},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108373,"toc":110038},[108374,108377,108379,108382,108384,108409,108412,108431,108434,108436,108438,108462,108464,108478,108480,108521,108523,108547,108549,108552,108586,108588,108601,108604,108672,108681,108685,108688,108722,108728,108731,108735,108774,108777,108797,108801,108844,108846,108875,108878,108884,108887,108889,109283,109285,109297,109299,109310,109312,109315,109344,109352,109355,109390,109393,109395,109403,109406,109408,109419,109429,109449,109452,109488,109500,109548,109567,109609,109622,109650,109655,109676,109686,109704,109707,109741,109744,109764,109767,109786,109792,109794,109797,109803,109809,109819,109822,109828,109837,109839,109885,109887,109893,109899,109902,109905,109925,109928,109934,109940,109942,109965,109968,109971,109980,109983,110021,110023,110026,110032,110035],[10,108375,108371],{"id":108376},"_4关节actuator-与力控制",[14,108378,103198],{"id":103197},[19,108380,108381],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108383,106882],{},[26,108385,108386,108392,108397,108401,108406],{},[29,108387,108388,108391],{},[32,108389,108390],{},"hinge"," 关节",[29,108393,108394],{},[32,108395,108396],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,108398,108399],{},[32,108400,103627],{},[29,108402,108403],{},[32,108404,108405],{},"ctrlrange",[29,108407,108408],{},"读取关节角和角速度",[19,108410,108411],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[73,108413,108415],{"className":75,"code":108414,"language":77,"meta":78,"style":78},"data.ctrl[0] = ...\n",[32,108416,108417],{"__ignoreMap":78},[82,108418,108419,108422,108424,108426,108428],{"class":84,"line":85},[82,108420,108421],{"class":92},"data.ctrl[",[82,108423,2244],{"class":88},[82,108425,7038],{"class":92},[82,108427,113],{"class":112},[82,108429,108430],{"class":88}," ...\n",[19,108432,108433],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108435,103321],{"id":103320},[19,108437,103324],{},[73,108439,108440],{"className":26406,"code":106938,"language":26408,"meta":78,"style":78},[32,108441,108442],{"__ignoreMap":78},[82,108443,108444,108446,108448,108450,108452,108454,108456,108458,108460],{"class":84,"line":85},[82,108445,27161],{"class":2384},[82,108447,28897],{"class":96},[82,108449,26418],{"class":96},[82,108451,28982],{"class":88},[82,108453,106953],{"class":96},[82,108455,103349],{"class":96},[82,108457,105052],{"class":96},[82,108459,103365],{"class":96},[82,108461,106962],{"class":96},[19,108463,105370],{},[73,108465,108466],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},[32,108467,108468],{"__ignoreMap":78},[82,108469,108470,108472,108474,108476],{"class":84,"line":85},[82,108471,26415],{"class":2384},[82,108473,26418],{"class":96},[82,108475,103481],{"class":96},[82,108477,103484],{"class":96},[19,108479,105387],{},[73,108481,108483],{"className":26406,"code":108482,"language":26408,"meta":78,"style":78},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[32,108484,108485,108502,108511],{"__ignoreMap":78},[82,108486,108487,108489,108491,108493,108496,108498,108500],{"class":84,"line":85},[82,108488,32911],{"class":2384},[82,108490,31757],{"class":96},[82,108492,27700],{"class":88},[82,108494,108495],{"class":96}," mujoco-control",[82,108497,103526],{"class":96},[82,108499,103529],{"class":88},[82,108501,103532],{"class":88},[82,108503,108504,108506,108508],{"class":84,"line":157},[82,108505,32911],{"class":2384},[82,108507,103539],{"class":96},[82,108509,108510],{"class":96}," mujoco-control\n",[82,108512,108513,108515,108517,108519],{"class":84,"line":404},[82,108514,26415],{"class":2384},[82,108516,26418],{"class":96},[82,108518,103481],{"class":96},[82,108520,103484],{"class":96},[19,108522,103555],{},[26,108524,108525,108531,108538,108544],{},[29,108526,108527,108530],{},[32,108528,108529],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,108532,108533,108535,108536,2611],{},[32,108534,103627],{}," 长度等于 ",[32,108537,104709],{},[29,108539,84776,108540,108543],{},[32,108541,108542],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,108545,108546],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108548,103596],{"id":103595},[19,108550,108551],{},"关节决定 body 如何运动:",[73,108553,108555],{"className":55627,"code":108554,"language":55629,"meta":78,"style":78},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,108556,108557],{"__ignoreMap":78},[82,108558,108559,108561,108563,108565,108567,108570,108572,108574,108576,108579,108581,108584],{"class":84,"line":85},[82,108560,3659],{"class":92},[82,108562,105507],{"class":53863},[82,108564,17506],{"class":2384},[82,108566,113],{"class":92},[82,108568,108569],{"class":96},"\"hinge\"",[82,108571,56384],{"class":2384},[82,108573,113],{"class":92},[82,108575,108569],{"class":96},[82,108577,108578],{"class":2384}," axis",[82,108580,113],{"class":92},[82,108582,108583],{"class":96},"\"0 1 0\"",[82,108585,103695],{"class":92},[19,108587,105603],{},[26,108589,108590,108595,108598],{},[29,108591,108592,108593],{},"名字是 ",[32,108594,108390],{},[29,108596,108597],{},"类型是旋转关节",[29,108599,108600],{},"绕 y 轴旋转",[19,108602,108603],{},"actuator 决定如何施加控制:",[73,108605,108607],{"className":55627,"code":108606,"language":55629,"meta":78,"style":78},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[32,108608,108609,108618,108664],{"__ignoreMap":78},[82,108610,108611,108613,108616],{"class":84,"line":85},[82,108612,3659],{"class":92},[82,108614,108615],{"class":53863},"actuator",[82,108617,53870],{"class":92},[82,108619,108620,108622,108625,108627,108629,108632,108635,108637,108639,108642,108644,108646,108649,108651,108654,108657,108659,108662],{"class":84,"line":157},[82,108621,54705],{"class":92},[82,108623,108624],{"class":53863},"motor",[82,108626,17506],{"class":2384},[82,108628,113],{"class":92},[82,108630,108631],{"class":96},"\"hinge_motor\"",[82,108633,108634],{"class":2384}," joint",[82,108636,113],{"class":92},[82,108638,108569],{"class":96},[82,108640,108641],{"class":2384}," gear",[82,108643,113],{"class":92},[82,108645,6274],{"class":96},[82,108647,108648],{"class":2384}," ctrlrange",[82,108650,113],{"class":92},[82,108652,108653],{"class":96},"\"-2 2\"",[82,108655,108656],{"class":2384}," ctrllimited",[82,108658,113],{"class":92},[82,108660,108661],{"class":96},"\"true\"",[82,108663,103695],{"class":92},[82,108665,108666,108668,108670],{"class":84,"line":404},[82,108667,54347],{"class":92},[82,108669,108615],{"class":53863},[82,108671,53870],{"class":92},[19,108673,108674,108677,108678,2611],{},[32,108675,108676],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[32,108679,108680],{},"[-2, 2]",[65,108682,108684],{"id":108683},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108686,108687],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[278,108689,108690,108700],{},[281,108691,108692],{},[284,108693,108694,108696,108698],{},[287,108695,28337],{"align":26320},[287,108697,105247],{"align":26320},[287,108699,103285],{"align":26320},[294,108701,108702,108712],{},[284,108703,108704,108706,108709],{},[299,108705,105507],{"align":26320},[299,108707,108708],{"align":26320},"定义能怎么动",[299,108710,108711],{"align":26320},"门轴允许门旋转",[284,108713,108714,108716,108719],{},[299,108715,108615],{"align":26320},[299,108717,108718],{"align":26320},"定义怎么施力或控制",[299,108720,108721],{"align":26320},"人推门、马达带动门",[19,108723,108724,108725,108727],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[32,108726,103627],{}," 主动控制它。",[19,108729,108730],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[65,108732,108734],{"id":108733},"hinge-joint","hinge joint",[73,108736,108738],{"className":55627,"code":108737,"language":55629,"meta":78,"style":78},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[32,108739,108740],{"__ignoreMap":78},[82,108741,108742,108744,108746,108748,108750,108752,108754,108756,108758,108760,108762,108764,108767,108769,108772],{"class":84,"line":85},[82,108743,3659],{"class":92},[82,108745,105507],{"class":53863},[82,108747,17506],{"class":2384},[82,108749,113],{"class":92},[82,108751,108569],{"class":96},[82,108753,56384],{"class":2384},[82,108755,113],{"class":92},[82,108757,108569],{"class":96},[82,108759,108578],{"class":2384},[82,108761,113],{"class":92},[82,108763,108583],{"class":96},[82,108765,108766],{"class":2384}," damping",[82,108768,113],{"class":92},[82,108770,108771],{"class":96},"\"0.1\"",[82,108773,103695],{"class":92},[19,108775,108776],{},"含义：",[26,108778,108779,108785,108791],{},[29,108780,108781,108784],{},[32,108782,108783],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,108786,108787,108790],{},[32,108788,108789],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,108792,108793,108796],{},[32,108794,108795],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[65,108798,108800],{"id":108799},"motor-actuator","motor actuator",[73,108802,108804],{"className":55627,"code":108803,"language":55629,"meta":78,"style":78},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[32,108805,108806],{"__ignoreMap":78},[82,108807,108808,108810,108812,108814,108816,108818,108820,108822,108824,108826,108828,108830,108832,108834,108836,108838,108840,108842],{"class":84,"line":85},[82,108809,3659],{"class":92},[82,108811,108624],{"class":53863},[82,108813,17506],{"class":2384},[82,108815,113],{"class":92},[82,108817,108631],{"class":96},[82,108819,108634],{"class":2384},[82,108821,113],{"class":92},[82,108823,108569],{"class":96},[82,108825,108641],{"class":2384},[82,108827,113],{"class":92},[82,108829,6274],{"class":96},[82,108831,108648],{"class":2384},[82,108833,113],{"class":92},[82,108835,108653],{"class":96},[82,108837,108656],{"class":2384},[82,108839,113],{"class":92},[82,108841,108661],{"class":96},[82,108843,103695],{"class":92},[19,108845,108776],{},[26,108847,108848,108857,108863,108869],{},[29,108849,108850,108853,108854,108856],{},[32,108851,108852],{},"joint=\"hinge\"","：这个电机作用在名为 ",[32,108855,108390],{}," 的关节上。",[29,108858,108859,108862],{},[32,108860,108861],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,108864,108865,108868],{},[32,108866,108867],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,108870,108871,108874],{},[32,108872,108873],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108876,108877],{},"简单理解：",[73,108879,108882],{"className":108880,"code":108881,"language":7780,"meta":78},[7778],"实际施加效果 ≈ data.ctrl[0] * gear\n",[32,108883,108881],{"__ignoreMap":78},[19,108885,108886],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108888,103804],{"id":103803},[73,108890,108892],{"className":75,"code":108891,"language":77,"meta":78,"style":78},"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",[32,108893,108894,108901,108905,108911,108921,108925,108929,108937,108942,108947,108951,108955,108960,108965,108969,108974,108979,108984,108989,108993,108997,109001,109006,109011,109016,109020,109024,109028,109032,109044,109056,109064,109068,109078,109088,109098,109102,109115,109128,109132,109149,109163,109198,109202,109206,109217,109232,109247,109259,109263,109267,109279],{"__ignoreMap":78},[82,108895,108896,108898],{"class":84,"line":85},[82,108897,1123],{"class":112},[82,108899,108900],{"class":92}," math\n",[82,108902,108903],{"class":84,"line":157},[82,108904,486],{"emptyLinePlaceholder":485},[82,108906,108907,108909],{"class":84,"line":404},[82,108908,1123],{"class":112},[82,108910,103852],{"class":92},[82,108912,108913,108915,108917,108919],{"class":84,"line":413},[82,108914,1123],{"class":112},[82,108916,33955],{"class":92},[82,108918,728],{"class":112},[82,108920,33960],{"class":92},[82,108922,108923],{"class":84,"line":508},[82,108924,486],{"emptyLinePlaceholder":485},[82,108926,108927],{"class":84,"line":513},[82,108928,486],{"emptyLinePlaceholder":485},[82,108930,108931,108933,108935],{"class":84,"line":1388},[82,108932,103865],{"class":88},[82,108934,259],{"class":112},[82,108936,103870],{"class":96},[82,108938,108939],{"class":84,"line":1394},[82,108940,108941],{"class":96},"\u003Cmujoco model=\"one_link_motor\">\n",[82,108943,108944],{"class":84,"line":1399},[82,108945,108946],{"class":96},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[82,108948,108949],{"class":84,"line":1430},[82,108950,486],{"emptyLinePlaceholder":485},[82,108952,108953],{"class":84,"line":1818},[82,108954,103889],{"class":96},[82,108956,108957],{"class":84,"line":2082},[82,108958,108959],{"class":96},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[82,108961,108962],{"class":84,"line":2233},[82,108963,108964],{"class":96},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[82,108966,108967],{"class":84,"line":2255},[82,108968,486],{"emptyLinePlaceholder":485},[82,108970,108971],{"class":84,"line":2260},[82,108972,108973],{"class":96},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[82,108975,108976],{"class":84,"line":2298},[82,108977,108978],{"class":96},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[82,108980,108981],{"class":84,"line":2303},[82,108982,108983],{"class":96},"        \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",[82,108985,108986],{"class":84,"line":2321},[82,108987,108988],{"class":96},"      \u003C\u002Fbody>\n",[82,108990,108991],{"class":84,"line":2533},[82,108992,103918],{"class":96},[82,108994,108995],{"class":84,"line":2538},[82,108996,103923],{"class":96},[82,108998,108999],{"class":84,"line":2548},[82,109000,486],{"emptyLinePlaceholder":485},[82,109002,109003],{"class":84,"line":2579},[82,109004,109005],{"class":96},"  \u003Cactuator>\n",[82,109007,109008],{"class":84,"line":2585},[82,109009,109010],{"class":96},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[82,109012,109013],{"class":84,"line":4350},[82,109014,109015],{"class":96},"  \u003C\u002Factuator>\n",[82,109017,109018],{"class":84,"line":4355},[82,109019,103928],{"class":96},[82,109021,109022],{"class":84,"line":4360},[82,109023,98249],{"class":96},[82,109025,109026],{"class":84,"line":4365},[82,109027,486],{"emptyLinePlaceholder":485},[82,109029,109030],{"class":84,"line":4379},[82,109031,486],{"emptyLinePlaceholder":485},[82,109033,109034,109036,109038,109040,109042],{"class":84,"line":4384},[82,109035,2381],{"class":112},[82,109037,4573],{"class":2384},[82,109039,103949],{"class":92},[82,109041,98237],{"class":88},[82,109043,669],{"class":92},[82,109045,109046,109048,109050,109052,109054],{"class":84,"line":5176},[82,109047,103958],{"class":92},[82,109049,113],{"class":112},[82,109051,103963],{"class":92},[82,109053,103865],{"class":88},[82,109055,119],{"class":92},[82,109057,109058,109060,109062],{"class":84,"line":5190},[82,109059,103972],{"class":92},[82,109061,113],{"class":112},[82,109063,103977],{"class":92},[82,109065,109066],{"class":84,"line":5198},[82,109067,486],{"emptyLinePlaceholder":485},[82,109069,109070,109072,109074,109076],{"class":84,"line":5203},[82,109071,611],{"class":88},[82,109073,93],{"class":92},[82,109075,103990],{"class":96},[82,109077,103993],{"class":92},[82,109079,109080,109082,109084,109086],{"class":84,"line":5209},[82,109081,611],{"class":88},[82,109083,93],{"class":92},[82,109085,104002],{"class":96},[82,109087,104005],{"class":92},[82,109089,109090,109092,109094,109096],{"class":84,"line":5215},[82,109091,611],{"class":88},[82,109093,93],{"class":92},[82,109095,104014],{"class":96},[82,109097,104017],{"class":92},[82,109099,109100],{"class":84,"line":5220},[82,109101,486],{"emptyLinePlaceholder":485},[82,109103,109104,109106,109109,109111,109113],{"class":84,"line":10539},[82,109105,2219],{"class":112},[82,109107,109108],{"class":92}," model.nu ",[82,109110,23532],{"class":112},[82,109112,27703],{"class":88},[82,109114,669],{"class":92},[82,109116,109117,109119,109121,109123,109126],{"class":84,"line":10563},[82,109118,105983],{"class":112},[82,109120,105986],{"class":88},[82,109122,93],{"class":92},[82,109124,109125],{"class":96},"\"expected exactly one actuator\"",[82,109127,119],{"class":92},[82,109129,109130],{"class":84,"line":10568},[82,109131,486],{"emptyLinePlaceholder":485},[82,109133,109134,109136,109138,109140,109142,109144,109147],{"class":84,"line":10574},[82,109135,1888],{"class":112},[82,109137,34188],{"class":92},[82,109139,603],{"class":112},[82,109141,35013],{"class":88},[82,109143,93],{"class":92},[82,109145,109146],{"class":88},"2000",[82,109148,33362],{"class":92},[82,109150,109151,109154,109156,109158,109160],{"class":84,"line":10601},[82,109152,109153],{"class":92},"        t ",[82,109155,113],{"class":112},[82,109157,34188],{"class":92},[82,109159,3212],{"class":112},[82,109161,109162],{"class":92}," model.opt.timestep\n",[82,109164,109165,109168,109170,109172,109174,109177,109179,109182,109184,109186,109189,109191,109193,109195],{"class":84,"line":10606},[82,109166,109167],{"class":92},"        data.ctrl[",[82,109169,2244],{"class":88},[82,109171,7038],{"class":92},[82,109173,113],{"class":112},[82,109175,109176],{"class":88}," 1.5",[82,109178,9110],{"class":112},[82,109180,109181],{"class":92}," math.sin(",[82,109183,107810],{"class":88},[82,109185,9110],{"class":112},[82,109187,109188],{"class":92}," math.pi ",[82,109190,3212],{"class":112},[82,109192,64425],{"class":88},[82,109194,9110],{"class":112},[82,109196,109197],{"class":92}," t)\n",[82,109199,109200],{"class":84,"line":10612},[82,109201,104067],{"class":92},[82,109203,109204],{"class":84,"line":10624},[82,109205,486],{"emptyLinePlaceholder":485},[82,109207,109208,109210,109212,109215],{"class":84,"line":10636},[82,109209,611],{"class":88},[82,109211,93],{"class":92},[82,109213,109214],{"class":96},"\"time:\"",[82,109216,104029],{"class":92},[82,109218,109219,109221,109223,109226,109228,109230],{"class":84,"line":10648},[82,109220,611],{"class":88},[82,109222,93],{"class":92},[82,109224,109225],{"class":96},"\"joint qpos:\"",[82,109227,107480],{"class":92},[82,109229,3051],{"class":88},[82,109231,33074],{"class":92},[82,109233,109234,109236,109238,109241,109243,109245],{"class":84,"line":12307},[82,109235,611],{"class":88},[82,109237,93],{"class":92},[82,109239,109240],{"class":96},"\"joint qvel:\"",[82,109242,107496],{"class":92},[82,109244,3051],{"class":88},[82,109246,33074],{"class":92},[82,109248,109249,109251,109253,109256],{"class":84,"line":12332},[82,109250,611],{"class":88},[82,109252,93],{"class":92},[82,109254,109255],{"class":96},"\"last ctrl:\"",[82,109257,109258],{"class":92},", data.ctrl.copy())\n",[82,109260,109261],{"class":84,"line":12355},[82,109262,486],{"emptyLinePlaceholder":485},[82,109264,109265],{"class":84,"line":12379},[82,109266,486],{"emptyLinePlaceholder":485},[82,109268,109269,109271,109273,109275,109277],{"class":84,"line":12384},[82,109270,1237],{"class":112},[82,109272,33796],{"class":88},[82,109274,104110],{"class":112},[82,109276,104113],{"class":96},[82,109278,669],{"class":92},[82,109280,109281],{"class":84,"line":12389},[82,109282,104120],{"class":92},[19,109284,106121],{},[73,109286,109288],{"className":26406,"code":109287,"language":26408,"meta":78,"style":78},"touch ch4_joint_motor.py\n",[32,109289,109290],{"__ignoreMap":78},[82,109291,109292,109294],{"class":84,"line":85},[82,109293,103834],{"class":2384},[82,109295,109296],{"class":96}," ch4_joint_motor.py\n",[19,109298,104852],{},[73,109300,109302],{"className":26406,"code":109301,"language":26408,"meta":78,"style":78},"python ch4_joint_motor.py\n",[32,109303,109304],{"__ignoreMap":78},[82,109305,109306,109308],{"class":84,"line":85},[82,109307,77],{"class":2384},[82,109309,109296],{"class":96},[65,109311,104123],{"id":104123},[19,109313,109314],{},"检查 actuator 数量：",[73,109316,109318],{"className":75,"code":109317,"language":77,"meta":78,"style":78},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[32,109319,109320,109332],{"__ignoreMap":78},[82,109321,109322,109324,109326,109328,109330],{"class":84,"line":85},[82,109323,1237],{"class":112},[82,109325,109108],{"class":92},[82,109327,23532],{"class":112},[82,109329,27703],{"class":88},[82,109331,669],{"class":92},[82,109333,109334,109336,109338,109340,109342],{"class":84,"line":157},[82,109335,106446],{"class":112},[82,109337,105986],{"class":88},[82,109339,93],{"class":92},[82,109341,109125],{"class":96},[82,109343,119],{"class":92},[19,109345,109346,109348,109349,109351],{},[32,109347,104709],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[32,109350,103627],{}," 长度应该是 1。",[19,109353,109354],{},"产生正弦控制信号：",[73,109356,109358],{"className":75,"code":109357,"language":77,"meta":78,"style":78},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[32,109359,109360],{"__ignoreMap":78},[82,109361,109362,109364,109366,109368,109370,109372,109374,109376,109378,109380,109382,109384,109386,109388],{"class":84,"line":85},[82,109363,108421],{"class":92},[82,109365,2244],{"class":88},[82,109367,7038],{"class":92},[82,109369,113],{"class":112},[82,109371,109176],{"class":88},[82,109373,9110],{"class":112},[82,109375,109181],{"class":92},[82,109377,107810],{"class":88},[82,109379,9110],{"class":112},[82,109381,109188],{"class":92},[82,109383,3212],{"class":112},[82,109385,64425],{"class":88},[82,109387,9110],{"class":112},[82,109389,109197],{"class":92},[19,109391,109392],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109394,104224],{},[73,109396,109397],{"className":75,"code":107055,"language":77,"meta":78,"style":78},[32,109398,109399],{"__ignoreMap":78},[82,109400,109401],{"class":84,"line":85},[82,109402,107055],{"class":92},[19,109404,109405],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[65,109407,104259],{"id":104259},[73,109409,109411],{"className":75,"code":109410,"language":77,"meta":78,"style":78},"import math\n",[32,109412,109413],{"__ignoreMap":78},[82,109414,109415,109417],{"class":84,"line":85},[82,109416,1123],{"class":112},[82,109418,108900],{"class":92},[19,109420,109421,109422,103569,109425,109428],{},"导入 Python 标准库里的数学模块。后面要用 ",[32,109423,109424],{},"math.sin",[32,109426,109427],{},"math.pi"," 生成周期变化的控制信号。",[73,109430,109431],{"className":75,"code":106237,"language":77,"meta":78,"style":78},[32,109432,109433,109439],{"__ignoreMap":78},[82,109434,109435,109437],{"class":84,"line":85},[82,109436,1123],{"class":112},[82,109438,103852],{"class":92},[82,109440,109441,109443,109445,109447],{"class":84,"line":157},[82,109442,1123],{"class":112},[82,109444,33955],{"class":92},[82,109446,728],{"class":112},[82,109448,33960],{"class":92},[19,109450,109451],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[73,109453,109454],{"className":55627,"code":108737,"language":55629,"meta":78,"style":78},[32,109455,109456],{"__ignoreMap":78},[82,109457,109458,109460,109462,109464,109466,109468,109470,109472,109474,109476,109478,109480,109482,109484,109486],{"class":84,"line":85},[82,109459,3659],{"class":92},[82,109461,105507],{"class":53863},[82,109463,17506],{"class":2384},[82,109465,113],{"class":92},[82,109467,108569],{"class":96},[82,109469,56384],{"class":2384},[82,109471,113],{"class":92},[82,109473,108569],{"class":96},[82,109475,108578],{"class":2384},[82,109477,113],{"class":92},[82,109479,108583],{"class":96},[82,109481,108766],{"class":2384},[82,109483,113],{"class":92},[82,109485,108771],{"class":96},[82,109487,103695],{"class":92},[19,109489,109490,109491,109493,109494,109496,109497,109499],{},"这行定义关节。",[32,109492,108390],{}," 表示旋转关节。",[32,109495,108789],{}," 表示绕 y 轴旋转。",[32,109498,108795],{}," 表示有一点阻尼，运动不会完全无损耗。",[73,109501,109503],{"className":55627,"code":109502,"language":55629,"meta":78,"style":78},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[32,109504,109505],{"__ignoreMap":78},[82,109506,109507,109509,109511,109513,109515,109518,109520,109522,109525,109528,109530,109533,109535,109537,109539,109541,109543,109546],{"class":84,"line":85},[82,109508,3659],{"class":92},[82,109510,103671],{"class":53863},[82,109512,17506],{"class":2384},[82,109514,113],{"class":92},[82,109516,109517],{"class":96},"\"link_geom\"",[82,109519,56384],{"class":2384},[82,109521,113],{"class":92},[82,109523,109524],{"class":96},"\"capsule\"",[82,109526,109527],{"class":2384}," fromto",[82,109529,113],{"class":92},[82,109531,109532],{"class":96},"\"0 0 0 0 0 0.5\"",[82,109534,103687],{"class":2384},[82,109536,113],{"class":92},[82,109538,106329],{"class":96},[82,109540,104552],{"class":2384},[82,109542,113],{"class":92},[82,109544,109545],{"class":96},"\"0.5\"",[82,109547,103695],{"class":92},[19,109549,109550,109551,109553,109554,109556,109557,109560,109561,2611,109564,109566],{},"这行定义摆杆的形状。",[32,109552,105716],{}," 是胶囊体，适合表示杆子。",[32,109555,105727],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[32,109558,109559],{},"(0,0,0)"," 延伸到 ",[32,109562,109563],{},"(0,0,0.5)",[32,109565,105721],{}," 是半径。",[73,109568,109569],{"className":55627,"code":108803,"language":55629,"meta":78,"style":78},[32,109570,109571],{"__ignoreMap":78},[82,109572,109573,109575,109577,109579,109581,109583,109585,109587,109589,109591,109593,109595,109597,109599,109601,109603,109605,109607],{"class":84,"line":85},[82,109574,3659],{"class":92},[82,109576,108624],{"class":53863},[82,109578,17506],{"class":2384},[82,109580,113],{"class":92},[82,109582,108631],{"class":96},[82,109584,108634],{"class":2384},[82,109586,113],{"class":92},[82,109588,108569],{"class":96},[82,109590,108641],{"class":2384},[82,109592,113],{"class":92},[82,109594,6274],{"class":96},[82,109596,108648],{"class":2384},[82,109598,113],{"class":92},[82,109600,108653],{"class":96},[82,109602,108656],{"class":2384},[82,109604,113],{"class":92},[82,109606,108661],{"class":96},[82,109608,103695],{"class":92},[19,109610,109611,109612,109614,109615,109618,109619,109621],{},"这行定义电机。它作用在 ",[32,109613,108390],{}," 关节上。",[32,109616,109617],{},"gear"," 可以理解成放大倍数。",[32,109620,108405],{}," 限制控制输入范围。",[73,109623,109624],{"className":75,"code":109317,"language":77,"meta":78,"style":78},[32,109625,109626,109638],{"__ignoreMap":78},[82,109627,109628,109630,109632,109634,109636],{"class":84,"line":85},[82,109629,1237],{"class":112},[82,109631,109108],{"class":92},[82,109633,23532],{"class":112},[82,109635,27703],{"class":88},[82,109637,669],{"class":92},[82,109639,109640,109642,109644,109646,109648],{"class":84,"line":157},[82,109641,106446],{"class":112},[82,109643,105986],{"class":88},[82,109645,93],{"class":92},[82,109647,109125],{"class":96},[82,109649,119],{"class":92},[19,109651,109652,109654],{},[32,109653,104709],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[73,109656,109658],{"className":75,"code":109657,"language":77,"meta":78,"style":78},"for step in range(2000):\n",[32,109659,109660],{"__ignoreMap":78},[82,109661,109662,109664,109666,109668,109670,109672,109674],{"class":84,"line":85},[82,109663,597],{"class":112},[82,109665,34188],{"class":92},[82,109667,603],{"class":112},[82,109669,35013],{"class":88},[82,109671,93],{"class":92},[82,109673,109146],{"class":88},[82,109675,33362],{"class":92},[19,109677,109678,109679,109681,109682,109685],{},"循环 2000 步。这里没有用 ",[32,109680,3740],{},"，而是用 ",[32,109683,109684],{},"step","，因为后面要用当前步数计算时间。",[73,109687,109689],{"className":75,"code":109688,"language":77,"meta":78,"style":78},"t = step * model.opt.timestep\n",[32,109690,109691],{"__ignoreMap":78},[82,109692,109693,109696,109698,109700,109702],{"class":84,"line":85},[82,109694,109695],{"class":92},"t ",[82,109697,113],{"class":112},[82,109699,34188],{"class":92},[82,109701,3212],{"class":112},[82,109703,109162],{"class":92},[19,109705,109706],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[73,109708,109709],{"className":75,"code":109357,"language":77,"meta":78,"style":78},[32,109710,109711],{"__ignoreMap":78},[82,109712,109713,109715,109717,109719,109721,109723,109725,109727,109729,109731,109733,109735,109737,109739],{"class":84,"line":85},[82,109714,108421],{"class":92},[82,109716,2244],{"class":88},[82,109718,7038],{"class":92},[82,109720,113],{"class":112},[82,109722,109176],{"class":88},[82,109724,9110],{"class":112},[82,109726,109181],{"class":92},[82,109728,107810],{"class":88},[82,109730,9110],{"class":112},[82,109732,109188],{"class":92},[82,109734,3212],{"class":112},[82,109736,64425],{"class":88},[82,109738,9110],{"class":112},[82,109740,109197],{"class":92},[19,109742,109743],{},"这行给电机输入一个正弦波。拆开看：",[26,109745,109746,109752,109758],{},[29,109747,109748,109751],{},[32,109749,109750],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,109753,109754,109757],{},[32,109755,109756],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,109759,109760,109763],{},[32,109761,109762],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109765,109766],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[73,109768,109770],{"className":75,"code":109769,"language":77,"meta":78,"style":78},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[32,109771,109772],{"__ignoreMap":78},[82,109773,109774,109776,109778,109780,109782,109784],{"class":84,"line":85},[82,109775,407],{"class":88},[82,109777,93],{"class":92},[82,109779,109225],{"class":96},[82,109781,107480],{"class":92},[82,109783,3051],{"class":88},[82,109785,33074],{"class":92},[19,109787,109788,109789,109791],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[32,109790,103621],{}," 只有一个数。",[14,109793,104867],{"id":104866},[19,109795,109796],{},"输出类似:",[73,109798,109801],{"className":109799,"code":109800,"language":7780,"meta":78},[7778],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[32,109802,109800],{"__ignoreMap":78},[19,109804,109805,109806,109808],{},"这里 ",[32,109807,108676],{}," 是电机输入。",[19,109810,109811,109814,109815,109818],{},[32,109812,109813],{},"joint qpos"," 是关节角度，单位通常是弧度。",[32,109816,109817],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109820,109821],{},"角度单位提示：",[73,109823,109826],{"className":109824,"code":109825,"language":7780,"meta":78},[7778],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[32,109827,109825],{"__ignoreMap":78},[19,109829,109830,109831,109833,109834,109836],{},"如果你看到 ",[32,109832,106581],{}," 是 ",[32,109835,37895],{},"，大约就是 28.6 度。",[14,109838,104899],{"id":104898},[26,109840,109841,109848,109851,109858,109861,109869,109877],{},[29,109842,104962,109843,104965,109845,2611],{},[32,109844,108861],{},[32,109846,109847],{},"gear=\"5\"",[29,109849,109850],{},"重新运行，观察关节运动是否更剧烈。",[29,109852,104962,109853,104965,109855,2611],{},[32,109854,108405],{},[32,109856,109857],{},"-0.2 0.2",[29,109859,109860],{},"重新运行，观察控制能力是否变弱。",[29,109862,109863,109864,109866,109867,2611],{},"去掉 actuator，确认 ",[32,109865,104709],{}," 变成 ",[32,109868,2244],{},[29,109870,104962,109871,104965,109873,109876],{},[32,109872,108795],{},[32,109874,109875],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,109878,104962,109879,104965,109881,109884],{},[32,109880,108789],{},[32,109882,109883],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109886,105004],{"id":105003},[65,109888,109890],{"id":109889},"indexerror-index-0-is-out-of-bounds",[32,109891,109892],{},"IndexError: index 0 is out of bounds",[19,109894,109895,109896,109898],{},"原因是 ",[32,109897,108542],{},"，没有 actuator。",[65,109900,109901],{"id":109901},"关节几乎不动",[19,109903,109904],{},"可能原因:",[26,109906,109907,109912,109916,109922],{},[29,109908,109909,109911],{},[32,109910,109617],{}," 太小",[29,109913,109914,109911],{},[32,109915,108405],{},[29,109917,109918,109921],{},[32,109919,109920],{},"damping"," 太大",[29,109923,109924],{},"重力方向导致运动不明显",[65,109926,109927],{"id":109927},"模型编译失败",[19,109929,109930,109931,109933],{},"检查 actuator 引用的 ",[32,109932,108852],{}," 是否存在，joint 名称是否拼写一致。",[65,109935,109937,109939],{"id":109936},"datactrl0-写了但没有效果",[32,109938,108676],{}," 写了但没有效果",[19,109941,105126],{},[26,109943,109944,109949,109952,109957,109962],{},[29,109945,109946,109948],{},[32,109947,104709],{}," 是否大于 0。",[29,109950,109951],{},"motor 是否引用了正确 joint。",[29,109953,109954,109956],{},[32,109955,109617],{}," 是否太小。",[29,109958,109959,109961],{},[32,109960,108405],{}," 是否把输入限制得太小。",[29,109963,109964],{},"body 是否真的有可动 joint。",[65,109966,109967],{"id":109967},"控制输入超过范围会怎样",[19,109969,109970],{},"如果设置了：",[73,109972,109974],{"className":55627,"code":109973,"language":55629,"meta":78,"style":78},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[32,109975,109976],{"__ignoreMap":78},[82,109977,109978],{"class":84,"line":85},[82,109979,109973],{"class":92},[19,109981,109982],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[73,109984,109986],{"className":75,"code":109985,"language":77,"meta":78,"style":78},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[32,109987,109988,110008],{"__ignoreMap":78},[82,109989,109990,109993,109995,109998,110000,110002,110004,110006],{"class":84,"line":85},[82,109991,109992],{"class":92},"action ",[82,109994,113],{"class":112},[82,109996,109997],{"class":92}," np.clip(action, ",[82,109999,3288],{"class":112},[82,110001,107810],{"class":88},[82,110003,100],{"class":92},[82,110005,107810],{"class":88},[82,110007,119],{"class":92},[82,110009,110010,110012,110014,110016,110018],{"class":84,"line":157},[82,110011,108421],{"class":92},[82,110013,2244],{"class":88},[82,110015,7038],{"class":92},[82,110017,113],{"class":112},[82,110019,110020],{"class":92}," action\n",[14,110022,105158],{"id":105157},[19,110024,110025],{},"这一章建立了控制任务的基本形式：",[73,110027,110030],{"className":110028,"code":110029,"language":7780,"meta":78},[7778],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[32,110031,110029],{"__ignoreMap":78},[19,110033,110034],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2671,110036,110037],{},"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":78,"searchDepth":157,"depth":157,"links":110039},[110040,110041,110042,110047,110051,110052,110053,110061],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":110043},[110044,110045,110046],{"id":108683,"depth":404,"text":108684},{"id":108733,"depth":404,"text":108734},{"id":108799,"depth":404,"text":108800},{"id":103803,"depth":157,"text":103804,"children":110048},[110049,110050],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":110054},[110055,110056,110057,110058,110060],{"id":109889,"depth":404,"text":109892},{"id":109901,"depth":404,"text":109901},{"id":109927,"depth":404,"text":109927},{"id":109936,"depth":404,"text":110059},"data.ctrl[0] 写了但没有效果",{"id":109967,"depth":404,"text":109967},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108371,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110068,"title":110069,"body":110070,"description":78,"extension":2700,"meta":111975,"navigation":485,"path":111976,"seo":111977,"stem":111978,"__hash__":111979},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110071,"toc":111951},[110072,110075,110077,110080,110088,110091,110108,110111,110136,110139,110185,110187,110189,110244,110246,110265,110267,110310,110313,110330,110333,110349,110359,110366,110368,110371,110374,110407,110410,110458,110462,110465,110479,110488,110492,110495,110520,110523,110527,110540,110543,110549,110552,110567,110569,110572,110832,110834,110846,110849,111158,111160,111172,111174,111177,111192,111197,111200,111222,111225,111228,111262,111265,111269,111280,111283,111300,111303,111317,111324,111344,111351,111365,111368,111380,111395,111415,111418,111440,111443,111447,111462,111473,111488,111491,111521,111537,111566,111574,111598,111601,111619,111629,111641,111648,111657,111663,111672,111675,111677,111686,111689,111704,111706,111709,111720,111723,111734,111737,111755,111757,111774,111777,111805,111807,111811,111814,111844,111850,111853,111857,111865,111868,111870,111891,111894,111897,111913,111916,111932,111934,111937,111948],[10,110073,110069],{"id":110074},"_5viewer-可视化与-renderer-离屏渲染",[14,110076,103198],{"id":103197},[19,110078,110079],{},"本章掌握两类可视化方式:",[26,110081,110082,110085],{},[29,110083,110084],{},"交互式 viewer: 适合人工观察仿真",[29,110086,110087],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,110089,110090],{},"使用官方接口:",[73,110092,110094],{"className":75,"code":110093,"language":77,"meta":78,"style":78},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[32,110095,110096,110103],{"__ignoreMap":78},[82,110097,110098,110100],{"class":84,"line":85},[82,110099,1123],{"class":112},[82,110101,110102],{"class":92}," mujoco.viewer\n",[82,110104,110105],{"class":84,"line":157},[82,110106,110107],{"class":92},"mujoco.viewer.launch_passive(model, data)\n",[19,110109,110110],{},"以及:",[73,110112,110114],{"className":75,"code":110113,"language":77,"meta":78,"style":78},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[32,110115,110116,110126],{"__ignoreMap":78},[82,110117,110118,110121,110123],{"class":84,"line":85},[82,110119,110120],{"class":92},"renderer ",[82,110122,113],{"class":112},[82,110124,110125],{"class":92}," mujoco.Renderer(model)\n",[82,110127,110128,110131,110133],{"class":84,"line":157},[82,110129,110130],{"class":92},"image ",[82,110132,113],{"class":112},[82,110134,110135],{"class":92}," renderer.render()\n",[19,110137,110138],{},"新手建议先理解二者区别：",[278,110140,110141,110157],{},[281,110142,110143],{},[284,110144,110145,110148,110151,110154],{},[287,110146,110147],{"align":26320},"工具",[287,110149,110150],{"align":26320},"用途",[287,110152,110153],{"align":26320},"是否打开窗口",[287,110155,110156],{"align":26320},"常见场景",[294,110158,110159,110172],{},[284,110160,110161,110164,110167,110169],{},[299,110162,110163],{"align":26320},"Viewer",[299,110165,110166],{"align":26320},"人眼实时观察仿真",[299,110168,107215],{"align":26320},[299,110170,110171],{"align":26320},"调试模型、看控制效果",[284,110173,110174,110177,110180,110182],{},[299,110175,110176],{"align":26320},"Renderer",[299,110178,110179],{"align":26320},"生成图像数组",[299,110181,107228],{"align":26320},[299,110183,110184],{"align":26320},"保存图片、训练视觉策略、服务器批量采集",[14,110186,103321],{"id":103320},[19,110188,103324],{},[73,110190,110192],{"className":26406,"code":110191,"language":26408,"meta":78,"style":78},"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",[32,110193,110194,110206,110216,110224,110232],{"__ignoreMap":78},[82,110195,110196,110198,110200,110202,110204],{"class":84,"line":85},[82,110197,27161],{"class":2384},[82,110199,28897],{"class":96},[82,110201,26418],{"class":96},[82,110203,28982],{"class":88},[82,110205,27263],{"class":88},[82,110207,110208,110210,110212,110214],{"class":84,"line":157},[82,110209,103359],{"class":96},[82,110211,103362],{"class":96},[82,110213,103365],{"class":96},[82,110215,27263],{"class":88},[82,110217,110218,110220,110222],{"class":84,"line":404},[82,110219,103372],{"class":96},[82,110221,103375],{"class":96},[82,110223,27263],{"class":88},[82,110225,110226,110228,110230],{"class":84,"line":413},[82,110227,103382],{"class":96},[82,110229,103385],{"class":96},[82,110231,27263],{"class":88},[82,110233,110234,110236,110238,110240,110242],{"class":84,"line":508},[82,110235,103392],{"class":96},[82,110237,103395],{"class":96},[82,110239,103398],{"class":96},[82,110241,103401],{"class":96},[82,110243,105067],{"class":96},[19,110245,105370],{},[73,110247,110249],{"className":26406,"code":110248,"language":26408,"meta":78,"style":78},"pip install \"mujoco>=2.3\" numpy pillow\n",[32,110250,110251],{"__ignoreMap":78},[82,110252,110253,110255,110257,110259,110262],{"class":84,"line":85},[82,110254,26415],{"class":2384},[82,110256,26418],{"class":96},[82,110258,103481],{"class":96},[82,110260,110261],{"class":96}," numpy",[82,110263,110264],{"class":96}," pillow\n",[19,110266,105387],{},[73,110268,110270],{"className":26406,"code":110269,"language":26408,"meta":78,"style":78},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[32,110271,110272,110289,110298],{"__ignoreMap":78},[82,110273,110274,110276,110278,110280,110283,110285,110287],{"class":84,"line":85},[82,110275,32911],{"class":2384},[82,110277,31757],{"class":96},[82,110279,27700],{"class":88},[82,110281,110282],{"class":96}," mujoco-render",[82,110284,103526],{"class":96},[82,110286,103529],{"class":88},[82,110288,103532],{"class":88},[82,110290,110291,110293,110295],{"class":84,"line":157},[82,110292,32911],{"class":2384},[82,110294,103539],{"class":96},[82,110296,110297],{"class":96}," mujoco-render\n",[82,110299,110300,110302,110304,110306,110308],{"class":84,"line":404},[82,110301,26415],{"class":2384},[82,110303,26418],{"class":96},[82,110305,103481],{"class":96},[82,110307,110261],{"class":96},[82,110309,110264],{"class":96},[19,110311,110312],{},"离屏渲染后端:",[73,110314,110316],{"className":26406,"code":110315,"language":26408,"meta":78,"style":78},"export MUJOCO_GL=egl\n",[32,110317,110318],{"__ignoreMap":78},[82,110319,110320,110322,110325,110327],{"class":84,"line":85},[82,110321,27627],{"class":112},[82,110323,110324],{"class":92}," MUJOCO_GL",[82,110326,113],{"class":112},[82,110328,110329],{"class":92},"egl\n",[19,110331,110332],{},"或:",[73,110334,110336],{"className":26406,"code":110335,"language":26408,"meta":78,"style":78},"export MUJOCO_GL=osmesa\n",[32,110337,110338],{"__ignoreMap":78},[82,110339,110340,110342,110344,110346],{"class":84,"line":85},[82,110341,27627],{"class":112},[82,110343,110324],{"class":92},[82,110345,113],{"class":112},[82,110347,110348],{"class":92},"osmesa\n",[19,110350,110351,110352,110355,110356,2611],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[32,110353,110354],{},"egl"," 失败，再尝试 ",[32,110357,110358],{},"osmesa",[19,110360,110361,110362,110365],{},"如果你在本机桌面环境运行，通常先不要设置 ",[32,110363,110364],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110367,103596],{"id":103595},[19,110369,110370],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110372,110373],{},"典型 viewer 流程:",[73,110375,110377],{"className":75,"code":110376,"language":77,"meta":78,"style":78},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[32,110378,110379,110391,110398,110402],{"__ignoreMap":78},[82,110380,110381,110383,110386,110388],{"class":84,"line":85},[82,110382,694],{"class":112},[82,110384,110385],{"class":92}," mujoco.viewer.launch_passive(model, data) ",[82,110387,728],{"class":112},[82,110389,110390],{"class":92}," viewer:\n",[82,110392,110393,110395],{"class":84,"line":157},[82,110394,4851],{"class":112},[82,110396,110397],{"class":92}," viewer.is_running():\n",[82,110399,110400],{"class":84,"line":404},[82,110401,104067],{"class":92},[82,110403,110404],{"class":84,"line":413},[82,110405,110406],{"class":92},"        viewer.sync()\n",[19,110408,110409],{},"典型 renderer 流程:",[73,110411,110413],{"className":75,"code":110412,"language":77,"meta":78,"style":78},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[32,110414,110415,110441,110445,110450],{"__ignoreMap":78},[82,110416,110417,110419,110421,110424,110426,110428,110430,110432,110434,110436,110439],{"class":84,"line":85},[82,110418,110120],{"class":92},[82,110420,113],{"class":112},[82,110422,110423],{"class":92}," mujoco.Renderer(model, ",[82,110425,27566],{"class":108},[82,110427,113],{"class":112},[82,110429,44907],{"class":88},[82,110431,100],{"class":92},[82,110433,27562],{"class":108},[82,110435,113],{"class":112},[82,110437,110438],{"class":88},"640",[82,110440,119],{"class":92},[82,110442,110443],{"class":84,"line":157},[82,110444,107055],{"class":92},[82,110446,110447],{"class":84,"line":404},[82,110448,110449],{"class":92},"renderer.update_scene(data)\n",[82,110451,110452,110454,110456],{"class":84,"line":413},[82,110453,110130],{"class":92},[82,110455,113],{"class":112},[82,110457,110135],{"class":92},[65,110459,110461],{"id":110460},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110463,110464],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[73,110466,110468],{"className":75,"code":110467,"language":77,"meta":78,"style":78},"mujoco.mj_step(model, data)\nviewer.sync()\n",[32,110469,110470,110474],{"__ignoreMap":78},[82,110471,110472],{"class":84,"line":85},[82,110473,107055],{"class":92},[82,110475,110476],{"class":84,"line":157},[82,110477,110478],{"class":92},"viewer.sync()\n",[19,110480,110481,110483,110484,110487],{},[32,110482,103766],{}," 负责算物理，",[32,110485,110486],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[65,110489,110491],{"id":110490},"为什么要-sleep","为什么要 sleep",[19,110493,110494],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[73,110496,110498],{"className":75,"code":110497,"language":77,"meta":78,"style":78},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[32,110499,110500],{"__ignoreMap":78},[82,110501,110502,110505,110507,110510,110512,110515,110517],{"class":84,"line":85},[82,110503,110504],{"class":92},"sleep_time ",[82,110506,113],{"class":112},[82,110508,110509],{"class":92}," model.opt.timestep ",[82,110511,3288],{"class":112},[82,110513,110514],{"class":92}," (time.time() ",[82,110516,3288],{"class":112},[82,110518,110519],{"class":92}," step_start)\n",[19,110521,110522],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[65,110524,110526],{"id":110525},"renderer-输出是什么","renderer 输出是什么",[73,110528,110530],{"className":75,"code":110529,"language":77,"meta":78,"style":78},"image = renderer.render()\n",[32,110531,110532],{"__ignoreMap":78},[82,110533,110534,110536,110538],{"class":84,"line":85},[82,110535,110130],{"class":92},[82,110537,113],{"class":112},[82,110539,110135],{"class":92},[19,110541,110542],{},"得到的是 NumPy 数组，形状通常是：",[73,110544,110547],{"className":110545,"code":110546,"language":7780,"meta":78},[7778],"(height, width, 3)\n",[32,110548,110546],{"__ignoreMap":78},[19,110550,110551],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[73,110553,110555],{"className":75,"code":110554,"language":77,"meta":78,"style":78},"Image.fromarray(image).save(\"render_output.png\")\n",[32,110556,110557],{"__ignoreMap":78},[82,110558,110559,110562,110565],{"class":84,"line":85},[82,110560,110561],{"class":92},"Image.fromarray(image).save(",[82,110563,110564],{"class":96},"\"render_output.png\"",[82,110566,119],{"class":92},[14,110568,103804],{"id":103803},[19,110570,110571],{},"交互式 Viewer:",[73,110573,110575],{"className":75,"code":110574,"language":77,"meta":78,"style":78},"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",[32,110576,110577,110583,110587,110593,110599,110603,110607,110615,110620,110624,110628,110632,110637,110642,110646,110650,110654,110659,110663,110667,110671,110675,110679,110683,110695,110707,110715,110719,110729,110749,110759,110764,110769,110773,110790,110803,110808,110812,110816,110828],{"__ignoreMap":78},[82,110578,110579,110581],{"class":84,"line":85},[82,110580,1123],{"class":112},[82,110582,34401],{"class":92},[82,110584,110585],{"class":84,"line":157},[82,110586,486],{"emptyLinePlaceholder":485},[82,110588,110589,110591],{"class":84,"line":404},[82,110590,1123],{"class":112},[82,110592,103852],{"class":92},[82,110594,110595,110597],{"class":84,"line":413},[82,110596,1123],{"class":112},[82,110598,110102],{"class":92},[82,110600,110601],{"class":84,"line":508},[82,110602,486],{"emptyLinePlaceholder":485},[82,110604,110605],{"class":84,"line":513},[82,110606,486],{"emptyLinePlaceholder":485},[82,110608,110609,110611,110613],{"class":84,"line":1388},[82,110610,103865],{"class":88},[82,110612,259],{"class":112},[82,110614,103870],{"class":96},[82,110616,110617],{"class":84,"line":1394},[82,110618,110619],{"class":96},"\u003Cmujoco model=\"viewer_demo\">\n",[82,110621,110622],{"class":84,"line":1399},[82,110623,103880],{"class":96},[82,110625,110626],{"class":84,"line":1430},[82,110627,486],{"emptyLinePlaceholder":485},[82,110629,110630],{"class":84,"line":1818},[82,110631,103889],{"class":96},[82,110633,110634],{"class":84,"line":2082},[82,110635,110636],{"class":96},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[82,110638,110639],{"class":84,"line":2233},[82,110640,110641],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[82,110643,110644],{"class":84,"line":2255},[82,110645,486],{"emptyLinePlaceholder":485},[82,110647,110648],{"class":84,"line":2260},[82,110649,103903],{"class":96},[82,110651,110652],{"class":84,"line":2298},[82,110653,103908],{"class":96},[82,110655,110656],{"class":84,"line":2303},[82,110657,110658],{"class":96},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[82,110660,110661],{"class":84,"line":2321},[82,110662,103918],{"class":96},[82,110664,110665],{"class":84,"line":2533},[82,110666,103923],{"class":96},[82,110668,110669],{"class":84,"line":2538},[82,110670,103928],{"class":96},[82,110672,110673],{"class":84,"line":2548},[82,110674,98249],{"class":96},[82,110676,110677],{"class":84,"line":2579},[82,110678,486],{"emptyLinePlaceholder":485},[82,110680,110681],{"class":84,"line":2585},[82,110682,486],{"emptyLinePlaceholder":485},[82,110684,110685,110687,110689,110691,110693],{"class":84,"line":4350},[82,110686,2381],{"class":112},[82,110688,4573],{"class":2384},[82,110690,103949],{"class":92},[82,110692,98237],{"class":88},[82,110694,669],{"class":92},[82,110696,110697,110699,110701,110703,110705],{"class":84,"line":4355},[82,110698,103958],{"class":92},[82,110700,113],{"class":112},[82,110702,103963],{"class":92},[82,110704,103865],{"class":88},[82,110706,119],{"class":92},[82,110708,110709,110711,110713],{"class":84,"line":4360},[82,110710,103972],{"class":92},[82,110712,113],{"class":112},[82,110714,103977],{"class":92},[82,110716,110717],{"class":84,"line":4365},[82,110718,486],{"emptyLinePlaceholder":485},[82,110720,110721,110723,110725,110727],{"class":84,"line":4379},[82,110722,2417],{"class":112},[82,110724,110385],{"class":92},[82,110726,728],{"class":112},[82,110728,110390],{"class":92},[82,110730,110731,110734,110737,110739,110742,110744,110747],{"class":84,"line":4384},[82,110732,110733],{"class":112},"        while",[82,110735,110736],{"class":92}," viewer.is_running() ",[82,110738,33039],{"class":112},[82,110740,110741],{"class":92}," data.time ",[82,110743,3659],{"class":112},[82,110745,110746],{"class":88}," 5.0",[82,110748,669],{"class":92},[82,110750,110751,110754,110756],{"class":84,"line":5176},[82,110752,110753],{"class":92},"            step_start ",[82,110755,113],{"class":112},[82,110757,110758],{"class":92}," time.time()\n",[82,110760,110761],{"class":84,"line":5190},[82,110762,110763],{"class":92},"            mujoco.mj_step(model, data)\n",[82,110765,110766],{"class":84,"line":5198},[82,110767,110768],{"class":92},"            viewer.sync()\n",[82,110770,110771],{"class":84,"line":5203},[82,110772,486],{"emptyLinePlaceholder":485},[82,110774,110775,110778,110780,110782,110784,110786,110788],{"class":84,"line":5209},[82,110776,110777],{"class":92},"            sleep_time ",[82,110779,113],{"class":112},[82,110781,110509],{"class":92},[82,110783,3288],{"class":112},[82,110785,110514],{"class":92},[82,110787,3288],{"class":112},[82,110789,110519],{"class":92},[82,110791,110792,110794,110797,110799,110801],{"class":84,"line":5215},[82,110793,7237],{"class":112},[82,110795,110796],{"class":92}," sleep_time ",[82,110798,3709],{"class":112},[82,110800,6688],{"class":88},[82,110802,669],{"class":92},[82,110804,110805],{"class":84,"line":5220},[82,110806,110807],{"class":92},"                time.sleep(sleep_time)\n",[82,110809,110810],{"class":84,"line":10539},[82,110811,486],{"emptyLinePlaceholder":485},[82,110813,110814],{"class":84,"line":10563},[82,110815,486],{"emptyLinePlaceholder":485},[82,110817,110818,110820,110822,110824,110826],{"class":84,"line":10568},[82,110819,1237],{"class":112},[82,110821,33796],{"class":88},[82,110823,104110],{"class":112},[82,110825,104113],{"class":96},[82,110827,669],{"class":92},[82,110829,110830],{"class":84,"line":10574},[82,110831,104120],{"class":92},[19,110833,106121],{},[73,110835,110837],{"className":26406,"code":110836,"language":26408,"meta":78,"style":78},"touch ch5_viewer.py\n",[32,110838,110839],{"__ignoreMap":78},[82,110840,110841,110843],{"class":84,"line":85},[82,110842,103834],{"class":2384},[82,110844,110845],{"class":96}," ch5_viewer.py\n",[19,110847,110848],{},"离屏 Renderer 保存图片:",[73,110850,110852],{"className":75,"code":110851,"language":77,"meta":78,"style":78},"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",[32,110853,110854,110864,110868,110874,110884,110888,110892,110900,110905,110909,110913,110917,110921,110926,110930,110934,110938,110942,110946,110950,110954,110958,110962,110966,110970,110982,110994,111002,111027,111031,111047,111051,111055,111070,111079,111083,111096,111101,111106,111110,111122,111134,111138,111142,111154],{"__ignoreMap":78},[82,110855,110856,110858,110860,110862],{"class":84,"line":85},[82,110857,1117],{"class":112},[82,110859,1120],{"class":92},[82,110861,1123],{"class":112},[82,110863,1126],{"class":92},[82,110865,110866],{"class":84,"line":157},[82,110867,486],{"emptyLinePlaceholder":485},[82,110869,110870,110872],{"class":84,"line":404},[82,110871,1123],{"class":112},[82,110873,103852],{"class":92},[82,110875,110876,110878,110880,110882],{"class":84,"line":413},[82,110877,1117],{"class":112},[82,110879,49827],{"class":88},[82,110881,49830],{"class":112},[82,110883,49833],{"class":92},[82,110885,110886],{"class":84,"line":508},[82,110887,486],{"emptyLinePlaceholder":485},[82,110889,110890],{"class":84,"line":513},[82,110891,486],{"emptyLinePlaceholder":485},[82,110893,110894,110896,110898],{"class":84,"line":1388},[82,110895,103865],{"class":88},[82,110897,259],{"class":112},[82,110899,103870],{"class":96},[82,110901,110902],{"class":84,"line":1394},[82,110903,110904],{"class":96},"\u003Cmujoco model=\"renderer_demo\">\n",[82,110906,110907],{"class":84,"line":1399},[82,110908,103880],{"class":96},[82,110910,110911],{"class":84,"line":1430},[82,110912,486],{"emptyLinePlaceholder":485},[82,110914,110915],{"class":84,"line":1818},[82,110916,103889],{"class":96},[82,110918,110919],{"class":84,"line":2082},[82,110920,110636],{"class":96},[82,110922,110923],{"class":84,"line":2233},[82,110924,110925],{"class":96},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[82,110927,110928],{"class":84,"line":2255},[82,110929,110641],{"class":96},[82,110931,110932],{"class":84,"line":2260},[82,110933,486],{"emptyLinePlaceholder":485},[82,110935,110936],{"class":84,"line":2298},[82,110937,103903],{"class":96},[82,110939,110940],{"class":84,"line":2303},[82,110941,103908],{"class":96},[82,110943,110944],{"class":84,"line":2321},[82,110945,110658],{"class":96},[82,110947,110948],{"class":84,"line":2533},[82,110949,103918],{"class":96},[82,110951,110952],{"class":84,"line":2538},[82,110953,103923],{"class":96},[82,110955,110956],{"class":84,"line":2548},[82,110957,103928],{"class":96},[82,110959,110960],{"class":84,"line":2579},[82,110961,98249],{"class":96},[82,110963,110964],{"class":84,"line":2585},[82,110965,486],{"emptyLinePlaceholder":485},[82,110967,110968],{"class":84,"line":4350},[82,110969,486],{"emptyLinePlaceholder":485},[82,110971,110972,110974,110976,110978,110980],{"class":84,"line":4355},[82,110973,2381],{"class":112},[82,110975,4573],{"class":2384},[82,110977,103949],{"class":92},[82,110979,98237],{"class":88},[82,110981,669],{"class":92},[82,110983,110984,110986,110988,110990,110992],{"class":84,"line":4360},[82,110985,103958],{"class":92},[82,110987,113],{"class":112},[82,110989,103963],{"class":92},[82,110991,103865],{"class":88},[82,110993,119],{"class":92},[82,110995,110996,110998,111000],{"class":84,"line":4365},[82,110997,103972],{"class":92},[82,110999,113],{"class":112},[82,111001,103977],{"class":92},[82,111003,111004,111007,111009,111011,111013,111015,111017,111019,111021,111023,111025],{"class":84,"line":4379},[82,111005,111006],{"class":92},"    renderer ",[82,111008,113],{"class":112},[82,111010,110423],{"class":92},[82,111012,27566],{"class":108},[82,111014,113],{"class":112},[82,111016,44907],{"class":88},[82,111018,100],{"class":92},[82,111020,27562],{"class":108},[82,111022,113],{"class":112},[82,111024,110438],{"class":88},[82,111026,119],{"class":92},[82,111028,111029],{"class":84,"line":4384},[82,111030,486],{"emptyLinePlaceholder":485},[82,111032,111033,111035,111037,111039,111041,111043,111045],{"class":84,"line":5176},[82,111034,1888],{"class":112},[82,111036,104052],{"class":92},[82,111038,603],{"class":112},[82,111040,35013],{"class":88},[82,111042,93],{"class":92},[82,111044,3069],{"class":88},[82,111046,33362],{"class":92},[82,111048,111049],{"class":84,"line":5190},[82,111050,104067],{"class":92},[82,111052,111053],{"class":84,"line":5198},[82,111054,486],{"emptyLinePlaceholder":485},[82,111056,111057,111060,111063,111065,111068],{"class":84,"line":5203},[82,111058,111059],{"class":92},"    renderer.update_scene(data, ",[82,111061,111062],{"class":108},"camera",[82,111064,113],{"class":112},[82,111066,111067],{"class":96},"\"fixed_camera\"",[82,111069,119],{"class":92},[82,111071,111072,111075,111077],{"class":84,"line":5209},[82,111073,111074],{"class":92},"    image ",[82,111076,113],{"class":112},[82,111078,110135],{"class":92},[82,111080,111081],{"class":84,"line":5215},[82,111082,486],{"emptyLinePlaceholder":485},[82,111084,111085,111088,111090,111092,111094],{"class":84,"line":5220},[82,111086,111087],{"class":92},"    output_path ",[82,111089,113],{"class":112},[82,111091,1139],{"class":92},[82,111093,110564],{"class":96},[82,111095,119],{"class":92},[82,111097,111098],{"class":84,"line":10539},[82,111099,111100],{"class":92},"    Image.fromarray(image).save(output_path)\n",[82,111102,111103],{"class":84,"line":10563},[82,111104,111105],{"class":92},"    renderer.close()\n",[82,111107,111108],{"class":84,"line":10568},[82,111109,486],{"emptyLinePlaceholder":485},[82,111111,111112,111114,111116,111119],{"class":84,"line":10574},[82,111113,611],{"class":88},[82,111115,93],{"class":92},[82,111117,111118],{"class":96},"\"saved:\"",[82,111120,111121],{"class":92},", output_path.resolve())\n",[82,111123,111124,111126,111128,111131],{"class":84,"line":10601},[82,111125,611],{"class":88},[82,111127,93],{"class":92},[82,111129,111130],{"class":96},"\"image shape:\"",[82,111132,111133],{"class":92},", image.shape)\n",[82,111135,111136],{"class":84,"line":10606},[82,111137,486],{"emptyLinePlaceholder":485},[82,111139,111140],{"class":84,"line":10612},[82,111141,486],{"emptyLinePlaceholder":485},[82,111143,111144,111146,111148,111150,111152],{"class":84,"line":10624},[82,111145,1237],{"class":112},[82,111147,33796],{"class":88},[82,111149,104110],{"class":112},[82,111151,104113],{"class":96},[82,111153,669],{"class":92},[82,111155,111156],{"class":84,"line":10636},[82,111157,104120],{"class":92},[19,111159,106121],{},[73,111161,111163],{"className":26406,"code":111162,"language":26408,"meta":78,"style":78},"touch ch5_renderer.py\n",[32,111164,111165],{"__ignoreMap":78},[82,111166,111167,111169],{"class":84,"line":85},[82,111168,103834],{"class":2384},[82,111170,111171],{"class":96}," ch5_renderer.py\n",[65,111173,104123],{"id":104123},[19,111175,111176],{},"viewer 上下文：",[73,111178,111180],{"className":75,"code":111179,"language":77,"meta":78,"style":78},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[32,111181,111182],{"__ignoreMap":78},[82,111183,111184,111186,111188,111190],{"class":84,"line":85},[82,111185,694],{"class":112},[82,111187,110385],{"class":92},[82,111189,728],{"class":112},[82,111191,110390],{"class":92},[19,111193,111194,111196],{},[32,111195,694],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,111198,111199],{},"窗口循环：",[73,111201,111203],{"className":75,"code":111202,"language":77,"meta":78,"style":78},"while viewer.is_running() and data.time \u003C 5.0:\n",[32,111204,111205],{"__ignoreMap":78},[82,111206,111207,111210,111212,111214,111216,111218,111220],{"class":84,"line":85},[82,111208,111209],{"class":112},"while",[82,111211,110736],{"class":92},[82,111213,33039],{"class":112},[82,111215,110741],{"class":92},[82,111217,3659],{"class":112},[82,111219,110746],{"class":88},[82,111221,669],{"class":92},[19,111223,111224],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111226,111227],{},"固定相机：",[73,111229,111231],{"className":55627,"code":111230,"language":55629,"meta":78,"style":78},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[32,111232,111233],{"__ignoreMap":78},[82,111234,111235,111237,111239,111241,111243,111245,111247,111249,111252,111255,111257,111260],{"class":84,"line":85},[82,111236,3659],{"class":92},[82,111238,111062],{"class":53863},[82,111240,17506],{"class":2384},[82,111242,113],{"class":92},[82,111244,111067],{"class":96},[82,111246,103657],{"class":2384},[82,111248,113],{"class":92},[82,111250,111251],{"class":96},"\"1.5 -2.0 1.2\"",[82,111253,111254],{"class":2384}," xyaxes",[82,111256,113],{"class":92},[82,111258,111259],{"class":96},"\"1 0.75 0 0 0 1\"",[82,111261,103695],{"class":92},[19,111263,111264],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[65,111266,111268],{"id":111267},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[73,111270,111272],{"className":75,"code":111271,"language":77,"meta":78,"style":78},"import time\n",[32,111273,111274],{"__ignoreMap":78},[82,111275,111276,111278],{"class":84,"line":85},[82,111277,1123],{"class":112},[82,111279,34401],{"class":92},[19,111281,111282],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[73,111284,111286],{"className":75,"code":111285,"language":77,"meta":78,"style":78},"import mujoco\nimport mujoco.viewer\n",[32,111287,111288,111294],{"__ignoreMap":78},[82,111289,111290,111292],{"class":84,"line":85},[82,111291,1123],{"class":112},[82,111293,103852],{"class":92},[82,111295,111296,111298],{"class":84,"line":157},[82,111297,1123],{"class":112},[82,111299,110102],{"class":92},[19,111301,111302],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[73,111304,111305],{"className":75,"code":111179,"language":77,"meta":78,"style":78},[32,111306,111307],{"__ignoreMap":78},[82,111308,111309,111311,111313,111315],{"class":84,"line":85},[82,111310,694],{"class":112},[82,111312,110385],{"class":92},[82,111314,728],{"class":112},[82,111316,110390],{"class":92},[19,111318,111319,111320,111323],{},"打开一个 viewer 窗口。",[32,111321,111322],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[73,111325,111326],{"className":75,"code":111202,"language":77,"meta":78,"style":78},[32,111327,111328],{"__ignoreMap":78},[82,111329,111330,111332,111334,111336,111338,111340,111342],{"class":84,"line":85},[82,111331,111209],{"class":112},[82,111333,110736],{"class":92},[82,111335,33039],{"class":112},[82,111337,110741],{"class":92},[82,111339,3659],{"class":112},[82,111341,110746],{"class":88},[82,111343,669],{"class":92},[19,111345,111346,111347,111350],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[32,111348,111349],{},"viewer.is_running()"," 会变成 false，循环结束。",[73,111352,111354],{"className":75,"code":111353,"language":77,"meta":78,"style":78},"step_start = time.time()\n",[32,111355,111356],{"__ignoreMap":78},[82,111357,111358,111361,111363],{"class":84,"line":85},[82,111359,111360],{"class":92},"step_start ",[82,111362,113],{"class":112},[82,111364,110758],{"class":92},[19,111366,111367],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[73,111369,111370],{"className":75,"code":110467,"language":77,"meta":78,"style":78},[32,111371,111372,111376],{"__ignoreMap":78},[82,111373,111374],{"class":84,"line":85},[82,111375,107055],{"class":92},[82,111377,111378],{"class":84,"line":157},[82,111379,110478],{"class":92},[19,111381,111382,111384,111385,111387,111388,111390,111391,111394],{},[32,111383,103766],{}," 推进物理仿真。",[32,111386,110486],{}," 把最新的 ",[32,111389,35969],{}," 同步到窗口里显示。没有 ",[32,111392,111393],{},"sync()","，窗口可能看不到最新状态。",[73,111396,111397],{"className":75,"code":110497,"language":77,"meta":78,"style":78},[32,111398,111399],{"__ignoreMap":78},[82,111400,111401,111403,111405,111407,111409,111411,111413],{"class":84,"line":85},[82,111402,110504],{"class":92},[82,111404,113],{"class":112},[82,111406,110509],{"class":92},[82,111408,3288],{"class":112},[82,111410,110514],{"class":92},[82,111412,3288],{"class":112},[82,111414,110519],{"class":92},[19,111416,111417],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[73,111419,111421],{"className":75,"code":111420,"language":77,"meta":78,"style":78},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[32,111422,111423,111435],{"__ignoreMap":78},[82,111424,111425,111427,111429,111431,111433],{"class":84,"line":85},[82,111426,1237],{"class":112},[82,111428,110796],{"class":92},[82,111430,3709],{"class":112},[82,111432,6688],{"class":88},[82,111434,669],{"class":92},[82,111436,111437],{"class":84,"line":157},[82,111438,111439],{"class":92},"    time.sleep(sleep_time)\n",[19,111441,111442],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[65,111444,111446],{"id":111445},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[73,111448,111450],{"className":75,"code":111449,"language":77,"meta":78,"style":78},"from pathlib import Path\n",[32,111451,111452],{"__ignoreMap":78},[82,111453,111454,111456,111458,111460],{"class":84,"line":85},[82,111455,1117],{"class":112},[82,111457,1120],{"class":92},[82,111459,1123],{"class":112},[82,111461,1126],{"class":92},[19,111463,111464,111465,111468,111469,111472],{},"导入 ",[32,111466,111467],{},"Path","，用来处理文件路径。相比直接写字符串，",[32,111470,111471],{},"Path(\"render_output.png\")"," 更清晰。",[73,111474,111476],{"className":75,"code":111475,"language":77,"meta":78,"style":78},"from PIL import Image\n",[32,111477,111478],{"__ignoreMap":78},[82,111479,111480,111482,111484,111486],{"class":84,"line":85},[82,111481,1117],{"class":112},[82,111483,49827],{"class":88},[82,111485,49830],{"class":112},[82,111487,49833],{"class":92},[19,111489,111490],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[73,111492,111493],{"className":55627,"code":111230,"language":55629,"meta":78,"style":78},[32,111494,111495],{"__ignoreMap":78},[82,111496,111497,111499,111501,111503,111505,111507,111509,111511,111513,111515,111517,111519],{"class":84,"line":85},[82,111498,3659],{"class":92},[82,111500,111062],{"class":53863},[82,111502,17506],{"class":2384},[82,111504,113],{"class":92},[82,111506,111067],{"class":96},[82,111508,103657],{"class":2384},[82,111510,113],{"class":92},[82,111512,111251],{"class":96},[82,111514,111254],{"class":2384},[82,111516,113],{"class":92},[82,111518,111259],{"class":96},[82,111520,103695],{"class":92},[19,111522,111523,111524,111526,111527,111529,111530,111533,111534,111536],{},"定义一个相机。",[32,111525,82364],{}," 是相机名字。",[32,111528,106697],{}," 是相机在世界里的位置。",[32,111531,111532],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[32,111535,106697],{}," 来调视角。",[73,111538,111540],{"className":75,"code":111539,"language":77,"meta":78,"style":78},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[32,111541,111542],{"__ignoreMap":78},[82,111543,111544,111546,111548,111550,111552,111554,111556,111558,111560,111562,111564],{"class":84,"line":85},[82,111545,110120],{"class":92},[82,111547,113],{"class":112},[82,111549,110423],{"class":92},[82,111551,27566],{"class":108},[82,111553,113],{"class":112},[82,111555,44907],{"class":88},[82,111557,100],{"class":92},[82,111559,27562],{"class":108},[82,111561,113],{"class":112},[82,111563,110438],{"class":88},[82,111565,119],{"class":92},[19,111567,111568,111569,103569,111571,111573],{},"创建离屏渲染器。",[32,111570,27566],{},[32,111572,27562],{}," 决定输出图片大小。",[73,111575,111576],{"className":75,"code":104227,"language":77,"meta":78,"style":78},[32,111577,111578,111594],{"__ignoreMap":78},[82,111579,111580,111582,111584,111586,111588,111590,111592],{"class":84,"line":85},[82,111581,597],{"class":112},[82,111583,104052],{"class":92},[82,111585,603],{"class":112},[82,111587,35013],{"class":88},[82,111589,93],{"class":92},[82,111591,3069],{"class":88},[82,111593,33362],{"class":92},[82,111595,111596],{"class":84,"line":157},[82,111597,104250],{"class":92},[19,111599,111600],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[73,111602,111604],{"className":75,"code":111603,"language":77,"meta":78,"style":78},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[32,111605,111606],{"__ignoreMap":78},[82,111607,111608,111611,111613,111615,111617],{"class":84,"line":85},[82,111609,111610],{"class":92},"renderer.update_scene(data, ",[82,111612,111062],{"class":108},[82,111614,113],{"class":112},[82,111616,111067],{"class":96},[82,111618,119],{"class":92},[19,111620,111621,111622,111624,111625,111628],{},"告诉 renderer：用当前 ",[32,111623,35969],{}," 的状态更新画面，并使用名为 ",[32,111626,111627],{},"fixed_camera"," 的相机视角。",[73,111630,111631],{"className":75,"code":110529,"language":77,"meta":78,"style":78},[32,111632,111633],{"__ignoreMap":78},[82,111634,111635,111637,111639],{"class":84,"line":85},[82,111636,110130],{"class":92},[82,111638,113],{"class":112},[82,111640,110135],{"class":92},[19,111642,111643,111644,111647],{},"真正渲染出图像。",[32,111645,111646],{},"image"," 是一个 NumPy 数组，不是文件。",[73,111649,111651],{"className":75,"code":111650,"language":77,"meta":78,"style":78},"Image.fromarray(image).save(output_path)\n",[32,111652,111653],{"__ignoreMap":78},[82,111654,111655],{"class":84,"line":85},[82,111656,111650],{"class":92},[19,111658,111659,111660,2611],{},"把数组转换成图片，并保存到 ",[32,111661,111662],{},"render_output.png",[73,111664,111666],{"className":75,"code":111665,"language":77,"meta":78,"style":78},"renderer.close()\n",[32,111667,111668],{"__ignoreMap":78},[82,111669,111670],{"class":84,"line":85},[82,111671,111665],{"class":92},[19,111673,111674],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111676,104867],{"id":104866},[19,111678,111679,111680,111682,111683,2611],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[32,111681,111662],{},"，并输出图像数组形状，例如 ",[32,111684,111685],{},"(480, 640, 3)",[19,111687,111688],{},"如果图片里看不到方块，先检查：",[26,111690,111691,111694,111697],{},[29,111692,111693],{},"方块是否掉到相机视野外。",[29,111695,111696],{},"camera 位置是否合理。",[29,111698,111699,111700,111703],{},"是否在 ",[32,111701,111702],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111705,104899],{"id":104898},[19,111707,111708],{},"运行 viewer:",[73,111710,111712],{"className":26406,"code":111711,"language":26408,"meta":78,"style":78},"python ch5_viewer.py\n",[32,111713,111714],{"__ignoreMap":78},[82,111715,111716,111718],{"class":84,"line":85},[82,111717,77],{"class":2384},[82,111719,110845],{"class":96},[19,111721,111722],{},"运行 renderer:",[73,111724,111726],{"className":26406,"code":111725,"language":26408,"meta":78,"style":78},"python ch5_renderer.py\n",[32,111727,111728],{"__ignoreMap":78},[82,111729,111730,111732],{"class":84,"line":85},[82,111731,77],{"class":2384},[82,111733,111171],{"class":96},[19,111735,111736],{},"如果在服务器上运行:",[73,111738,111740],{"className":26406,"code":111739,"language":26408,"meta":78,"style":78},"MUJOCO_GL=egl python ch5_renderer.py\n",[32,111741,111742],{"__ignoreMap":78},[82,111743,111744,111746,111748,111750,111753],{"class":84,"line":85},[82,111745,110364],{"class":92},[82,111747,113],{"class":112},[82,111749,110354],{"class":96},[82,111751,111752],{"class":2384}," python",[82,111754,111171],{"class":96},[19,111756,110332],{},[73,111758,111760],{"className":26406,"code":111759,"language":26408,"meta":78,"style":78},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[32,111761,111762],{"__ignoreMap":78},[82,111763,111764,111766,111768,111770,111772],{"class":84,"line":85},[82,111765,110364],{"class":92},[82,111767,113],{"class":112},[82,111769,110358],{"class":96},[82,111771,111752],{"class":2384},[82,111773,111171],{"class":96},[19,111775,111776],{},"再做几个练习：",[26,111778,111779,111786,111789,111795],{},[29,111780,111781,111782,111785],{},"把 renderer 分辨率改成 ",[32,111783,111784],{},"height=240, width=320","，观察输出 shape。",[29,111787,111788],{},"把方块颜色改成蓝色，重新保存图片。",[29,111790,111791,111792,111794],{},"把相机 ",[32,111793,106697],{}," 改远一点，观察画面中物体是否变小。",[29,111796,111797,111798,104965,111801,111804],{},"把 viewer 示例中的 ",[32,111799,111800],{},"data.time \u003C 5.0",[32,111802,111803],{},"data.time \u003C 20.0","，观察更长时间。",[14,111806,105004],{"id":105003},[65,111808,111810],{"id":111809},"viewer-窗口打不开","viewer 窗口打不开",[19,111812,111813],{},"安装:",[73,111815,111817],{"className":26406,"code":111816,"language":26408,"meta":78,"style":78},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[32,111818,111819],{"__ignoreMap":78},[82,111820,111821,111823,111825,111827,111829,111831,111833,111835,111837,111839,111841],{"class":84,"line":85},[82,111822,27161],{"class":2384},[82,111824,28897],{"class":96},[82,111826,26418],{"class":96},[82,111828,28982],{"class":88},[82,111830,105057],{"class":96},[82,111832,103385],{"class":96},[82,111834,105062],{"class":96},[82,111836,103398],{"class":96},[82,111838,103404],{"class":96},[82,111840,103395],{"class":96},[82,111842,111843],{"class":96}," libXinerama\n",[65,111845,111847],{"id":111846},"glfwerror",[32,111848,111849],{},"GLFWError",[19,111851,111852],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[65,111854,111856],{"id":111855},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111858,111859,111860,85093,111862,111864],{},"尝试 ",[32,111861,103588],{},[32,111863,103591],{},"。可能存在版本差异。",[65,111866,111867],{"id":111867},"保存图片是黑的",[19,111869,105126],{},[26,111871,111872,111875,111878,111888],{},[29,111873,111874],{},"XML 里是否有 light。",[29,111876,111877],{},"相机是否对着模型。",[29,111879,111880,111881,111884,111885,2611],{},"是否先 ",[32,111882,111883],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[32,111886,111887],{},"renderer.render()",[29,111889,111890],{},"物体是否已经掉出视野。",[65,111892,111893],{"id":111893},"远程服务器没有显示器",[19,111895,111896],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[73,111898,111899],{"className":26406,"code":111739,"language":26408,"meta":78,"style":78},[32,111900,111901],{"__ignoreMap":78},[82,111902,111903,111905,111907,111909,111911],{"class":84,"line":85},[82,111904,110364],{"class":92},[82,111906,113],{"class":112},[82,111908,110354],{"class":96},[82,111910,111752],{"class":2384},[82,111912,111171],{"class":96},[19,111914,111915],{},"如果 EGL 不可用，再尝试：",[73,111917,111918],{"className":26406,"code":111759,"language":26408,"meta":78,"style":78},[32,111919,111920],{"__ignoreMap":78},[82,111921,111922,111924,111926,111928,111930],{"class":84,"line":85},[82,111923,110364],{"class":92},[82,111925,113],{"class":112},[82,111927,110358],{"class":96},[82,111929,111752],{"class":2384},[82,111931,111171],{"class":96},[14,111933,105158],{"id":105157},[19,111935,111936],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,111938,111939,111942,111945],{},[29,111940,111941],{},"先用 viewer 看模型和控制是否正常。",[29,111943,111944],{},"再用 renderer 保存图片或构造视觉观测。",[29,111946,111947],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2671,111949,111950],{},"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":78,"searchDepth":157,"depth":157,"links":111952},[111953,111954,111955,111960,111965,111966,111967,111974],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":111956},[111957,111958,111959],{"id":110460,"depth":404,"text":110461},{"id":110490,"depth":404,"text":110491},{"id":110525,"depth":404,"text":110526},{"id":103803,"depth":157,"text":103804,"children":111961},[111962,111963,111964],{"id":104123,"depth":404,"text":104123},{"id":111267,"depth":404,"text":111268},{"id":111445,"depth":404,"text":111446},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":111968},[111969,111970,111971,111972,111973],{"id":111809,"depth":404,"text":111810},{"id":111846,"depth":404,"text":111849},{"id":111855,"depth":404,"text":111856},{"id":111867,"depth":404,"text":111867},{"id":111893,"depth":404,"text":111893},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110069,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111981,"title":111982,"body":111983,"description":78,"extension":2700,"meta":113894,"navigation":485,"path":113895,"seo":113896,"stem":113897,"__hash__":113898},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111984,"toc":113870},[111985,111988,111990,111993,111995,112014,112017,112023,112026,112028,112030,112054,112056,112070,112072,112113,112115,112126,112128,112131,112137,112140,112174,112177,112209,112212,112244,112248,112251,112291,112294,112300,112303,112309,112313,112316,112322,112325,112329,112332,112372,112374,112387,112390,112392,112974,112976,112988,112991,113002,113004,113007,113026,113038,113041,113062,113065,113068,113111,113114,113117,113137,113144,113146,113164,113179,113182,113188,113191,113197,113214,113221,113252,113263,113297,113308,113325,113334,113342,113347,113361,113364,113385,113391,113405,113410,113440,113450,113475,113483,113506,113509,113525,113528,113536,113542,113564,113577,113598,113607,113646,113657,113659,113662,113668,113671,113674,113680,113683,113703,113706,113708,113747,113749,113752,113760,113763,113766,113793,113796,113806,113812,113815,113821,113823,113829,113833,113836,113838,113841,113865,113868],[10,111986,111982],{"id":111987},"_6控制任务cartpole",[14,111989,103198],{"id":103197},[19,111991,111992],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111994,106882],{},[26,111996,111997,112000,112002,112005,112008,112011],{},[29,111998,111999],{},"slide joint",[29,112001,108734],{},[29,112003,112004],{},"cart force actuator",[29,112006,112007],{},"状态观测",[29,112009,112010],{},"简单控制循环",[29,112012,112013],{},"reward 设计雏形",[19,112015,112016],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[73,112018,112021],{"className":112019,"code":112020,"language":7780,"meta":78},[7778],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[32,112022,112020],{"__ignoreMap":78},[19,112024,112025],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112027,103321],{"id":103320},[19,112029,103324],{},[73,112031,112032],{"className":26406,"code":106938,"language":26408,"meta":78,"style":78},[32,112033,112034],{"__ignoreMap":78},[82,112035,112036,112038,112040,112042,112044,112046,112048,112050,112052],{"class":84,"line":85},[82,112037,27161],{"class":2384},[82,112039,28897],{"class":96},[82,112041,26418],{"class":96},[82,112043,28982],{"class":88},[82,112045,106953],{"class":96},[82,112047,103349],{"class":96},[82,112049,105052],{"class":96},[82,112051,103365],{"class":96},[82,112053,106962],{"class":96},[19,112055,105370],{},[73,112057,112058],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},[32,112059,112060],{"__ignoreMap":78},[82,112061,112062,112064,112066,112068],{"class":84,"line":85},[82,112063,26415],{"class":2384},[82,112065,26418],{"class":96},[82,112067,103481],{"class":96},[82,112069,103484],{"class":96},[19,112071,105387],{},[73,112073,112075],{"className":26406,"code":112074,"language":26408,"meta":78,"style":78},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[32,112076,112077,112094,112103],{"__ignoreMap":78},[82,112078,112079,112081,112083,112085,112088,112090,112092],{"class":84,"line":85},[82,112080,32911],{"class":2384},[82,112082,31757],{"class":96},[82,112084,27700],{"class":88},[82,112086,112087],{"class":96}," mujoco-cartpole",[82,112089,103526],{"class":96},[82,112091,103529],{"class":88},[82,112093,103532],{"class":88},[82,112095,112096,112098,112100],{"class":84,"line":157},[82,112097,32911],{"class":2384},[82,112099,103539],{"class":96},[82,112101,112102],{"class":96}," mujoco-cartpole\n",[82,112104,112105,112107,112109,112111],{"class":84,"line":404},[82,112106,26415],{"class":2384},[82,112108,26418],{"class":96},[82,112110,103481],{"class":96},[82,112112,103484],{"class":96},[19,112114,103555],{},[26,112116,112117,112120,112123],{},[29,112118,112119],{},"本章不依赖 Gymnasium。",[29,112121,112122],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,112124,112125],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112127,103596],{"id":103595},[19,112129,112130],{},"Cartpole 的模型结构:",[73,112132,112135],{"className":112133,"code":112134,"language":7780,"meta":78},[7778],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[32,112136,112134],{"__ignoreMap":78},[19,112138,112139],{},"小车通过 slide joint 左右移动:",[73,112141,112143],{"className":55627,"code":112142,"language":55629,"meta":78,"style":78},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[32,112144,112145],{"__ignoreMap":78},[82,112146,112147,112149,112151,112153,112155,112158,112160,112162,112165,112167,112169,112172],{"class":84,"line":85},[82,112148,3659],{"class":92},[82,112150,105507],{"class":53863},[82,112152,17506],{"class":2384},[82,112154,113],{"class":92},[82,112156,112157],{"class":96},"\"cart_x\"",[82,112159,56384],{"class":2384},[82,112161,113],{"class":92},[82,112163,112164],{"class":96},"\"slide\"",[82,112166,108578],{"class":2384},[82,112168,113],{"class":92},[82,112170,112171],{"class":96},"\"1 0 0\"",[82,112173,103695],{"class":92},[19,112175,112176],{},"杆子通过 hinge joint 旋转:",[73,112178,112180],{"className":55627,"code":112179,"language":55629,"meta":78,"style":78},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,112181,112182],{"__ignoreMap":78},[82,112183,112184,112186,112188,112190,112192,112195,112197,112199,112201,112203,112205,112207],{"class":84,"line":85},[82,112185,3659],{"class":92},[82,112187,105507],{"class":53863},[82,112189,17506],{"class":2384},[82,112191,113],{"class":92},[82,112193,112194],{"class":96},"\"pole_hinge\"",[82,112196,56384],{"class":2384},[82,112198,113],{"class":92},[82,112200,108569],{"class":96},[82,112202,108578],{"class":2384},[82,112204,113],{"class":92},[82,112206,108583],{"class":96},[82,112208,103695],{"class":92},[19,112210,112211],{},"控制力作用在小车 slide joint 上:",[73,112213,112215],{"className":55627,"code":112214,"language":55629,"meta":78,"style":78},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[32,112216,112217],{"__ignoreMap":78},[82,112218,112219,112221,112223,112225,112227,112230,112232,112234,112236,112238,112240,112242],{"class":84,"line":85},[82,112220,3659],{"class":92},[82,112222,108624],{"class":53863},[82,112224,17506],{"class":2384},[82,112226,113],{"class":92},[82,112228,112229],{"class":96},"\"cart_motor\"",[82,112231,108634],{"class":2384},[82,112233,113],{"class":92},[82,112235,112157],{"class":96},[82,112237,108641],{"class":2384},[82,112239,113],{"class":92},[82,112241,56876],{"class":96},[82,112243,103695],{"class":92},[65,112245,112247],{"id":112246},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112249,112250],{},"这个简化模型有两个关节：",[278,112252,112253,112264],{},[281,112254,112255],{},[284,112256,112257,112259,112261],{},[287,112258,105310],{"align":26320},[287,112260,26321],{"align":26320},[287,112262,112263],{"align":26320},"对应状态",[294,112265,112266,112279],{},[284,112267,112268,112273,112276],{},[299,112269,112270],{"align":26320},[32,112271,112272],{},"cart_x",[299,112274,112275],{"align":26320},"slide",[299,112277,112278],{"align":26320},"小车 x 位置",[284,112280,112281,112286,112288],{},[299,112282,112283],{"align":26320},[32,112284,112285],{},"pole_hinge",[299,112287,108390],{"align":26320},[299,112289,112290],{"align":26320},"杆子角度",[19,112292,112293],{},"所以：",[73,112295,112298],{"className":112296,"code":112297,"language":7780,"meta":78},[7778],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[32,112299,112297],{"__ignoreMap":78},[19,112301,112302],{},"把它们拼起来就是观测：",[73,112304,112307],{"className":112305,"code":112306,"language":7780,"meta":78},[7778],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,112308,112306],{"__ignoreMap":78},[65,112310,112312],{"id":112311},"action-是什么","action 是什么",[19,112314,112315],{},"本章只有一个 actuator：",[73,112317,112320],{"className":112318,"code":112319,"language":7780,"meta":78},[7778],"data.ctrl[0] = action\n",[32,112321,112319],{"__ignoreMap":78},[19,112323,112324],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[65,112326,112328],{"id":112327},"reward-是什么","reward 是什么",[19,112330,112331],{},"奖励函数：",[73,112333,112335],{"className":75,"code":112334,"language":77,"meta":78,"style":78},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[32,112336,112337],{"__ignoreMap":78},[82,112338,112339,112341,112344,112346,112348,112350,112353,112355,112358,112360,112362,112364,112367,112369],{"class":84,"line":85},[82,112340,19631],{"class":112},[82,112342,112343],{"class":88}," float",[82,112345,93],{"class":92},[82,112347,104954],{"class":88},[82,112349,54831],{"class":112},[82,112351,112352],{"class":88}," 0.1",[82,112354,9110],{"class":112},[82,112356,112357],{"class":92}," cart_x ",[82,112359,3212],{"class":112},[82,112361,112357],{"class":92},[82,112363,3288],{"class":112},[82,112365,112366],{"class":92}," pole_angle ",[82,112368,3212],{"class":112},[82,112370,112371],{"class":92}," pole_angle)\n",[19,112373,108776],{},[26,112375,112376,112381,112384],{},[29,112377,112378,112379,2611],{},"基础奖励是 ",[32,112380,104954],{},[29,112382,112383],{},"小车离中心越远，扣分越多。",[29,112385,112386],{},"杆子角度越大，扣分越多。",[19,112388,112389],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112391,103804],{"id":103803},[73,112393,112395],{"className":75,"code":112394,"language":77,"meta":78,"style":78},"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",[32,112396,112397,112403,112413,112417,112421,112429,112434,112438,112442,112446,112451,112455,112460,112465,112470,112474,112479,112484,112489,112493,112497,112501,112505,112509,112514,112518,112522,112526,112530,112534,112544,112551,112555,112559,112573,112587,112600,112630,112634,112638,112650,112662,112670,112674,112687,112691,112695,112704,112708,112724,112734,112747,112760,112764,112787,112805,112809,112821,112825,112829,112839,112849,112853,112869,112910,112914,112934,112950,112954,112958,112970],{"__ignoreMap":78},[82,112398,112399,112401],{"class":84,"line":85},[82,112400,1123],{"class":112},[82,112402,103852],{"class":92},[82,112404,112405,112407,112409,112411],{"class":84,"line":157},[82,112406,1123],{"class":112},[82,112408,33955],{"class":92},[82,112410,728],{"class":112},[82,112412,33960],{"class":92},[82,112414,112415],{"class":84,"line":404},[82,112416,486],{"emptyLinePlaceholder":485},[82,112418,112419],{"class":84,"line":413},[82,112420,486],{"emptyLinePlaceholder":485},[82,112422,112423,112425,112427],{"class":84,"line":508},[82,112424,103865],{"class":88},[82,112426,259],{"class":112},[82,112428,103870],{"class":96},[82,112430,112431],{"class":84,"line":513},[82,112432,112433],{"class":96},"\u003Cmujoco model=\"cartpole\">\n",[82,112435,112436],{"class":84,"line":1388},[82,112437,103880],{"class":96},[82,112439,112440],{"class":84,"line":1394},[82,112441,486],{"emptyLinePlaceholder":485},[82,112443,112444],{"class":84,"line":1399},[82,112445,103889],{"class":96},[82,112447,112448],{"class":84,"line":1430},[82,112449,112450],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[82,112452,112453],{"class":84,"line":1818},[82,112454,486],{"emptyLinePlaceholder":485},[82,112456,112457],{"class":84,"line":2082},[82,112458,112459],{"class":96},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[82,112461,112462],{"class":84,"line":2233},[82,112463,112464],{"class":96},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[82,112466,112467],{"class":84,"line":2255},[82,112468,112469],{"class":96},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[82,112471,112472],{"class":84,"line":2260},[82,112473,486],{"emptyLinePlaceholder":485},[82,112475,112476],{"class":84,"line":2298},[82,112477,112478],{"class":96},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[82,112480,112481],{"class":84,"line":2303},[82,112482,112483],{"class":96},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[82,112485,112486],{"class":84,"line":2321},[82,112487,112488],{"class":96},"        \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",[82,112490,112491],{"class":84,"line":2533},[82,112492,108988],{"class":96},[82,112494,112495],{"class":84,"line":2538},[82,112496,103918],{"class":96},[82,112498,112499],{"class":84,"line":2548},[82,112500,103923],{"class":96},[82,112502,112503],{"class":84,"line":2579},[82,112504,486],{"emptyLinePlaceholder":485},[82,112506,112507],{"class":84,"line":2585},[82,112508,109005],{"class":96},[82,112510,112511],{"class":84,"line":4350},[82,112512,112513],{"class":96},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[82,112515,112516],{"class":84,"line":4355},[82,112517,109015],{"class":96},[82,112519,112520],{"class":84,"line":4360},[82,112521,103928],{"class":96},[82,112523,112524],{"class":84,"line":4365},[82,112525,98249],{"class":96},[82,112527,112528],{"class":84,"line":4379},[82,112529,486],{"emptyLinePlaceholder":485},[82,112531,112532],{"class":84,"line":4384},[82,112533,486],{"emptyLinePlaceholder":485},[82,112535,112536,112538,112541],{"class":84,"line":5176},[82,112537,2381],{"class":112},[82,112539,112540],{"class":2384}," get_observation",[82,112542,112543],{"class":92},"(data: mujoco.MjData) -> np.ndarray:\n",[82,112545,112546,112548],{"class":84,"line":5190},[82,112547,6685],{"class":112},[82,112549,112550],{"class":92}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[82,112552,112553],{"class":84,"line":5198},[82,112554,486],{"emptyLinePlaceholder":485},[82,112556,112557],{"class":84,"line":5203},[82,112558,486],{"emptyLinePlaceholder":485},[82,112560,112561,112563,112566,112569,112571],{"class":84,"line":5209},[82,112562,2381],{"class":112},[82,112564,112565],{"class":2384}," compute_reward",[82,112567,112568],{"class":92},"(obs: np.ndarray) -> ",[82,112570,2811],{"class":88},[82,112572,669],{"class":92},[82,112574,112575,112578,112580,112583,112585],{"class":84,"line":5215},[82,112576,112577],{"class":92},"    cart_x ",[82,112579,113],{"class":112},[82,112581,112582],{"class":92}," obs[",[82,112584,2244],{"class":88},[82,112586,875],{"class":92},[82,112588,112589,112592,112594,112596,112598],{"class":84,"line":5220},[82,112590,112591],{"class":92},"    pole_angle ",[82,112593,113],{"class":112},[82,112595,112582],{"class":92},[82,112597,2283],{"class":88},[82,112599,875],{"class":92},[82,112601,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628],{"class":84,"line":10539},[82,112603,6685],{"class":112},[82,112605,112343],{"class":88},[82,112607,93],{"class":92},[82,112609,104954],{"class":88},[82,112611,54831],{"class":112},[82,112613,112352],{"class":88},[82,112615,9110],{"class":112},[82,112617,112357],{"class":92},[82,112619,3212],{"class":112},[82,112621,112357],{"class":92},[82,112623,3288],{"class":112},[82,112625,112366],{"class":92},[82,112627,3212],{"class":112},[82,112629,112371],{"class":92},[82,112631,112632],{"class":84,"line":10563},[82,112633,486],{"emptyLinePlaceholder":485},[82,112635,112636],{"class":84,"line":10568},[82,112637,486],{"emptyLinePlaceholder":485},[82,112639,112640,112642,112644,112646,112648],{"class":84,"line":10574},[82,112641,2381],{"class":112},[82,112643,4573],{"class":2384},[82,112645,103949],{"class":92},[82,112647,98237],{"class":88},[82,112649,669],{"class":92},[82,112651,112652,112654,112656,112658,112660],{"class":84,"line":10601},[82,112653,103958],{"class":92},[82,112655,113],{"class":112},[82,112657,103963],{"class":92},[82,112659,103865],{"class":88},[82,112661,119],{"class":92},[82,112663,112664,112666,112668],{"class":84,"line":10606},[82,112665,103972],{"class":92},[82,112667,113],{"class":112},[82,112669,103977],{"class":92},[82,112671,112672],{"class":84,"line":10612},[82,112673,486],{"emptyLinePlaceholder":485},[82,112675,112676,112678,112680,112682,112684],{"class":84,"line":10624},[82,112677,107619],{"class":92},[82,112679,2283],{"class":88},[82,112681,7038],{"class":92},[82,112683,113],{"class":112},[82,112685,112686],{"class":88}," 0.1\n",[82,112688,112689],{"class":84,"line":10636},[82,112690,107632],{"class":92},[82,112692,112693],{"class":84,"line":10648},[82,112694,486],{"emptyLinePlaceholder":485},[82,112696,112697,112700,112702],{"class":84,"line":12307},[82,112698,112699],{"class":92},"    total_reward ",[82,112701,113],{"class":112},[82,112703,107311],{"class":88},[82,112705,112706],{"class":84,"line":12332},[82,112707,486],{"emptyLinePlaceholder":485},[82,112709,112710,112712,112714,112716,112718,112720,112722],{"class":84,"line":12355},[82,112711,1888],{"class":112},[82,112713,34188],{"class":92},[82,112715,603],{"class":112},[82,112717,35013],{"class":88},[82,112719,93],{"class":92},[82,112721,9002],{"class":88},[82,112723,33362],{"class":92},[82,112725,112726,112729,112731],{"class":84,"line":12379},[82,112727,112728],{"class":92},"        obs ",[82,112730,113],{"class":112},[82,112732,112733],{"class":92}," get_observation(data)\n",[82,112735,112736,112739,112741,112743,112745],{"class":84,"line":12384},[82,112737,112738],{"class":92},"        pole_angle ",[82,112740,113],{"class":112},[82,112742,112582],{"class":92},[82,112744,2283],{"class":88},[82,112746,875],{"class":92},[82,112748,112749,112752,112754,112756,112758],{"class":84,"line":12389},[82,112750,112751],{"class":92},"        pole_angular_velocity ",[82,112753,113],{"class":112},[82,112755,112582],{"class":92},[82,112757,2841],{"class":88},[82,112759,875],{"class":92},[82,112761,112762],{"class":84,"line":12394},[82,112763,486],{"emptyLinePlaceholder":485},[82,112765,112766,112769,112771,112774,112776,112778,112780,112782,112784],{"class":84,"line":12403},[82,112767,112768],{"class":92},"        action ",[82,112770,113],{"class":112},[82,112772,112773],{"class":88}," 2.0",[82,112775,9110],{"class":112},[82,112777,112366],{"class":92},[82,112779,2249],{"class":112},[82,112781,64425],{"class":88},[82,112783,9110],{"class":112},[82,112785,112786],{"class":92}," pole_angular_velocity\n",[82,112788,112789,112791,112793,112795,112797,112799,112801,112803],{"class":84,"line":12408},[82,112790,112768],{"class":92},[82,112792,113],{"class":112},[82,112794,109997],{"class":92},[82,112796,3288],{"class":112},[82,112798,104954],{"class":88},[82,112800,100],{"class":92},[82,112802,104954],{"class":88},[82,112804,119],{"class":92},[82,112806,112807],{"class":84,"line":12414},[82,112808,486],{"emptyLinePlaceholder":485},[82,112810,112811,112813,112815,112817,112819],{"class":84,"line":12435},[82,112812,109167],{"class":92},[82,112814,2244],{"class":88},[82,112816,7038],{"class":92},[82,112818,113],{"class":112},[82,112820,110020],{"class":92},[82,112822,112823],{"class":84,"line":12441},[82,112824,104067],{"class":92},[82,112826,112827],{"class":84,"line":12455},[82,112828,486],{"emptyLinePlaceholder":485},[82,112830,112831,112834,112836],{"class":84,"line":12461},[82,112832,112833],{"class":92},"        reward ",[82,112835,113],{"class":112},[82,112837,112838],{"class":92}," compute_reward(get_observation(data))\n",[82,112840,112841,112844,112846],{"class":84,"line":12488},[82,112842,112843],{"class":92},"        total_reward ",[82,112845,12068],{"class":112},[82,112847,112848],{"class":92}," reward\n",[82,112850,112851],{"class":84,"line":12497},[82,112852,486],{"emptyLinePlaceholder":485},[82,112854,112855,112857,112859,112861,112863,112865,112867],{"class":84,"line":12503},[82,112856,5096],{"class":112},[82,112858,34188],{"class":92},[82,112860,3086],{"class":112},[82,112862,8346],{"class":88},[82,112864,104110],{"class":112},[82,112866,6688],{"class":88},[82,112868,669],{"class":92},[82,112870,112871,112873,112875,112878,112881,112884,112887,112889,112892,112895,112897,112899,112901,112903,112906,112908],{"class":84,"line":12511},[82,112872,37216],{"class":88},[82,112874,93],{"class":92},[82,112876,112877],{"class":96},"\"step:\"",[82,112879,112880],{"class":92},", step, ",[82,112882,112883],{"class":96},"\"obs:\"",[82,112885,112886],{"class":92},", np.round(obs, ",[82,112888,2841],{"class":88},[82,112890,112891],{"class":92},"), ",[82,112893,112894],{"class":96},"\"action:\"",[82,112896,100],{"class":92},[82,112898,34588],{"class":88},[82,112900,93],{"class":92},[82,112902,2811],{"class":88},[82,112904,112905],{"class":92},"(action), ",[82,112907,2841],{"class":88},[82,112909,33074],{"class":92},[82,112911,112912],{"class":84,"line":12516},[82,112913,486],{"emptyLinePlaceholder":485},[82,112915,112916,112918,112920,112923,112925,112927,112930,112932],{"class":84,"line":19189},[82,112917,611],{"class":88},[82,112919,93],{"class":92},[82,112921,112922],{"class":96},"\"total_reward:\"",[82,112924,100],{"class":92},[82,112926,34588],{"class":88},[82,112928,112929],{"class":92},"(total_reward, ",[82,112931,2841],{"class":88},[82,112933,33074],{"class":92},[82,112935,112936,112938,112940,112943,112946,112948],{"class":84,"line":19195},[82,112937,611],{"class":88},[82,112939,93],{"class":92},[82,112941,112942],{"class":96},"\"final obs:\"",[82,112944,112945],{"class":92},", np.round(get_observation(data), ",[82,112947,2841],{"class":88},[82,112949,33074],{"class":92},[82,112951,112952],{"class":84,"line":19218},[82,112953,486],{"emptyLinePlaceholder":485},[82,112955,112956],{"class":84,"line":19224},[82,112957,486],{"emptyLinePlaceholder":485},[82,112959,112960,112962,112964,112966,112968],{"class":84,"line":19247},[82,112961,1237],{"class":112},[82,112963,33796],{"class":88},[82,112965,104110],{"class":112},[82,112967,104113],{"class":96},[82,112969,669],{"class":92},[82,112971,112972],{"class":84,"line":19261},[82,112973,104120],{"class":92},[19,112975,106121],{},[73,112977,112979],{"className":26406,"code":112978,"language":26408,"meta":78,"style":78},"touch ch6_cartpole.py\n",[32,112980,112981],{"__ignoreMap":78},[82,112982,112983,112985],{"class":84,"line":85},[82,112984,103834],{"class":2384},[82,112986,112987],{"class":96}," ch6_cartpole.py\n",[19,112989,112990],{},"运行：",[73,112992,112994],{"className":26406,"code":112993,"language":26408,"meta":78,"style":78},"python ch6_cartpole.py\n",[32,112995,112996],{"__ignoreMap":78},[82,112997,112998,113000],{"class":84,"line":85},[82,112999,77],{"class":2384},[82,113001,112987],{"class":96},[65,113003,104123],{"id":104123},[19,113005,113006],{},"构造观测：",[73,113008,113010],{"className":75,"code":113009,"language":77,"meta":78,"style":78},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[32,113011,113012,113020],{"__ignoreMap":78},[82,113013,113014,113016,113018],{"class":84,"line":85},[82,113015,2381],{"class":112},[82,113017,112540],{"class":2384},[82,113019,112543],{"class":92},[82,113021,113022,113024],{"class":84,"line":157},[82,113023,6685],{"class":112},[82,113025,112550],{"class":92},[19,113027,113028,113031,113032,113034,113035,113037],{},[32,113029,113030],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[32,113033,106581],{}," 2 维，",[32,113036,106910],{}," 2 维，所以 obs 是 4 维。",[19,113039,113040],{},"设置初始角度：",[73,113042,113044],{"className":75,"code":113043,"language":77,"meta":78,"style":78},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[32,113045,113046,113058],{"__ignoreMap":78},[82,113047,113048,113050,113052,113054,113056],{"class":84,"line":85},[82,113049,107249],{"class":92},[82,113051,2283],{"class":88},[82,113053,7038],{"class":92},[82,113055,113],{"class":112},[82,113057,112686],{"class":88},[82,113059,113060],{"class":84,"line":157},[82,113061,107093],{"class":92},[19,113063,113064],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,113066,113067],{},"简单反馈控制：",[73,113069,113071],{"className":75,"code":113070,"language":77,"meta":78,"style":78},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[32,113072,113073,113093],{"__ignoreMap":78},[82,113074,113075,113077,113079,113081,113083,113085,113087,113089,113091],{"class":84,"line":85},[82,113076,109992],{"class":92},[82,113078,113],{"class":112},[82,113080,112773],{"class":88},[82,113082,9110],{"class":112},[82,113084,112366],{"class":92},[82,113086,2249],{"class":112},[82,113088,64425],{"class":88},[82,113090,9110],{"class":112},[82,113092,112786],{"class":92},[82,113094,113095,113097,113099,113101,113103,113105,113107,113109],{"class":84,"line":157},[82,113096,109992],{"class":92},[82,113098,113],{"class":112},[82,113100,109997],{"class":92},[82,113102,3288],{"class":112},[82,113104,104954],{"class":88},[82,113106,100],{"class":92},[82,113108,104954],{"class":88},[82,113110,119],{"class":92},[19,113112,113113],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,113115,113116],{},"限制动作：",[73,113118,113120],{"className":75,"code":113119,"language":77,"meta":78,"style":78},"np.clip(action, -1.0, 1.0)\n",[32,113121,113122],{"__ignoreMap":78},[82,113123,113124,113127,113129,113131,113133,113135],{"class":84,"line":85},[82,113125,113126],{"class":92},"np.clip(action, ",[82,113128,3288],{"class":112},[82,113130,104954],{"class":88},[82,113132,100],{"class":92},[82,113134,104954],{"class":88},[82,113136,119],{"class":92},[19,113138,113139,113140,113143],{},"因为 XML 里 ",[32,113141,113142],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[65,113145,104259],{"id":104259},[73,113147,113148],{"className":75,"code":113009,"language":77,"meta":78,"style":78},[32,113149,113150,113158],{"__ignoreMap":78},[82,113151,113152,113154,113156],{"class":84,"line":85},[82,113153,2381],{"class":112},[82,113155,112540],{"class":2384},[82,113157,112543],{"class":92},[82,113159,113160,113162],{"class":84,"line":157},[82,113161,6685],{"class":112},[82,113163,112550],{"class":92},[19,113165,113166,113167,113170,113171,113174,113175,113178],{},"这段定义了一个函数，用来获取当前观测。",[32,113168,113169],{},"data.qpos.copy()"," 是位置数组副本，",[32,113172,113173],{},"data.qvel.copy()"," 是速度数组副本。",[32,113176,113177],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113180,113181],{},"在本章模型里：",[73,113183,113186],{"className":113184,"code":113185,"language":7780,"meta":78},[7778],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[32,113187,113185],{"__ignoreMap":78},[19,113189,113190],{},"所以返回的 obs 是：",[73,113192,113195],{"className":113193,"code":113194,"language":7780,"meta":78},[7778],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[32,113196,113194],{"__ignoreMap":78},[73,113198,113200],{"className":75,"code":113199,"language":77,"meta":78,"style":78},"def compute_reward(obs: np.ndarray) -> float:\n",[32,113201,113202],{"__ignoreMap":78},[82,113203,113204,113206,113208,113210,113212],{"class":84,"line":85},[82,113205,2381],{"class":112},[82,113207,112565],{"class":2384},[82,113209,112568],{"class":92},[82,113211,2811],{"class":88},[82,113213,669],{"class":92},[19,113215,113216,113217,113220],{},"这行定义奖励函数。输入是观测 ",[32,113218,113219],{},"obs","，输出是一个浮点数奖励。",[73,113222,113224],{"className":75,"code":113223,"language":77,"meta":78,"style":78},"cart_x = obs[0]\npole_angle = obs[1]\n",[32,113225,113226,113239],{"__ignoreMap":78},[82,113227,113228,113231,113233,113235,113237],{"class":84,"line":85},[82,113229,113230],{"class":92},"cart_x ",[82,113232,113],{"class":112},[82,113234,112582],{"class":92},[82,113236,2244],{"class":88},[82,113238,875],{"class":92},[82,113240,113241,113244,113246,113248,113250],{"class":84,"line":157},[82,113242,113243],{"class":92},"pole_angle ",[82,113245,113],{"class":112},[82,113247,112582],{"class":92},[82,113249,2283],{"class":88},[82,113251,875],{"class":92},[19,113253,113254,113255,113258,113259,113262],{},"数组索引从 0 开始。",[32,113256,113257],{},"obs[0]"," 是第一个元素，也就是小车位置。",[32,113260,113261],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[73,113264,113265],{"className":75,"code":112334,"language":77,"meta":78,"style":78},[32,113266,113267],{"__ignoreMap":78},[82,113268,113269,113271,113273,113275,113277,113279,113281,113283,113285,113287,113289,113291,113293,113295],{"class":84,"line":85},[82,113270,19631],{"class":112},[82,113272,112343],{"class":88},[82,113274,93],{"class":92},[82,113276,104954],{"class":88},[82,113278,54831],{"class":112},[82,113280,112352],{"class":88},[82,113282,9110],{"class":112},[82,113284,112357],{"class":92},[82,113286,3212],{"class":112},[82,113288,112357],{"class":92},[82,113290,3288],{"class":112},[82,113292,112366],{"class":92},[82,113294,3212],{"class":112},[82,113296,112371],{"class":92},[19,113298,113299,113300,113303,113304,113307],{},"这行计算奖励。",[32,113301,113302],{},"cart_x * cart_x"," 是小车位置的平方，",[32,113305,113306],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[73,113309,113311],{"className":75,"code":113310,"language":77,"meta":78,"style":78},"data.qpos[1] = 0.1\n",[32,113312,113313],{"__ignoreMap":78},[82,113314,113315,113317,113319,113321,113323],{"class":84,"line":85},[82,113316,107249],{"class":92},[82,113318,2283],{"class":88},[82,113320,7038],{"class":92},[82,113322,113],{"class":112},[82,113324,112686],{"class":88},[19,113326,113327,113328,113330,113331,113333],{},"手动设置杆子的初始角度。因为 ",[32,113329,108006],{}," 是小车位置，",[32,113332,108009],{}," 是杆子角度，所以这里改的是杆子。",[73,113335,113336],{"className":75,"code":107093,"language":77,"meta":78,"style":78},[32,113337,113338],{"__ignoreMap":78},[82,113339,113340],{"class":84,"line":85},[82,113341,107093],{"class":92},[19,113343,108052,113344,113346],{},[32,113345,106581],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[73,113348,113350],{"className":75,"code":113349,"language":77,"meta":78,"style":78},"total_reward = 0.0\n",[32,113351,113352],{"__ignoreMap":78},[82,113353,113354,113357,113359],{"class":84,"line":85},[82,113355,113356],{"class":92},"total_reward ",[82,113358,113],{"class":112},[82,113360,107311],{"class":88},[19,113362,113363],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[73,113365,113367],{"className":75,"code":113366,"language":77,"meta":78,"style":78},"for step in range(1000):\n",[32,113368,113369],{"__ignoreMap":78},[82,113370,113371,113373,113375,113377,113379,113381,113383],{"class":84,"line":85},[82,113372,597],{"class":112},[82,113374,34188],{"class":92},[82,113376,603],{"class":112},[82,113378,35013],{"class":88},[82,113380,93],{"class":92},[82,113382,9002],{"class":88},[82,113384,33362],{"class":92},[19,113386,113387,113388,113390],{},"循环 1000 步。",[32,113389,109684],{}," 是当前步数，从 0 到 999。",[73,113392,113394],{"className":75,"code":113393,"language":77,"meta":78,"style":78},"obs = get_observation(data)\n",[32,113395,113396],{"__ignoreMap":78},[82,113397,113398,113401,113403],{"class":84,"line":85},[82,113399,113400],{"class":92},"obs ",[82,113402,113],{"class":112},[82,113404,112733],{"class":92},[19,113406,113407,113408,2611],{},"读取当前状态，保存到 ",[32,113409,113219],{},[73,113411,113413],{"className":75,"code":113412,"language":77,"meta":78,"style":78},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[32,113414,113415,113427],{"__ignoreMap":78},[82,113416,113417,113419,113421,113423,113425],{"class":84,"line":85},[82,113418,113243],{"class":92},[82,113420,113],{"class":112},[82,113422,112582],{"class":92},[82,113424,2283],{"class":88},[82,113426,875],{"class":92},[82,113428,113429,113432,113434,113436,113438],{"class":84,"line":157},[82,113430,113431],{"class":92},"pole_angular_velocity ",[82,113433,113],{"class":112},[82,113435,112582],{"class":92},[82,113437,2841],{"class":88},[82,113439,875],{"class":92},[19,113441,113442,113443,113446,113447,2611],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[32,113444,113445],{},"obs[3]","？因为 obs 的顺序是 ",[32,113448,113449],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[73,113451,113453],{"className":75,"code":113452,"language":77,"meta":78,"style":78},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[32,113454,113455],{"__ignoreMap":78},[82,113456,113457,113459,113461,113463,113465,113467,113469,113471,113473],{"class":84,"line":85},[82,113458,109992],{"class":92},[82,113460,113],{"class":112},[82,113462,112773],{"class":88},[82,113464,9110],{"class":112},[82,113466,112366],{"class":92},[82,113468,2249],{"class":112},[82,113470,64425],{"class":88},[82,113472,9110],{"class":112},[82,113474,112786],{"class":92},[19,113476,113477,113478,103569,113480,113482],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[32,113479,107810],{},[32,113481,37895],{}," 是人为设置的系数，不是固定公式。",[73,113484,113486],{"className":75,"code":113485,"language":77,"meta":78,"style":78},"action = np.clip(action, -1.0, 1.0)\n",[32,113487,113488],{"__ignoreMap":78},[82,113489,113490,113492,113494,113496,113498,113500,113502,113504],{"class":84,"line":85},[82,113491,109992],{"class":92},[82,113493,113],{"class":112},[82,113495,109997],{"class":92},[82,113497,3288],{"class":112},[82,113499,104954],{"class":88},[82,113501,100],{"class":92},[82,113503,104954],{"class":88},[82,113505,119],{"class":92},[19,113507,113508],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[73,113510,113511],{"className":75,"code":112319,"language":77,"meta":78,"style":78},[32,113512,113513],{"__ignoreMap":78},[82,113514,113515,113517,113519,113521,113523],{"class":84,"line":85},[82,113516,108421],{"class":92},[82,113518,2244],{"class":88},[82,113520,7038],{"class":92},[82,113522,113],{"class":112},[82,113524,110020],{"class":92},[19,113526,113527],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[73,113529,113530],{"className":75,"code":107055,"language":77,"meta":78,"style":78},[32,113531,113532],{"__ignoreMap":78},[82,113533,113534],{"class":84,"line":85},[82,113535,107055],{"class":92},[19,113537,113538,113539,113541],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[32,113540,108676],{}," 计算小车和杆子的下一刻状态。",[73,113543,113545],{"className":75,"code":113544,"language":77,"meta":78,"style":78},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[32,113546,113547,113556],{"__ignoreMap":78},[82,113548,113549,113552,113554],{"class":84,"line":85},[82,113550,113551],{"class":92},"reward ",[82,113553,113],{"class":112},[82,113555,112838],{"class":92},[82,113557,113558,113560,113562],{"class":84,"line":157},[82,113559,113356],{"class":92},[82,113561,12068],{"class":112},[82,113563,112848],{"class":92},[19,113565,113566,113567,113569,113570,113573,113574,2611],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[32,113568,12068],{}," 是简写，",[32,113571,113572],{},"total_reward += reward"," 等价于 ",[32,113575,113576],{},"total_reward = total_reward + reward",[73,113578,113580],{"className":75,"code":113579,"language":77,"meta":78,"style":78},"if step % 100 == 0:\n",[32,113581,113582],{"__ignoreMap":78},[82,113583,113584,113586,113588,113590,113592,113594,113596],{"class":84,"line":85},[82,113585,1237],{"class":112},[82,113587,34188],{"class":92},[82,113589,3086],{"class":112},[82,113591,8346],{"class":88},[82,113593,104110],{"class":112},[82,113595,6688],{"class":88},[82,113597,669],{"class":92},[19,113599,113600,113602,113603,113606],{},[32,113601,3086],{}," 是取余数。",[32,113604,113605],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[73,113608,113610],{"className":75,"code":113609,"language":77,"meta":78,"style":78},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[32,113611,113612],{"__ignoreMap":78},[82,113613,113614,113616,113618,113620,113622,113624,113626,113628,113630,113632,113634,113636,113638,113640,113642,113644],{"class":84,"line":85},[82,113615,407],{"class":88},[82,113617,93],{"class":92},[82,113619,112877],{"class":96},[82,113621,112880],{"class":92},[82,113623,112883],{"class":96},[82,113625,112886],{"class":92},[82,113627,2841],{"class":88},[82,113629,112891],{"class":92},[82,113631,112894],{"class":96},[82,113633,100],{"class":92},[82,113635,34588],{"class":88},[82,113637,93],{"class":92},[82,113639,2811],{"class":88},[82,113641,112905],{"class":92},[82,113643,2841],{"class":88},[82,113645,33074],{"class":92},[19,113647,113648,113649,113652,113653,113656],{},"打印当前步数、观测和动作。",[32,113650,113651],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[32,113654,113655],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113658,104867],{"id":104866},[19,113660,113661],{},"观测向量:",[73,113663,113666],{"className":113664,"code":113665,"language":7780,"meta":78},[7778],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,113667,113665],{"__ignoreMap":78},[19,113669,113670],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113672,113673],{},"每隔 100 步会打印一次：",[73,113675,113678],{"className":113676,"code":113677,"language":7780,"meta":78},[7778],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[32,113679,113677],{"__ignoreMap":78},[19,113681,113682],{},"重点观察：",[26,113684,113685,113691,113696],{},[29,113686,113687,113690],{},[32,113688,113689],{},"pole_angle"," 是否越来越大。",[29,113692,113693,113695],{},[32,113694,112272],{}," 是否跑得太远。",[29,113697,113698,113699,85093,113701,2611],{},"action 是否经常被 clip 到 ",[32,113700,106466],{},[32,113702,2283],{},[19,113704,113705],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113707,104899],{"id":104898},[26,113709,113710,113716,113719,113725,113735,113741,113744],{},[29,113711,113712,113713,2611],{},"把初始角度改为 ",[32,113714,113715],{},"data.qpos[1] = 0.3",[29,113717,113718],{},"重新运行，观察控制是否变差。",[29,113720,113721,113722,113724],{},"把 actuator ",[32,113723,109617],{}," 改小。",[29,113726,113727,113728,113731,113732,2611],{},"打印 ",[32,113729,113730],{},"model.nq, model.nv, model.nu","，应为 ",[32,113733,113734],{},"2 2 1",[29,113736,113737,113738,113740],{},"把 reward 里的 ",[32,113739,113306],{}," 系数改大，观察总奖励变化。",[29,113742,113743],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,113745,113746],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113748,105004],{"id":105003},[65,113750,113751],{"id":113751},"杆子方向和预期不一致",[19,113753,104947,113754,113756,113757,113759],{},[32,113755,108789],{}," 和 capsule 的 ",[32,113758,105727],{},"，必要时用 viewer 可视化确认。",[65,113761,113762],{"id":113762},"控制器越控越倒",[19,113764,113765],{},"说明反馈符号可能反了，尝试:",[73,113767,113769],{"className":75,"code":113768,"language":77,"meta":78,"style":78},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[32,113770,113771],{"__ignoreMap":78},[82,113772,113773,113775,113777,113779,113781,113783,113785,113787,113789,113791],{"class":84,"line":85},[82,113774,109992],{"class":92},[82,113776,113],{"class":112},[82,113778,54831],{"class":112},[82,113780,107810],{"class":88},[82,113782,9110],{"class":112},[82,113784,112366],{"class":92},[82,113786,3288],{"class":112},[82,113788,64425],{"class":88},[82,113790,9110],{"class":112},[82,113792,112786],{"class":92},[65,113794,113795],{"id":113795},"小车飞走",[19,113797,113798,113799,113801,113802,113805],{},"降低 ",[32,113800,109617],{}," 或缩小 ",[32,113803,113804],{},"action"," 的 clip 范围。",[65,113807,113809,113811],{"id":113808},"obs3-为什么是杆子角速度",[32,113810,113445],{}," 为什么是杆子角速度",[19,113813,113814],{},"因为这个模型里：",[73,113816,113819],{"className":113817,"code":113818,"language":7780,"meta":78},[7778],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[32,113820,113818],{"__ignoreMap":78},[19,113822,112293],{},[73,113824,113827],{"className":113825,"code":113826,"language":7780,"meta":78},[7778],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[32,113828,113826],{"__ignoreMap":78},[65,113830,113832],{"id":113831},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113834,113835],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113837,105158],{"id":105157},[19,113839,113840],{},"一个控制任务通常包含：",[26,113842,113843,113846,113854,113859,113862],{},[29,113844,113845],{},"模型：Cartpole 的 body、joint、actuator。",[29,113847,113848,113849,2973,113851,113853],{},"观测：从 ",[32,113850,106581],{},[32,113852,106910],{}," 里取状态。",[29,113855,113856,113857,2611],{},"动作：写入 ",[32,113858,103627],{},[29,113860,113861],{},"奖励：根据任务目标打分。",[29,113863,113864],{},"循环：obs -> action -> step -> reward。",[19,113866,113867],{},"这就是后面 Gymnasium 环境的基本骨架。",[2671,113869,106837],{},{"title":78,"searchDepth":157,"depth":157,"links":113871},[113872,113873,113874,113879,113883,113884,113885,113893],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":113875},[113876,113877,113878],{"id":112246,"depth":404,"text":112247},{"id":112311,"depth":404,"text":112312},{"id":112327,"depth":404,"text":112328},{"id":103803,"depth":157,"text":103804,"children":113880},[113881,113882],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":113886},[113887,113888,113889,113890,113892],{"id":113751,"depth":404,"text":113751},{"id":113762,"depth":404,"text":113762},{"id":113795,"depth":404,"text":113795},{"id":113808,"depth":404,"text":113891},"obs[3] 为什么是杆子角速度",{"id":113831,"depth":404,"text":113832},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111982,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113900,"title":113901,"body":113902,"description":78,"extension":2700,"meta":115915,"navigation":485,"path":115916,"seo":115917,"stem":115918,"__hash__":115919},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113903,"toc":115891},[113904,113907,113909,113912,113914,113931,113934,113937,113943,113946,113948,113950,113974,113976,113990,113992,114033,114035,114053,114055,114058,114064,114067,114095,114099,114105,114130,114133,114164,114171,114174,114177,114183,114186,114192,114195,114201,114205,114208,114233,114236,114238,114997,114999,115011,115013,115024,115026,115029,115046,115049,115051,115062,115065,115067,115113,115116,115129,115132,115214,115217,115219,115235,115245,115258,115261,115300,115310,115321,115331,115344,115347,115376,115379,115389,115392,115398,115415,115426,115428,115434,115451,115462,115483,115486,115498,115501,115522,115525,115533,115541,115558,115561,115630,115637,115645,115648,115661,115668,115670,115673,115679,115682,115685,115691,115697,115699,115739,115741,115747,115756,115759,115761,115781,115784,115787,115793,115797,115799,115826,115829,115832,115859,115865,115868,115871,115873,115876,115879,115885,115888],[10,113905,113901],{"id":113906},"_7控制任务reacher-机械臂到达目标",[14,113908,103198],{"id":103197},[19,113910,113911],{},"本章搭建一个二维两关节 reacher 任务。",[19,113913,106882],{},[26,113915,113916,113919,113922,113925,113928],{},[29,113917,113918],{},"两个 hinge joint",[29,113920,113921],{},"两个 motor actuator",[29,113923,113924],{},"site 作为末端点和目标点",[29,113926,113927],{},"根据末端和目标距离设计 reward",[29,113929,113930],{},"构造机械臂任务的基本形式",[19,113932,113933],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113935,113936],{},"Reacher 任务可以理解为：",[73,113938,113941],{"className":113939,"code":113940,"language":7780,"meta":78},[7778],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[32,113942,113940],{"__ignoreMap":78},[19,113944,113945],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113947,103321],{"id":103320},[19,113949,103324],{},[73,113951,113952],{"className":26406,"code":106938,"language":26408,"meta":78,"style":78},[32,113953,113954],{"__ignoreMap":78},[82,113955,113956,113958,113960,113962,113964,113966,113968,113970,113972],{"class":84,"line":85},[82,113957,27161],{"class":2384},[82,113959,28897],{"class":96},[82,113961,26418],{"class":96},[82,113963,28982],{"class":88},[82,113965,106953],{"class":96},[82,113967,103349],{"class":96},[82,113969,105052],{"class":96},[82,113971,103365],{"class":96},[82,113973,106962],{"class":96},[19,113975,105370],{},[73,113977,113978],{"className":26406,"code":103470,"language":26408,"meta":78,"style":78},[32,113979,113980],{"__ignoreMap":78},[82,113981,113982,113984,113986,113988],{"class":84,"line":85},[82,113983,26415],{"class":2384},[82,113985,26418],{"class":96},[82,113987,103481],{"class":96},[82,113989,103484],{"class":96},[19,113991,105387],{},[73,113993,113995],{"className":26406,"code":113994,"language":26408,"meta":78,"style":78},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[32,113996,113997,114014,114023],{"__ignoreMap":78},[82,113998,113999,114001,114003,114005,114008,114010,114012],{"class":84,"line":85},[82,114000,32911],{"class":2384},[82,114002,31757],{"class":96},[82,114004,27700],{"class":88},[82,114006,114007],{"class":96}," mujoco-reacher",[82,114009,103526],{"class":96},[82,114011,103529],{"class":88},[82,114013,103532],{"class":88},[82,114015,114016,114018,114020],{"class":84,"line":157},[82,114017,32911],{"class":2384},[82,114019,103539],{"class":96},[82,114021,114022],{"class":96}," mujoco-reacher\n",[82,114024,114025,114027,114029,114031],{"class":84,"line":404},[82,114026,26415],{"class":2384},[82,114028,26418],{"class":96},[82,114030,103481],{"class":96},[82,114032,103484],{"class":96},[19,114034,103555],{},[26,114036,114037,114040,114043],{},[29,114038,114039],{},"本章使用低维状态，不使用图像输入。",[29,114041,114042],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,114044,114045,114046,2973,114048,2973,114050,114052],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[32,114047,106581],{},[32,114049,106910],{},[32,114051,106231],{}," 的方法一致。",[14,114054,103596],{"id":103595},[19,114056,114057],{},"Reacher 任务核心:",[73,114059,114062],{"className":114060,"code":114061,"language":7780,"meta":78},[7778],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[32,114063,114061],{"__ignoreMap":78},[19,114065,114066],{},"读取 site 世界坐标:",[73,114068,114070],{"className":75,"code":114069,"language":77,"meta":78,"style":78},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[32,114071,114072,114085],{"__ignoreMap":78},[82,114073,114074,114076,114078,114080,114083],{"class":84,"line":85},[82,114075,106185],{"class":92},[82,114077,113],{"class":112},[82,114079,105956],{"class":92},[82,114081,114082],{"class":96},"\"tip\"",[82,114084,119],{"class":92},[82,114086,114087,114090,114092],{"class":84,"line":157},[82,114088,114089],{"class":92},"tip_pos ",[82,114091,113],{"class":112},[82,114093,114094],{"class":92}," data.site_xpos[site_id]\n",[65,114096,114098],{"id":114097},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,114100,114101,114102,114104],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[32,114103,106581],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[73,114106,114108],{"className":75,"code":114107,"language":77,"meta":78,"style":78},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[32,114109,114110,114120],{"__ignoreMap":78},[82,114111,114112,114115,114117],{"class":84,"line":85},[82,114113,114114],{"class":92},"tip ",[82,114116,113],{"class":112},[82,114118,114119],{"class":92}," data.site_xpos[tip_site_id]\n",[82,114121,114122,114125,114127],{"class":84,"line":157},[82,114123,114124],{"class":92},"target ",[82,114126,113],{"class":112},[82,114128,114129],{"class":92}," data.site_xpos[target_site_id]\n",[19,114131,114132],{},"这样 reward 就很容易写：",[73,114134,114136],{"className":75,"code":114135,"language":77,"meta":78,"style":78},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[32,114137,114138,114153],{"__ignoreMap":78},[82,114139,114140,114143,114145,114148,114150],{"class":84,"line":85},[82,114141,114142],{"class":92},"dist ",[82,114144,113],{"class":112},[82,114146,114147],{"class":92}," np.linalg.norm(tip ",[82,114149,3288],{"class":112},[82,114151,114152],{"class":92}," target)\n",[82,114154,114155,114157,114159,114161],{"class":84,"line":157},[82,114156,113551],{"class":92},[82,114158,113],{"class":112},[82,114160,54831],{"class":112},[82,114162,114163],{"class":92},"dist\n",[19,114165,114166,114167,114170],{},"距离越小，",[32,114168,114169],{},"-dist"," 越接近 0，奖励越高。",[65,114172,114173],{"id":114173},"两关节机械臂的状态",[19,114175,114176],{},"这个模型有两个 hinge joint：",[73,114178,114181],{"className":114179,"code":114180,"language":7780,"meta":78},[7778],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[32,114182,114180],{"__ignoreMap":78},[19,114184,114185],{},"再加上末端和目标位置：",[73,114187,114190],{"className":114188,"code":114189,"language":7780,"meta":78},[7778],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[32,114191,114189],{"__ignoreMap":78},[19,114193,114194],{},"总维度：",[73,114196,114199],{"className":114197,"code":114198,"language":7780,"meta":78},[7778],"2 + 2 + 3 + 3 = 10\n",[32,114200,114198],{"__ignoreMap":78},[65,114202,114204],{"id":114203},"为什么-gravity-是-0","为什么 gravity 是 0",[19,114206,114207],{},"本章把重力设为：",[73,114209,114211],{"className":55627,"code":114210,"language":55629,"meta":78,"style":78},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[32,114212,114213],{"__ignoreMap":78},[82,114214,114215,114217,114219,114221,114223,114225,114227,114229,114231],{"class":84,"line":85},[82,114216,3659],{"class":92},[82,114218,71722],{"class":53863},[82,114220,103745],{"class":2384},[82,114222,113],{"class":92},[82,114224,103750],{"class":96},[82,114226,103753],{"class":2384},[82,114228,113],{"class":92},[82,114230,106322],{"class":96},[82,114232,103695],{"class":92},[19,114234,114235],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114237,103804],{"id":103803},[73,114239,114241],{"className":75,"code":114240,"language":77,"meta":78,"style":78},"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",[32,114242,114243,114249,114259,114263,114267,114275,114280,114285,114289,114293,114298,114303,114307,114312,114317,114322,114326,114331,114336,114341,114346,114350,114354,114358,114362,114366,114371,114376,114380,114384,114388,114392,114396,114411,114420,114432,114455,114462,114466,114470,114480,114494,114508,114515,114519,114523,114537,114549,114561,114574,114589,114606,114610,114614,114626,114638,114646,114654,114658,114674,114679,114692,114705,114720,114724,114758,114790,114794,114798,114807,114811,114827,114837,114848,114864,114880,114896,114912,114916,114934,114954,114973,114977,114981,114993],{"__ignoreMap":78},[82,114244,114245,114247],{"class":84,"line":85},[82,114246,1123],{"class":112},[82,114248,103852],{"class":92},[82,114250,114251,114253,114255,114257],{"class":84,"line":157},[82,114252,1123],{"class":112},[82,114254,33955],{"class":92},[82,114256,728],{"class":112},[82,114258,33960],{"class":92},[82,114260,114261],{"class":84,"line":404},[82,114262,486],{"emptyLinePlaceholder":485},[82,114264,114265],{"class":84,"line":413},[82,114266,486],{"emptyLinePlaceholder":485},[82,114268,114269,114271,114273],{"class":84,"line":508},[82,114270,103865],{"class":88},[82,114272,259],{"class":112},[82,114274,103870],{"class":96},[82,114276,114277],{"class":84,"line":513},[82,114278,114279],{"class":96},"\u003Cmujoco model=\"two_link_reacher\">\n",[82,114281,114282],{"class":84,"line":1388},[82,114283,114284],{"class":96},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[82,114286,114287],{"class":84,"line":1394},[82,114288,486],{"emptyLinePlaceholder":485},[82,114290,114291],{"class":84,"line":1399},[82,114292,103889],{"class":96},[82,114294,114295],{"class":84,"line":1430},[82,114296,114297],{"class":96},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[82,114299,114300],{"class":84,"line":1818},[82,114301,114302],{"class":96},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[82,114304,114305],{"class":84,"line":2082},[82,114306,486],{"emptyLinePlaceholder":485},[82,114308,114309],{"class":84,"line":2233},[82,114310,114311],{"class":96},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[82,114313,114314],{"class":84,"line":2255},[82,114315,114316],{"class":96},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[82,114318,114319],{"class":84,"line":2260},[82,114320,114321],{"class":96},"      \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",[82,114323,114324],{"class":84,"line":2298},[82,114325,486],{"emptyLinePlaceholder":485},[82,114327,114328],{"class":84,"line":2303},[82,114329,114330],{"class":96},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[82,114332,114333],{"class":84,"line":2321},[82,114334,114335],{"class":96},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[82,114337,114338],{"class":84,"line":2533},[82,114339,114340],{"class":96},"        \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",[82,114342,114343],{"class":84,"line":2538},[82,114344,114345],{"class":96},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[82,114347,114348],{"class":84,"line":2548},[82,114349,108988],{"class":96},[82,114351,114352],{"class":84,"line":2579},[82,114353,103918],{"class":96},[82,114355,114356],{"class":84,"line":2585},[82,114357,103923],{"class":96},[82,114359,114360],{"class":84,"line":4350},[82,114361,486],{"emptyLinePlaceholder":485},[82,114363,114364],{"class":84,"line":4355},[82,114365,109005],{"class":96},[82,114367,114368],{"class":84,"line":4360},[82,114369,114370],{"class":96},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[82,114372,114373],{"class":84,"line":4365},[82,114374,114375],{"class":96},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[82,114377,114378],{"class":84,"line":4379},[82,114379,109015],{"class":96},[82,114381,114382],{"class":84,"line":4384},[82,114383,103928],{"class":96},[82,114385,114386],{"class":84,"line":5176},[82,114387,98249],{"class":96},[82,114389,114390],{"class":84,"line":5190},[82,114391,486],{"emptyLinePlaceholder":485},[82,114393,114394],{"class":84,"line":5198},[82,114395,486],{"emptyLinePlaceholder":485},[82,114397,114398,114400,114403,114406,114408],{"class":84,"line":5203},[82,114399,2381],{"class":112},[82,114401,114402],{"class":2384}," site_position",[82,114404,114405],{"class":92},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[82,114407,3918],{"class":88},[82,114409,114410],{"class":92},") -> np.ndarray:\n",[82,114412,114413,114415,114417],{"class":84,"line":5209},[82,114414,105951],{"class":92},[82,114416,113],{"class":112},[82,114418,114419],{"class":92}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[82,114421,114422,114424,114426,114428,114430],{"class":84,"line":5215},[82,114423,2219],{"class":112},[82,114425,106000],{"class":92},[82,114427,3659],{"class":112},[82,114429,6688],{"class":88},[82,114431,669],{"class":92},[82,114433,114434,114436,114438,114440,114442,114445,114447,114449,114451,114453],{"class":84,"line":5220},[82,114435,105983],{"class":112},[82,114437,105986],{"class":88},[82,114439,93],{"class":92},[82,114441,2822],{"class":112},[82,114443,114444],{"class":96},"\"site not found: ",[82,114446,3645],{"class":88},[82,114448,82364],{"class":92},[82,114450,3695],{"class":88},[82,114452,216],{"class":96},[82,114454,119],{"class":92},[82,114456,114457,114459],{"class":84,"line":10539},[82,114458,6685],{"class":112},[82,114460,114461],{"class":92}," data.site_xpos[site_id].copy()\n",[82,114463,114464],{"class":84,"line":10563},[82,114465,486],{"emptyLinePlaceholder":485},[82,114467,114468],{"class":84,"line":10568},[82,114469,486],{"emptyLinePlaceholder":485},[82,114471,114472,114474,114477],{"class":84,"line":10574},[82,114473,2381],{"class":112},[82,114475,114476],{"class":2384}," get_obs",[82,114478,114479],{"class":92},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[82,114481,114482,114485,114487,114490,114492],{"class":84,"line":10601},[82,114483,114484],{"class":92},"    tip ",[82,114486,113],{"class":112},[82,114488,114489],{"class":92}," site_position(model, data, ",[82,114491,114082],{"class":96},[82,114493,119],{"class":92},[82,114495,114496,114499,114501,114503,114506],{"class":84,"line":10606},[82,114497,114498],{"class":92},"    target ",[82,114500,113],{"class":112},[82,114502,114489],{"class":92},[82,114504,114505],{"class":96},"\"target\"",[82,114507,119],{"class":92},[82,114509,114510,114512],{"class":84,"line":10612},[82,114511,6685],{"class":112},[82,114513,114514],{"class":92}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[82,114516,114517],{"class":84,"line":10624},[82,114518,486],{"emptyLinePlaceholder":485},[82,114520,114521],{"class":84,"line":10636},[82,114522,486],{"emptyLinePlaceholder":485},[82,114524,114525,114527,114530,114533,114535],{"class":84,"line":10648},[82,114526,2381],{"class":112},[82,114528,114529],{"class":2384}," reward",[82,114531,114532],{"class":92},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[82,114534,2811],{"class":88},[82,114536,669],{"class":92},[82,114538,114539,114541,114543,114545,114547],{"class":84,"line":12307},[82,114540,114484],{"class":92},[82,114542,113],{"class":112},[82,114544,114489],{"class":92},[82,114546,114082],{"class":96},[82,114548,119],{"class":92},[82,114550,114551,114553,114555,114557,114559],{"class":84,"line":12332},[82,114552,114498],{"class":92},[82,114554,113],{"class":112},[82,114556,114489],{"class":92},[82,114558,114505],{"class":96},[82,114560,119],{"class":92},[82,114562,114563,114566,114568,114570,114572],{"class":84,"line":12355},[82,114564,114565],{"class":92},"    dist ",[82,114567,113],{"class":112},[82,114569,114147],{"class":92},[82,114571,3288],{"class":112},[82,114573,114152],{"class":92},[82,114575,114576,114579,114581,114584,114586],{"class":84,"line":12379},[82,114577,114578],{"class":92},"    control_cost ",[82,114580,113],{"class":112},[82,114582,114583],{"class":88}," 0.01",[82,114585,9110],{"class":112},[82,114587,114588],{"class":92}," np.sum(np.square(data.ctrl))\n",[82,114590,114591,114593,114595,114597,114599,114601,114603],{"class":84,"line":12384},[82,114592,6685],{"class":112},[82,114594,112343],{"class":88},[82,114596,93],{"class":92},[82,114598,3288],{"class":112},[82,114600,114142],{"class":92},[82,114602,3288],{"class":112},[82,114604,114605],{"class":92}," control_cost)\n",[82,114607,114608],{"class":84,"line":12389},[82,114609,486],{"emptyLinePlaceholder":485},[82,114611,114612],{"class":84,"line":12394},[82,114613,486],{"emptyLinePlaceholder":485},[82,114615,114616,114618,114620,114622,114624],{"class":84,"line":12403},[82,114617,2381],{"class":112},[82,114619,4573],{"class":2384},[82,114621,103949],{"class":92},[82,114623,98237],{"class":88},[82,114625,669],{"class":92},[82,114627,114628,114630,114632,114634,114636],{"class":84,"line":12408},[82,114629,103958],{"class":92},[82,114631,113],{"class":112},[82,114633,103963],{"class":92},[82,114635,103865],{"class":88},[82,114637,119],{"class":92},[82,114639,114640,114642,114644],{"class":84,"line":12414},[82,114641,103972],{"class":92},[82,114643,113],{"class":112},[82,114645,103977],{"class":92},[82,114647,114648,114650,114652],{"class":84,"line":12435},[82,114649,112699],{"class":92},[82,114651,113],{"class":112},[82,114653,107311],{"class":88},[82,114655,114656],{"class":84,"line":12441},[82,114657,486],{"emptyLinePlaceholder":485},[82,114659,114660,114662,114664,114666,114668,114670,114672],{"class":84,"line":12455},[82,114661,1888],{"class":112},[82,114663,34188],{"class":92},[82,114665,603],{"class":112},[82,114667,35013],{"class":88},[82,114669,93],{"class":92},[82,114671,67631],{"class":88},[82,114673,33362],{"class":92},[82,114675,114676],{"class":84,"line":12461},[82,114677,114678],{"class":92},"        mujoco.mj_forward(model, data)\n",[82,114680,114681,114684,114686,114688,114690],{"class":84,"line":12488},[82,114682,114683],{"class":92},"        tip ",[82,114685,113],{"class":112},[82,114687,114489],{"class":92},[82,114689,114082],{"class":96},[82,114691,119],{"class":92},[82,114693,114694,114697,114699,114701,114703],{"class":84,"line":12497},[82,114695,114696],{"class":92},"        target ",[82,114698,113],{"class":112},[82,114700,114489],{"class":92},[82,114702,114505],{"class":96},[82,114704,119],{"class":92},[82,114706,114707,114710,114712,114715,114717],{"class":84,"line":12503},[82,114708,114709],{"class":92},"        error ",[82,114711,113],{"class":112},[82,114713,114714],{"class":92}," target ",[82,114716,3288],{"class":112},[82,114718,114719],{"class":92}," tip\n",[82,114721,114722],{"class":84,"line":12511},[82,114723,486],{"emptyLinePlaceholder":485},[82,114725,114726,114728,114730,114732,114734,114737,114739,114741,114744,114746,114748,114750,114752,114754,114756],{"class":84,"line":12516},[82,114727,109167],{"class":92},[82,114729,2244],{"class":88},[82,114731,7038],{"class":92},[82,114733,113],{"class":112},[82,114735,114736],{"class":92}," np.clip(",[82,114738,107810],{"class":88},[82,114740,9110],{"class":112},[82,114742,114743],{"class":92}," error[",[82,114745,1425],{"class":88},[82,114747,2286],{"class":92},[82,114749,3288],{"class":112},[82,114751,104954],{"class":88},[82,114753,100],{"class":92},[82,114755,104954],{"class":88},[82,114757,119],{"class":92},[82,114759,114760,114762,114764,114766,114768,114770,114772,114774,114776,114778,114780,114782,114784,114786,114788],{"class":84,"line":19189},[82,114761,109167],{"class":92},[82,114763,2283],{"class":88},[82,114765,7038],{"class":92},[82,114767,113],{"class":112},[82,114769,114736],{"class":92},[82,114771,107810],{"class":88},[82,114773,9110],{"class":112},[82,114775,114743],{"class":92},[82,114777,2244],{"class":88},[82,114779,2286],{"class":92},[82,114781,3288],{"class":112},[82,114783,104954],{"class":88},[82,114785,100],{"class":92},[82,114787,104954],{"class":88},[82,114789,119],{"class":92},[82,114791,114792],{"class":84,"line":19195},[82,114793,486],{"emptyLinePlaceholder":485},[82,114795,114796],{"class":84,"line":19218},[82,114797,104067],{"class":92},[82,114799,114800,114802,114804],{"class":84,"line":19224},[82,114801,112843],{"class":92},[82,114803,12068],{"class":112},[82,114805,114806],{"class":92}," reward(model, data)\n",[82,114808,114809],{"class":84,"line":19247},[82,114810,486],{"emptyLinePlaceholder":485},[82,114812,114813,114815,114817,114819,114821,114823,114825],{"class":84,"line":19261},[82,114814,5096],{"class":112},[82,114816,34188],{"class":92},[82,114818,3086],{"class":112},[82,114820,8346],{"class":88},[82,114822,104110],{"class":112},[82,114824,6688],{"class":88},[82,114826,669],{"class":92},[82,114828,114829,114832,114834],{"class":84,"line":19281},[82,114830,114831],{"class":92},"            obs ",[82,114833,113],{"class":112},[82,114835,114836],{"class":92}," get_obs(model, data)\n",[82,114838,114839,114841,114843,114845],{"class":84,"line":19287},[82,114840,37216],{"class":88},[82,114842,93],{"class":92},[82,114844,112877],{"class":96},[82,114846,114847],{"class":92},", step)\n",[82,114849,114850,114852,114854,114857,114860,114862],{"class":84,"line":19298},[82,114851,37216],{"class":88},[82,114853,93],{"class":92},[82,114855,114856],{"class":96},"\"  tip:\"",[82,114858,114859],{"class":92},", np.round(tip, ",[82,114861,2841],{"class":88},[82,114863,33074],{"class":92},[82,114865,114866,114868,114870,114873,114876,114878],{"class":84,"line":19321},[82,114867,37216],{"class":88},[82,114869,93],{"class":92},[82,114871,114872],{"class":96},"\"  target:\"",[82,114874,114875],{"class":92},", np.round(target, ",[82,114877,2841],{"class":88},[82,114879,33074],{"class":92},[82,114881,114882,114884,114886,114889,114892,114894],{"class":84,"line":19343},[82,114883,37216],{"class":88},[82,114885,93],{"class":92},[82,114887,114888],{"class":96},"\"  ctrl:\"",[82,114890,114891],{"class":92},", np.round(data.ctrl.copy(), ",[82,114893,2841],{"class":88},[82,114895,33074],{"class":92},[82,114897,114898,114900,114902,114905,114908,114910],{"class":84,"line":19348},[82,114899,37216],{"class":88},[82,114901,93],{"class":92},[82,114903,114904],{"class":96},"\"  obs_dim:\"",[82,114906,114907],{"class":92},", obs.shape[",[82,114909,2244],{"class":88},[82,114911,7252],{"class":92},[82,114913,114914],{"class":84,"line":19354},[82,114915,486],{"emptyLinePlaceholder":485},[82,114917,114918,114920,114922,114924,114926,114928,114930,114932],{"class":84,"line":19368},[82,114919,611],{"class":88},[82,114921,93],{"class":92},[82,114923,112922],{"class":96},[82,114925,100],{"class":92},[82,114927,34588],{"class":88},[82,114929,112929],{"class":92},[82,114931,2841],{"class":88},[82,114933,33074],{"class":92},[82,114935,114936,114938,114940,114943,114946,114948,114950,114952],{"class":84,"line":19381},[82,114937,611],{"class":88},[82,114939,93],{"class":92},[82,114941,114942],{"class":96},"\"final tip:\"",[82,114944,114945],{"class":92},", np.round(site_position(model, data, ",[82,114947,114082],{"class":96},[82,114949,112891],{"class":92},[82,114951,2841],{"class":88},[82,114953,33074],{"class":92},[82,114955,114956,114958,114960,114963,114965,114967,114969,114971],{"class":84,"line":19386},[82,114957,611],{"class":88},[82,114959,93],{"class":92},[82,114961,114962],{"class":96},"\"target:\"",[82,114964,114945],{"class":92},[82,114966,114505],{"class":96},[82,114968,112891],{"class":92},[82,114970,2841],{"class":88},[82,114972,33074],{"class":92},[82,114974,114975],{"class":84,"line":19400},[82,114976,486],{"emptyLinePlaceholder":485},[82,114978,114979],{"class":84,"line":19405},[82,114980,486],{"emptyLinePlaceholder":485},[82,114982,114983,114985,114987,114989,114991],{"class":84,"line":19411},[82,114984,1237],{"class":112},[82,114986,33796],{"class":88},[82,114988,104110],{"class":112},[82,114990,104113],{"class":96},[82,114992,669],{"class":92},[82,114994,114995],{"class":84,"line":19416},[82,114996,104120],{"class":92},[19,114998,106121],{},[73,115000,115002],{"className":26406,"code":115001,"language":26408,"meta":78,"style":78},"touch ch7_reacher.py\n",[32,115003,115004],{"__ignoreMap":78},[82,115005,115006,115008],{"class":84,"line":85},[82,115007,103834],{"class":2384},[82,115009,115010],{"class":96}," ch7_reacher.py\n",[19,115012,112990],{},[73,115014,115016],{"className":26406,"code":115015,"language":26408,"meta":78,"style":78},"python ch7_reacher.py\n",[32,115017,115018],{"__ignoreMap":78},[82,115019,115020,115022],{"class":84,"line":85},[82,115021,77],{"class":2384},[82,115023,115010],{"class":96},[65,115025,104123],{"id":104123},[19,115027,115028],{},"读取 site 坐标：",[73,115030,115032],{"className":75,"code":115031,"language":77,"meta":78,"style":78},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[32,115033,115034],{"__ignoreMap":78},[82,115035,115036,115038,115040,115042,115044],{"class":84,"line":85},[82,115037,2381],{"class":112},[82,115039,114402],{"class":2384},[82,115041,114405],{"class":92},[82,115043,3918],{"class":88},[82,115045,114410],{"class":92},[19,115047,115048],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,115050,113006],{},[73,115052,115054],{"className":75,"code":115053,"language":77,"meta":78,"style":78},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[32,115055,115056],{"__ignoreMap":78},[82,115057,115058,115060],{"class":84,"line":85},[82,115059,19631],{"class":112},[82,115061,114514],{"class":92},[19,115063,115064],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,115066,112331],{},[73,115068,115070],{"className":75,"code":115069,"language":77,"meta":78,"style":78},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[32,115071,115072,115084,115097],{"__ignoreMap":78},[82,115073,115074,115076,115078,115080,115082],{"class":84,"line":85},[82,115075,114142],{"class":92},[82,115077,113],{"class":112},[82,115079,114147],{"class":92},[82,115081,3288],{"class":112},[82,115083,114152],{"class":92},[82,115085,115086,115089,115091,115093,115095],{"class":84,"line":157},[82,115087,115088],{"class":92},"control_cost ",[82,115090,113],{"class":112},[82,115092,114583],{"class":88},[82,115094,9110],{"class":112},[82,115096,114588],{"class":92},[82,115098,115099,115101,115103,115105,115107,115109,115111],{"class":84,"line":404},[82,115100,19631],{"class":112},[82,115102,112343],{"class":88},[82,115104,93],{"class":92},[82,115106,3288],{"class":112},[82,115108,114142],{"class":92},[82,115110,3288],{"class":112},[82,115112,114605],{"class":92},[19,115114,115115],{},"奖励由两部分组成：",[26,115117,115118,115123],{},[29,115119,115120,115122],{},[32,115121,114169],{},"：末端离目标越远，奖励越低。",[29,115124,115125,115128],{},[32,115126,115127],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,115130,115131],{},"简单控制器：",[73,115133,115135],{"className":75,"code":115134,"language":77,"meta":78,"style":78},"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",[32,115136,115137,115150,115182],{"__ignoreMap":78},[82,115138,115139,115142,115144,115146,115148],{"class":84,"line":85},[82,115140,115141],{"class":92},"error ",[82,115143,113],{"class":112},[82,115145,114714],{"class":92},[82,115147,3288],{"class":112},[82,115149,114719],{"class":92},[82,115151,115152,115154,115156,115158,115160,115162,115164,115166,115168,115170,115172,115174,115176,115178,115180],{"class":84,"line":157},[82,115153,108421],{"class":92},[82,115155,2244],{"class":88},[82,115157,7038],{"class":92},[82,115159,113],{"class":112},[82,115161,114736],{"class":92},[82,115163,107810],{"class":88},[82,115165,9110],{"class":112},[82,115167,114743],{"class":92},[82,115169,1425],{"class":88},[82,115171,2286],{"class":92},[82,115173,3288],{"class":112},[82,115175,104954],{"class":88},[82,115177,100],{"class":92},[82,115179,104954],{"class":88},[82,115181,119],{"class":92},[82,115183,115184,115186,115188,115190,115192,115194,115196,115198,115200,115202,115204,115206,115208,115210,115212],{"class":84,"line":404},[82,115185,108421],{"class":92},[82,115187,2283],{"class":88},[82,115189,7038],{"class":92},[82,115191,113],{"class":112},[82,115193,114736],{"class":92},[82,115195,107810],{"class":88},[82,115197,9110],{"class":112},[82,115199,114743],{"class":92},[82,115201,2244],{"class":88},[82,115203,2286],{"class":92},[82,115205,3288],{"class":112},[82,115207,104954],{"class":88},[82,115209,100],{"class":92},[82,115211,104954],{"class":88},[82,115213,119],{"class":92},[19,115215,115216],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[65,115218,104259],{"id":104259},[73,115220,115221],{"className":75,"code":115031,"language":77,"meta":78,"style":78},[32,115222,115223],{"__ignoreMap":78},[82,115224,115225,115227,115229,115231,115233],{"class":84,"line":85},[82,115226,2381],{"class":112},[82,115228,114402],{"class":2384},[82,115230,114405],{"class":92},[82,115232,3918],{"class":88},[82,115234,114410],{"class":92},[19,115236,115237,115238,115240,115241,85093,115243,2611],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[32,115239,82364],{}," 是 site 的名字，比如 ",[32,115242,114082],{},[32,115244,114505],{},[73,115246,115248],{"className":75,"code":115247,"language":77,"meta":78,"style":78},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[32,115249,115250],{"__ignoreMap":78},[82,115251,115252,115254,115256],{"class":84,"line":85},[82,115253,106185],{"class":92},[82,115255,113],{"class":112},[82,115257,114419],{"class":92},[19,115259,115260],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[73,115262,115264],{"className":75,"code":115263,"language":77,"meta":78,"style":78},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[32,115265,115266,115278],{"__ignoreMap":78},[82,115267,115268,115270,115272,115274,115276],{"class":84,"line":85},[82,115269,1237],{"class":112},[82,115271,106000],{"class":92},[82,115273,3659],{"class":112},[82,115275,6688],{"class":88},[82,115277,669],{"class":92},[82,115279,115280,115282,115284,115286,115288,115290,115292,115294,115296,115298],{"class":84,"line":157},[82,115281,106446],{"class":112},[82,115283,105986],{"class":88},[82,115285,93],{"class":92},[82,115287,2822],{"class":112},[82,115289,114444],{"class":96},[82,115291,3645],{"class":88},[82,115293,82364],{"class":92},[82,115295,3695],{"class":88},[82,115297,216],{"class":96},[82,115299,119],{"class":92},[19,115301,115302,115303,115306,115307,115309],{},"如果 site 没找到，就主动报错。",[32,115304,115305],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[32,115308,82364],{}," 的值放进字符串里。",[73,115311,115313],{"className":75,"code":115312,"language":77,"meta":78,"style":78},"return data.site_xpos[site_id].copy()\n",[32,115314,115315],{"__ignoreMap":78},[82,115316,115317,115319],{"class":84,"line":85},[82,115318,19631],{"class":112},[82,115320,114461],{"class":92},[19,115322,115323,115324,115326,115327,115330],{},"返回这个 site 的世界坐标。",[32,115325,106231],{}," 里的每一行都是一个 site 的 ",[32,115328,115329],{},"(x, y, z)"," 坐标。",[73,115332,115334],{"className":75,"code":115333,"language":77,"meta":78,"style":78},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[32,115335,115336],{"__ignoreMap":78},[82,115337,115338,115340,115342],{"class":84,"line":85},[82,115339,2381],{"class":112},[82,115341,114476],{"class":2384},[82,115343,114479],{"class":92},[19,115345,115346],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[73,115348,115350],{"className":75,"code":115349,"language":77,"meta":78,"style":78},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[32,115351,115352,115364],{"__ignoreMap":78},[82,115353,115354,115356,115358,115360,115362],{"class":84,"line":85},[82,115355,114114],{"class":92},[82,115357,113],{"class":112},[82,115359,114489],{"class":92},[82,115361,114082],{"class":96},[82,115363,119],{"class":92},[82,115365,115366,115368,115370,115372,115374],{"class":84,"line":157},[82,115367,114124],{"class":92},[82,115369,113],{"class":112},[82,115371,114489],{"class":92},[82,115373,114505],{"class":96},[82,115375,119],{"class":92},[19,115377,115378],{},"分别读取末端点和目标点的世界坐标。",[73,115380,115381],{"className":75,"code":115053,"language":77,"meta":78,"style":78},[32,115382,115383],{"__ignoreMap":78},[82,115384,115385,115387],{"class":84,"line":85},[82,115386,19631],{"class":112},[82,115388,114514],{"class":92},[19,115390,115391],{},"把四部分拼成一个观测数组：",[73,115393,115396],{"className":115394,"code":115395,"language":7780,"meta":78},[7778],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[32,115397,115395],{"__ignoreMap":78},[73,115399,115401],{"className":75,"code":115400,"language":77,"meta":78,"style":78},"dist = np.linalg.norm(tip - target)\n",[32,115402,115403],{"__ignoreMap":78},[82,115404,115405,115407,115409,115411,115413],{"class":84,"line":85},[82,115406,114142],{"class":92},[82,115408,113],{"class":112},[82,115410,114147],{"class":92},[82,115412,3288],{"class":112},[82,115414,114152],{"class":92},[19,115416,115417,115418,115421,115422,115425],{},"计算 tip 到 target 的距离。",[32,115419,115420],{},"tip - target"," 得到一个三维向量，",[32,115423,115424],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115427,17220],{},[73,115429,115432],{"className":115430,"code":115431,"language":7780,"meta":78},[7778],"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",[32,115433,115431],{"__ignoreMap":78},[73,115435,115437],{"className":75,"code":115436,"language":77,"meta":78,"style":78},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[32,115438,115439],{"__ignoreMap":78},[82,115440,115441,115443,115445,115447,115449],{"class":84,"line":85},[82,115442,115088],{"class":92},[82,115444,113],{"class":112},[82,115446,114583],{"class":88},[82,115448,9110],{"class":112},[82,115450,114588],{"class":92},[19,115452,115453,115454,115457,115458,115461],{},"计算动作惩罚。",[32,115455,115456],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[32,115459,115460],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[73,115463,115465],{"className":75,"code":115464,"language":77,"meta":78,"style":78},"return float(-dist - control_cost)\n",[32,115466,115467],{"__ignoreMap":78},[82,115468,115469,115471,115473,115475,115477,115479,115481],{"class":84,"line":85},[82,115470,19631],{"class":112},[82,115472,112343],{"class":88},[82,115474,93],{"class":92},[82,115476,3288],{"class":112},[82,115478,114142],{"class":92},[82,115480,3288],{"class":112},[82,115482,114605],{"class":92},[19,115484,115485],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[73,115487,115488],{"className":75,"code":113349,"language":77,"meta":78,"style":78},[32,115489,115490],{"__ignoreMap":78},[82,115491,115492,115494,115496],{"class":84,"line":85},[82,115493,113356],{"class":92},[82,115495,113],{"class":112},[82,115497,107311],{"class":88},[19,115499,115500],{},"累计奖励变量，记录整个运行过程的总分。",[73,115502,115504],{"className":75,"code":115503,"language":77,"meta":78,"style":78},"for step in range(500):\n",[32,115505,115506],{"__ignoreMap":78},[82,115507,115508,115510,115512,115514,115516,115518,115520],{"class":84,"line":85},[82,115509,597],{"class":112},[82,115511,34188],{"class":92},[82,115513,603],{"class":112},[82,115515,35013],{"class":88},[82,115517,93],{"class":92},[82,115519,67631],{"class":88},[82,115521,33362],{"class":92},[19,115523,115524],{},"运行 500 个控制步。",[73,115526,115527],{"className":75,"code":107093,"language":77,"meta":78,"style":78},[32,115528,115529],{"__ignoreMap":78},[82,115530,115531],{"class":84,"line":85},[82,115532,107093],{"class":92},[19,115534,115535,115536,103569,115538,115540],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[32,115537,105782],{},[32,115539,105785],{}," 是当前状态下的坐标。",[73,115542,115544],{"className":75,"code":115543,"language":77,"meta":78,"style":78},"error = target - tip\n",[32,115545,115546],{"__ignoreMap":78},[82,115547,115548,115550,115552,115554,115556],{"class":84,"line":85},[82,115549,115141],{"class":92},[82,115551,113],{"class":112},[82,115553,114714],{"class":92},[82,115555,3288],{"class":112},[82,115557,114719],{"class":92},[19,115559,115560],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[73,115562,115564],{"className":75,"code":115563,"language":77,"meta":78,"style":78},"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",[32,115565,115566,115598],{"__ignoreMap":78},[82,115567,115568,115570,115572,115574,115576,115578,115580,115582,115584,115586,115588,115590,115592,115594,115596],{"class":84,"line":85},[82,115569,108421],{"class":92},[82,115571,2244],{"class":88},[82,115573,7038],{"class":92},[82,115575,113],{"class":112},[82,115577,114736],{"class":92},[82,115579,107810],{"class":88},[82,115581,9110],{"class":112},[82,115583,114743],{"class":92},[82,115585,1425],{"class":88},[82,115587,2286],{"class":92},[82,115589,3288],{"class":112},[82,115591,104954],{"class":88},[82,115593,100],{"class":92},[82,115595,104954],{"class":88},[82,115597,119],{"class":92},[82,115599,115600,115602,115604,115606,115608,115610,115612,115614,115616,115618,115620,115622,115624,115626,115628],{"class":84,"line":157},[82,115601,108421],{"class":92},[82,115603,2283],{"class":88},[82,115605,7038],{"class":92},[82,115607,113],{"class":112},[82,115609,114736],{"class":92},[82,115611,107810],{"class":88},[82,115613,9110],{"class":112},[82,115615,114743],{"class":92},[82,115617,2244],{"class":88},[82,115619,2286],{"class":92},[82,115621,3288],{"class":112},[82,115623,104954],{"class":88},[82,115625,100],{"class":92},[82,115627,104954],{"class":88},[82,115629,119],{"class":92},[19,115631,115632,115633,115636],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[32,115634,115635],{},"error -> ctrl -> step"," 的流程。",[73,115638,115639],{"className":75,"code":107055,"language":77,"meta":78,"style":78},[32,115640,115641],{"__ignoreMap":78},[82,115642,115643],{"class":84,"line":85},[82,115644,107055],{"class":92},[19,115646,115647],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[73,115649,115651],{"className":75,"code":115650,"language":77,"meta":78,"style":78},"obs = get_obs(model, data)\n",[32,115652,115653],{"__ignoreMap":78},[82,115654,115655,115657,115659],{"class":84,"line":85},[82,115656,113400],{"class":92},[82,115658,113],{"class":112},[82,115660,114836],{"class":92},[19,115662,115663,115664,115667],{},"读取最新观测。后面打印 ",[32,115665,115666],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115669,104867],{"id":104866},[19,115671,115672],{},"观测维度为:",[73,115674,115677],{"className":115675,"code":115676,"language":7780,"meta":78},[7778],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[32,115678,115676],{"__ignoreMap":78},[19,115680,115681],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115683,115684],{},"程序每 100 步打印：",[73,115686,115689],{"className":115687,"code":115688,"language":7780,"meta":78},[7778],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[32,115690,115688],{"__ignoreMap":78},[19,115692,115693,115694,115696],{},"如果控制有效，你应该看到最终 ",[32,115695,105782],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115698,104899],{"id":104898},[26,115700,115701,115704,115707,115713,115719,115726,115736],{},[29,115702,115703],{},"修改目标点位置。",[29,115705,115706],{},"重新运行，观察最终 tip 是否变化。",[29,115708,115709,115710,115712],{},"把 gravity 改成 ",[32,115711,105140],{},"，观察控制是否变差。",[29,115714,113727,115715,113731,115717,2611],{},[32,115716,104709],{},[32,115718,1425],{},[29,115720,104962,115721,104965,115723,115725],{},[32,115722,113142],{},[32,115724,109857],{},"，观察机械臂是否更难移动。",[29,115727,104962,115728,85084,115730,104965,115732,115735],{},[32,115729,105785],{},[32,115731,106697],{},[32,115733,115734],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,115737,115738],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115740,105004],{"id":105003},[65,115742,115744],{"id":115743},"site-not-found",[32,115745,115746],{},"site not found",[19,115748,115749,115750,103569,115753,2611],{},"检查 XML 中是否有 ",[32,115751,115752],{},"site name=\"tip\"",[32,115754,115755],{},"site name=\"target\"",[65,115757,115758],{"id":115758},"机械臂完全不动",[19,115760,105074],{},[26,115762,115763,115768,115771,115776],{},[29,115764,115765,115767],{},[32,115766,104709],{}," 是否为 2",[29,115769,115770],{},"actuator 是否引用正确 joint",[29,115772,115773,115775],{},[32,115774,103627],{}," 是否被赋值",[29,115777,115778,115779],{},"是否执行了 ",[32,115780,103236],{},[65,115782,115783],{"id":115783},"控制效果不好",[19,115785,115786],{},"正常。本章重点不是控制器最优，而是任务结构:",[73,115788,115791],{"className":115789,"code":115790,"language":7780,"meta":78},[7778],"obs → action → mj_step → reward → next_obs\n",[32,115792,115790],{"__ignoreMap":78},[65,115794,115796],{"id":115795},"tip-坐标不变化","tip 坐标不变化",[19,115798,105126],{},[26,115800,115801,115806,115814,115823],{},[29,115802,115803,115804,2611],{},"是否每步调用了 ",[32,115805,103236],{},[29,115807,115808,115809,103569,115811,2611],{},"是否写入了 ",[32,115810,108676],{},[32,115812,115813],{},"data.ctrl[1]",[29,115815,115816,115817,2973,115820,2611],{},"actuator 是否正确引用 ",[32,115818,115819],{},"joint1",[32,115821,115822],{},"joint2",[29,115824,115825],{},"控制输入是否太小。",[65,115827,115828],{"id":115828},"目标点不会动",[19,115830,115831],{},"本章的 target 是固定 site：",[73,115833,115835],{"className":55627,"code":115834,"language":55629,"meta":78,"style":78},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[32,115836,115837],{"__ignoreMap":78},[82,115838,115839,115841,115843,115845,115847,115849,115851,115853,115856],{"class":84,"line":85},[82,115840,3659],{"class":92},[82,115842,105761],{"class":53863},[82,115844,17506],{"class":2384},[82,115846,113],{"class":92},[82,115848,114505],{"class":96},[82,115850,103657],{"class":2384},[82,115852,113],{"class":92},[82,115854,115855],{"class":96},"\"0.5 0 0.4\"",[82,115857,115858],{"class":92}," ...\u002F>\n",[19,115860,115861,115862,115864],{},"它直接挂在 ",[32,115863,104392],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[65,115866,115867],{"id":115867},"机械臂不像真实机械臂",[19,115869,115870],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115872,105158],{"id":105157},[19,115874,115875],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115877,115878],{},"核心公式：",[73,115880,115883],{"className":115881,"code":115882,"language":7780,"meta":78},[7778],"distance = ||tip - target||\nreward = -distance - action_cost\n",[32,115884,115882],{"__ignoreMap":78},[19,115886,115887],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2671,115889,115890],{},"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":78,"searchDepth":157,"depth":157,"links":115892},[115893,115894,115895,115900,115904,115905,115906,115914],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":115896},[115897,115898,115899],{"id":114097,"depth":404,"text":114098},{"id":114173,"depth":404,"text":114173},{"id":114203,"depth":404,"text":114204},{"id":103803,"depth":157,"text":103804,"children":115901},[115902,115903],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":115907},[115908,115909,115910,115911,115912,115913],{"id":115743,"depth":404,"text":115746},{"id":115758,"depth":404,"text":115758},{"id":115783,"depth":404,"text":115783},{"id":115795,"depth":404,"text":115796},{"id":115828,"depth":404,"text":115828},{"id":115867,"depth":404,"text":115867},{"id":105157,"depth":157,"text":105158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113901,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115921,"title":115922,"body":115923,"description":78,"extension":2700,"meta":119385,"navigation":485,"path":119386,"seo":119387,"stem":119388,"__hash__":119389},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115924,"toc":119356},[115925,115928,115930,115933,115936,115961,115964,115970,115973,115979,115981,115983,116007,116009,116027,116029,116072,116074,116101,116103,116106,116158,116161,116167,116176,116179,116217,116220,116259,116262,116270,116277,116280,116286,116288,116342,116349,116394,116397,116401,116417,116427,116429,117690,117692,117704,117706,117717,117719,117722,117743,117746,117749,117782,117788,117791,117824,117827,117830,117871,117876,117890,117893,117906,117911,117934,117936,117951,117961,117976,117983,118003,118018,118036,118039,118056,118064,118080,118086,118118,118131,118163,118173,118208,118222,118268,118282,118324,118335,118348,118354,118387,118390,118417,118427,118467,118477,118494,118501,118519,118522,118563,118576,118591,118594,118617,118620,118632,118635,118654,118659,118680,118683,118698,118701,118735,118747,118762,118765,118790,118793,118812,118815,118847,118850,118874,118880,118910,118917,118930,118933,118935,118937,118943,118946,118949,118961,118964,118966,119020,119022,119026,119032,119041,119044,119051,119053,119076,119079,119083,119085,119103,119109,119111,119144,119147,119153,119157,119160,119180,119185,119189,119196,119216,119221,119225,119228,119248,119251,119337,119341,119344,119350,119353],[10,115926,115922],{"id":115927},"_8gymnasium-风格强化学习接口基础",[14,115929,103198],{"id":103197},[19,115931,115932],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115934,115935],{},"你将实现:",[73,115937,115939],{"className":75,"code":115938,"language":77,"meta":78,"style":78},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[32,115940,115941,115951],{"__ignoreMap":78},[82,115942,115943,115946,115948],{"class":84,"line":85},[82,115944,115945],{"class":92},"obs, info ",[82,115947,113],{"class":112},[82,115949,115950],{"class":92}," env.reset()\n",[82,115952,115953,115956,115958],{"class":84,"line":157},[82,115954,115955],{"class":92},"obs, reward, terminated, truncated, info ",[82,115957,113],{"class":112},[82,115959,115960],{"class":92}," env.step(action)\n",[19,115962,115963],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115965,115966,115967,115969],{},"前面章节的代码都是“脚本式”的：在 ",[32,115968,104846],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115971,115972],{},"可以先记住 Gymnasium 环境的核心交互：",[73,115974,115977],{"className":115975,"code":115976,"language":7780,"meta":78},[7778],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[32,115978,115976],{"__ignoreMap":78},[14,115980,103321],{"id":103320},[19,115982,103324],{},[73,115984,115985],{"className":26406,"code":106938,"language":26408,"meta":78,"style":78},[32,115986,115987],{"__ignoreMap":78},[82,115988,115989,115991,115993,115995,115997,115999,116001,116003,116005],{"class":84,"line":85},[82,115990,27161],{"class":2384},[82,115992,28897],{"class":96},[82,115994,26418],{"class":96},[82,115996,28982],{"class":88},[82,115998,106953],{"class":96},[82,116000,103349],{"class":96},[82,116002,105052],{"class":96},[82,116004,103365],{"class":96},[82,116006,106962],{"class":96},[19,116008,105370],{},[73,116010,116012],{"className":26406,"code":116011,"language":26408,"meta":78,"style":78},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[32,116013,116014],{"__ignoreMap":78},[82,116015,116016,116018,116020,116022,116024],{"class":84,"line":85},[82,116017,26415],{"class":2384},[82,116019,26418],{"class":96},[82,116021,103481],{"class":96},[82,116023,110261],{"class":96},[82,116025,116026],{"class":96}," gymnasium\n",[19,116028,105387],{},[73,116030,116032],{"className":26406,"code":116031,"language":26408,"meta":78,"style":78},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[32,116033,116034,116051,116060],{"__ignoreMap":78},[82,116035,116036,116038,116040,116042,116045,116047,116049],{"class":84,"line":85},[82,116037,32911],{"class":2384},[82,116039,31757],{"class":96},[82,116041,27700],{"class":88},[82,116043,116044],{"class":96}," mujoco-gym-api",[82,116046,103526],{"class":96},[82,116048,103529],{"class":88},[82,116050,103532],{"class":88},[82,116052,116053,116055,116057],{"class":84,"line":157},[82,116054,32911],{"class":2384},[82,116056,103539],{"class":96},[82,116058,116059],{"class":96}," mujoco-gym-api\n",[82,116061,116062,116064,116066,116068,116070],{"class":84,"line":404},[82,116063,26415],{"class":2384},[82,116065,26418],{"class":96},[82,116067,103481],{"class":96},[82,116069,110261],{"class":96},[82,116071,116026],{"class":96},[19,116073,103555],{},[26,116075,116076,116086,116089,116095],{},[29,116077,116078,116079,116082,116083,2611],{},"本章使用 ",[32,116080,116081],{},"gymnasium","，不是旧版 ",[32,116084,116085],{},"gym",[29,116087,116088],{},"Gymnasium API 与旧 Gym API 有差异。",[29,116090,116091,116092,2611],{},"旧 Gym 常见返回值是 4 个: ",[32,116093,116094],{},"obs, reward, done, info",[29,116096,116097,116098,2611],{},"Gymnasium 返回值是 5 个: ",[32,116099,116100],{},"obs, reward, terminated, truncated, info",[14,116102,103596],{"id":103595},[19,116104,116105],{},"强化学习环境接口包含:",[278,116107,116108,116117],{},[281,116109,116110],{},[284,116111,116112,116115],{},[287,116113,116114],{"align":26320},"方法",[287,116116,105247],{"align":26320},[294,116118,116119,116129,116139,116149],{},[284,116120,116121,116126],{},[299,116122,116123],{"align":26320},[32,116124,116125],{},"reset()",[299,116127,116128],{"align":26320},"重置环境",[284,116130,116131,116136],{},[299,116132,116133],{"align":26320},[32,116134,116135],{},"step(action)",[299,116137,116138],{"align":26320},"执行动作",[284,116140,116141,116146],{},[299,116142,116143],{"align":26320},[32,116144,116145],{},"observation_space",[299,116147,116148],{"align":26320},"观测空间",[284,116150,116151,116156],{},[299,116152,116153],{"align":26320},[32,116154,116155],{},"action_space",[299,116157,26238],{"align":26320},[19,116159,116160],{},"一个最小环境需要完成:",[73,116162,116165],{"className":116163,"code":116164,"language":7780,"meta":78},[7778],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[32,116166,116164],{"__ignoreMap":78},[65,116168,116170,103569,116173,107188],{"id":116169},"terminated-和-truncated-的区别",[32,116171,116172],{},"terminated",[32,116174,116175],{},"truncated",[19,116177,116178],{},"Gymnasium 把“结束”拆成两个概念：",[278,116180,116181,116191],{},[281,116182,116183],{},[284,116184,116185,116187,116189],{},[287,116186,107124],{"align":26320},[287,116188,103251],{"align":26320},[287,116190,23771],{"align":26320},[294,116192,116193,116205],{},[284,116194,116195,116199,116202],{},[299,116196,116197],{"align":26320},[32,116198,116172],{},[299,116200,116201],{"align":26320},"任务自然结束",[299,116203,116204],{"align":26320},"机械臂到达目标、机器人摔倒",[284,116206,116207,116211,116214],{},[299,116208,116209],{"align":26320},[32,116210,116175],{},[299,116212,116213],{"align":26320},"因外部限制截断",[299,116215,116216],{"align":26320},"达到最大步数、时间限制",[19,116218,116219],{},"本章中：",[73,116221,116223],{"className":75,"code":116222,"language":77,"meta":78,"style":78},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[32,116224,116225,116240],{"__ignoreMap":78},[82,116226,116227,116230,116232,116235,116237],{"class":84,"line":85},[82,116228,116229],{"class":92},"terminated ",[82,116231,113],{"class":112},[82,116233,116234],{"class":92}," dist ",[82,116236,3659],{"class":112},[82,116238,116239],{"class":88}," 0.05\n",[82,116241,116242,116245,116247,116249,116252,116254,116256],{"class":84,"line":157},[82,116243,116244],{"class":92},"truncated ",[82,116246,113],{"class":112},[82,116248,41439],{"class":88},[82,116250,116251],{"class":92},".steps ",[82,116253,4313],{"class":112},[82,116255,41439],{"class":88},[82,116257,116258],{"class":92},".max_steps\n",[19,116260,116261],{},"也就是：",[26,116263,116264,116267],{},[29,116265,116266],{},"末端距离目标小于 0.05，任务成功结束。",[29,116268,116269],{},"步数超过上限，episode 被截断。",[65,116271,116273,103569,116275],{"id":116272},"observation_space-和-action_space",[32,116274,116145],{},[32,116276,116155],{},[19,116278,116279],{},"这两个对象告诉算法：",[73,116281,116284],{"className":116282,"code":116283,"language":7780,"meta":78},[7778],"观测长什么样\n动作允许多大\n",[32,116285,116283],{"__ignoreMap":78},[19,116287,17220],{},[73,116289,116291],{"className":75,"code":116290,"language":77,"meta":78,"style":78},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[32,116292,116293],{"__ignoreMap":78},[82,116294,116295,116297,116300,116302,116305,116308,116311,116313,116315,116318,116320,116322,116324,116326,116328,116330,116332,116335,116337,116339],{"class":84,"line":85},[82,116296,33399],{"class":88},[82,116298,116299],{"class":92},".action_space ",[82,116301,113],{"class":112},[82,116303,116304],{"class":92}," spaces.Box(",[82,116306,116307],{"class":108},"low",[82,116309,116310],{"class":112},"=-",[82,116312,104954],{"class":88},[82,116314,100],{"class":92},[82,116316,116317],{"class":108},"high",[82,116319,113],{"class":112},[82,116321,104954],{"class":88},[82,116323,100],{"class":92},[82,116325,98514],{"class":108},[82,116327,113],{"class":112},[82,116329,93],{"class":92},[82,116331,1425],{"class":88},[82,116333,116334],{"class":92},",), ",[82,116336,96051],{"class":108},[82,116338,113],{"class":112},[82,116340,116341],{"class":92},"np.float32)\n",[19,116343,116344,116345,116348],{},"表示动作是 2 维数组，每个值都在 ",[32,116346,116347],{},"[-1, 1]"," 范围内。",[73,116350,116352],{"className":75,"code":116351,"language":77,"meta":78,"style":78},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[32,116353,116354],{"__ignoreMap":78},[82,116355,116356,116358,116361,116363,116365,116367,116369,116372,116374,116376,116378,116380,116382,116384,116386,116388,116390,116392],{"class":84,"line":85},[82,116357,33399],{"class":88},[82,116359,116360],{"class":92},".observation_space ",[82,116362,113],{"class":112},[82,116364,116304],{"class":92},[82,116366,116307],{"class":108},[82,116368,116310],{"class":112},[82,116370,116371],{"class":92},"np.inf, ",[82,116373,116317],{"class":108},[82,116375,113],{"class":112},[82,116377,116371],{"class":92},[82,116379,98514],{"class":108},[82,116381,113],{"class":112},[82,116383,93],{"class":92},[82,116385,440],{"class":88},[82,116387,116334],{"class":92},[82,116389,96051],{"class":108},[82,116391,113],{"class":112},[82,116393,116341],{"class":92},[19,116395,116396],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[65,116398,116400],{"id":116399},"frame_skip-是什么","frame_skip 是什么",[73,116402,116404],{"className":75,"code":116403,"language":77,"meta":78,"style":78},"self.frame_skip = 5\n",[32,116405,116406],{"__ignoreMap":78},[82,116407,116408,116410,116413,116415],{"class":84,"line":85},[82,116409,33399],{"class":88},[82,116411,116412],{"class":92},".frame_skip ",[82,116414,113],{"class":112},[82,116416,56987],{"class":88},[19,116418,116419,116420,116423,116424,116426],{},"表示外部调用一次 ",[32,116421,116422],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[32,116425,103766],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116428,103804],{"id":103803},[73,116430,116432],{"className":75,"code":116431,"language":77,"meta":78,"style":78},"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",[32,116433,116434,116446,116452,116462,116473,116477,116481,116489,116494,116498,116502,116506,116510,116514,116518,116522,116527,116531,116535,116539,116544,116548,116552,116556,116560,116564,116568,116572,116576,116580,116584,116588,116592,116596,116614,116629,116633,116646,116656,116671,116688,116692,116713,116732,116757,116771,116775,116785,116797,116807,116811,116853,116891,116895,116905,116921,116936,116955,116962,116966,116979,116994,117009,117022,117041,117057,117061,117102,117117,117132,117136,117175,117186,117199,117203,117213,117222,117226,117236,117251,117269,117273,117284,117301,117314,117318,117328,117332,117343,117354,117358,117372,117386,117402,117406,117419,117436,117451,117458,117462,117466,117478,117488,117506,117518,117530,117534,117542,117558,117567,117576,117584,117626,117639,117644,117648,117666,117670,117674,117686],{"__ignoreMap":78},[82,116435,116436,116438,116441,116443],{"class":84,"line":85},[82,116437,1123],{"class":112},[82,116439,116440],{"class":92}," gymnasium ",[82,116442,728],{"class":112},[82,116444,116445],{"class":92}," gym\n",[82,116447,116448,116450],{"class":84,"line":157},[82,116449,1123],{"class":112},[82,116451,103852],{"class":92},[82,116453,116454,116456,116458,116460],{"class":84,"line":404},[82,116455,1123],{"class":112},[82,116457,33955],{"class":92},[82,116459,728],{"class":112},[82,116461,33960],{"class":92},[82,116463,116464,116466,116468,116470],{"class":84,"line":413},[82,116465,1117],{"class":112},[82,116467,116440],{"class":92},[82,116469,1123],{"class":112},[82,116471,116472],{"class":92}," spaces\n",[82,116474,116475],{"class":84,"line":508},[82,116476,486],{"emptyLinePlaceholder":485},[82,116478,116479],{"class":84,"line":513},[82,116480,486],{"emptyLinePlaceholder":485},[82,116482,116483,116485,116487],{"class":84,"line":1388},[82,116484,103865],{"class":88},[82,116486,259],{"class":112},[82,116488,103870],{"class":96},[82,116490,116491],{"class":84,"line":1394},[82,116492,116493],{"class":96},"\u003Cmujoco model=\"gym_reacher\">\n",[82,116495,116496],{"class":84,"line":1399},[82,116497,114284],{"class":96},[82,116499,116500],{"class":84,"line":1430},[82,116501,486],{"emptyLinePlaceholder":485},[82,116503,116504],{"class":84,"line":1818},[82,116505,103889],{"class":96},[82,116507,116508],{"class":84,"line":2082},[82,116509,114302],{"class":96},[82,116511,116512],{"class":84,"line":2233},[82,116513,486],{"emptyLinePlaceholder":485},[82,116515,116516],{"class":84,"line":2255},[82,116517,114311],{"class":96},[82,116519,116520],{"class":84,"line":2260},[82,116521,114316],{"class":96},[82,116523,116524],{"class":84,"line":2298},[82,116525,116526],{"class":96},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[82,116528,116529],{"class":84,"line":2303},[82,116530,486],{"emptyLinePlaceholder":485},[82,116532,116533],{"class":84,"line":2321},[82,116534,114330],{"class":96},[82,116536,116537],{"class":84,"line":2533},[82,116538,114335],{"class":96},[82,116540,116541],{"class":84,"line":2538},[82,116542,116543],{"class":96},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[82,116545,116546],{"class":84,"line":2548},[82,116547,114345],{"class":96},[82,116549,116550],{"class":84,"line":2579},[82,116551,108988],{"class":96},[82,116553,116554],{"class":84,"line":2585},[82,116555,103918],{"class":96},[82,116557,116558],{"class":84,"line":4350},[82,116559,103923],{"class":96},[82,116561,116562],{"class":84,"line":4355},[82,116563,486],{"emptyLinePlaceholder":485},[82,116565,116566],{"class":84,"line":4360},[82,116567,109005],{"class":96},[82,116569,116570],{"class":84,"line":4365},[82,116571,114370],{"class":96},[82,116573,116574],{"class":84,"line":4379},[82,116575,114375],{"class":96},[82,116577,116578],{"class":84,"line":4384},[82,116579,109015],{"class":96},[82,116581,116582],{"class":84,"line":5176},[82,116583,103928],{"class":96},[82,116585,116586],{"class":84,"line":5190},[82,116587,98249],{"class":96},[82,116589,116590],{"class":84,"line":5198},[82,116591,486],{"emptyLinePlaceholder":485},[82,116593,116594],{"class":84,"line":5203},[82,116595,486],{"emptyLinePlaceholder":485},[82,116597,116598,116600,116603,116605,116607,116609,116612],{"class":84,"line":5209},[82,116599,17281],{"class":112},[82,116601,116602],{"class":2384}," ReacherEnv",[82,116604,93],{"class":92},[82,116606,116085],{"class":2384},[82,116608,233],{"class":92},[82,116610,116611],{"class":2384},"Env",[82,116613,33362],{"class":92},[82,116615,116616,116619,116621,116623,116626],{"class":84,"line":5215},[82,116617,116618],{"class":92},"    metadata ",[82,116620,113],{"class":112},[82,116622,7043],{"class":92},[82,116624,116625],{"class":96},"\"render_modes\"",[82,116627,116628],{"class":92},": []}\n",[82,116630,116631],{"class":84,"line":5220},[82,116632,486],{"emptyLinePlaceholder":485},[82,116634,116635,116637,116639,116642,116644],{"class":84,"line":10539},[82,116636,33377],{"class":112},[82,116638,33380],{"class":88},[82,116640,116641],{"class":92},"(self) -> ",[82,116643,98237],{"class":88},[82,116645,669],{"class":92},[82,116647,116648,116650,116652,116654],{"class":84,"line":10563},[82,116649,33393],{"class":88},[82,116651,19845],{"class":92},[82,116653,33405],{"class":88},[82,116655,4576],{"class":92},[82,116657,116658,116660,116663,116665,116667,116669],{"class":84,"line":10568},[82,116659,33421],{"class":88},[82,116661,116662],{"class":92},".model ",[82,116664,113],{"class":112},[82,116666,103963],{"class":92},[82,116668,103865],{"class":88},[82,116670,119],{"class":92},[82,116672,116673,116675,116678,116680,116683,116685],{"class":84,"line":10574},[82,116674,33421],{"class":88},[82,116676,116677],{"class":92},".data ",[82,116679,113],{"class":112},[82,116681,116682],{"class":92}," mujoco.MjData(",[82,116684,33399],{"class":88},[82,116686,116687],{"class":92},".model)\n",[82,116689,116690],{"class":84,"line":10601},[82,116691,486],{"emptyLinePlaceholder":485},[82,116693,116694,116696,116699,116701,116704,116706,116709,116711],{"class":84,"line":10606},[82,116695,33421],{"class":88},[82,116697,116698],{"class":92},".tip_site_id ",[82,116700,113],{"class":112},[82,116702,116703],{"class":92}," mujoco.mj_name2id(",[82,116705,33399],{"class":88},[82,116707,116708],{"class":92},".model, mujoco.mjtObj.mjOBJ_SITE, ",[82,116710,114082],{"class":96},[82,116712,119],{"class":92},[82,116714,116715,116717,116720,116722,116724,116726,116728,116730],{"class":84,"line":10612},[82,116716,33421],{"class":88},[82,116718,116719],{"class":92},".target_site_id ",[82,116721,113],{"class":112},[82,116723,116703],{"class":92},[82,116725,33399],{"class":88},[82,116727,116708],{"class":92},[82,116729,114505],{"class":96},[82,116731,119],{"class":92},[82,116733,116734,116736,116738,116740,116742,116744,116747,116749,116751,116753,116755],{"class":84,"line":10624},[82,116735,5096],{"class":112},[82,116737,41439],{"class":88},[82,116739,116698],{"class":92},[82,116741,3659],{"class":112},[82,116743,6688],{"class":88},[82,116745,116746],{"class":112}," or",[82,116748,41439],{"class":88},[82,116750,116719],{"class":92},[82,116752,3659],{"class":112},[82,116754,6688],{"class":88},[82,116756,669],{"class":92},[82,116758,116759,116762,116764,116766,116769],{"class":84,"line":10636},[82,116760,116761],{"class":112},"            raise",[82,116763,105986],{"class":88},[82,116765,93],{"class":92},[82,116767,116768],{"class":96},"\"required sites not found\"",[82,116770,119],{"class":92},[82,116772,116773],{"class":84,"line":10648},[82,116774,486],{"emptyLinePlaceholder":485},[82,116776,116777,116779,116781,116783],{"class":84,"line":12307},[82,116778,33421],{"class":88},[82,116780,116412],{"class":92},[82,116782,113],{"class":112},[82,116784,56987],{"class":88},[82,116786,116787,116789,116792,116794],{"class":84,"line":12332},[82,116788,33421],{"class":88},[82,116790,116791],{"class":92},".max_steps ",[82,116793,113],{"class":112},[82,116795,116796],{"class":88}," 200\n",[82,116798,116799,116801,116803,116805],{"class":84,"line":12355},[82,116800,33421],{"class":88},[82,116802,116251],{"class":92},[82,116804,113],{"class":112},[82,116806,49897],{"class":88},[82,116808,116809],{"class":84,"line":12379},[82,116810,486],{"emptyLinePlaceholder":485},[82,116812,116813,116815,116817,116819,116821,116823,116825,116827,116829,116831,116833,116835,116837,116839,116841,116843,116845,116847,116849,116851],{"class":84,"line":12384},[82,116814,33421],{"class":88},[82,116816,116299],{"class":92},[82,116818,113],{"class":112},[82,116820,116304],{"class":92},[82,116822,116307],{"class":108},[82,116824,116310],{"class":112},[82,116826,104954],{"class":88},[82,116828,100],{"class":92},[82,116830,116317],{"class":108},[82,116832,113],{"class":112},[82,116834,104954],{"class":88},[82,116836,100],{"class":92},[82,116838,98514],{"class":108},[82,116840,113],{"class":112},[82,116842,93],{"class":92},[82,116844,1425],{"class":88},[82,116846,116334],{"class":92},[82,116848,96051],{"class":108},[82,116850,113],{"class":112},[82,116852,116341],{"class":92},[82,116854,116855,116857,116859,116861,116863,116865,116867,116869,116871,116873,116875,116877,116879,116881,116883,116885,116887,116889],{"class":84,"line":12389},[82,116856,33421],{"class":88},[82,116858,116360],{"class":92},[82,116860,113],{"class":112},[82,116862,116304],{"class":92},[82,116864,116307],{"class":108},[82,116866,116310],{"class":112},[82,116868,116371],{"class":92},[82,116870,116317],{"class":108},[82,116872,113],{"class":112},[82,116874,116371],{"class":92},[82,116876,98514],{"class":108},[82,116878,113],{"class":112},[82,116880,93],{"class":92},[82,116882,440],{"class":88},[82,116884,116334],{"class":92},[82,116886,96051],{"class":108},[82,116888,113],{"class":112},[82,116890,116341],{"class":92},[82,116892,116893],{"class":84,"line":12394},[82,116894,486],{"emptyLinePlaceholder":485},[82,116896,116897,116899,116902],{"class":84,"line":12403},[82,116898,33377],{"class":112},[82,116900,116901],{"class":2384}," _get_obs",[82,116903,116904],{"class":92},"(self) -> np.ndarray:\n",[82,116906,116907,116909,116911,116913,116916,116918],{"class":84,"line":12408},[82,116908,114683],{"class":92},[82,116910,113],{"class":112},[82,116912,41439],{"class":88},[82,116914,116915],{"class":92},".data.site_xpos[",[82,116917,33399],{"class":88},[82,116919,116920],{"class":92},".tip_site_id].copy()\n",[82,116922,116923,116925,116927,116929,116931,116933],{"class":84,"line":12414},[82,116924,114696],{"class":92},[82,116926,113],{"class":112},[82,116928,41439],{"class":88},[82,116930,116915],{"class":92},[82,116932,33399],{"class":88},[82,116934,116935],{"class":92},".target_site_id].copy()\n",[82,116937,116938,116940,116942,116945,116947,116950,116952],{"class":84,"line":12435},[82,116939,112728],{"class":92},[82,116941,113],{"class":112},[82,116943,116944],{"class":92}," np.concatenate([",[82,116946,33399],{"class":88},[82,116948,116949],{"class":92},".data.qpos.copy(), ",[82,116951,33399],{"class":88},[82,116953,116954],{"class":92},".data.qvel.copy(), tip, target])\n",[82,116956,116957,116959],{"class":84,"line":12441},[82,116958,2405],{"class":112},[82,116960,116961],{"class":92}," obs.astype(np.float32)\n",[82,116963,116964],{"class":84,"line":12455},[82,116965,486],{"emptyLinePlaceholder":485},[82,116967,116968,116970,116973,116975,116977],{"class":84,"line":12461},[82,116969,33377],{"class":112},[82,116971,116972],{"class":2384}," _get_reward",[82,116974,116641],{"class":92},[82,116976,2811],{"class":88},[82,116978,669],{"class":92},[82,116980,116981,116983,116985,116987,116989,116991],{"class":84,"line":12488},[82,116982,114683],{"class":92},[82,116984,113],{"class":112},[82,116986,41439],{"class":88},[82,116988,116915],{"class":92},[82,116990,33399],{"class":88},[82,116992,116993],{"class":92},".tip_site_id]\n",[82,116995,116996,116998,117000,117002,117004,117006],{"class":84,"line":12497},[82,116997,114696],{"class":92},[82,116999,113],{"class":112},[82,117001,41439],{"class":88},[82,117003,116915],{"class":92},[82,117005,33399],{"class":88},[82,117007,117008],{"class":92},".target_site_id]\n",[82,117010,117011,117014,117016,117018,117020],{"class":84,"line":12503},[82,117012,117013],{"class":92},"        dist ",[82,117015,113],{"class":112},[82,117017,114147],{"class":92},[82,117019,3288],{"class":112},[82,117021,114152],{"class":92},[82,117023,117024,117027,117029,117031,117033,117036,117038],{"class":84,"line":12511},[82,117025,117026],{"class":92},"        control_cost ",[82,117028,113],{"class":112},[82,117030,114583],{"class":88},[82,117032,9110],{"class":112},[82,117034,117035],{"class":92}," np.sum(np.square(",[82,117037,33399],{"class":88},[82,117039,117040],{"class":92},".data.ctrl))\n",[82,117042,117043,117045,117047,117049,117051,117053,117055],{"class":84,"line":12516},[82,117044,2405],{"class":112},[82,117046,112343],{"class":88},[82,117048,93],{"class":92},[82,117050,3288],{"class":112},[82,117052,114142],{"class":92},[82,117054,3288],{"class":112},[82,117056,114605],{"class":92},[82,117058,117059],{"class":84,"line":19189},[82,117060,486],{"emptyLinePlaceholder":485},[82,117062,117063,117065,117068,117071,117073,117076,117078,117080,117082,117084,117086,117089,117092,117094,117096,117098,117100],{"class":84,"line":19195},[82,117064,33377],{"class":112},[82,117066,117067],{"class":2384}," reset",[82,117069,117070],{"class":92},"(self, ",[82,117072,3212],{"class":112},[82,117074,117075],{"class":92},", seed: ",[82,117077,2776],{"class":88},[82,117079,27694],{"class":112},[82,117081,41498],{"class":88},[82,117083,259],{"class":112},[82,117085,41498],{"class":88},[82,117087,117088],{"class":92},", options: ",[82,117090,117091],{"class":88},"dict",[82,117093,27694],{"class":112},[82,117095,41498],{"class":88},[82,117097,259],{"class":112},[82,117099,41498],{"class":88},[82,117101,33362],{"class":92},[82,117103,117104,117106,117109,117112,117114],{"class":84,"line":19218},[82,117105,33393],{"class":88},[82,117107,117108],{"class":92},"().reset(",[82,117110,117111],{"class":108},"seed",[82,117113,113],{"class":112},[82,117115,117116],{"class":92},"seed)\n",[82,117118,117119,117122,117124,117127,117129],{"class":84,"line":19224},[82,117120,117121],{"class":92},"        mujoco.mj_resetData(",[82,117123,33399],{"class":88},[82,117125,117126],{"class":92},".model, ",[82,117128,33399],{"class":88},[82,117130,117131],{"class":92},".data)\n",[82,117133,117134],{"class":84,"line":19247},[82,117135,486],{"emptyLinePlaceholder":485},[82,117137,117138,117140,117143,117145,117147,117150,117152,117154,117156,117158,117160,117162,117164,117166,117168,117170,117172],{"class":84,"line":19261},[82,117139,33421],{"class":88},[82,117141,117142],{"class":92},".data.qpos[:] ",[82,117144,113],{"class":112},[82,117146,41439],{"class":88},[82,117148,117149],{"class":92},".np_random.uniform(",[82,117151,116307],{"class":108},[82,117153,116310],{"class":112},[82,117155,88764],{"class":88},[82,117157,100],{"class":92},[82,117159,116317],{"class":108},[82,117161,113],{"class":112},[82,117163,88764],{"class":88},[82,117165,100],{"class":92},[82,117167,34068],{"class":108},[82,117169,113],{"class":112},[82,117171,33399],{"class":88},[82,117173,117174],{"class":92},".model.nq)\n",[82,117176,117177,117179,117182,117184],{"class":84,"line":19281},[82,117178,33421],{"class":88},[82,117180,117181],{"class":92},".data.qvel[:] ",[82,117183,113],{"class":112},[82,117185,107311],{"class":88},[82,117187,117188,117191,117193,117195,117197],{"class":84,"line":19287},[82,117189,117190],{"class":92},"        mujoco.mj_forward(",[82,117192,33399],{"class":88},[82,117194,117126],{"class":92},[82,117196,33399],{"class":88},[82,117198,117131],{"class":92},[82,117200,117201],{"class":84,"line":19298},[82,117202,486],{"emptyLinePlaceholder":485},[82,117204,117205,117207,117209,117211],{"class":84,"line":19321},[82,117206,33421],{"class":88},[82,117208,116251],{"class":92},[82,117210,113],{"class":112},[82,117212,49897],{"class":88},[82,117214,117215,117217,117219],{"class":84,"line":19343},[82,117216,2405],{"class":112},[82,117218,41439],{"class":88},[82,117220,117221],{"class":92},"._get_obs(), {}\n",[82,117223,117224],{"class":84,"line":19348},[82,117225,486],{"emptyLinePlaceholder":485},[82,117227,117228,117230,117233],{"class":84,"line":19354},[82,117229,33377],{"class":112},[82,117231,117232],{"class":2384}," step",[82,117234,117235],{"class":92},"(self, action):\n",[82,117237,117238,117240,117242,117245,117247,117249],{"class":84,"line":19368},[82,117239,112768],{"class":92},[82,117241,113],{"class":112},[82,117243,117244],{"class":92}," np.asarray(action, ",[82,117246,96051],{"class":108},[82,117248,113],{"class":112},[82,117250,116341],{"class":92},[82,117252,117253,117255,117257,117259,117261,117264,117266],{"class":84,"line":19381},[82,117254,112768],{"class":92},[82,117256,113],{"class":112},[82,117258,109997],{"class":92},[82,117260,33399],{"class":88},[82,117262,117263],{"class":92},".action_space.low, ",[82,117265,33399],{"class":88},[82,117267,117268],{"class":92},".action_space.high)\n",[82,117270,117271],{"class":84,"line":19386},[82,117272,486],{"emptyLinePlaceholder":485},[82,117274,117275,117277,117280,117282],{"class":84,"line":19400},[82,117276,33421],{"class":88},[82,117278,117279],{"class":92},".data.ctrl[:] ",[82,117281,113],{"class":112},[82,117283,110020],{"class":92},[82,117285,117286,117288,117290,117292,117294,117296,117298],{"class":84,"line":19405},[82,117287,5999],{"class":112},[82,117289,104052],{"class":92},[82,117291,603],{"class":112},[82,117293,35013],{"class":88},[82,117295,93],{"class":92},[82,117297,33399],{"class":88},[82,117299,117300],{"class":92},".frame_skip):\n",[82,117302,117303,117306,117308,117310,117312],{"class":84,"line":19411},[82,117304,117305],{"class":92},"            mujoco.mj_step(",[82,117307,33399],{"class":88},[82,117309,117126],{"class":92},[82,117311,33399],{"class":88},[82,117313,117131],{"class":92},[82,117315,117316],{"class":84,"line":19416},[82,117317,486],{"emptyLinePlaceholder":485},[82,117319,117320,117322,117324,117326],{"class":84,"line":19430},[82,117321,33421],{"class":88},[82,117323,116251],{"class":92},[82,117325,12068],{"class":112},[82,117327,2252],{"class":88},[82,117329,117330],{"class":84,"line":19435},[82,117331,486],{"emptyLinePlaceholder":485},[82,117333,117334,117336,117338,117340],{"class":84,"line":19440},[82,117335,112728],{"class":92},[82,117337,113],{"class":112},[82,117339,41439],{"class":88},[82,117341,117342],{"class":92},"._get_obs()\n",[82,117344,117345,117347,117349,117351],{"class":84,"line":19454},[82,117346,112833],{"class":92},[82,117348,113],{"class":112},[82,117350,41439],{"class":88},[82,117352,117353],{"class":92},"._get_reward()\n",[82,117355,117356],{"class":84,"line":19466},[82,117357,486],{"emptyLinePlaceholder":485},[82,117359,117360,117362,117364,117366,117368,117370],{"class":84,"line":19471},[82,117361,114683],{"class":92},[82,117363,113],{"class":112},[82,117365,41439],{"class":88},[82,117367,116915],{"class":92},[82,117369,33399],{"class":88},[82,117371,116993],{"class":92},[82,117373,117374,117376,117378,117380,117382,117384],{"class":84,"line":19484},[82,117375,114696],{"class":92},[82,117377,113],{"class":112},[82,117379,41439],{"class":88},[82,117381,116915],{"class":92},[82,117383,33399],{"class":88},[82,117385,117008],{"class":92},[82,117387,117388,117390,117392,117394,117397,117399],{"class":84,"line":19489},[82,117389,117013],{"class":92},[82,117391,113],{"class":112},[82,117393,112343],{"class":88},[82,117395,117396],{"class":92},"(np.linalg.norm(tip ",[82,117398,3288],{"class":112},[82,117400,117401],{"class":92}," target))\n",[82,117403,117404],{"class":84,"line":19494},[82,117405,486],{"emptyLinePlaceholder":485},[82,117407,117408,117411,117413,117415,117417],{"class":84,"line":19499},[82,117409,117410],{"class":92},"        terminated ",[82,117412,113],{"class":112},[82,117414,116234],{"class":92},[82,117416,3659],{"class":112},[82,117418,116239],{"class":88},[82,117420,117421,117424,117426,117428,117430,117432,117434],{"class":84,"line":19512},[82,117422,117423],{"class":92},"        truncated ",[82,117425,113],{"class":112},[82,117427,41439],{"class":88},[82,117429,116251],{"class":92},[82,117431,4313],{"class":112},[82,117433,41439],{"class":88},[82,117435,116258],{"class":92},[82,117437,117438,117441,117443,117445,117448],{"class":84,"line":19517},[82,117439,117440],{"class":92},"        info ",[82,117442,113],{"class":112},[82,117444,7043],{"class":92},[82,117446,117447],{"class":96},"\"distance\"",[82,117449,117450],{"class":92},": dist}\n",[82,117452,117453,117455],{"class":84,"line":35202},[82,117454,2405],{"class":112},[82,117456,117457],{"class":92}," obs, reward, terminated, truncated, info\n",[82,117459,117460],{"class":84,"line":35208},[82,117461,486],{"emptyLinePlaceholder":485},[82,117463,117464],{"class":84,"line":35214},[82,117465,486],{"emptyLinePlaceholder":485},[82,117467,117468,117470,117472,117474,117476],{"class":84,"line":35220},[82,117469,2381],{"class":112},[82,117471,4573],{"class":2384},[82,117473,103949],{"class":92},[82,117475,98237],{"class":88},[82,117477,669],{"class":92},[82,117479,117480,117483,117485],{"class":84,"line":35226},[82,117481,117482],{"class":92},"    env ",[82,117484,113],{"class":112},[82,117486,117487],{"class":92}," ReacherEnv()\n",[82,117489,117490,117493,117495,117498,117500,117502,117504],{"class":84,"line":35237},[82,117491,117492],{"class":92},"    obs, info ",[82,117494,113],{"class":112},[82,117496,117497],{"class":92}," env.reset(",[82,117499,117111],{"class":108},[82,117501,113],{"class":112},[82,117503,2244],{"class":88},[82,117505,119],{"class":92},[82,117507,117508,117510,117512,117515],{"class":84,"line":35243},[82,117509,611],{"class":88},[82,117511,93],{"class":92},[82,117513,117514],{"class":96},"\"initial obs shape:\"",[82,117516,117517],{"class":92},", obs.shape)\n",[82,117519,117520,117522,117524,117527],{"class":84,"line":35263},[82,117521,611],{"class":88},[82,117523,93],{"class":92},[82,117525,117526],{"class":96},"\"initial info:\"",[82,117528,117529],{"class":92},", info)\n",[82,117531,117532],{"class":84,"line":35269},[82,117533,486],{"emptyLinePlaceholder":485},[82,117535,117536,117538,117540],{"class":84,"line":35280},[82,117537,112699],{"class":92},[82,117539,113],{"class":112},[82,117541,107311],{"class":88},[82,117543,117544,117546,117548,117550,117552,117554,117556],{"class":84,"line":35286},[82,117545,1888],{"class":112},[82,117547,34188],{"class":92},[82,117549,603],{"class":112},[82,117551,35013],{"class":88},[82,117553,93],{"class":92},[82,117555,3451],{"class":88},[82,117557,33362],{"class":92},[82,117559,117560,117562,117564],{"class":84,"line":35292},[82,117561,112768],{"class":92},[82,117563,113],{"class":112},[82,117565,117566],{"class":92}," env.action_space.sample()\n",[82,117568,117569,117572,117574],{"class":84,"line":35298},[82,117570,117571],{"class":92},"        obs, reward, terminated, truncated, info ",[82,117573,113],{"class":112},[82,117575,115960],{"class":92},[82,117577,117578,117580,117582],{"class":84,"line":35304},[82,117579,112843],{"class":92},[82,117581,12068],{"class":112},[82,117583,112848],{"class":92},[82,117585,117586,117588,117590,117592,117594,117597,117599,117601,117604,117606,117608,117611,117613,117615,117618,117620,117622,117624],{"class":84,"line":35310},[82,117587,1901],{"class":88},[82,117589,93],{"class":92},[82,117591,112877],{"class":96},[82,117593,112880],{"class":92},[82,117595,117596],{"class":96},"\"reward:\"",[82,117598,100],{"class":92},[82,117600,34588],{"class":88},[82,117602,117603],{"class":92},"(reward, ",[82,117605,2841],{"class":88},[82,117607,112891],{"class":92},[82,117609,117610],{"class":96},"\"distance:\"",[82,117612,100],{"class":92},[82,117614,34588],{"class":88},[82,117616,117617],{"class":92},"(info[",[82,117619,117447],{"class":96},[82,117621,2286],{"class":92},[82,117623,2841],{"class":88},[82,117625,33074],{"class":92},[82,117627,117628,117630,117633,117636],{"class":84,"line":35316},[82,117629,5096],{"class":112},[82,117631,117632],{"class":92}," terminated ",[82,117634,117635],{"class":112},"or",[82,117637,117638],{"class":92}," truncated:\n",[82,117640,117641],{"class":84,"line":35322},[82,117642,117643],{"class":112},"            break\n",[82,117645,117646],{"class":84,"line":35342},[82,117647,486],{"emptyLinePlaceholder":485},[82,117649,117650,117652,117654,117656,117658,117660,117662,117664],{"class":84,"line":35348},[82,117651,611],{"class":88},[82,117653,93],{"class":92},[82,117655,112922],{"class":96},[82,117657,100],{"class":92},[82,117659,34588],{"class":88},[82,117661,112929],{"class":92},[82,117663,2841],{"class":88},[82,117665,33074],{"class":92},[82,117667,117668],{"class":84,"line":35364},[82,117669,486],{"emptyLinePlaceholder":485},[82,117671,117672],{"class":84,"line":35370},[82,117673,486],{"emptyLinePlaceholder":485},[82,117675,117676,117678,117680,117682,117684],{"class":84,"line":35384},[82,117677,1237],{"class":112},[82,117679,33796],{"class":88},[82,117681,104110],{"class":112},[82,117683,104113],{"class":96},[82,117685,669],{"class":92},[82,117687,117688],{"class":84,"line":35390},[82,117689,104120],{"class":92},[19,117691,106121],{},[73,117693,117695],{"className":26406,"code":117694,"language":26408,"meta":78,"style":78},"touch ch8_gym_env.py\n",[32,117696,117697],{"__ignoreMap":78},[82,117698,117699,117701],{"class":84,"line":85},[82,117700,103834],{"class":2384},[82,117702,117703],{"class":96}," ch8_gym_env.py\n",[19,117705,112990],{},[73,117707,117709],{"className":26406,"code":117708,"language":26408,"meta":78,"style":78},"python ch8_gym_env.py\n",[32,117710,117711],{"__ignoreMap":78},[82,117712,117713,117715],{"class":84,"line":85},[82,117714,77],{"class":2384},[82,117716,117703],{"class":96},[65,117718,104123],{"id":104123},[19,117720,117721],{},"继承 Gymnasium 环境：",[73,117723,117725],{"className":75,"code":117724,"language":77,"meta":78,"style":78},"class ReacherEnv(gym.Env):\n",[32,117726,117727],{"__ignoreMap":78},[82,117728,117729,117731,117733,117735,117737,117739,117741],{"class":84,"line":85},[82,117730,17281],{"class":112},[82,117732,116602],{"class":2384},[82,117734,93],{"class":92},[82,117736,116085],{"class":2384},[82,117738,233],{"class":92},[82,117740,116611],{"class":2384},[82,117742,33362],{"class":92},[19,117744,117745],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117747,117748],{},"初始化模型：",[73,117750,117752],{"className":75,"code":117751,"language":77,"meta":78,"style":78},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[32,117753,117754,117768],{"__ignoreMap":78},[82,117755,117756,117758,117760,117762,117764,117766],{"class":84,"line":85},[82,117757,33399],{"class":88},[82,117759,116662],{"class":92},[82,117761,113],{"class":112},[82,117763,103963],{"class":92},[82,117765,103865],{"class":88},[82,117767,119],{"class":92},[82,117769,117770,117772,117774,117776,117778,117780],{"class":84,"line":157},[82,117771,33399],{"class":88},[82,117773,116677],{"class":92},[82,117775,113],{"class":112},[82,117777,116682],{"class":92},[82,117779,33399],{"class":88},[82,117781,116687],{"class":92},[19,117783,117784,117785,117787],{},"这和前面章节一样，只是现在放到了类的 ",[32,117786,33405],{}," 里。",[19,117789,117790],{},"缓存 site ID：",[73,117792,117794],{"className":75,"code":117793,"language":77,"meta":78,"style":78},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[32,117795,117796,117810],{"__ignoreMap":78},[82,117797,117798,117800,117802,117804,117806,117808],{"class":84,"line":85},[82,117799,33399],{"class":88},[82,117801,116698],{"class":92},[82,117803,113],{"class":112},[82,117805,116703],{"class":92},[82,117807,92105],{"class":88},[82,117809,119],{"class":92},[82,117811,117812,117814,117816,117818,117820,117822],{"class":84,"line":157},[82,117813,33399],{"class":88},[82,117815,116719],{"class":92},[82,117817,113],{"class":112},[82,117819,116703],{"class":92},[82,117821,92105],{"class":88},[82,117823,119],{"class":92},[19,117825,117826],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117828,117829],{},"reset：",[73,117831,117833],{"className":75,"code":117832,"language":77,"meta":78,"style":78},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[32,117834,117835],{"__ignoreMap":78},[82,117836,117837,117839,117841,117843,117845,117847,117849,117851,117853,117855,117857,117859,117861,117863,117865,117867,117869],{"class":84,"line":85},[82,117838,2381],{"class":112},[82,117840,117067],{"class":2384},[82,117842,117070],{"class":92},[82,117844,3212],{"class":112},[82,117846,117075],{"class":92},[82,117848,2776],{"class":88},[82,117850,27694],{"class":112},[82,117852,41498],{"class":88},[82,117854,259],{"class":112},[82,117856,41498],{"class":88},[82,117858,117088],{"class":92},[82,117860,117091],{"class":88},[82,117862,27694],{"class":112},[82,117864,41498],{"class":88},[82,117866,259],{"class":112},[82,117868,41498],{"class":88},[82,117870,33362],{"class":92},[19,117872,117873,117875],{},[32,117874,72612],{}," 做四件事：",[26,117877,117878,117881,117884,117887],{},[29,117879,117880],{},"设置随机种子。",[29,117882,117883],{},"重置 MuJoCo data。",[29,117885,117886],{},"随机初始化关节角。",[29,117888,117889],{},"返回初始观测和 info。",[19,117891,117892],{},"step：",[73,117894,117896],{"className":75,"code":117895,"language":77,"meta":78,"style":78},"def step(self, action):\n",[32,117897,117898],{"__ignoreMap":78},[82,117899,117900,117902,117904],{"class":84,"line":85},[82,117901,2381],{"class":112},[82,117903,117232],{"class":2384},[82,117905,117235],{"class":92},[19,117907,117908,117910],{},[32,117909,109684],{}," 做六件事：",[26,117912,117913,117916,117922,117925,117928,117931],{},[29,117914,117915],{},"检查并裁剪 action。",[29,117917,117918,117919,2611],{},"写入 ",[32,117920,117921],{},"self.data.ctrl",[29,117923,117924],{},"连续推进若干个 MuJoCo 物理步。",[29,117926,117927],{},"计算新观测。",[29,117929,117930],{},"计算奖励和结束条件。",[29,117932,117933],{},"返回 Gymnasium 标准五元组。",[65,117935,104259],{"id":104259},[73,117937,117939],{"className":75,"code":117938,"language":77,"meta":78,"style":78},"import gymnasium as gym\n",[32,117940,117941],{"__ignoreMap":78},[82,117942,117943,117945,117947,117949],{"class":84,"line":85},[82,117944,1123],{"class":112},[82,117946,116440],{"class":92},[82,117948,728],{"class":112},[82,117950,116445],{"class":92},[19,117952,117953,117954,117956,117957,117960],{},"导入 Gymnasium，并起别名 ",[32,117955,116085],{},"。后面写 ",[32,117958,117959],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[73,117962,117964],{"className":75,"code":117963,"language":77,"meta":78,"style":78},"from gymnasium import spaces\n",[32,117965,117966],{"__ignoreMap":78},[82,117967,117968,117970,117972,117974],{"class":84,"line":85},[82,117969,1117],{"class":112},[82,117971,116440],{"class":92},[82,117973,1123],{"class":112},[82,117975,116472],{"class":92},[19,117977,117978,117979,117982],{},"导入空间定义工具。",[32,117980,117981],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[73,117984,117985],{"className":75,"code":117724,"language":77,"meta":78,"style":78},[32,117986,117987],{"__ignoreMap":78},[82,117988,117989,117991,117993,117995,117997,117999,118001],{"class":84,"line":85},[82,117990,17281],{"class":112},[82,117992,116602],{"class":2384},[82,117994,93],{"class":92},[82,117996,116085],{"class":2384},[82,117998,233],{"class":92},[82,118000,116611],{"class":2384},[82,118002,33362],{"class":92},[19,118004,118005,118006,118009,118010,118012,118013,103569,118015,118017],{},"定义一个类，名字叫 ",[32,118007,118008],{},"ReacherEnv","。括号里的 ",[32,118011,117959],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[32,118014,72612],{},[32,118016,109684],{}," 这两个核心方法。",[73,118019,118021],{"className":75,"code":118020,"language":77,"meta":78,"style":78},"metadata = {\"render_modes\": []}\n",[32,118022,118023],{"__ignoreMap":78},[82,118024,118025,118028,118030,118032,118034],{"class":84,"line":85},[82,118026,118027],{"class":92},"metadata ",[82,118029,113],{"class":112},[82,118031,7043],{"class":92},[82,118033,116625],{"class":96},[82,118035,116628],{"class":92},[19,118037,118038],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[73,118040,118042],{"className":75,"code":118041,"language":77,"meta":78,"style":78},"def __init__(self) -> None:\n",[32,118043,118044],{"__ignoreMap":78},[82,118045,118046,118048,118050,118052,118054],{"class":84,"line":85},[82,118047,2381],{"class":112},[82,118049,33380],{"class":88},[82,118051,116641],{"class":92},[82,118053,98237],{"class":88},[82,118055,669],{"class":92},[19,118057,118058,118060,118061,2611],{},[32,118059,33405],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[32,118062,118063],{},"env = ReacherEnv()",[73,118065,118067],{"className":75,"code":118066,"language":77,"meta":78,"style":78},"super().__init__()\n",[32,118068,118069],{"__ignoreMap":78},[82,118070,118071,118074,118076,118078],{"class":84,"line":85},[82,118072,118073],{"class":88},"super",[82,118075,19845],{"class":92},[82,118077,33405],{"class":88},[82,118079,4576],{"class":92},[19,118081,118082,118083,118085],{},"调用父类 ",[32,118084,117959],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[73,118087,118088],{"className":75,"code":117751,"language":77,"meta":78,"style":78},[32,118089,118090,118104],{"__ignoreMap":78},[82,118091,118092,118094,118096,118098,118100,118102],{"class":84,"line":85},[82,118093,33399],{"class":88},[82,118095,116662],{"class":92},[82,118097,113],{"class":112},[82,118099,103963],{"class":92},[82,118101,103865],{"class":88},[82,118103,119],{"class":92},[82,118105,118106,118108,118110,118112,118114,118116],{"class":84,"line":157},[82,118107,33399],{"class":88},[82,118109,116677],{"class":92},[82,118111,113],{"class":112},[82,118113,116682],{"class":92},[82,118115,33399],{"class":88},[82,118117,116687],{"class":92},[19,118119,118120,118121,118123,118124,103569,118127,118130],{},"把 MuJoCo 模型和状态保存到 ",[32,118122,33399],{}," 上。",[32,118125,118126],{},"self.model",[32,118128,118129],{},"self.data"," 表示这个环境对象自己的模型和状态。",[73,118132,118133],{"className":75,"code":117793,"language":77,"meta":78,"style":78},[32,118134,118135,118149],{"__ignoreMap":78},[82,118136,118137,118139,118141,118143,118145,118147],{"class":84,"line":85},[82,118138,33399],{"class":88},[82,118140,116698],{"class":92},[82,118142,113],{"class":112},[82,118144,116703],{"class":92},[82,118146,92105],{"class":88},[82,118148,119],{"class":92},[82,118150,118151,118153,118155,118157,118159,118161],{"class":84,"line":157},[82,118152,33399],{"class":88},[82,118154,116719],{"class":92},[82,118156,113],{"class":112},[82,118158,116703],{"class":92},[82,118160,92105],{"class":88},[82,118162,119],{"class":92},[19,118164,118165,118166,103569,118169,118172],{},"提前查好 tip 和 target 的 site ID。这样 ",[32,118167,118168],{},"_get_obs",[32,118170,118171],{},"_get_reward"," 里就不用每次按名字查找。",[73,118174,118176],{"className":75,"code":118175,"language":77,"meta":78,"style":78},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[32,118177,118178,118188,118198],{"__ignoreMap":78},[82,118179,118180,118182,118184,118186],{"class":84,"line":85},[82,118181,33399],{"class":88},[82,118183,116412],{"class":92},[82,118185,113],{"class":112},[82,118187,56987],{"class":88},[82,118189,118190,118192,118194,118196],{"class":84,"line":157},[82,118191,33399],{"class":88},[82,118193,116791],{"class":92},[82,118195,113],{"class":112},[82,118197,116796],{"class":88},[82,118199,118200,118202,118204,118206],{"class":84,"line":404},[82,118201,33399],{"class":88},[82,118203,116251],{"class":92},[82,118205,113],{"class":112},[82,118207,49897],{"class":88},[19,118209,118210,118213,118214,118217,118218,118221],{},[32,118211,118212],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[32,118215,118216],{},"max_steps"," 是一个 episode 最多运行多少步。",[32,118219,118220],{},"steps"," 记录当前 episode 已经走了多少步。",[73,118223,118224],{"className":75,"code":116290,"language":77,"meta":78,"style":78},[32,118225,118226],{"__ignoreMap":78},[82,118227,118228,118230,118232,118234,118236,118238,118240,118242,118244,118246,118248,118250,118252,118254,118256,118258,118260,118262,118264,118266],{"class":84,"line":85},[82,118229,33399],{"class":88},[82,118231,116299],{"class":92},[82,118233,113],{"class":112},[82,118235,116304],{"class":92},[82,118237,116307],{"class":108},[82,118239,116310],{"class":112},[82,118241,104954],{"class":88},[82,118243,100],{"class":92},[82,118245,116317],{"class":108},[82,118247,113],{"class":112},[82,118249,104954],{"class":88},[82,118251,100],{"class":92},[82,118253,98514],{"class":108},[82,118255,113],{"class":112},[82,118257,93],{"class":92},[82,118259,1425],{"class":88},[82,118261,116334],{"class":92},[82,118263,96051],{"class":108},[82,118265,113],{"class":112},[82,118267,116341],{"class":92},[19,118269,118270,118271,118274,118275,103569,118278,118281],{},"定义动作空间。",[32,118272,118273],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[32,118276,118277],{},"low=-1.0",[32,118279,118280],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[73,118283,118284],{"className":75,"code":116351,"language":77,"meta":78,"style":78},[32,118285,118286],{"__ignoreMap":78},[82,118287,118288,118290,118292,118294,118296,118298,118300,118302,118304,118306,118308,118310,118312,118314,118316,118318,118320,118322],{"class":84,"line":85},[82,118289,33399],{"class":88},[82,118291,116360],{"class":92},[82,118293,113],{"class":112},[82,118295,116304],{"class":92},[82,118297,116307],{"class":108},[82,118299,116310],{"class":112},[82,118301,116371],{"class":92},[82,118303,116317],{"class":108},[82,118305,113],{"class":112},[82,118307,116371],{"class":92},[82,118309,98514],{"class":108},[82,118311,113],{"class":112},[82,118313,93],{"class":92},[82,118315,440],{"class":88},[82,118317,116334],{"class":92},[82,118319,96051],{"class":108},[82,118321,113],{"class":112},[82,118323,116341],{"class":92},[19,118325,118326,118327,118330,118331,118334],{},"定义观测空间。",[32,118328,118329],{},"shape=(10,)"," 表示观测是 10 个数。",[32,118332,118333],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[73,118336,118338],{"className":75,"code":118337,"language":77,"meta":78,"style":78},"def _get_obs(self) -> np.ndarray:\n",[32,118339,118340],{"__ignoreMap":78},[82,118341,118342,118344,118346],{"class":84,"line":85},[82,118343,2381],{"class":112},[82,118345,116901],{"class":2384},[82,118347,116904],{"class":92},[19,118349,118350,118351,118353],{},"定义内部函数，用来生成观测。函数名前面的 ",[32,118352,3740],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[73,118355,118357],{"className":75,"code":118356,"language":77,"meta":78,"style":78},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[32,118358,118359,118373],{"__ignoreMap":78},[82,118360,118361,118363,118365,118367,118369,118371],{"class":84,"line":85},[82,118362,114114],{"class":92},[82,118364,113],{"class":112},[82,118366,41439],{"class":88},[82,118368,116915],{"class":92},[82,118370,33399],{"class":88},[82,118372,116920],{"class":92},[82,118374,118375,118377,118379,118381,118383,118385],{"class":84,"line":157},[82,118376,114124],{"class":92},[82,118378,113],{"class":112},[82,118380,41439],{"class":88},[82,118382,116915],{"class":92},[82,118384,33399],{"class":88},[82,118386,116935],{"class":92},[19,118388,118389],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[73,118391,118393],{"className":75,"code":118392,"language":77,"meta":78,"style":78},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[32,118394,118395,118411],{"__ignoreMap":78},[82,118396,118397,118399,118401,118403,118405,118407,118409],{"class":84,"line":85},[82,118398,113400],{"class":92},[82,118400,113],{"class":112},[82,118402,116944],{"class":92},[82,118404,33399],{"class":88},[82,118406,116949],{"class":92},[82,118408,33399],{"class":88},[82,118410,116954],{"class":92},[82,118412,118413,118415],{"class":84,"line":157},[82,118414,19631],{"class":112},[82,118416,116961],{"class":92},[19,118418,118419,118420,118423,118424,118426],{},"拼接观测，并转换成 ",[32,118421,118422],{},"float32","。很多强化学习库默认使用 ",[32,118425,118422],{},"，所以这里主动转换。",[73,118428,118429],{"className":75,"code":117832,"language":77,"meta":78,"style":78},[32,118430,118431],{"__ignoreMap":78},[82,118432,118433,118435,118437,118439,118441,118443,118445,118447,118449,118451,118453,118455,118457,118459,118461,118463,118465],{"class":84,"line":85},[82,118434,2381],{"class":112},[82,118436,117067],{"class":2384},[82,118438,117070],{"class":92},[82,118440,3212],{"class":112},[82,118442,117075],{"class":92},[82,118444,2776],{"class":88},[82,118446,27694],{"class":112},[82,118448,41498],{"class":88},[82,118450,259],{"class":112},[82,118452,41498],{"class":88},[82,118454,117088],{"class":92},[82,118456,117091],{"class":88},[82,118458,27694],{"class":112},[82,118460,41498],{"class":88},[82,118462,259],{"class":112},[82,118464,41498],{"class":88},[82,118466,33362],{"class":92},[19,118468,118469,118470,118472,118473,118476],{},"定义 reset。",[32,118471,117111],{}," 用来控制随机数，保证实验可以复现。",[32,118474,118475],{},"options"," 用来接收额外配置，本章暂时不用。",[73,118478,118480],{"className":75,"code":118479,"language":77,"meta":78,"style":78},"super().reset(seed=seed)\n",[32,118481,118482],{"__ignoreMap":78},[82,118483,118484,118486,118488,118490,118492],{"class":84,"line":85},[82,118485,118073],{"class":88},[82,118487,117108],{"class":92},[82,118489,117111],{"class":108},[82,118491,113],{"class":112},[82,118493,117116],{"class":92},[19,118495,118496,118497,118500],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[32,118498,118499],{},"self.np_random"," 生成可复现的随机数。",[73,118502,118504],{"className":75,"code":118503,"language":77,"meta":78,"style":78},"mujoco.mj_resetData(self.model, self.data)\n",[32,118505,118506],{"__ignoreMap":78},[82,118507,118508,118511,118513,118515,118517],{"class":84,"line":85},[82,118509,118510],{"class":92},"mujoco.mj_resetData(",[82,118512,33399],{"class":88},[82,118514,117126],{"class":92},[82,118516,33399],{"class":88},[82,118518,117131],{"class":92},[19,118520,118521],{},"把 MuJoCo 状态重置到默认状态。",[73,118523,118525],{"className":75,"code":118524,"language":77,"meta":78,"style":78},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[32,118526,118527],{"__ignoreMap":78},[82,118528,118529,118531,118533,118535,118537,118539,118541,118543,118545,118547,118549,118551,118553,118555,118557,118559,118561],{"class":84,"line":85},[82,118530,33399],{"class":88},[82,118532,117142],{"class":92},[82,118534,113],{"class":112},[82,118536,41439],{"class":88},[82,118538,117149],{"class":92},[82,118540,116307],{"class":108},[82,118542,116310],{"class":112},[82,118544,88764],{"class":88},[82,118546,100],{"class":92},[82,118548,116317],{"class":108},[82,118550,113],{"class":112},[82,118552,88764],{"class":88},[82,118554,100],{"class":92},[82,118556,34068],{"class":108},[82,118558,113],{"class":112},[82,118560,33399],{"class":88},[82,118562,117174],{"class":92},[19,118564,117886,118565,118568,118569,118572,118573,118575],{},[32,118566,118567],{},"[:]"," 表示修改整个数组。",[32,118570,118571],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[32,118574,104701],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[73,118577,118579],{"className":75,"code":118578,"language":77,"meta":78,"style":78},"self.data.qvel[:] = 0.0\n",[32,118580,118581],{"__ignoreMap":78},[82,118582,118583,118585,118587,118589],{"class":84,"line":85},[82,118584,33399],{"class":88},[82,118586,117181],{"class":92},[82,118588,113],{"class":112},[82,118590,107311],{"class":88},[19,118592,118593],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[73,118595,118597],{"className":75,"code":118596,"language":77,"meta":78,"style":78},"self.steps = 0\nreturn self._get_obs(), {}\n",[32,118598,118599,118609],{"__ignoreMap":78},[82,118600,118601,118603,118605,118607],{"class":84,"line":85},[82,118602,33399],{"class":88},[82,118604,116251],{"class":92},[82,118606,113],{"class":112},[82,118608,49897],{"class":88},[82,118610,118611,118613,118615],{"class":84,"line":157},[82,118612,19631],{"class":112},[82,118614,41439],{"class":88},[82,118616,117221],{"class":92},[19,118618,118619],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[73,118621,118622],{"className":75,"code":117895,"language":77,"meta":78,"style":78},[32,118623,118624],{"__ignoreMap":78},[82,118625,118626,118628,118630],{"class":84,"line":85},[82,118627,2381],{"class":112},[82,118629,117232],{"class":2384},[82,118631,117235],{"class":92},[19,118633,118634],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[73,118636,118638],{"className":75,"code":118637,"language":77,"meta":78,"style":78},"action = np.asarray(action, dtype=np.float32)\n",[32,118639,118640],{"__ignoreMap":78},[82,118641,118642,118644,118646,118648,118650,118652],{"class":84,"line":85},[82,118643,109992],{"class":92},[82,118645,113],{"class":112},[82,118647,117244],{"class":92},[82,118649,96051],{"class":108},[82,118651,113],{"class":112},[82,118653,116341],{"class":92},[19,118655,118656,118657,2611],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[32,118658,118422],{},[73,118660,118662],{"className":75,"code":118661,"language":77,"meta":78,"style":78},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[32,118663,118664],{"__ignoreMap":78},[82,118665,118666,118668,118670,118672,118674,118676,118678],{"class":84,"line":85},[82,118667,109992],{"class":92},[82,118669,113],{"class":112},[82,118671,109997],{"class":92},[82,118673,33399],{"class":88},[82,118675,117263],{"class":92},[82,118677,33399],{"class":88},[82,118679,117268],{"class":92},[19,118681,118682],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[73,118684,118686],{"className":75,"code":118685,"language":77,"meta":78,"style":78},"self.data.ctrl[:] = action\n",[32,118687,118688],{"__ignoreMap":78},[82,118689,118690,118692,118694,118696],{"class":84,"line":85},[82,118691,33399],{"class":88},[82,118693,117279],{"class":92},[82,118695,113],{"class":112},[82,118697,110020],{"class":92},[19,118699,118700],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[73,118702,118704],{"className":75,"code":118703,"language":77,"meta":78,"style":78},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[32,118705,118706,118722],{"__ignoreMap":78},[82,118707,118708,118710,118712,118714,118716,118718,118720],{"class":84,"line":85},[82,118709,597],{"class":112},[82,118711,104052],{"class":92},[82,118713,603],{"class":112},[82,118715,35013],{"class":88},[82,118717,93],{"class":92},[82,118719,33399],{"class":88},[82,118721,117300],{"class":92},[82,118723,118724,118727,118729,118731,118733],{"class":84,"line":157},[82,118725,118726],{"class":92},"    mujoco.mj_step(",[82,118728,33399],{"class":88},[82,118730,117126],{"class":92},[82,118732,33399],{"class":88},[82,118734,117131],{"class":92},[19,118736,118737,118738,118741,118742,118744,118745,2611],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[32,118739,118740],{},"frame_skip=5","，所以外部调用一次 ",[32,118743,116422],{},"，内部实际执行 5 次 ",[32,118746,103766],{},[73,118748,118750],{"className":75,"code":118749,"language":77,"meta":78,"style":78},"self.steps += 1\n",[32,118751,118752],{"__ignoreMap":78},[82,118753,118754,118756,118758,118760],{"class":84,"line":85},[82,118755,33399],{"class":88},[82,118757,116251],{"class":92},[82,118759,12068],{"class":112},[82,118761,2252],{"class":88},[19,118763,118764],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[73,118766,118768],{"className":75,"code":118767,"language":77,"meta":78,"style":78},"obs = self._get_obs()\nreward = self._get_reward()\n",[32,118769,118770,118780],{"__ignoreMap":78},[82,118771,118772,118774,118776,118778],{"class":84,"line":85},[82,118773,113400],{"class":92},[82,118775,113],{"class":112},[82,118777,41439],{"class":88},[82,118779,117342],{"class":92},[82,118781,118782,118784,118786,118788],{"class":84,"line":157},[82,118783,113551],{"class":92},[82,118785,113],{"class":112},[82,118787,41439],{"class":88},[82,118789,117353],{"class":92},[19,118791,118792],{},"计算新的观测和奖励。",[73,118794,118796],{"className":75,"code":118795,"language":77,"meta":78,"style":78},"dist = float(np.linalg.norm(tip - target))\n",[32,118797,118798],{"__ignoreMap":78},[82,118799,118800,118802,118804,118806,118808,118810],{"class":84,"line":85},[82,118801,114142],{"class":92},[82,118803,113],{"class":112},[82,118805,112343],{"class":88},[82,118807,117396],{"class":92},[82,118809,3288],{"class":112},[82,118811,117401],{"class":92},[19,118813,118814],{},"计算末端到目标的距离，并转换成 Python float。",[73,118816,118817],{"className":75,"code":116222,"language":77,"meta":78,"style":78},[32,118818,118819,118831],{"__ignoreMap":78},[82,118820,118821,118823,118825,118827,118829],{"class":84,"line":85},[82,118822,116229],{"class":92},[82,118824,113],{"class":112},[82,118826,116234],{"class":92},[82,118828,3659],{"class":112},[82,118830,116239],{"class":88},[82,118832,118833,118835,118837,118839,118841,118843,118845],{"class":84,"line":157},[82,118834,116244],{"class":92},[82,118836,113],{"class":112},[82,118838,41439],{"class":88},[82,118840,116251],{"class":92},[82,118842,4313],{"class":112},[82,118844,41439],{"class":88},[82,118846,116258],{"class":92},[19,118848,118849],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[73,118851,118853],{"className":75,"code":118852,"language":77,"meta":78,"style":78},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[32,118854,118855,118868],{"__ignoreMap":78},[82,118856,118857,118860,118862,118864,118866],{"class":84,"line":85},[82,118858,118859],{"class":92},"info ",[82,118861,113],{"class":112},[82,118863,7043],{"class":92},[82,118865,117447],{"class":96},[82,118867,117450],{"class":92},[82,118869,118870,118872],{"class":84,"line":157},[82,118871,19631],{"class":112},[82,118873,117457],{"class":92},[19,118875,118876,118879],{},[32,118877,118878],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[73,118881,118883],{"className":75,"code":118882,"language":77,"meta":78,"style":78},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[32,118884,118885,118894],{"__ignoreMap":78},[82,118886,118887,118890,118892],{"class":84,"line":85},[82,118888,118889],{"class":92},"env ",[82,118891,113],{"class":112},[82,118893,117487],{"class":92},[82,118895,118896,118898,118900,118902,118904,118906,118908],{"class":84,"line":157},[82,118897,115945],{"class":92},[82,118899,113],{"class":112},[82,118901,117497],{"class":92},[82,118903,117111],{"class":108},[82,118905,113],{"class":112},[82,118907,2244],{"class":88},[82,118909,119],{"class":92},[19,118911,118912,118913,118916],{},"创建环境并重置。",[32,118914,118915],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[73,118918,118920],{"className":75,"code":118919,"language":77,"meta":78,"style":78},"action = env.action_space.sample()\n",[32,118921,118922],{"__ignoreMap":78},[82,118923,118924,118926,118928],{"class":84,"line":85},[82,118925,109992],{"class":92},[82,118927,113],{"class":112},[82,118929,117566],{"class":92},[19,118931,118932],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118934,104867],{"id":104866},[19,118936,108034],{},[73,118938,118941],{"className":118939,"code":118940,"language":7780,"meta":78},[7778],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[32,118942,118940],{"__ignoreMap":78},[19,118944,118945],{},"这个环境已经具备强化学习环境的基本结构。",[19,118947,118948],{},"主函数里使用随机动作：",[73,118950,118951],{"className":75,"code":118919,"language":77,"meta":78,"style":78},[32,118952,118953],{"__ignoreMap":78},[82,118954,118955,118957,118959],{"class":84,"line":85},[82,118956,109992],{"class":92},[82,118958,113],{"class":112},[82,118960,117566],{"class":92},[19,118962,118963],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118965,104899],{"id":104898},[26,118967,118968,118971,118977,118986,118995,119004,119010],{},[29,118969,118970],{},"运行程序。",[29,118972,118973,118974,2611],{},"确认 ",[32,118975,118976],{},"obs.shape == (10,)",[29,118978,113727,118979,118982,118983,2611],{},[32,118980,118981],{},"env.action_space","，应类似 ",[32,118984,118985],{},"Box(-1.0, 1.0, (2,), float32)",[29,118987,108135,118988,118991,118992,2611],{},[32,118989,118990],{},"self.max_steps = 10","，确认环境会更快 ",[32,118993,118994],{},"truncated=True",[29,118996,104962,118997,104965,119000,119003],{},[32,118998,118999],{},"terminated = dist \u003C 0.05",[32,119001,119002],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,119005,104962,119006,119009],{},[32,119007,119008],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,119011,119012,119013,119015,119016,119019],{},"在 ",[32,119014,118878],{}," 里加入 ",[32,119017,119018],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,119021,105004],{"id":105003},[65,119023,119025],{"id":119024},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,119027,119028,119029,119031],{},"Gymnasium 的 ",[32,119030,109684],{}," 返回 5 个值:",[73,119033,119035],{"className":75,"code":119034,"language":77,"meta":78,"style":78},"obs, reward, terminated, truncated, info\n",[32,119036,119037],{"__ignoreMap":78},[82,119038,119039],{"class":84,"line":85},[82,119040,119034],{"class":92},[19,119042,119043],{},"不是旧 Gym 的 4 个值。",[65,119045,119047,119050],{"id":119046},"datactrl-action-维度错误",[32,119048,119049],{},"data.ctrl[:] = action"," 维度错误",[19,119052,105074],{},[73,119054,119056],{"className":75,"code":119055,"language":77,"meta":78,"style":78},"print(self.model.nu)\nprint(action.shape)\n",[32,119057,119058,119069],{"__ignoreMap":78},[82,119059,119060,119062,119064,119066],{"class":84,"line":85},[82,119061,407],{"class":88},[82,119063,93],{"class":92},[82,119065,33399],{"class":88},[82,119067,119068],{"class":92},".model.nu)\n",[82,119070,119071,119073],{"class":84,"line":157},[82,119072,407],{"class":88},[82,119074,119075],{"class":92},"(action.shape)\n",[19,119077,119078],{},"两者必须匹配。",[65,119080,119082],{"id":119081},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,119084,105013],{},[73,119086,119088],{"className":75,"code":119087,"language":77,"meta":78,"style":78},"mujoco.mj_forward(self.model, self.data)\n",[32,119089,119090],{"__ignoreMap":78},[82,119091,119092,119095,119097,119099,119101],{"class":84,"line":85},[82,119093,119094],{"class":92},"mujoco.mj_forward(",[82,119096,33399],{"class":88},[82,119098,117126],{"class":92},[82,119100,33399],{"class":88},[82,119102,117131],{"class":92},[65,119104,119106,119108],{"id":119105},"observation_space-维度和-obs-不一致",[32,119107,116145],{}," 维度和 obs 不一致",[19,119110,105126],{},[73,119112,119114],{"className":75,"code":119113,"language":77,"meta":78,"style":78},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[32,119115,119116,119126,119133],{"__ignoreMap":78},[82,119117,119118,119120,119122,119124],{"class":84,"line":85},[82,119119,113400],{"class":92},[82,119121,113],{"class":112},[82,119123,41439],{"class":88},[82,119125,117342],{"class":92},[82,119127,119128,119130],{"class":84,"line":157},[82,119129,407],{"class":88},[82,119131,119132],{"class":92},"(obs.shape)\n",[82,119134,119135,119137,119139,119141],{"class":84,"line":404},[82,119136,407],{"class":88},[82,119138,93],{"class":92},[82,119140,33399],{"class":88},[82,119142,119143],{"class":92},".observation_space.shape)\n",[19,119145,119146],{},"两者必须一致。本章观测是：",[73,119148,119151],{"className":119149,"code":119150,"language":7780,"meta":78},[7778],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[32,119152,119150],{"__ignoreMap":78},[65,119154,119156],{"id":119155},"action-超过范围","action 超过范围",[19,119158,119159],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[73,119161,119162],{"className":75,"code":118661,"language":77,"meta":78,"style":78},[32,119163,119164],{"__ignoreMap":78},[82,119165,119166,119168,119170,119172,119174,119176,119178],{"class":84,"line":85},[82,119167,109992],{"class":92},[82,119169,113],{"class":112},[82,119171,109997],{"class":92},[82,119173,33399],{"class":88},[82,119175,117263],{"class":92},[82,119177,33399],{"class":88},[82,119179,117268],{"class":92},[19,119181,119182,119183,2611],{},"这能避免无效动作直接写入 ",[32,119184,103627],{},[65,119186,119188],{"id":119187},"忘记返回-info","忘记返回 info",[19,119190,119028,119191,103569,119193,119195],{},[32,119192,72612],{},[32,119194,109684],{}," 都会返回 info：",[73,119197,119198],{"className":75,"code":115938,"language":77,"meta":78,"style":78},[32,119199,119200,119208],{"__ignoreMap":78},[82,119201,119202,119204,119206],{"class":84,"line":85},[82,119203,115945],{"class":92},[82,119205,113],{"class":112},[82,119207,115950],{"class":92},[82,119209,119210,119212,119214],{"class":84,"line":157},[82,119211,115955],{"class":92},[82,119213,113],{"class":112},[82,119215,115960],{"class":92},[19,119217,119218,119219,2611],{},"即使暂时没有额外信息，也返回 ",[32,119220,35028],{},[14,119222,119224],{"id":119223},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119226,119227],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,119229,119230,119233,119236,119239,119242,119245],{},[29,119231,119232],{},"更稳定的 reward。",[29,119234,119235],{},"合理的 episode 长度。",[29,119237,119238],{},"可重复的随机目标采样。",[29,119240,119241],{},"render 接口。",[29,119243,119244],{},"环境注册代码。",[29,119246,119247],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119249,119250],{},"如果只是自己写训练循环，最小形式是：",[73,119252,119254],{"className":75,"code":119253,"language":77,"meta":78,"style":78},"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",[32,119255,119256,119264,119280,119284,119300,119309,119318,119328],{"__ignoreMap":78},[82,119257,119258,119260,119262],{"class":84,"line":85},[82,119259,118889],{"class":92},[82,119261,113],{"class":112},[82,119263,117487],{"class":92},[82,119265,119266,119268,119270,119272,119274,119276,119278],{"class":84,"line":157},[82,119267,115945],{"class":92},[82,119269,113],{"class":112},[82,119271,117497],{"class":92},[82,119273,117111],{"class":108},[82,119275,113],{"class":112},[82,119277,2244],{"class":88},[82,119279,119],{"class":92},[82,119281,119282],{"class":84,"line":404},[82,119283,486],{"emptyLinePlaceholder":485},[82,119285,119286,119288,119290,119292,119294,119296,119298],{"class":84,"line":413},[82,119287,597],{"class":112},[82,119289,104052],{"class":92},[82,119291,603],{"class":112},[82,119293,35013],{"class":88},[82,119295,93],{"class":92},[82,119297,9002],{"class":88},[82,119299,33362],{"class":92},[82,119301,119302,119305,119307],{"class":84,"line":508},[82,119303,119304],{"class":92},"    action ",[82,119306,113],{"class":112},[82,119308,117566],{"class":92},[82,119310,119311,119314,119316],{"class":84,"line":513},[82,119312,119313],{"class":92},"    obs, reward, terminated, truncated, info ",[82,119315,113],{"class":112},[82,119317,115960],{"class":92},[82,119319,119320,119322,119324,119326],{"class":84,"line":1388},[82,119321,2219],{"class":112},[82,119323,117632],{"class":92},[82,119325,117635],{"class":112},[82,119327,117638],{"class":92},[82,119329,119330,119333,119335],{"class":84,"line":1394},[82,119331,119332],{"class":92},"        obs, info ",[82,119334,113],{"class":112},[82,119336,115950],{"class":92},[14,119338,119340],{"id":119339},"_9本章小结","9.本章小结",[19,119342,119343],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[73,119345,119348],{"className":119346,"code":119347,"language":7780,"meta":78},[7778],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[32,119349,119347],{"__ignoreMap":78},[19,119351,119352],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2671,119354,119355],{},"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":78,"searchDepth":157,"depth":157,"links":119357},[119358,119359,119360,119367,119371,119372,119373,119383,119384],{"id":103197,"depth":157,"text":103198},{"id":103320,"depth":157,"text":103321},{"id":103595,"depth":157,"text":103596,"children":119361},[119362,119364,119366],{"id":116169,"depth":404,"text":119363},"terminated 和 truncated 的区别",{"id":116272,"depth":404,"text":119365},"observation_space 和 action_space",{"id":116399,"depth":404,"text":116400},{"id":103803,"depth":157,"text":103804,"children":119368},[119369,119370],{"id":104123,"depth":404,"text":104123},{"id":104259,"depth":404,"text":104259},{"id":104866,"depth":157,"text":104867},{"id":104898,"depth":157,"text":104899},{"id":105003,"depth":157,"text":105004,"children":119374},[119375,119376,119378,119379,119381,119382],{"id":119024,"depth":404,"text":119025},{"id":119046,"depth":404,"text":119377},"data.ctrl[:] = action 维度错误",{"id":119081,"depth":404,"text":119082},{"id":119105,"depth":404,"text":119380},"observation_space 维度和 obs 不一致",{"id":119155,"depth":404,"text":119156},{"id":119187,"depth":404,"text":119188},{"id":119223,"depth":157,"text":119224},{"id":119339,"depth":157,"text":119340},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115922,"description":78},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119391,"title":119392,"body":119393,"description":119816,"extension":2700,"meta":119817,"navigation":485,"path":119818,"seo":119819,"stem":119820,"__hash__":119821},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119394,"toc":119806},[119395,119399,119402,119405,119425,119431,119437,119447,119450,119453,119473,119476,119480,119483,119489,119492,119506,119509,119512,119586,119589,119595,119598,119621,119624,119674,119677,119683,119686,119689,119692,119711,119714,119720,119723,119726,119729,119749,119752,119755,119758,119803],[10,119396,119398],{"id":119397},"mujoco-学习","MuJoCo 学习",[19,119400,119401],{},"初版",[19,119403,119404],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,119406,119407,119410,119413,119422],{},[29,119408,119409],{},"MuJoCo 模型文件在描述什么。",[29,119411,119412],{},"Python 代码怎样读取和推进仿真。",[29,119414,119415,2973,119417,2973,119419,119421],{},[32,119416,106581],{},[32,119418,106910],{},[32,119420,106913],{}," 这些数组为什么重要。",[29,119423,119424],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119426,119427,119428,119430],{},"默认环境为 Fedora 44、Python >= 3.10、",[32,119429,103578],{}," 官方 Python bindings。",[19,119432,119433,119434,119436],{},"注意：本文禁止使用 ",[32,119435,103563],{},"。所有示例均使用：",[73,119438,119439],{"className":75,"code":104129,"language":77,"meta":78,"style":78},[32,119440,119441],{"__ignoreMap":78},[82,119442,119443,119445],{"class":84,"line":85},[82,119444,1123],{"class":112},[82,119446,103852],{"class":92},[14,119448,119449],{"id":119449},"适合谁阅读",[19,119451,119452],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,119454,119455,119458,119461,119464],{},[29,119456,119457],{},"没学过 MuJoCo，只会一点 Python。",[29,119459,119460],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,119462,119463],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,119465,119466,119467,119469,119470,119472],{},"以前接触过 ",[32,119468,103563],{},"，现在想迁移到官方 ",[32,119471,103572],{}," Python bindings。",[19,119474,119475],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119477,119479],{"id":119478},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119481,119482],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[73,119484,119487],{"className":119485,"code":119486,"language":7780,"meta":78},[7778],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[32,119488,119486],{"__ignoreMap":78},[19,119490,119491],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,119493,119494,119497,119500,119503],{},[29,119495,119496],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,119498,119499],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,119501,119502],{},"生成强化学习环境。",[29,119504,119505],{},"采集状态、动作、图像、奖励等训练数据。",[14,119507,119508],{"id":119508},"学习前的心智模型",[19,119510,119511],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[278,119513,119514,119526],{},[281,119515,119516],{},[284,119517,119518,119521,119524],{},[287,119519,119520],{"align":26320},"部分",[287,119522,119523],{"align":26320},"负责什么",[287,119525,23771],{"align":26320},[294,119527,119528,119539,119551,119563,119575],{},[284,119529,119530,119533,119536],{},[299,119531,119532],{"align":26320},"MJCF XML",[299,119534,119535],{"align":26320},"定义世界和机器人结构",[299,119537,119538],{"align":26320},"地面、盒子、关节、电机、摄像头",[284,119540,119541,119545,119548],{},[299,119542,119543],{"align":26320},[32,119544,103260],{},[299,119546,119547],{"align":26320},"编译后的静态模型",[299,119549,119550],{"align":26320},"有几个关节、有几个电机、时间步长是多少",[284,119552,119553,119557,119560],{},[299,119554,119555],{"align":26320},[32,119556,103270],{},[299,119558,119559],{"align":26320},"运行中的动态状态",[299,119561,119562],{"align":26320},"当前时间、位置、速度、电机输入",[284,119564,119565,119569,119572],{},[299,119566,119567],{"align":26320},[32,119568,103766],{},[299,119570,119571],{"align":26320},"推进一步物理仿真",[299,119573,119574],{"align":26320},"根据重力、力、碰撞更新状态",[284,119576,119577,119580,119583],{},[299,119578,119579],{"align":26320},"Viewer \u002F Renderer",[299,119581,119582],{"align":26320},"把仿真显示出来",[299,119584,119585],{"align":26320},"打开窗口或保存图片",[19,119587,119588],{},"一句话总结：",[73,119590,119593],{"className":119591,"code":119592,"language":7780,"meta":78},[7778],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[32,119594,119592],{"__ignoreMap":78},[19,119596,119597],{},"参考来源：",[3755,119599,119600,119607,119614],{},[29,119601,119602,119603],{},"MuJoCo Python 官方文档：",[323,119604,119605],{"href":119605,"rel":119606},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26449],[29,119608,119609,119610],{},"MuJoCo XML Reference：",[323,119611,119612],{"href":119612,"rel":119613},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26449],[29,119615,119616,119617],{},"MuJoCo Overview：",[323,119618,119619],{"href":119619,"rel":119620},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26449],[14,119622,119623],{"id":119623},"章节目录",[26,119625,119626,119632,119638,119644,119650,119656,119662,119668],{},[29,119627,119628],{},[323,119629,119631],{"href":119630},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,119633,119634],{},[323,119635,119637],{"href":119636},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,119639,119640],{},[323,119641,119643],{"href":119642},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,119645,119646],{},[323,119647,119649],{"href":119648},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,119651,119652],{},[323,119653,119655],{"href":119654},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,119657,119658],{},[323,119659,119661],{"href":119660},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,119663,119664],{},[323,119665,119667],{"href":119666},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,119669,119670],{},[323,119671,119673],{"href":119672},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119675,119676],{"id":119676},"推荐学习路线",[73,119678,119681],{"className":119679,"code":119680,"language":7780,"meta":78},[7778],"环境安装\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",[32,119682,119680],{"__ignoreMap":78},[19,119684,119685],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119687,119688],{"id":119688},"建议的目录结构",[19,119690,119691],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[73,119693,119695],{"className":26406,"code":119694,"language":26408,"meta":78,"style":78},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[32,119696,119697,119705],{"__ignoreMap":78},[82,119698,119699,119701,119703],{"class":84,"line":85},[82,119700,103817],{"class":2384},[82,119702,31797],{"class":88},[82,119704,103822],{"class":96},[82,119706,119707,119709],{"class":84,"line":157},[82,119708,103827],{"class":88},[82,119710,103822],{"class":96},[19,119712,119713],{},"每一章的代码都单独保存：",[73,119715,119718],{"className":119716,"code":119717,"language":7780,"meta":78},[7778],"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",[32,119719,119717],{"__ignoreMap":78},[19,119721,119722],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119724,119725],{"id":119725},"学习方法",[19,119727,119728],{},"每章建议按这个顺序操作：",[26,119730,119731,119734,119737,119740,119743,119746],{},[29,119732,119733],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,119735,119736],{},"复制最小可运行代码，保存成指定文件。",[29,119738,119739],{},"运行代码，确认没有报错。",[29,119741,119742],{},"对照“运行结果说明”理解输出。",[29,119744,119745],{},"做“验证步骤”，主动改一两个参数。",[29,119747,119748],{},"遇到报错先看“常见错误与解决方案”。",[19,119750,119751],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119753,119754],{"id":119754},"全局排错顺序",[19,119756,119757],{},"遇到问题时，按下面顺序查：",[26,119759,119760,119766,119772,119777,119780,119783,119790,119800],{},[29,119761,119762,119763],{},"Python 环境是否激活：",[32,119764,119765],{},"which python",[29,119767,119768,119769],{},"MuJoCo 是否能导入：",[32,119770,119771],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,119773,119774,119775],{},"是否误装了 ",[32,119776,103563],{},[29,119778,119779],{},"XML 标签是否闭合、属性是否拼写正确",[29,119781,119782],{},"actuator 引用的 joint 名字是否存在",[29,119784,119785,119787,119788],{},[32,119786,103627],{}," 的长度是否等于 ",[32,119789,104709],{},[29,119791,108135,119792,85093,119794,119796,119797],{},[32,119793,106581],{},[32,119795,106910],{}," 后是否调用了 ",[32,119798,119799],{},"mujoco.mj_forward",[29,119801,119802],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2671,119804,119805],{},"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":78,"searchDepth":157,"depth":157,"links":119807},[119808,119809,119810,119811,119812,119813,119814,119815],{"id":119449,"depth":157,"text":119449},{"id":119478,"depth":157,"text":119479},{"id":119508,"depth":157,"text":119508},{"id":119623,"depth":157,"text":119623},{"id":119676,"depth":157,"text":119676},{"id":119688,"depth":157,"text":119688},{"id":119725,"depth":157,"text":119725},{"id":119754,"depth":157,"text":119754},"仿真搭建。",{"category":25962},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119392,"description":119816},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119823,"title":119824,"body":119825,"description":2699,"extension":2700,"meta":120280,"navigation":485,"path":120281,"seo":120282,"stem":120283,"__hash__":120284},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119826,"toc":120278},[119827,119830,119833,119839,120275],[10,119828,119824],{"id":119829},"_1-最常用的基本操作更新",[19,119831,119832],{},"装linux系统教程：",[19,119834,119835],{},[323,119836,119837],{"href":119837,"rel":119838},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26449],[73,119840,119844],{"className":119841,"code":119842,"language":119843,"meta":78,"style":78},"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",[32,119845,119846,119851,119856,119865,119870,119879,119884,119904,119909,119920,119925,119934,119939,119967,119972,119991,119996,120015,120019,120024,120040,120044,120049,120079,120083,120088,120104,120108,120113,120128,120132,120137,120153,120157,120162,120174,120186,120190,120195,120212,120216,120221,120239,120243,120248,120257,120261,120266],{"__ignoreMap":78},[82,119847,119848],{"class":84,"line":85},[82,119849,119850],{"class":2828},"#更新相关的知识\n",[82,119852,119853],{"class":84,"line":157},[82,119854,119855],{"class":2828},"# 更新软件包列表（从服务器获取最新软件信息）\n",[82,119857,119858,119860,119863],{"class":84,"line":404},[82,119859,27161],{"class":2384},[82,119861,119862],{"class":96}," apt",[82,119864,28824],{"class":96},[82,119866,119867],{"class":84,"line":413},[82,119868,119869],{"class":2828},"# 升级所有可更新的软件包（不删除旧包）\n",[82,119871,119872,119874,119876],{"class":84,"line":508},[82,119873,27161],{"class":2384},[82,119875,119862],{"class":96},[82,119877,119878],{"class":96}," upgrade\n",[82,119880,119881],{"class":84,"line":513},[82,119882,119883],{"class":2828},"#更新和升级软件包\n",[82,119885,119886,119888,119890,119893,119895,119897,119899,119902],{"class":84,"line":1388},[82,119887,27161],{"class":2384},[82,119889,119862],{"class":96},[82,119891,119892],{"class":96}," update",[82,119894,28772],{"class":92},[82,119896,27161],{"class":2384},[82,119898,119862],{"class":96},[82,119900,119901],{"class":96}," upgrade",[82,119903,103532],{"class":88},[82,119905,119906],{"class":84,"line":1394},[82,119907,119908],{"class":2828},"#列出可更新的软件包及版本信息\n",[82,119910,119911,119914,119917],{"class":84,"line":1399},[82,119912,119913],{"class":2384},"apt",[82,119915,119916],{"class":96}," list",[82,119918,119919],{"class":88}," --upgradable\n",[82,119921,119922],{"class":84,"line":1430},[82,119923,119924],{"class":2828},"#彻底升级（处理依赖关系，可能删除旧包）\n",[82,119926,119927,119929,119931],{"class":84,"line":1818},[82,119928,27161],{"class":2384},[82,119930,119862],{"class":96},[82,119932,119933],{"class":96}," full-upgrade\n",[82,119935,119936],{"class":84,"line":2082},[82,119937,119938],{"class":2828},"#设置指定版本\n",[82,119940,119941,119943,119945,119947,119949,119952,119954,119956,119958,119960,119963,119965],{"class":84,"line":2233},[82,119942,27161],{"class":2384},[82,119944,119862],{"class":96},[82,119946,26418],{"class":96},[82,119948,31483],{"class":112},[82,119950,119951],{"class":96},"package_nam",[82,119953,2844],{"class":92},[82,119955,3709],{"class":112},[82,119957,113],{"class":96},[82,119959,3659],{"class":112},[82,119961,119962],{"class":96},"version_numbe",[82,119964,303],{"class":92},[82,119966,53870],{"class":112},[82,119968,119969],{"class":84,"line":2255},[82,119970,119971],{"class":2828},"#只安装软件包不升级\n",[82,119973,119974,119976,119978,119980,119982,119984,119986,119988],{"class":84,"line":2260},[82,119975,27161],{"class":2384},[82,119977,119862],{"class":96},[82,119979,26418],{"class":96},[82,119981,31483],{"class":112},[82,119983,119951],{"class":96},[82,119985,2844],{"class":92},[82,119987,3709],{"class":112},[82,119989,119990],{"class":88}," --no-upgrade\n",[82,119992,119993],{"class":84,"line":2298},[82,119994,119995],{"class":2828},"#只升级，不存在就不安装\n",[82,119997,119998,120000,120002,120004,120006,120008,120010,120012],{"class":84,"line":2303},[82,119999,27161],{"class":2384},[82,120001,119862],{"class":96},[82,120003,26418],{"class":96},[82,120005,31483],{"class":112},[82,120007,119951],{"class":96},[82,120009,2844],{"class":92},[82,120011,3709],{"class":112},[82,120013,120014],{"class":88}," --only-upgrade\n",[82,120016,120017],{"class":84,"line":2321},[82,120018,486],{"emptyLinePlaceholder":485},[82,120020,120021],{"class":84,"line":2533},[82,120022,120023],{"class":2828},"#安装指定的软件命令\n",[82,120025,120026,120028,120030,120032,120034,120036,120038],{"class":84,"line":2538},[82,120027,27161],{"class":2384},[82,120029,119862],{"class":96},[82,120031,26418],{"class":96},[82,120033,31483],{"class":112},[82,120035,119951],{"class":96},[82,120037,2844],{"class":92},[82,120039,53870],{"class":112},[82,120041,120042],{"class":84,"line":2548},[82,120043,486],{"emptyLinePlaceholder":485},[82,120045,120046],{"class":84,"line":2579},[82,120047,120048],{"class":2828},"#安装多个软件包\n",[82,120050,120051,120053,120055,120057,120059,120062,120065,120067,120069,120072,120074,120076],{"class":84,"line":2585},[82,120052,27161],{"class":2384},[82,120054,119862],{"class":96},[82,120056,26418],{"class":96},[82,120058,31483],{"class":112},[82,120060,120061],{"class":96},"package_",[82,120063,120064],{"class":112},"1>",[82,120066,31483],{"class":112},[82,120068,120061],{"class":96},[82,120070,120071],{"class":112},"2>",[82,120073,31483],{"class":112},[82,120075,120061],{"class":96},[82,120077,120078],{"class":112},"3>\n",[82,120080,120081],{"class":84,"line":4350},[82,120082,486],{"emptyLinePlaceholder":485},[82,120084,120085],{"class":84,"line":4355},[82,120086,120087],{"class":2828},"#更新指定的软件命令\n",[82,120089,120090,120092,120094,120096,120098,120100,120102],{"class":84,"line":4360},[82,120091,27161],{"class":2384},[82,120093,119862],{"class":96},[82,120095,119892],{"class":96},[82,120097,31483],{"class":112},[82,120099,119951],{"class":96},[82,120101,2844],{"class":92},[82,120103,53870],{"class":112},[82,120105,120106],{"class":84,"line":4365},[82,120107,486],{"emptyLinePlaceholder":485},[82,120109,120110],{"class":84,"line":4379},[82,120111,120112],{"class":2828},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[82,120114,120115,120117,120120,120122,120124,120126],{"class":84,"line":4384},[82,120116,119913],{"class":2384},[82,120118,120119],{"class":96}," show",[82,120121,31483],{"class":112},[82,120123,119951],{"class":96},[82,120125,2844],{"class":92},[82,120127,53870],{"class":112},[82,120129,120130],{"class":84,"line":5176},[82,120131,486],{"emptyLinePlaceholder":485},[82,120133,120134],{"class":84,"line":5190},[82,120135,120136],{"class":2828},"#删除软件包命令\n",[82,120138,120139,120141,120143,120145,120147,120149,120151],{"class":84,"line":5198},[82,120140,27161],{"class":2384},[82,120142,119862],{"class":96},[82,120144,28661],{"class":96},[82,120146,31483],{"class":112},[82,120148,119951],{"class":96},[82,120150,2844],{"class":92},[82,120152,53870],{"class":112},[82,120154,120155],{"class":84,"line":5203},[82,120156,486],{"emptyLinePlaceholder":485},[82,120158,120159],{"class":84,"line":5209},[82,120160,120161],{"class":2828},"# 清理旧版本和缓存（释放磁盘空间）\n",[82,120163,120164,120166,120168,120171],{"class":84,"line":5215},[82,120165,27161],{"class":2384},[82,120167,119862],{"class":96},[82,120169,120170],{"class":96}," autoremove",[82,120172,120173],{"class":2828},"  # 删除不再需要的依赖和库文件\n",[82,120175,120176,120178,120180,120183],{"class":84,"line":5220},[82,120177,27161],{"class":2384},[82,120179,119862],{"class":96},[82,120181,120182],{"class":96}," clean",[82,120184,120185],{"class":2828},"       # 清理下载的缓存包\n",[82,120187,120188],{"class":84,"line":10539},[82,120189,486],{"emptyLinePlaceholder":485},[82,120191,120192],{"class":84,"line":10563},[82,120193,120194],{"class":2828},"#移除软件包及配置文件\n",[82,120196,120197,120199,120201,120204,120206,120208,120210],{"class":84,"line":10568},[82,120198,27161],{"class":2384},[82,120200,119862],{"class":96},[82,120202,120203],{"class":96}," purge",[82,120205,31483],{"class":112},[82,120207,119951],{"class":96},[82,120209,2844],{"class":92},[82,120211,53870],{"class":112},[82,120213,120214],{"class":84,"line":10574},[82,120215,486],{"emptyLinePlaceholder":485},[82,120217,120218],{"class":84,"line":10601},[82,120219,120220],{"class":2828},"#查找软件包命令\n",[82,120222,120223,120225,120227,120230,120232,120235,120237],{"class":84,"line":10606},[82,120224,27161],{"class":2384},[82,120226,119862],{"class":96},[82,120228,120229],{"class":96}," search",[82,120231,31483],{"class":112},[82,120233,120234],{"class":96},"keywor",[82,120236,3072],{"class":92},[82,120238,53870],{"class":112},[82,120240,120241],{"class":84,"line":10612},[82,120242,486],{"emptyLinePlaceholder":485},[82,120244,120245],{"class":84,"line":10624},[82,120246,120247],{"class":2828},"#列出所有已安装的包\n",[82,120249,120250,120252,120254],{"class":84,"line":10636},[82,120251,119913],{"class":2384},[82,120253,119916],{"class":96},[82,120255,120256],{"class":88}," --installed\n",[82,120258,120259],{"class":84,"line":10648},[82,120260,486],{"emptyLinePlaceholder":485},[82,120262,120263],{"class":84,"line":12307},[82,120264,120265],{"class":2828},"#列出所有已安装的包的版本信息\n",[82,120267,120268,120270,120272],{"class":84,"line":12332},[82,120269,119913],{"class":2384},[82,120271,119916],{"class":96},[82,120273,120274],{"class":88}," --all-versions\n",[2671,120276,120277],{},"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":78,"searchDepth":157,"depth":157,"links":120279},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119824,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120286,"title":120287,"body":120288,"description":2699,"extension":2700,"meta":121029,"navigation":485,"path":121030,"seo":121031,"stem":121032,"__hash__":121033},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120289,"toc":121016},[120290,120293,120297,120300,120306,120310,120314,120320,120325,120330,120335,120340,120345,120348,120351,120354,120357,120361,120364,120369,120372,120377,120380,120385,120392,120395,120398,120401,120404,120407,120418,120422,120426,120431,120436,120440,120445,120449,120454,120458,120462,120467,120470,120515,120520,120524,120528,120533,120539,120544,120554,120559,120569,120574,120579,120606,120610,120613,120618,120621,120646,120650,120655,120658,120663,120668,120688,120693,120696,120711,120715,120768,120771,120776,120780,120783,120798,120801,120804,120809,120813,120817,120820,120824,120828,120831,120836,120841,120845,120852,120860,120863,120870,120875,120880,120883,120888,120895,120900,120907,120911,120913,120918,120922,120925,120928,120933,120936,120941,120944,120949,120954,120959,120963,120968,120972,121013],[10,120291,120287],{"id":120292},"_2-linux装机教程",[14,120294,120296],{"id":120295},"_21-实体机","2.1 实体机",[19,120298,120299],{},"使用清华源：（Ubuntu24.04）",[19,120301,120302],{},[323,120303,120304],{"href":120304,"rel":120305},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26449],[14,120307,120309],{"id":120308},"_22-普通虚拟机","2.2 普通虚拟机",[65,120311,120313],{"id":120312},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120315,120316],{},[323,120317,120318],{"href":120318,"rel":120319},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26449],[19,120321,120322],{},[4078,120323],{"alt":78,"src":120324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120326,120327],{},[4078,120328],{"alt":78,"src":120329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120331,120332],{},[4078,120333],{"alt":78,"src":120334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120336,120337],{},[4078,120338],{"alt":78,"src":120339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120341,120342],{},[4078,120343],{"alt":78,"src":120344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120346,120347],{},"内存4G（4096MB）；",[19,120349,120350],{},"CPU给4个核；",[19,120352,120353],{},"硬盘动态分配60G；",[19,120355,120356],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[65,120358,120360],{"id":120359},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120362,120363],{},"按照1.1的步骤下载Ubuntu",[19,120365,120366],{},[4078,120367],{"alt":78,"src":120368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120370,120371],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120373,120374],{},[4078,120375],{"alt":78,"src":120376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120378,120379],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120381,120382],{},[4078,120383],{"alt":78,"src":120384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120386,120387,120388,120391],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2913,120389,120390],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120393,120394],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120396,120397],{},"将改动写入磁盘吗 继续",[19,120399,120400],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120402,120403],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120405,120406],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120408,120409,120410,120413,120414,120417],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2913,120411,120412],{},"除了"," 选不发送系统信息与不升级之外， ",[2913,120415,120416],{},"其它"," 都跳过或前进）",[65,120419,120421],{"id":120420},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24582,120423,120425],{"id":120424},"_2231-全屏","2.2.3.1 全屏",[19,120427,120428],{},[4078,120429],{"alt":78,"src":120430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120432,120433],{},[4078,120434],{"alt":78,"src":120435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24582,120437,120439],{"id":120438},"_2232-文件交换","2.2.3.2 文件交换",[19,120441,120442],{},[4078,120443],{"alt":78,"src":120444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24582,120446,120448],{"id":120447},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120450,120451],{},[4078,120452],{"alt":78,"src":120453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120455,120457],{"id":120456},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[65,120459,120461],{"id":120460},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,120463,120464],{},[29,120465,120466],{},"什么情况下推荐？",[19,120468,120469],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,120471,120472],{"start":157},[29,120473,120474,120475],{},"优缺点：",[26,120476,120477,120507],{},[29,120478,120479,120480],{},"优点：",[26,120481,120482,120485,120492,120495,120498,120501,120504],{},[29,120483,120484],{},"WSL2是最好的Linux发行版;(bushi)",[29,120486,120487,120488,120491],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2913,120489,120490],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,120493,120494],{},"非常方便调用USB设备，可以USB直通;",[29,120496,120497],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,120499,120500],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,120502,120503],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,120505,120506],{},"非常方便使用Windows的VScode远程开发;",[29,120508,120509,120510],{},"缺点：",[26,120511,120512],{},[29,120513,120514],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120516,120517],{},[4078,120518],{"alt":78,"src":120519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[65,120521,120523],{"id":120522},"_232-安装教程","2.3.2 安装教程",[24582,120525,120527],{"id":120526},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,120529,120530],{},[29,120531,120532],{},"方法一(图形界面)",[19,120534,120535,120536,27203],{},"用Win+R输入",[32,120537,120538],{},"appwiz.cpl",[19,120540,120541],{},[4078,120542],{"alt":78,"src":120543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120545,120546,120547,120550,120551,29055],{},"点击OK进入 ",[2913,120548,120549],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2913,120552,120553],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120555,120556],{},[4078,120557],{"alt":78,"src":120558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120560,120561,120562,103569,120565,120568],{},"选择 ",[2913,120563,120564],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2913,120566,120567],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120570,120571],{},[4078,120572],{"alt":78,"src":120573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,120575,120576],{"start":157},[29,120577,120578],{},"方法二(命令行)",[73,120580,120584],{"className":120581,"code":120582,"language":120583,"meta":78,"style":78},"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",[32,120585,120586,120591,120596,120601],{"__ignoreMap":78},[82,120587,120588],{"class":84,"line":85},[82,120589,120590],{},"# 开启 Linux 子系统\n",[82,120592,120593],{"class":84,"line":157},[82,120594,120595],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[82,120597,120598],{"class":84,"line":404},[82,120599,120600],{},"# 开启虚拟机平台\n",[82,120602,120603],{"class":84,"line":413},[82,120604,120605],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24582,120607,120609],{"id":120608},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120611,120612],{},"用管理员权限打开powershell",[19,120614,120615],{},[4078,120616],{"alt":78,"src":120617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120619,120620],{},"升级WSL并设置默认版本为WSL2",[73,120622,120624],{"className":120581,"code":120623,"language":120583,"meta":78,"style":78},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[32,120625,120626,120631,120636,120641],{"__ignoreMap":78},[82,120627,120628],{"class":84,"line":85},[82,120629,120630],{},"# 更新 wsl\n",[82,120632,120633],{"class":84,"line":157},[82,120634,120635],{},"wsl --update\n",[82,120637,120638],{"class":84,"line":404},[82,120639,120640],{},"# 将 wsl 版本设置为 wsl2\n",[82,120642,120643],{"class":84,"line":413},[82,120644,120645],{},"wsl --set-default-version 2\n",[24582,120647,120649],{"id":120648},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,120651,120652],{},[29,120653,120654],{},"方式一(商店下载)",[19,120656,120657],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120659,120660],{},[4078,120661],{"alt":78,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,120664,120665],{"start":157},[29,120666,120667],{},"方式二(命令行安装)",[73,120669,120671],{"className":120581,"code":120670,"language":120583,"meta":78,"style":78},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[32,120672,120673,120678,120683],{"__ignoreMap":78},[82,120674,120675],{"class":84,"line":85},[82,120676,120677],{},"# 列出可安装的 Linux 版本\n",[82,120679,120680],{"class":84,"line":157},[82,120681,120682],{},"#（需要科学手段）\n",[82,120684,120685],{"class":84,"line":404},[82,120686,120687],{},"wsl --list --online\n",[19,120689,120690],{},[4078,120691],{"alt":78,"src":120692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120694,120695],{},"选择对应发行版并安装",[73,120697,120699],{"className":120581,"code":120698,"language":120583,"meta":78,"style":78},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[32,120700,120701,120706],{"__ignoreMap":78},[82,120702,120703],{"class":84,"line":85},[82,120704,120705],{},"# Ubuntu安装完毕后需要重启系统\n",[82,120707,120708],{"class":84,"line":157},[82,120709,120710],{},"wsl --install -d Ubuntu-24.04\n",[24582,120712,120714],{"id":120713},"_2324-查看系统状态","2.3.2.4 查看系统状态",[73,120716,120718],{"className":120581,"code":120717,"language":120583,"meta":78,"style":78},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[32,120719,120720,120725,120730,120735,120740,120744,120748,120753,120758,120763],{"__ignoreMap":78},[82,120721,120722],{"class":84,"line":85},[82,120723,120724],{},"# 查看 wsl\n",[82,120726,120727],{"class":84,"line":157},[82,120728,120729],{},"wsl -l\n",[82,120731,120732],{"class":84,"line":404},[82,120733,120734],{},"# 查看 wsl 运行版本或模式\n",[82,120736,120737],{"class":84,"line":413},[82,120738,120739],{},"wsl -l -v\n",[82,120741,120742],{"class":84,"line":508},[82,120743,486],{"emptyLinePlaceholder":485},[82,120745,120746],{"class":84,"line":513},[82,120747,486],{"emptyLinePlaceholder":485},[82,120749,120750],{"class":84,"line":1388},[82,120751,120752],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[82,120754,120755],{"class":84,"line":1394},[82,120756,120757],{},"wsl --set-version \u003Cdistro> 2\n",[82,120759,120760],{"class":84,"line":1399},[82,120761,120762],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[82,120764,120765],{"class":84,"line":1430},[82,120766,120767],{},"wsl --unregister \u003Cdistro>\n",[19,120769,120770],{},"输出Version为2即正常",[19,120772,120773],{},[4078,120774],{"alt":78,"src":120775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24582,120777,120779],{"id":120778},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120781,120782],{},"直接在Powershell里输入wsl命令进入子系统",[73,120784,120786],{"className":120581,"code":120785,"language":120583,"meta":78,"style":78},"# 进入子系统\nwsl\n",[32,120787,120788,120793],{"__ignoreMap":78},[82,120789,120790],{"class":84,"line":85},[82,120791,120792],{},"# 进入子系统\n",[82,120794,120795],{"class":84,"line":157},[82,120796,120797],{},"wsl\n",[19,120799,120800],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120802,120803],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120805,120806],{},[4078,120807],{"alt":78,"src":120808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[65,120810,120812],{"id":120811},"_233-配置各种环境","2.3.3 配置各种环境",[24582,120814,120816],{"id":120815},"_2331-换源","2.3.3.1 换源",[19,120818,120819],{},"(同实体机LINUX，往下找教程)",[24582,120821,120823],{"id":120822},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25494,120825,120827],{"id":120826},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120829,120830],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120832,120833],{},[4078,120834],{"alt":78,"src":120835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120837,120838],{},[4078,120839],{"alt":78,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25494,120842,120844],{"id":120843},"_23322-cuda","2.3.3.2.2 CUDA",[19,120846,120847,120848],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[323,120849,120850],{"href":120850,"rel":120851},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26449],[19,120853,120854,120857],{},[4078,120855],{"alt":78,"src":120856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[4078,120858],{"alt":78,"src":120859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120861,120862],{},"在下方的网站，选择合适的版本。",[19,120864,120865,120866],{},"WSL2 专属 CUDA 指南：",[323,120867,120868],{"href":120868,"rel":120869},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26449],[19,120871,120872],{},[2913,120873,120874],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120876,120877],{},[4078,120878],{"alt":78,"src":120879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120881,120882],{},"挨行敲一遍",[19,120884,120885],{},[4078,120886],{"alt":78,"src":120887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120889,120890,120891,120894],{},"敲完后，输入",[32,120892,120893],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120896,120897],{},[4078,120898],{"alt":78,"src":120899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120901,120902,120903,120906],{},"（请详看下方教程的",[2913,120904,120905],{},"安装CUDA的配置环境来看","如何配置环境）",[25494,120908,120910],{"id":120909},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120912,120819],{},[19,120914,120915],{},[4078,120916],{"alt":78,"src":120917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24582,120919,120921],{"id":120920},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120923,120924],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120926,120927],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120929,120930],{},[4078,120931],{"alt":78,"src":120932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120934,120935],{},"连接WSL2",[19,120937,120938],{},[4078,120939],{"alt":78,"src":120940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120942,120943],{},"远程开发成功。",[19,120945,120946],{},[4078,120947],{"alt":78,"src":120948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120950,120951],{},[4078,120952],{"alt":78,"src":120953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120955,120956],{},[4078,120957],{"alt":78,"src":120958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24582,120960,120962],{"id":120961},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120964,120965],{},[4078,120966],{"alt":78,"src":120967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24582,120969,120971],{"id":120970},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[73,120973,120975],{"className":119841,"code":120974,"language":119843,"meta":78,"style":78},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[32,120976,120977,120985,120993,121004,121008],{"__ignoreMap":78},[82,120978,120979,120981,120983],{"class":84,"line":85},[82,120980,27161],{"class":2384},[82,120982,119862],{"class":96},[82,120984,28824],{"class":96},[82,120986,120987,120989,120991],{"class":84,"line":157},[82,120988,27161],{"class":2384},[82,120990,119862],{"class":96},[82,120992,119878],{"class":96},[82,120994,120995,120997,120999,121001],{"class":84,"line":404},[82,120996,27161],{"class":2384},[82,120998,119862],{"class":96},[82,121000,26418],{"class":96},[82,121002,121003],{"class":96}," mesa-utils\n",[82,121005,121006],{"class":84,"line":413},[82,121007,486],{"emptyLinePlaceholder":485},[82,121009,121010],{"class":84,"line":508},[82,121011,121012],{"class":2828},"#然后重启wsl2即可\n",[2671,121014,121015],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":78,"searchDepth":157,"depth":157,"links":121017},[121018,121019,121024],{"id":120295,"depth":157,"text":120296},{"id":120308,"depth":157,"text":120309,"children":121020},[121021,121022,121023],{"id":120312,"depth":404,"text":120313},{"id":120359,"depth":404,"text":120360},{"id":120420,"depth":404,"text":120421},{"id":120456,"depth":157,"text":120457,"children":121025},[121026,121027,121028],{"id":120460,"depth":404,"text":120461},{"id":120522,"depth":404,"text":120523},{"id":120811,"depth":404,"text":120812},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120287,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121035,"title":121036,"body":121037,"description":2699,"extension":2700,"meta":123973,"navigation":485,"path":123974,"seo":123975,"stem":123976,"__hash__":123977},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121038,"toc":123945},[121039,121042,121046,121052,121056,121062,121066,121254,121257,121262,121266,121270,121273,121276,121282,121287,121290,121293,121298,121331,121336,121340,121417,121420,121425,121429,121432,121471,121474,121483,121501,121506,121513,121630,121635,121638,121665,121670,121674,121683,121733,121740,121744,121747,121761,121768,121802,121807,121811,121834,121837,121842,121846,121849,121852,121855,121897,121901,121904,121907,121948,121952,121956,121959,121964,121969,121972,121995,121998,122006,122011,122014,122019,122024,122027,122032,122036,122041,122064,122069,122131,122139,122144,122149,122152,122157,122160,122165,122170,122188,122193,122199,122204,122218,122222,122225,122228,122231,122274,122277,122282,122383,122386,122391,122395,122399,122436,122440,122444,122448,122494,122498,122543,122547,122554,122562,122617,122620,122697,122700,122723,122727,122730,122735,122740,122748,122751,122756,122761,122766,122769,122774,122783,122786,122791,122794,122865,122870,122873,122878,122881,122886,122889,122894,122897,122902,122907,122910,122985,122988,123001,123006,123009,123023,123026,123055,123060,123089,123092,123097,123101,123106,123115,123118,123123,123126,123131,123134,123137,123142,123145,123150,123155,123158,123163,123166,123291,123296,123326,123329,123334,123339,123356,123359,123402,123405,123432,123437,123450,123593,123597,123602,123616,123619,123670,123673,123703,123706,123722,123727,123741,123744,123811,123816,123825,123830,123833,123845,123850,123857,123881,123884,123889,123892,123911,123916,123923,123935,123942],[10,121040,121036],{"id":121041},"_3-安装必备配置",[14,121043,121045],{"id":121044},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[73,121047,121050],{"className":121048,"code":121049,"language":7780},[7778],"  打开下方网站（注意，该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",[32,121051,121049],{"__ignoreMap":78},[65,121053,121055],{"id":121054},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[73,121057,121060],{"className":121058,"code":121059,"language":7780},[7778],"  输入以下命令\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",[32,121061,121059],{"__ignoreMap":78},[65,121063,121065],{"id":121064},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[73,121067,121071],{"className":121068,"code":121069,"language":121070,"meta":78,"style":78},"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",[32,121072,121073,121081,121092,121104,121118,121122,121132,121137,121141,121145,121150,121154,121166,121170,121175,121179,121190,121194,121210,121214,121225,121229,121234,121238,121246],{"__ignoreMap":78},[82,121074,121075,121077,121079],{"class":84,"line":85},[82,121076,27161],{"class":2384},[82,121078,119862],{"class":96},[82,121080,28824],{"class":96},[82,121082,121083,121085,121087,121089],{"class":84,"line":157},[82,121084,27161],{"class":2384},[82,121086,119862],{"class":96},[82,121088,26418],{"class":96},[82,121090,121091],{"class":96}," vim\n",[82,121093,121094,121096,121099,121101],{"class":84,"line":404},[82,121095,27161],{"class":2384},[82,121097,121098],{"class":96}," rm",[82,121100,27909],{"class":88},[82,121102,121103],{"class":96}," \u002Fetc\u002Fapt\u002Fsources.list\n",[82,121105,121106,121108,121110,121112,121115],{"class":84,"line":413},[82,121107,27161],{"class":2384},[82,121109,121098],{"class":96},[82,121111,27909],{"class":88},[82,121113,121114],{"class":96}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[82,121116,121117],{"class":88},"**\n",[82,121119,121120],{"class":84,"line":508},[82,121121,486],{"emptyLinePlaceholder":485},[82,121123,121124,121126,121129],{"class":84,"line":513},[82,121125,27161],{"class":2384},[82,121127,121128],{"class":96}," vim",[82,121130,121131],{"class":96}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[82,121133,121134],{"class":84,"line":1388},[82,121135,121136],{"class":96},"```\n",[82,121138,121139],{"class":84,"line":1394},[82,121140,486],{"emptyLinePlaceholder":485},[82,121142,121143],{"class":84,"line":1399},[82,121144,486],{"emptyLinePlaceholder":485},[82,121146,121147],{"class":84,"line":1430},[82,121148,121149],{"class":2384},"选择好Ubuntu版本后，复制下方的内容。\n",[82,121151,121152],{"class":84,"line":1818},[82,121153,486],{"emptyLinePlaceholder":485},[82,121155,121156,121158,121161,121164],{"class":84,"line":2082},[82,121157,2986],{"class":112},[82,121159,121160],{"class":96},"[](",[82,121162,121163],{"class":2384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[82,121165,119],{"class":96},[82,121167,121168],{"class":84,"line":2233},[82,121169,486],{"emptyLinePlaceholder":485},[82,121171,121172],{"class":84,"line":2255},[82,121173,121174],{"class":2384},"粘贴进去\n",[82,121176,121177],{"class":84,"line":2260},[82,121178,486],{"emptyLinePlaceholder":485},[82,121180,121181,121183,121185,121188],{"class":84,"line":2298},[82,121182,2986],{"class":112},[82,121184,121160],{"class":96},[82,121186,121187],{"class":2384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[82,121189,119],{"class":96},[82,121191,121192],{"class":84,"line":2303},[82,121193,486],{"emptyLinePlaceholder":485},[82,121195,121196,121199,121202,121205,121207],{"class":84,"line":2321},[82,121197,121198],{"class":2384},"按一下ESC，然后英文冒号，输入",[82,121200,121201],{"class":96}," `",[82,121203,121204],{"class":2384},":wq!",[82,121206,3721],{"class":96},[82,121208,121209],{"class":2384},"然后回车\n",[82,121211,121212],{"class":84,"line":2533},[82,121213,486],{"emptyLinePlaceholder":485},[82,121215,121216,121218,121220,121223],{"class":84,"line":2538},[82,121217,2986],{"class":112},[82,121219,121160],{"class":96},[82,121221,121222],{"class":2384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[82,121224,119],{"class":96},[82,121226,121227],{"class":84,"line":2548},[82,121228,486],{"emptyLinePlaceholder":485},[82,121230,121231],{"class":84,"line":2579},[82,121232,121233],{"class":2384},"输入以下命令\n",[82,121235,121236],{"class":84,"line":2585},[82,121237,486],{"emptyLinePlaceholder":485},[82,121239,121240,121243],{"class":84,"line":4350},[82,121241,121242],{"class":96},"```",[82,121244,121245],{"class":2384},"Bash\n",[82,121247,121248,121250,121252],{"class":84,"line":4355},[82,121249,27161],{"class":2384},[82,121251,119862],{"class":96},[82,121253,28824],{"class":96},[19,121255,121256],{},"这里被替换成对应学校则成功",[19,121258,121259],{},[4078,121260],{"alt":78,"src":121261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121263,121265],{"id":121264},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[65,121267,121269],{"id":121268},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121271,121272],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121274,121275],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121277,121278],{},[323,121279,121280],{"href":121280,"rel":121281},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26449],[19,121283,121284],{},[4078,121285],{"alt":78,"src":121286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121288,121289],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121291,121292],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121294,121295],{},[4078,121296],{"alt":78,"src":121297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[73,121299,121301],{"className":119841,"code":121300,"language":119843,"meta":78,"style":78},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[32,121302,121303,121308,121315,121320],{"__ignoreMap":78},[82,121304,121305],{"class":84,"line":85},[82,121306,121307],{"class":2828},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[82,121309,121310,121312],{"class":84,"line":157},[82,121311,103827],{"class":88},[82,121313,121314],{"class":96}," ~\u002FDownloads\n",[82,121316,121317],{"class":84,"line":404},[82,121318,121319],{"class":2828},"#下方chrome安装包名不一定是这个，根据名字来看\n",[82,121321,121322,121324,121326,121328],{"class":84,"line":413},[82,121323,27161],{"class":2384},[82,121325,119862],{"class":96},[82,121327,26418],{"class":96},[82,121329,121330],{"class":96}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121332,121333],{},[4078,121334],{"alt":78,"src":121335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[65,121337,121339],{"id":121338},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[73,121341,121343],{"className":119841,"code":121342,"language":119843,"meta":78,"style":78},"# 老版\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",[32,121344,121345,121350,121358,121369,121374,121378,121383,121393,121401,121412],{"__ignoreMap":78},[82,121346,121347],{"class":84,"line":85},[82,121348,121349],{"class":2828},"# 老版\n",[82,121351,121352,121354,121356],{"class":84,"line":157},[82,121353,27161],{"class":2384},[82,121355,119862],{"class":96},[82,121357,28824],{"class":96},[82,121359,121360,121362,121364,121366],{"class":84,"line":404},[82,121361,27161],{"class":2384},[82,121363,119862],{"class":96},[82,121365,26418],{"class":96},[82,121367,121368],{"class":96}," neofetch\n",[82,121370,121371],{"class":84,"line":413},[82,121372,121373],{"class":2384},"neofetch\n",[82,121375,121376],{"class":84,"line":508},[82,121377,486],{"emptyLinePlaceholder":485},[82,121379,121380],{"class":84,"line":513},[82,121381,121382],{"class":2828},"# 新版\n",[82,121384,121385,121387,121390],{"class":84,"line":1388},[82,121386,27161],{"class":2384},[82,121388,121389],{"class":96}," add-apt-repository",[82,121391,121392],{"class":96}," ppa:zhangsongcui3371\u002Ffastfetch\n",[82,121394,121395,121397,121399],{"class":84,"line":1394},[82,121396,27161],{"class":2384},[82,121398,119862],{"class":96},[82,121400,28824],{"class":96},[82,121402,121403,121405,121407,121409],{"class":84,"line":1399},[82,121404,27161],{"class":2384},[82,121406,119862],{"class":96},[82,121408,26418],{"class":96},[82,121410,121411],{"class":96}," fastfetch\n",[82,121413,121414],{"class":84,"line":1430},[82,121415,121416],{"class":2384},"fastfetch\n",[19,121418,121419],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121421,121422],{},[4078,121423],{"alt":78,"src":121424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[65,121426,121428],{"id":121427},"_323-移除snap应用","3.2.3 移除snap应用",[19,121430,121431],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[73,121433,121435],{"className":119841,"code":121434,"language":119843,"meta":78,"style":78},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[32,121436,121437,121449,121460],{"__ignoreMap":78},[82,121438,121439,121441,121443,121446],{"class":84,"line":85},[82,121440,27161],{"class":2384},[82,121442,29095],{"class":96},[82,121444,121445],{"class":96}," disable",[82,121447,121448],{"class":96}," snapd.service\n",[82,121450,121451,121453,121455,121457],{"class":84,"line":157},[82,121452,27161],{"class":2384},[82,121454,29095],{"class":96},[82,121456,121445],{"class":96},[82,121458,121459],{"class":96}," snapd.socket\n",[82,121461,121462,121464,121466,121468],{"class":84,"line":404},[82,121463,27161],{"class":2384},[82,121465,29095],{"class":96},[82,121467,121445],{"class":96},[82,121469,121470],{"class":96}," snapd.seeded.service\n",[19,121472,121473],{},"然后查看snap应用列表",[19,121475,121476,121477,121482],{},"根据你安装的选择不同（最小安装或普通安装），有",[323,121478,121481],{"href":121479,"rel":121480},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26449],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[73,121484,121486],{"className":119841,"code":121485,"language":119843,"meta":78,"style":78},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[32,121487,121488,121493],{"__ignoreMap":78},[82,121489,121490],{"class":84,"line":85},[82,121491,121492],{"class":2828},"# 查询当前系统上snap安装了哪些app\n",[82,121494,121495,121498],{"class":84,"line":157},[82,121496,121497],{"class":2384},"snap",[82,121499,121500],{"class":96}," list\n",[19,121502,121503],{},[4078,121504],{"alt":78,"src":121505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121507,121508,121509,121512],{},"卸载掉图中所有应用，按照 ",[2913,121510,121511],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[73,121514,121516],{"className":119841,"code":121515,"language":119843,"meta":78,"style":78},"#移除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",[32,121517,121518,121523,121535,121540,121551,121556,121567,121572,121583,121588,121592,121597,121608,121619],{"__ignoreMap":78},[82,121519,121520],{"class":84,"line":85},[82,121521,121522],{"class":2828},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[82,121524,121525,121527,121530,121532],{"class":84,"line":157},[82,121526,27161],{"class":2384},[82,121528,121529],{"class":96}," snap",[82,121531,28661],{"class":96},[82,121533,121534],{"class":96}," snap-store\n",[82,121536,121537],{"class":84,"line":404},[82,121538,121539],{"class":2828},"#移除firefox浏览器\n",[82,121541,121542,121544,121546,121548],{"class":84,"line":413},[82,121543,27161],{"class":2384},[82,121545,121529],{"class":96},[82,121547,28661],{"class":96},[82,121549,121550],{"class":96}," firefox\n",[82,121552,121553],{"class":84,"line":508},[82,121554,121555],{"class":2828},"#移除gnome-42-2204\n",[82,121557,121558,121560,121562,121564],{"class":84,"line":513},[82,121559,27161],{"class":2384},[82,121561,121529],{"class":96},[82,121563,28661],{"class":96},[82,121565,121566],{"class":96}," gnome-42-2204\n",[82,121568,121569],{"class":84,"line":1388},[82,121570,121571],{"class":2828},"#移除gtk-common-themes\n",[82,121573,121574,121576,121578,121580],{"class":84,"line":1394},[82,121575,27161],{"class":2384},[82,121577,121529],{"class":96},[82,121579,28661],{"class":96},[82,121581,121582],{"class":96}," gtk-common-themes\n",[82,121584,121585],{"class":84,"line":1399},[82,121586,121587],{"class":2828},"#移除其它...\n",[82,121589,121590],{"class":84,"line":1430},[82,121591,5273],{"class":92},[82,121593,121594],{"class":84,"line":1818},[82,121595,121596],{"class":2828},"#移除core22,bare以及snapd\n",[82,121598,121599,121601,121603,121605],{"class":84,"line":2082},[82,121600,27161],{"class":2384},[82,121602,121529],{"class":96},[82,121604,28661],{"class":96},[82,121606,121607],{"class":96}," core22\n",[82,121609,121610,121612,121614,121616],{"class":84,"line":2233},[82,121611,27161],{"class":2384},[82,121613,121529],{"class":96},[82,121615,28661],{"class":96},[82,121617,121618],{"class":96}," bare\n",[82,121620,121621,121623,121625,121627],{"class":84,"line":2255},[82,121622,27161],{"class":2384},[82,121624,121529],{"class":96},[82,121626,28661],{"class":96},[82,121628,121629],{"class":96}," snapd\n",[19,121631,121632],{},[4078,121633],{"alt":78,"src":121634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121636,121637],{},"输入以下命令查看是否还有snap包",[73,121639,121641],{"className":119841,"code":121640,"language":119843,"meta":78,"style":78},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[32,121642,121643,121649,121653,121657,121661],{"__ignoreMap":78},[82,121644,121645,121647],{"class":84,"line":85},[82,121646,121497],{"class":2384},[82,121648,121500],{"class":96},[82,121650,121651],{"class":84,"line":157},[82,121652,121349],{"class":2828},[82,121654,121655],{"class":84,"line":404},[82,121656,121373],{"class":2384},[82,121658,121659],{"class":84,"line":413},[82,121660,121382],{"class":2828},[82,121662,121663],{"class":84,"line":508},[82,121664,121416],{"class":2384},[19,121666,121667],{},[4078,121668],{"alt":78,"src":121669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[65,121671,121673],{"id":121672},"_324-移除snap","3.2.4 移除snap",[19,121675,121676,121677,121682],{},"在删除掉",[323,121678,121681],{"href":121679,"rel":121680},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26449],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[73,121684,121686],{"className":119841,"code":121685,"language":119843,"meta":78,"style":78}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[32,121687,121688,121693,121706,121711,121722],{"__ignoreMap":78},[82,121689,121690],{"class":84,"line":85},[82,121691,121692],{"class":2828}," #使用apt移除掉snap\n",[82,121694,121695,121697,121699,121701,121704],{"class":84,"line":157},[82,121696,27161],{"class":2384},[82,121698,119862],{"class":96},[82,121700,120170],{"class":96},[82,121702,121703],{"class":88}," --purge",[82,121705,121629],{"class":96},[82,121707,121708],{"class":84,"line":404},[82,121709,121710],{"class":2828},"#移除snapd的一些目录\n",[82,121712,121713,121715,121717,121719],{"class":84,"line":413},[82,121714,27161],{"class":2384},[82,121716,121098],{"class":96},[82,121718,27909],{"class":88},[82,121720,121721],{"class":96}," \u002Fvar\u002Fcache\u002Fsnapd\n",[82,121723,121724,121726,121728,121730],{"class":84,"line":508},[82,121725,27161],{"class":2384},[82,121727,121098],{"class":96},[82,121729,27909],{"class":88},[82,121731,121732],{"class":96}," ~\u002Fsnap\n",[19,121734,121735,121736,121739],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[32,121737,121738],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[65,121741,121743],{"id":121742},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121745,121746],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[73,121748,121750],{"className":119841,"code":121749,"language":119843,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[32,121751,121752],{"__ignoreMap":78},[82,121753,121754,121756,121758],{"class":84,"line":85},[82,121755,27161],{"class":2384},[82,121757,121128],{"class":96},[82,121759,121760],{"class":96}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121762,121763,121764,121767],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[32,121765,121766],{},":wq"," 回车",[73,121769,121771],{"className":119841,"code":121770,"language":119843,"meta":78,"style":78},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[32,121772,121773,121780,121794],{"__ignoreMap":78},[82,121774,121775,121778],{"class":84,"line":85},[82,121776,121777],{"class":2384},"Package:",[82,121779,121629],{"class":96},[82,121781,121782,121785,121788,121791],{"class":84,"line":157},[82,121783,121784],{"class":2384},"Pin:",[82,121786,121787],{"class":96}," release",[82,121789,121790],{"class":96}," a=",[82,121792,121793],{"class":88},"*\n",[82,121795,121796,121799],{"class":84,"line":404},[82,121797,121798],{"class":2384},"Pin-Priority:",[82,121800,121801],{"class":88}," -10\n",[19,121803,121804],{},[4078,121805],{"alt":78,"src":121806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[65,121808,121810],{"id":121809},"_326-测试是否成功","3.2.6 测试是否成功",[73,121812,121814],{"className":119841,"code":121813,"language":119843,"meta":78,"style":78},"sudo apt update\nsudo apt install firefox\n",[32,121815,121816,121824],{"__ignoreMap":78},[82,121817,121818,121820,121822],{"class":84,"line":85},[82,121819,27161],{"class":2384},[82,121821,119862],{"class":96},[82,121823,28824],{"class":96},[82,121825,121826,121828,121830,121832],{"class":84,"line":157},[82,121827,27161],{"class":2384},[82,121829,119862],{"class":96},[82,121831,26418],{"class":96},[82,121833,121550],{"class":96},[19,121835,121836],{},"这里提示snapd无法被安装，就证明成功了",[19,121838,121839],{},[4078,121840],{"alt":78,"src":121841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[65,121843,121845],{"id":121844},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121847,121848],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121850,121851],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121853,121854],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[73,121856,121858],{"className":119841,"code":121857,"language":119843,"meta":78,"style":78},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[32,121859,121860,121865,121874,121879,121887],{"__ignoreMap":78},[82,121861,121862],{"class":84,"line":85},[82,121863,121864],{"class":2828},"# 添加Mozilla提供的源\n",[82,121866,121867,121869,121871],{"class":84,"line":157},[82,121868,27161],{"class":2384},[82,121870,121389],{"class":96},[82,121872,121873],{"class":96}," ppa:mozillateam\u002Fppa\n",[82,121875,121876],{"class":84,"line":404},[82,121877,121878],{"class":2828},"# 安装Firefox\n",[82,121880,121881,121883,121885],{"class":84,"line":413},[82,121882,27161],{"class":2384},[82,121884,119862],{"class":96},[82,121886,28824],{"class":96},[82,121888,121889,121891,121893,121895],{"class":84,"line":508},[82,121890,27161],{"class":2384},[82,121892,119862],{"class":96},[82,121894,26418],{"class":96},[82,121896,121550],{"class":96},[65,121898,121900],{"id":121899},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121902,121903],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121905,121906],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[73,121908,121910],{"className":119841,"code":121909,"language":119843,"meta":78,"style":78},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[32,121911,121912,121917,121927,121935,121939],{"__ignoreMap":78},[82,121913,121914],{"class":84,"line":85},[82,121915,121916],{"class":2828},"#删掉禁止安装snap的配置文件\n",[82,121918,121919,121921,121923,121925],{"class":84,"line":157},[82,121920,27161],{"class":2384},[82,121922,121098],{"class":96},[82,121924,27909],{"class":88},[82,121926,121760],{"class":96},[82,121928,121929,121931,121933],{"class":84,"line":404},[82,121930,27161],{"class":2384},[82,121932,119862],{"class":96},[82,121934,28824],{"class":96},[82,121936,121937],{"class":84,"line":413},[82,121938,486],{"emptyLinePlaceholder":485},[82,121940,121941,121943,121945],{"class":84,"line":508},[82,121942,27161],{"class":2384},[82,121944,119862],{"class":96},[82,121946,121947],{"class":96}," dist-update\n",[14,121949,121951],{"id":121950},"_33-中文输入法","3.3 中文输入法",[65,121953,121955],{"id":121954},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121957,121958],{},"官网下载搜狗输入法",[19,121960,121961],{},[4078,121962],{"alt":78,"src":121963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121965,121966],{},[4078,121967],{"alt":78,"src":121968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121970,121971],{},"打开终端输入如下",[73,121973,121975],{"className":119841,"code":121974,"language":119843,"meta":78,"style":78},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[32,121976,121977,121984],{"__ignoreMap":78},[82,121978,121979,121981],{"class":84,"line":85},[82,121980,103827],{"class":88},[82,121982,121983],{"class":96}," ~\u002FDownloads\u002F\n",[82,121985,121986,121988,121990,121992],{"class":84,"line":157},[82,121987,27161],{"class":2384},[82,121989,119862],{"class":96},[82,121991,26418],{"class":96},[82,121993,121994],{"class":96}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121996,121997],{},"打开Fcitx",[19,121999,122000,122003],{},[4078,122001],{"alt":78,"src":122002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[4078,122004],{"alt":78,"src":122005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,122007,122008],{},[4078,122009],{"alt":78,"src":122010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,122012,122013],{},"添加搜狗输入法",[19,122015,122016],{},[4078,122017],{"alt":78,"src":122018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,122020,122021],{},[4078,122022],{"alt":78,"src":122023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,122025,122026],{},"将搜狗输入法设置为唯一输入法",[19,122028,122029],{},[4078,122030],{"alt":78,"src":122031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[65,122033,122035],{"id":122034},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,122037,122038],{},[29,122039,122040],{},"卸载旧输入法",[73,122042,122044],{"className":121068,"code":122043,"language":121070,"meta":78,"style":78},"sudo apt purge fcitx* ibus*\n",[32,122045,122046],{"__ignoreMap":78},[82,122047,122048,122050,122052,122054,122057,122059,122062],{"class":84,"line":85},[82,122049,27161],{"class":2384},[82,122051,119862],{"class":96},[82,122053,120203],{"class":96},[82,122055,122056],{"class":96}," fcitx",[82,122058,3212],{"class":88},[82,122060,122061],{"class":96}," ibus",[82,122063,121793],{"class":88},[26,122065,122066],{"start":157},[29,122067,122068],{},"安装Fcitx5",[73,122070,122072],{"className":119841,"code":122071,"language":119843,"meta":78,"style":78},"# 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",[32,122073,122074,122079,122093,122097,122102,122111,122119],{"__ignoreMap":78},[82,122075,122076],{"class":84,"line":85},[82,122077,122078],{"class":2828},"# Ubuntu22.04及以上、Debian12及以上\n",[82,122080,122081,122083,122085,122087,122090],{"class":84,"line":157},[82,122082,27161],{"class":2384},[82,122084,119862],{"class":96},[82,122086,26418],{"class":96},[82,122088,122089],{"class":96}," fcitx5",[82,122091,122092],{"class":96}," fcitx5-chinese-addons\n",[82,122094,122095],{"class":84,"line":404},[82,122096,486],{"emptyLinePlaceholder":485},[82,122098,122099],{"class":84,"line":413},[82,122100,122101],{"class":2828},"# Ubuntu20.04\n",[82,122103,122104,122106,122108],{"class":84,"line":508},[82,122105,27161],{"class":2384},[82,122107,121389],{"class":96},[82,122109,122110],{"class":96}," ppa:zhsj\u002Ffcitx5\n",[82,122112,122113,122115,122117],{"class":84,"line":513},[82,122114,27161],{"class":2384},[82,122116,119862],{"class":96},[82,122118,28824],{"class":96},[82,122120,122121,122123,122125,122127,122129],{"class":84,"line":1388},[82,122122,27161],{"class":2384},[82,122124,119862],{"class":96},[82,122126,26418],{"class":96},[82,122128,122089],{"class":96},[82,122130,122092],{"class":96},[26,122132,122133,122136],{"start":404},[29,122134,122135],{},"Reboot System",[29,122137,122138],{},"启动Fcitx5",[19,122140,122141],{},[4078,122142],{"alt":78,"src":122143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,122145,122146],{"start":508},[29,122147,122148],{},"修改一些设置",[19,122150,122151],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122153,122154],{},[4078,122155],{"alt":78,"src":122156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122158,122159],{},"添加快捷键以便于更好切换中英文",[19,122161,122162],{},[4078,122163],{"alt":78,"src":122164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,122166,122167],{"start":513},[29,122168,122169],{},"重启",[73,122171,122173],{"className":121068,"code":122172,"language":121070,"meta":78,"style":78},"sudo shutdown -r now\n",[32,122174,122175],{"__ignoreMap":78},[82,122176,122177,122179,122182,122185],{"class":84,"line":85},[82,122178,27161],{"class":2384},[82,122180,122181],{"class":96}," shutdown",[82,122183,122184],{"class":88}," -r",[82,122186,122187],{"class":96}," now\n",[26,122189,122190],{"start":1388},[29,122191,122192],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122194,122195],{},[323,122196,122197],{"href":122197,"rel":122198},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26449],[26,122200,122201],{"start":1394},[29,122202,122203],{},"再重启",[73,122205,122206],{"className":121068,"code":122172,"language":121070,"meta":78,"style":78},[32,122207,122208],{"__ignoreMap":78},[82,122209,122210,122212,122214,122216],{"class":84,"line":85},[82,122211,27161],{"class":2384},[82,122213,122181],{"class":96},[82,122215,122184],{"class":88},[82,122217,122187],{"class":96},[14,122219,122221],{"id":122220},"_34-pip3源替换","3.4 pip3源替换",[19,122223,122224],{},"非Debian系发行版需要做。",[19,122226,122227],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122229,122230],{},"使用dnf的系统也可能不用做。",[73,122232,122234],{"className":119841,"code":122233,"language":119843,"meta":78,"style":78},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,122235,122236,122241,122248,122253,122258],{"__ignoreMap":78},[82,122237,122238],{"class":84,"line":85},[82,122239,122240],{"class":2828},"# 检查是否已安装 pip\n",[82,122242,122243,122246],{"class":84,"line":157},[82,122244,122245],{"class":2384},"pip3",[82,122247,28875],{"class":88},[82,122249,122250],{"class":84,"line":404},[82,122251,122252],{"class":2828},"# 如果未安装，先安装 pip3（见下方）\n",[82,122254,122255],{"class":84,"line":413},[82,122256,122257],{"class":2828},"# 配置 pip 使用清华源\n",[82,122259,122260,122262,122265,122268,122271],{"class":84,"line":508},[82,122261,122245],{"class":2384},[82,122263,122264],{"class":96}," config",[82,122266,122267],{"class":96}," set",[82,122269,122270],{"class":96}," global.index-url",[82,122272,122273],{"class":96}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122275,122276],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122278,122279],{},[4078,122280],{"alt":78,"src":122281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[73,122283,122285],{"className":119841,"code":122284,"language":119843,"meta":78,"style":78},"#安装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",[32,122286,122287,122292,122300,122311,122315,122320,122339,122343,122348,122360,122364,122369],{"__ignoreMap":78},[82,122288,122289],{"class":84,"line":85},[82,122290,122291],{"class":2828},"#安装pip3\n",[82,122293,122294,122296,122298],{"class":84,"line":157},[82,122295,27161],{"class":2384},[82,122297,119862],{"class":96},[82,122299,28824],{"class":96},[82,122301,122302,122304,122306,122308],{"class":84,"line":404},[82,122303,27161],{"class":2384},[82,122305,28658],{"class":96},[82,122307,26418],{"class":96},[82,122309,122310],{"class":96}," python3-pip\n",[82,122312,122313],{"class":84,"line":413},[82,122314,486],{"emptyLinePlaceholder":485},[82,122316,122317],{"class":84,"line":508},[82,122318,122319],{"class":2828},"#更新pip3\n",[82,122321,122322,122324,122326,122328,122330,122332,122335,122337],{"class":84,"line":513},[82,122323,103430],{"class":2384},[82,122325,103433],{"class":88},[82,122327,103456],{"class":96},[82,122329,26418],{"class":96},[82,122331,29012],{"class":88},[82,122333,122334],{"class":96}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[82,122336,103461],{"class":88},[82,122338,103464],{"class":96},[82,122340,122341],{"class":84,"line":1388},[82,122342,486],{"emptyLinePlaceholder":485},[82,122344,122345],{"class":84,"line":1394},[82,122346,122347],{"class":2828},"#设置pip源为清华源\n",[82,122349,122350,122352,122354,122356,122358],{"class":84,"line":1399},[82,122351,122245],{"class":2384},[82,122353,122264],{"class":96},[82,122355,122267],{"class":96},[82,122357,122270],{"class":96},[82,122359,122273],{"class":96},[82,122361,122362],{"class":84,"line":1430},[82,122363,486],{"emptyLinePlaceholder":485},[82,122365,122366],{"class":84,"line":1818},[82,122367,122368],{"class":2828},"#测试\n",[82,122370,122371,122373,122375,122377,122379,122381],{"class":84,"line":2082},[82,122372,103430],{"class":2384},[82,122374,103433],{"class":88},[82,122376,103456],{"class":96},[82,122378,26418],{"class":96},[82,122380,103461],{"class":88},[82,122382,103464],{"class":96},[19,122384,122385],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122387,122388],{},[4078,122389],{"alt":78,"src":122390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122392,122394],{"id":122393},"_35-显卡驱动安装","3.5 显卡驱动安装",[65,122396,122398],{"id":122397},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[73,122400,122402],{"className":121068,"code":122401,"language":121070,"meta":78,"style":78},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[32,122403,122404,122409,122424,122429],{"__ignoreMap":78},[82,122405,122406],{"class":84,"line":85},[82,122407,122408],{"class":2828},"# 如果是使用apt安装的驱动\n",[82,122410,122411,122413,122415,122417,122419,122422],{"class":84,"line":157},[82,122412,27161],{"class":2384},[82,122414,28658],{"class":96},[82,122416,28661],{"class":96},[82,122418,121703],{"class":88},[82,122420,122421],{"class":96}," nvidia",[82,122423,121793],{"class":88},[82,122425,122426],{"class":84,"line":404},[82,122427,122428],{"class":2828},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[82,122430,122431,122433],{"class":84,"line":413},[82,122432,27161],{"class":2384},[82,122434,122435],{"class":96}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[65,122437,122439],{"id":122438},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24582,122441,122443],{"id":122442},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25494,122445,122447],{"id":122446},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[73,122449,122451],{"className":121068,"code":122450,"language":121070,"meta":78,"style":78},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,122452,122453,122458,122469,122474,122484,122489],{"__ignoreMap":78},[82,122454,122455],{"class":84,"line":85},[82,122456,122457],{"class":2828},"# 安装英伟达驱动\n",[82,122459,122460,122462,122464,122466],{"class":84,"line":157},[82,122461,27161],{"class":2384},[82,122463,119862],{"class":96},[82,122465,26418],{"class":96},[82,122467,122468],{"class":96}," nvidia-driver-版本号\n",[82,122470,122471],{"class":84,"line":404},[82,122472,122473],{"class":2828},"# 重启 \n",[82,122475,122476,122478,122480,122482],{"class":84,"line":413},[82,122477,27161],{"class":2384},[82,122479,122181],{"class":96},[82,122481,122184],{"class":88},[82,122483,122187],{"class":96},[82,122485,122486],{"class":84,"line":508},[82,122487,122488],{"class":2828},"# 检查驱动是否安装成功\n",[82,122490,122491],{"class":84,"line":513},[82,122492,122493],{"class":2384},"nvidia-smi\n",[25494,122495,122497],{"id":122496},"_35212-debian","3.5.2.1.2 Debian",[73,122499,122501],{"className":121068,"code":122500,"language":121070,"meta":78,"style":78},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,122502,122503,122507,122521,122525,122535,122539],{"__ignoreMap":78},[82,122504,122505],{"class":84,"line":85},[82,122506,122457],{"class":2828},[82,122508,122509,122511,122513,122515,122518],{"class":84,"line":157},[82,122510,27161],{"class":2384},[82,122512,119862],{"class":96},[82,122514,26418],{"class":96},[82,122516,122517],{"class":96}," nvidia-driver",[82,122519,122520],{"class":96}," nvidia-settings\n",[82,122522,122523],{"class":84,"line":404},[82,122524,122473],{"class":2828},[82,122526,122527,122529,122531,122533],{"class":84,"line":413},[82,122528,27161],{"class":2384},[82,122530,122181],{"class":96},[82,122532,122184],{"class":88},[82,122534,122187],{"class":96},[82,122536,122537],{"class":84,"line":508},[82,122538,122488],{"class":2828},[82,122540,122541],{"class":84,"line":513},[82,122542,122493],{"class":2384},[24582,122544,122546],{"id":122545},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122548,122549,122550,122553],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2913,122551,122552],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122555,122556,122557],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[26137,122558,122559],{},[2913,122560,122561],{},"（也可以不禁用桌面环境，直接进行下一步。）",[73,122563,122565],{"className":121068,"code":122564,"language":121070,"meta":78,"style":78},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[32,122566,122567,122572,122582,122587,122600,122605],{"__ignoreMap":78},[82,122568,122569],{"class":84,"line":85},[82,122570,122571],{"class":2828},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[82,122573,122574,122576,122579],{"class":84,"line":157},[82,122575,27161],{"class":2384},[82,122577,122578],{"class":96}," telinit",[82,122580,122581],{"class":88}," 3\n",[82,122583,122584],{"class":84,"line":404},[82,122585,122586],{"class":2828},"# ubuntu 使用下方命令\n",[82,122588,122589,122591,122594,122597],{"class":84,"line":413},[82,122590,27161],{"class":2384},[82,122592,122593],{"class":96}," service",[82,122595,122596],{"class":96}," lightdm",[82,122598,122599],{"class":96}," stop\n",[82,122601,122602],{"class":84,"line":508},[82,122603,122604],{"class":2828},"# Fedora 使用下方命令\n",[82,122606,122607,122609,122611,122614],{"class":84,"line":513},[82,122608,27161],{"class":2384},[82,122610,29095],{"class":96},[82,122612,122613],{"class":96}," isolate",[82,122615,122616],{"class":96}," multi-user.target\n",[19,122618,122619],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[73,122621,122623],{"className":121068,"code":122622,"language":121070,"meta":78,"style":78},"# 编译环境+准备工作\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",[32,122624,122625,122630,122641,122646,122653,122658,122670,122675,122682,122687],{"__ignoreMap":78},[82,122626,122627],{"class":84,"line":85},[82,122628,122629],{"class":2828},"# 编译环境+准备工作\n",[82,122631,122632,122634,122636,122638],{"class":84,"line":157},[82,122633,27161],{"class":2384},[82,122635,119862],{"class":96},[82,122637,26418],{"class":96},[82,122639,122640],{"class":96}," build-essential\n",[82,122642,122643],{"class":84,"line":404},[82,122644,122645],{"class":2828},"# 进入到.run目录中\n",[82,122647,122648,122650],{"class":84,"line":413},[82,122649,103827],{"class":88},[82,122651,122652],{"class":96}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[82,122654,122655],{"class":84,"line":508},[82,122656,122657],{"class":2828},"# 给驱动文件增加可执行权限：\n",[82,122659,122660,122662,122664,122667],{"class":84,"line":513},[82,122661,27161],{"class":2384},[82,122663,27164],{"class":96},[82,122665,122666],{"class":96}," a+x",[82,122668,122669],{"class":96}," NVIDIA-Linux-x86_64-550.107.02.run\n",[82,122671,122672],{"class":84,"line":1388},[82,122673,122674],{"class":2828},"# 然后执行安装：\n",[82,122676,122677,122679],{"class":84,"line":1394},[82,122678,27161],{"class":2384},[82,122680,122681],{"class":96}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[82,122683,122684],{"class":84,"line":1399},[82,122685,122686],{"class":2828},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[82,122688,122689,122691,122694],{"class":84,"line":1430},[82,122690,27161],{"class":2384},[82,122692,122693],{"class":96}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[82,122695,122696],{"class":88},"  --no-opengl-files\n",[19,122698,122699],{},"安装完毕重启即可",[73,122701,122703],{"className":121068,"code":122702,"language":121070,"meta":78,"style":78},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,122704,122705,122709,122715,122719],{"__ignoreMap":78},[82,122706,122707],{"class":84,"line":85},[82,122708,122473],{"class":2828},[82,122710,122711,122713],{"class":84,"line":157},[82,122712,27161],{"class":2384},[82,122714,29229],{"class":96},[82,122716,122717],{"class":84,"line":404},[82,122718,122488],{"class":2828},[82,122720,122721],{"class":84,"line":413},[82,122722,122493],{"class":2384},[65,122724,122726],{"id":122725},"_353-安装cuda","3.5.3 安装CUDA",[19,122728,122729],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122731,122732],{},[4078,122733],{"alt":78,"src":122734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,122736,122737],{},[29,122738,122739],{},"先查看显卡驱动所支持的最高CUDA版本",[73,122741,122742],{"className":121068,"code":122493,"language":121070,"meta":78,"style":78},[32,122743,122744],{"__ignoreMap":78},[82,122745,122746],{"class":84,"line":85},[82,122747,122493],{"class":2384},[19,122749,122750],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122752,122753],{},[4078,122754],{"alt":78,"src":122755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,122757,122758],{"start":157},[29,122759,122760],{},"下载CUDA并安装CUDA",[19,122762,120847,122763],{},[323,122764,120850],{"href":120850,"rel":122765},[26449],[19,122767,122768],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122770,122771],{},[4078,122772],{"alt":78,"src":122773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122775,122776,122777,122782],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[323,122778,122781],{"href":122779,"rel":122780},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26449],"Vinci机器人队单片机教程","）",[19,122784,122785],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122787,122788],{},[4078,122789],{"alt":78,"src":122790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122792,122793],{},"将最下方框框里的命令敲入终端",[73,122795,122797],{"className":121068,"code":122796,"language":121070,"meta":78,"style":78},"# 在当前文件夹下创建一个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",[32,122798,122799,122804,122813,122818,122825,122830,122838,122843,122854,122859],{"__ignoreMap":78},[82,122800,122801],{"class":84,"line":85},[82,122802,122803],{"class":2828},"# 在当前文件夹下创建一个ttt的子文件夹\n",[82,122805,122806,122808,122810],{"class":84,"line":157},[82,122807,103817],{"class":2384},[82,122809,31797],{"class":88},[82,122811,122812],{"class":96}," .\u002Fttt\n",[82,122814,122815],{"class":84,"line":404},[82,122816,122817],{"class":2828},"# 进入ttt文件夹\n",[82,122819,122820,122822],{"class":84,"line":413},[82,122821,103827],{"class":88},[82,122823,122824],{"class":96}," ttt\n",[82,122826,122827],{"class":84,"line":508},[82,122828,122829],{"class":2828},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[82,122831,122832,122835],{"class":84,"line":513},[82,122833,122834],{"class":2384},"wget",[82,122836,122837],{"class":96}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[82,122839,122840],{"class":84,"line":1388},[82,122841,122842],{"class":2828},"# 给予权限\n",[82,122844,122845,122847,122849,122851],{"class":84,"line":1394},[82,122846,27161],{"class":2384},[82,122848,27164],{"class":96},[82,122850,122666],{"class":96},[82,122852,122853],{"class":96}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[82,122855,122856],{"class":84,"line":1399},[82,122857,122858],{"class":2828},"# 运行脚本\n",[82,122860,122861,122863],{"class":84,"line":1430},[82,122862,27161],{"class":2384},[82,122864,122853],{"class":96},[19,122866,122867],{},[4078,122868],{"alt":78,"src":122869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122871,122872],{},"正在安装中：",[19,122874,122875],{},[4078,122876],{"alt":78,"src":122877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122879,122880],{},"输入accept接受即可",[19,122882,122883],{},[4078,122884],{"alt":78,"src":122885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122887,122888],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122890,122891],{},[4078,122892],{"alt":78,"src":122893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122895,122896],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122898,122899],{},[4078,122900],{"alt":78,"src":122901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,122903,122904],{"start":404},[29,122905,122906],{},"配置环境",[19,122908,122909],{},"根据上方确认一下路径，比如我上面红色框起来的为",[73,122911,122913],{"className":121068,"code":122912,"language":121070,"meta":78,"style":78},"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",[32,122914,122915,122931,122946],{"__ignoreMap":78},[82,122916,122917,122920,122923,122926,122929],{"class":84,"line":85},[82,122918,122919],{"class":2384},"Please",[82,122921,122922],{"class":96}," make",[82,122924,122925],{"class":96}," sure",[82,122927,122928],{"class":96}," that",[82,122930,5273],{"class":92},[82,122932,122933,122935,122938,122941,122944],{"class":84,"line":157},[82,122934,54831],{"class":2384},[82,122936,122937],{"class":96},"   PATH",[82,122939,122940],{"class":96}," includes",[82,122942,122943],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[82,122945,5273],{"class":92},[82,122947,122948,122950,122953,122955,122958,122961,122963,122966,122969,122972,122975,122977,122980,122982],{"class":84,"line":404},[82,122949,54831],{"class":2384},[82,122951,122952],{"class":96},"   LD_LIBRARY_PATH",[82,122954,122940],{"class":96},[82,122956,122957],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[82,122959,122960],{"class":96}," or,",[82,122962,7802],{"class":96},[82,122964,122965],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[82,122967,122968],{"class":96}," to",[82,122970,122971],{"class":96}," \u002Fetc\u002Fld.so.conf",[82,122973,122974],{"class":96}," and",[82,122976,29812],{"class":96},[82,122978,122979],{"class":96}," ldconfig",[82,122981,67161],{"class":96},[82,122983,122984],{"class":96}," root\n",[19,122986,122987],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[73,122989,122991],{"className":121068,"code":122990,"language":121070,"meta":78,"style":78},"which nvcc\n",[32,122992,122993],{"__ignoreMap":78},[82,122994,122995,122998],{"class":84,"line":85},[82,122996,122997],{"class":88},"which",[82,122999,123000],{"class":96}," nvcc\n",[19,123002,123003],{},[4078,123004],{"alt":78,"src":123005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,123007,123008],{},"所以我进行以下操作：",[73,123010,123012],{"className":121068,"code":123011,"language":121070,"meta":78,"style":78},"sudo vim ~\u002F.bashrc\n",[32,123013,123014],{"__ignoreMap":78},[82,123015,123016,123018,123020],{"class":84,"line":85},[82,123017,27161],{"class":2384},[82,123019,121128],{"class":96},[82,123021,123022],{"class":96}," ~\u002F.bashrc\n",[19,123024,123025],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[73,123027,123029],{"className":121068,"code":123028,"language":121070,"meta":78,"style":78},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[32,123030,123031,123043],{"__ignoreMap":78},[82,123032,123033,123035,123038,123040],{"class":84,"line":85},[82,123034,27627],{"class":112},[82,123036,123037],{"class":92}," PATH",[82,123039,113],{"class":112},[82,123041,123042],{"class":92},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[82,123044,123045,123047,123050,123052],{"class":84,"line":157},[82,123046,27627],{"class":112},[82,123048,123049],{"class":92}," LD_LIBRARY_PATH",[82,123051,113],{"class":112},[82,123053,123054],{"class":92},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,123056,123057],{},[4078,123058],{"alt":78,"src":123059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[73,123061,123063],{"className":121068,"code":123062,"language":121070,"meta":78,"style":78},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[32,123064,123065,123070,123076,123081],{"__ignoreMap":78},[82,123066,123067],{"class":84,"line":85},[82,123068,123069],{"class":2828},"# 刷新当前终端的环境变量\n",[82,123071,123072,123074],{"class":84,"line":157},[82,123073,103444],{"class":88},[82,123075,123022],{"class":96},[82,123077,123078],{"class":84,"line":404},[82,123079,123080],{"class":2828},"# 验证CUDA是否安装成功\n",[82,123082,123083,123086],{"class":84,"line":413},[82,123084,123085],{"class":2384},"nvcc",[82,123087,123088],{"class":88}," -V\n",[19,123090,123091],{},"出现下图这种则安装成功。",[19,123093,123094],{},[4078,123095],{"alt":78,"src":123096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[65,123098,123100],{"id":123099},"_354-安装cudnn","3.5.4 安装cuDNN",[26,123102,123103],{},[29,123104,123105],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123107,123108,123109,123114],{},"前往 NVIDIA cuDNN 下载页面：",[323,123110,123113],{"href":123111,"rel":123112},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26449],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123116,123117],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123119,123120],{},[4078,123121],{"alt":78,"src":123122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123124,123125],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123127,123128],{},[4078,123129],{"alt":78,"src":123130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123132,123133],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123135,123136],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123138,123139],{},[2913,123140,123141],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123143,123144],{},"下载好的：",[19,123146,123147],{},[4078,123148],{"alt":78,"src":123149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,123151,123152],{"start":157},[29,123153,123154],{},"安装cuDNN",[19,123156,123157],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123159,123160],{},[4078,123161],{"alt":78,"src":123162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123164,123165],{},"解压文件，并复制到对应位置完成安装",[73,123167,123169],{"className":121068,"code":123168,"language":121070,"meta":78,"style":78},"# 解压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",[32,123170,123171,123176,123187,123192,123199,123204,123220,123234,123239,123250,123259,123263,123279],{"__ignoreMap":78},[82,123172,123173],{"class":84,"line":85},[82,123174,123175],{"class":2828},"# 解压cuDNN文件\n",[82,123177,123178,123181,123184],{"class":84,"line":157},[82,123179,123180],{"class":2384},"tar",[82,123182,123183],{"class":88}," -xvf",[82,123185,123186],{"class":96}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[82,123188,123189],{"class":84,"line":404},[82,123190,123191],{"class":2828},"# cd进文件夹\n",[82,123193,123194,123196],{"class":84,"line":413},[82,123195,103827],{"class":88},[82,123197,123198],{"class":96}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[82,123200,123201],{"class":84,"line":508},[82,123202,123203],{"class":2828},"# 复制cuDNN文件到CUDA目录\n",[82,123205,123206,123208,123210,123213,123215,123218],{"class":84,"line":513},[82,123207,27161],{"class":2384},[82,123209,30443],{"class":96},[82,123211,123212],{"class":96}," include\u002Fcudnn",[82,123214,3212],{"class":88},[82,123216,123217],{"class":96},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[82,123219,5273],{"class":92},[82,123221,123222,123224,123226,123229,123231],{"class":84,"line":1388},[82,123223,27161],{"class":2384},[82,123225,30443],{"class":96},[82,123227,123228],{"class":96}," lib\u002Flibcudnn",[82,123230,3212],{"class":88},[82,123232,123233],{"class":96},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[82,123235,123236],{"class":84,"line":1394},[82,123237,123238],{"class":2828},"# 对比一下有没有缺文件\n",[82,123240,123241,123243,123246,123248],{"class":84,"line":1399},[82,123242,29343],{"class":2384},[82,123244,123245],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[82,123247,3212],{"class":88},[82,123249,5273],{"class":92},[82,123251,123252,123254,123257],{"class":84,"line":1430},[82,123253,29343],{"class":2384},[82,123255,123256],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[82,123258,121793],{"class":88},[82,123260,123261],{"class":84,"line":1818},[82,123262,122842],{"class":2828},[82,123264,123265,123267,123269,123272,123274,123276],{"class":84,"line":2082},[82,123266,27161],{"class":2384},[82,123268,27164],{"class":96},[82,123270,123271],{"class":96}," a+r",[82,123273,123245],{"class":96},[82,123275,3212],{"class":88},[82,123277,123278],{"class":92},"   \n",[82,123280,123281,123283,123285,123287,123289],{"class":84,"line":2233},[82,123282,27161],{"class":2384},[82,123284,27164],{"class":96},[82,123286,123271],{"class":96},[82,123288,123256],{"class":96},[82,123290,121793],{"class":88},[26,123292,123293],{"start":404},[29,123294,123295],{},"检查是否安装成功",[73,123297,123299],{"className":121068,"code":123298,"language":121070,"meta":78,"style":78},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[32,123300,123301,123306],{"__ignoreMap":78},[82,123302,123303],{"class":84,"line":85},[82,123304,123305],{"class":2828},"# 检查cuDNN版本命令\n",[82,123307,123308,123311,123314,123316,123318,123321,123324],{"class":84,"line":157},[82,123309,123310],{"class":2384},"cat",[82,123312,123313],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[82,123315,27694],{"class":112},[82,123317,32817],{"class":2384},[82,123319,123320],{"class":96}," CUDNN_MAJOR",[82,123322,123323],{"class":88}," -A",[82,123325,50287],{"class":88},[19,123327,123328],{},"出现下图这样的就是安装成功了",[19,123330,123331],{},[4078,123332],{"alt":78,"src":123333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,123335,123336],{"start":413},[29,123337,123338],{},"软链接(一般不需要)",[73,123340,123342],{"className":121068,"code":123341,"language":121070,"meta":78,"style":78},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[32,123343,123344,123349],{"__ignoreMap":78},[82,123345,123346],{"class":84,"line":85},[82,123347,123348],{"class":2828},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[82,123350,123351,123353],{"class":84,"line":157},[82,123352,27161],{"class":2384},[82,123354,123355],{"class":96}," ldconfig\n",[19,123357,123358],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[73,123360,123365],{"className":123361,"code":123362,"language":123363,"meta":123364,"style":78},"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",[32,123366,123367,123372,123377,123382,123387,123392,123397],{"__ignoreMap":78},[82,123368,123369],{"class":84,"line":85},[82,123370,123371],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[82,123373,123374],{"class":84,"line":157},[82,123375,123376],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[82,123378,123379],{"class":84,"line":404},[82,123380,123381],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[82,123383,123384],{"class":84,"line":413},[82,123385,123386],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[82,123388,123389],{"class":84,"line":508},[82,123390,123391],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[82,123393,123394],{"class":84,"line":513},[82,123395,123396],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[82,123398,123399],{"class":84,"line":1388},[82,123400,123401],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123403,123404],{},"运行下方的命令",[73,123406,123408],{"className":121068,"code":123407,"language":121070,"meta":78,"style":78},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[32,123409,123410,123415,123422,123427],{"__ignoreMap":78},[82,123411,123412],{"class":84,"line":85},[82,123413,123414],{"class":2828},"# cd进入CUDA路径\n",[82,123416,123417,123419],{"class":84,"line":157},[82,123418,103827],{"class":88},[82,123420,123421],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[82,123423,123424],{"class":84,"line":404},[82,123425,123426],{"class":2828}," # 查看本路径下的需要软链接的文件名\n",[82,123428,123429],{"class":84,"line":413},[82,123430,123431],{"class":2384}," ls\n",[19,123433,123434],{},[4078,123435],{"alt":78,"src":123436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123438,123439,123440,20994,123443,20994,123446,123449],{},"如上图，我需要将",[32,123441,123442],{},"libcudnn_xxx_xxxxx.so.8.9.7",[32,123444,123445],{},"libcudnn_xxx_xxxxx.so.8",[32,123447,123448],{},"libcudnn_xxx_xxxxx.so","软链接",[73,123451,123453],{"className":121068,"code":123452,"language":121070,"meta":78,"style":78},"# 创建符号链接。对于每个 .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",[32,123454,123455,123460,123476,123490,123504,123518,123532,123546,123560,123565,123571,123576],{"__ignoreMap":78},[82,123456,123457],{"class":84,"line":85},[82,123458,123459],{"class":2828},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[82,123461,123462,123464,123467,123470,123473],{"class":84,"line":157},[82,123463,27161],{"class":2384},[82,123465,123466],{"class":96}," ln",[82,123468,123469],{"class":88}," -sf",[82,123471,123472],{"class":96}," libcudnn_cnn_train.so.8.9.7",[82,123474,123475],{"class":96}," libcudnn_cnn_train.so.8\n",[82,123477,123478,123480,123482,123484,123487],{"class":84,"line":404},[82,123479,27161],{"class":2384},[82,123481,123466],{"class":96},[82,123483,123469],{"class":88},[82,123485,123486],{"class":96}," libcudnn_adv_infer.so.8.9.7",[82,123488,123489],{"class":96}," libcudnn_adv_infer.so.8\n",[82,123491,123492,123494,123496,123498,123501],{"class":84,"line":413},[82,123493,27161],{"class":2384},[82,123495,123466],{"class":96},[82,123497,123469],{"class":88},[82,123499,123500],{"class":96}," libcudnn_adv_train.so.8.9.7",[82,123502,123503],{"class":96}," libcudnn_adv_train.so.8\n",[82,123505,123506,123508,123510,123512,123515],{"class":84,"line":508},[82,123507,27161],{"class":2384},[82,123509,123466],{"class":96},[82,123511,123469],{"class":88},[82,123513,123514],{"class":96}," libcudnn_cnn_infer.so.8.9.7",[82,123516,123517],{"class":96}," libcudnn_cnn_infer.so.8\n",[82,123519,123520,123522,123524,123526,123529],{"class":84,"line":513},[82,123521,27161],{"class":2384},[82,123523,123466],{"class":96},[82,123525,123469],{"class":88},[82,123527,123528],{"class":96}," libcudnn.so.8.9.7",[82,123530,123531],{"class":96}," libcudnn.so.8\n",[82,123533,123534,123536,123538,123540,123543],{"class":84,"line":1388},[82,123535,27161],{"class":2384},[82,123537,123466],{"class":96},[82,123539,123469],{"class":88},[82,123541,123542],{"class":96}," libcudnn_ops_infer.so.8.9.7",[82,123544,123545],{"class":96}," libcudnn_ops_infer.so.8\n",[82,123547,123548,123550,123552,123554,123557],{"class":84,"line":1394},[82,123549,27161],{"class":2384},[82,123551,123466],{"class":96},[82,123553,123469],{"class":88},[82,123555,123556],{"class":96}," libcudnn_ops_train.so.8.9.7",[82,123558,123559],{"class":96}," libcudnn_ops_train.so.8\n",[82,123561,123562],{"class":84,"line":1399},[82,123563,123564],{"class":2828},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[82,123566,123567,123569],{"class":84,"line":1430},[82,123568,27161],{"class":2384},[82,123570,123355],{"class":96},[82,123572,123573],{"class":84,"line":1818},[82,123574,123575],{"class":2828},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[82,123577,123578,123580,123583,123586,123588,123591],{"class":84,"line":2082},[82,123579,29343],{"class":2384},[82,123581,123582],{"class":88}," -l",[82,123584,123585],{"class":96}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[82,123587,3212],{"class":88},[82,123589,123590],{"class":96},".so",[82,123592,121793],{"class":88},[65,123594,123596],{"id":123595},"_355-常见问题","3.5.5 常见问题",[26,123598,123599],{},[29,123600,123601],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[73,123603,123605],{"className":121068,"code":123604,"language":121070,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[32,123606,123607],{"__ignoreMap":78},[82,123608,123609,123611,123613],{"class":84,"line":85},[82,123610,27161],{"class":2384},[82,123612,121128],{"class":96},[82,123614,123615],{"class":96}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123617,123618],{},"blacklist-nouveau.conf文件内容如下：",[73,123620,123622],{"className":121068,"code":123621,"language":121070,"meta":78,"style":78},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[32,123623,123624,123632,123639,123651,123661],{"__ignoreMap":78},[82,123625,123626,123629],{"class":84,"line":85},[82,123627,123628],{"class":2384},"blacklist",[82,123630,123631],{"class":96}," nouveau\n",[82,123633,123634,123636],{"class":84,"line":157},[82,123635,123628],{"class":2384},[82,123637,123638],{"class":96}," lbm-nouveau\n",[82,123640,123641,123643,123646,123649],{"class":84,"line":404},[82,123642,118475],{"class":2384},[82,123644,123645],{"class":96}," nouveau",[82,123647,123648],{"class":96}," modeset=",[82,123650,5683],{"class":88},[82,123652,123653,123656,123658],{"class":84,"line":413},[82,123654,123655],{"class":88},"alias",[82,123657,123645],{"class":96},[82,123659,123660],{"class":96}," off\n",[82,123662,123663,123665,123668],{"class":84,"line":508},[82,123664,123655],{"class":88},[82,123666,123667],{"class":96}," lbm-nouveau",[82,123669,123660],{"class":96},[19,123671,123672],{},"接着运行下方命令",[73,123674,123676],{"className":121068,"code":123675,"language":121070,"meta":78,"style":78},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[32,123677,123678,123688,123693],{"__ignoreMap":78},[82,123679,123680,123682,123685],{"class":84,"line":85},[82,123681,27161],{"class":2384},[82,123683,123684],{"class":96}," update-initramfs",[82,123686,123687],{"class":88}," -u\n",[82,123689,123690],{"class":84,"line":157},[82,123691,123692],{"class":2384},"或者\n",[82,123694,123695,123697,123700],{"class":84,"line":404},[82,123696,27161],{"class":2384},[82,123698,123699],{"class":96}," dracut",[82,123701,123702],{"class":88}," --force\n",[19,123704,123705],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[73,123707,123709],{"className":121068,"code":123708,"language":121070,"meta":78,"style":78},"lsmod | grep nouveau\n",[32,123710,123711],{"__ignoreMap":78},[82,123712,123713,123716,123718,123720],{"class":84,"line":85},[82,123714,123715],{"class":2384},"lsmod",[82,123717,27694],{"class":112},[82,123719,32817],{"class":2384},[82,123721,123631],{"class":96},[26,123723,123724],{"start":157},[29,123725,123726],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[73,123728,123730],{"className":121068,"code":123729,"language":121070,"meta":78,"style":78},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[32,123731,123732],{"__ignoreMap":78},[82,123733,123734,123736,123738],{"class":84,"line":85},[82,123735,27161],{"class":2384},[82,123737,121128],{"class":96},[82,123739,123740],{"class":96}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123742,123743],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[73,123745,123747],{"className":121068,"code":123746,"language":121070,"meta":78,"style":78},"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",[32,123748,123749,123757,123765,123773,123780,123788,123798,123806],{"__ignoreMap":78},[82,123750,123751,123754],{"class":84,"line":85},[82,123752,123753],{"class":2384},"Section",[82,123755,123756],{"class":96}," \"OutputClass\"\n",[82,123758,123759,123762],{"class":84,"line":157},[82,123760,123761],{"class":2384},"   Identifier",[82,123763,123764],{"class":96}," \"nvidia\"\n",[82,123766,123767,123770],{"class":84,"line":404},[82,123768,123769],{"class":2384},"   MatchDriver",[82,123771,123772],{"class":96}," \"nvidia-drm\"\n",[82,123774,123775,123778],{"class":84,"line":413},[82,123776,123777],{"class":2384},"   Driver",[82,123779,123764],{"class":96},[82,123781,123782,123785],{"class":84,"line":508},[82,123783,123784],{"class":2384},"   Option",[82,123786,123787],{"class":96}," \"AllowEmptyInitialConfiguration\"\n",[82,123789,123790,123792,123795],{"class":84,"line":513},[82,123791,123784],{"class":2384},[82,123793,123794],{"class":96}," \"PrimaryGPU\"",[82,123796,123797],{"class":96}," \"yes\"\n",[82,123799,123800,123803],{"class":84,"line":1388},[82,123801,123802],{"class":2384},"   ModulePath",[82,123804,123805],{"class":96}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[82,123807,123808],{"class":84,"line":1394},[82,123809,123810],{"class":2384},"EndSection\n",[26,123812,123813],{"start":404},[29,123814,123815],{},"安装N卡驱动提示错误",[73,123817,123819],{"className":123361,"code":123818,"language":123363,"meta":123364,"style":78},"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",[32,123820,123821],{"__ignoreMap":78},[82,123822,123823],{"class":84,"line":85},[82,123824,123818],{},[26,123826,123827],{},[29,123828,123829],{},"检查当前运行的内核版本：",[19,123831,123832],{},"运行以下命令以查看你当前正在使用的内核版本：",[73,123834,123836],{"className":119841,"code":123835,"language":119843,"meta":78,"style":78},"uname -r\n",[32,123837,123838],{"__ignoreMap":78},[82,123839,123840,123842],{"class":84,"line":85},[82,123841,72760],{"class":2384},[82,123843,123844],{"class":88}," -r\n",[26,123846,123847],{"start":157},[29,123848,123849],{},"安装内核开发文件：",[19,123851,123852,123853,123856],{},"确保你已经安装了与当前内核版本相匹配的 ",[32,123854,123855],{},"kernel-devel"," 包。运行以下命令来安装：",[73,123858,123860],{"className":119841,"code":123859,"language":119843,"meta":78,"style":78},"sudo dnf install kernel-devel-$(uname -r)\n",[32,123861,123862],{"__ignoreMap":78},[82,123863,123864,123866,123868,123870,123873,123875,123877,123879],{"class":84,"line":85},[82,123865,27161],{"class":2384},[82,123867,28897],{"class":96},[82,123869,26418],{"class":96},[82,123871,123872],{"class":96}," kernel-devel-",[82,123874,27684],{"class":92},[82,123876,72760],{"class":2384},[82,123878,122184],{"class":88},[82,123880,119],{"class":92},[19,123882,123883],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,123885,123886],{"start":404},[29,123887,123888],{},"安装内核源代码（如果需要）：",[19,123890,123891],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[73,123893,123895],{"className":119841,"code":123894,"language":119843,"meta":78,"style":78},"sudo dnf install kernel-headers kernel-source\n",[32,123896,123897],{"__ignoreMap":78},[82,123898,123899,123901,123903,123905,123908],{"class":84,"line":85},[82,123900,27161],{"class":2384},[82,123902,28897],{"class":96},[82,123904,26418],{"class":96},[82,123906,123907],{"class":96}," kernel-headers",[82,123909,123910],{"class":96}," kernel-source\n",[26,123912,123913],{"start":413},[29,123914,123915],{},"检查安装：",[19,123917,123918,123919,123922],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[32,123920,123921],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[73,123924,123926],{"className":119841,"code":123925,"language":119843,"meta":78,"style":78},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[32,123927,123928],{"__ignoreMap":78},[82,123929,123930,123932],{"class":84,"line":85},[82,123931,29343],{"class":2384},[82,123933,123934],{"class":96}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123936,123937,123938,123941],{},"如果仍然遇到问题，可以通过 ",[32,123939,123940],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2671,123943,123944],{},"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":78,"searchDepth":157,"depth":157,"links":123946},[123947,123951,123961,123965,123966],{"id":121044,"depth":157,"text":121045,"children":123948},[123949,123950],{"id":121054,"depth":404,"text":121055},{"id":121064,"depth":404,"text":121065},{"id":121264,"depth":157,"text":121265,"children":123952},[123953,123954,123955,123956,123957,123958,123959,123960],{"id":121268,"depth":404,"text":121269},{"id":121338,"depth":404,"text":121339},{"id":121427,"depth":404,"text":121428},{"id":121672,"depth":404,"text":121673},{"id":121742,"depth":404,"text":121743},{"id":121809,"depth":404,"text":121810},{"id":121844,"depth":404,"text":121845},{"id":121899,"depth":404,"text":121900},{"id":121950,"depth":157,"text":121951,"children":123962},[123963,123964],{"id":121954,"depth":404,"text":121955},{"id":122034,"depth":404,"text":122035},{"id":122220,"depth":157,"text":122221},{"id":122393,"depth":157,"text":122394,"children":123967},[123968,123969,123970,123971,123972],{"id":122397,"depth":404,"text":122398},{"id":122438,"depth":404,"text":122439},{"id":122725,"depth":404,"text":122726},{"id":123099,"depth":404,"text":123100},{"id":123595,"depth":404,"text":123596},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121036,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123979,"title":123980,"body":123981,"description":2699,"extension":2700,"meta":124321,"navigation":485,"path":124322,"seo":124323,"stem":124324,"__hash__":124325},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123982,"toc":124319},[123983,123986,123991,123994,124240,124245,124248,124284,124287,124316],[10,123984,123980],{"id":123985},"_4-命令教程长期积累",[26,123987,123988],{},[29,123989,123990],{},"大多数命令",[19,123992,123993],{},"常用 Linux 命令速查：",[73,123995,123997],{"className":119841,"code":123996,"language":119843,"meta":78,"style":78},"# 文件与目录\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",[32,123998,123999,124004,124011,124018,124026,124033,124040,124048,124056,124063,124070,124078,124082,124087,124094,124102,124109,124113,124118,124125,124133,124141,124149,124157,124161,124166,124174,124181,124188,124196,124204,124208,124213,124222,124231],{"__ignoreMap":78},[82,124000,124001],{"class":84,"line":85},[82,124002,124003],{"class":2828},"# 文件与目录\n",[82,124005,124006,124008],{"class":84,"line":157},[82,124007,29343],{"class":2384},[82,124009,124010],{"class":2828},"        # 列出目录内容\n",[82,124012,124013,124015],{"class":84,"line":404},[82,124014,103827],{"class":88},[82,124016,124017],{"class":2828},"        # 切换目录\n",[82,124019,124020,124023],{"class":84,"line":413},[82,124021,124022],{"class":88},"pwd",[82,124024,124025],{"class":2828},"       # 显示当前路径\n",[82,124027,124028,124030],{"class":84,"line":508},[82,124029,103817],{"class":2384},[82,124031,124032],{"class":2828},"     # 创建目录\n",[82,124034,124035,124037],{"class":84,"line":513},[82,124036,27906],{"class":2384},[82,124038,124039],{"class":2828},"        # 删除文件或目录\n",[82,124041,124042,124045],{"class":84,"line":1388},[82,124043,124044],{"class":2384},"cp",[82,124046,124047],{"class":2828},"        # 复制文件或目录\n",[82,124049,124050,124053],{"class":84,"line":1394},[82,124051,124052],{"class":2384},"mv",[82,124054,124055],{"class":2828},"        # 移动\u002F重命名文件或目录\n",[82,124057,124058,124060],{"class":84,"line":1399},[82,124059,103834],{"class":2384},[82,124061,124062],{"class":2828},"     # 创建空文件\n",[82,124064,124065,124067],{"class":84,"line":1430},[82,124066,123310],{"class":2384},[82,124068,124069],{"class":2828},"       # 查看文件内容\n",[82,124071,124072,124075],{"class":84,"line":1818},[82,124073,124074],{"class":2384},"head\u002Ftail",[82,124076,124077],{"class":2828}," # 查看文件头部\u002F尾部\n",[82,124079,124080],{"class":84,"line":2082},[82,124081,486],{"emptyLinePlaceholder":485},[82,124083,124084],{"class":84,"line":2233},[82,124085,124086],{"class":2828},"# 权限管理\n",[82,124088,124089,124091],{"class":84,"line":2255},[82,124090,27196],{"class":2384},[82,124092,124093],{"class":2828},"     # 修改文件权限\n",[82,124095,124096,124099],{"class":84,"line":2260},[82,124097,124098],{"class":2384},"chown",[82,124100,124101],{"class":2828},"     # 修改文件所有者\n",[82,124103,124104,124106],{"class":84,"line":2298},[82,124105,27161],{"class":2384},[82,124107,124108],{"class":2828},"      # 以管理员身份执行\n",[82,124110,124111],{"class":84,"line":2303},[82,124112,486],{"emptyLinePlaceholder":485},[82,124114,124115],{"class":84,"line":2321},[82,124116,124117],{"class":2828},"# 系统信息\n",[82,124119,124120,124122],{"class":84,"line":2533},[82,124121,72760],{"class":2384},[82,124123,124124],{"class":2828},"     # 系统信息\n",[82,124126,124127,124130],{"class":84,"line":2538},[82,124128,124129],{"class":2384},"df",[82,124131,124132],{"class":2828},"        # 磁盘使用情况\n",[82,124134,124135,124138],{"class":84,"line":2548},[82,124136,124137],{"class":2384},"free",[82,124139,124140],{"class":2828},"      # 内存使用情况\n",[82,124142,124143,124146],{"class":84,"line":2579},[82,124144,124145],{"class":2384},"top\u002Fhtop",[82,124147,124148],{"class":2828},"  # 进程监控\n",[82,124150,124151,124154],{"class":84,"line":2585},[82,124152,124153],{"class":2384},"ps",[82,124155,124156],{"class":2828},"        # 查看进程\n",[82,124158,124159],{"class":84,"line":4350},[82,124160,486],{"emptyLinePlaceholder":485},[82,124162,124163],{"class":84,"line":4355},[82,124164,124165],{"class":2828},"# 网络\n",[82,124167,124168,124171],{"class":84,"line":4360},[82,124169,124170],{"class":2384},"ping",[82,124172,124173],{"class":2828},"      # 测试网络连通性\n",[82,124175,124176,124178],{"class":84,"line":4365},[82,124177,29431],{"class":2384},[82,124179,124180],{"class":2828},"      # 发送 HTTP 请求\n",[82,124182,124183,124185],{"class":84,"line":4379},[82,124184,122834],{"class":2384},[82,124186,124187],{"class":2828},"      # 下载文件\n",[82,124189,124190,124193],{"class":84,"line":4384},[82,124191,124192],{"class":2384},"ssh",[82,124194,124195],{"class":2828},"       # 远程登录\n",[82,124197,124198,124201],{"class":84,"line":5176},[82,124199,124200],{"class":2384},"scp",[82,124202,124203],{"class":2828},"       # 远程文件传输\n",[82,124205,124206],{"class":84,"line":5190},[82,124207,486],{"emptyLinePlaceholder":485},[82,124209,124210],{"class":84,"line":5198},[82,124211,124212],{"class":2828},"# 包管理（Debian\u002FUbuntu）\n",[82,124214,124215,124217,124219],{"class":84,"line":5203},[82,124216,119913],{"class":2384},[82,124218,119892],{"class":96},[82,124220,124221],{"class":2828},"   # 更新软件源\n",[82,124223,124224,124226,124228],{"class":84,"line":5209},[82,124225,119913],{"class":2384},[82,124227,26418],{"class":96},[82,124229,124230],{"class":2828},"  # 安装软件包\n",[82,124232,124233,124235,124237],{"class":84,"line":5215},[82,124234,119913],{"class":2384},[82,124236,28661],{"class":96},[82,124238,124239],{"class":2828},"   # 卸载软件包\n",[26,124241,124242],{"start":157},[29,124243,124244],{},"KDE Dolphin 以root打开",[19,124246,124247],{},"kde5",[73,124249,124251],{"className":119841,"code":124250,"language":119843,"meta":78,"style":78},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[32,124252,124253],{"__ignoreMap":78},[82,124254,124255,124258,124261,124264,124266,124268,124271,124274,124276,124279,124281],{"class":84,"line":85},[82,124256,124257],{"class":2384},"pkexec",[82,124259,124260],{"class":96}," env",[82,124262,124263],{"class":96}," DISPLAY=",[82,124265,30725],{"class":92},[82,124267,30783],{"class":96},[82,124269,124270],{"class":92},"$XAUTHORITY ",[82,124272,124273],{"class":96},"KDE_SESSION_VERSION=",[82,124275,3077],{"class":88},[82,124277,124278],{"class":96}," KDE_FULL_SESSION=",[82,124280,3978],{"class":88},[82,124282,124283],{"class":96}," dolphin\n",[19,124285,124286],{},"kde6",[73,124288,124290],{"className":119841,"code":124289,"language":119843,"meta":78,"style":78},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[32,124291,124292],{"__ignoreMap":78},[82,124293,124294,124296,124298,124300,124302,124304,124306,124308,124310,124312,124314],{"class":84,"line":85},[82,124295,124257],{"class":2384},[82,124297,124260],{"class":96},[82,124299,124263],{"class":96},[82,124301,30725],{"class":92},[82,124303,30783],{"class":96},[82,124305,124270],{"class":92},[82,124307,124273],{"class":96},[82,124309,3102],{"class":88},[82,124311,124278],{"class":96},[82,124313,3978],{"class":88},[82,124315,124283],{"class":96},[2671,124317,124318],{},"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":78,"searchDepth":157,"depth":157,"links":124320},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123980,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124327,"title":124328,"body":124329,"description":2699,"extension":2700,"meta":124343,"navigation":485,"path":124344,"seo":124345,"stem":124346,"__hash__":124347},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124330,"toc":124341},[124331,124334],[10,124332,124328],{"id":124333},"_5-各种环境配置",[19,124335,124336],{},[323,124337,124340],{"href":124338,"rel":124339},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26449],"电控组环境搭建大全",{"title":78,"searchDepth":157,"depth":157,"links":124342},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124328,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124349,"title":124350,"body":124351,"description":2699,"extension":2700,"meta":124699,"navigation":485,"path":124700,"seo":124701,"stem":124702,"__hash__":124703},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124352,"toc":124691},[124353,124356,124360,124364,124368,124373,124380,124384,124677,124681,124688],[10,124354,124350],{"id":124355},"_6-拓展功能",[14,124357,124359],{"id":124358},"_61-wine","6.1 Wine",[14,124361,124363],{"id":124362},"_62-android","6.2 Android",[65,124365,124367],{"id":124366},"_621-i卡a卡","6.2.1 I卡、A卡",[26,124369,124370],{},[29,124371,124372],{},"Wayland-Waydroid(体验超级好)",[19,124374,124375,124376],{},"Waydroid 官网与安装指南：",[323,124377,124378],{"href":124378,"rel":124379},"https:\u002F\u002Fwaydro.id\u002F",[26449],[65,124381,124383],{"id":124382},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,124385,124386],{},[29,124387,124388,124389,124391,124392,124396,124398,124401,124406,124603],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56276,124390],{},"BlissOS 官网下载：",[323,124393,124394],{"href":124394,"rel":124395},"https:\u002F\u002Fblissos.org\u002F",[26449],[56276,124397],{},[4078,124399],{"alt":78,"src":124400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,124402,124403],{"start":404},[29,124404,124405],{},"比较推荐的配置",[73,124407,124409],{"className":119841,"code":124408,"language":119843,"meta":78,"style":78},"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",[32,124410,124411,124418,124428,124438,124448,124460,124470,124477,124487,124496,124505,124515,124525,124534,124544,124554,124566,124576,124585,124595],{"__ignoreMap":78},[82,124412,124413,124416],{"class":84,"line":85},[82,124414,124415],{"class":2384},"qemu-system-x86_64",[82,124417,27263],{"class":88},[82,124419,124420,124423,124426],{"class":84,"line":157},[82,124421,124422],{"class":88},"        -M",[82,124424,124425],{"class":96}," q35,vmport=off",[82,124427,27263],{"class":88},[82,124429,124430,124433,124436],{"class":84,"line":404},[82,124431,124432],{"class":88},"        -accel",[82,124434,124435],{"class":96}," kvm",[82,124437,27263],{"class":88},[82,124439,124440,124443,124446],{"class":84,"line":413},[82,124441,124442],{"class":88},"        -cpu",[82,124444,124445],{"class":96}," qemu64,+sse3,+sse4.2",[82,124447,27263],{"class":88},[82,124449,124450,124453,124456,124458],{"class":84,"line":508},[82,124451,124452],{"class":88},"        -smp",[82,124454,124455],{"class":96}," 8,cores=",[82,124457,3051],{"class":88},[82,124459,27263],{"class":88},[82,124461,124462,124465,124468],{"class":84,"line":513},[82,124463,124464],{"class":88},"        -m",[82,124466,124467],{"class":96}," 6G",[82,124469,27263],{"class":88},[82,124471,124472,124475],{"class":84,"line":1388},[82,124473,124474],{"class":88},"        -usb",[82,124476,27263],{"class":88},[82,124478,124479,124482,124485],{"class":84,"line":1394},[82,124480,124481],{"class":88},"        -device",[82,124483,124484],{"class":96}," virtio-tablet",[82,124486,27263],{"class":88},[82,124488,124489,124491,124494],{"class":84,"line":1399},[82,124490,124481],{"class":88},[82,124492,124493],{"class":96}," virtio-keyboard",[82,124495,27263],{"class":88},[82,124497,124498,124500,124503],{"class":84,"line":1430},[82,124499,124481],{"class":88},[82,124501,124502],{"class":96}," usb-tablet",[82,124504,27263],{"class":88},[82,124506,124507,124510,124513],{"class":84,"line":1818},[82,124508,124509],{"class":88},"        -bios",[82,124511,124512],{"class":96}," OVMF-pure-efi64.fd",[82,124514,27263],{"class":88},[82,124516,124517,124520,124523],{"class":84,"line":2082},[82,124518,124519],{"class":88},"        -net",[82,124521,124522],{"class":96}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[82,124524,27263],{"class":88},[82,124526,124527,124529,124532],{"class":84,"line":2233},[82,124528,124519],{"class":88},[82,124530,124531],{"class":96}," nic,model=virtio",[82,124533,27263],{"class":88},[82,124535,124536,124539,124542],{"class":84,"line":2255},[82,124537,124538],{"class":88},"        -audio",[82,124540,124541],{"class":96}," sdl,model=hda",[82,124543,27263],{"class":88},[82,124545,124546,124549,124552],{"class":84,"line":2260},[82,124547,124548],{"class":88},"        -display",[82,124550,124551],{"class":96}," sdl,gl=on,show-cursor=on",[82,124553,27263],{"class":88},[82,124555,124556,124558,124561,124564],{"class":84,"line":2298},[82,124557,124481],{"class":88},[82,124559,124560],{"class":96}," virtio-vga-gl,xres=1920,yres=",[82,124562,124563],{"class":88},"1080",[82,124565,27263],{"class":88},[82,124567,124568,124571,124574],{"class":84,"line":2303},[82,124569,124570],{"class":88},"        -drive",[82,124572,124573],{"class":96}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[82,124575,27263],{"class":88},[82,124577,124578,124580,124583],{"class":84,"line":2321},[82,124579,124570],{"class":88},[82,124581,124582],{"class":96}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[82,124584,27263],{"class":88},[82,124586,124587,124590,124593],{"class":84,"line":2533},[82,124588,124589],{"class":88},"        -monitor",[82,124591,124592],{"class":96}," stdio",[82,124594,27263],{"class":88},[82,124596,124597,124600],{"class":84,"line":2538},[82,124598,124599],{"class":88},"        -serial",[82,124601,124602],{"class":96}," none\n",[26,124604,124605],{"start":508},[29,124606,124607,124608],{},"常用操作：",[26,124609,124610,124613,124669],{},[29,124611,124612],{},"全屏：Ctrl+Alt+F",[29,124614,124615,124616,124621],{},"adb调试",[26,124617,124618],{},[29,124619,124620],{},"使Linux与Android用ADB连接。",[73,124622,124624],{"className":119841,"code":124623,"language":119843,"meta":78,"style":78},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[32,124625,124626,124631,124642,124647,124659,124664],{"__ignoreMap":78},[82,124627,124628],{"class":84,"line":85},[82,124629,124630],{"class":2828},"# 连接安卓\n",[82,124632,124633,124636,124639],{"class":84,"line":157},[82,124634,124635],{"class":2384},"adb",[82,124637,124638],{"class":96}," connect",[82,124640,124641],{"class":88}," 127.0.0.1\n",[82,124643,124644],{"class":84,"line":404},[82,124645,124646],{"class":2828},"# 打开shell\n",[82,124648,124649,124651,124653,124656],{"class":84,"line":413},[82,124650,124635],{"class":2384},[82,124652,29465],{"class":88},[82,124654,124655],{"class":96}," 127.0.0.1:5555",[82,124657,124658],{"class":96}," shell\n",[82,124660,124661],{"class":84,"line":508},[82,124662,124663],{"class":2828},"# 使用root权限\n",[82,124665,124666],{"class":84,"line":513},[82,124667,124668],{"class":2384},"su\n",[29,124670,124671,124672],{},"中文输入法",[26,124673,124674],{},[29,124675,124676],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124678,124680],{"id":124679},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124682,124683,124684],{},"rEFInd 官网与文档：",[323,124685,124686],{"href":124686,"rel":124687},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26449],[2671,124689,124690],{},"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":78,"searchDepth":157,"depth":157,"links":124692},[124693,124694,124698],{"id":124358,"depth":157,"text":124359},{"id":124362,"depth":157,"text":124363,"children":124695},[124696,124697],{"id":124366,"depth":404,"text":124367},{"id":124382,"depth":404,"text":124383},{"id":124679,"depth":157,"text":124680},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124350,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124705,"title":124706,"body":124707,"description":2699,"extension":2700,"meta":128005,"navigation":485,"path":128006,"seo":128007,"stem":128008,"__hash__":128009},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124708,"toc":127979},[124709,124712,124716,124719,124726,124976,124979,125051,125054,125058,125062,125067,125070,125073,125076,125081,125084,125087,125090,125095,125098,125103,125106,125109,125114,125117,125122,125125,125129,125133,125136,125141,125144,125158,125161,125164,125173,125176,125185,125188,125191,125200,125203,125212,125215,125218,125227,125230,125233,125248,125251,125254,125263,125268,125271,125274,125283,125286,125295,125298,125307,125310,125319,125324,125327,125335,125340,125343,125352,125355,125363,125368,125371,125380,125383,125386,125390,125393,125398,125401,125406,125420,125425,125430,125441,125446,125452,125457,125472,125477,125480,125485,125490,125495,125503,125508,125515,125520,125531,125536,125539,125543,125546,125549,125554,125557,125576,125581,125584,125593,125598,125601,125623,125626,125656,125659,125664,125667,125681,125686,125705,125708,125711,125716,125728,125733,125738,125741,125746,125749,125764,125767,125772,125777,125781,125786,125826,125829,125833,125838,125844,125849,125852,125859,125864,125871,125874,125877,125884,125898,125901,125961,125964,125978,125990,125993,125996,125999,126063,126066,126069,126072,126092,126095,126100,126107,126111,126114,126118,126123,126128,126132,126135,126138,126180,126185,126188,126210,126225,126227,126232,126244,126304,126306,126308,126362,126364,126366,126372,126377,126380,126385,126389,126392,126454,126459,126462,126464,126468,126480,126562,126564,126566,126620,126626,126628,126632,126637,126639,126644,126648,126668,126703,126707,126710,126713,126716,126723,126726,126738,126741,126756,126759,126778,126826,126829,126846,126849,126863,126868,126871,126880,126895,126907,126945,126950,126959,126964,126969,126995,127004,127008,127012,127017,127020,127024,127028,127033,127036,127041,127044,127049,127052,127057,127060,127064,127069,127072,127077,127080,127084,127089,127092,127097,127100,127105,127108,127112,127117,127120,127125,127128,127133,127136,127140,127145,127148,127153,127156,127161,127164,127169,127172,127177,127180,127185,127188,127192,127197,127200,127205,127212,127216,127221,127224,127229,127232,127236,127241,127244,127247,127250,127253,127256,127260,127263,127273,127278,127283,127305,127310,127315,127322,127326,127331,127334,127337,127342,127345,127348,127351,127354,127357,127360,127363,127366,127369,127372,127375,127378,127383,127388,127393,127398,127403,127408,127413,127416,127420,127423,127427,127432,127437,127442,127447,127451,127457,127465,127470,127473,127478,127493,127496,127501,127535,127550,127553,127608,127634,127646,127649,127658,127661,127676,127681,127684,127690,127695,127698,127703,127706,127711,127716,127723,127726,127741,127744,127779,127784,127792,127830,127833,127836,127841,127844,127849,127860,127894,127899,127902,127911,127916,127922,127925,127930,127939,127944,127947,127950,127955,127963,127966,127971,127976],[10,124710,124706],{"id":124711},"_7-其他操作",[14,124713,124715],{"id":124714},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124717,124718],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124720,124721,124722,124725],{},"进入工控机的硬盘目录，进入",[32,124723,124724],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[73,124727,124731],{"className":124728,"code":124729,"language":124730,"meta":78,"style":78},"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",[32,124732,124733,124741,124752,124759,124766,124778,124785,124797,124808,124819,124826,124833,124840,124852,124864,124871,124883,124895,124902,124914,124926,124938,124949,124956,124967],{"__ignoreMap":78},[82,124734,124735,124738],{"class":84,"line":85},[82,124736,124737],{"class":53863},"network",[82,124739,124740],{"class":92},": \n",[82,124742,124743,124746,124748,124750],{"class":84,"line":157},[82,124744,124745],{"class":53863},"  version",[82,124747,1357],{"class":92},[82,124749,1425],{"class":88},[82,124751,5273],{"class":92},[82,124753,124754,124757],{"class":84,"line":404},[82,124755,124756],{"class":53863},"  wifis",[82,124758,124740],{"class":92},[82,124760,124761,124764],{"class":84,"line":413},[82,124762,124763],{"class":53863},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[82,124765,124740],{"class":92},[82,124767,124768,124771,124773,124776],{"class":84,"line":508},[82,124769,124770],{"class":53863},"      renderer",[82,124772,1357],{"class":92},[82,124774,124775],{"class":96},"NetworkManager",[82,124777,5273],{"class":92},[82,124779,124780,124783],{"class":84,"line":513},[82,124781,124782],{"class":53863},"      match",[82,124784,124740],{"class":92},[82,124786,124787,124790,124792,124795],{"class":84,"line":1388},[82,124788,124789],{"class":53863},"        name",[82,124791,1357],{"class":92},[82,124793,124794],{"class":96},"\"wlan0\"",[82,124796,5273],{"class":92},[82,124798,124799,124802,124804,124806],{"class":84,"line":1394},[82,124800,124801],{"class":53863},"      dhcp4",[82,124803,1357],{"class":92},[82,124805,3978],{"class":88},[82,124807,5273],{"class":92},[82,124809,124810,124813,124815,124817],{"class":84,"line":1399},[82,124811,124812],{"class":53863},"      dhcp6",[82,124814,1357],{"class":92},[82,124816,3978],{"class":88},[82,124818,5273],{"class":92},[82,124820,124821,124824],{"class":84,"line":1430},[82,124822,124823],{"class":53863},"      access-points",[82,124825,124740],{"class":92},[82,124827,124828,124831],{"class":84,"line":1818},[82,124829,124830],{"class":96},"        \"EMIS_Vinci_Robocon_5G\"",[82,124832,124740],{"class":92},[82,124834,124835,124838],{"class":84,"line":2082},[82,124836,124837],{"class":53863},"          auth",[82,124839,124740],{"class":92},[82,124841,124842,124845,124847,124850],{"class":84,"line":2233},[82,124843,124844],{"class":53863},"            key-management",[82,124846,1357],{"class":92},[82,124848,124849],{"class":96},"\"psk\"",[82,124851,5273],{"class":92},[82,124853,124854,124857,124859,124862],{"class":84,"line":2255},[82,124855,124856],{"class":53863},"            password",[82,124858,1357],{"class":92},[82,124860,124861],{"class":96},"\"vinci666\"",[82,124863,5273],{"class":92},[82,124865,124866,124869],{"class":84,"line":2260},[82,124867,124868],{"class":53863},"          networkmanager",[82,124870,124740],{"class":92},[82,124872,124873,124876,124878,124881],{"class":84,"line":2298},[82,124874,124875],{"class":53863},"            uuid",[82,124877,1357],{"class":92},[82,124879,124880],{"class":96},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[82,124882,5273],{"class":92},[82,124884,124885,124888,124890,124893],{"class":84,"line":2303},[82,124886,124887],{"class":53863},"            name",[82,124889,1357],{"class":92},[82,124891,124892],{"class":96},"\"EMIS_Vinci_Robocon_5G\"",[82,124894,5273],{"class":92},[82,124896,124897,124900],{"class":84,"line":2321},[82,124898,124899],{"class":53863},"            passthrough",[82,124901,124740],{"class":92},[82,124903,124904,124907,124909,124912],{"class":84,"line":2533},[82,124905,124906],{"class":53863},"              wifi-security.auth-alg",[82,124908,1357],{"class":92},[82,124910,124911],{"class":96},"\"open\"",[82,124913,5273],{"class":92},[82,124915,124916,124919,124921,124924],{"class":84,"line":2538},[82,124917,124918],{"class":53863},"              ipv6.addr-gen-mode",[82,124920,1357],{"class":92},[82,124922,124923],{"class":96},"\"default\"",[82,124925,5273],{"class":92},[82,124927,124928,124931,124933,124936],{"class":84,"line":2548},[82,124929,124930],{"class":53863},"              ipv6.ip6-privacy",[82,124932,1357],{"class":92},[82,124934,124935],{"class":96},"\"-1\"",[82,124937,5273],{"class":92},[82,124939,124940,124943,124945,124947],{"class":84,"line":2579},[82,124941,124942],{"class":53863},"              proxy._",[82,124944,1357],{"class":92},[82,124946,1793],{"class":96},[82,124948,5273],{"class":92},[82,124950,124951,124954],{"class":84,"line":2585},[82,124952,124953],{"class":53863},"      networkmanager",[82,124955,124740],{"class":92},[82,124957,124958,124961,124963,124965],{"class":84,"line":4350},[82,124959,124960],{"class":53863},"        uuid",[82,124962,1357],{"class":92},[82,124964,124880],{"class":96},[82,124966,5273],{"class":92},[82,124968,124969,124971,124973],{"class":84,"line":4355},[82,124970,124789],{"class":53863},[82,124972,1357],{"class":92},[82,124974,124975],{"class":96},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124977,124978],{},"将其改为新wifi的名和密码：",[73,124980,124982],{"className":124728,"code":124981,"language":124730,"meta":78,"style":78},"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",[32,124983,124984,124990,124999,125005,125012,125021,125029,125035,125041],{"__ignoreMap":78},[82,124985,124986,124988],{"class":84,"line":85},[82,124987,124737],{"class":53863},[82,124989,669],{"class":92},[82,124991,124992,124994,124996],{"class":84,"line":157},[82,124993,124745],{"class":53863},[82,124995,1357],{"class":92},[82,124997,124998],{"class":88},"2\n",[82,125000,125001,125003],{"class":84,"line":404},[82,125002,124756],{"class":53863},[82,125004,669],{"class":92},[82,125006,125007,125010],{"class":84,"line":413},[82,125008,125009],{"class":53863},"    wlan0",[82,125011,669],{"class":92},[82,125013,125014,125016,125018],{"class":84,"line":508},[82,125015,124801],{"class":53863},[82,125017,1357],{"class":92},[82,125019,125020],{"class":88},"true\n",[82,125022,125023,125025,125027],{"class":84,"line":513},[82,125024,124812],{"class":53863},[82,125026,1357],{"class":92},[82,125028,125020],{"class":88},[82,125030,125031,125033],{"class":84,"line":1388},[82,125032,124823],{"class":53863},[82,125034,669],{"class":92},[82,125036,125037,125039],{"class":84,"line":1394},[82,125038,124830],{"class":96},[82,125040,669],{"class":92},[82,125042,125043,125046,125048],{"class":84,"line":1399},[82,125044,125045],{"class":53863},"          password",[82,125047,1357],{"class":92},[82,125049,125050],{"class":96},"\"vinci666\"\n",[19,125052,125053],{},"工控机开机即可连上网。",[14,125055,125057],{"id":125056},"_72-ssh远程开发","7.2 SSH远程开发",[65,125059,125061],{"id":125060},"_721-环境准备","7.2.1 环境准备",[19,125063,125064],{},[2913,125065,125066],{},"1.硬件准备",[19,125068,125069],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,125071,125072],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,125074,125075],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,125077,125078],{},[2913,125079,125080],{},"2.设置固定IP",[19,125082,125083],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,125085,125086],{},"1.进入设置界面",[19,125088,125089],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,125091,125092],{},[4078,125093],{"alt":78,"src":125094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,125096,125097],{},"2.配置所连接的网络",[19,125099,125100],{},[4078,125101],{"alt":78,"src":125102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,125104,125105],{},"3.设置固定IP",[19,125107,125108],{},"查看当前IP地址。",[19,125110,125111],{},[4078,125112],{"alt":78,"src":125113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,125115,125116],{},"设置固定IP。",[19,125118,125119],{},[4078,125120],{"alt":78,"src":125121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,125123,125124],{},"至此，IP配置完毕。",[65,125126,125128],{"id":125127},"_722-环境搭建","7.2.2 环境搭建",[19,125130,125131],{},[2913,125132,28337],{},[19,125134,125135],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,125137,125138],{},[2913,125139,125140],{},"实现",[19,125142,125143],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,125145,125146,125149,125152,125155],{},[29,125147,125148],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,125150,125151],{},"远程主机启动SSH服务；",[29,125153,125154],{},"本地主机登陆远程主机；",[29,125156,125157],{},"实现数据传输。",[19,125159,125160],{},"1.安装SSH客户端与服务端",[19,125162,125163],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[73,125165,125167],{"className":123361,"code":125166,"language":123363,"meta":123364,"style":78}," sudo apt install openssh-server\n",[32,125168,125169],{"__ignoreMap":78},[82,125170,125171],{"class":84,"line":85},[82,125172,125166],{},[19,125174,125175],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[73,125177,125179],{"className":123361,"code":125178,"language":123363,"meta":123364,"style":78},"sudo apt install openssh-client\n",[32,125180,125181],{"__ignoreMap":78},[82,125182,125183],{"class":84,"line":85},[82,125184,125178],{},[19,125186,125187],{},"2.远程主机启动SSH服务",[19,125189,125190],{},"远程主机启动 ssh 服务命令如下：",[73,125192,125194],{"className":123361,"code":125193,"language":123363,"meta":123364,"style":78},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[32,125195,125196],{"__ignoreMap":78},[82,125197,125198],{"class":84,"line":85},[82,125199,125193],{},[19,125201,125202],{},"启动后可使用如下命令查看服务是否正常运行：",[73,125204,125206],{"className":123361,"code":125205,"language":123363,"meta":123364,"style":78},"ps -e | grep ssh\n",[32,125207,125208],{"__ignoreMap":78},[82,125209,125210],{"class":84,"line":85},[82,125211,125205],{},[19,125213,125214],{},"如果启动成功，会包含 sshd 程序。",[19,125216,125217],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[73,125219,125221],{"className":123361,"code":125220,"language":123363,"meta":123364,"style":78},"sudo systemctl enable ssh\n",[32,125222,125223],{"__ignoreMap":78},[82,125224,125225],{"class":84,"line":85},[82,125226,125220],{},[19,125228,125229],{},"3.本地远程登录",[19,125231,125232],{},"登录远程主机可以调用如下命令:",[73,125234,125236],{"className":119841,"code":125235,"language":119843,"meta":78,"style":78},"ssh -X 用户名@ip地址\n",[32,125237,125238],{"__ignoreMap":78},[82,125239,125240,125242,125245],{"class":84,"line":85},[82,125241,124192],{"class":2384},[82,125243,125244],{"class":88}," -X",[82,125246,125247],{"class":96}," 用户名@ip地址\n",[19,125249,125250],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125252,125253],{},"如果退出，可以调用exit命令：",[73,125255,125257],{"className":123361,"code":125256,"language":123363,"meta":123364,"style":78},"exit\n",[32,125258,125259],{"__ignoreMap":78},[82,125260,125261],{"class":84,"line":85},[82,125262,125256],{},[19,125264,125265],{},[2913,125266,125267],{},"4.实现数据传输",[19,125269,125270],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125272,125273],{},"上传文件指令格式如下：",[73,125275,125277],{"className":123361,"code":125276,"language":123363,"meta":123364,"style":78},"scp 本地文件路径 账号@ip:路径\n",[32,125278,125279],{"__ignoreMap":78},[82,125280,125281],{"class":84,"line":85},[82,125282,125276],{},[19,125284,125285],{},"上传文件夹指令格式如下：",[73,125287,125289],{"className":123361,"code":125288,"language":123363,"meta":123364,"style":78},"scp -r 本地文件夹路径 账号@ip:路径\n",[32,125290,125291],{"__ignoreMap":78},[82,125292,125293],{"class":84,"line":85},[82,125294,125288],{},[19,125296,125297],{},"下载文件指令格式如下：",[73,125299,125301],{"className":123361,"code":125300,"language":123363,"meta":123364,"style":78},"scp 账号@ip:路径 本地文件夹路径\n",[32,125302,125303],{"__ignoreMap":78},[82,125304,125305],{"class":84,"line":85},[82,125306,125300],{},[19,125308,125309],{},"下载文件夹指令格式如下：",[73,125311,125313],{"className":123361,"code":125312,"language":123363,"meta":123364,"style":78},"scp -r 账号@ip:路径 本地文件夹路径\n",[32,125314,125315],{"__ignoreMap":78},[82,125316,125317],{"class":84,"line":85},[82,125318,125312],{},[19,125320,125321],{},[2913,125322,125323],{},"优化",[19,125325,125326],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,125328,125329,125332],{},[29,125330,125331],{},"本地生成密钥对；",[29,125333,125334],{},"将公钥上传至远程主机。",[19,125336,125337],{},[2913,125338,125339],{},"1.生成密钥对",[19,125341,125342],{},"本地客户端生成公私钥：（一路回车默认即可）",[73,125344,125346],{"className":123361,"code":125345,"language":123363,"meta":123364,"style":78},"ssh-keygen\n",[32,125347,125348],{"__ignoreMap":78},[82,125349,125350],{"class":84,"line":85},[82,125351,125345],{},[19,125353,125354],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,125356,125357,125360],{},[29,125358,125359],{},"id_rsa （私钥）；",[29,125361,125362],{},"id_rsa.pub (公钥)。",[19,125364,125365],{},[2913,125366,125367],{},"2.公钥上传",[19,125369,125370],{},"上传指令如下：",[73,125372,125374],{"className":123361,"code":125373,"language":123363,"meta":123364,"style":78},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[32,125375,125376],{"__ignoreMap":78},[82,125377,125378],{"class":84,"line":85},[82,125379,125373],{},[19,125381,125382],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125384,125385],{},"以后再远程登录就无需录入密码了。",[65,125387,125389],{"id":125388},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125391,125392],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125394,125395],{},[2913,125396,125397],{},"1.准备工作",[19,125399,125400],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125402,125403],{},[2913,125404,125405],{},"2.为VScode安装远程开发插件",[19,125407,125408,125409,125412,125413,125416,125417,2611],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[32,125410,125411],{},"扩展：商店","的搜索栏输入",[32,125414,125415],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[32,125418,125419],{},"安装",[19,125421,125422],{},[4078,125423],{"alt":78,"src":125424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125426,125427],{},[2913,125428,125429],{},"3.配置远程连接",[19,125431,125432,125433,125436,125437,125440],{},"步骤1：使用快捷键",[32,125434,125435],{},"ctrl + shift + p","打开命令输入窗口，并输入",[32,125438,125439],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125442,125443],{},[4078,125444],{"alt":78,"src":125445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125447,125448,125449,2611],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[32,125450,125451],{},"Add New SSH Host",[19,125453,125454],{},[4078,125455],{"alt":78,"src":125456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125458,125459,125460,125463,125464,125467,125468,125471],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[32,125461,125462],{},"ssh +X ubuntu@192.168.43.164","，其中，",[32,125465,125466],{},"ubuntu","需要替换为你的登录用户名，",[32,125469,125470],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125473,125474],{},[4078,125475],{"alt":78,"src":125476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125478,125479],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125481,125482],{},[4078,125483],{"alt":78,"src":125484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125486,125487],{},[4078,125488],{"alt":78,"src":125489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125491,125492],{},[2913,125493,125494],{},"4.使用",[19,125496,125497,125498,125436,125500,125502],{},"步骤1：继续使用快捷键",[32,125499,125435],{},[32,125501,125439],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125504,125505],{},[4078,125506],{"alt":78,"src":125507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125509,125510,125511,125514],{},"或者，也可以点击侧边栏的",[32,125512,125513],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125516,125517],{},[4078,125518],{"alt":78,"src":125519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125521,125522,125523,125526,125527,125530],{},"步骤2：选择菜单栏的",[32,125524,125525],{},"文件","下的",[32,125528,125529],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125532,125533],{},[4078,125534],{"alt":78,"src":125535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125537,125538],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125540,125542],{"id":125541},"_73-远程桌面","7.3 远程桌面",[19,125544,125545],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125547,125548],{},"我们选择使用VNC来看。",[26,125550,125551],{},[29,125552,125553],{},"安装VNC服务器：",[19,125555,125556],{},"这里以TigerVNC为例进行安装：",[73,125558,125560],{"className":119841,"code":125559,"language":119843,"meta":78,"style":78},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[32,125561,125562],{"__ignoreMap":78},[82,125563,125564,125566,125568,125570,125573],{"class":84,"line":85},[82,125565,27161],{"class":2384},[82,125567,119862],{"class":96},[82,125569,26418],{"class":96},[82,125571,125572],{"class":96}," tigervnc-standalone-server",[82,125574,125575],{"class":96}," tigervnc-common\n",[26,125577,125578],{"start":157},[29,125579,125580],{},"设置VNC密码：",[19,125582,125583],{},"为VNC用户设置密码，运行以下命令：",[73,125585,125587],{"className":119841,"code":125586,"language":119843,"meta":78,"style":78},"vncpasswd\n",[32,125588,125589],{"__ignoreMap":78},[82,125590,125591],{"class":84,"line":85},[82,125592,125586],{"class":2384},[26,125594,125595],{"start":404},[29,125596,125597],{},"配置VNC启动脚本:",[19,125599,125600],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[73,125602,125604],{"className":119841,"code":125603,"language":119843,"meta":78,"style":78},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[32,125605,125606,125615],{"__ignoreMap":78},[82,125607,125608,125610,125612],{"class":84,"line":85},[82,125609,103817],{"class":2384},[82,125611,31797],{"class":88},[82,125613,125614],{"class":96}," ~\u002F.vnc\n",[82,125616,125617,125620],{"class":84,"line":157},[82,125618,125619],{"class":2384},"nano",[82,125621,125622],{"class":96}," ~\u002F.vnc\u002Fxstartup\n",[19,125624,125625],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[73,125627,125629],{"className":119841,"code":125628,"language":119843,"meta":78,"style":78},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[32,125630,125631,125636,125644,125651],{"__ignoreMap":78},[82,125632,125633],{"class":84,"line":85},[82,125634,125635],{"class":2828},"#!\u002Fbin\u002Fsh\n",[82,125637,125638,125641],{"class":84,"line":157},[82,125639,125640],{"class":88},"unset",[82,125642,125643],{"class":96}," SESSION_MANAGER\n",[82,125645,125646,125648],{"class":84,"line":404},[82,125647,125640],{"class":88},[82,125649,125650],{"class":96}," DBUS_SESSION_BUS_ADDRESS\n",[82,125652,125653],{"class":84,"line":413},[82,125654,125655],{"class":2384},"gnome-session\n",[19,125657,125658],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,125660,125661],{"start":413},[29,125662,125663],{},"给予执行权限：",[19,125665,125666],{},"为xstartup文件设置执行权限：",[73,125668,125670],{"className":119841,"code":125669,"language":119843,"meta":78,"style":78},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[32,125671,125672],{"__ignoreMap":78},[82,125673,125674,125676,125679],{"class":84,"line":85},[82,125675,27196],{"class":2384},[82,125677,125678],{"class":96}," +x",[82,125680,125622],{"class":96},[26,125682,125683],{"start":508},[29,125684,125685],{},"启动VNC服务器：",[73,125687,125689],{"className":119841,"code":125688,"language":119843,"meta":78,"style":78},"vncserver -geometry 1920x1080 -localhost=0\n",[32,125690,125691],{"__ignoreMap":78},[82,125692,125693,125696,125699,125702],{"class":84,"line":85},[82,125694,125695],{"class":2384},"vncserver",[82,125697,125698],{"class":88}," -geometry",[82,125700,125701],{"class":96}," 1920x1080",[82,125703,125704],{"class":88}," -localhost=0\n",[19,125706,125707],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125709,125710],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,125712,125713],{"start":513},[29,125714,125715],{},"查看已开启的VNC服务器：",[73,125717,125719],{"className":119841,"code":125718,"language":119843,"meta":78,"style":78},"vncserver -list\n",[32,125720,125721],{"__ignoreMap":78},[82,125722,125723,125725],{"class":84,"line":85},[82,125724,125695],{"class":2384},[82,125726,125727],{"class":88}," -list\n",[19,125729,125730],{},[4078,125731],{"alt":78,"src":125732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,125734,125735],{"start":1388},[29,125736,125737],{},"连接到VNC服务器：",[19,125739,125740],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,125742,125743],{"start":1394},[29,125744,125745],{},"停止VNC服务器：",[19,125747,125748],{},"如果需要停止VNC服务器，可以使用以下命令：",[73,125750,125752],{"className":119841,"code":125751,"language":119843,"meta":78,"style":78},"vncserver -kill :1\n",[32,125753,125754],{"__ignoreMap":78},[82,125755,125756,125758,125761],{"class":84,"line":85},[82,125757,125695],{"class":2384},[82,125759,125760],{"class":88}," -kill",[82,125762,125763],{"class":96}," :1\n",[19,125765,125766],{},"将:1替换为你实际使用的显示编号。",[19,125768,125769],{},[4078,125770],{"alt":78,"src":125771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125773,125774],{},[4078,125775],{"alt":78,"src":125776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125778,125780],{"id":125779},"_74-usb端口设置","7.4 USB端口设置",[19,125782,125783],{},[2913,125784,125785],{},"首先先配置好权限",[73,125787,125789],{"className":119841,"code":125788,"language":119843,"meta":78,"style":78},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[32,125790,125791,125796,125809,125816,125821],{"__ignoreMap":78},[82,125792,125793],{"class":84,"line":85},[82,125794,125795],{"class":2828},"# 将用户权限提高\n",[82,125797,125798,125800,125802,125804,125807],{"class":84,"line":157},[82,125799,27161],{"class":2384},[82,125801,29156],{"class":96},[82,125803,29159],{"class":88},[82,125805,125806],{"class":96}," dialout",[82,125808,29164],{"class":92},[82,125810,125811,125813],{"class":84,"line":404},[82,125812,29183],{"class":2384},[82,125814,125815],{"class":96}," dialout\n",[82,125817,125818],{"class":84,"line":413},[82,125819,125820],{"class":2828},"# 查看下面命令是否输出dialout（若输出才正常）\n",[82,125822,125823],{"class":84,"line":508},[82,125824,125825],{"class":2384},"groups\n",[19,125827,125828],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[65,125830,125832],{"id":125831},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125834,125835,125837],{},[2913,125836,2091],{}," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125839,125840,125843],{},[2913,125841,125842],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125845,125846],{},[2913,125847,125848],{},"流程如下：",[19,125850,125851],{},"（1）.查找设备idVendor和idProduct",[19,125853,125854,125855,125858],{},"接入两个USB设备，在终端调用指令",[32,125856,125857],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125860,125861],{},[4078,125862],{"alt":78,"src":125863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125865,125866,125867,125870],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[32,125868,125869],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125872,125873],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125875,125876],{},"（2）.编写映射规则",[19,125878,125879,125880,125883],{},"在",[32,125881,125882],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[73,125885,125887],{"className":119841,"code":125886,"language":119843,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[32,125888,125889],{"__ignoreMap":78},[82,125890,125891,125893,125895],{"class":84,"line":85},[82,125892,27161],{"class":2384},[82,125894,121128],{"class":96},[82,125896,125897],{"class":96}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125899,125900],{},"输入如下内容：",[73,125902,125904],{"className":119841,"code":125903,"language":119843,"meta":78,"style":78},"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",[32,125905,125906,125936],{"__ignoreMap":78},[82,125907,125908,125911,125913,125916,125919,125922,125925,125927,125930,125933],{"class":84,"line":85},[82,125909,125910],{"class":92},"KERNEL",[82,125912,113],{"class":112},[82,125914,125915],{"class":96},"=\"ttyUSB*\",",[82,125917,125918],{"class":2384}," ATTRS",[82,125920,125921],{"class":96},"{idVendor}==",[82,125923,125924],{"class":2384},"\"10c4\"",[82,125926,3136],{"class":2384},[82,125928,125929],{"class":96}," ATTRS{idProduct}==\"ea60\",",[82,125931,125932],{"class":96}," MODE:=\"0777\",",[82,125934,125935],{"class":96}," SYMLINK+=\"mylidar\"\n",[82,125937,125938,125940,125942,125944,125946,125948,125951,125953,125956,125958],{"class":84,"line":157},[82,125939,125910],{"class":92},[82,125941,113],{"class":112},[82,125943,125915],{"class":96},[82,125945,125918],{"class":2384},[82,125947,125921],{"class":96},[82,125949,125950],{"class":2384},"\"1a86\"",[82,125952,3136],{"class":2384},[82,125954,125955],{"class":96}," ATTRS{idProduct}==\"7523\",",[82,125957,125932],{"class":96},[82,125959,125960],{"class":96}," SYMLINK+=\"mycar\"\n",[19,125962,125963],{},"代码解释：",[3755,125965,125966,125969,125972,125975],{},[29,125967,125968],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,125970,125971],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,125973,125974],{},"SYMLINK是符号连接，即绑定的别名；",[29,125976,125977],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125979,125980,125981,125984,125987],{},"***小提示：***",[26137,125982,125983],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[32,125985,125986],{},"\u002Fetc\u002Fudev\u002Frule.d",[26137,125988,125989],{},"目录即可。",[19,125991,125992],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125994,125995],{},"（3）.使规则生效",[19,125997,125998],{},"在终端下输入如下指令：",[73,126000,126002],{"className":119841,"code":126001,"language":119843,"meta":78,"style":78},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[32,126003,126004,126009,126021,126032,126036,126041,126054],{"__ignoreMap":78},[82,126005,126006],{"class":84,"line":85},[82,126007,126008],{"class":2828},"# Ubuntu用下方命令\n",[82,126010,126011,126013,126015,126018],{"class":84,"line":157},[82,126012,27161],{"class":2384},[82,126014,122593],{"class":96},[82,126016,126017],{"class":96}," udev",[82,126019,126020],{"class":96}," reload\n",[82,126022,126023,126025,126027,126029],{"class":84,"line":404},[82,126024,27161],{"class":2384},[82,126026,122593],{"class":96},[82,126028,126017],{"class":96},[82,126030,126031],{"class":96}," restart\n",[82,126033,126034],{"class":84,"line":413},[82,126035,486],{"emptyLinePlaceholder":485},[82,126037,126038],{"class":84,"line":508},[82,126039,126040],{"class":2828},"#Fedora用下方命令\n",[82,126042,126043,126045,126048,126051],{"class":84,"line":513},[82,126044,27161],{"class":2384},[82,126046,126047],{"class":96}," udevadm",[82,126049,126050],{"class":96}," control",[82,126052,126053],{"class":88}," --reload\n",[82,126055,126056,126058,126060],{"class":84,"line":1388},[82,126057,27161],{"class":2384},[82,126059,126047],{"class":96},[82,126061,126062],{"class":96}," trigger\n",[19,126064,126065],{},"再重新插拔设备即可。",[19,126067,126068],{},"（4）.测试",[19,126070,126071],{},"终端下输入如下指令",[73,126073,126075],{"className":119841,"code":126074,"language":119843,"meta":78,"style":78},"ll \u002Fdev | grep ttyUSB\n",[32,126076,126077],{"__ignoreMap":78},[82,126078,126079,126082,126085,126087,126089],{"class":84,"line":85},[82,126080,126081],{"class":2384},"ll",[82,126083,126084],{"class":96}," \u002Fdev",[82,126086,27694],{"class":112},[82,126088,32817],{"class":2384},[82,126090,126091],{"class":96}," ttyUSB\n",[19,126093,126094],{},"运行结果如下：",[19,126096,126097],{},[4078,126098],{"alt":78,"src":126099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,126101,126102,126103,126106],{},"也可以多次插拔USB设备，会发现设备端口",[32,126104,126105],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,126108,126109],{},[2913,126110,120509],{},[19,126112,126113],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[65,126115,126117],{"id":126116},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,126119,126120,126122],{},[2913,126121,2091],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,126124,126125,126127],{},[2913,126126,125842],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,126129,126130],{},[2913,126131,125848],{},[19,126133,126134],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,126136,126137],{},"调用如下指令查看第一台雷达的USB信息：",[73,126139,126141],{"className":119841,"code":126140,"language":119843,"meta":78,"style":78},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[32,126142,126143,126163],{"__ignoreMap":78},[82,126144,126145,126148,126150,126153,126156,126158,126160],{"class":84,"line":85},[82,126146,126147],{"class":2384},"udevadm",[82,126149,72377],{"class":96},[82,126151,126152],{"class":88}," --attribute-walk",[82,126154,126155],{"class":88}," --name=\u002Fdev\u002FttyUSB0",[82,126157,27694],{"class":112},[82,126159,32817],{"class":2384},[82,126161,126162],{"class":96}," KERNELS\n",[82,126164,126165,126167,126169,126171,126174,126176,126178],{"class":84,"line":157},[82,126166,126147],{"class":2384},[82,126168,72377],{"class":96},[82,126170,126152],{"class":88},[82,126172,126173],{"class":88}," --name=\u002Fdev\u002FttyACM0",[82,126175,27694],{"class":112},[82,126177,32817],{"class":2384},[82,126179,126162],{"class":96},[19,126181,126182],{},[4078,126183],{"alt":78,"src":126184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126186,126187],{},"调用如下指令查看第二台雷达的USB信息：",[73,126189,126191],{"className":119841,"code":126190,"language":119843,"meta":78,"style":78},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[32,126192,126193],{"__ignoreMap":78},[82,126194,126195,126197,126199,126201,126204,126206,126208],{"class":84,"line":85},[82,126196,126147],{"class":2384},[82,126198,72377],{"class":96},[82,126200,126152],{"class":88},[82,126202,126203],{"class":88}," --name=\u002Fdev\u002FttyUSB1",[82,126205,27694],{"class":112},[82,126207,32817],{"class":2384},[82,126209,126162],{"class":96},[19,126211,126212,126213,126216,126217,126220,126221,126224],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[32,126214,126215],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[32,126218,126219],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2913,126222,126223],{},"唯一性标识","”。",[19,126226,125876],{},[19,126228,125879,126229,126231],{},[32,126230,125882],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[73,126233,126234],{"className":119841,"code":125886,"language":119843,"meta":78,"style":78},[32,126235,126236],{"__ignoreMap":78},[82,126237,126238,126240,126242],{"class":84,"line":85},[82,126239,27161],{"class":2384},[82,126241,121128],{"class":96},[82,126243,125897],{"class":96},[73,126245,126247],{"className":119841,"code":126246,"language":119843,"meta":78,"style":78},"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",[32,126248,126249,126278],{"__ignoreMap":78},[82,126250,126251,126253,126255,126257,126260,126262,126265,126268,126270,126273,126275],{"class":84,"line":85},[82,126252,125910],{"class":92},[82,126254,113],{"class":112},[82,126256,125915],{"class":96},[82,126258,126259],{"class":92}," KERNELS",[82,126261,113],{"class":112},[82,126263,126264],{"class":96},"=\"1-1.3:1.0\",",[82,126266,126267],{"class":2384}," MODE:",[82,126269,113],{"class":96},[82,126271,126272],{"class":2384},"\"0777\"",[82,126274,3136],{"class":2384},[82,126276,126277],{"class":96}," SYMLINK+=\"rplidar_front\"\n",[82,126279,126280,126282,126284,126286,126288,126290,126293,126295,126297,126299,126301],{"class":84,"line":157},[82,126281,125910],{"class":92},[82,126283,113],{"class":112},[82,126285,125915],{"class":96},[82,126287,126259],{"class":92},[82,126289,113],{"class":112},[82,126291,126292],{"class":96},"=\"1-1.4:1.0\",",[82,126294,126267],{"class":2384},[82,126296,113],{"class":96},[82,126298,126272],{"class":2384},[82,126300,3136],{"class":2384},[82,126302,126303],{"class":96}," SYMLINK+=\"rplidar_back\"\n",[19,126305,125995],{},[19,126307,125998],{},[73,126309,126310],{"className":119841,"code":126001,"language":119843,"meta":78,"style":78},[32,126311,126312,126316,126326,126336,126340,126344,126354],{"__ignoreMap":78},[82,126313,126314],{"class":84,"line":85},[82,126315,126008],{"class":2828},[82,126317,126318,126320,126322,126324],{"class":84,"line":157},[82,126319,27161],{"class":2384},[82,126321,122593],{"class":96},[82,126323,126017],{"class":96},[82,126325,126020],{"class":96},[82,126327,126328,126330,126332,126334],{"class":84,"line":404},[82,126329,27161],{"class":2384},[82,126331,122593],{"class":96},[82,126333,126017],{"class":96},[82,126335,126031],{"class":96},[82,126337,126338],{"class":84,"line":413},[82,126339,486],{"emptyLinePlaceholder":485},[82,126341,126342],{"class":84,"line":508},[82,126343,126040],{"class":2828},[82,126345,126346,126348,126350,126352],{"class":84,"line":513},[82,126347,27161],{"class":2384},[82,126349,126047],{"class":96},[82,126351,126050],{"class":96},[82,126353,126053],{"class":88},[82,126355,126356,126358,126360],{"class":84,"line":1388},[82,126357,27161],{"class":2384},[82,126359,126047],{"class":96},[82,126361,126062],{"class":96},[19,126363,126065],{},[19,126365,126068],{},[19,126367,126071,126368,126371],{},[32,126369,126370],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126373,126374],{},[4078,126375],{"alt":78,"src":126376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126378,126379],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126381,126382,126384],{},[2913,126383,120509],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[65,126386,126388],{"id":126387},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126390,126391],{},"（1）.查看所连接的主机USB接口的信息",[73,126393,126395],{"className":119841,"code":126394,"language":119843,"meta":78,"style":78},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[32,126396,126397,126427],{"__ignoreMap":78},[82,126398,126399,126401,126403,126406,126408,126410,126412,126414,126417,126420,126422,126425],{"class":84,"line":85},[82,126400,126147],{"class":2384},[82,126402,72377],{"class":96},[82,126404,126405],{"class":88}," -a",[82,126407,31797],{"class":88},[82,126409,31003],{"class":92},[82,126411,126147],{"class":2384},[82,126413,72377],{"class":96},[82,126415,126416],{"class":88}," -q",[82,126418,126419],{"class":96}," path",[82,126421,27700],{"class":88},[82,126423,126424],{"class":96}," \u002Fdev\u002FttyACM0",[82,126426,119],{"class":92},[82,126428,126429,126431,126433,126435,126437,126439,126441,126443,126445,126447,126449,126452],{"class":84,"line":157},[82,126430,126147],{"class":2384},[82,126432,72377],{"class":96},[82,126434,126405],{"class":88},[82,126436,31797],{"class":88},[82,126438,31003],{"class":92},[82,126440,126147],{"class":2384},[82,126442,72377],{"class":96},[82,126444,126416],{"class":88},[82,126446,126419],{"class":96},[82,126448,27700],{"class":88},[82,126450,126451],{"class":96}," \u002Fdev\u002FttyUSB0",[82,126453,119],{"class":92},[19,126455,126456],{},[4078,126457],{"alt":78,"src":126458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126460,126461],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126463,125876],{},[19,126465,125879,126466,126231],{},[32,126467,125882],{},[73,126469,126470],{"className":119841,"code":125886,"language":119843,"meta":78,"style":78},[32,126471,126472],{"__ignoreMap":78},[82,126473,126474,126476,126478],{"class":84,"line":85},[82,126475,27161],{"class":2384},[82,126477,121128],{"class":96},[82,126479,125897],{"class":96},[73,126481,126483],{"className":119841,"code":126482,"language":119843,"meta":78,"style":78},"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",[32,126484,126485,126513,126539],{"__ignoreMap":78},[82,126486,126487,126489,126491,126494,126496,126498,126500,126502,126505,126508,126510],{"class":84,"line":85},[82,126488,125910],{"class":92},[82,126490,113],{"class":112},[82,126492,126493],{"class":96},"=\"ttyACM*\",",[82,126495,125918],{"class":2384},[82,126497,125921],{"class":96},[82,126499,125950],{"class":2384},[82,126501,3136],{"class":2384},[82,126503,126504],{"class":96}," ATTRS{idProduct}==\"55d4\",",[82,126506,126507],{"class":96}," ATTRS{serial}==\"0001\",",[82,126509,125932],{"class":96},[82,126511,126512],{"class":96}," SYMLINK+=\"ttyACM_MCU\"\n",[82,126514,126515,126517,126519,126521,126523,126525,126527,126529,126531,126534,126536],{"class":84,"line":157},[82,126516,125910],{"class":92},[82,126518,113],{"class":112},[82,126520,126493],{"class":96},[82,126522,125918],{"class":2384},[82,126524,125921],{"class":96},[82,126526,125950],{"class":2384},[82,126528,3136],{"class":2384},[82,126530,126504],{"class":96},[82,126532,126533],{"class":96}," ATTRS{serial}==\"0002\",",[82,126535,125932],{"class":96},[82,126537,126538],{"class":96}," SYMLINK+=\"ttyACM_Lidar\"\n",[82,126540,126541,126543,126545,126547,126549,126551,126553,126555,126557,126559],{"class":84,"line":404},[82,126542,125910],{"class":92},[82,126544,113],{"class":112},[82,126546,125915],{"class":96},[82,126548,125918],{"class":2384},[82,126550,125921],{"class":96},[82,126552,125950],{"class":2384},[82,126554,3136],{"class":2384},[82,126556,125955],{"class":96},[82,126558,125932],{"class":96},[82,126560,126561],{"class":96}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126563,125995],{},[19,126565,125998],{},[73,126567,126568],{"className":119841,"code":126001,"language":119843,"meta":78,"style":78},[32,126569,126570,126574,126584,126594,126598,126602,126612],{"__ignoreMap":78},[82,126571,126572],{"class":84,"line":85},[82,126573,126008],{"class":2828},[82,126575,126576,126578,126580,126582],{"class":84,"line":157},[82,126577,27161],{"class":2384},[82,126579,122593],{"class":96},[82,126581,126017],{"class":96},[82,126583,126020],{"class":96},[82,126585,126586,126588,126590,126592],{"class":84,"line":404},[82,126587,27161],{"class":2384},[82,126589,122593],{"class":96},[82,126591,126017],{"class":96},[82,126593,126031],{"class":96},[82,126595,126596],{"class":84,"line":413},[82,126597,486],{"emptyLinePlaceholder":485},[82,126599,126600],{"class":84,"line":508},[82,126601,126040],{"class":2828},[82,126603,126604,126606,126608,126610],{"class":84,"line":513},[82,126605,27161],{"class":2384},[82,126607,126047],{"class":96},[82,126609,126050],{"class":96},[82,126611,126053],{"class":88},[82,126613,126614,126616,126618],{"class":84,"line":1388},[82,126615,27161],{"class":2384},[82,126617,126047],{"class":96},[82,126619,126062],{"class":96},[19,126621,126622,126623],{},"再重新插拔设备即可，或者 ",[2913,126624,126625],{},"直接重启系统。",[19,126627,126068],{},[19,126629,126071,126630,126371],{},[32,126631,126370],{},[19,126633,126634],{},[4078,126635],{"alt":78,"src":126636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126638,126379],{},[19,126640,126641,126643],{},[2913,126642,120509],{}," 一些设备可能没有串口号等。",[65,126645,126647],{"id":126646},"_744-其他注意事项","7.4.4 其他注意事项",[19,126649,126650,126651,126653,126654,126657,126658,20994,126661,126664,126665,126667],{},"并非所有的USB设备端口号都是",[32,126652,126105],{},"的格式，比如Arduino的端口号可能是",[32,126655,126656],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[32,126659,126660],{},"videon",[32,126662,126663],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[32,126666,126660],{},"端口，绑定时需要关联的也是该接口。",[19,126669,126670,126671,126674,126675,126678,126679,126681,126682,126685,126686,126689,126690,126693,126694,126693,126697,126693,126700,2611],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[32,126672,126673],{},"KERNEL==\"ttyUSB*\"","修改为",[32,126676,126677],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[32,126680,126673],{},"修改为类似于",[32,126683,126684],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[32,126687,126688],{},"video[0,2,4,6]","表示可以绑定的端口为",[32,126691,126692],{},"video0","或",[32,126695,126696],{},"video2",[32,126698,126699],{},"video4",[32,126701,126702],{},"video6",[14,126704,126706],{"id":126705},"_75-挂载内网网页","7.5 挂载内网网页",[19,126708,126709],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126711,126712],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126714,126715],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126717,126718,126719],{},"Termux 下载地址（F-Droid）：",[323,126720,126721],{"href":126721,"rel":126722},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26449],[19,126724,126725],{},"首先打开app后，先更新软件缓存：",[73,126727,126729],{"className":119841,"code":126728,"language":119843,"meta":78,"style":78},"pkg update\n",[32,126730,126731],{"__ignoreMap":78},[82,126732,126733,126736],{"class":84,"line":85},[82,126734,126735],{"class":2384},"pkg",[82,126737,28824],{"class":96},[19,126739,126740],{},"然后换源",[73,126742,126744],{"className":119841,"code":126743,"language":119843,"meta":78,"style":78},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[32,126745,126746],{"__ignoreMap":78},[82,126747,126748,126750,126753],{"class":84,"line":85},[82,126749,125619],{"class":2384},[82,126751,126752],{"class":92}," $PREFIX",[82,126754,126755],{"class":96},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126757,126758],{},"将该文件内容替换为下面：",[73,126760,126762],{"className":119841,"code":126761,"language":119843,"meta":78,"style":78},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[32,126763,126764],{"__ignoreMap":78},[82,126765,126766,126769,126772,126775],{"class":84,"line":85},[82,126767,126768],{"class":2384},"deb",[82,126770,126771],{"class":96}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[82,126773,126774],{"class":96}," stable",[82,126776,126777],{"class":96}," main\n",[3755,126779,126780,126807],{},[29,126781,126782,126783,126785,126786],{},"如果你使用的是",[32,126784,125619],{},"编辑器：",[3755,126787,126788,126795,126801],{},[29,126789,126790,126791,126794],{},"按 ",[32,126792,126793],{},"Ctrl+O"," 保存文件。",[29,126796,126790,126797,126800],{},[32,126798,126799],{},"Enter"," 确认文件名。",[29,126802,126790,126803,126806],{},[32,126804,126805],{},"Ctrl+X"," 退出编辑器。",[29,126808,126782,126809,126785,126812],{},[32,126810,126811],{},"vim",[3755,126813,126814,126820],{},[29,126815,126790,126816,126819],{},[32,126817,126818],{},"Esc"," 退出编辑模式。",[29,126821,126822,126823,126825],{},"输入 ",[32,126824,121766],{}," 保存并退出。",[19,126827,126828],{},"接下来重新更新软件源：",[73,126830,126832],{"className":119841,"code":126831,"language":119843,"meta":78,"style":78},"pkg update && pkg upgrade\n",[32,126833,126834],{"__ignoreMap":78},[82,126835,126836,126838,126840,126842,126844],{"class":84,"line":85},[82,126837,126735],{"class":2384},[82,126839,119892],{"class":96},[82,126841,28772],{"class":92},[82,126843,126735],{"class":2384},[82,126845,119878],{"class":96},[19,126847,126848],{},"安装python：",[73,126850,126852],{"className":119841,"code":126851,"language":119843,"meta":78,"style":78},"pkg install python\n",[32,126853,126854],{"__ignoreMap":78},[82,126855,126856,126858,126860],{"class":84,"line":85},[82,126857,126735],{"class":2384},[82,126859,26418],{"class":96},[82,126861,126862],{"class":96}," python\n",[19,126864,126865,29055],{},[2913,126866,126867],{},"通过Termux访问设备存储",[19,126869,126870],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[73,126872,126874],{"className":119841,"code":126873,"language":119843,"meta":78,"style":78},"termux-setup-storage\n",[32,126875,126876],{"__ignoreMap":78},[82,126877,126878],{"class":84,"line":85},[82,126879,126873],{"class":2384},[26,126881,126882],{},[29,126883,126884,29055,126887],{},[2913,126885,126886],{},"进入HTML文件所在的目录",[26,126888,126889],{},[29,126890,126891,126892,126894],{},"使用",[32,126893,103827],{},"命令进入HTML文件所在的目录：",[73,126896,126898],{"className":119841,"code":126897,"language":119843,"meta":78,"style":78},"cd ~\u002Fyour_html_folder\n",[32,126899,126900],{"__ignoreMap":78},[82,126901,126902,126904],{"class":84,"line":85},[82,126903,103827],{"class":88},[82,126905,126906],{"class":96}," ~\u002Fyour_html_folder\n",[26,126908,126909],{"start":157},[29,126910,126911,29055,126914,126919,126936],{},[2913,126912,126913],{},"启动Python HTTP服务器",[26,126915,126916],{},[29,126917,126918],{},"运行以下命令启动一个简单的HTTP服务器：",[73,126920,126922],{"className":119841,"code":126921,"language":119843,"meta":78,"style":78},"python -m http.server 8000\n",[32,126923,126924],{"__ignoreMap":78},[82,126925,126926,126928,126930,126933],{"class":84,"line":85},[82,126927,77],{"class":2384},[82,126929,103433],{"class":88},[82,126931,126932],{"class":96}," http.server",[82,126934,126935],{"class":88}," 8000\n",[26,126937,126938],{"start":404},[29,126939,126940,126941,126944],{},"这会在端口",[32,126942,126943],{},"8000","上启动一个Web服务器。",[3755,126946,126947],{},[29,126948,126949],{},"启动服务器后，Termux会显示日志信息，例如：",[73,126951,126953],{"className":123361,"code":126952,"language":123363,"meta":123364,"style":78},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[32,126954,126955],{"__ignoreMap":78},[82,126956,126957],{"class":84,"line":85},[82,126958,126952],{},[3755,126960,126961],{},[29,126962,126963],{},"这表示服务器已成功启动。",[19,126965,126966],{},[2913,126967,126968],{},"在浏览器中访问HTML文件",[26,126970,126971],{},[29,126972,126973,29055,126976,126981],{},[2913,126974,126975],{},"在同一设备上访问",[26,126977,126978],{},[29,126979,126980],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[73,126982,126985],{"className":126983,"code":126984,"language":74220,"meta":78,"style":78},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[32,126986,126987],{"__ignoreMap":78},[82,126988,126989,126992],{"class":84,"line":85},[82,126990,126991],{"class":92},"http:",[82,126993,126994],{"class":2828},"\u002F\u002Flocalhost:8000\n",[3755,126996,126997],{},[29,126998,126999,127000,127003],{},"如果HTML文件中有",[32,127001,127002],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,127005,127007],{"id":127006},"_76-linux重点知识","7.6 Linux重点知识",[65,127009,127011],{"id":127010},"_761-关于点的说明","7.6.1 关于点的说明",[19,127013,127014],{},[4078,127015],{"alt":78,"src":127016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,127018,127019],{},"一点本目录，两点上目录",[65,127021,127023],{"id":127022},"_762-目录","7.6.2 目录",[24582,127025,127027],{"id":127026},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,127029,127030],{},[2913,127031,127032],{},"\u002Fboot:",[19,127034,127035],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,127037,127038],{},[2913,127039,127040],{},"\u002Fetc:",[19,127042,127043],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,127045,127046],{},[2913,127047,127048],{},"\u002Flib：",[19,127050,127051],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,127053,127054],{},[2913,127055,127056],{},"\u002Fsys:",[19,127058,127059],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24582,127061,127063],{"id":127062},"_7622-指令集合","7.6.2.2 指令集合",[19,127065,127066],{},[2913,127067,127068],{},"\u002Fbin:",[19,127070,127071],{},"为二进制文件的缩写，存放最经常使用的命令",[19,127073,127074],{},[2913,127075,127076],{},"\u002Fsbin:",[19,127078,127079],{},"只有系统管理员才能使用的程序和指令",[24582,127081,127083],{"id":127082},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,127085,127086],{},[2913,127087,127088],{},"\u002Fdev:",[19,127090,127091],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,127093,127094],{},[2913,127095,127096],{},"\u002Fmedia:",[19,127098,127099],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,127101,127102],{},[2913,127103,127104],{},"\u002Fmnt:",[19,127106,127107],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24582,127109,127111],{"id":127110},"_7624-临时文件","7.6.2.4 临时文件",[19,127113,127114],{},[2913,127115,127116],{},"\u002Frun:",[19,127118,127119],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,127121,127122],{},[2913,127123,127124],{},"\u002Flost+found:",[19,127126,127127],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,127129,127130],{},[2913,127131,127132],{},"\u002Ftmp:",[19,127134,127135],{},"这个目录是用来存放一些临时文件的",[24582,127137,127139],{"id":127138},"_7625-账户","7.6.2.5 账户",[19,127141,127142],{},[2913,127143,127144],{},"\u002Froot：",[19,127146,127147],{},"系统管理员的用户主目录",[19,127149,127150,29055],{},[2913,127151,127152],{},"\u002Fhome",[19,127154,127155],{},"用户的主目录，以用户的账号命名的",[19,127157,127158,29055],{},[2913,127159,127160],{},"\u002Fusr",[19,127162,127163],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127165,127166],{},[2913,127167,127168],{},"\u002Fusr\u002Fbin：",[19,127170,127171],{},"系统用户使用的应用程序与指令",[19,127173,127174],{},[2913,127175,127176],{},"\u002Fusr\u002Fsbin：",[19,127178,127179],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127181,127182],{},[2913,127183,127184],{},"\u002Fusr\u002Fsrc：",[19,127186,127187],{},"内核源代码默认的放置目录",[24582,127189,127191],{"id":127190},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,127193,127194],{},[2913,127195,127196],{},"\u002Fvar：",[19,127198,127199],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,127201,127202],{},[2913,127203,127204],{},"\u002Fproc:",[19,127206,127207,127208,127211],{},"管理 ",[2913,127209,127210],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24582,127213,127215],{"id":127214},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127217,127218],{},[2913,127219,127220],{},"\u002Fopt:",[19,127222,127223],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127225,127226],{},[2913,127227,127228],{},"\u002Fsrv:",[19,127230,127231],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[65,127233,127235],{"id":127234},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127237,127238],{},[4078,127239],{"alt":78,"src":127240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127242,127243],{},"windows-->linux:",[19,127245,127246],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127248,127249],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127251,127252],{},"linux传输文件到windows",[19,127254,127255],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[65,127257,127259],{"id":127258},"_764-易忘知识","7.6.4 易忘知识",[19,127261,127262],{},"操作系统内核查看",[73,127264,127265],{"className":119841,"code":123835,"language":119843,"meta":78,"style":78},[32,127266,127267],{"__ignoreMap":78},[82,127268,127269,127271],{"class":84,"line":85},[82,127270,72760],{"class":2384},[82,127272,123844],{"class":88},[19,127274,127275],{},[4078,127276],{"alt":78,"src":127277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127279,127280],{},[4078,127281],{"alt":78,"src":127282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[73,127284,127286],{"className":119841,"code":127285,"language":119843,"meta":78,"style":78},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[32,127287,127288,127300],{"__ignoreMap":78},[82,127289,127290,127292,127295,127298],{"class":84,"line":85},[82,127291,124052],{"class":2384},[82,127293,127294],{"class":96}," mvtest",[82,127296,127297],{"class":96}," mvtest2",[82,127299,5273],{"class":92},[82,127301,127302],{"class":84,"line":157},[82,127303,127304],{"class":2384},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127306,127307],{},[4078,127308],{"alt":78,"src":127309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127311,127312],{},[4078,127313],{"alt":78,"src":127314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127316,127317,127318,127321],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[32,127319,127320],{},"du -a"," 可以快速查看磁盘使用细节。",[65,127323,127325],{"id":127324},"_765-vim","7.6.5 Vim",[19,127327,127328],{},[4078,127329],{"alt":78,"src":127330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127332,127333],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127335,127336],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127338,127339],{},[2913,127340,127341],{},"1.命令模式：",[19,127343,127344],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127346,127347],{},"x 删除当前光标所在处的字符",[19,127349,127350],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127352,127353],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127355,127356],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127358,127359],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127361,127362],{},"dd 剪切当前行",[19,127364,127365],{},"yy 复制当前行",[19,127367,127368],{},"p 粘贴剪贴板内容到光标下方",[19,127370,127371],{},"P 粘贴剪贴板内容到光标上方",[19,127373,127374],{},"u 撤销上一次操作",[19,127376,127377],{},"ctrl+r 重做上一次操作",[19,127379,127380,127382],{},[313,127381],{}," 保存文件",[19,127384,127385,127387],{},[3398,127386],{}," 退出Vim编辑器",[19,127389,127390,127392],{},[3398,127391],{},"! 强制退出Vim编辑器，不保存修改",[19,127394,127395],{},[2913,127396,127397],{},"2.输入模式：",[19,127399,127400],{},[4078,127401],{"alt":78,"src":127402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127404,127405],{},[2913,127406,127407],{},"3.底线命令模式：",[19,127409,127410],{},[4078,127411],{"alt":78,"src":127412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127414,127415],{},"按下esc可以退出底线命令模式",[65,127417,127419],{"id":127418},"_766-apt","7.6.6 apt",[19,127421,127422],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[65,127424,127426],{"id":127425},"_767-home与root的区别","7.6.7 home与root的区别",[19,127428,127429],{},[4078,127430],{"alt":78,"src":127431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127433,127434],{},[4078,127435],{"alt":78,"src":127436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127438,127439],{},[4078,127440],{"alt":78,"src":127441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127443,127444],{},[4078,127445],{"alt":78,"src":127446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[65,127448,127450],{"id":127449},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127452,127453],{},[323,127454,127455],{"href":127455,"rel":127456},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26449],[26,127458,127459,127462],{},[29,127460,127461],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,127463,127464],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127466,127467],{},[4078,127468],{"alt":78,"src":127469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127471,127472],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127474,127475],{},[4078,127476],{"alt":78,"src":127477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[73,127479,127481],{"className":123361,"code":127480,"language":123363,"meta":123364,"style":78},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[32,127482,127483,127488],{"__ignoreMap":78},[82,127484,127485],{"class":84,"line":85},[82,127486,127487],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[82,127489,127490],{"class":84,"line":157},[82,127491,127492],{},".\u002Fpycharm.sh\n",[19,127494,127495],{},"3️⃣创建.desktop文件",[19,127497,127498],{},[2913,127499,127500],{},"原理：",[3755,127502,127503,127513],{},[29,127504,127505,127506,127512],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2913,127507,127508,127511],{},[32,127509,127510],{},".desktop"," 文件"," 来识别应用。",[29,127514,127515,127517,127518],{},[32,127516,127510],{}," 文件相当于一个“应用注册表”，告诉系统：",[3755,127519,127520,127523,127526,127529,127532],{},[29,127521,127522],{},"应用名字（Name）",[29,127524,127525],{},"图标（Icon）",[29,127527,127528],{},"执行命令（Exec）",[29,127530,127531],{},"分类（Categories）",[29,127533,127534],{},"是否需要终端（Terminal）",[73,127536,127538],{"className":123361,"code":127537,"language":123363,"meta":123364,"style":78},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[32,127539,127540,127545],{"__ignoreMap":78},[82,127541,127542],{"class":84,"line":85},[82,127543,127544],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[82,127546,127547],{"class":84,"line":157},[82,127548,127549],{},"nano pycharm.desktop\n",[19,127551,127552],{},"nano是一个命令行下的编辑器，也可以使用vim",[73,127554,127556],{"className":123361,"code":127555,"language":123363,"meta":123364,"style":78},"[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",[32,127557,127558,127563,127568,127573,127578,127583,127588,127593,127598,127603],{"__ignoreMap":78},[82,127559,127560],{"class":84,"line":85},[82,127561,127562],{},"[Desktop Entry]\n",[82,127564,127565],{"class":84,"line":157},[82,127566,127567],{},"Version=1.0\n",[82,127569,127570],{"class":84,"line":404},[82,127571,127572],{},"Type=Application\n",[82,127574,127575],{"class":84,"line":413},[82,127576,127577],{},"Name=PyCharm\n",[82,127579,127580],{"class":84,"line":508},[82,127581,127582],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[82,127584,127585],{"class":84,"line":513},[82,127586,127587],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[82,127589,127590],{"class":84,"line":1388},[82,127591,127592],{},"Comment=JetBrains PyCharm IDE\n",[82,127594,127595],{"class":84,"line":1394},[82,127596,127597],{},"Categories=Development;IDE;\n",[82,127599,127600],{"class":84,"line":1399},[82,127601,127602],{},"Terminal=false\n",[82,127604,127605],{"class":84,"line":1430},[82,127606,127607],{},"StartupWMClass=jetbrains-pycharm\n",[3755,127609,127610,127616,127622,127628],{},[29,127611,127612,127615],{},[32,127613,127614],{},"Exec"," → 点击图标时执行的命令",[29,127617,127618,127621],{},[32,127619,127620],{},"Icon"," → 显示在菜单和桌面上的图标",[29,127623,127624,127627],{},[32,127625,127626],{},"Terminal=false"," → 不打开终端",[29,127629,127630,127633],{},[32,127631,127632],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127635,127636,127637],"blockquote",{},[19,127638,127639,127640,127642,127643],{},"可以理解成 ",[32,127641,127510],{}," 文件是 Linux 的 ",[2913,127644,127645],{},"快捷方式配置文件",[19,127647,127648],{},"4️⃣设置可执行权限",[73,127650,127652],{"className":123361,"code":127651,"language":123363,"meta":123364,"style":78},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[32,127653,127654],{"__ignoreMap":78},[82,127655,127656],{"class":84,"line":85},[82,127657,127651],{},[19,127659,127660],{},"5️⃣桌面图标启动的话如下：",[73,127662,127664],{"className":123361,"code":127663,"language":123363,"meta":123364,"style":78},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[32,127665,127666,127671],{"__ignoreMap":78},[82,127667,127668],{"class":84,"line":85},[82,127669,127670],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[82,127672,127673],{"class":84,"line":157},[82,127674,127675],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,127677,127678],{"start":404},[29,127679,127680],{},"下载Appimage文件实现软件的安装",[19,127682,127683],{},"1️⃣先下载appimage",[19,127685,127686],{},[323,127687,127688],{"href":127688,"rel":127689},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26449],[19,127691,127692],{},[4078,127693],{"alt":78,"src":127694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127696,127697],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127699,127700],{},[4078,127701],{"alt":78,"src":127702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127704,127705],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127707,127708],{},[4078,127709],{"alt":78,"src":127710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127712,127713],{},[4078,127714],{"alt":78,"src":127715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127717,127718,127719,127722],{},"3️⃣给他们放在",[32,127720,127721],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127724,127725],{},"4️⃣给软件执行权限",[73,127727,127729],{"className":123361,"code":127728,"language":123363,"meta":123364,"style":78},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[32,127730,127731,127736],{"__ignoreMap":78},[82,127732,127733],{"class":84,"line":85},[82,127734,127735],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[82,127737,127738],{"class":84,"line":157},[82,127739,127740],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127742,127743],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[73,127745,127747],{"className":119841,"code":127746,"language":119843,"meta":78,"style":78},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[32,127748,127749,127756,127763,127769],{"__ignoreMap":78},[82,127750,127751,127753],{"class":84,"line":85},[82,127752,103827],{"class":88},[82,127754,127755],{"class":96}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[82,127757,127758,127760],{"class":84,"line":157},[82,127759,103834],{"class":2384},[82,127761,127762],{"class":96}," .\u002Fqqmusic.desktop\n",[82,127764,127765,127767],{"class":84,"line":404},[82,127766,126811],{"class":2384},[82,127768,127762],{"class":96},[82,127770,127771,127773,127775,127777],{"class":84,"line":413},[82,127772,27161],{"class":2384},[82,127774,27164],{"class":96},[82,127776,125678],{"class":96},[82,127778,127762],{"class":96},[19,127780,127781,127783],{},[32,127782,103834],{},"：一个 Linux 命令，主要功能是：",[3755,127785,127786,127789],{},[29,127787,127788],{},"如果文件不存在，就创建一个新的空文件",[29,127790,127791],{},"如果文件已存在，就更新该文件的最后修改时间",[73,127793,127795],{"className":123361,"code":127794,"language":123363,"meta":123364,"style":78},"[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",[32,127796,127797,127801,127806,127811,127816,127820,127825],{"__ignoreMap":78},[82,127798,127799],{"class":84,"line":85},[82,127800,127562],{},[82,127802,127803],{"class":84,"line":157},[82,127804,127805],{},"Name=QQ音乐\n",[82,127807,127808],{"class":84,"line":404},[82,127809,127810],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[82,127812,127813],{"class":84,"line":413},[82,127814,127815],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[82,127817,127818],{"class":84,"line":508},[82,127819,127572],{},[82,127821,127822],{"class":84,"line":513},[82,127823,127824],{},"Categories=Audio;Music;Player;\n",[82,127826,127827],{"class":84,"line":1388},[82,127828,127829],{},"Comment=QQ Music Client for Linux\n",[19,127831,127832],{},"将文件复制进去",[19,127834,127835],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127837,127838],{},[4078,127839],{"alt":78,"src":127840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127842,127843],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127845,127846],{},[4078,127847],{"alt":78,"src":127848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127850,127851,127852,127855,127856,127859],{},"如果你用的不是KDE，那么也可以直接修改",[32,127853,127854],{},"qqmuic.desktop","：在exec的末尾加上",[32,127857,127858],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[73,127861,127863],{"className":123361,"code":127862,"language":123363,"meta":123364,"style":78},"[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",[32,127864,127865,127869,127873,127878,127882,127886,127890],{"__ignoreMap":78},[82,127866,127867],{"class":84,"line":85},[82,127868,127562],{},[82,127870,127871],{"class":84,"line":157},[82,127872,127805],{},[82,127874,127875],{"class":84,"line":404},[82,127876,127877],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[82,127879,127880],{"class":84,"line":413},[82,127881,127815],{},[82,127883,127884],{"class":84,"line":508},[82,127885,127572],{},[82,127887,127888],{"class":84,"line":513},[82,127889,127824],{},[82,127891,127892],{"class":84,"line":1388},[82,127893,127829],{},[19,127895,127896],{},[4078,127897],{"alt":78,"src":127898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127900,127901],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[73,127903,127905],{"className":123361,"code":127904,"language":123363,"meta":123364,"style":78},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[32,127906,127907],{"__ignoreMap":78},[82,127908,127909],{"class":84,"line":85},[82,127910,127904],{},[26,127912,127913],{"start":413},[29,127914,127915],{},"去Flathub上安装软件",[19,127917,127918],{},[323,127919,127920],{"href":127920,"rel":127921},"https:\u002F\u002Fflathub.org\u002F",[26449],[19,127923,127924],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127926,127927],{},[4078,127928],{"alt":78,"src":127929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[73,127931,127933],{"className":123361,"code":127932,"language":123363,"meta":123364,"style":78},"flatpak install flathub com.obsproject.Studio\n",[32,127934,127935],{"__ignoreMap":78},[82,127936,127937],{"class":84,"line":85},[82,127938,127932],{},[19,127940,127941],{},[4078,127942],{"alt":78,"src":127943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127945,127946],{},"2️⃣运行软件",[19,127948,127949],{},"a.官方方式：",[19,127951,127952],{},[4078,127953],{"alt":78,"src":127954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[73,127956,127957],{"className":123361,"code":127932,"language":123363,"meta":123364,"style":78},[32,127958,127959],{"__ignoreMap":78},[82,127960,127961],{"class":84,"line":85},[82,127962,127932],{},[19,127964,127965],{},"b.当普通软件运行：",[19,127967,127968],{},[4078,127969],{"alt":78,"src":127970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127972,127973],{},[4078,127974],{"alt":78,"src":127975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2671,127977,127978],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":78,"searchDepth":157,"depth":157,"links":127980},[127981,127982,127987,127988,127994,127995],{"id":124714,"depth":157,"text":124715},{"id":125056,"depth":157,"text":125057,"children":127983},[127984,127985,127986],{"id":125060,"depth":404,"text":125061},{"id":125127,"depth":404,"text":125128},{"id":125388,"depth":404,"text":125389},{"id":125541,"depth":157,"text":125542},{"id":125779,"depth":157,"text":125780,"children":127989},[127990,127991,127992,127993],{"id":125831,"depth":404,"text":125832},{"id":126116,"depth":404,"text":126117},{"id":126387,"depth":404,"text":126388},{"id":126646,"depth":404,"text":126647},{"id":126705,"depth":157,"text":126706},{"id":127006,"depth":157,"text":127007,"children":127996},[127997,127998,127999,128000,128001,128002,128003,128004],{"id":127010,"depth":404,"text":127011},{"id":127022,"depth":404,"text":127023},{"id":127234,"depth":404,"text":127235},{"id":127258,"depth":404,"text":127259},{"id":127324,"depth":404,"text":127325},{"id":127418,"depth":404,"text":127419},{"id":127425,"depth":404,"text":127426},{"id":127449,"depth":404,"text":127450},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124706,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":128011,"title":128012,"body":128013,"description":2699,"extension":2700,"meta":128017,"navigation":485,"path":128018,"seo":128019,"stem":128020,"__hash__":128021},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128014,"toc":128015},[],{"title":78,"searchDepth":157,"depth":157,"links":128016},[],{"category":32844},"\u002Fwiki\u002F2025-01-27-linux",{"title":128012,"description":2699},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128023,"title":128024,"body":128025,"description":128029,"extension":2700,"meta":128420,"navigation":485,"path":128421,"seo":128422,"stem":128423,"__hash__":128424},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128026,"toc":128418},[128027,128030,128034,128051,128054,128107,128111,128113,128153,128162,128166,128169,128410,128415],[19,128028,128029],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128031,128033],{"id":128032},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,128035,128036,128039,128042,128045,128048],{},[29,128037,128038],{},"ubuntu环境换源",[29,128040,128041],{},"安装cuda",[29,128043,128044],{},"安装miniconda",[29,128046,128047],{},"安装pytorch",[29,128049,128050],{},"安装genesis",[19,128052,128053],{},"参考链接：",[73,128055,128057],{"className":26406,"code":128056,"language":26408,"meta":78,"style":78},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[32,128058,128059],{"__ignoreMap":78},[82,128060,128061,128064,128067,128070,128072,128075,128078,128080,128083,128086,128088,128091,128094,128096,128099,128102,128104],{"class":84,"line":85},[82,128062,128063],{"class":2384},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[82,128065,128066],{"class":96},"=blogdetail",[82,128068,128069],{"class":92},"&sharetype",[82,128071,113],{"class":112},[82,128073,128074],{"class":96},"blogdetail",[82,128076,128077],{"class":92},"&sharerId",[82,128079,113],{"class":112},[82,128081,128082],{"class":96},"144728092",[82,128084,128085],{"class":92},"&sharerefer",[82,128087,113],{"class":112},[82,128089,128090],{"class":96},"PC",[82,128092,128093],{"class":92},"&sharesource",[82,128095,113],{"class":112},[82,128097,128098],{"class":96},"qq_69379513",[82,128100,128101],{"class":92},"&sharefrom",[82,128103,113],{"class":112},[82,128105,128106],{"class":96},"from_link\n",[10,128108,128110],{"id":128109},"_2genesis-报错issue","2.Genesis 报错issue",[19,128112,128053],{},[73,128114,128115],{"className":26406,"code":128056,"language":26408,"meta":78,"style":78},[32,128116,128117],{"__ignoreMap":78},[82,128118,128119,128121,128123,128125,128127,128129,128131,128133,128135,128137,128139,128141,128143,128145,128147,128149,128151],{"class":84,"line":85},[82,128120,128063],{"class":2384},[82,128122,128066],{"class":96},[82,128124,128069],{"class":92},[82,128126,113],{"class":112},[82,128128,128074],{"class":96},[82,128130,128077],{"class":92},[82,128132,113],{"class":112},[82,128134,128082],{"class":96},[82,128136,128085],{"class":92},[82,128138,113],{"class":112},[82,128140,128090],{"class":96},[82,128142,128093],{"class":92},[82,128144,113],{"class":112},[82,128146,128098],{"class":96},[82,128148,128101],{"class":92},[82,128150,113],{"class":112},[82,128152,128106],{"class":96},[73,128154,128156],{"className":26406,"code":128155,"language":26408,"meta":78,"style":78},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[32,128157,128158],{"__ignoreMap":78},[82,128159,128160],{"class":84,"line":85},[82,128161,128155],{"class":2384},[10,128163,128165],{"id":128164},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128167,128168],{},"hello_robot.py",[73,128170,128172],{"className":75,"code":128171,"language":77,"meta":78,"style":78},"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",[32,128173,128174,128180,128195,128199,128211,128223,128227,128240,128244,128263,128273,128283,128297,128301,128305,128310,128314,128324,128331,128345,128352,128362,128367,128371,128389,128394,128398,128405],{"__ignoreMap":78},[82,128175,128176,128178],{"class":84,"line":85},[82,128177,1123],{"class":112},[82,128179,47870],{"class":92},[82,128181,128182,128185,128188,128190,128192],{"class":84,"line":157},[82,128183,128184],{"class":92},"os.environ[",[82,128186,128187],{"class":96},"'PYOPENGL_PLATFORM'",[82,128189,7038],{"class":92},[82,128191,113],{"class":112},[82,128193,128194],{"class":96}," 'glx'\n",[82,128196,128197],{"class":84,"line":404},[82,128198,486],{"emptyLinePlaceholder":485},[82,128200,128201,128203,128206,128208],{"class":84,"line":413},[82,128202,1123],{"class":112},[82,128204,128205],{"class":92}," genesis ",[82,128207,728],{"class":112},[82,128209,128210],{"class":92}," gs\n",[82,128212,128213,128215,128218,128220],{"class":84,"line":508},[82,128214,1117],{"class":112},[82,128216,128217],{"class":92}," pynput ",[82,128219,1123],{"class":112},[82,128221,128222],{"class":92}," keyboard\n",[82,128224,128225],{"class":84,"line":513},[82,128226,486],{"emptyLinePlaceholder":485},[82,128228,128229,128232,128235,128237],{"class":84,"line":1388},[82,128230,128231],{"class":92},"gs.init(",[82,128233,128234],{"class":108},"backend",[82,128236,113],{"class":112},[82,128238,128239],{"class":92},"gs.gpu)\n",[82,128241,128242],{"class":84,"line":1394},[82,128243,486],{"emptyLinePlaceholder":485},[82,128245,128246,128249,128251,128254,128257,128259,128261],{"class":84,"line":1399},[82,128247,128248],{"class":92},"scene ",[82,128250,113],{"class":112},[82,128252,128253],{"class":92}," gs.Scene(",[82,128255,128256],{"class":108},"show_viewer",[82,128258,113],{"class":112},[82,128260,1205],{"class":88},[82,128262,119],{"class":92},[82,128264,128265,128268,128270],{"class":84,"line":1430},[82,128266,128267],{"class":92},"plane ",[82,128269,113],{"class":112},[82,128271,128272],{"class":92}," scene.add_entity(gs.morphs.Plane())\n",[82,128274,128275,128278,128280],{"class":84,"line":1818},[82,128276,128277],{"class":92},"franka ",[82,128279,113],{"class":112},[82,128281,128282],{"class":92}," scene.add_entity(\n",[82,128284,128285,128288,128290,128292,128295],{"class":84,"line":2082},[82,128286,128287],{"class":92},"    gs.morphs.MJCF(",[82,128289,256],{"class":108},[82,128291,113],{"class":112},[82,128293,128294],{"class":96},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[82,128296,40613],{"class":92},[82,128298,128299],{"class":84,"line":2233},[82,128300,119],{"class":92},[82,128302,128303],{"class":84,"line":2255},[82,128304,486],{"emptyLinePlaceholder":485},[82,128306,128307],{"class":84,"line":2260},[82,128308,128309],{"class":92},"scene.build()\n",[82,128311,128312],{"class":84,"line":2298},[82,128313,486],{"emptyLinePlaceholder":485},[82,128315,128316,128318,128321],{"class":84,"line":2303},[82,128317,2381],{"class":112},[82,128319,128320],{"class":2384}," on_press",[82,128322,128323],{"class":92},"(key):\n",[82,128325,128326,128329],{"class":84,"line":2321},[82,128327,128328],{"class":112},"    try",[82,128330,669],{"class":92},[82,128332,128333,128335,128338,128340,128343],{"class":84,"line":2533},[82,128334,5096],{"class":112},[82,128336,128337],{"class":92}," key.char ",[82,128339,5548],{"class":112},[82,128341,128342],{"class":96}," 'q'",[82,128344,669],{"class":92},[82,128346,128347,128349],{"class":84,"line":2538},[82,128348,18317],{"class":112},[82,128350,128351],{"class":88}," False\n",[82,128353,128354,128357,128360],{"class":84,"line":2548},[82,128355,128356],{"class":112},"    except",[82,128358,128359],{"class":88}," AttributeError",[82,128361,669],{"class":92},[82,128363,128364],{"class":84,"line":2579},[82,128365,128366],{"class":112},"        pass\n",[82,128368,128369],{"class":84,"line":2585},[82,128370,486],{"emptyLinePlaceholder":485},[82,128372,128373,128376,128378,128381,128384,128386],{"class":84,"line":4350},[82,128374,128375],{"class":92},"listener ",[82,128377,113],{"class":112},[82,128379,128380],{"class":92}," keyboard.Listener(",[82,128382,128383],{"class":108},"on_press",[82,128385,113],{"class":112},[82,128387,128388],{"class":92},"on_press)\n",[82,128390,128391],{"class":84,"line":4355},[82,128392,128393],{"class":92},"listener.start()\n",[82,128395,128396],{"class":84,"line":4360},[82,128397,486],{"emptyLinePlaceholder":485},[82,128399,128400,128402],{"class":84,"line":4365},[82,128401,111209],{"class":112},[82,128403,128404],{"class":92}," listener.running:\n",[82,128406,128407],{"class":84,"line":4379},[82,128408,128409],{"class":92},"    scene.step()\n",[19,128411,128412],{},[4078,128413],{"alt":78,"src":128414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2671,128416,128417],{},"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":78,"searchDepth":157,"depth":157,"links":128419},[],{"category":25962},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128024,"description":128029},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128426,"title":128427,"body":128428,"description":2699,"extension":2700,"meta":128443,"navigation":485,"path":128444,"seo":128445,"stem":128446,"__hash__":128447},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128429,"toc":128440},[128430,128433,128437],[10,128431,128427],{"id":128432},"_1-基础知识",[14,128434,128436],{"id":128435},"_11-js的组成","1.1 js的组成",[19,128438,128439],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":78,"searchDepth":157,"depth":157,"links":128441},[128442],{"id":128435,"depth":157,"text":128436},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128427,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128449,"title":128450,"body":128451,"description":2699,"extension":2700,"meta":128590,"navigation":485,"path":128591,"seo":128592,"stem":128593,"__hash__":128594},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128452,"toc":128578},[128453,128456,128460,128463,128467,128477,128481,128484,128487,128490,128494,128501,128507,128511,128517,128528,128532,128535,128539,128542,128546,128549,128553,128556,128560,128563,128566,128569,128572,128575],[10,128454,128450],{"id":128455},"_2-vscode必备内容",[14,128457,128459],{"id":128458},"_21-标签分类","2.1 标签分类",[19,128461,128462],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128464,128466],{"id":128465},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128468,128469,128470,128472,128473,128476],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[32,128471,2986],{}," 然后按 ",[32,128474,128475],{},"Tab","，快速自动生成基本结构。",[14,128478,128480],{"id":128479},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128482,128483],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128485,128486],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128488,128489],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128491,128493],{"id":128492},"_24-视图缩放","2.4 视图缩放",[19,128495,128496,128497,128500],{},"缩放视图 ",[32,128498,128499],{},"ctrl+"," 可实现代码增大。",[19,128502,128503,128506],{},[32,128504,128505],{},"ctrl-"," 可实现代码减小。",[14,128508,128510],{"id":128509},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128512,128513,128514,2611],{},"VSCode 新建文件快捷键为 ",[32,128515,128516],{},"ctrl+N",[19,128518,128519,128520,128523,128524,128527],{},"保存快捷键为 ",[32,128521,128522],{},"ctrl+S","，将文本保存为 ",[32,128525,128526],{},".html"," 文件。",[14,128529,128531],{"id":128530},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128533,128534],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128536,128538],{"id":128537},"_27-vscode-icons","2.7 vscode-icons",[19,128540,128541],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128543,128545],{"id":128544},"_28-easy-less","2.8 Easy LESS",[19,128547,128548],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128550,128552],{"id":128551},"_29-会了吧插件","2.9 会了吧插件",[19,128554,128555],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128557,128559],{"id":128558},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128561,128562],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128564,128565],{},"②选定多个相同的单词:ctrl+D",[19,128567,128568],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128570,128571],{},"④全局替换某些单词:ctrl+h",[19,128573,128574],{},"⑤快速定位到某一行:ctrl+g",[19,128576,128577],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":78,"searchDepth":157,"depth":157,"links":128579},[128580,128581,128582,128583,128584,128585,128586,128587,128588,128589],{"id":128458,"depth":157,"text":128459},{"id":128465,"depth":157,"text":128466},{"id":128479,"depth":157,"text":128480},{"id":128492,"depth":157,"text":128493},{"id":128509,"depth":157,"text":128510},{"id":128530,"depth":157,"text":128531},{"id":128537,"depth":157,"text":128538},{"id":128544,"depth":157,"text":128545},{"id":128551,"depth":157,"text":128552},{"id":128558,"depth":157,"text":128559},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128450,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128596,"title":128597,"body":128598,"description":2699,"extension":2700,"meta":128757,"navigation":485,"path":128758,"seo":128759,"stem":128760,"__hash__":128761},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128599,"toc":128749},[128600,128603,128607,128617,128623,128629,128633,128642,128646,128651,128654,128657,128661,128664,128674,128683,128692,128701,128711,128718,128723,128728,128741],[10,128601,128597],{"id":128602},"_3-html文本与容器标签",[14,128604,128606],{"id":128605},"_31-标题标签","3.1 标题标签",[19,128608,128609,128612,128613,128616],{},[32,128610,128611],{},"\u003Ch1>","我是一级标签",[32,128614,128615],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128618,128619,128612,128621],{},[32,128620,128611],{},[32,128622,128615],{},[19,128624,125879,128625,128628],{},[32,128626,128627],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128630,128632],{"id":128631},"_32-段落标签","3.2 段落标签",[19,128634,128635,128638,128639],{},[32,128636,128637],{},"\u003Cp>","....",[32,128640,128641],{},"\u003C\u002Fp>",[14,128643,128645],{"id":128644},"_33-换行标签","3.3 换行标签",[19,128647,128648],{},[32,128649,128650],{},"\u003Cbr \u002F>",[19,128652,128653],{},"具有强制换行的作用",[19,128655,128656],{},"单标签",[14,128658,128660],{"id":128659},"_34-文本格式化标签","3.4 文本格式化标签",[19,128662,128663],{},"提供粗体、斜体和下划线等效果",[19,128665,128666,128667,85093,128670,128673],{},"加粗：",[32,128668,128669],{},"\u003Cstrong>...\u003C\u002Fstrong>",[32,128671,128672],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128675,128676,128677,85093,128680,128673],{},"斜体：",[32,128678,128679],{},"\u003Cem>...\u003C\u002Fem>",[32,128681,128682],{},"\u003Ci>...\u003C\u002Fi>",[19,128684,128685,128686,85093,128689,128673],{},"删除线：",[32,128687,128688],{},"\u003Cdel>...\u003C\u002Fdel>",[32,128690,128691],{},"\u003Cs>...\u003C\u002Fs>",[19,128693,128694,128695,85093,128698,128673],{},"下划线：",[32,128696,128697],{},"\u003Cins>...\u003C\u002Fins>",[32,128699,128700],{},"\u003Cu>...\u003C\u002Fu>",[14,128702,128704,128705,20994,128708,105244],{"id":128703},"_35-div和span标签","3.5 ",[32,128706,128707],{},"\u003Cdiv>",[32,128709,128710],{},"\u003Cspan>",[19,128712,128713,103569,128715,128717],{},[32,128714,128707],{},[32,128716,128710],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128719,128720],{},[32,128721,128722],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128724,128725],{},[32,128726,128727],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128729,128730,128731,128733,128734,128736,128737,128740],{},"两者特点：①",[32,128732,128707],{}," 标签用来布局，但一行通常只放一个 ",[32,128735,128707],{},"。可以理解为一个大盒子，独占一行，在 ",[32,128738,128739],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128742,79803,128743,128745,128746,128748],{},[32,128744,128710],{}," 标签也可用于布局，一行可以放多个 ",[32,128747,128710],{},"，可理解为小盒子。",{"title":78,"searchDepth":157,"depth":157,"links":128750},[128751,128752,128753,128754,128755],{"id":128605,"depth":157,"text":128606},{"id":128631,"depth":157,"text":128632},{"id":128644,"depth":157,"text":128645},{"id":128659,"depth":157,"text":128660},{"id":128703,"depth":157,"text":128756},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128597,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128763,"title":128764,"body":128765,"description":2699,"extension":2700,"meta":128962,"navigation":485,"path":128963,"seo":128964,"stem":128965,"__hash__":128966},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128766,"toc":128954},[128767,128770,128774,128777,128783,128790,128796,128802,128805,128808,128811,128814,128817,128820,128823,128827,128830,128833,128836,128842,128848,128854,128861,128865,128871,128877,128880,128883,128889,128895,128901,128904,128907,128911,128914,128924,128930,128934,128943,128947,128950],[10,128768,128764],{"id":128769},"_4-html图像与链接",[14,128771,128773],{"id":128772},"_41-图像标签","4.1 图像标签",[19,128775,128776],{},"（1）标签",[19,128778,128779,128782],{},[32,128780,128781],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128784,128785,128786,128789],{},"src是",[32,128787,128788],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128791,128792,128793],{},"alt:文本，替换文本。图像不能显示的文字 ",[32,128794,128795],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128797,128798,128799],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[32,128800,128801],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128803,128804],{},"width:像素，设置图像的宽度",[19,128806,128807],{},"height:像素，设置图像的高度",[19,128809,128810],{},"border：像素，设置图像的边框粗细",[19,128812,128813],{},"（2）图像标签属性的注意点：",[19,128815,128816],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128818,128819],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128821,128822],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128824,128826],{"id":128825},"_42-路径注意要点","4.2 路径注意要点：",[19,128828,128829],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128831,128832],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128834,128835],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128837,128838,128839],{},"①同一级路径：图像文件位于HTML文件同一级，如",[32,128840,128841],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128843,128844,128845],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[32,128846,128847],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128849,128850,128851],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[32,128852,128853],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128855,128856,128857,216],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[323,128858,128859],{"href":128859,"rel":128860},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26449],[14,128862,128864],{"id":128863},"_43-超链接标签","4.3 超链接标签",[19,128866,128867,128870],{},[32,128868,128869],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128872,128873,128874],{},"①语法格式：",[32,128875,128876],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128878,128879],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128881,128882],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128884,128885,128886],{},"③链接分类：外部链接：",[32,128887,128888],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128890,128891,128892],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[32,128893,128894],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128896,128897,128898],{},"空链接：如果当时没有确定链接目标时，",[32,128899,128900],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128902,128903],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128905,128906],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128908,128910],{"id":128909},"_44-锚点链接","4.4 锚点链接",[19,128912,128913],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128915,128916,128917,128920,128921],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[32,128918,128919],{},"\u003Ca href=\"#two\">","第二级",[32,128922,128923],{},"\u003C\u002Fa>",[19,128925,128926,128927],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[32,128928,128929],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128931,128933],{"id":128932},"_45-注释标签","4.5 注释标签",[19,128935,128936,128939,128940],{},[32,128937,128938],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[32,128941,128942],{},"ctrl+\u002F",[14,128944,128946],{"id":128945},"_46-特殊字符","4.6 特殊字符",[19,128948,128949],{},"可以实现添加多个空格",[4078,128951],{"style":128952,"src":128953},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":78,"searchDepth":157,"depth":157,"links":128955},[128956,128957,128958,128959,128960,128961],{"id":128772,"depth":157,"text":128773},{"id":128825,"depth":157,"text":128826},{"id":128863,"depth":157,"text":128864},{"id":128909,"depth":157,"text":128910},{"id":128932,"depth":157,"text":128933},{"id":128945,"depth":157,"text":128946},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128764,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128968,"title":128969,"body":128970,"description":2699,"extension":2700,"meta":129263,"navigation":485,"path":129264,"seo":129265,"stem":129266,"__hash__":129267},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128971,"toc":129254},[128972,128975,128979,128982,128985,128988,128991,128994,128997,129000,129003,129006,129026,129032,129036,129039,129042,129045,129048,129051,129054,129058,129061,129064,129067,129070,129083,129088,129091,129094,129109,129112,129115,129118,129121,129124,129128,129131,129138,129141,129144,129147,129150,129153,129159,129162,129165,129171,129174,129177,129180,129186,129189,129192,129206,129213,129216,129219,129226,129235,129238,129241,129244,129248,129251],[10,128973,128969],{"id":128974},"_5-html表格列表与表单",[14,128976,128978],{"id":128977},"_51-表格标签","5.1 表格标签",[19,128980,128981],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128983,128984],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128986,128987],{},"②表格基本语法：",[4078,128989],{"style":128952,"src":128990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128992,128993],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[4078,128995],{"style":128952,"src":128996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128998,128999],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[4078,129001],{"style":128952,"src":129002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,129004,129005],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,129007,129008,129011,129012,129014,129015,129018,129019,129021,129022,129025],{},[32,129009,129010],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[32,129013,129010],{},"内部必须拥有",[32,129016,129017],{},"\u003Ctr>","标签，一般位于第一行，",[32,129020,129010],{},"比",[32,129023,129024],{},"\u003Cth>","范围广",[19,129027,129028,129031],{},[32,129029,129030],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,129033,129035],{"id":129034},"_52-合并单元格","5.2 合并单元格",[19,129037,129038],{},"（1）合并单元格方式：",[19,129040,129041],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,129043,129044],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,129046,129047],{},"（2）目标单元格：",[19,129049,129050],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,129052,129053],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,129055,129057],{"id":129056},"_53-列表标签","5.3 列表标签",[19,129059,129060],{},"（1）分类：无序列表、有序列表、自定义列表",[19,129062,129063],{},"①无序列表：",[4078,129065],{"style":128952,"src":129066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,129068,129069],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,129071,129072,129075,129076,129079,129080,129082],{},[32,129073,129074],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[32,129077,129078],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[32,129081,129074],{},"中输入其他标签或文字是不对的",[19,129084,129085,129087],{},[32,129086,129078],{},"之间相当于一个容器，可以容纳所有元素",[19,129089,129090],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129092,129093],{},"在css中去除前边的小圆点采用如下代码:",[73,129095,129099],{"className":129096,"code":129097,"language":129098,"meta":78,"style":78},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[32,129100,129101],{"__ignoreMap":78},[82,129102,129103,129106],{"class":84,"line":85},[82,129104,129105],{"class":53863},"list-style",[82,129107,129108],{"class":92},": none;\n",[19,129110,129111],{},"②有序列表：",[4078,129113],{"style":128952,"src":129114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129116,129117],{},"③自定义列表：",[4078,129119],{"style":128952,"src":129120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[4078,129122],{"style":128952,"src":129123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129125,129127],{"id":129126},"_54-表单标签","5.4 表单标签",[19,129129,129130],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129132,129133,129134,129137],{},"（1）表单域：包含单元素的区域，",[32,129135,129136],{},"\u003Cform>","标签可以实现信息的收集和传递。",[4078,129139],{"style":128952,"src":129140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129142,129143],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129145,129146],{},"表单元素提交必须有name属性",[19,129148,129149],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129151,129152],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129154,79780,129155,129158],{},[32,129156,129157],{},"\u003Cinput>","输入表单元素",[4078,129160],{"style":128952,"src":129161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[4078,129163],{"style":128952,"src":129164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129166,129167,129168],{},"单选按钮：",[32,129169,129170],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[4078,129172],{"style":128952,"src":129173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129175,129176],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[4078,129178],{"style":128952,"src":129179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129181,129182,129185],{},[2913,129183,129184],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129187,129188],{},"②select下拉表单元素：可以节约页面控件",[4078,129190],{"style":128952,"src":129191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129193,129194,16382,129196,129199,129200,129202,129203,129205],{},[2913,129195,2801],{},[32,129197,129198],{},"\u003Cselect>","中至少包含一对",[32,129201,105265],{},"；在",[32,129204,105265],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129207,129208,129209,129212],{},"③",[32,129210,129211],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[4078,129214],{"style":128952,"src":129215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129217,129218],{},"3行20列",[14,129220,129222,129223,105244],{"id":129221},"_55-lable标签","5.5 ",[32,129224,129225],{},"\u003Clable>",[19,129227,129228,129229,129231,129232,129234],{},"它不是表单标签，但常常与表单标签搭配使用，",[32,129230,129225],{},"标签用于绑定一个表单标签，当点击",[32,129233,129225],{},"标签内的文本",[19,129236,129237],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[4078,129239],{"style":128952,"src":129240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[4078,129242],{"style":128952,"src":129243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129245,129247],{"id":129246},"_56-实例","5.6 实例",[4078,129249],{"style":128952,"src":129250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2671,129252,129253],{},"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":78,"searchDepth":157,"depth":157,"links":129255},[129256,129257,129258,129259,129260,129262],{"id":128977,"depth":157,"text":128978},{"id":129034,"depth":157,"text":129035},{"id":129056,"depth":157,"text":129057},{"id":129126,"depth":157,"text":129127},{"id":129221,"depth":157,"text":129261},"5.5 \u003Clable>标签",{"id":129246,"depth":157,"text":129247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128969,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129269,"title":129270,"body":129271,"description":2699,"extension":2700,"meta":129820,"navigation":485,"path":129821,"seo":129822,"stem":129823,"__hash__":129824},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129272,"toc":129795},[129273,129276,129280,129283,129286,129290,129293,129296,129299,129302,129305,129308,129311,129315,129318,129322,129325,129328,129331,129335,129338,129341,129344,129350,129353,129356,129359,129362,129365,129368,129371,129404,129408,129411,129414,129417,129421,129424,129427,129430,129433,129436,129440,129443,129446,129449,129453,129456,129460,129463,129467,129470,129475,129479,129482,129486,129489,129492,129495,129498,129525,129528,129532,129535,129538,129543,129546,129549,129553,129556,129561,129564,129567,129570,129574,129577,129580,129583,129587,129590,129593,129596,129600,129604,129607,129647,129650,129654,129661,129664,129668,129671,129717,129721,129724,129727,129730,129758,129762,129765,129792],[10,129274,129270],{"id":129275},"_6-css语法与文本样式",[14,129277,129279],{"id":129278},"_61-css语法规范","6.1 css语法规范",[19,129281,129282],{},"由两部分组成，选择器及一条或多条声明",[4078,129284],{"style":128952,"src":129285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129287,129288],{},[2913,129289,2801],{},[19,129291,129292],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129294,129295],{},"②属性与属性值以“键值对”的形式出现",[19,129297,129298],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129300,129301],{},"④属性和属性值之间用英文“;”分开",[4078,129303],{"style":128952,"src":129304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[4078,129306],{"style":128952,"src":129307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[4078,129309],{"style":128952,"src":129310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129312,129314],{"id":129313},"_62-css选择器","6.2 css选择器",[19,129316,129317],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[65,129319,129321],{"id":129320},"_621-标签选择器","6.2.1 标签选择器",[19,129323,129324],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129326,129327],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[4078,129329],{"style":128952,"src":129330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[65,129332,129334],{"id":129333},"_622-类选择器","6.2.2 类选择器",[19,129336,129337],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129339,129340],{},"②样例",[4078,129342],{"style":128952,"src":129343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129345,129346,129347,129349],{},"③ ",[2913,129348,129184],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129351,129352],{},"可以理解为给这个标签起了个名字，来表示；",[19,129354,129355],{},"长名称或词组可以使用横线来为选择器命名；",[19,129357,129358],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129360,129361],{},"命名要有意义；",[4078,129363],{"style":128952,"src":129364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129366,129367],{},"类选择器也可以指定特殊的元素p.center{}",[19,129369,129370],{},"p.center和.center都对",[73,129372,129374],{"className":129096,"code":129373,"language":129098,"meta":78,"style":78},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[32,129375,129376,129381,129390,129400],{"__ignoreMap":78},[82,129377,129378],{"class":84,"line":85},[82,129379,129380],{"class":2828},"\u002F* 类选择器指定特殊元素 *\u002F\n",[82,129382,129383,129385,129388],{"class":84,"line":157},[82,129384,19],{"class":53863},[82,129386,129387],{"class":2384},".center",[82,129389,1349],{"class":92},[82,129391,129392,129394,129396,129398],{"class":84,"line":404},[82,129393,73082],{"class":88},[82,129395,1357],{"class":92},[82,129397,54154],{"class":88},[82,129399,3909],{"class":92},[82,129401,129402],{"class":84,"line":413},[82,129403,1391],{"class":92},[65,129405,129407],{"id":129406},"_623-多类名使用","6.2.3 多类名使用",[19,129409,129410],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[4078,129412],{"style":128952,"src":129413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129415,129416],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[65,129418,129420],{"id":129419},"_624-id选择器","6.2.4 id选择器",[19,129422,129423],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129425,129426],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[4078,129428],{"style":128952,"src":129429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129431,129432],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129434,129435],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[65,129437,129439],{"id":129438},"_625-通配符选择器","6.2.5 通配符选择器",[19,129441,129442],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129444,129445],{},"* {",[19,129447,129448],{},"color=\"red\"}",[65,129450,129452],{"id":129451},"_626-总结","6.2.6 总结",[4078,129454],{"style":128952,"src":129455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129457,129459],{"id":129458},"_63-css字体属性","6.3 css字体属性",[19,129461,129462],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[65,129464,129466],{"id":129465},"_631-字体系列","6.3.1 字体系列",[19,129468,129469],{},"font-family: '宋体';",[19,129471,129472,129474],{},[2913,129473,2801],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[65,129476,129478],{"id":129477},"_632-字体大小","6.3.2 字体大小",[19,129480,129481],{},"font-size: 20px",[19,129483,129484,29055],{},[2913,129485,129184],{},[19,129487,129488],{},"①px（像素）大小是网页的最常用单位",[19,129490,129491],{},"②谷歌浏览器默认为16px",[19,129493,129494],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129496,129497],{},"④可以给body指定整个页面的大小：会自动引用",[73,129499,129501],{"className":129096,"code":129500,"language":129098,"meta":78,"style":78},"body {\n  font-size: 16px;\n}\n",[32,129502,129503,129509,129521],{"__ignoreMap":78},[82,129504,129505,129507],{"class":84,"line":85},[82,129506,54362],{"class":53863},[82,129508,1349],{"class":92},[82,129510,129511,129513,129515,129517,129519],{"class":84,"line":157},[82,129512,73182],{"class":88},[82,129514,1357],{"class":92},[82,129516,3355],{"class":88},[82,129518,54054],{"class":112},[82,129520,3909],{"class":92},[82,129522,129523],{"class":84,"line":404},[82,129524,1391],{"class":92},[19,129526,129527],{},"⑤标题标签比较特殊，需要单独指定大小",[65,129529,129531],{"id":129530},"_633-字体粗细","6.3.3 字体粗细",[19,129533,129534],{},"font-weight: bold;",[19,129536,129537],{},"font-weight: 100；",[19,129539,129540,129542],{},[2913,129541,2801],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129544,129545],{},"font-weight= 400;",[19,129547,129548],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[65,129550,129552],{"id":129551},"_634-文字样式","6.3.4 文字样式",[19,129554,129555],{},"font-style: normal；",[19,129557,129558,29055],{},[2913,129559,129560],{},"属性值",[19,129562,129563],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129565,129566],{},"②italic：浏览器会显示斜体的字体样式",[4078,129568],{"style":128952,"src":129569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[65,129571,129573],{"id":129572},"_635-字体符合属性","6.3.5 字体符合属性",[4078,129575],{"style":128952,"src":129576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[4078,129578],{"style":128952,"src":129579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129581,129582],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129584,129585,29055],{},[2913,129586,129184],{},[19,129588,129589],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129591,129592],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129594,129595],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129597,129599],{"id":129598},"_64-css-test文本属性","6.4 css test文本属性",[65,129601,129603],{"id":129602},"_641-文本颜色","6.4.1 文本颜色",[19,129605,129606],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[73,129608,129610],{"className":129096,"code":129609,"language":129098,"meta":78,"style":78},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[32,129611,129612,129617,129623,129633,129638,129643],{"__ignoreMap":78},[82,129613,129614],{"class":84,"line":85},[82,129615,129616],{"class":2828},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[82,129618,129619,129621],{"class":84,"line":157},[82,129620,19],{"class":53863},[82,129622,1349],{"class":92},[82,129624,129625,129627,129629,129631],{"class":84,"line":404},[82,129626,73461],{"class":88},[82,129628,1357],{"class":92},[82,129630,59979],{"class":88},[82,129632,3909],{"class":92},[82,129634,129635],{"class":84,"line":413},[82,129636,129637],{"class":2828},"  \u002F* color: #ff0000; *\u002F\n",[82,129639,129640],{"class":84,"line":508},[82,129641,129642],{"class":2828},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[82,129644,129645],{"class":84,"line":513},[82,129646,1391],{"class":92},[4078,129648],{"style":128952,"src":129649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[65,129651,129653],{"id":129652},"_642-对齐文本","6.4.2 对齐文本",[19,129655,129656,129657,129660],{},"text-align属于用于设置元素内文本内容的 ",[2913,129658,129659],{},"水平对齐"," 方式",[19,129662,129663],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[65,129665,129667],{"id":129666},"_643-装饰文本","6.4.3 装饰文本",[19,129669,129670],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[73,129672,129674],{"className":129096,"code":129673,"language":129098,"meta":78,"style":78},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[32,129675,129676,129682,129692,129696,129702,129713],{"__ignoreMap":78},[82,129677,129678,129680],{"class":84,"line":85},[82,129679,323],{"class":53863},[82,129681,1349],{"class":92},[82,129683,129684,129686,129688,129690],{"class":84,"line":157},[82,129685,73058],{"class":88},[82,129687,1357],{"class":92},[82,129689,57297],{"class":88},[82,129691,3909],{"class":92},[82,129693,129694],{"class":84,"line":404},[82,129695,1391],{"class":92},[82,129697,129698,129700],{"class":84,"line":413},[82,129699,19],{"class":53863},[82,129701,1349],{"class":92},[82,129703,129704,129706,129708,129711],{"class":84,"line":508},[82,129705,73058],{"class":88},[82,129707,1357],{"class":92},[82,129709,129710],{"class":88},"underline",[82,129712,3909],{"class":92},[82,129714,129715],{"class":84,"line":513},[82,129716,1391],{"class":92},[65,129718,129720],{"id":129719},"_644-文本缩进","6.4.4 文本缩进",[19,129722,129723],{},"实现文本的第一行首行缩进自己指定的距离",[19,129725,129726],{},"20px往右边走；-20px往左边走",[19,129728,129729],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[73,129731,129733],{"className":129096,"code":129732,"language":129098,"meta":78,"style":78},"p {\n  text-indent: 2em;\n}\n",[32,129734,129735,129741,129754],{"__ignoreMap":78},[82,129736,129737,129739],{"class":84,"line":85},[82,129738,19],{"class":53863},[82,129740,1349],{"class":92},[82,129742,129743,129746,129748,129750,129752],{"class":84,"line":157},[82,129744,129745],{"class":88},"  text-indent",[82,129747,1357],{"class":92},[82,129749,1425],{"class":88},[82,129751,26137],{"class":112},[82,129753,3909],{"class":92},[82,129755,129756],{"class":84,"line":404},[82,129757,1391],{"class":92},[65,129759,129761],{"id":129760},"_645-行间距","6.4.5 行间距",[19,129763,129764],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[73,129766,129768],{"className":129096,"code":129767,"language":129098,"meta":78,"style":78},"p {\n  line-height: 1.6;\n}\n",[32,129769,129770,129776,129788],{"__ignoreMap":78},[82,129771,129772,129774],{"class":84,"line":85},[82,129773,19],{"class":53863},[82,129775,1349],{"class":92},[82,129777,129778,129781,129783,129786],{"class":84,"line":157},[82,129779,129780],{"class":88},"  line-height",[82,129782,1357],{"class":92},[82,129784,129785],{"class":88},"1.6",[82,129787,3909],{"class":92},[82,129789,129790],{"class":84,"line":404},[82,129791,1391],{"class":92},[2671,129793,129794],{},"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":78,"searchDepth":157,"depth":157,"links":129796},[129797,129798,129806,129813],{"id":129278,"depth":157,"text":129279},{"id":129313,"depth":157,"text":129314,"children":129799},[129800,129801,129802,129803,129804,129805],{"id":129320,"depth":404,"text":129321},{"id":129333,"depth":404,"text":129334},{"id":129406,"depth":404,"text":129407},{"id":129419,"depth":404,"text":129420},{"id":129438,"depth":404,"text":129439},{"id":129451,"depth":404,"text":129452},{"id":129458,"depth":157,"text":129459,"children":129807},[129808,129809,129810,129811,129812],{"id":129465,"depth":404,"text":129466},{"id":129477,"depth":404,"text":129478},{"id":129530,"depth":404,"text":129531},{"id":129551,"depth":404,"text":129552},{"id":129572,"depth":404,"text":129573},{"id":129598,"depth":157,"text":129599,"children":129814},[129815,129816,129817,129818,129819],{"id":129602,"depth":404,"text":129603},{"id":129652,"depth":404,"text":129653},{"id":129666,"depth":404,"text":129667},{"id":129719,"depth":404,"text":129720},{"id":129760,"depth":404,"text":129761},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129270,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129826,"title":129827,"body":129828,"description":2699,"extension":2700,"meta":130477,"navigation":485,"path":130478,"seo":130479,"stem":130480,"__hash__":130481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129829,"toc":130458},[129830,129833,129837,129841,129901,129905,129915,129918,129921,129925,129950,129954,129957,129960,129963,129966,129969,129973,129976,129979,130021,130024,130050,130056,130059,130063,130067,130073,130076,130079,130082,130085,130088,130091,130136,130140,130143,130146,130150,130154,130183,130186,130191,130194,130197,130200,130203,130207,130211,130214,130216,130219,130223,130226,130230,130233,130236,130239,130243,130247,130253,130263,130266,130269,130272,130275,130278,130401,130409,130417,130455],[10,129831,129827],{"id":129832},"_7-css引入方式与选择器进阶",[14,129834,129836],{"id":129835},"_71-css引入方式","7.1 css引入方式",[65,129838,129840],{"id":129839},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[73,129842,129846],{"className":129843,"code":129844,"language":129845,"meta":78,"style":78},"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",[32,129847,129848,129856,129863,129875,129888,129893],{"__ignoreMap":78},[82,129849,129850,129852,129854],{"class":84,"line":85},[82,129851,3659],{"class":92},[82,129853,2671],{"class":53863},[82,129855,53870],{"class":92},[82,129857,129858,129861],{"class":84,"line":157},[82,129859,129860],{"class":53863},"  h1",[82,129862,1349],{"class":92},[82,129864,129865,129868,129870,129873],{"class":84,"line":404},[82,129866,129867],{"class":88},"    color",[82,129869,1357],{"class":92},[82,129871,129872],{"class":88},"blue",[82,129874,3909],{"class":92},[82,129876,129877,129880,129882,129884,129886],{"class":84,"line":413},[82,129878,129879],{"class":88},"    font-size",[82,129881,1357],{"class":92},[82,129883,3550],{"class":88},[82,129885,54054],{"class":112},[82,129887,3909],{"class":92},[82,129889,129890],{"class":84,"line":508},[82,129891,129892],{"class":92},"  }\n",[82,129894,129895,129897,129899],{"class":84,"line":513},[82,129896,54347],{"class":92},[82,129898,2671],{"class":53863},[82,129900,53870],{"class":92},[19,129902,129903,29055],{},[2913,129904,129184],{},[19,129906,79780,129907,129910,129911,129914],{},[32,129908,129909],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[32,129912,129913],{},"\u003Chead>","标签中",[19,129916,129917],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129919,129920],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[65,129922,129924],{"id":129923},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[73,129926,129928],{"className":129843,"code":129927,"language":129845,"meta":78,"style":78},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[32,129929,129930],{"__ignoreMap":78},[82,129931,129932,129934,129936,129938,129940,129943,129946,129948],{"class":84,"line":85},[82,129933,3659],{"class":92},[82,129935,19],{"class":53863},[82,129937,65184],{"class":2384},[82,129939,113],{"class":92},[82,129941,129942],{"class":96},"\"color: red; font-size: 16px;\"",[82,129944,129945],{"class":92},">这是一个段落\u003C\u002F",[82,129947,19],{"class":53863},[82,129949,53870],{"class":92},[19,129951,129952,29055],{},[2913,129953,129184],{},[19,129955,129956],{},"①style其实就是标签的属性",[19,129958,129959],{},"②在双引号中间，写法要符合css规范",[19,129961,129962],{},"③可以控制当前的标签设置样式",[19,129964,129965],{},"④书写繁琐，简单时才用",[19,129967,129968],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[65,129970,129972],{"id":129971},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129974,129975],{},"使用最多，单独建一个css文件，然后html引用",[19,129977,129978],{},"①css文件部分： style.css",[73,129980,129982],{"className":129096,"code":129981,"language":129098,"meta":78,"style":78},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[32,129983,129984,129989,129995,130005,130017],{"__ignoreMap":78},[82,129985,129986],{"class":84,"line":85},[82,129987,129988],{"class":2828},"\u002F* style.css *\u002F\n",[82,129990,129991,129993],{"class":84,"line":157},[82,129992,10],{"class":53863},[82,129994,1349],{"class":92},[82,129996,129997,129999,130001,130003],{"class":84,"line":404},[82,129998,73461],{"class":88},[82,130000,1357],{"class":92},[82,130002,129872],{"class":88},[82,130004,3909],{"class":92},[82,130006,130007,130009,130011,130013,130015],{"class":84,"line":413},[82,130008,73182],{"class":88},[82,130010,1357],{"class":92},[82,130012,3550],{"class":88},[82,130014,54054],{"class":112},[82,130016,3909],{"class":92},[82,130018,130019],{"class":84,"line":508},[82,130020,1391],{"class":92},[19,130022,130023],{},"②html部分",[73,130025,130027],{"className":129843,"code":130026,"language":129845,"meta":78,"style":78},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[32,130028,130029],{"__ignoreMap":78},[82,130030,130031,130033,130035,130037,130039,130041,130043,130045,130048],{"class":84,"line":85},[82,130032,3659],{"class":92},[82,130034,71562],{"class":53863},[82,130036,71565],{"class":2384},[82,130038,113],{"class":92},[82,130040,71570],{"class":96},[82,130042,63615],{"class":2384},[82,130044,113],{"class":92},[82,130046,130047],{"class":96},"\"style.css\"",[82,130049,53870],{"class":92},[19,130051,130052,130055],{},[32,130053,130054],{},"\u003Chr>","水平线标签（但是不常用！）",[19,130057,130058],{},"ctrl+0回到页面原来大小",[14,130060,130062],{"id":130061},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[65,130064,130066],{"id":130065},"_721-快速生成html","7.2.1 快速生成html",[19,130068,130069,130070],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[32,130071,130072],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,130074,130075],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,130077,130078],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,130080,130081],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130083,130084],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130086,130087],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130089,130090],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[73,130092,130094],{"className":129843,"code":130093,"language":129845,"meta":78,"style":78},"\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",[32,130095,130096,130101,130106,130111,130116,130121,130126,130131],{"__ignoreMap":78},[82,130097,130098],{"class":84,"line":85},[82,130099,130100],{"class":2828},"\u003C!-- Emmet 语法示例 -->\n",[82,130102,130103],{"class":84,"line":157},[82,130104,130105],{"class":2828},"\u003C!-- div*3        → 生成3个div -->\n",[82,130107,130108],{"class":84,"line":404},[82,130109,130110],{"class":2828},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[82,130112,130113],{"class":84,"line":413},[82,130114,130115],{"class":2828},"\u003C!-- div+p        → 兄弟div和p -->\n",[82,130117,130118],{"class":84,"line":508},[82,130119,130120],{"class":2828},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[82,130122,130123],{"class":84,"line":513},[82,130124,130125],{"class":2828},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[82,130127,130128],{"class":84,"line":1388},[82,130129,130130],{"class":2828},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[82,130132,130133],{"class":84,"line":1394},[82,130134,130135],{"class":2828},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[65,130137,130139],{"id":130138},"_722-快速生成css","7.2.2 快速生成css",[19,130141,130142],{},"简写开头",[19,130144,130145],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130147,130149],{"id":130148},"_73-css复合选择器","7.3 css复合选择器",[65,130151,130153],{"id":130152},"_731-后代选择器","7.3.1 后代选择器",[73,130155,130157],{"className":129096,"code":130156,"language":129098,"meta":78,"style":78},".parent .child {\n  color: blue;\n}\n",[32,130158,130159,130169,130179],{"__ignoreMap":78},[82,130160,130161,130164,130167],{"class":84,"line":85},[82,130162,130163],{"class":2384},".parent",[82,130165,130166],{"class":2384}," .child",[82,130168,1349],{"class":92},[82,130170,130171,130173,130175,130177],{"class":84,"line":157},[82,130172,73461],{"class":88},[82,130174,1357],{"class":92},[82,130176,129872],{"class":88},[82,130178,3909],{"class":92},[82,130180,130181],{"class":84,"line":404},[82,130182,1391],{"class":92},[19,130184,130185],{},"元素1 元素2 {样式声明}",[19,130187,130188],{},[2913,130189,130190],{},"注意点:",[19,130192,130193],{},"①元素1和元素2中间用空格隔开",[19,130195,130196],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130198,130199],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130201,130202],{},"④元素1和元素2可以是任意基础选择器",[65,130204,130206],{"id":130205},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130208,130209],{},[2913,130210,130190],{},[19,130212,130213],{},"①元素1和元素2中间用大于号隔开",[19,130215,130196],{},[19,130217,130218],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[65,130220,130222],{"id":130221},"_733-并集选择器","7.3.3 并集选择器",[19,130224,130225],{},"元素1，元素2 {样式声明}",[19,130227,130228],{},[2913,130229,130190],{},[19,130231,130232],{},"①元素1和元素2中间用逗号隔开",[19,130234,130235],{},"②逗号可以理解为和的意思",[19,130237,130238],{},"③并集选择器通常用于集体声明",[65,130240,130242],{"id":130241},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130244,130245],{},[2913,130246,130190],{},[19,130248,130249,130250,130252],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71562,130251],{},"－:visited－:hover－:active。",[19,130254,130255,130256,130259,130260,28324],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130257,130258],"hover",{}," 、 ",[130261,130262],"first-child",{},[19,130264,130265],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130267,130268],{},"link对没访问的进行设置",[19,130270,130271],{},"vistied对已访问的进行改变",[19,130273,130274],{},"hover鼠标经过就会变",[19,130276,130277],{},"active常按(点)就会变",[73,130279,130281],{"className":129096,"code":130280,"language":129098,"meta":78,"style":78},"\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",[32,130282,130283,130288,130297,130307,130317,130321,130330,130341,130345,130353,130363,130373,130377,130386,130397],{"__ignoreMap":78},[82,130284,130285],{"class":84,"line":85},[82,130286,130287],{"class":2828},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[82,130289,130290,130292,130295],{"class":84,"line":157},[82,130291,323],{"class":53863},[82,130293,130294],{"class":2384},":link",[82,130296,1349],{"class":92},[82,130298,130299,130301,130303,130305],{"class":84,"line":404},[82,130300,73461],{"class":88},[82,130302,1357],{"class":92},[82,130304,64927],{"class":88},[82,130306,3909],{"class":92},[82,130308,130309,130311,130313,130315],{"class":84,"line":413},[82,130310,73058],{"class":88},[82,130312,1357],{"class":92},[82,130314,57297],{"class":88},[82,130316,3909],{"class":92},[82,130318,130319],{"class":84,"line":508},[82,130320,1391],{"class":92},[82,130322,130323,130325,130328],{"class":84,"line":513},[82,130324,323],{"class":53863},[82,130326,130327],{"class":2384},":visited",[82,130329,1349],{"class":92},[82,130331,130332,130334,130336,130339],{"class":84,"line":1388},[82,130333,73461],{"class":88},[82,130335,1357],{"class":92},[82,130337,130338],{"class":88},"purple",[82,130340,3909],{"class":92},[82,130342,130343],{"class":84,"line":1394},[82,130344,1391],{"class":92},[82,130346,130347,130349,130351],{"class":84,"line":1399},[82,130348,323],{"class":53863},[82,130350,63498],{"class":2384},[82,130352,1349],{"class":92},[82,130354,130355,130357,130359,130361],{"class":84,"line":1430},[82,130356,73461],{"class":88},[82,130358,1357],{"class":92},[82,130360,57449],{"class":88},[82,130362,3909],{"class":92},[82,130364,130365,130367,130369,130371],{"class":84,"line":1818},[82,130366,73058],{"class":88},[82,130368,1357],{"class":92},[82,130370,129710],{"class":88},[82,130372,3909],{"class":92},[82,130374,130375],{"class":84,"line":2082},[82,130376,1391],{"class":92},[82,130378,130379,130381,130384],{"class":84,"line":2233},[82,130380,323],{"class":53863},[82,130382,130383],{"class":2384},":active",[82,130385,1349],{"class":92},[82,130387,130388,130390,130392,130395],{"class":84,"line":2255},[82,130389,73461],{"class":88},[82,130391,1357],{"class":92},[82,130393,130394],{"class":88},"green",[82,130396,3909],{"class":92},[82,130398,130399],{"class":84,"line":2260},[82,130400,1391],{"class":92},[65,130402,130404,130405,130408],{"id":130403},"_735-伪类选择器","7.3.5 ",[130406,130407],"focus",{},"伪类选择器",[19,130410,130411,130413,130414,130416],{},[130406,130412],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[32,130415,129157],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[73,130418,130420],{"className":129096,"code":130419,"language":129098,"meta":78,"style":78},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[32,130421,130422,130430,130441,130451],{"__ignoreMap":78},[82,130423,130424,130426,130428],{"class":84,"line":85},[82,130425,56381],{"class":53863},[82,130427,64458],{"class":2384},[82,130429,1349],{"class":92},[82,130431,130432,130435,130437,130439],{"class":84,"line":157},[82,130433,130434],{"class":88},"  border-color",[82,130436,1357],{"class":92},[82,130438,57449],{"class":88},[82,130440,3909],{"class":92},[82,130442,130443,130445,130447,130449],{"class":84,"line":404},[82,130444,73354],{"class":88},[82,130446,1357],{"class":92},[82,130448,57297],{"class":88},[82,130450,3909],{"class":92},[82,130452,130453],{"class":84,"line":413},[82,130454,1391],{"class":92},[2671,130456,130457],{},"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":78,"searchDepth":157,"depth":157,"links":130459},[130460,130465,130469],{"id":129835,"depth":157,"text":129836,"children":130461},[130462,130463,130464],{"id":129839,"depth":404,"text":129840},{"id":129923,"depth":404,"text":129924},{"id":129971,"depth":404,"text":129972},{"id":130061,"depth":157,"text":130062,"children":130466},[130467,130468],{"id":130065,"depth":404,"text":130066},{"id":130138,"depth":404,"text":130139},{"id":130148,"depth":157,"text":130149,"children":130470},[130471,130472,130473,130474,130475],{"id":130152,"depth":404,"text":130153},{"id":130205,"depth":404,"text":130206},{"id":130221,"depth":404,"text":130222},{"id":130241,"depth":404,"text":130242},{"id":130403,"depth":404,"text":130476},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129827,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130483,"title":130484,"body":130485,"description":2699,"extension":2700,"meta":132408,"navigation":485,"path":132409,"seo":132410,"stem":132411,"__hash__":132412},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130486,"toc":132382},[130487,130490,130494,130503,130507,130533,130538,130541,130544,130547,130550,130554,130557,130567,130575,130579,130614,130619,130622,130625,130628,130631,130635,130638,130647,130651,130664,130669,130672,130675,130678,130682,130685,130689,130692,130747,130750,130781,130784,130838,130842,130845,131011,131134,131137,131140,131143,131146,131150,131153,131157,131160,131163,131167,131170,131201,131228,131256,131259,131263,131289,131332,131336,131430,131433,131460,131463,131466,131469,131472,131475,131478,131481,131484,131487,131491,131548,131575,131579,131627,131631,131672,131674,131677,131680,131683,131686,131690,131782,131785,131788,131791,131795,131918,132119,132123,132127,132130,132133,132136,132140,132143,132146,132171,132174,132177,132180,132183,132186,132190,132198,132260,132263,132321,132324,132327,132330,132333,132336,132339,132342,132379],[10,130488,130484],{"id":130489},"_8-css显示模式与背景特性",[14,130491,130493],{"id":130492},"_81-css元素显示模式","8.1 css元素显示模式",[19,130495,130496,130497,130499,130500,130502],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[32,130498,128707],{},"自己占一行，比如一行可以放多个",[32,130501,128710],{},"，HTML 元素一般分为块元素和行内元素两种类型",[65,130504,130506],{"id":130505},"_811-块元素","8.1.1 块元素",[19,130508,130509,130510,130512,130513,2973,130516,2973,130518,2973,130520,2973,130523,2973,130526,130529,130530,130532],{},"常见的块元素有",[32,130511,128611],{},"~",[32,130514,130515],{},"\u003Ch6>",[32,130517,128637],{},[32,130519,128707],{},[32,130521,130522],{},"\u003Cul>",[32,130524,130525],{},"\u003Col>",[32,130527,130528],{},"\u003Cli>","等，其中 ",[32,130531,128707],{}," 标签是最典型的块元素",[19,130534,130535],{},[2913,130536,130537],{},"块级元素的特点：",[19,130539,130540],{},"① 比较霸道，自己独占一行。",[19,130542,130543],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130545,130546],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130548,130549],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130551,130552],{},[2913,130553,2801],{},[19,130555,130556],{},"①文字类的元素内不能使用块级元素",[19,130558,79803,130559,130561,130562,130564,130565],{},[32,130560,128637],{}," 标签主要用于存放文字，因此 ",[32,130563,128637],{}," 里面不能放块级元素，特别是不能放",[32,130566,128707],{},[19,130568,130569,130570,130512,130572,130574],{},"⑥同理， ",[32,130571,128611],{},[32,130573,130515],{},"等都是文字类块级标签，里面也不能放其他块级元素",[65,130576,130578],{"id":130577},"_812-行内元素","8.1.2 行内元素",[19,130580,130581,130582,2973,130584,2973,130587,2973,130590,2973,130593,2973,130596,2973,130599,2973,130602,2973,130605,2973,130608,130610,130611,130613],{},"常见的行内元素有 ",[32,130583,128869],{},[32,130585,130586],{},"\u003Cstrong>",[32,130588,130589],{},"\u003Cb>",[32,130591,130592],{},"\u003Cem>",[32,130594,130595],{},"\u003Ci>",[32,130597,130598],{},"\u003Cdel>",[32,130600,130601],{},"\u003Cs>",[32,130603,130604],{},"\u003Cins>",[32,130606,130607],{},"\u003Cu>",[32,130609,128710],{}," 等，其中 ",[32,130612,128710],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130615,130616],{},[2913,130617,130618],{},"特点：",[19,130620,130621],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130623,130624],{},"② 高、宽直接设置是无效的。",[19,130626,130627],{},"③ 默认宽度就是它本身内容的宽度。",[19,130629,130630],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130632,130633],{},[2913,130634,2801],{},[19,130636,130637],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130639,130640,130641,130643,130644,130646],{},"②特殊情况链接 ",[32,130642,128869],{}," 里面可以放块级元素，但是给 ",[32,130645,128869],{}," 转换一下块级模式最安全",[65,130648,130650],{"id":130649},"_813-行内块元素","8.1.3 行内块元素",[19,130652,130653,130654,2973,130657,2973,130660,130663],{},"在行内元素中有几个特殊的标签 —— ",[32,130655,130656],{},"\u003Cimg \u002F>",[32,130658,130659],{},"\u003Cinput \u002F>",[32,130661,130662],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130665,130666],{},[2913,130667,130668],{},"行内块元素的特点：",[19,130670,130671],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130673,130674],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130676,130677],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[65,130679,130681],{"id":130680},"_814-总结","8.1.4 总结",[4078,130683],{"style":128952,"src":130684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[65,130686,130688],{"id":130687},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130690,130691],{},"①转换为块元素：display:block;",[73,130693,130695],{"className":129096,"code":130694,"language":129098,"meta":78,"style":78},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[32,130696,130697,130702,130708,130719,130731,130743],{"__ignoreMap":78},[82,130698,130699],{"class":84,"line":85},[82,130700,130701],{"class":2828},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[82,130703,130704,130706],{"class":84,"line":157},[82,130705,323],{"class":53863},[82,130707,1349],{"class":92},[82,130709,130710,130713,130715,130717],{"class":84,"line":404},[82,130711,130712],{"class":88},"  display",[82,130714,1357],{"class":92},[82,130716,63427],{"class":88},[82,130718,3909],{"class":92},[82,130720,130721,130723,130725,130727,130729],{"class":84,"line":413},[82,130722,73124],{"class":88},[82,130724,1357],{"class":92},[82,130726,3069],{"class":88},[82,130728,54054],{"class":112},[82,130730,3909],{"class":92},[82,130732,130733,130735,130737,130739,130741],{"class":84,"line":508},[82,130734,73344],{"class":88},[82,130736,1357],{"class":92},[82,130738,3159],{"class":88},[82,130740,54054],{"class":112},[82,130742,3909],{"class":92},[82,130744,130745],{"class":84,"line":513},[82,130746,1391],{"class":92},[19,130748,130749],{},"②转换为行内元素：display:inline;",[73,130751,130753],{"className":129096,"code":130752,"language":129098,"meta":78,"style":78},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[32,130754,130755,130760,130766,130777],{"__ignoreMap":78},[82,130756,130757],{"class":84,"line":85},[82,130758,130759],{"class":2828},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[82,130761,130762,130764],{"class":84,"line":157},[82,130763,54173],{"class":53863},[82,130765,1349],{"class":92},[82,130767,130768,130770,130772,130775],{"class":84,"line":404},[82,130769,130712],{"class":88},[82,130771,1357],{"class":92},[82,130773,130774],{"class":88},"inline",[82,130776,3909],{"class":92},[82,130778,130779],{"class":84,"line":413},[82,130780,1391],{"class":92},[19,130782,130783],{},"③转换为行内块：display:inline-block;",[73,130785,130787],{"className":129096,"code":130786,"language":129098,"meta":78,"style":78},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[32,130788,130789,130794,130800,130810,130822,130834],{"__ignoreMap":78},[82,130790,130791],{"class":84,"line":85},[82,130792,130793],{"class":2828},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[82,130795,130796,130798],{"class":84,"line":157},[82,130797,82],{"class":53863},[82,130799,1349],{"class":92},[82,130801,130802,130804,130806,130808],{"class":84,"line":404},[82,130803,130712],{"class":88},[82,130805,1357],{"class":92},[82,130807,74939],{"class":88},[82,130809,3909],{"class":92},[82,130811,130812,130814,130816,130818,130820],{"class":84,"line":413},[82,130813,73124],{"class":88},[82,130815,1357],{"class":92},[82,130817,3366],{"class":88},[82,130819,54054],{"class":112},[82,130821,3909],{"class":92},[82,130823,130824,130826,130828,130830,130832],{"class":84,"line":508},[82,130825,73344],{"class":88},[82,130827,1357],{"class":92},[82,130829,3700],{"class":88},[82,130831,54054],{"class":112},[82,130833,3909],{"class":92},[82,130835,130836],{"class":84,"line":513},[82,130837,1391],{"class":92},[65,130839,130841],{"id":130840},"_816-小米侧边栏","8.1.6 小米侧边栏",[4078,130843],{"style":128952,"src":130844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[73,130846,130848],{"className":129843,"code":130847,"language":129845,"meta":78,"style":78},"\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",[32,130849,130850,130855,130870,130889,130908,130927,130946,130965,130984,131003],{"__ignoreMap":78},[82,130851,130852],{"class":84,"line":85},[82,130853,130854],{"class":2828},"\u003C!-- 小米侧边栏案例 -->\n",[82,130856,130857,130859,130861,130863,130865,130868],{"class":84,"line":157},[82,130858,3659],{"class":92},[82,130860,54173],{"class":53863},[82,130862,56046],{"class":2384},[82,130864,113],{"class":92},[82,130866,130867],{"class":96},"\"sidebar\"",[82,130869,53870],{"class":92},[82,130871,130872,130874,130876,130878,130880,130882,130885,130887],{"class":84,"line":404},[82,130873,54705],{"class":92},[82,130875,323],{"class":53863},[82,130877,63615],{"class":2384},[82,130879,113],{"class":92},[82,130881,63620],{"class":96},[82,130883,130884],{"class":92},">手机 电话卡\u003C\u002F",[82,130886,323],{"class":53863},[82,130888,53870],{"class":92},[82,130890,130891,130893,130895,130897,130899,130901,130904,130906],{"class":84,"line":413},[82,130892,54705],{"class":92},[82,130894,323],{"class":53863},[82,130896,63615],{"class":2384},[82,130898,113],{"class":92},[82,130900,63620],{"class":96},[82,130902,130903],{"class":92},">电视 盒子\u003C\u002F",[82,130905,323],{"class":53863},[82,130907,53870],{"class":92},[82,130909,130910,130912,130914,130916,130918,130920,130923,130925],{"class":84,"line":508},[82,130911,54705],{"class":92},[82,130913,323],{"class":53863},[82,130915,63615],{"class":2384},[82,130917,113],{"class":92},[82,130919,63620],{"class":96},[82,130921,130922],{"class":92},">笔记本 平板\u003C\u002F",[82,130924,323],{"class":53863},[82,130926,53870],{"class":92},[82,130928,130929,130931,130933,130935,130937,130939,130942,130944],{"class":84,"line":513},[82,130930,54705],{"class":92},[82,130932,323],{"class":53863},[82,130934,63615],{"class":2384},[82,130936,113],{"class":92},[82,130938,63620],{"class":96},[82,130940,130941],{"class":92},">出行 穿戴\u003C\u002F",[82,130943,323],{"class":53863},[82,130945,53870],{"class":92},[82,130947,130948,130950,130952,130954,130956,130958,130961,130963],{"class":84,"line":1388},[82,130949,54705],{"class":92},[82,130951,323],{"class":53863},[82,130953,63615],{"class":2384},[82,130955,113],{"class":92},[82,130957,63620],{"class":96},[82,130959,130960],{"class":92},">智能 路由器\u003C\u002F",[82,130962,323],{"class":53863},[82,130964,53870],{"class":92},[82,130966,130967,130969,130971,130973,130975,130977,130980,130982],{"class":84,"line":1394},[82,130968,54705],{"class":92},[82,130970,323],{"class":53863},[82,130972,63615],{"class":2384},[82,130974,113],{"class":92},[82,130976,63620],{"class":96},[82,130978,130979],{"class":92},">健康 儿童\u003C\u002F",[82,130981,323],{"class":53863},[82,130983,53870],{"class":92},[82,130985,130986,130988,130990,130992,130994,130996,130999,131001],{"class":84,"line":1399},[82,130987,54705],{"class":92},[82,130989,323],{"class":53863},[82,130991,63615],{"class":2384},[82,130993,113],{"class":92},[82,130995,63620],{"class":96},[82,130997,130998],{"class":92},">耳机 音响\u003C\u002F",[82,131000,323],{"class":53863},[82,131002,53870],{"class":92},[82,131004,131005,131007,131009],{"class":84,"line":1430},[82,131006,54347],{"class":92},[82,131008,54173],{"class":53863},[82,131010,53870],{"class":92},[73,131012,131014],{"className":129096,"code":131013,"language":129098,"meta":78,"style":78},".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",[32,131015,131016,131025,131035,131048,131060,131072,131084,131094,131105,131109,131119,131130],{"__ignoreMap":78},[82,131017,131018,131021,131023],{"class":84,"line":85},[82,131019,131020],{"class":2384},".sidebar",[82,131022,4014],{"class":53863},[82,131024,1349],{"class":92},[82,131026,131027,131029,131031,131033],{"class":84,"line":157},[82,131028,130712],{"class":88},[82,131030,1357],{"class":92},[82,131032,63427],{"class":88},[82,131034,3909],{"class":92},[82,131036,131037,131039,131041,131044,131046],{"class":84,"line":404},[82,131038,73124],{"class":88},[82,131040,1357],{"class":92},[82,131042,131043],{"class":88},"234",[82,131045,54054],{"class":112},[82,131047,3909],{"class":92},[82,131049,131050,131052,131054,131056,131058],{"class":84,"line":413},[82,131051,73344],{"class":88},[82,131053,1357],{"class":92},[82,131055,3209],{"class":88},[82,131057,54054],{"class":112},[82,131059,3909],{"class":92},[82,131061,131062,131064,131066,131068,131070],{"class":84,"line":508},[82,131063,129780],{"class":88},[82,131065,1357],{"class":92},[82,131067,3209],{"class":88},[82,131069,54054],{"class":112},[82,131071,3909],{"class":92},[82,131073,131074,131076,131078,131080,131082],{"class":84,"line":513},[82,131075,73379],{"class":88},[82,131077,1357],{"class":92},[82,131079,3700],{"class":88},[82,131081,54054],{"class":112},[82,131083,3909],{"class":92},[82,131085,131086,131088,131090,131092],{"class":84,"line":1388},[82,131087,73461],{"class":88},[82,131089,1357],{"class":92},[82,131091,63400],{"class":88},[82,131093,3909],{"class":92},[82,131095,131096,131098,131100,131103],{"class":84,"line":1394},[82,131097,73434],{"class":88},[82,131099,1357],{"class":92},[82,131101,131102],{"class":88},"#55585a",[82,131104,3909],{"class":92},[82,131106,131107],{"class":84,"line":1399},[82,131108,1391],{"class":92},[82,131110,131111,131113,131115,131117],{"class":84,"line":1430},[82,131112,131020],{"class":2384},[82,131114,4014],{"class":53863},[82,131116,63498],{"class":2384},[82,131118,1349],{"class":92},[82,131120,131121,131123,131125,131128],{"class":84,"line":1818},[82,131122,73434],{"class":88},[82,131124,1357],{"class":92},[82,131126,131127],{"class":88},"#ff6700",[82,131129,3909],{"class":92},[82,131131,131132],{"class":84,"line":2082},[82,131133,1391],{"class":92},[4078,131135],{"style":128952,"src":131136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131138,131139],{},"行高=盒子高度：实现文字的垂直居中",[19,131141,131142],{},"原理讲解：",[4078,131144],{"style":128952,"src":131145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131147,131149],{"id":131148},"_82-css背景","8.2 css背景",[19,131151,131152],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[65,131154,131156],{"id":131155},"_821-背景颜色","8.2.1 背景颜色",[19,131158,131159],{},"background-color:颜色值;",[19,131161,131162],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[65,131164,131166],{"id":131165},"_822-背景图片","8.2.2 背景图片",[19,131168,131169],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[73,131171,131173],{"className":129096,"code":131172,"language":129098,"meta":78,"style":78},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[32,131174,131175,131181,131197],{"__ignoreMap":78},[82,131176,131177,131179],{"class":84,"line":85},[82,131178,54173],{"class":53863},[82,131180,1349],{"class":92},[82,131182,131183,131186,131188,131190,131192,131195],{"class":84,"line":157},[82,131184,131185],{"class":88},"  background-image",[82,131187,1357],{"class":92},[82,131189,64284],{"class":88},[82,131191,93],{"class":92},[82,131193,131194],{"class":108},"images\u002Fbg.png",[82,131196,5318],{"class":92},[82,131198,131199],{"class":84,"line":404},[82,131200,1391],{"class":92},[278,131202,131203,131212],{},[281,131204,131205],{},[284,131206,131207,131210],{},[287,131208,131209],{"align":26320},"参数值",[287,131211,105247],{"align":26320},[294,131213,131214,131221],{},[284,131215,131216,131218],{},[299,131217,57297],{"align":26320},[299,131219,131220],{"align":26320},"无背景图（默认的）",[284,131222,131223,131225],{},[299,131224,64284],{"align":26320},[299,131226,131227],{"align":26320},"使用绝对或相对地址指定背景图像",[73,131229,131230],{"className":129096,"code":131172,"language":129098,"meta":78,"style":78},[32,131231,131232,131238,131252],{"__ignoreMap":78},[82,131233,131234,131236],{"class":84,"line":85},[82,131235,54173],{"class":53863},[82,131237,1349],{"class":92},[82,131239,131240,131242,131244,131246,131248,131250],{"class":84,"line":157},[82,131241,131185],{"class":88},[82,131243,1357],{"class":92},[82,131245,64284],{"class":88},[82,131247,93],{"class":92},[82,131249,131194],{"class":108},[82,131251,5318],{"class":92},[82,131253,131254],{"class":84,"line":404},[82,131255,1391],{"class":92},[19,131257,131258],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[65,131260,131262],{"id":131261},"_823-背景平铺","8.2.3 背景平铺",[73,131264,131266],{"className":129096,"code":131265,"language":129098,"meta":78,"style":78},"div {\n  background-repeat: no-repeat;\n}\n",[32,131267,131268,131274,131285],{"__ignoreMap":78},[82,131269,131270,131272],{"class":84,"line":85},[82,131271,54173],{"class":53863},[82,131273,1349],{"class":92},[82,131275,131276,131279,131281,131283],{"class":84,"line":157},[82,131277,131278],{"class":88},"  background-repeat",[82,131280,1357],{"class":92},[82,131282,64294],{"class":88},[82,131284,3909],{"class":92},[82,131286,131287],{"class":84,"line":404},[82,131288,1391],{"class":92},[278,131290,131291,131299],{},[281,131292,131293],{},[284,131294,131295,131297],{},[287,131296,131209],{"align":26320},[287,131298,105247],{"align":26320},[294,131300,131301,131309,131316,131324],{},[284,131302,131303,131306],{},[299,131304,131305],{"align":26320},"repeat",[299,131307,131308],{"align":26320},"背景图像在纵向和横向上平铺（默认的）",[284,131310,131311,131313],{},[299,131312,64294],{"align":26320},[299,131314,131315],{"align":26320},"背景图像不平铺",[284,131317,131318,131321],{},[299,131319,131320],{"align":26320},"repeat-x",[299,131322,131323],{"align":26320},"背景图像在横向上平铺",[284,131325,131326,131329],{},[299,131327,131328],{"align":26320},"repeat-y",[299,131330,131331],{"align":26320},"背景图像在纵向平铺",[65,131333,131335],{"id":131334},"_824-背景图片位置","8.2.4 背景图片位置",[73,131337,131339],{"className":129096,"code":131338,"language":129098,"meta":78,"style":78},"\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",[32,131340,131341,131346,131352,131366,131370,131375,131381,131397,131401,131406,131412,131426],{"__ignoreMap":78},[82,131342,131343],{"class":84,"line":85},[82,131344,131345],{"class":2828},"\u002F* 方位名词 *\u002F\n",[82,131347,131348,131350],{"class":84,"line":157},[82,131349,54173],{"class":53863},[82,131351,1349],{"class":92},[82,131353,131354,131357,131359,131361,131364],{"class":84,"line":404},[82,131355,131356],{"class":88},"  background-position",[82,131358,1357],{"class":92},[82,131360,54154],{"class":88},[82,131362,131363],{"class":88}," top",[82,131365,3909],{"class":92},[82,131367,131368],{"class":84,"line":413},[82,131369,1391],{"class":92},[82,131371,131372],{"class":84,"line":508},[82,131373,131374],{"class":2828},"\u002F* 精确单位 *\u002F\n",[82,131376,131377,131379],{"class":84,"line":513},[82,131378,54173],{"class":53863},[82,131380,1349],{"class":92},[82,131382,131383,131385,131387,131389,131391,131393,131395],{"class":84,"line":1388},[82,131384,131356],{"class":88},[82,131386,1357],{"class":92},[82,131388,3451],{"class":88},[82,131390,54054],{"class":112},[82,131392,60062],{"class":88},[82,131394,54054],{"class":112},[82,131396,3909],{"class":92},[82,131398,131399],{"class":84,"line":1394},[82,131400,1391],{"class":92},[82,131402,131403],{"class":84,"line":1399},[82,131404,131405],{"class":2828},"\u002F* 混合单位 *\u002F\n",[82,131407,131408,131410],{"class":84,"line":1430},[82,131409,54173],{"class":53863},[82,131411,1349],{"class":92},[82,131413,131414,131416,131418,131420,131422,131424],{"class":84,"line":1818},[82,131415,131356],{"class":88},[82,131417,1357],{"class":92},[82,131419,3451],{"class":88},[82,131421,54054],{"class":112},[82,131423,19728],{"class":88},[82,131425,3909],{"class":92},[82,131427,131428],{"class":84,"line":2082},[82,131429,1391],{"class":92},[19,131431,131432],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[278,131434,131435,131443],{},[281,131436,131437],{},[284,131438,131439,131441],{},[287,131440,131209],{"align":26320},[287,131442,292],{"align":26320},[294,131444,131445,131452],{},[284,131446,131447,131449],{},[299,131448,54529],{"align":26320},[299,131450,131451],{"align":26320},"百分数|由浮点数和单位标识符组成的长度值",[284,131453,131454,131457],{},[299,131455,131456],{"align":26320},"position",[299,131458,131459],{"align":26320},"top|center|bottom|left|center|right 方位名词",[19,131461,131462],{},"其他说明：",[19,131464,131465],{},"①参数是方位名词",[19,131467,131468],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131470,131471],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131473,131474],{},"②参数是精确单位",[19,131476,131477],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131479,131480],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131482,131483],{},"③参数是混合单位",[19,131485,131486],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[65,131488,131490],{"id":131489},"_825-背景图片固定","8.2.5 背景图片固定",[73,131492,131494],{"className":129096,"code":131493,"language":129098,"meta":78,"style":78},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[32,131495,131496,131501,131507,131519,131523,131528,131534,131544],{"__ignoreMap":78},[82,131497,131498],{"class":84,"line":85},[82,131499,131500],{"class":2828},"\u002F* 背景滚动（默认） *\u002F\n",[82,131502,131503,131505],{"class":84,"line":157},[82,131504,54173],{"class":53863},[82,131506,1349],{"class":92},[82,131508,131509,131512,131514,131517],{"class":84,"line":404},[82,131510,131511],{"class":88},"  background-attachment",[82,131513,1357],{"class":92},[82,131515,131516],{"class":88},"scroll",[82,131518,3909],{"class":92},[82,131520,131521],{"class":84,"line":413},[82,131522,1391],{"class":92},[82,131524,131525],{"class":84,"line":508},[82,131526,131527],{"class":2828},"\u002F* 背景固定 *\u002F\n",[82,131529,131530,131532],{"class":84,"line":513},[82,131531,54173],{"class":53863},[82,131533,1349],{"class":92},[82,131535,131536,131538,131540,131542],{"class":84,"line":1388},[82,131537,131511],{"class":88},[82,131539,1357],{"class":92},[82,131541,88787],{"class":88},[82,131543,3909],{"class":92},[82,131545,131546],{"class":84,"line":1394},[82,131547,1391],{"class":92},[278,131549,131550,131559],{},[281,131551,131552],{},[284,131553,131554,131557],{},[287,131555,131556],{"align":26320},"参数",[287,131558,105247],{"align":26320},[294,131560,131561,131568],{},[284,131562,131563,131565],{},[299,131564,131516],{"align":26320},[299,131566,131567],{"align":26320},"背景图像是随对象内容滚动",[284,131569,131570,131572],{},[299,131571,88787],{"align":26320},[299,131573,131574],{"align":26320},"背景图像固定",[65,131576,131578],{"id":131577},"_826-背景样式合写","8.2.6 背景样式合写",[73,131580,131582],{"className":129096,"code":131581,"language":129098,"meta":78,"style":78},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[32,131583,131584,131589,131595,131623],{"__ignoreMap":78},[82,131585,131586],{"class":84,"line":85},[82,131587,131588],{"class":2828},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[82,131590,131591,131593],{"class":84,"line":157},[82,131592,54173],{"class":53863},[82,131594,1349],{"class":92},[82,131596,131597,131599,131601,131603,131606,131608,131610,131612,131614,131617,131619,131621],{"class":84,"line":404},[82,131598,73167],{"class":88},[82,131600,1357],{"class":92},[82,131602,63400],{"class":88},[82,131604,131605],{"class":88}," url",[82,131607,93],{"class":92},[82,131609,131194],{"class":108},[82,131611,725],{"class":92},[82,131613,64294],{"class":88},[82,131615,131616],{"class":88}," fixed",[82,131618,19728],{"class":88},[82,131620,131363],{"class":88},[82,131622,3909],{"class":92},[82,131624,131625],{"class":84,"line":413},[82,131626,1391],{"class":92},[65,131628,131630],{"id":131629},"_827-背景色半透明","8.2.7 背景色半透明",[73,131632,131634],{"className":129096,"code":131633,"language":129098,"meta":78,"style":78},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[32,131635,131636,131642,131668],{"__ignoreMap":78},[82,131637,131638,131640],{"class":84,"line":85},[82,131639,54173],{"class":53863},[82,131641,1349],{"class":92},[82,131643,131644,131646,131648,131650,131652,131654,131656,131658,131660,131662,131664,131666],{"class":84,"line":157},[82,131645,73167],{"class":88},[82,131647,1357],{"class":92},[82,131649,57670],{"class":88},[82,131651,93],{"class":92},[82,131653,2244],{"class":88},[82,131655,100],{"class":92},[82,131657,2244],{"class":88},[82,131659,100],{"class":92},[82,131661,2244],{"class":88},[82,131663,100],{"class":92},[82,131665,103072],{"class":88},[82,131667,5318],{"class":92},[82,131669,131670],{"class":84,"line":404},[82,131671,1391],{"class":92},[19,131673,101947],{},[19,131675,131676],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131678,131679],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131681,131682],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131684,131685],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[65,131687,131689],{"id":131688},"_828-总结","8.2.8 总结",[278,131691,131692,131703],{},[281,131693,131694],{},[284,131695,131696,131699,131701],{},[287,131697,131698],{"align":26320},"属性",[287,131700,105247],{"align":26320},[287,131702,2916],{"align":26320},[294,131704,131705,131716,131727,131738,131749,131760,131771],{},[284,131706,131707,131710,131713],{},[299,131708,131709],{"align":26320},"background-color",[299,131711,131712],{"align":26320},"背景颜色",[299,131714,131715],{"align":26320},"预定义的颜色值\u002F十六进制\u002FRGB代码",[284,131717,131718,131721,131724],{},[299,131719,131720],{"align":26320},"background-image",[299,131722,131723],{"align":26320},"背景图片",[299,131725,131726],{"align":26320},"url(图片路径)",[284,131728,131729,131732,131735],{},[299,131730,131731],{"align":26320},"background-repeat",[299,131733,131734],{"align":26320},"是否平铺",[299,131736,131737],{"align":26320},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[284,131739,131740,131743,131746],{},[299,131741,131742],{"align":26320},"background-position",[299,131744,131745],{"align":26320},"背景位置",[299,131747,131748],{"align":26320},"length\u002Fposition 分别是x和y坐标",[284,131750,131751,131754,131757],{},[299,131752,131753],{"align":26320},"background-attachment",[299,131755,131756],{"align":26320},"背景附着",[299,131758,131759],{"align":26320},"scroll(背景滚动) \u002Ffixed (背景固定)",[284,131761,131762,131765,131768],{},[299,131763,131764],{"align":26320},"背景简写",[299,131766,131767],{"align":26320},"书写更简单",[299,131769,131770],{"align":26320},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[284,131772,131773,131776,131779],{},[299,131774,131775],{"align":26320},"背景半透明",[299,131777,131778],{"align":26320},"背景颜色半透明",[299,131780,131781],{"align":26320},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131783,131784],{},"颜色渐变：",[4078,131786],{"style":128952,"src":131787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[4078,131789],{"style":128952,"src":131790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[65,131792,131794],{"id":131793},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[73,131796,131798],{"className":129843,"code":131797,"language":129845,"meta":78,"style":78},"\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",[32,131799,131800,131815,131834,131853,131872,131891,131910],{"__ignoreMap":78},[82,131801,131802,131804,131806,131808,131810,131813],{"class":84,"line":85},[82,131803,3659],{"class":92},[82,131805,54173],{"class":53863},[82,131807,56046],{"class":2384},[82,131809,113],{"class":92},[82,131811,131812],{"class":96},"\"nav\"",[82,131814,53870],{"class":92},[82,131816,131817,131819,131821,131823,131825,131827,131830,131832],{"class":84,"line":157},[82,131818,54705],{"class":92},[82,131820,323],{"class":53863},[82,131822,63615],{"class":2384},[82,131824,113],{"class":92},[82,131826,63620],{"class":96},[82,131828,131829],{"class":92},">五彩导航1\u003C\u002F",[82,131831,323],{"class":53863},[82,131833,53870],{"class":92},[82,131835,131836,131838,131840,131842,131844,131846,131849,131851],{"class":84,"line":404},[82,131837,54705],{"class":92},[82,131839,323],{"class":53863},[82,131841,63615],{"class":2384},[82,131843,113],{"class":92},[82,131845,63620],{"class":96},[82,131847,131848],{"class":92},">五彩导航2\u003C\u002F",[82,131850,323],{"class":53863},[82,131852,53870],{"class":92},[82,131854,131855,131857,131859,131861,131863,131865,131868,131870],{"class":84,"line":413},[82,131856,54705],{"class":92},[82,131858,323],{"class":53863},[82,131860,63615],{"class":2384},[82,131862,113],{"class":92},[82,131864,63620],{"class":96},[82,131866,131867],{"class":92},">五彩导航3\u003C\u002F",[82,131869,323],{"class":53863},[82,131871,53870],{"class":92},[82,131873,131874,131876,131878,131880,131882,131884,131887,131889],{"class":84,"line":508},[82,131875,54705],{"class":92},[82,131877,323],{"class":53863},[82,131879,63615],{"class":2384},[82,131881,113],{"class":92},[82,131883,63620],{"class":96},[82,131885,131886],{"class":92},">五彩导航4\u003C\u002F",[82,131888,323],{"class":53863},[82,131890,53870],{"class":92},[82,131892,131893,131895,131897,131899,131901,131903,131906,131908],{"class":84,"line":513},[82,131894,54705],{"class":92},[82,131896,323],{"class":53863},[82,131898,63615],{"class":2384},[82,131900,113],{"class":92},[82,131902,63620],{"class":96},[82,131904,131905],{"class":92},">五彩导航5\u003C\u002F",[82,131907,323],{"class":53863},[82,131909,53870],{"class":92},[82,131911,131912,131914,131916],{"class":84,"line":1388},[82,131913,54347],{"class":92},[82,131915,54173],{"class":53863},[82,131917,53870],{"class":92},[73,131919,131921],{"className":129096,"code":131920,"language":129098,"meta":78,"style":78},".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",[32,131922,131923,131932,131942,131954,131966,131976,131988,131998,132002,132027,132050,132073,132096],{"__ignoreMap":78},[82,131924,131925,131928,131930],{"class":84,"line":85},[82,131926,131927],{"class":2384},".nav",[82,131929,4014],{"class":53863},[82,131931,1349],{"class":92},[82,131933,131934,131936,131938,131940],{"class":84,"line":157},[82,131935,130712],{"class":88},[82,131937,1357],{"class":92},[82,131939,74939],{"class":88},[82,131941,3909],{"class":92},[82,131943,131944,131946,131948,131950,131952],{"class":84,"line":404},[82,131945,73124],{"class":88},[82,131947,1357],{"class":92},[82,131949,3566],{"class":88},[82,131951,54054],{"class":112},[82,131953,3909],{"class":92},[82,131955,131956,131958,131960,131962,131964],{"class":84,"line":413},[82,131957,73344],{"class":88},[82,131959,1357],{"class":92},[82,131961,3605],{"class":88},[82,131963,54054],{"class":112},[82,131965,3909],{"class":92},[82,131967,131968,131970,131972,131974],{"class":84,"line":508},[82,131969,73082],{"class":88},[82,131971,1357],{"class":92},[82,131973,54154],{"class":88},[82,131975,3909],{"class":92},[82,131977,131978,131980,131982,131984,131986],{"class":84,"line":513},[82,131979,129780],{"class":88},[82,131981,1357],{"class":92},[82,131983,3605],{"class":88},[82,131985,54054],{"class":112},[82,131987,3909],{"class":92},[82,131989,131990,131992,131994,131996],{"class":84,"line":1388},[82,131991,73461],{"class":88},[82,131993,1357],{"class":92},[82,131995,63400],{"class":88},[82,131997,3909],{"class":92},[82,131999,132000],{"class":84,"line":1394},[82,132001,1391],{"class":92},[82,132003,132004,132006,132008,132011,132013,132015,132018,132020,132022,132024],{"class":84,"line":1399},[82,132005,131927],{"class":2384},[82,132007,4014],{"class":53863},[82,132009,132010],{"class":2384},":nth-child",[82,132012,93],{"class":92},[82,132014,2283],{"class":88},[82,132016,132017],{"class":92},") { ",[82,132019,131709],{"class":88},[82,132021,1357],{"class":92},[82,132023,131127],{"class":88},[82,132025,132026],{"class":92},"; }\n",[82,132028,132029,132031,132033,132035,132037,132039,132041,132043,132045,132048],{"class":84,"line":1430},[82,132030,131927],{"class":2384},[82,132032,4014],{"class":53863},[82,132034,132010],{"class":2384},[82,132036,93],{"class":92},[82,132038,1425],{"class":88},[82,132040,132017],{"class":92},[82,132042,131709],{"class":88},[82,132044,1357],{"class":92},[82,132046,132047],{"class":88},"#ff0000",[82,132049,132026],{"class":92},[82,132051,132052,132054,132056,132058,132060,132062,132064,132066,132068,132071],{"class":84,"line":1818},[82,132053,131927],{"class":2384},[82,132055,4014],{"class":53863},[82,132057,132010],{"class":2384},[82,132059,93],{"class":92},[82,132061,2841],{"class":88},[82,132063,132017],{"class":92},[82,132065,131709],{"class":88},[82,132067,1357],{"class":92},[82,132069,132070],{"class":88},"#00a4ff",[82,132072,132026],{"class":92},[82,132074,132075,132077,132079,132081,132083,132085,132087,132089,132091,132094],{"class":84,"line":2082},[82,132076,131927],{"class":2384},[82,132078,4014],{"class":53863},[82,132080,132010],{"class":2384},[82,132082,93],{"class":92},[82,132084,3051],{"class":88},[82,132086,132017],{"class":92},[82,132088,131709],{"class":88},[82,132090,1357],{"class":92},[82,132092,132093],{"class":88},"#ff00ff",[82,132095,132026],{"class":92},[82,132097,132098,132100,132102,132104,132106,132108,132110,132112,132114,132117],{"class":84,"line":2233},[82,132099,131927],{"class":2384},[82,132101,4014],{"class":53863},[82,132103,132010],{"class":2384},[82,132105,93],{"class":92},[82,132107,3077],{"class":88},[82,132109,132017],{"class":92},[82,132111,131709],{"class":88},[82,132113,1357],{"class":92},[82,132115,132116],{"class":88},"#00ff00",[82,132118,132026],{"class":92},[14,132120,132122],{"id":132121},"_83-css三大特性","8.3 css三大特性",[65,132124,132126],{"id":132125},"_831-层叠性","8.3.1 层叠性",[19,132128,132129],{},"为了解决样式冲突问题",[19,132131,132132],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132134,132135],{},"   ②样式不冲突，不会层叠",[65,132137,132139],{"id":132138},"_832-继承性","8.3.2 继承性",[19,132141,132142],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132144,132145],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[73,132147,132149],{"className":129096,"code":132148,"language":129098,"meta":78,"style":78},"p {\n  color: #333;\n}\n",[32,132150,132151,132157,132167],{"__ignoreMap":78},[82,132152,132153,132155],{"class":84,"line":85},[82,132154,19],{"class":53863},[82,132156,1349],{"class":92},[82,132158,132159,132161,132163,132165],{"class":84,"line":157},[82,132160,73461],{"class":88},[82,132162,1357],{"class":92},[82,132164,64927],{"class":88},[82,132166,3909],{"class":92},[82,132168,132169],{"class":84,"line":404},[82,132170,1391],{"class":92},[4078,132172],{"style":128952,"src":132173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132175,132176],{},"解释：①行高可以跟单位也可以不跟单位",[19,132178,132179],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132181,132182],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132184,132185],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[65,132187,132189],{"id":132188},"_833-优先级","8.3.3 优先级",[26,132191,132192,132195],{},[29,132193,132194],{},"选择器相同，则执行层叠性",[29,132196,132197],{},"选择器不同，则根据选择器权重执行",[278,132199,132200,132210],{},[281,132201,132202],{},[284,132203,132204,132207],{},[287,132205,132206],{"align":26320},"选择器",[287,132208,132209],{"align":26320},"选择器权重",[294,132211,132212,132220,132228,132236,132244,132252],{},[284,132213,132214,132217],{},[299,132215,132216],{"align":26320},"继承 或者*",[299,132218,132219],{"align":26320},"0，0，0，0",[284,132221,132222,132225],{},[299,132223,132224],{"align":26320},"标签选择器",[299,132226,132227],{"align":26320},"0，0，0，1",[284,132229,132230,132233],{},[299,132231,132232],{"align":26320},"类选择器，伪类选择器",[299,132234,132235],{"align":26320},"0，0，1，0",[284,132237,132238,132241],{},[299,132239,132240],{"align":26320},"ID选择器",[299,132242,132243],{"align":26320},"0，1，0，0",[284,132245,132246,132249],{},[299,132247,132248],{"align":26320},"行内样式",[299,132250,132251],{"align":26320},"1，0，0，0",[284,132253,132254,132257],{},[299,132255,132256],{"align":26320},"！important",[299,132258,132259],{"align":26320},"无穷大",[19,132261,132262],{},"! important用法：",[73,132264,132266],{"className":129096,"code":132265,"language":129098,"meta":78,"style":78},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[32,132267,132268,132273,132279,132292,132296,132301,132307,132317],{"__ignoreMap":78},[82,132269,132270],{"class":84,"line":85},[82,132271,132272],{"class":2828},"\u002F* !important 拥有最高优先级 *\u002F\n",[82,132274,132275,132277],{"class":84,"line":157},[82,132276,54173],{"class":53863},[82,132278,1349],{"class":92},[82,132280,132281,132283,132285,132287,132290],{"class":84,"line":404},[82,132282,73461],{"class":88},[82,132284,1357],{"class":92},[82,132286,54207],{"class":88},[82,132288,132289],{"class":112}," !important",[82,132291,3909],{"class":92},[82,132293,132294],{"class":84,"line":413},[82,132295,1391],{"class":92},[82,132297,132298],{"class":84,"line":508},[82,132299,132300],{"class":2828},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[82,132302,132303,132305],{"class":84,"line":513},[82,132304,54173],{"class":53863},[82,132306,1349],{"class":92},[82,132308,132309,132311,132313,132315],{"class":84,"line":1388},[82,132310,73461],{"class":88},[82,132312,1357],{"class":92},[82,132314,59979],{"class":88},[82,132316,3909],{"class":92},[82,132318,132319],{"class":84,"line":1394},[82,132320,1391],{"class":92},[19,132322,132323],{},"优先级注意点：",[19,132325,132326],{},"①权重是有4组数字组成,但是不会有进位",[19,132328,132329],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132331,132332],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132334,132335],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132337,132338],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132340,132341],{},"⑥复合选择器",[278,132343,132344,132354],{},[281,132345,132346],{},[284,132347,132348,132351],{},[287,132349,132350],{"align":26320},"div ul li",[287,132352,132353],{"align":26320},"0,0,0,3",[294,132355,132356,132364,132372],{},[284,132357,132358,132361],{},[299,132359,132360],{"align":26320},".nav ul li",[299,132362,132363],{"align":26320},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[284,132365,132366,132369],{},[299,132367,132368],{"align":26320},"a:hover",[299,132370,132371],{"align":26320},"0,0,1,1",[284,132373,132374,132377],{},[299,132375,132376],{"align":26320},".nav a",[299,132378,132371],{"align":26320},[2671,132380,132381],{},"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":78,"searchDepth":157,"depth":157,"links":132383},[132384,132392,132403],{"id":130492,"depth":157,"text":130493,"children":132385},[132386,132387,132388,132389,132390,132391],{"id":130505,"depth":404,"text":130506},{"id":130577,"depth":404,"text":130578},{"id":130649,"depth":404,"text":130650},{"id":130680,"depth":404,"text":130681},{"id":130687,"depth":404,"text":130688},{"id":130840,"depth":404,"text":130841},{"id":131148,"depth":157,"text":131149,"children":132393},[132394,132395,132396,132397,132398,132399,132400,132401,132402],{"id":131155,"depth":404,"text":131156},{"id":131165,"depth":404,"text":131166},{"id":131261,"depth":404,"text":131262},{"id":131334,"depth":404,"text":131335},{"id":131489,"depth":404,"text":131490},{"id":131577,"depth":404,"text":131578},{"id":131629,"depth":404,"text":131630},{"id":131688,"depth":404,"text":131689},{"id":131793,"depth":404,"text":131794},{"id":132121,"depth":157,"text":132122,"children":132404},[132405,132406,132407],{"id":132125,"depth":404,"text":132126},{"id":132138,"depth":404,"text":132139},{"id":132188,"depth":404,"text":132189},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130484,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132414,"title":132415,"body":132416,"description":2699,"extension":2700,"meta":134006,"navigation":485,"path":134007,"seo":134008,"stem":134009,"__hash__":134010},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132417,"toc":133985},[132418,132421,132425,132428,132431,132434,132437,132440,132443,132446,132450,132458,132495,132531,132534,132548,132553,132587,132590,132683,132688,132691,132721,132724,132729,132737,132741,132748,132794,132838,132843,132846,132849,132852,132855,132858,132861,132863,132866,132870,132875,132919,132924,132927,132930,132967,132972,132975,132978,132981,132984,133016,133019,133022,133025,133057,133060,133063,133066,133070,133073,133105,133108,133112,133132,133135,133143,133146,133150,133155,133158,133190,133195,133198,133236,133240,133245,133248,133251,133282,133285,133302,133307,133359,133419,133424,133478,133516,133520,133524,133527,133531,133539,133542,133544,133555,133560,133608,133642,133645,133648,133651,133654,133698,133701,133704,133707,133710,133713,133716,133760,133763,133766,133769,133772,133775,133778,133784,133787,133831,133834,133837,133840,133843,133846,133890,133893,133895,133898,133902,133906,133944,133948,133951,133954,133958,133966,133970,133973,133976,133979,133982],[10,132419,132415],{"id":132420},"_9-css盒模型浮动与切图",[14,132422,132424],{"id":132423},"_91-盒子模型","9.1 盒子模型",[19,132426,132427],{},"利用盒子来设计网页",[19,132429,132430],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132432,132433],{},"网页布局设置：",[19,132435,132436],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132438,132439],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132441,132442],{},"③往盒子里装内容",[4078,132444],{"style":128952,"src":132445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[65,132447,132449],{"id":132448},"_911-边框border","9.1.1 边框（border）",[26,132451,132452,132455],{},[29,132453,132454],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,132456,132457],{},"语法",[73,132459,132461],{"className":129096,"code":132460,"language":129098,"meta":78,"style":78},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[32,132462,132463,132468,132474,132491],{"__ignoreMap":78},[82,132464,132465],{"class":84,"line":85},[82,132466,132467],{"class":2828},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[82,132469,132470,132472],{"class":84,"line":157},[82,132471,54173],{"class":53863},[82,132473,1349],{"class":92},[82,132475,132476,132478,132480,132482,132484,132486,132489],{"class":84,"line":404},[82,132477,73452],{"class":88},[82,132479,1357],{"class":92},[82,132481,2283],{"class":88},[82,132483,54054],{"class":112},[82,132485,54083],{"class":88},[82,132487,132488],{"class":88}," #ccc",[82,132490,3909],{"class":92},[82,132492,132493],{"class":84,"line":413},[82,132494,1391],{"class":92},[278,132496,132497,132505],{},[281,132498,132499],{},[284,132500,132501,132503],{},[287,132502,131698],{"align":26320},[287,132504,105247],{"align":26320},[294,132506,132507,132515,132523],{},[284,132508,132509,132512],{},[299,132510,132511],{"align":26320},"border-width",[299,132513,132514],{"align":26320},"定义边框粗细，单位是px",[284,132516,132517,132520],{},[299,132518,132519],{"align":26320},"border-style",[299,132521,132522],{"align":26320},"边框的样式",[284,132524,132525,132528],{},[299,132526,132527],{"align":26320},"border-color",[299,132529,132530],{"align":26320},"边框的颜色",[19,132532,132533],{},"边框样式 border-style 可以设置如下值：",[3755,132535,132536,132539,132542,132545],{},[29,132537,132538],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,132540,132541],{},"solid：边框为单实线(最为常用的)",[29,132543,132544],{},"dashed：边框为虚线",[29,132546,132547],{},"dotted：边框为点线",[26,132549,132550],{"start":404},[29,132551,132552],{},"边框的合写分写",[73,132554,132555],{"className":129096,"code":132460,"language":129098,"meta":78,"style":78},[32,132556,132557,132561,132567,132583],{"__ignoreMap":78},[82,132558,132559],{"class":84,"line":85},[82,132560,132467],{"class":2828},[82,132562,132563,132565],{"class":84,"line":157},[82,132564,54173],{"class":53863},[82,132566,1349],{"class":92},[82,132568,132569,132571,132573,132575,132577,132579,132581],{"class":84,"line":404},[82,132570,73452],{"class":88},[82,132572,1357],{"class":92},[82,132574,2283],{"class":88},[82,132576,54054],{"class":112},[82,132578,54083],{"class":88},[82,132580,132488],{"class":88},[82,132582,3909],{"class":92},[82,132584,132585],{"class":84,"line":413},[82,132586,1391],{"class":92},[19,132588,132589],{},"边框分开写法：",[73,132591,132593],{"className":129096,"code":132592,"language":129098,"meta":78,"style":78},"\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",[32,132594,132595,132600,132606,132624,132642,132661,132679],{"__ignoreMap":78},[82,132596,132597],{"class":84,"line":85},[82,132598,132599],{"class":2828},"\u002F* 边框分开写法 *\u002F\n",[82,132601,132602,132604],{"class":84,"line":157},[82,132603,54173],{"class":53863},[82,132605,1349],{"class":92},[82,132607,132608,132611,132613,132615,132617,132619,132622],{"class":84,"line":404},[82,132609,132610],{"class":88},"  border-top",[82,132612,1357],{"class":92},[82,132614,2283],{"class":88},[82,132616,54054],{"class":112},[82,132618,54083],{"class":88},[82,132620,132621],{"class":88}," #000",[82,132623,3909],{"class":92},[82,132625,132626,132629,132631,132633,132635,132637,132640],{"class":84,"line":413},[82,132627,132628],{"class":88},"  border-right",[82,132630,1357],{"class":92},[82,132632,1425],{"class":88},[82,132634,54054],{"class":112},[82,132636,64799],{"class":88},[82,132638,132639],{"class":88}," #333",[82,132641,3909],{"class":92},[82,132643,132644,132647,132649,132651,132653,132656,132659],{"class":84,"line":508},[82,132645,132646],{"class":88},"  border-bottom",[82,132648,1357],{"class":92},[82,132650,2841],{"class":88},[82,132652,54054],{"class":112},[82,132654,132655],{"class":88}," dotted",[82,132657,132658],{"class":88}," #666",[82,132660,3909],{"class":92},[82,132662,132663,132666,132668,132670,132672,132674,132677],{"class":84,"line":513},[82,132664,132665],{"class":88},"  border-left",[82,132667,1357],{"class":92},[82,132669,2283],{"class":88},[82,132671,54054],{"class":112},[82,132673,54083],{"class":88},[82,132675,132676],{"class":88}," #999",[82,132678,3909],{"class":92},[82,132680,132681],{"class":84,"line":1388},[82,132682,1391],{"class":92},[26,132684,132685],{"start":413},[29,132686,132687],{},"表格的细线边框",[19,132689,132690],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[73,132692,132694],{"className":129096,"code":132693,"language":129098,"meta":78,"style":78},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[32,132695,132696,132701,132707,132717],{"__ignoreMap":78},[82,132697,132698],{"class":84,"line":85},[82,132699,132700],{"class":2828},"\u002F* 表格细线边框合并 *\u002F\n",[82,132702,132703,132705],{"class":84,"line":157},[82,132704,278],{"class":53863},[82,132706,1349],{"class":92},[82,132708,132709,132711,132713,132715],{"class":84,"line":404},[82,132710,73134],{"class":88},[82,132712,1357],{"class":92},[82,132714,67592],{"class":88},[82,132716,3909],{"class":92},[82,132718,132719],{"class":84,"line":413},[82,132720,1391],{"class":92},[19,132722,132723],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,132725,132726],{"start":508},[29,132727,132728],{},"解决边框额外增加盒子的实际大小的方法：",[3755,132730,132731,132734],{},[29,132732,132733],{},"测量盒子大小的时候,不量边框",[29,132735,132736],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[65,132738,132740],{"id":132739},"_912-内边距","9.1.2 内边距",[26,132742,132743,132746],{},[29,132744,132745],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,132747,132457],{},[278,132749,132750,132760],{},[281,132751,132752],{},[284,132753,132754,132757],{},[287,132755,132756],{"align":26320},"值的个数",[287,132758,132759],{"align":26320},"表达意思",[294,132761,132762,132770,132778,132786],{},[284,132763,132764,132767],{},[299,132765,132766],{"align":26320},"padding: 5px;",[299,132768,132769],{"align":26320},"1个值，代表上下左右都有5个元素",[284,132771,132772,132775],{},[299,132773,132774],{"align":26320},"padding: 5px 10px;",[299,132776,132777],{"align":26320},"2个值，代表上下内边距为5像素，左右内边距为10像素",[284,132779,132780,132783],{},[299,132781,132782],{"align":26320},"padding: 5px 10px 20px;",[299,132784,132785],{"align":26320},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[284,132787,132788,132791],{},[299,132789,132790],{"align":26320},"padding: 5px 10px 20px 30px;",[299,132792,132793],{"align":26320},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[278,132795,132796,132804],{},[281,132797,132798],{},[284,132799,132800,132802],{},[287,132801,131698],{"align":26320},[287,132803,105247],{"align":26320},[294,132805,132806,132814,132822,132830],{},[284,132807,132808,132811],{},[299,132809,132810],{"align":26320},"padding-left",[299,132812,132813],{"align":26320},"左内边距",[284,132815,132816,132819],{},[299,132817,132818],{"align":26320},"padding-right",[299,132820,132821],{"align":26320},"右内边距",[284,132823,132824,132827],{},[299,132825,132826],{"align":26320},"padding-top",[299,132828,132829],{"align":26320},"上内边距",[284,132831,132832,132835],{},[299,132833,132834],{"align":26320},"padding-bottom",[299,132836,132837],{"align":26320},"下内边距",[26,132839,132840],{"start":404},[29,132841,132842],{},"内边距会影响盒子的实际大小",[19,132844,132845],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132847,132848],{},"①内容和边框有了距离，添加了内边距",[19,132850,132851],{},"②padding影响了盒子实际大小",[19,132853,132854],{},"内边距对盒子大小的影响：",[19,132856,132857],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132859,132860],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132862,97771],{},[19,132864,132865],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[65,132867,132869],{"id":132868},"_913-外边距","9.1.3 外边距",[26,132871,132872],{},[29,132873,132874],{},"控制盒子与盒子之间的距离",[278,132876,132877,132885],{},[281,132878,132879],{},[284,132880,132881,132883],{},[287,132882,131698],{"align":26320},[287,132884,105247],{"align":26320},[294,132886,132887,132895,132903,132911],{},[284,132888,132889,132892],{},[299,132890,132891],{"align":26320},"margin-left",[299,132893,132894],{"align":26320},"左外边距",[284,132896,132897,132900],{},[299,132898,132899],{"align":26320},"margin-right",[299,132901,132902],{"align":26320},"右外边距",[284,132904,132905,132908],{},[299,132906,132907],{"align":26320},"margin-top",[299,132909,132910],{"align":26320},"上外边距",[284,132912,132913,132916],{},[299,132914,132915],{"align":26320},"margin-bottom",[299,132917,132918],{"align":26320},"下外边距",[26,132920,132921],{"start":157},[29,132922,132923],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132925,132926],{},"①盒子必须指定了宽度（width）",[19,132928,132929],{},"②盒子左右的外边距都设置为 auto",[73,132931,132933],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,132934,132935,132940,132947,132963],{"__ignoreMap":78},[82,132936,132937],{"class":84,"line":85},[82,132938,132939],{"class":2828},"\u002F* margin 复合写法（同上） *\u002F\n",[82,132941,132942,132945],{"class":84,"line":157},[82,132943,132944],{"class":2384},".box",[82,132946,1349],{"class":92},[82,132948,132949,132951,132953,132955,132957,132960],{"class":84,"line":404},[82,132950,73026],{"class":88},[82,132952,1357],{"class":92},[82,132954,2244],{"class":88},[82,132956,54118],{"class":88},[82,132958,132959],{"class":92},";  ",[82,132961,132962],{"class":2828},"\u002F* 块级盒子水平居中 *\u002F\n",[82,132964,132965],{"class":84,"line":413},[82,132966,1391],{"class":92},[26,132968,132969],{"start":404},[29,132970,132971],{},"外边距塌陷问题",[19,132973,132974],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[4078,132976],{"style":128952,"src":132977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132979,132980],{},"解决方案：",[19,132982,132983],{},"①可以为父亲元素定义上边距",[73,132985,132986],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,132987,132988,132992,132998,133012],{"__ignoreMap":78},[82,132989,132990],{"class":84,"line":85},[82,132991,132939],{"class":2828},[82,132993,132994,132996],{"class":84,"line":157},[82,132995,132944],{"class":2384},[82,132997,1349],{"class":92},[82,132999,133000,133002,133004,133006,133008,133010],{"class":84,"line":404},[82,133001,73026],{"class":88},[82,133003,1357],{"class":92},[82,133005,2244],{"class":88},[82,133007,54118],{"class":88},[82,133009,132959],{"class":92},[82,133011,132962],{"class":2828},[82,133013,133014],{"class":84,"line":413},[82,133015,1391],{"class":92},[19,133017,133018],{},"②可以为父亲元素定义上内边距",[19,133020,133021],{},"③可以为父亲元素添加overflow:hidden",[4078,133023],{"style":128952,"src":133024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[73,133026,133027],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,133028,133029,133033,133039,133053],{"__ignoreMap":78},[82,133030,133031],{"class":84,"line":85},[82,133032,132939],{"class":2828},[82,133034,133035,133037],{"class":84,"line":157},[82,133036,132944],{"class":2384},[82,133038,1349],{"class":92},[82,133040,133041,133043,133045,133047,133049,133051],{"class":84,"line":404},[82,133042,73026],{"class":88},[82,133044,1357],{"class":92},[82,133046,2244],{"class":88},[82,133048,54118],{"class":88},[82,133050,132959],{"class":92},[82,133052,132962],{"class":2828},[82,133054,133055],{"class":84,"line":413},[82,133056,1391],{"class":92},[4078,133058],{"style":128952,"src":133059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,133061,133062],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,133064,133065],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[65,133067,133069],{"id":133068},"_914-清除内外边距","9.1.4 清除内外边距",[19,133071,133072],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[73,133074,133075],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,133076,133077,133081,133087,133101],{"__ignoreMap":78},[82,133078,133079],{"class":84,"line":85},[82,133080,132939],{"class":2828},[82,133082,133083,133085],{"class":84,"line":157},[82,133084,132944],{"class":2384},[82,133086,1349],{"class":92},[82,133088,133089,133091,133093,133095,133097,133099],{"class":84,"line":404},[82,133090,73026],{"class":88},[82,133092,1357],{"class":92},[82,133094,2244],{"class":88},[82,133096,54118],{"class":88},[82,133098,132959],{"class":92},[82,133100,132962],{"class":2828},[82,133102,133103],{"class":84,"line":413},[82,133104,1391],{"class":92},[19,133106,133107],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[65,133109,133111],{"id":133110},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3755,133113,133114,133117,133120,133123,133126,133129],{},[29,133115,133116],{},"文件→打开 ：可以打开我们要测量的图片",[29,133118,133119],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,133121,133122],{},"右击标尺，把里面的单位改为像素",[29,133124,133125],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,133127,133128],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,133130,133131],{},"用选区拖动 可以测量大小",[4078,133133],{"style":128952,"src":133134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3755,133136,133137,133140],{},[29,133138,133139],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,133141,133142],{},"吸管取色工具",[4078,133144],{"style":128952,"src":133145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[65,133147,133149],{"id":133148},"_916-案例","9.1.6 案例",[26,133151,133152],{},[29,133153,133154],{},"小米商品",[4078,133156],{"style":128952,"src":133157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[73,133159,133160],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,133161,133162,133166,133172,133186],{"__ignoreMap":78},[82,133163,133164],{"class":84,"line":85},[82,133165,132939],{"class":2828},[82,133167,133168,133170],{"class":84,"line":157},[82,133169,132944],{"class":2384},[82,133171,1349],{"class":92},[82,133173,133174,133176,133178,133180,133182,133184],{"class":84,"line":404},[82,133175,73026],{"class":88},[82,133177,1357],{"class":92},[82,133179,2244],{"class":88},[82,133181,54118],{"class":88},[82,133183,132959],{"class":92},[82,133185,132962],{"class":2828},[82,133187,133188],{"class":84,"line":413},[82,133189,1391],{"class":92},[26,133191,133192],{"start":157},[29,133193,133194],{},"快报模块",[4078,133196],{"style":128952,"src":133197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[73,133199,133201],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[32,133202,133203,133208,133223,133228],{"__ignoreMap":78},[82,133204,133205],{"class":84,"line":85},[82,133206,133207],{"class":2828},"\u003C!-- HTML 代码示例 -->\n",[82,133209,133210,133212,133214,133216,133218,133221],{"class":84,"line":157},[82,133211,3659],{"class":92},[82,133213,54173],{"class":53863},[82,133215,56046],{"class":2384},[82,133217,113],{"class":92},[82,133219,133220],{"class":96},"\"example\"",[82,133222,53870],{"class":92},[82,133224,133225],{"class":84,"line":404},[82,133226,133227],{"class":92},"  示例内容\n",[82,133229,133230,133232,133234],{"class":84,"line":413},[82,133231,54347],{"class":92},[82,133233,54173],{"class":53863},[82,133235,53870],{"class":92},[65,133237,133239],{"id":133238},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,133241,133242],{},[29,133243,133244],{},"圆角边框",[19,133246,133247],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[4078,133249],{"style":128952,"src":133250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[73,133252,133254],{"className":129096,"code":133253,"language":129098,"meta":78,"style":78},"div {\n  border: 1px solid #ccc;\n}\n",[32,133255,133256,133262,133278],{"__ignoreMap":78},[82,133257,133258,133260],{"class":84,"line":85},[82,133259,54173],{"class":53863},[82,133261,1349],{"class":92},[82,133263,133264,133266,133268,133270,133272,133274,133276],{"class":84,"line":157},[82,133265,73452],{"class":88},[82,133267,1357],{"class":92},[82,133269,2283],{"class":88},[82,133271,54054],{"class":112},[82,133273,54083],{"class":88},[82,133275,132488],{"class":88},[82,133277,3909],{"class":92},[82,133279,133280],{"class":84,"line":404},[82,133281,1391],{"class":92},[19,133283,133284],{},"解释:",[3755,133286,133287,133290,133293,133296,133299],{},[29,133288,133289],{},"参数值可以为数值或百分比的形式",[29,133291,133292],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,133294,133295],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,133297,133298],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,133300,133301],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,133303,133304],{"start":157},[29,133305,133306],{},"盒子阴影",[73,133308,133310],{"className":129096,"code":133309,"language":129098,"meta":78,"style":78},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[32,133311,133312,133318,133355],{"__ignoreMap":78},[82,133313,133314,133316],{"class":84,"line":85},[82,133315,54173],{"class":53863},[82,133317,1349],{"class":92},[82,133319,133320,133323,133325,133327,133329,133331,133333,133335,133337,133339,133341,133343,133345,133347,133349,133351,133353],{"class":84,"line":157},[82,133321,133322],{"class":88},"  box-shadow",[82,133324,1357],{"class":92},[82,133326,2244],{"class":88},[82,133328,17341],{"class":88},[82,133330,54054],{"class":112},[82,133332,4638],{"class":88},[82,133334,54054],{"class":112},[82,133336,81321],{"class":88},[82,133338,93],{"class":92},[82,133340,2244],{"class":88},[82,133342,100],{"class":92},[82,133344,2244],{"class":88},[82,133346,100],{"class":92},[82,133348,2244],{"class":88},[82,133350,100],{"class":92},[82,133352,88764],{"class":88},[82,133354,5318],{"class":92},[82,133356,133357],{"class":84,"line":404},[82,133358,1391],{"class":92},[278,133360,133361,133369],{},[281,133362,133363],{},[284,133364,133365,133367],{},[287,133366,2916],{"align":26320},[287,133368,30071],{"align":26320},[294,133370,133371,133379,133387,133395,133403,133411],{},[284,133372,133373,133376],{},[299,133374,133375],{"align":26320},"h-shadow",[299,133377,133378],{"align":26320},"必需,水平阴影的位置,允许负值",[284,133380,133381,133384],{},[299,133382,133383],{"align":26320},"v-shadow",[299,133385,133386],{"align":26320},"必需,垂直阴影的位置,允许负值",[284,133388,133389,133392],{},[299,133390,133391],{"align":26320},"blur",[299,133393,133394],{"align":26320},"可选,模糊距离,就是影子的虚实",[284,133396,133397,133400],{},[299,133398,133399],{"align":26320},"spread",[299,133401,133402],{"align":26320},"可选,阴影尺寸",[284,133404,133405,133408],{},[299,133406,133407],{"align":26320},"color",[299,133409,133410],{"align":26320},"可选,阴影的颜色",[284,133412,133413,133416],{},[299,133414,133415],{"align":26320},"inset",[299,133417,133418],{"align":26320},"可选,将外部阴影(outset)改为内部阴影",[26,133420,133421],{"start":404},[29,133422,133423],{},"文字阴影",[73,133425,133427],{"className":129096,"code":133426,"language":129098,"meta":78,"style":78},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[32,133428,133429,133435,133474],{"__ignoreMap":78},[82,133430,133431,133433],{"class":84,"line":85},[82,133432,19],{"class":53863},[82,133434,1349],{"class":92},[82,133436,133437,133440,133442,133444,133446,133448,133450,133452,133454,133456,133458,133460,133462,133464,133466,133468,133470,133472],{"class":84,"line":157},[82,133438,133439],{"class":88},"  text-shadow",[82,133441,1357],{"class":92},[82,133443,2283],{"class":88},[82,133445,54054],{"class":112},[82,133447,27703],{"class":88},[82,133449,54054],{"class":112},[82,133451,17341],{"class":88},[82,133453,54054],{"class":112},[82,133455,81321],{"class":88},[82,133457,93],{"class":92},[82,133459,2244],{"class":88},[82,133461,100],{"class":92},[82,133463,2244],{"class":88},[82,133465,100],{"class":92},[82,133467,2244],{"class":88},[82,133469,100],{"class":92},[82,133471,103072],{"class":88},[82,133473,5318],{"class":92},[82,133475,133476],{"class":84,"line":404},[82,133477,1391],{"class":92},[278,133479,133480,133488],{},[281,133481,133482],{},[284,133483,133484,133486],{},[287,133485,2916],{"align":26320},[287,133487,30071],{"align":26320},[294,133489,133490,133496,133503,133510],{},[284,133491,133492,133494],{},[299,133493,133375],{"align":26320},[299,133495,133378],{"align":26320},[284,133497,133498,133500],{},[299,133499,133383],{"align":26320},[299,133501,133502],{"align":26320},"必需,垂直阴影位置,允许负值",[284,133504,133505,133507],{},[299,133506,133391],{"align":26320},[299,133508,133509],{"align":26320},"可选,模糊的距离",[284,133511,133512,133514],{},[299,133513,133407],{"align":26320},[299,133515,133410],{"align":26320},[14,133517,133519],{"id":133518},"_92-浮动","9.2 浮动",[65,133521,133523],{"id":133522},"_921-浮动介绍","9.2.1 浮动介绍",[19,133525,133526],{},"在16.2中详细介绍",[65,133528,133530],{"id":133529},"_922-清除浮动","9.2.2 清除浮动",[26,133532,133533,133536],{},[29,133534,133535],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,133537,133538],{},"清除浮动的本质",[19,133540,133541],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133543,11616],{},[3755,133545,133546,133549,133552],{},[29,133547,133548],{},"如果父盒子本身有高度，则不需要清除浮动",[29,133550,133551],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,133553,133554],{},"父级有了高度，就不会影响下面的标准流了",[26,133556,133557],{"start":404},[29,133558,133559],{},"清除浮动样式",[73,133561,133563],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[32,133564,133565,133572,133583,133587,133594,133604],{"__ignoreMap":78},[82,133566,133567,133570],{"class":84,"line":85},[82,133568,133569],{"class":2384},".left",[82,133571,1349],{"class":92},[82,133573,133574,133577,133579,133581],{"class":84,"line":157},[82,133575,133576],{"class":88},"  float",[82,133578,1357],{"class":92},[82,133580,26320],{"class":88},[82,133582,3909],{"class":92},[82,133584,133585],{"class":84,"line":404},[82,133586,1391],{"class":92},[82,133588,133589,133592],{"class":84,"line":413},[82,133590,133591],{"class":2384},".right",[82,133593,1349],{"class":92},[82,133595,133596,133598,133600,133602],{"class":84,"line":508},[82,133597,133576],{"class":88},[82,133599,1357],{"class":92},[82,133601,75078],{"class":88},[82,133603,3909],{"class":92},[82,133605,133606],{"class":84,"line":513},[82,133607,1391],{"class":92},[278,133609,133610,133618],{},[281,133611,133612],{},[284,133613,133614,133616],{},[287,133615,129560],{"align":26320},[287,133617,30071],{"align":26320},[294,133619,133620,133627,133634],{},[284,133621,133622,133624],{},[299,133623,26320],{"align":26320},[299,133625,133626],{"align":26320},"不允许左侧有浮动元素（清除左侧浮动的影响）",[284,133628,133629,133631],{},[299,133630,75078],{"align":26320},[299,133632,133633],{"align":26320},"不允许右侧有浮动元素（清除右侧浮动的影响）",[284,133635,133636,133639],{},[299,133637,133638],{"align":26320},"both",[299,133640,133641],{"align":26320},"同时清除左右侧浮动的影响",[19,133643,133644],{},"法一",[19,133646,133647],{},"额外标签法也称为隔墙法",[19,133649,133650],{},"使用方式：",[19,133652,133653],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[73,133655,133656],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,133657,133658,133664,133674,133678,133684,133694],{"__ignoreMap":78},[82,133659,133660,133662],{"class":84,"line":85},[82,133661,133569],{"class":2384},[82,133663,1349],{"class":92},[82,133665,133666,133668,133670,133672],{"class":84,"line":157},[82,133667,133576],{"class":88},[82,133669,1357],{"class":92},[82,133671,26320],{"class":88},[82,133673,3909],{"class":92},[82,133675,133676],{"class":84,"line":404},[82,133677,1391],{"class":92},[82,133679,133680,133682],{"class":84,"line":413},[82,133681,133591],{"class":2384},[82,133683,1349],{"class":92},[82,133685,133686,133688,133690,133692],{"class":84,"line":508},[82,133687,133576],{"class":88},[82,133689,1357],{"class":92},[82,133691,75078],{"class":88},[82,133693,3909],{"class":92},[82,133695,133696],{"class":84,"line":513},[82,133697,1391],{"class":92},[19,133699,133700],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133702,133703],{},"优点： 通俗易懂，书写方便",[19,133705,133706],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133708,133709],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133711,133712],{},"法二",[19,133714,133715],{},"父级添加overflow属性",[73,133717,133718],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,133719,133720,133726,133736,133740,133746,133756],{"__ignoreMap":78},[82,133721,133722,133724],{"class":84,"line":85},[82,133723,133569],{"class":2384},[82,133725,1349],{"class":92},[82,133727,133728,133730,133732,133734],{"class":84,"line":157},[82,133729,133576],{"class":88},[82,133731,1357],{"class":92},[82,133733,26320],{"class":88},[82,133735,3909],{"class":92},[82,133737,133738],{"class":84,"line":404},[82,133739,1391],{"class":92},[82,133741,133742,133744],{"class":84,"line":413},[82,133743,133591],{"class":2384},[82,133745,1349],{"class":92},[82,133747,133748,133750,133752,133754],{"class":84,"line":508},[82,133749,133576],{"class":88},[82,133751,1357],{"class":92},[82,133753,75078],{"class":88},[82,133755,3909],{"class":92},[82,133757,133758],{"class":84,"line":513},[82,133759,1391],{"class":92},[19,133761,133762],{},"overflow: hidden;",[19,133764,133765],{},"优点：代码简洁",[19,133767,133768],{},"缺点：无法显示溢出的部分",[19,133770,133771],{},"注意：是给父元素添加代码",[19,133773,133774],{},"法三",[19,133776,133777],{},"父级添加after伪元素",[19,133779,133780,133783],{},[133781,133782],"after",{}," 方式是额外标签法的升级版",[19,133785,133786],{},"使用的时候复制就可以",[73,133788,133789],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,133790,133791,133797,133807,133811,133817,133827],{"__ignoreMap":78},[82,133792,133793,133795],{"class":84,"line":85},[82,133794,133569],{"class":2384},[82,133796,1349],{"class":92},[82,133798,133799,133801,133803,133805],{"class":84,"line":157},[82,133800,133576],{"class":88},[82,133802,1357],{"class":92},[82,133804,26320],{"class":88},[82,133806,3909],{"class":92},[82,133808,133809],{"class":84,"line":404},[82,133810,1391],{"class":92},[82,133812,133813,133815],{"class":84,"line":413},[82,133814,133591],{"class":2384},[82,133816,1349],{"class":92},[82,133818,133819,133821,133823,133825],{"class":84,"line":508},[82,133820,133576],{"class":88},[82,133822,1357],{"class":92},[82,133824,75078],{"class":88},[82,133826,3909],{"class":92},[82,133828,133829],{"class":84,"line":513},[82,133830,1391],{"class":92},[19,133832,133833],{},"优点：没有增加标签，结构更简单",[19,133835,133836],{},"缺点：照顾低版本浏览器",[19,133838,133839],{},"代表网站： 百度、淘宝网、网易等",[19,133841,133842],{},"法四",[19,133844,133845],{},"父级添加双伪元素",[73,133847,133848],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,133849,133850,133856,133866,133870,133876,133886],{"__ignoreMap":78},[82,133851,133852,133854],{"class":84,"line":85},[82,133853,133569],{"class":2384},[82,133855,1349],{"class":92},[82,133857,133858,133860,133862,133864],{"class":84,"line":157},[82,133859,133576],{"class":88},[82,133861,1357],{"class":92},[82,133863,26320],{"class":88},[82,133865,3909],{"class":92},[82,133867,133868],{"class":84,"line":404},[82,133869,1391],{"class":92},[82,133871,133872,133874],{"class":84,"line":413},[82,133873,133591],{"class":2384},[82,133875,1349],{"class":92},[82,133877,133878,133880,133882,133884],{"class":84,"line":508},[82,133879,133576],{"class":88},[82,133881,1357],{"class":92},[82,133883,75078],{"class":88},[82,133885,3909],{"class":92},[82,133887,133888],{"class":84,"line":513},[82,133889,1391],{"class":92},[19,133891,133892],{},"优点：代码更简洁",[19,133894,133836],{},[19,133896,133897],{},"代表网站：小米、腾讯等",[14,133899,133901],{"id":133900},"_93-ps切图","9.3 PS切图",[65,133903,133905],{"id":133904},"_931-常见图片格式","9.3.1 常见图片格式",[278,133907,133908,133918],{},[281,133909,133910],{},[284,133911,133912,133915],{},[287,133913,133914],{"align":26320},"jpg图像格式",[287,133916,133917],{"align":26320},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[294,133919,133920,133928,133936],{},[284,133921,133922,133925],{},[299,133923,133924],{"align":26320},"gif图像格式",[299,133926,133927],{"align":26320},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[284,133929,133930,133933],{},[299,133931,133932],{"align":26320},"png图像格式",[299,133934,133935],{"align":26320},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[284,133937,133938,133941],{},[299,133939,133940],{"align":26320},"PSD图像格式",[299,133942,133943],{"align":26320},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[65,133945,133947],{"id":133946},"_932-图层切图","9.3.2 图层切图",[19,133949,133950],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133952,133953],{},"按住shift选中两个图层->图层菜单->合并图层",[65,133955,133957],{"id":133956},"_933-切片切图","9.3.3 切片切图",[3755,133959,133960,133963],{},[29,133961,133962],{},"利用切片工具手动划出",[29,133964,133965],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[65,133967,133969],{"id":133968},"_934-切图步骤","9.3.4 切图步骤",[19,133971,133972],{},"用切片工具选中：",[4078,133974],{"style":128952,"src":133975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133977,133978],{},"文件 -> 导出",[4078,133980],{"style":128952,"src":133981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2671,133983,133984],{},"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":78,"searchDepth":157,"depth":157,"links":133986},[133987,133996,134000],{"id":132423,"depth":157,"text":132424,"children":133988},[133989,133990,133991,133992,133993,133994,133995],{"id":132448,"depth":404,"text":132449},{"id":132739,"depth":404,"text":132740},{"id":132868,"depth":404,"text":132869},{"id":133068,"depth":404,"text":133069},{"id":133110,"depth":404,"text":133111},{"id":133148,"depth":404,"text":133149},{"id":133238,"depth":404,"text":133239},{"id":133518,"depth":157,"text":133519,"children":133997},[133998,133999],{"id":133522,"depth":404,"text":133523},{"id":133529,"depth":404,"text":133530},{"id":133900,"depth":157,"text":133901,"children":134001},[134002,134003,134004,134005],{"id":133904,"depth":404,"text":133905},{"id":133946,"depth":404,"text":133947},{"id":133956,"depth":404,"text":133957},{"id":133968,"depth":404,"text":133969},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132415,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134012,"title":134013,"body":134014,"description":2699,"extension":2700,"meta":134655,"navigation":485,"path":134656,"seo":134657,"stem":134658,"__hash__":134659},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134015,"toc":134643},[134016,134019,134023,134049,134083,134087,134091,134094,134136,134143,134153,134161,134163,134166,134169,134172,134179,134193,134197,134200,134229,134233,134236,134250,134254,134257,134285,134289,134292,134318,134322,134327,134360,134365,134393,134397,134414,134460,134465,134509,134526,134633,134641],[10,134017,134013],{"id":134018},"_10-css规范与学成在线案例",[14,134020,134022],{"id":134021},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,134024,134025,134031,134037,134043],{},[29,134026,134027,134030],{},[2913,134028,134029],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,134032,134033,134036],{},[2913,134034,134035],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,134038,134039,134042],{},[2913,134040,134041],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,134044,134045,134048],{},[2913,134046,134047],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[73,134050,134051],{"className":129096,"code":132460,"language":129098,"meta":78,"style":78},[32,134052,134053,134057,134063,134079],{"__ignoreMap":78},[82,134054,134055],{"class":84,"line":85},[82,134056,132467],{"class":2828},[82,134058,134059,134061],{"class":84,"line":157},[82,134060,54173],{"class":53863},[82,134062,1349],{"class":92},[82,134064,134065,134067,134069,134071,134073,134075,134077],{"class":84,"line":404},[82,134066,73452],{"class":88},[82,134068,1357],{"class":92},[82,134070,2283],{"class":88},[82,134072,54054],{"class":112},[82,134074,54083],{"class":88},[82,134076,132488],{"class":88},[82,134078,3909],{"class":92},[82,134080,134081],{"class":84,"line":413},[82,134082,1391],{"class":92},[14,134084,134086],{"id":134085},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[65,134088,134090],{"id":134089},"_1021-header头部制作","10.2.1 header头部制作",[4078,134092],{"style":128952,"src":134093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3755,134095,134096,134103,134110,134116,134123,134130],{},[29,134097,134098,134099,134102],{},"1号是版心盒子 ",[2913,134100,134101],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,134104,134105,134106,134109],{},"版心盒子 里面包含 2号盒子 ",[2913,134107,134108],{},"logo"," 图标",[29,134111,134112,134113,134115],{},"版心盒子 里面包含 3号盒子 ",[2913,134114,56273],{}," 导航栏",[29,134117,134118,134119,134122],{},"版心盒子 里面包含 4号盒子 ",[2913,134120,134121],{},"search"," 搜索框",[29,134124,134125,134126,134129],{},"版心盒子 里面包含 5号盒子 ",[2913,134127,134128],{},"user"," 个人信息",[29,134131,134132,134133],{},"注意，要求里面的 ",[2913,134134,134135],{},"4个子盒子 必须都浮动",[26,134137,134138],{},[29,134139,134140],{},[2913,134141,134142],{},"导航栏注意点:",[19,134144,134145,134146,134149,134150],{},"实际开发中， ",[2913,134147,134148],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2913,134151,134152],{},"用 li 包含链接(li+a)的做法",[3755,134154,134155,134158],{},[29,134156,134157],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,134159,134160],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134162,11616],{},[19,134164,134165],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134167,134168],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134170,134171],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,134173,134174],{"start":157},[29,134175,134176],{},[2913,134177,134178],{},"4号盒子search的细节：",[3755,134180,134181,134184,134187],{},[29,134182,134183],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,134185,134186],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,134188,134189,134192],{},[32,134190,134191],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[65,134194,134196],{"id":134195},"_1022-banner制作","10.2.2 banner制作",[4078,134198],{"style":128952,"src":134199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3755,134201,134202,134209,134215,134222],{},[29,134203,134204,134205,134208],{},"1号盒子是通栏的大盒子 ",[2913,134206,134207],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,134210,134211,134212,134214],{},"2号盒子是版心 ",[2913,134213,313],{}," ， 要水平居中对齐",[29,134216,134217,134218,134221],{},"3号盒子版心内，左对齐 ",[2913,134219,134220],{},"subnav"," 侧导航栏",[29,134223,134224,134225,134228],{},"4号盒子版心内，右对齐 ",[2913,134226,134227],{},"course"," 课程",[65,134230,134232],{"id":134231},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[4078,134234],{"style":128952,"src":134235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3755,134237,134238,134241,134244,134247],{},[29,134239,134240],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,134242,134243],{},"1号盒子是标题 H3 左侧浮动",[29,134245,134246],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,134248,134249],{},"3号盒子 右浮动 mod 修改",[65,134251,134253],{"id":134252},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[4078,134255],{"style":128952,"src":134256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3755,134258,134259,134265,134272,134279,134282],{},[29,134260,134261,134262,134264],{},"1号盒子为最大的盒子 ",[2913,134263,56274],{}," 版心水平居中对齐",[29,134266,134267,134268,134271],{},"2号盒子为上面部分 ",[2913,134269,134270],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,134273,134274,134275,134278],{},"3号盒子为底下部分 ",[2913,134276,134277],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,134280,134281],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,134283,134284],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[65,134286,134288],{"id":134287},"_1025-底部模块制作","10.2.5 底部模块制作",[4078,134290],{"style":128952,"src":134291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3755,134293,134294,134301,134304,134311],{},[29,134295,134296,134297,134300],{},"1号盒子通栏大盒子 底部 ",[2913,134298,134299],{},"footer"," 给高度 底色是白色",[29,134302,134303],{},"2号盒子版心水平居中",[29,134305,134306,134307,134310],{},"3号盒子版权 ",[2913,134308,134309],{},"copyright"," 左对齐",[29,134312,134313,134314,134317],{},"4号盒子 链接组 ",[2913,134315,134316],{},"links"," 右对齐",[65,134319,134321],{"id":134320},"_1026-代码模块","10.2.6 代码模块",[26,134323,134324],{},[29,134325,134326],{},"html部分",[73,134328,134330],{"className":129843,"code":134329,"language":129845,"meta":78,"style":78},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[32,134331,134332],{"__ignoreMap":78},[82,134333,134334,134336,134338,134340,134342,134345,134348,134350,134353,134356,134358],{"class":84,"line":85},[82,134335,3659],{"class":92},[82,134337,323],{"class":53863},[82,134339,63615],{"class":2384},[82,134341,113],{"class":92},[82,134343,134344],{"class":96},"\"https:\u002F\u002Fexample.com\"",[82,134346,134347],{"class":2384}," target",[82,134349,113],{"class":92},[82,134351,134352],{"class":96},"\"_blank\"",[82,134354,134355],{"class":92},">链接文字\u003C\u002F",[82,134357,323],{"class":53863},[82,134359,53870],{"class":92},[26,134361,134362],{"start":157},[29,134363,134364],{},"css部分",[73,134366,134367],{"className":129843,"code":134329,"language":129845,"meta":78,"style":78},[32,134368,134369],{"__ignoreMap":78},[82,134370,134371,134373,134375,134377,134379,134381,134383,134385,134387,134389,134391],{"class":84,"line":85},[82,134372,3659],{"class":92},[82,134374,323],{"class":53863},[82,134376,63615],{"class":2384},[82,134378,113],{"class":92},[82,134380,134344],{"class":96},[82,134382,134347],{"class":2384},[82,134384,113],{"class":92},[82,134386,134352],{"class":96},[82,134388,134355],{"class":92},[82,134390,323],{"class":53863},[82,134392,53870],{"class":92},[65,134394,134396],{"id":134395},"_1027-收获","10.2.7 收获",[26,134398,134399,134402,134405,134408,134411],{},[29,134400,134401],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,134403,134404],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,134406,134407],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,134409,134410],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,134412,134413],{},"遗忘代码",[73,134415,134417],{"className":129096,"code":134416,"language":129098,"meta":78,"style":78},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[32,134418,134419,134441,134446,134456],{"__ignoreMap":78},[82,134420,134421,134423,134425,134427,134429,134431,134433,134435,134437,134439],{"class":84,"line":85},[82,134422,54173],{"class":53863},[82,134424,100],{"class":92},[82,134426,19],{"class":53863},[82,134428,100],{"class":92},[82,134430,10],{"class":53863},[82,134432,100],{"class":92},[82,134434,3755],{"class":53863},[82,134436,100],{"class":92},[82,134438,29],{"class":53863},[82,134440,1349],{"class":92},[82,134442,134443],{"class":84,"line":157},[82,134444,134445],{"class":2828},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[82,134447,134448,134450,134452,134454],{"class":84,"line":404},[82,134449,130712],{"class":88},[82,134451,1357],{"class":92},[82,134453,63427],{"class":88},[82,134455,3909],{"class":92},[82,134457,134458],{"class":84,"line":413},[82,134459,1391],{"class":92},[26,134461,134462],{"start":513},[29,134463,134464],{},"html引css的程序",[73,134466,134467],{"className":129096,"code":134416,"language":129098,"meta":78,"style":78},[32,134468,134469,134491,134495,134505],{"__ignoreMap":78},[82,134470,134471,134473,134475,134477,134479,134481,134483,134485,134487,134489],{"class":84,"line":85},[82,134472,54173],{"class":53863},[82,134474,100],{"class":92},[82,134476,19],{"class":53863},[82,134478,100],{"class":92},[82,134480,10],{"class":53863},[82,134482,100],{"class":92},[82,134484,3755],{"class":53863},[82,134486,100],{"class":92},[82,134488,29],{"class":53863},[82,134490,1349],{"class":92},[82,134492,134493],{"class":84,"line":157},[82,134494,134445],{"class":2828},[82,134496,134497,134499,134501,134503],{"class":84,"line":404},[82,134498,130712],{"class":88},[82,134500,1357],{"class":92},[82,134502,63427],{"class":88},[82,134504,3909],{"class":92},[82,134506,134507],{"class":84,"line":413},[82,134508,1391],{"class":92},[26,134510,134511,134514,134517,134520,134523],{"start":1388},[29,134512,134513],{},"浮动的盒子不会有外边距合并问题",[29,134515,134516],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,134518,134519],{},"ctrl+g快速定位行；shift+alt多个光标",[29,134521,134522],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,134524,134525],{},"在写选择器时尽量写全一些，例如",[73,134527,134529],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},"\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",[32,134530,134531,134536,134552,134557,134572,134577,134592,134597,134612,134617],{"__ignoreMap":78},[82,134532,134533],{"class":84,"line":85},[82,134534,134535],{"class":2828},"\u002F* 静态定位（默认） *\u002F\n",[82,134537,134538,134541,134543,134545,134547,134550],{"class":84,"line":157},[82,134539,134540],{"class":2384},".static",[82,134542,82361],{"class":92},[82,134544,131456],{"class":88},[82,134546,1357],{"class":92},[82,134548,134549],{"class":88},"static",[82,134551,132026],{"class":92},[82,134553,134554],{"class":84,"line":404},[82,134555,134556],{"class":2828},"\u002F* 相对定位 *\u002F\n",[82,134558,134559,134562,134564,134566,134568,134570],{"class":84,"line":413},[82,134560,134561],{"class":2384},".relative",[82,134563,82361],{"class":92},[82,134565,131456],{"class":88},[82,134567,1357],{"class":92},[82,134569,57324],{"class":88},[82,134571,132026],{"class":92},[82,134573,134574],{"class":84,"line":508},[82,134575,134576],{"class":2828},"\u002F* 绝对定位 *\u002F\n",[82,134578,134579,134582,134584,134586,134588,134590],{"class":84,"line":513},[82,134580,134581],{"class":2384},".absolute",[82,134583,82361],{"class":92},[82,134585,131456],{"class":88},[82,134587,1357],{"class":92},[82,134589,57391],{"class":88},[82,134591,132026],{"class":92},[82,134593,134594],{"class":84,"line":1388},[82,134595,134596],{"class":2828},"\u002F* 固定定位 *\u002F\n",[82,134598,134599,134602,134604,134606,134608,134610],{"class":84,"line":1394},[82,134600,134601],{"class":2384},".fixed",[82,134603,82361],{"class":92},[82,134605,131456],{"class":88},[82,134607,1357],{"class":92},[82,134609,88787],{"class":88},[82,134611,132026],{"class":92},[82,134613,134614],{"class":84,"line":1399},[82,134615,134616],{"class":2828},"\u002F* 粘性定位 *\u002F\n",[82,134618,134619,134622,134624,134626,134628,134631],{"class":84,"line":1430},[82,134620,134621],{"class":2384},".sticky",[82,134623,82361],{"class":92},[82,134625,131456],{"class":88},[82,134627,1357],{"class":92},[82,134629,134630],{"class":88},"sticky",[82,134632,132026],{"class":92},[26,134634,134635,134638],{"start":2082},[29,134636,134637],{},"一定要用好注释",[29,134639,134640],{},"浮动的盒子不会有外边距合并的问题",[2671,134642,133984],{},{"title":78,"searchDepth":157,"depth":157,"links":134644},[134645,134646],{"id":134021,"depth":157,"text":134022},{"id":134085,"depth":157,"text":134086,"children":134647},[134648,134649,134650,134651,134652,134653,134654],{"id":134089,"depth":404,"text":134090},{"id":134195,"depth":404,"text":134196},{"id":134231,"depth":404,"text":134232},{"id":134252,"depth":404,"text":134253},{"id":134287,"depth":404,"text":134288},{"id":134320,"depth":404,"text":134321},{"id":134395,"depth":404,"text":134396},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134013,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134661,"title":134662,"body":134663,"description":2699,"extension":2700,"meta":136149,"navigation":485,"path":136150,"seo":136151,"stem":136152,"__hash__":136153},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134664,"toc":136141},[134665,134668,134672,134676,134687,134691,134708,134752,134785,134788,134805,134808,134811,134855,134859,134863,134866,134869,134873,134876,134887,134950,134991,134994,135009,135063,135071,135074,135085,135139,135165,135168,135181,135235,135267,135321,135344,135398,135401,135404,135411,135465,135486,135540,135543,135546,135631,135639,135696,135719,135723,135726,135744,135748,135767,135821,135859,135863,135866,135869,135891,135895,135903,135906,135911,135922,135925,135929,135943,135987,135990,135994,135997,136002,136028,136033,136110,136113,136117,136120,136123,136126,136129,136132,136135,136138],[10,134666,134662],{"id":134667},"_11-传统布局与定位体系",[14,134669,134671],{"id":134670},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[65,134673,134675],{"id":134674},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3755,134677,134678,134681,134684],{},[29,134679,134680],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,134682,134683],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,134685,134686],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[65,134688,134690],{"id":134689},"_1112-浮动","11.1.2 浮动",[3755,134692,134693,134696,134699,134702,134705],{},[29,134694,134695],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,134697,134698],{},"浮动可以改变元素标签默认的排列方式",[29,134700,134701],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,134703,134704],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,134706,134707],{},"在使用行内块转换时盒子之间是有空隙的",[73,134709,134710],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,134711,134712,134718,134728,134732,134738,134748],{"__ignoreMap":78},[82,134713,134714,134716],{"class":84,"line":85},[82,134715,133569],{"class":2384},[82,134717,1349],{"class":92},[82,134719,134720,134722,134724,134726],{"class":84,"line":157},[82,134721,133576],{"class":88},[82,134723,1357],{"class":92},[82,134725,26320],{"class":88},[82,134727,3909],{"class":92},[82,134729,134730],{"class":84,"line":404},[82,134731,1391],{"class":92},[82,134733,134734,134736],{"class":84,"line":413},[82,134735,133591],{"class":2384},[82,134737,1349],{"class":92},[82,134739,134740,134742,134744,134746],{"class":84,"line":508},[82,134741,133576],{"class":88},[82,134743,1357],{"class":92},[82,134745,75078],{"class":88},[82,134747,3909],{"class":92},[82,134749,134750],{"class":84,"line":513},[82,134751,1391],{"class":92},[278,134753,134754,134762],{},[281,134755,134756],{},[284,134757,134758,134760],{},[287,134759,129560],{"align":26320},[287,134761,30071],{"align":26320},[294,134763,134764,134771,134778],{},[284,134765,134766,134768],{},[299,134767,57297],{"align":26320},[299,134769,134770],{"align":26320},"元素不浮动（默认值）",[284,134772,134773,134775],{},[299,134774,26320],{"align":26320},[299,134776,134777],{"align":26320},"元素向左浮动",[284,134779,134780,134782],{},[299,134781,75078],{"align":26320},[299,134783,134784],{"align":26320},"元素向右浮动",[19,134786,134787],{},"浮动重点：",[3755,134789,134790,134793,134796,134799,134802],{},[29,134791,134792],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,134794,134795],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,134797,134798],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,134800,134801],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,134803,134804],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134806,134807],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134809,134810],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[73,134812,134813],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,134814,134815,134821,134831,134835,134841,134851],{"__ignoreMap":78},[82,134816,134817,134819],{"class":84,"line":85},[82,134818,133569],{"class":2384},[82,134820,1349],{"class":92},[82,134822,134823,134825,134827,134829],{"class":84,"line":157},[82,134824,133576],{"class":88},[82,134826,1357],{"class":92},[82,134828,26320],{"class":88},[82,134830,3909],{"class":92},[82,134832,134833],{"class":84,"line":404},[82,134834,1391],{"class":92},[82,134836,134837,134839],{"class":84,"line":413},[82,134838,133591],{"class":2384},[82,134840,1349],{"class":92},[82,134842,134843,134845,134847,134849],{"class":84,"line":508},[82,134844,133576],{"class":88},[82,134846,1357],{"class":92},[82,134848,75078],{"class":88},[82,134850,3909],{"class":92},[82,134852,134853],{"class":84,"line":513},[82,134854,1391],{"class":92},[65,134856,134858],{"id":134857},"_1113-定位","11.1.3 定位",[24582,134860,134862],{"id":134861},"_11131-使用场景","11.1.3.1 使用场景",[19,134864,134865],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134867,134868],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24582,134870,134872],{"id":134871},"_11132-定位组成","11.1.3.2 定位组成",[19,134874,134875],{},"定位 = 定位模式 + 边偏移",[26,134877,134878],{},[29,134879,134880,134883,134884],{},[2913,134881,134882],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2913,134885,134886],{},"定位模式",[73,134888,134890],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[32,134891,134892,134898,134912,134929,134946],{"__ignoreMap":78},[82,134893,134894,134896],{"class":84,"line":85},[82,134895,132944],{"class":2384},[82,134897,1349],{"class":92},[82,134899,134900,134903,134905,134907,134909],{"class":84,"line":157},[82,134901,134902],{"class":88},"  position",[82,134904,1357],{"class":92},[82,134906,57324],{"class":88},[82,134908,132959],{"class":92},[82,134910,134911],{"class":2828},"\u002F* 定位模式 *\u002F\n",[82,134913,134914,134917,134919,134921,134923,134926],{"class":84,"line":404},[82,134915,134916],{"class":88},"  top",[82,134918,1357],{"class":92},[82,134920,440],{"class":88},[82,134922,54054],{"class":112},[82,134924,134925],{"class":92},";           ",[82,134927,134928],{"class":2828},"\u002F* 边偏移：上 *\u002F\n",[82,134930,134931,134934,134936,134938,134940,134943],{"class":84,"line":413},[82,134932,134933],{"class":88},"  left",[82,134935,1357],{"class":92},[82,134937,3451],{"class":88},[82,134939,54054],{"class":112},[82,134941,134942],{"class":92},";          ",[82,134944,134945],{"class":2828},"\u002F* 边偏移：左 *\u002F\n",[82,134947,134948],{"class":84,"line":508},[82,134949,1391],{"class":92},[278,134951,134952,134961],{},[281,134953,134954],{},[284,134955,134956,134958],{},[287,134957,2916],{"align":26320},[287,134959,134960],{"align":26320},"语义",[294,134962,134963,134970,134977,134984],{},[284,134964,134965,134967],{},[299,134966,134549],{"align":26320},[299,134968,134969],{"align":26320},"静态定位",[284,134971,134972,134974],{},[299,134973,57324],{"align":26320},[299,134975,134976],{"align":26320},"相对定位",[284,134978,134979,134981],{},[299,134980,57391],{"align":26320},[299,134982,134983],{"align":26320},"绝对定位",[284,134985,134986,134988],{},[299,134987,88787],{"align":26320},[299,134989,134990],{"align":26320},"固定定位",[19,134992,134993],{},"（1）静态定位：",[3755,134995,134996,135007],{},[29,134997,134998,134999,135002,135003,135006],{},"静态定位是元素的 ",[2913,135000,135001],{},"默认定位方式"," ， ",[2913,135004,135005],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,135008,246],{},[73,135010,135011],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135012,135013,135019,135031,135045,135059],{"__ignoreMap":78},[82,135014,135015,135017],{"class":84,"line":85},[82,135016,132944],{"class":2384},[82,135018,1349],{"class":92},[82,135020,135021,135023,135025,135027,135029],{"class":84,"line":157},[82,135022,134902],{"class":88},[82,135024,1357],{"class":92},[82,135026,57324],{"class":88},[82,135028,132959],{"class":92},[82,135030,134911],{"class":2828},[82,135032,135033,135035,135037,135039,135041,135043],{"class":84,"line":404},[82,135034,134916],{"class":88},[82,135036,1357],{"class":92},[82,135038,440],{"class":88},[82,135040,54054],{"class":112},[82,135042,134925],{"class":92},[82,135044,134928],{"class":2828},[82,135046,135047,135049,135051,135053,135055,135057],{"class":84,"line":413},[82,135048,134933],{"class":88},[82,135050,1357],{"class":92},[82,135052,3451],{"class":88},[82,135054,54054],{"class":112},[82,135056,134942],{"class":92},[82,135058,134945],{"class":2828},[82,135060,135061],{"class":84,"line":508},[82,135062,1391],{"class":92},[3755,135064,135065,135068],{},[29,135066,135067],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,135069,135070],{},"静态定位在布局时我们几乎不用的",[19,135072,135073],{},"（2）相对定位",[3755,135075,135076,135083],{},[29,135077,135078,135079,135082],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2913,135080,135081],{},"原来的位置"," 来说的（自恋型）",[29,135084,246],{},[73,135086,135087],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135088,135089,135095,135107,135121,135135],{"__ignoreMap":78},[82,135090,135091,135093],{"class":84,"line":85},[82,135092,132944],{"class":2384},[82,135094,1349],{"class":92},[82,135096,135097,135099,135101,135103,135105],{"class":84,"line":157},[82,135098,134902],{"class":88},[82,135100,1357],{"class":92},[82,135102,57324],{"class":88},[82,135104,132959],{"class":92},[82,135106,134911],{"class":2828},[82,135108,135109,135111,135113,135115,135117,135119],{"class":84,"line":404},[82,135110,134916],{"class":88},[82,135112,1357],{"class":92},[82,135114,440],{"class":88},[82,135116,54054],{"class":112},[82,135118,134925],{"class":92},[82,135120,134928],{"class":2828},[82,135122,135123,135125,135127,135129,135131,135133],{"class":84,"line":413},[82,135124,134933],{"class":88},[82,135126,1357],{"class":92},[82,135128,3451],{"class":88},[82,135130,54054],{"class":112},[82,135132,134942],{"class":92},[82,135134,134945],{"class":2828},[82,135136,135137],{"class":84,"line":508},[82,135138,1391],{"class":92},[3755,135140,135141],{},[29,135142,135143,135144,135146,135147,135149,135150,135153,135154,135157,135158,135160,135161,135164],{},"相对定位的特点：",[56276,135145],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56276,135148],{},"  ② ",[2913,135151,135152],{},"原来"," 在标准流的 ",[2913,135155,135156],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56276,135159],{},"  ③因此， ",[2913,135162,135163],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135166,135167],{},"（3）绝对定位",[3755,135169,135170,135179],{},[29,135171,135172,135174,135175,135178],{},[2913,135173,134983],{}," 是元素在移动位置的时候，是相对于它 ",[2913,135176,135177],{},"祖先元素"," 来说的（拼爹型）",[29,135180,246],{},[73,135182,135183],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135184,135185,135191,135203,135217,135231],{"__ignoreMap":78},[82,135186,135187,135189],{"class":84,"line":85},[82,135188,132944],{"class":2384},[82,135190,1349],{"class":92},[82,135192,135193,135195,135197,135199,135201],{"class":84,"line":157},[82,135194,134902],{"class":88},[82,135196,1357],{"class":92},[82,135198,57324],{"class":88},[82,135200,132959],{"class":92},[82,135202,134911],{"class":2828},[82,135204,135205,135207,135209,135211,135213,135215],{"class":84,"line":404},[82,135206,134916],{"class":88},[82,135208,1357],{"class":92},[82,135210,440],{"class":88},[82,135212,54054],{"class":112},[82,135214,134925],{"class":92},[82,135216,134928],{"class":2828},[82,135218,135219,135221,135223,135225,135227,135229],{"class":84,"line":413},[82,135220,134933],{"class":88},[82,135222,1357],{"class":92},[82,135224,3451],{"class":88},[82,135226,54054],{"class":112},[82,135228,134942],{"class":92},[82,135230,134945],{"class":2828},[82,135232,135233],{"class":84,"line":508},[82,135234,1391],{"class":92},[3755,135236,135237,135252,135261,135264],{},[29,135238,135239,135240,135242,135243,135245,135246,135248,135249,135251],{},"绝对定位的特点：",[56276,135241],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56276,135244],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56276,135247],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56276,135250],{},"  (4)固定定位",[29,135253,135254,135256,135257,135260],{},[2913,135255,134990],{}," 是元素 ",[2913,135258,135259],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,135262,135263],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,135265,135266],{},"语法:",[73,135268,135269],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135270,135271,135277,135289,135303,135317],{"__ignoreMap":78},[82,135272,135273,135275],{"class":84,"line":85},[82,135274,132944],{"class":2384},[82,135276,1349],{"class":92},[82,135278,135279,135281,135283,135285,135287],{"class":84,"line":157},[82,135280,134902],{"class":88},[82,135282,1357],{"class":92},[82,135284,57324],{"class":88},[82,135286,132959],{"class":92},[82,135288,134911],{"class":2828},[82,135290,135291,135293,135295,135297,135299,135301],{"class":84,"line":404},[82,135292,134916],{"class":88},[82,135294,1357],{"class":92},[82,135296,440],{"class":88},[82,135298,54054],{"class":112},[82,135300,134925],{"class":92},[82,135302,134928],{"class":2828},[82,135304,135305,135307,135309,135311,135313,135315],{"class":84,"line":413},[82,135306,134933],{"class":88},[82,135308,1357],{"class":92},[82,135310,3451],{"class":88},[82,135312,54054],{"class":112},[82,135314,134942],{"class":92},[82,135316,134945],{"class":2828},[82,135318,135319],{"class":84,"line":508},[82,135320,1391],{"class":92},[3755,135322,135323,135332],{},[29,135324,135325,135326,135328,135329,135331],{},"特点:",[56276,135327],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56276,135330],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,135333,135334,135335,135337,135338,135340,135341,135343],{},"固定在版心位置的方法:",[56276,135336],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56276,135339],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56276,135342],{},"  实例：",[73,135345,135346],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135347,135348,135354,135366,135380,135394],{"__ignoreMap":78},[82,135349,135350,135352],{"class":84,"line":85},[82,135351,132944],{"class":2384},[82,135353,1349],{"class":92},[82,135355,135356,135358,135360,135362,135364],{"class":84,"line":157},[82,135357,134902],{"class":88},[82,135359,1357],{"class":92},[82,135361,57324],{"class":88},[82,135363,132959],{"class":92},[82,135365,134911],{"class":2828},[82,135367,135368,135370,135372,135374,135376,135378],{"class":84,"line":404},[82,135369,134916],{"class":88},[82,135371,1357],{"class":92},[82,135373,440],{"class":88},[82,135375,54054],{"class":112},[82,135377,134925],{"class":92},[82,135379,134928],{"class":2828},[82,135381,135382,135384,135386,135388,135390,135392],{"class":84,"line":413},[82,135383,134933],{"class":88},[82,135385,1357],{"class":92},[82,135387,3451],{"class":88},[82,135389,54054],{"class":112},[82,135391,134942],{"class":92},[82,135393,134945],{"class":2828},[82,135395,135396],{"class":84,"line":508},[82,135397,1391],{"class":92},[4078,135399],{"style":128952,"src":135400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135402,135403],{},"(5)粘性定位",[3755,135405,135406,135409],{},[29,135407,135408],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,135410,246],{},[73,135412,135413],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135414,135415,135421,135433,135447,135461],{"__ignoreMap":78},[82,135416,135417,135419],{"class":84,"line":85},[82,135418,132944],{"class":2384},[82,135420,1349],{"class":92},[82,135422,135423,135425,135427,135429,135431],{"class":84,"line":157},[82,135424,134902],{"class":88},[82,135426,1357],{"class":92},[82,135428,57324],{"class":88},[82,135430,132959],{"class":92},[82,135432,134911],{"class":2828},[82,135434,135435,135437,135439,135441,135443,135445],{"class":84,"line":404},[82,135436,134916],{"class":88},[82,135438,1357],{"class":92},[82,135440,440],{"class":88},[82,135442,54054],{"class":112},[82,135444,134925],{"class":92},[82,135446,134928],{"class":2828},[82,135448,135449,135451,135453,135455,135457,135459],{"class":84,"line":413},[82,135450,134933],{"class":88},[82,135452,1357],{"class":92},[82,135454,3451],{"class":88},[82,135456,54054],{"class":112},[82,135458,134942],{"class":92},[82,135460,134945],{"class":2828},[82,135462,135463],{"class":84,"line":508},[82,135464,1391],{"class":92},[3755,135466,135467],{},[29,135468,135469,135470,135472,135473,135475,135476,135478,135479,135482,135483,135485],{},"粘性定位的特点：",[56276,135471],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56276,135474],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56276,135477],{},"  ③必须添加 top 、left、right、bottom ",[2913,135480,135481],{},"其中一个"," 才有效",[56276,135484],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[73,135487,135488],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135489,135490,135496,135508,135522,135536],{"__ignoreMap":78},[82,135491,135492,135494],{"class":84,"line":85},[82,135493,132944],{"class":2384},[82,135495,1349],{"class":92},[82,135497,135498,135500,135502,135504,135506],{"class":84,"line":157},[82,135499,134902],{"class":88},[82,135501,1357],{"class":92},[82,135503,57324],{"class":88},[82,135505,132959],{"class":92},[82,135507,134911],{"class":2828},[82,135509,135510,135512,135514,135516,135518,135520],{"class":84,"line":404},[82,135511,134916],{"class":88},[82,135513,1357],{"class":92},[82,135515,440],{"class":88},[82,135517,54054],{"class":112},[82,135519,134925],{"class":92},[82,135521,134928],{"class":2828},[82,135523,135524,135526,135528,135530,135532,135534],{"class":84,"line":413},[82,135525,134933],{"class":88},[82,135527,1357],{"class":92},[82,135529,3451],{"class":88},[82,135531,54054],{"class":112},[82,135533,134942],{"class":92},[82,135535,134945],{"class":2828},[82,135537,135538],{"class":84,"line":508},[82,135539,1391],{"class":92},[4078,135541],{"style":128952,"src":135542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135544,135545],{},"(6)总结",[278,135547,135548,135563],{},[281,135549,135550],{},[284,135551,135552,135554,135557,135560],{},[287,135553,134886],{"align":26320},[287,135555,135556],{"align":26320},"是否脱标",[287,135558,135559],{"align":26320},"移动位置",[287,135561,135562],{"align":26320},"是否常用",[294,135564,135565,135578,135592,135606,135619],{},[284,135566,135567,135570,135572,135575],{},[299,135568,135569],{"align":26320},"Static 静态定位",[299,135571,107228],{"align":26320},[299,135573,135574],{"align":26320},"不能使用边偏移",[299,135576,135577],{"align":26320},"很少",[284,135579,135580,135583,135586,135589],{},[299,135581,135582],{"align":26320},"Relative 相对定位",[299,135584,135585],{"align":26320},"否(占有位置)",[299,135587,135588],{"align":26320},"相对于自身位置移动",[299,135590,135591],{"align":26320},"基本单独使用",[284,135593,135594,135597,135600,135603],{},[299,135595,135596],{"align":26320},"Absolute 绝对定位",[299,135598,135599],{"align":26320},"是(不占有位置)",[299,135601,135602],{"align":26320},"带有定位的父级",[299,135604,135605],{"align":26320},"要和定位父级元素搭配使用",[284,135607,135608,135611,135613,135616],{},[299,135609,135610],{"align":26320},"Fixed 固定定位",[299,135612,135599],{"align":26320},[299,135614,135615],{"align":26320},"浏览器可视区",[299,135617,135618],{"align":26320},"单独使用,不需要父级",[284,135620,135621,135624,135626,135628],{},[299,135622,135623],{"align":26320},"Sticky 粘性定位",[299,135625,135585],{"align":26320},[299,135627,135615],{"align":26320},[299,135629,135630],{"align":26320},"当前阶段少",[26,135632,135633],{"start":157},[29,135634,135635,135638],{},[2913,135636,135637],{},"边偏移"," 则决定了该元素的最终位置",[278,135640,135641,135652],{},[281,135642,135643],{},[284,135644,135645,135648,135650],{},[287,135646,135647],{"align":26320},"边偏移属性",[287,135649,30074],{"align":26320},[287,135651,30071],{"align":26320},[294,135653,135654,135665,135676,135686],{},[284,135655,135656,135659,135662],{},[299,135657,135658],{"align":26320},"top",[299,135660,135661],{"align":26320},"top: 80px;",[299,135663,135664],{"align":26320},"顶端偏移量，定义元素相对于父元素上边线的距离",[284,135666,135667,135670,135673],{},[299,135668,135669],{"align":26320},"bottom",[299,135671,135672],{"align":26320},"bottom: 80px ;",[299,135674,135675],{"align":26320},"底部偏移量，定义元素相对于其父元素下边线的距离",[284,135677,135678,135680,135683],{},[299,135679,26320],{"align":26320},[299,135681,135682],{"align":26320},"left: 80px ;",[299,135684,135685],{"align":26320},"左侧偏移量，定义元素相对于其父元素左边线的距离",[284,135687,135688,135690,135693],{},[299,135689,75078],{"align":26320},[299,135691,135692],{"align":26320},"right: 80px ;",[299,135694,135695],{"align":26320},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3755,135697,135698],{},[29,135699,11616,135700,135702,135703,135705,135706,135708,135709,135712,135713,135715,135716,135718],{},[56276,135701],{},"  ① ",[2913,135704,135637],{}," 需要和 ",[2913,135707,134886],{}," 联合使用， ",[2913,135710,135711],{},"单独使用无效"," ；",[56276,135714],{},"  ②top和bottom不要同时使用",[56276,135717],{},"  ③left和right不要同时使用",[24582,135720,135722],{"id":135721},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135724,135725],{},"子级是绝对定位的话，父级要用相对定位",[3755,135727,135728,135731,135734,135737],{},[29,135729,135730],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,135732,135733],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,135735,135736],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,135738,135739,135740,135743],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2913,135741,135742],{},"子绝父绝"," 也会遇到",[24582,135745,135747],{"id":135746},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3755,135749,135750,135765],{},[29,135751,135752,135753,135756,135757,135760,135761,135764],{},"在使用 ",[2913,135754,135755],{},"定位"," 布局时，可能会 ",[2913,135758,135759],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2913,135762,135763],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,135766,246],{},[73,135768,135769],{"className":129096,"code":134889,"language":129098,"meta":78,"style":78},[32,135770,135771,135777,135789,135803,135817],{"__ignoreMap":78},[82,135772,135773,135775],{"class":84,"line":85},[82,135774,132944],{"class":2384},[82,135776,1349],{"class":92},[82,135778,135779,135781,135783,135785,135787],{"class":84,"line":157},[82,135780,134902],{"class":88},[82,135782,1357],{"class":92},[82,135784,57324],{"class":88},[82,135786,132959],{"class":92},[82,135788,134911],{"class":2828},[82,135790,135791,135793,135795,135797,135799,135801],{"class":84,"line":404},[82,135792,134916],{"class":88},[82,135794,1357],{"class":92},[82,135796,440],{"class":88},[82,135798,54054],{"class":112},[82,135800,134925],{"class":92},[82,135802,134928],{"class":2828},[82,135804,135805,135807,135809,135811,135813,135815],{"class":84,"line":413},[82,135806,134933],{"class":88},[82,135808,1357],{"class":92},[82,135810,3451],{"class":88},[82,135812,54054],{"class":112},[82,135814,134942],{"class":92},[82,135816,134945],{"class":2828},[82,135818,135819],{"class":84,"line":508},[82,135820,1391],{"class":92},[3755,135822,135823],{},[29,135824,135825,135826,135702,135828,135830,135831,130259,135834,85093,135837,135839,135840,135842,135843,135846,135847,135712,135850,135852,135853,135856,135858],{},"z-index的特性",[56276,135827],{},[2913,135829,129560],{}," ： ",[2913,135832,135833],{},"正整数",[2913,135835,135836],{},"负整数",[2913,135838,2244],{}," ，默认值是 0，数值越大，盒子越靠上；",[56276,135841],{},"  ②如果 ",[2913,135844,135845],{},"属性值相同"," ，则按照书写顺序， ",[2913,135848,135849],{},"后来居上",[56276,135851],{},"  ③数字后面 ",[2913,135854,135855],{},"不能加单位",[56276,135857],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24582,135860,135862],{"id":135861},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135864,135865],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135867,135868],{},"方法:",[3755,135870,135871,135881],{},[29,135872,135873,135874,135877,135878],{},"left: 50%; 让 ",[2913,135875,135876],{},"盒子的左侧"," 移动到 ",[2913,135879,135880],{},"父级元素的水平中心位置",[29,135882,135883,135884,135887,135888],{},"margin-left: -100px; 让盒子 ",[2913,135885,135886],{},"向左"," 移动 ",[2913,135889,135890],{},"自身宽度的一半",[24582,135892,135894],{"id":135893},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,135896,135897,135900],{},[29,135898,135899],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,135901,135902],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135904,135905],{},"也就是说绝对定位和固定定位和浮动类似",[26,135907,135908],{"start":404},[29,135909,135910],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3755,135912,135913,135916,135919],{},[29,135914,135915],{},"可以用inline-block 转换为行内块",[29,135917,135918],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,135920,135921],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135923,135924],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24582,135926,135928],{"id":135927},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,135930,135931,135934,135937,135940],{},[29,135932,135933],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,135935,135936],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,135938,135939],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,135941,135942],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[73,135944,135945],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,135946,135947,135953,135963,135967,135973,135983],{"__ignoreMap":78},[82,135948,135949,135951],{"class":84,"line":85},[82,135950,133569],{"class":2384},[82,135952,1349],{"class":92},[82,135954,135955,135957,135959,135961],{"class":84,"line":157},[82,135956,133576],{"class":88},[82,135958,1357],{"class":92},[82,135960,26320],{"class":88},[82,135962,3909],{"class":92},[82,135964,135965],{"class":84,"line":404},[82,135966,1391],{"class":92},[82,135968,135969,135971],{"class":84,"line":413},[82,135970,133591],{"class":2384},[82,135972,1349],{"class":92},[82,135974,135975,135977,135979,135981],{"class":84,"line":508},[82,135976,133576],{"class":88},[82,135978,1357],{"class":92},[82,135980,75078],{"class":88},[82,135982,3909],{"class":92},[82,135984,135985],{"class":84,"line":513},[82,135986,1391],{"class":92},[4078,135988],{"style":128952,"src":135989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24582,135991,135993],{"id":135992},"_11138-轮播图","11.1.3.8 轮播图",[4078,135995],{"style":128952,"src":135996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,135998,135999],{},[29,136000,136001],{},"制作顺序:",[3755,136003,136004,136007,136010,136019],{},[29,136005,136006],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,136008,136009],{},"里面先放一张图片",[29,136011,136012,136013,136015,136016,136018],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56276,136014],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56276,136017],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,136020,136021,136022,136024,136025,136027],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56276,136023],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56276,136026],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,136029,136030],{"start":157},[29,136031,136032],{},"代码模块",[73,136034,136036],{"className":129096,"code":136035,"language":129098,"meta":78,"style":78},"\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",[32,136037,136038,136043,136050,136060,136070,136080,136084,136089,136096,136106],{"__ignoreMap":78},[82,136039,136040],{"class":84,"line":85},[82,136041,136042],{"class":2828},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[82,136044,136045,136048],{"class":84,"line":157},[82,136046,136047],{"class":2384},".son",[82,136049,1349],{"class":92},[82,136051,136052,136054,136056,136058],{"class":84,"line":404},[82,136053,134902],{"class":88},[82,136055,1357],{"class":92},[82,136057,57391],{"class":88},[82,136059,3909],{"class":92},[82,136061,136062,136064,136066,136068],{"class":84,"line":413},[82,136063,134916],{"class":88},[82,136065,1357],{"class":92},[82,136067,2244],{"class":88},[82,136069,3909],{"class":92},[82,136071,136072,136074,136076,136078],{"class":84,"line":508},[82,136073,134933],{"class":88},[82,136075,1357],{"class":92},[82,136077,2244],{"class":88},[82,136079,3909],{"class":92},[82,136081,136082],{"class":84,"line":513},[82,136083,1391],{"class":92},[82,136085,136086],{"class":84,"line":1388},[82,136087,136088],{"class":2828},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[82,136090,136091,136094],{"class":84,"line":1394},[82,136092,136093],{"class":2384},".father",[82,136095,1349],{"class":92},[82,136097,136098,136100,136102,136104],{"class":84,"line":1399},[82,136099,134902],{"class":88},[82,136101,1357],{"class":92},[82,136103,57324],{"class":88},[82,136105,3909],{"class":92},[82,136107,136108],{"class":84,"line":1430},[82,136109,1391],{"class":92},[19,136111,136112],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[65,136114,136116],{"id":136115},"_1114-定位数值的移动","11.1.4 定位数值的移动",[4078,136118],{"style":128952,"src":136119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136121,136122],{},"✨ 黄金口诀：",[19,136124,136125],{},"\"TOP正下负上，LEFT正右负左\"",[19,136127,136128],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136130,136131],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136133,136134],{},"✨ 简单记：",[19,136136,136137],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2671,136139,136140],{},"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":78,"searchDepth":157,"depth":157,"links":136142},[136143],{"id":134670,"depth":157,"text":134671,"children":136144},[136145,136146,136147,136148],{"id":134674,"depth":404,"text":134675},{"id":134689,"depth":404,"text":134690},{"id":134857,"depth":404,"text":134858},{"id":136115,"depth":404,"text":136116},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134662,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136155,"title":136156,"body":136157,"description":2699,"extension":2700,"meta":137580,"navigation":485,"path":137581,"seo":137582,"stem":137583,"__hash__":137584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136158,"toc":137559},[136159,136162,136166,136174,136178,136183,136191,136203,136207,136212,136220,136231,136235,136240,136281,136289,136293,136296,136299,136302,136396,136399,136493,136496,136590,136593,136596,136631,136634,136637,136667,136670,136673,136676,136679,136682,136685,136688,136758,136761,136765,136769,136810,136814,136820,136823,136826,136830,136833,136836,136839,136920,136923,136926,136930,136934,136937,136940,136943,136946,136949,136955,136964,136968,136987,136991,137001,137004,137007,137010,137013,137016,137019,137022,137025,137034,137038,137047,137050,137055,137108,137113,137279,137282,137285,137290,137293,137296,137299,137302,137307,137455,137458,137461,137466,137469,137474,137508,137511,137514,137518,137521,137528,137531,137534,137537,137540,137543,137546,137549,137553,137556],[10,136160,136156],{"id":136161},"_12-显示隐藏与图形资源",[14,136163,136165],{"id":136164},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3755,136167,136168,136171],{},[29,136169,136170],{},"目的:让一个元素在页面中消失或者显示出来",[29,136172,136173],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[65,136175,136177],{"id":136176},"_1211-display-显示","12.1.1 display 显示",[26,136179,136180],{},[29,136181,136182],{},"display 设置或检索对象是否及如何显示",[3755,136184,136185,136188],{},[29,136186,136187],{},"display: none;隐藏对象",[29,136189,136190],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,136192,136193,136200],{"start":157},[29,136194,136195,136196,136199],{},"特点： display 隐藏元素后， ",[2913,136197,136198],{},"不再占"," 有原来的位置",[29,136201,136202],{},"在js中使用非常的广泛",[65,136204,136206],{"id":136205},"_1212-visibility可见性","12.1.2 visibility可见性",[26,136208,136209],{},[29,136210,136211],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3755,136213,136214,136217],{},[29,136215,136216],{},"visibility： visible；元素可见",[29,136218,136219],{},"visibility：hidden；元素隐藏",[26,136221,136222,136225,136228],{"start":157},[29,136223,136224],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,136226,136227],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,136229,136230],{},"隐藏后继续占有原有位置",[65,136232,136234],{"id":136233},"_1213-overflow溢出","12.1.3 overflow溢出",[3755,136236,136237],{},[29,136238,136239],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[278,136241,136242,136250],{},[281,136243,136244],{},[284,136245,136246,136248],{},[287,136247,129560],{"align":26320},[287,136249,30071],{"align":26320},[294,136251,136252,136260,136267,136274],{},[284,136253,136254,136257],{},[299,136255,136256],{"align":26320},"visible",[299,136258,136259],{"align":26320},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[284,136261,136262,136264],{},[299,136263,64272],{"align":26320},[299,136265,136266],{"align":26320},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[284,136268,136269,136271],{},[299,136270,131516],{"align":26320},[299,136272,136273],{"align":26320},"不管超出内容否，总是显示滚动条",[284,136275,136276,136278],{},[299,136277,75219],{"align":26320},[299,136279,136280],{"align":26320},"超出自动显示滚动条，不超出不显示滚动条",[3755,136282,136283,136286],{},[29,136284,136285],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,136287,136288],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[65,136290,136292],{"id":136291},"_1214-案例收获","12.1.4 案例收获",[4078,136294],{"style":128952,"src":136295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136297,136298],{},"问题：没做出来动态效果，使用hover没实现",[19,136300,136301],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[73,136303,136304],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,136305,136306,136310,136324,136328,136342,136346,136360,136364,136378,136382],{"__ignoreMap":78},[82,136307,136308],{"class":84,"line":85},[82,136309,134535],{"class":2828},[82,136311,136312,136314,136316,136318,136320,136322],{"class":84,"line":157},[82,136313,134540],{"class":2384},[82,136315,82361],{"class":92},[82,136317,131456],{"class":88},[82,136319,1357],{"class":92},[82,136321,134549],{"class":88},[82,136323,132026],{"class":92},[82,136325,136326],{"class":84,"line":404},[82,136327,134556],{"class":2828},[82,136329,136330,136332,136334,136336,136338,136340],{"class":84,"line":413},[82,136331,134561],{"class":2384},[82,136333,82361],{"class":92},[82,136335,131456],{"class":88},[82,136337,1357],{"class":92},[82,136339,57324],{"class":88},[82,136341,132026],{"class":92},[82,136343,136344],{"class":84,"line":508},[82,136345,134576],{"class":2828},[82,136347,136348,136350,136352,136354,136356,136358],{"class":84,"line":513},[82,136349,134581],{"class":2384},[82,136351,82361],{"class":92},[82,136353,131456],{"class":88},[82,136355,1357],{"class":92},[82,136357,57391],{"class":88},[82,136359,132026],{"class":92},[82,136361,136362],{"class":84,"line":1388},[82,136363,134596],{"class":2828},[82,136365,136366,136368,136370,136372,136374,136376],{"class":84,"line":1394},[82,136367,134601],{"class":2384},[82,136369,82361],{"class":92},[82,136371,131456],{"class":88},[82,136373,1357],{"class":92},[82,136375,88787],{"class":88},[82,136377,132026],{"class":92},[82,136379,136380],{"class":84,"line":1399},[82,136381,134616],{"class":2828},[82,136383,136384,136386,136388,136390,136392,136394],{"class":84,"line":1430},[82,136385,134621],{"class":2384},[82,136387,82361],{"class":92},[82,136389,131456],{"class":88},[82,136391,1357],{"class":92},[82,136393,134630],{"class":88},[82,136395,132026],{"class":92},[19,136397,136398],{},"完整代码：",[73,136400,136401],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,136402,136403,136407,136421,136425,136439,136443,136457,136461,136475,136479],{"__ignoreMap":78},[82,136404,136405],{"class":84,"line":85},[82,136406,134535],{"class":2828},[82,136408,136409,136411,136413,136415,136417,136419],{"class":84,"line":157},[82,136410,134540],{"class":2384},[82,136412,82361],{"class":92},[82,136414,131456],{"class":88},[82,136416,1357],{"class":92},[82,136418,134549],{"class":88},[82,136420,132026],{"class":92},[82,136422,136423],{"class":84,"line":404},[82,136424,134556],{"class":2828},[82,136426,136427,136429,136431,136433,136435,136437],{"class":84,"line":413},[82,136428,134561],{"class":2384},[82,136430,82361],{"class":92},[82,136432,131456],{"class":88},[82,136434,1357],{"class":92},[82,136436,57324],{"class":88},[82,136438,132026],{"class":92},[82,136440,136441],{"class":84,"line":508},[82,136442,134576],{"class":2828},[82,136444,136445,136447,136449,136451,136453,136455],{"class":84,"line":513},[82,136446,134581],{"class":2384},[82,136448,82361],{"class":92},[82,136450,131456],{"class":88},[82,136452,1357],{"class":92},[82,136454,57391],{"class":88},[82,136456,132026],{"class":92},[82,136458,136459],{"class":84,"line":1388},[82,136460,134596],{"class":2828},[82,136462,136463,136465,136467,136469,136471,136473],{"class":84,"line":1394},[82,136464,134601],{"class":2384},[82,136466,82361],{"class":92},[82,136468,131456],{"class":88},[82,136470,1357],{"class":92},[82,136472,88787],{"class":88},[82,136474,132026],{"class":92},[82,136476,136477],{"class":84,"line":1399},[82,136478,134616],{"class":2828},[82,136480,136481,136483,136485,136487,136489,136491],{"class":84,"line":1430},[82,136482,134621],{"class":2384},[82,136484,82361],{"class":92},[82,136486,131456],{"class":88},[82,136488,1357],{"class":92},[82,136490,134630],{"class":88},[82,136492,132026],{"class":92},[19,136494,136495],{},"分布思路重点详解：",[73,136497,136498],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,136499,136500,136504,136518,136522,136536,136540,136554,136558,136572,136576],{"__ignoreMap":78},[82,136501,136502],{"class":84,"line":85},[82,136503,134535],{"class":2828},[82,136505,136506,136508,136510,136512,136514,136516],{"class":84,"line":157},[82,136507,134540],{"class":2384},[82,136509,82361],{"class":92},[82,136511,131456],{"class":88},[82,136513,1357],{"class":92},[82,136515,134549],{"class":88},[82,136517,132026],{"class":92},[82,136519,136520],{"class":84,"line":404},[82,136521,134556],{"class":2828},[82,136523,136524,136526,136528,136530,136532,136534],{"class":84,"line":413},[82,136525,134561],{"class":2384},[82,136527,82361],{"class":92},[82,136529,131456],{"class":88},[82,136531,1357],{"class":92},[82,136533,57324],{"class":88},[82,136535,132026],{"class":92},[82,136537,136538],{"class":84,"line":508},[82,136539,134576],{"class":2828},[82,136541,136542,136544,136546,136548,136550,136552],{"class":84,"line":513},[82,136543,134581],{"class":2384},[82,136545,82361],{"class":92},[82,136547,131456],{"class":88},[82,136549,1357],{"class":92},[82,136551,57391],{"class":88},[82,136553,132026],{"class":92},[82,136555,136556],{"class":84,"line":1388},[82,136557,134596],{"class":2828},[82,136559,136560,136562,136564,136566,136568,136570],{"class":84,"line":1394},[82,136561,134601],{"class":2384},[82,136563,82361],{"class":92},[82,136565,131456],{"class":88},[82,136567,1357],{"class":92},[82,136569,88787],{"class":88},[82,136571,132026],{"class":92},[82,136573,136574],{"class":84,"line":1399},[82,136575,134616],{"class":2828},[82,136577,136578,136580,136582,136584,136586,136588],{"class":84,"line":1430},[82,136579,134621],{"class":2384},[82,136581,82361],{"class":92},[82,136583,131456],{"class":88},[82,136585,1357],{"class":92},[82,136587,134630],{"class":88},[82,136589,132026],{"class":92},[4078,136591],{"style":128952,"src":136592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136594,136595],{},"图片太大，盒子太小，此时需要修改图片的大小",[73,136597,136599],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[32,136600,136601],{"__ignoreMap":78},[82,136602,136603,136605,136607,136609,136611,136614,136616,136618,136621,136624,136626,136629],{"class":84,"line":85},[82,136604,3659],{"class":92},[82,136606,4078],{"class":53863},[82,136608,57799],{"class":2384},[82,136610,113],{"class":92},[82,136612,136613],{"class":96},"\"images\u002Fpic.jpg\"",[82,136615,57807],{"class":2384},[82,136617,113],{"class":92},[82,136619,136620],{"class":96},"\"描述文字\"",[82,136622,136623],{"class":2384}," title",[82,136625,113],{"class":92},[82,136627,136628],{"class":96},"\"悬停提示\"",[82,136630,53870],{"class":92},[4078,136632],{"style":128952,"src":136633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136635,136636],{},"制造遮罩层",[73,136638,136639],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,136640,136641],{"__ignoreMap":78},[82,136642,136643,136645,136647,136649,136651,136653,136655,136657,136659,136661,136663,136665],{"class":84,"line":85},[82,136644,3659],{"class":92},[82,136646,4078],{"class":53863},[82,136648,57799],{"class":2384},[82,136650,113],{"class":92},[82,136652,136613],{"class":96},[82,136654,57807],{"class":2384},[82,136656,113],{"class":92},[82,136658,136620],{"class":96},[82,136660,136623],{"class":2384},[82,136662,113],{"class":92},[82,136664,136628],{"class":96},[82,136666,53870],{"class":92},[19,136668,136669],{},"此时是这样的为标准流",[4078,136671],{"style":128952,"src":136672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136674,136675],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136677,136678],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136680,136681],{},"让他在中间，用center(background-position)",[19,136683,136684],{},"将需要变的尽可能放到一个盒子中",[19,136686,136687],{},"放大盒子上内部盒子发生变化",[73,136689,136691],{"className":129096,"code":136690,"language":129098,"meta":78,"style":78},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[32,136692,136693,136699,136709,136713,136720,136730,136742,136754],{"__ignoreMap":78},[82,136694,136695,136697],{"class":84,"line":85},[82,136696,130163],{"class":2384},[82,136698,1349],{"class":92},[82,136700,136701,136703,136705,136707],{"class":84,"line":157},[82,136702,134902],{"class":88},[82,136704,1357],{"class":92},[82,136706,57324],{"class":88},[82,136708,3909],{"class":92},[82,136710,136711],{"class":84,"line":404},[82,136712,1391],{"class":92},[82,136714,136715,136718],{"class":84,"line":413},[82,136716,136717],{"class":2384},".child",[82,136719,1349],{"class":92},[82,136721,136722,136724,136726,136728],{"class":84,"line":508},[82,136723,134902],{"class":88},[82,136725,1357],{"class":92},[82,136727,57391],{"class":88},[82,136729,3909],{"class":92},[82,136731,136732,136734,136736,136738,136740],{"class":84,"line":513},[82,136733,134916],{"class":88},[82,136735,1357],{"class":92},[82,136737,3408],{"class":88},[82,136739,3086],{"class":112},[82,136741,3909],{"class":92},[82,136743,136744,136746,136748,136750,136752],{"class":84,"line":1388},[82,136745,134933],{"class":88},[82,136747,1357],{"class":92},[82,136749,3408],{"class":88},[82,136751,3086],{"class":112},[82,136753,3909],{"class":92},[82,136755,136756],{"class":84,"line":1394},[82,136757,1391],{"class":92},[19,136759,136760],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136762,136764],{"id":136763},"_122-精灵图","12.2 精灵图",[65,136766,136768],{"id":136767},"_1221-理解","12.2.1 理解",[26,136770,136771,136789],{},[29,136772,136773,136774,135002,136777,136780,136781,136784,136785,136788],{},"目的： ",[2913,136775,136776],{},"为了有效地减少服务器接收和发送请求的次数",[2913,136778,136779],{},"提高"," 页面的 ",[2913,136782,136783],{},"加载速度"," ，出现了 ",[2913,136786,136787],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,136790,136791,136792,136794,136795,136797,136798,136800,136801,136803,136804,136806,136807,136809],{},"使用精灵图核心：",[56276,136793],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56276,136796],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56276,136799],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56276,136802],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56276,136805],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56276,136808],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[65,136811,136813],{"id":136812},"_1222-扒图","12.2.2 扒图",[73,136815,136818],{"className":136816,"code":136817,"language":7780},[7778],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[32,136819,136817],{"__ignoreMap":78},[4078,136821],{"style":128952,"src":136822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[4078,136824],{"style":128952,"src":136825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[65,136827,136829],{"id":136828},"_1223-精灵图的实现","12.2.3 精灵图的实现",[4078,136831],{"style":128952,"src":136832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136834,136835],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[4078,136837],{"style":128952,"src":136838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[73,136840,136842],{"className":129096,"code":136841,"language":129098,"meta":78,"style":78},"\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",[32,136843,136844,136849,136856,136868,136880,136899,136916],{"__ignoreMap":78},[82,136845,136846],{"class":84,"line":85},[82,136847,136848],{"class":2828},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[82,136850,136851,136854],{"class":84,"line":157},[82,136852,136853],{"class":2384},".icon",[82,136855,1349],{"class":92},[82,136857,136858,136860,136862,136864,136866],{"class":84,"line":404},[82,136859,73124],{"class":88},[82,136861,1357],{"class":92},[82,136863,3451],{"class":88},[82,136865,54054],{"class":112},[82,136867,3909],{"class":92},[82,136869,136870,136872,136874,136876,136878],{"class":84,"line":413},[82,136871,73344],{"class":88},[82,136873,1357],{"class":92},[82,136875,3451],{"class":88},[82,136877,54054],{"class":112},[82,136879,3909],{"class":92},[82,136881,136882,136884,136886,136888,136890,136893,136895,136897],{"class":84,"line":508},[82,136883,73167],{"class":88},[82,136885,1357],{"class":92},[82,136887,64284],{"class":88},[82,136889,93],{"class":92},[82,136891,136892],{"class":108},"sprites.png",[82,136894,725],{"class":92},[82,136896,64294],{"class":88},[82,136898,3909],{"class":92},[82,136900,136901,136903,136905,136907,136909,136912,136914],{"class":84,"line":513},[82,136902,131356],{"class":88},[82,136904,1357],{"class":92},[82,136906,54325],{"class":88},[82,136908,54054],{"class":112},[82,136910,136911],{"class":88}," -20",[82,136913,54054],{"class":112},[82,136915,3909],{"class":92},[82,136917,136918],{"class":84,"line":1388},[82,136919,1391],{"class":92},[4078,136921],{"style":128952,"src":136922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136924,136925],{},"在前端中坐标轴的正方向是右和下",[14,136927,136929],{"id":136928},"_123-字体图标","12.3 字体图标",[65,136931,136933],{"id":136932},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136935,136936],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136938,136939],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136941,136942],{},"1.图片文件还是比较大的。",[19,136944,136945],{},"2.图片本身放大和缩小会失真。",[19,136947,136948],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136950,136951,136952,28324],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2913,136953,136954],{},"字体图标 iconfont",[19,136956,136957,136960,136961,2611],{},[2913,136958,136959],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2913,136962,136963],{},"展示的是图标，本质属于字体",[65,136965,136967],{"id":136966},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3755,136969,136970,136975,136978,136981,136984],{},[29,136971,136972,136974],{},[2913,136973,28459],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,136976,136977],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,136979,136980],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,136982,136983],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,136985,136986],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[65,136988,136990],{"id":136989},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3755,136992,136993],{},[29,136994,136995,136996],{},"icomoon字体库：",[323,136997,137000],{"href":136998,"rel":136999},"http:\u002F\u002Ficomoon.io\u002F",[26449],"http:\u002F\u002Ficomoon.io",[19,137002,137003],{},"进去之后点icomoon app",[4078,137005],{"style":128952,"src":137006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,137008,137009],{},"可以对其编辑：",[4078,137011],{"style":128952,"src":137012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,137014,137015],{},"生成字体：",[4078,137017],{"style":128952,"src":137018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,137020,137021],{},"下载：",[4078,137023],{"style":128952,"src":137024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3755,137026,137027],{},[29,137028,137029,137030],{},"阿里iconfont字体库： ",[323,137031,137032],{"href":137032,"rel":137033},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26449],[65,137035,137037],{"id":137036},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,137039,137040],{},[29,137041,137042,137043,137046],{},"把下载包里面的 ",[2913,137044,137045],{},"fonts"," 文件夹放入页面根目录下",[4078,137048],{"style":128952,"src":137049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,137051,137052],{"start":157},[29,137053,137054],{},"字体文件格式",[278,137056,137057,137066],{},[281,137058,137059],{},[284,137060,137061,137064],{},[287,137062,137063],{"align":26320},"格式",[287,137065,26324],{"align":26320},[294,137067,137068,137078,137088,137098],{},[284,137069,137070,137075],{},[299,137071,137072],{"align":26320},[2913,137073,137074],{},".ttf",[299,137076,137077],{"align":26320},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[284,137079,137080,137085],{},[299,137081,137082],{"align":26320},[2913,137083,137084],{},".woff",[299,137086,137087],{"align":26320},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[284,137089,137090,137095],{},[299,137091,137092],{"align":26320},[2913,137093,137094],{},".eot",[299,137096,137097],{"align":26320},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[284,137099,137100,137105],{},[299,137101,137102],{"align":26320},[2913,137103,137104],{},"svg",[299,137106,137107],{"align":26320},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,137109,137110],{"start":404},[29,137111,137112],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[73,137114,137116],{"className":129096,"code":137115,"language":129098,"meta":78,"style":78},"\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",[32,137117,137118,137123,137130,137142,137158,137183,137204,137224,137244,137248,137254,137264,137275],{"__ignoreMap":78},[82,137119,137120],{"class":84,"line":85},[82,137121,137122],{"class":2828},"\u002F* 引入字体图标 *\u002F\n",[82,137124,137125,137128],{"class":84,"line":157},[82,137126,137127],{"class":112},"@font-face",[82,137129,1349],{"class":92},[82,137131,137132,137135,137137,137140],{"class":84,"line":404},[82,137133,137134],{"class":88},"  font-family",[82,137136,1357],{"class":92},[82,137138,137139],{"class":96},"'icomoon'",[82,137141,3909],{"class":92},[82,137143,137144,137147,137149,137151,137153,137156],{"class":84,"line":413},[82,137145,137146],{"class":88},"  src",[82,137148,1357],{"class":92},[82,137150,64284],{"class":88},[82,137152,93],{"class":92},[82,137154,137155],{"class":96},"'fonts\u002Ficomoon.eot'",[82,137157,5318],{"class":92},[82,137159,137160,137162,137164,137166,137168,137171,137173,137176,137178,137181],{"class":84,"line":508},[82,137161,137146],{"class":88},[82,137163,1357],{"class":92},[82,137165,64284],{"class":88},[82,137167,93],{"class":92},[82,137169,137170],{"class":96},"'fonts\u002Ficomoon.eot?#iefix'",[82,137172,725],{"class":92},[82,137174,137175],{"class":88},"format",[82,137177,93],{"class":92},[82,137179,137180],{"class":96},"'embedded-opentype'",[82,137182,40613],{"class":92},[82,137184,137185,137188,137190,137193,137195,137197,137199,137202],{"class":84,"line":513},[82,137186,137187],{"class":88},"       url",[82,137189,93],{"class":92},[82,137191,137192],{"class":96},"'fonts\u002Ficomoon.woff'",[82,137194,725],{"class":92},[82,137196,137175],{"class":88},[82,137198,93],{"class":92},[82,137200,137201],{"class":96},"'woff'",[82,137203,40613],{"class":92},[82,137205,137206,137208,137210,137213,137215,137217,137219,137222],{"class":84,"line":1388},[82,137207,137187],{"class":88},[82,137209,93],{"class":92},[82,137211,137212],{"class":96},"'fonts\u002Ficomoon.ttf'",[82,137214,725],{"class":92},[82,137216,137175],{"class":88},[82,137218,93],{"class":92},[82,137220,137221],{"class":96},"'truetype'",[82,137223,40613],{"class":92},[82,137225,137226,137228,137230,137233,137235,137237,137239,137242],{"class":84,"line":1394},[82,137227,137187],{"class":88},[82,137229,93],{"class":92},[82,137231,137232],{"class":96},"'fonts\u002Ficomoon.svg#icomoon'",[82,137234,725],{"class":92},[82,137236,137175],{"class":88},[82,137238,93],{"class":92},[82,137240,137241],{"class":96},"'svg'",[82,137243,5318],{"class":92},[82,137245,137246],{"class":84,"line":1399},[82,137247,1391],{"class":92},[82,137249,137250,137252],{"class":84,"line":1430},[82,137251,136853],{"class":2384},[82,137253,1349],{"class":92},[82,137255,137256,137258,137260,137262],{"class":84,"line":1818},[82,137257,137134],{"class":88},[82,137259,1357],{"class":92},[82,137261,137139],{"class":96},[82,137263,3909],{"class":92},[82,137265,137266,137269,137271,137273],{"class":84,"line":2082},[82,137267,137268],{"class":88},"  font-style",[82,137270,1357],{"class":92},[82,137272,66398],{"class":88},[82,137274,3909],{"class":92},[82,137276,137277],{"class":84,"line":2233},[82,137278,1391],{"class":92},[19,137280,137281],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[4078,137283],{"style":128952,"src":137284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,137286,137287],{"start":413},[29,137288,137289],{},"添加字体",[4078,137291],{"style":128952,"src":137292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137294,137295],{},"复制：",[4078,137297],{"style":128952,"src":137298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137300,137301],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,137303,137304],{"start":508},[29,137305,137306],{},"代码展示：",[73,137308,137309],{"className":129096,"code":137115,"language":129098,"meta":78,"style":78},[32,137310,137311,137315,137321,137331,137345,137367,137385,137403,137421,137425,137431,137441,137451],{"__ignoreMap":78},[82,137312,137313],{"class":84,"line":85},[82,137314,137122],{"class":2828},[82,137316,137317,137319],{"class":84,"line":157},[82,137318,137127],{"class":112},[82,137320,1349],{"class":92},[82,137322,137323,137325,137327,137329],{"class":84,"line":404},[82,137324,137134],{"class":88},[82,137326,1357],{"class":92},[82,137328,137139],{"class":96},[82,137330,3909],{"class":92},[82,137332,137333,137335,137337,137339,137341,137343],{"class":84,"line":413},[82,137334,137146],{"class":88},[82,137336,1357],{"class":92},[82,137338,64284],{"class":88},[82,137340,93],{"class":92},[82,137342,137155],{"class":96},[82,137344,5318],{"class":92},[82,137346,137347,137349,137351,137353,137355,137357,137359,137361,137363,137365],{"class":84,"line":508},[82,137348,137146],{"class":88},[82,137350,1357],{"class":92},[82,137352,64284],{"class":88},[82,137354,93],{"class":92},[82,137356,137170],{"class":96},[82,137358,725],{"class":92},[82,137360,137175],{"class":88},[82,137362,93],{"class":92},[82,137364,137180],{"class":96},[82,137366,40613],{"class":92},[82,137368,137369,137371,137373,137375,137377,137379,137381,137383],{"class":84,"line":513},[82,137370,137187],{"class":88},[82,137372,93],{"class":92},[82,137374,137192],{"class":96},[82,137376,725],{"class":92},[82,137378,137175],{"class":88},[82,137380,93],{"class":92},[82,137382,137201],{"class":96},[82,137384,40613],{"class":92},[82,137386,137387,137389,137391,137393,137395,137397,137399,137401],{"class":84,"line":1388},[82,137388,137187],{"class":88},[82,137390,93],{"class":92},[82,137392,137212],{"class":96},[82,137394,725],{"class":92},[82,137396,137175],{"class":88},[82,137398,93],{"class":92},[82,137400,137221],{"class":96},[82,137402,40613],{"class":92},[82,137404,137405,137407,137409,137411,137413,137415,137417,137419],{"class":84,"line":1394},[82,137406,137187],{"class":88},[82,137408,93],{"class":92},[82,137410,137232],{"class":96},[82,137412,725],{"class":92},[82,137414,137175],{"class":88},[82,137416,93],{"class":92},[82,137418,137241],{"class":96},[82,137420,5318],{"class":92},[82,137422,137423],{"class":84,"line":1399},[82,137424,1391],{"class":92},[82,137426,137427,137429],{"class":84,"line":1430},[82,137428,136853],{"class":2384},[82,137430,1349],{"class":92},[82,137432,137433,137435,137437,137439],{"class":84,"line":1818},[82,137434,137134],{"class":88},[82,137436,1357],{"class":92},[82,137438,137139],{"class":96},[82,137440,3909],{"class":92},[82,137442,137443,137445,137447,137449],{"class":84,"line":2082},[82,137444,137268],{"class":88},[82,137446,1357],{"class":92},[82,137448,66398],{"class":88},[82,137450,3909],{"class":92},[82,137452,137453],{"class":84,"line":2233},[82,137454,1391],{"class":92},[4078,137456],{"style":128952,"src":137457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137459,137460],{},"更加细节展示：",[26,137462,137463],{},[29,137464,137465],{},"html 标签内添加小图标",[4078,137467],{"style":128952,"src":137468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,137470,137471],{"start":157},[29,137472,137473],{},"给标签定义字体",[73,137475,137476],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,137477,137478,137482,137496,137500],{"__ignoreMap":78},[82,137479,137480],{"class":84,"line":85},[82,137481,133207],{"class":2828},[82,137483,137484,137486,137488,137490,137492,137494],{"class":84,"line":157},[82,137485,3659],{"class":92},[82,137487,54173],{"class":53863},[82,137489,56046],{"class":2384},[82,137491,113],{"class":92},[82,137493,133220],{"class":96},[82,137495,53870],{"class":92},[82,137497,137498],{"class":84,"line":404},[82,137499,133227],{"class":92},[82,137501,137502,137504,137506],{"class":84,"line":413},[82,137503,54347],{"class":92},[82,137505,54173],{"class":53863},[82,137507,53870],{"class":92},[19,137509,137510],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[4078,137512],{"style":128952,"src":137513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[65,137515,137517],{"id":137516},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137519,137520],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137522,137523,137524,137527],{},"把压缩包里面的 ",[2913,137525,137526],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137529,137530],{},"打开网站，点下方：",[4078,137532],{"style":128952,"src":137533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[4078,137535],{"style":128952,"src":137536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[4078,137538],{"style":128952,"src":137539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137541,137542],{},"点yes重新加载",[19,137544,137545],{},"然后重复之前的操作就可以实现了",[19,137547,137548],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[65,137550,137552],{"id":137551},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[4078,137554],{"style":128952,"src":137555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2671,137557,137558],{},"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":78,"searchDepth":157,"depth":157,"links":137560},[137561,137567,137572],{"id":136164,"depth":157,"text":136165,"children":137562},[137563,137564,137565,137566],{"id":136176,"depth":404,"text":136177},{"id":136205,"depth":404,"text":136206},{"id":136233,"depth":404,"text":136234},{"id":136291,"depth":404,"text":136292},{"id":136763,"depth":157,"text":136764,"children":137568},[137569,137570,137571],{"id":136767,"depth":404,"text":136768},{"id":136812,"depth":404,"text":136813},{"id":136828,"depth":404,"text":136829},{"id":136928,"depth":157,"text":136929,"children":137573},[137574,137575,137576,137577,137578,137579],{"id":136932,"depth":404,"text":136933},{"id":136966,"depth":404,"text":136967},{"id":136989,"depth":404,"text":136990},{"id":137036,"depth":404,"text":137037},{"id":137516,"depth":404,"text":137517},{"id":137551,"depth":404,"text":137552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136156,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137586,"title":137587,"body":137588,"description":2699,"extension":2700,"meta":138815,"navigation":485,"path":138816,"seo":138817,"stem":138818,"__hash__":138819},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137589,"toc":138796},[137590,137593,137597,137600,137614,137682,137712,137715,137719,137723,137825,137872,137876,137879,137882,137916,137919,137922,137925,137928,137931,137934,137937,137939,137942,137945,137948,137951,137954,137957,137960,137988,137991,137995,137998,138005,138008,138011,138037,138040,138044,138047,138050,138057,138061,138064,138066,138098,138101,138104,138116,138122,138125,138128,138131,138133,138137,138140,138143,138146,138191,138195,138197,138200,138207,138249,138252,138256,138261,138275,138279,138282,138285,138288,138291,138294,138328,138331,138334,138388,138391,138394,138397,138400,138452,138455,138458,138507,138511,138513,138516,138519,138522,138525,138528,138586,138589,138595,138598,138601,138633,138636,138640,138644,138647,138679,138683,138686,138730,138734,138737,138740,138743,138746,138749,138752,138755,138757,138760,138762,138765,138768,138771,138774,138779,138782,138784,138787,138790,138793],[10,137591,137587],{"id":137592},"_13-界面样式与布局技巧",[14,137594,137596],{"id":137595},"_131-css三角","13.1 css三角",[19,137598,137599],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3755,137601,137602,137605,137608,137611],{},[29,137603,137604],{},"用css 边框可以模拟三角效果",[29,137606,137607],{},"宽度高度为0",[29,137609,137610],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,137612,137613],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[73,137615,137617],{"className":129096,"code":137616,"language":129098,"meta":78,"style":78},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[32,137618,137619,137624,137631,137641,137651,137667,137678],{"__ignoreMap":78},[82,137620,137621],{"class":84,"line":85},[82,137622,137623],{"class":2828},"\u002F* CSS 实现三角形 *\u002F\n",[82,137625,137626,137629],{"class":84,"line":157},[82,137627,137628],{"class":2384},".triangle",[82,137630,1349],{"class":92},[82,137632,137633,137635,137637,137639],{"class":84,"line":404},[82,137634,73124],{"class":88},[82,137636,1357],{"class":92},[82,137638,2244],{"class":88},[82,137640,3909],{"class":92},[82,137642,137643,137645,137647,137649],{"class":84,"line":413},[82,137644,73344],{"class":88},[82,137646,1357],{"class":92},[82,137648,2244],{"class":88},[82,137650,3909],{"class":92},[82,137652,137653,137655,137657,137659,137661,137663,137665],{"class":84,"line":508},[82,137654,73452],{"class":88},[82,137656,1357],{"class":92},[82,137658,440],{"class":88},[82,137660,54054],{"class":112},[82,137662,54083],{"class":88},[82,137664,66548],{"class":88},[82,137666,3909],{"class":92},[82,137668,137669,137672,137674,137676],{"class":84,"line":513},[82,137670,137671],{"class":88},"  border-bottom-color",[82,137673,1357],{"class":92},[82,137675,64927],{"class":88},[82,137677,3909],{"class":92},[82,137679,137680],{"class":84,"line":1388},[82,137681,1391],{"class":92},[73,137683,137684],{"className":129096,"code":133253,"language":129098,"meta":78,"style":78},[32,137685,137686,137692,137708],{"__ignoreMap":78},[82,137687,137688,137690],{"class":84,"line":85},[82,137689,54173],{"class":53863},[82,137691,1349],{"class":92},[82,137693,137694,137696,137698,137700,137702,137704,137706],{"class":84,"line":157},[82,137695,73452],{"class":88},[82,137697,1357],{"class":92},[82,137699,2283],{"class":88},[82,137701,54054],{"class":112},[82,137703,54083],{"class":88},[82,137705,132488],{"class":88},[82,137707,3909],{"class":92},[82,137709,137710],{"class":84,"line":404},[82,137711,1391],{"class":92},[4078,137713],{"style":128952,"src":137714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137716,137718],{"id":137717},"_132-css用户界面样式","13.2 css用户界面样式",[65,137720,137722],{"id":137721},"_1321-鼠标样式","13.2.1 鼠标样式",[73,137724,137726],{"className":129096,"code":137725,"language":129098,"meta":78,"style":78},"\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",[32,137727,137728,137733,137752,137770,137789,137806],{"__ignoreMap":78},[82,137729,137730],{"class":84,"line":85},[82,137731,137732],{"class":2828},"\u002F* 鼠标样式 *\u002F\n",[82,137734,137735,137737,137739,137742,137744,137746,137749],{"class":84,"line":157},[82,137736,54173],{"class":53863},[82,137738,82361],{"class":92},[82,137740,137741],{"class":88},"cursor",[82,137743,1357],{"class":92},[82,137745,64588],{"class":88},[82,137747,137748],{"class":92},"; }   ",[82,137750,137751],{"class":2828},"\u002F* 手型 *\u002F\n",[82,137753,137754,137756,137758,137760,137762,137765,137767],{"class":84,"line":404},[82,137755,54173],{"class":53863},[82,137757,82361],{"class":92},[82,137759,137741],{"class":88},[82,137761,1357],{"class":92},[82,137763,137764],{"class":88},"default",[82,137766,137748],{"class":92},[82,137768,137769],{"class":2828},"\u002F* 默认 *\u002F\n",[82,137771,137772,137774,137776,137778,137780,137783,137786],{"class":84,"line":413},[82,137773,54173],{"class":53863},[82,137775,82361],{"class":92},[82,137777,137741],{"class":88},[82,137779,1357],{"class":92},[82,137781,137782],{"class":88},"move",[82,137784,137785],{"class":92},"; }      ",[82,137787,137788],{"class":2828},"\u002F* 移动 *\u002F\n",[82,137790,137791,137793,137795,137797,137799,137801,137803],{"class":84,"line":508},[82,137792,54173],{"class":53863},[82,137794,82361],{"class":92},[82,137796,137741],{"class":88},[82,137798,1357],{"class":92},[82,137800,7780],{"class":88},[82,137802,137785],{"class":92},[82,137804,137805],{"class":2828},"\u002F* 文本 *\u002F\n",[82,137807,137808,137810,137812,137814,137816,137819,137822],{"class":84,"line":513},[82,137809,54173],{"class":53863},[82,137811,82361],{"class":92},[82,137813,137741],{"class":88},[82,137815,1357],{"class":92},[82,137817,137818],{"class":88},"not-allowed",[82,137820,137821],{"class":92},"; } ",[82,137823,137824],{"class":2828},"\u002F* 禁止 *\u002F\n",[278,137826,137827,137835],{},[281,137828,137829],{},[284,137830,137831,137833],{},[287,137832,129560],{"align":26320},[287,137834,30071],{"align":26320},[294,137836,137837,137844,137851,137858,137865],{},[284,137838,137839,137841],{},[299,137840,137764],{"align":26320},[299,137842,137843],{"align":26320},"小白 默认",[284,137845,137846,137848],{},[299,137847,64588],{"align":26320},[299,137849,137850],{"align":26320},"小手",[284,137852,137853,137855],{},[299,137854,137782],{"align":26320},[299,137856,137857],{"align":26320},"移动",[284,137859,137860,137862],{},[299,137861,7780],{"align":26320},[299,137863,137864],{"align":26320},"文本",[284,137866,137867,137869],{},[299,137868,137818],{"align":26320},[299,137870,137871],{"align":26320},"禁止",[65,137873,137875],{"id":137874},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137877,137878],{},"去除表单轮廓线",[19,137880,137881],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[73,137883,137884],{"className":129096,"code":132460,"language":129098,"meta":78,"style":78},[32,137885,137886,137890,137896,137912],{"__ignoreMap":78},[82,137887,137888],{"class":84,"line":85},[82,137889,132467],{"class":2828},[82,137891,137892,137894],{"class":84,"line":157},[82,137893,54173],{"class":53863},[82,137895,1349],{"class":92},[82,137897,137898,137900,137902,137904,137906,137908,137910],{"class":84,"line":404},[82,137899,73452],{"class":88},[82,137901,1357],{"class":92},[82,137903,2283],{"class":88},[82,137905,54054],{"class":112},[82,137907,54083],{"class":88},[82,137909,132488],{"class":88},[82,137911,3909],{"class":92},[82,137913,137914],{"class":84,"line":413},[82,137915,1391],{"class":92},[19,137917,137918],{},"文本域：",[4078,137920],{"style":128952,"src":137921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137923,137924],{},"此时会有一个空白区域",[4078,137926],{"style":128952,"src":137927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137929,137930],{},"写在同一行就不会出现这个问题",[4078,137932],{"style":128952,"src":137933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137935,137936],{},"文本域是行内块元素，一定记住！！！",[19,137938,100784],{},[4078,137940],{"style":128952,"src":137941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137943,137944],{},"文本域尽量放在一行",[19,137946,137947],{},"知识回顾：cols是列，rols是行",[4078,137949],{"style":128952,"src":137950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137952,137953],{},"它可以进行拖动，显然这是我们不愿意看到的",[4078,137955],{"style":128952,"src":137956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137958,137959],{},"使用resize进行解决",[73,137961,137963],{"className":129096,"code":137962,"language":129098,"meta":78,"style":78},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[32,137964,137965,137971,137984],{"__ignoreMap":78},[82,137966,137967,137969],{"class":84,"line":85},[82,137968,56381],{"class":53863},[82,137970,1349],{"class":92},[82,137972,137973,137975,137977,137979,137981],{"class":84,"line":157},[82,137974,73354],{"class":88},[82,137976,1357],{"class":92},[82,137978,57297],{"class":88},[82,137980,132959],{"class":92},[82,137982,137983],{"class":2828},"\u002F* 取消表单轮廓线 *\u002F\n",[82,137985,137986],{"class":84,"line":404},[82,137987,1391],{"class":92},[19,137989,137990],{},"此时就无法通过右下方实现拖动了",[65,137992,137994],{"id":137993},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137996,137997],{},"实现一个盒子中的文字和图片对齐",[19,137999,138000,138001,138004],{},"用于设置一个元素的 ",[2913,138002,138003],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,138006,138007],{},"图片和文字默认是基线对齐",[4078,138009],{"style":128952,"src":138010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[73,138012,138013],{"className":129096,"code":137962,"language":129098,"meta":78,"style":78},[32,138014,138015,138021,138033],{"__ignoreMap":78},[82,138016,138017,138019],{"class":84,"line":85},[82,138018,56381],{"class":53863},[82,138020,1349],{"class":92},[82,138022,138023,138025,138027,138029,138031],{"class":84,"line":157},[82,138024,73354],{"class":88},[82,138026,1357],{"class":92},[82,138028,57297],{"class":88},[82,138030,132959],{"class":92},[82,138032,137983],{"class":2828},[82,138034,138035],{"class":84,"line":404},[82,138036,1391],{"class":92},[4078,138038],{"style":128952,"src":138039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24582,138041,138043],{"id":138042},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,138045,138046],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[4078,138048],{"style":128952,"src":138049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,138051,138052,138053,138056],{},"此时可以给图片、表单这些行内块元素的 ",[2913,138054,138055],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24582,138058,138060],{"id":138059},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,138062,138063],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,138065,17220],{},[73,138067,138069],{"className":129096,"code":138068,"language":129098,"meta":78,"style":78},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[32,138070,138071,138076,138082,138094],{"__ignoreMap":78},[82,138072,138073],{"class":84,"line":85},[82,138074,138075],{"class":2828},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[82,138077,138078,138080],{"class":84,"line":157},[82,138079,4078],{"class":53863},[82,138081,1349],{"class":92},[82,138083,138084,138087,138089,138092],{"class":84,"line":404},[82,138085,138086],{"class":88},"  vertical-align",[82,138088,1357],{"class":92},[82,138090,138091],{"class":88},"middle",[82,138093,3909],{"class":92},[82,138095,138096],{"class":84,"line":413},[82,138097,1391],{"class":92},[4078,138099],{"style":128952,"src":138100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138102,138103],{},"主要解决方法有两种：",[26,138105,138106],{},[29,138107,138108,138111,138112,138115],{},[2913,138109,138110],{},"给图片"," 添加 ",[2913,138113,138114],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138117,138118,138119],{},"2.把图片转换为块级元素 ",[2913,138120,138121],{},"display: block",[19,138123,138124],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138126,138127],{},"img {",[19,138129,138130],{},"vertical-align:middle;",[19,138132,3695],{},[65,138134,138136],{"id":138135},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138138,138139],{},"效果：",[4078,138141],{"style":128952,"src":138142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138144,138145],{},"单行文本溢出显示省略号--必须满足三个条件：",[73,138147,138149],{"className":129096,"code":138148,"language":129098,"meta":78,"style":78},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[32,138150,138151,138156,138162,138172,138177,138187],{"__ignoreMap":78},[82,138152,138153],{"class":84,"line":85},[82,138154,138155],{"class":2828},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[82,138157,138158,138160],{"class":84,"line":157},[82,138159,4078],{"class":53863},[82,138161,1349],{"class":92},[82,138163,138164,138166,138168,138170],{"class":84,"line":404},[82,138165,138086],{"class":88},[82,138167,1357],{"class":92},[82,138169,138091],{"class":88},[82,138171,3909],{"class":92},[82,138173,138174],{"class":84,"line":413},[82,138175,138176],{"class":2828},"  \u002F* 或 *\u002F\n",[82,138178,138179,138181,138183,138185],{"class":84,"line":508},[82,138180,130712],{"class":88},[82,138182,1357],{"class":92},[82,138184,63427],{"class":88},[82,138186,3909],{"class":92},[82,138188,138189],{"class":84,"line":513},[82,138190,1391],{"class":92},[65,138192,138194],{"id":138193},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138196,138139],{},[4078,138198],{"style":128952,"src":138199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138201,138202,138203,138206],{},"多行文本溢出显示省略号， ",[2913,138204,138205],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[73,138208,138209],{"className":129096,"code":138148,"language":129098,"meta":78,"style":78},[32,138210,138211,138215,138221,138231,138235,138245],{"__ignoreMap":78},[82,138212,138213],{"class":84,"line":85},[82,138214,138155],{"class":2828},[82,138216,138217,138219],{"class":84,"line":157},[82,138218,4078],{"class":53863},[82,138220,1349],{"class":92},[82,138222,138223,138225,138227,138229],{"class":84,"line":404},[82,138224,138086],{"class":88},[82,138226,1357],{"class":92},[82,138228,138091],{"class":88},[82,138230,3909],{"class":92},[82,138232,138233],{"class":84,"line":413},[82,138234,138176],{"class":2828},[82,138236,138237,138239,138241,138243],{"class":84,"line":508},[82,138238,130712],{"class":88},[82,138240,1357],{"class":92},[82,138242,63427],{"class":88},[82,138244,3909],{"class":92},[82,138246,138247],{"class":84,"line":513},[82,138248,1391],{"class":92},[19,138250,138251],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138253,138255],{"id":138254},"_133-常见布局技巧","13.3 常见布局技巧",[19,138257,138258],{},[2913,138259,138260],{},"巧妙利用一个技术更快更好的布局：",[26,138262,138263,138266,138269,138272],{},[29,138264,138265],{},"margin负值的运用",[29,138267,138268],{},"文字围绕浮动元素",[29,138270,138271],{},"行内块的巧妙运用",[29,138273,138274],{},"CSS三角强化",[65,138276,138278],{"id":138277},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138280,138281],{},"应用场景：",[4078,138283],{"style":128952,"src":138284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[4078,138286],{"style":128952,"src":138287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138289,138290],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138292,138293],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[73,138295,138296],{"className":129096,"code":132460,"language":129098,"meta":78,"style":78},[32,138297,138298,138302,138308,138324],{"__ignoreMap":78},[82,138299,138300],{"class":84,"line":85},[82,138301,132467],{"class":2828},[82,138303,138304,138306],{"class":84,"line":157},[82,138305,54173],{"class":53863},[82,138307,1349],{"class":92},[82,138309,138310,138312,138314,138316,138318,138320,138322],{"class":84,"line":404},[82,138311,73452],{"class":88},[82,138313,1357],{"class":92},[82,138315,2283],{"class":88},[82,138317,54054],{"class":112},[82,138319,54083],{"class":88},[82,138321,132488],{"class":88},[82,138323,3909],{"class":92},[82,138325,138326],{"class":84,"line":413},[82,138327,1391],{"class":92},[4078,138329],{"style":128952,"src":138330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138332,138333],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[73,138335,138337],{"className":129096,"code":138336,"language":129098,"meta":78,"style":78},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,138338,138339,138344,138350,138360,138372,138384],{"__ignoreMap":78},[82,138340,138341],{"class":84,"line":85},[82,138342,138343],{"class":2828},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[82,138345,138346,138348],{"class":84,"line":157},[82,138347,132944],{"class":2384},[82,138349,1349],{"class":92},[82,138351,138352,138354,138356,138358],{"class":84,"line":404},[82,138353,134902],{"class":88},[82,138355,1357],{"class":92},[82,138357,57324],{"class":88},[82,138359,3909],{"class":92},[82,138361,138362,138364,138366,138368,138370],{"class":84,"line":413},[82,138363,134916],{"class":88},[82,138365,1357],{"class":92},[82,138367,440],{"class":88},[82,138369,54054],{"class":112},[82,138371,3909],{"class":92},[82,138373,138374,138376,138378,138380,138382],{"class":84,"line":508},[82,138375,134933],{"class":88},[82,138377,1357],{"class":92},[82,138379,3451],{"class":88},[82,138381,54054],{"class":112},[82,138383,3909],{"class":92},[82,138385,138386],{"class":84,"line":513},[82,138387,1391],{"class":92},[19,138389,138390],{},"加上上述代码会发现：",[4078,138392],{"style":128952,"src":138393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138395,138396],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138398,138399],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[73,138401,138402],{"className":129096,"code":138336,"language":129098,"meta":78,"style":78},[32,138403,138404,138408,138414,138424,138436,138448],{"__ignoreMap":78},[82,138405,138406],{"class":84,"line":85},[82,138407,138343],{"class":2828},[82,138409,138410,138412],{"class":84,"line":157},[82,138411,132944],{"class":2384},[82,138413,1349],{"class":92},[82,138415,138416,138418,138420,138422],{"class":84,"line":404},[82,138417,134902],{"class":88},[82,138419,1357],{"class":92},[82,138421,57324],{"class":88},[82,138423,3909],{"class":92},[82,138425,138426,138428,138430,138432,138434],{"class":84,"line":413},[82,138427,134916],{"class":88},[82,138429,1357],{"class":92},[82,138431,440],{"class":88},[82,138433,54054],{"class":112},[82,138435,3909],{"class":92},[82,138437,138438,138440,138442,138444,138446],{"class":84,"line":508},[82,138439,134933],{"class":88},[82,138441,1357],{"class":92},[82,138443,3451],{"class":88},[82,138445,54054],{"class":112},[82,138447,3909],{"class":92},[82,138449,138450],{"class":84,"line":513},[82,138451,1391],{"class":92},[19,138453,138454],{},"解决方式2：",[19,138456,138457],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[73,138459,138461],{"className":129096,"code":138460,"language":129098,"meta":78,"style":78},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,138462,138463,138469,138479,138491,138503],{"__ignoreMap":78},[82,138464,138465,138467],{"class":84,"line":85},[82,138466,54173],{"class":53863},[82,138468,1349],{"class":92},[82,138470,138471,138473,138475,138477],{"class":84,"line":157},[82,138472,134902],{"class":88},[82,138474,1357],{"class":92},[82,138476,57324],{"class":88},[82,138478,3909],{"class":92},[82,138480,138481,138483,138485,138487,138489],{"class":84,"line":404},[82,138482,134916],{"class":88},[82,138484,1357],{"class":92},[82,138486,440],{"class":88},[82,138488,54054],{"class":112},[82,138490,3909],{"class":92},[82,138492,138493,138495,138497,138499,138501],{"class":84,"line":413},[82,138494,134933],{"class":88},[82,138496,1357],{"class":92},[82,138498,3451],{"class":88},[82,138500,54054],{"class":112},[82,138502,3909],{"class":92},[82,138504,138505],{"class":84,"line":508},[82,138506,1391],{"class":92},[65,138508,138510],{"id":138509},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138512,138281],{},[4078,138514],{"style":128952,"src":138515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138517,138518],{},"实现结构图：",[4078,138520],{"style":128952,"src":138521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138523,138524],{},"巧妙运用浮动元素不会压住文字的特性",[19,138526,138527],{},"代码显示：",[73,138529,138531],{"className":129096,"code":138530,"language":129098,"meta":78,"style":78},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,138532,138533,138539,138549,138553,138558,138562,138568,138582],{"__ignoreMap":78},[82,138534,138535,138537],{"class":84,"line":85},[82,138536,132944],{"class":2384},[82,138538,1349],{"class":92},[82,138540,138541,138543,138545,138547],{"class":84,"line":157},[82,138542,133576],{"class":88},[82,138544,1357],{"class":92},[82,138546,26320],{"class":88},[82,138548,3909],{"class":92},[82,138550,138551],{"class":84,"line":404},[82,138552,1391],{"class":92},[82,138554,138555],{"class":84,"line":413},[82,138556,138557],{"class":92},"```Css\n",[82,138559,138560],{"class":84,"line":508},[82,138561,132939],{"class":2828},[82,138563,138564,138566],{"class":84,"line":513},[82,138565,132944],{"class":2384},[82,138567,1349],{"class":92},[82,138569,138570,138572,138574,138576,138578,138580],{"class":84,"line":1388},[82,138571,73026],{"class":88},[82,138573,1357],{"class":92},[82,138575,2244],{"class":88},[82,138577,54118],{"class":88},[82,138579,132959],{"class":92},[82,138581,132962],{"class":2828},[82,138583,138584],{"class":84,"line":1394},[82,138585,1391],{"class":92},[19,138587,138588],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[73,138590,138593],{"className":138591,"code":138592,"language":7780},[7778],"\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",[32,138594,138592],{"__ignoreMap":78},[4078,138596],{"style":128952,"src":138597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138599,138600],{},"最终展示结果：",[73,138602,138603],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,138604,138605,138609,138615,138629],{"__ignoreMap":78},[82,138606,138607],{"class":84,"line":85},[82,138608,132939],{"class":2828},[82,138610,138611,138613],{"class":84,"line":157},[82,138612,132944],{"class":2384},[82,138614,1349],{"class":92},[82,138616,138617,138619,138621,138623,138625,138627],{"class":84,"line":404},[82,138618,73026],{"class":88},[82,138620,1357],{"class":92},[82,138622,2244],{"class":88},[82,138624,54118],{"class":88},[82,138626,132959],{"class":92},[82,138628,132962],{"class":2828},[82,138630,138631],{"class":84,"line":413},[82,138632,1391],{"class":92},[4078,138634],{"style":128952,"src":138635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138637,138639],{"id":138638},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[65,138641,138643],{"id":138642},"_1341-原理","13.4.1 原理",[4078,138645],{"style":128952,"src":138646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[73,138648,138649],{"className":129096,"code":132932,"language":129098,"meta":78,"style":78},[32,138650,138651,138655,138661,138675],{"__ignoreMap":78},[82,138652,138653],{"class":84,"line":85},[82,138654,132939],{"class":2828},[82,138656,138657,138659],{"class":84,"line":157},[82,138658,132944],{"class":2384},[82,138660,1349],{"class":92},[82,138662,138663,138665,138667,138669,138671,138673],{"class":84,"line":404},[82,138664,73026],{"class":88},[82,138666,1357],{"class":92},[82,138668,2244],{"class":88},[82,138670,54118],{"class":88},[82,138672,132959],{"class":92},[82,138674,132962],{"class":2828},[82,138676,138677],{"class":84,"line":413},[82,138678,1391],{"class":92},[65,138680,138682],{"id":138681},"_1342-实例","13.4.2 实例",[4078,138684],{"style":128952,"src":138685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[73,138687,138688],{"className":129096,"code":133562,"language":129098,"meta":78,"style":78},[32,138689,138690,138696,138706,138710,138716,138726],{"__ignoreMap":78},[82,138691,138692,138694],{"class":84,"line":85},[82,138693,133569],{"class":2384},[82,138695,1349],{"class":92},[82,138697,138698,138700,138702,138704],{"class":84,"line":157},[82,138699,133576],{"class":88},[82,138701,1357],{"class":92},[82,138703,26320],{"class":88},[82,138705,3909],{"class":92},[82,138707,138708],{"class":84,"line":404},[82,138709,1391],{"class":92},[82,138711,138712,138714],{"class":84,"line":413},[82,138713,133591],{"class":2384},[82,138715,1349],{"class":92},[82,138717,138718,138720,138722,138724],{"class":84,"line":508},[82,138719,133576],{"class":88},[82,138721,1357],{"class":92},[82,138723,75078],{"class":88},[82,138725,3909],{"class":92},[82,138727,138728],{"class":84,"line":513},[82,138729,1391],{"class":92},[14,138731,138733],{"id":138732},"_135-css的初始化","13.5 css的初始化",[19,138735,138736],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138738,138739],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138741,138742],{},"每个网页都必须首先进行 CSS初始化。",[19,138744,138745],{},"这里我们以 京东CSS初始化代码为例。",[19,138747,138748],{},"在网页右键查看网页源代码",[19,138750,138751],{},"找到css的link引入语句",[19,138753,138754],{},"然后ctrl+f 输入body",[19,138756,79780],{},[4078,138758],{"style":128952,"src":138759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138761,79803],{},[4078,138763],{"style":128952,"src":138764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138766,138767],{},"③打开了网页上传压缩的代码",[4078,138769],{"style":128952,"src":138770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138772,138773],{},"④从body前可以查看这个网页的初始化代码",[19,138775,138776],{},[2913,138777,138778],{},"Unicode编码字体：",[19,138780,138781],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138783,85761],{},[19,138785,138786],{},"黑体 \\9ED1\\4F53",[19,138788,138789],{},"宋体 \\5B8B\\4F53",[19,138791,138792],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2671,138794,138795],{},"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":78,"searchDepth":157,"depth":157,"links":138797},[138798,138799,138806,138810,138814],{"id":137595,"depth":157,"text":137596},{"id":137717,"depth":157,"text":137718,"children":138800},[138801,138802,138803,138804,138805],{"id":137721,"depth":404,"text":137722},{"id":137874,"depth":404,"text":137875},{"id":137993,"depth":404,"text":137994},{"id":138135,"depth":404,"text":138136},{"id":138193,"depth":404,"text":138194},{"id":138254,"depth":157,"text":138255,"children":138807},[138808,138809],{"id":138277,"depth":404,"text":138278},{"id":138509,"depth":404,"text":138510},{"id":138638,"depth":157,"text":138639,"children":138811},[138812,138813],{"id":138642,"depth":404,"text":138643},{"id":138681,"depth":404,"text":138682},{"id":138732,"depth":157,"text":138733},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137587,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138821,"title":138822,"body":138823,"description":2699,"extension":2700,"meta":140509,"navigation":485,"path":140510,"seo":140511,"stem":140512,"__hash__":140513},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138824,"toc":140498},[138825,138828,138832,138836,138839,138846,138849,138852,138890,138893,138895,138909,138913,138922,138926,138931,138934,138937,138940,138975,138980,138983,139013,139016,139021,139024,139027,139057,139060,139114,139117,139121,139126,139138,139141,139145,139175,139178,139183,139186,139216,139219,139223,139240,139244,139248,139251,139284,139287,139291,139294,139297,139300,139303,139306,139417,139420,139423,139426,139528,139531,139535,139539,139543,139546,139586,139589,139591,139607,139611,139614,139619,139700,139703,139706,139832,139837,139840,139848,139851,139856,139941,139944,139948,139951,139954,139958,139978,139983,140067,140070,140075,140078,140081,140159,140162,140165,140168,140171,140174,140179,140182,140185,140257,140260,140265,140268,140365,140368,140374,140377,140380,140383,140386,140389,140392,140395,140398,140402,140407,140410,140443,140448,140451,140492,140495],[10,138826,138822],{"id":138827},"_14-html5与css3新特性",[14,138829,138831],{"id":138830},"_141-html5的新特性","14.1 HTML5的新特性",[65,138833,138835],{"id":138834},"_1411-基本标签","14.1.1 基本标签",[19,138837,138838],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138840,138841,138842,138845],{},"这些新特性都有兼容性问题，基本是 ",[2913,138843,138844],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138847,138848],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138850,138851],{},"现在使用的是新特性：",[3755,138853,138854,138860,138866,138872,138878,138884],{},[29,138855,138856,138859],{},[32,138857,138858],{},"\u003Cheader>"," 头部标签",[29,138861,138862,138865],{},[32,138863,138864],{},"\u003Cnav>"," 导航标签",[29,138867,138868,138871],{},[32,138869,138870],{},"\u003Carticle>"," 内容标签",[29,138873,138874,138877],{},[32,138875,138876],{},"\u003Csection>"," 定义文档某个区域",[29,138879,138880,138883],{},[32,138881,138882],{},"\u003Caside>"," 侧边栏标签",[29,138885,138886,138889],{},[32,138887,138888],{},"\u003Cfooter>"," 尾部标签",[4078,138891],{"style":128952,"src":138892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138894,2801],{},[3755,138896,138897,138900,138903,138906],{},[29,138898,138899],{},"这种语义化标准主要是针对搜索引擎的",[29,138901,138902],{},"这些标签页面中可以经常使用",[29,138904,138905],{},"在IE9中，需要把这些元素转换为块级元素",[29,138907,138908],{},"移动端更喜欢使用这些标签",[65,138910,138912],{"id":138911},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138914,138915,138916,138918,138919,138921],{},"音频 ",[2913,138917,30756],{}," 和视频 ",[2913,138920,30765],{}," 两个标签",[24582,138923,138925],{"id":138924},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,138927,138928],{},[29,138929,138930],{},"支持格式：",[4078,138932],{"style":128952,"src":138933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138935,138936],{},"尽量使用MP4，兼容性好",[19,138938,138939],{},"用MP4就可以",[73,138941,138943],{"className":129843,"code":138942,"language":129845,"meta":78,"style":78},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[32,138944,138945],{"__ignoreMap":78},[82,138946,138947,138949,138951,138953,138955,138958,138960,138963,138966,138969,138971,138973],{"class":84,"line":85},[82,138948,3659],{"class":92},[82,138950,30765],{"class":53863},[82,138952,57799],{"class":2384},[82,138954,113],{"class":92},[82,138956,138957],{"class":96},"\"movie.mp4\"",[82,138959,94974],{"class":2384},[82,138961,138962],{"class":2384}," autoplay",[82,138964,138965],{"class":2384}," muted",[82,138967,138968],{"class":2384}," loop",[82,138970,57874],{"class":92},[82,138972,30765],{"class":53863},[82,138974,53870],{"class":92},[26,138976,138977],{"start":157},[29,138978,138979],{},"兼容写法",[19,138981,138982],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[73,138984,138985],{"className":129843,"code":138942,"language":129845,"meta":78,"style":78},[32,138986,138987],{"__ignoreMap":78},[82,138988,138989,138991,138993,138995,138997,138999,139001,139003,139005,139007,139009,139011],{"class":84,"line":85},[82,138990,3659],{"class":92},[82,138992,30765],{"class":53863},[82,138994,57799],{"class":2384},[82,138996,113],{"class":92},[82,138998,138957],{"class":96},[82,139000,94974],{"class":2384},[82,139002,138962],{"class":2384},[82,139004,138965],{"class":2384},[82,139006,138968],{"class":2384},[82,139008,57874],{"class":92},[82,139010,30765],{"class":53863},[82,139012,53870],{"class":92},[19,139014,139015],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,139017,139018],{"start":404},[29,139019,139020],{},"video常用属性",[4078,139022],{"style":128952,"src":139023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,139025,139026],{},"poster属性后面是跟的等待加载图片的地址",[73,139028,139029],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,139030,139031],{"__ignoreMap":78},[82,139032,139033,139035,139037,139039,139041,139043,139045,139047,139049,139051,139053,139055],{"class":84,"line":85},[82,139034,3659],{"class":92},[82,139036,4078],{"class":53863},[82,139038,57799],{"class":2384},[82,139040,113],{"class":92},[82,139042,136613],{"class":96},[82,139044,57807],{"class":2384},[82,139046,113],{"class":92},[82,139048,136620],{"class":96},[82,139050,136623],{"class":2384},[82,139052,113],{"class":92},[82,139054,136628],{"class":96},[82,139056,53870],{"class":92},[19,139058,139059],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[73,139061,139063],{"className":129096,"code":139062,"language":129098,"meta":78,"style":78},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[32,139064,139065,139070,139076,139100,139105,139110],{"__ignoreMap":78},[82,139066,139067],{"class":84,"line":85},[82,139068,139069],{"class":2828},"\u002F* 2D 位移 *\u002F\n",[82,139071,139072,139074],{"class":84,"line":157},[82,139073,54173],{"class":53863},[82,139075,1349],{"class":92},[82,139077,139078,139081,139083,139086,139088,139090,139092,139094,139096,139098],{"class":84,"line":404},[82,139079,139080],{"class":88},"  transform",[82,139082,1357],{"class":92},[82,139084,139085],{"class":88},"translate",[82,139087,93],{"class":92},[82,139089,3069],{"class":88},[82,139091,54054],{"class":112},[82,139093,100],{"class":92},[82,139095,3408],{"class":88},[82,139097,54054],{"class":112},[82,139099,5318],{"class":92},[82,139101,139102],{"class":84,"line":413},[82,139103,139104],{"class":2828},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[82,139106,139107],{"class":84,"line":508},[82,139108,139109],{"class":2828},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[82,139111,139112],{"class":84,"line":513},[82,139113,1391],{"class":92},[19,139115,139116],{},"muted:自动静音属性",[24582,139118,139120],{"id":139119},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,139122,139123],{},[29,139124,139125],{},"基本使用",[19,139127,139128,139129,139134,139135],{},"当前 ",[2913,139130,139131],{},[32,139132,139133],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2913,139136,139137],{},"mp3格式",[4078,139139],{"style":128952,"src":139140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,139142,139143],{"start":157},[29,139144,138979],{},[73,139146,139147],{"className":129843,"code":138942,"language":129845,"meta":78,"style":78},[32,139148,139149],{"__ignoreMap":78},[82,139150,139151,139153,139155,139157,139159,139161,139163,139165,139167,139169,139171,139173],{"class":84,"line":85},[82,139152,3659],{"class":92},[82,139154,30765],{"class":53863},[82,139156,57799],{"class":2384},[82,139158,113],{"class":92},[82,139160,138957],{"class":96},[82,139162,94974],{"class":2384},[82,139164,138962],{"class":2384},[82,139166,138965],{"class":2384},[82,139168,138968],{"class":2384},[82,139170,57874],{"class":92},[82,139172,30765],{"class":53863},[82,139174,53870],{"class":92},[19,139176,139177],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,139179,139180],{"start":404},[29,139181,139182],{},"常用属性",[4078,139184],{"style":128952,"src":139185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[73,139187,139188],{"className":129843,"code":138942,"language":129845,"meta":78,"style":78},[32,139189,139190],{"__ignoreMap":78},[82,139191,139192,139194,139196,139198,139200,139202,139204,139206,139208,139210,139212,139214],{"class":84,"line":85},[82,139193,3659],{"class":92},[82,139195,30765],{"class":53863},[82,139197,57799],{"class":2384},[82,139199,113],{"class":92},[82,139201,138957],{"class":96},[82,139203,94974],{"class":2384},[82,139205,138962],{"class":2384},[82,139207,138965],{"class":2384},[82,139209,138968],{"class":2384},[82,139211,57874],{"class":92},[82,139213,30765],{"class":53863},[82,139215,53870],{"class":92},[19,139217,139218],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24582,139220,139222],{"id":139221},"_14123-总结","14.1.2.3 总结",[3755,139224,139225,139228,139231,139234,139237],{},[29,139226,139227],{},"音频标签和视频标签使用方式基本一致",[29,139229,139230],{},"浏览器支持情况不同",[29,139232,139233],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,139235,139236],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,139238,139239],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[65,139241,139243],{"id":139242},"_1413-表单元素","14.1.3 表单元素",[24582,139245,139247],{"id":139246},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[4078,139249],{"style":128952,"src":139250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[73,139252,139254],{"className":129843,"code":139253,"language":129845,"meta":78,"style":78},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[32,139255,139256],{"__ignoreMap":78},[82,139257,139258,139260,139262,139264,139266,139268,139270,139272,139275,139277,139279,139282],{"class":84,"line":85},[82,139259,3659],{"class":92},[82,139261,56381],{"class":53863},[82,139263,56384],{"class":2384},[82,139265,113],{"class":92},[82,139267,65256],{"class":96},[82,139269,17506],{"class":2384},[82,139271,113],{"class":92},[82,139273,139274],{"class":96},"\"username\"",[82,139276,63578],{"class":2384},[82,139278,113],{"class":92},[82,139280,139281],{"class":96},"\"请输入用户名\"",[82,139283,53870],{"class":92},[4078,139285],{"style":128952,"src":139286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24582,139288,139290],{"id":139289},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[4078,139292],{"style":128952,"src":139293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139295,139296],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139298,139299],{},"快捷操作：",[4078,139301],{"style":128952,"src":139302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139304,139305],{},"例子1：",[73,139307,139309],{"className":129843,"code":139308,"language":129845,"meta":78,"style":78},"\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",[32,139310,139311,139334,139361,139390,139409],{"__ignoreMap":78},[82,139312,139313,139315,139317,139319,139321,139324,139327,139329,139332],{"class":84,"line":85},[82,139314,3659],{"class":92},[82,139316,69182],{"class":53863},[82,139318,69185],{"class":2384},[82,139320,113],{"class":92},[82,139322,139323],{"class":96},"\"\u002Fsubmit\"",[82,139325,139326],{"class":2384}," method",[82,139328,113],{"class":92},[82,139330,139331],{"class":96},"\"post\"",[82,139333,53870],{"class":92},[82,139335,139336,139338,139340,139342,139344,139346,139348,139350,139352,139354,139356,139359],{"class":84,"line":157},[82,139337,54705],{"class":92},[82,139339,56381],{"class":53863},[82,139341,56384],{"class":2384},[82,139343,113],{"class":92},[82,139345,65256],{"class":96},[82,139347,17506],{"class":2384},[82,139349,113],{"class":92},[82,139351,139274],{"class":96},[82,139353,63578],{"class":2384},[82,139355,113],{"class":92},[82,139357,139358],{"class":96},"\"用户名\"",[82,139360,53870],{"class":92},[82,139362,139363,139365,139367,139369,139371,139374,139376,139378,139381,139383,139385,139388],{"class":84,"line":404},[82,139364,54705],{"class":92},[82,139366,56381],{"class":53863},[82,139368,56384],{"class":2384},[82,139370,113],{"class":92},[82,139372,139373],{"class":96},"\"password\"",[82,139375,17506],{"class":2384},[82,139377,113],{"class":92},[82,139379,139380],{"class":96},"\"pwd\"",[82,139382,63578],{"class":2384},[82,139384,113],{"class":92},[82,139386,139387],{"class":96},"\"密码\"",[82,139389,53870],{"class":92},[82,139391,139392,139394,139396,139398,139400,139402,139405,139407],{"class":84,"line":413},[82,139393,54705],{"class":92},[82,139395,56447],{"class":53863},[82,139397,56384],{"class":2384},[82,139399,113],{"class":92},[82,139401,69205],{"class":96},[82,139403,139404],{"class":92},">提交\u003C\u002F",[82,139406,56447],{"class":53863},[82,139408,53870],{"class":92},[82,139410,139411,139413,139415],{"class":84,"line":508},[82,139412,54347],{"class":92},[82,139414,69182],{"class":53863},[82,139416,53870],{"class":92},[4078,139418],{"style":128952,"src":139419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139421,139422],{},"value是表单域的内容",[19,139424,139425],{},"例子2：",[73,139427,139428],{"className":129843,"code":139308,"language":129845,"meta":78,"style":78},[32,139429,139430,139450,139476,139502,139520],{"__ignoreMap":78},[82,139431,139432,139434,139436,139438,139440,139442,139444,139446,139448],{"class":84,"line":85},[82,139433,3659],{"class":92},[82,139435,69182],{"class":53863},[82,139437,69185],{"class":2384},[82,139439,113],{"class":92},[82,139441,139323],{"class":96},[82,139443,139326],{"class":2384},[82,139445,113],{"class":92},[82,139447,139331],{"class":96},[82,139449,53870],{"class":92},[82,139451,139452,139454,139456,139458,139460,139462,139464,139466,139468,139470,139472,139474],{"class":84,"line":157},[82,139453,54705],{"class":92},[82,139455,56381],{"class":53863},[82,139457,56384],{"class":2384},[82,139459,113],{"class":92},[82,139461,65256],{"class":96},[82,139463,17506],{"class":2384},[82,139465,113],{"class":92},[82,139467,139274],{"class":96},[82,139469,63578],{"class":2384},[82,139471,113],{"class":92},[82,139473,139358],{"class":96},[82,139475,53870],{"class":92},[82,139477,139478,139480,139482,139484,139486,139488,139490,139492,139494,139496,139498,139500],{"class":84,"line":404},[82,139479,54705],{"class":92},[82,139481,56381],{"class":53863},[82,139483,56384],{"class":2384},[82,139485,113],{"class":92},[82,139487,139373],{"class":96},[82,139489,17506],{"class":2384},[82,139491,113],{"class":92},[82,139493,139380],{"class":96},[82,139495,63578],{"class":2384},[82,139497,113],{"class":92},[82,139499,139387],{"class":96},[82,139501,53870],{"class":92},[82,139503,139504,139506,139508,139510,139512,139514,139516,139518],{"class":84,"line":413},[82,139505,54705],{"class":92},[82,139507,56447],{"class":53863},[82,139509,56384],{"class":2384},[82,139511,113],{"class":92},[82,139513,69205],{"class":96},[82,139515,139404],{"class":92},[82,139517,56447],{"class":53863},[82,139519,53870],{"class":92},[82,139521,139522,139524,139526],{"class":84,"line":508},[82,139523,54347],{"class":92},[82,139525,69182],{"class":53863},[82,139527,53870],{"class":92},[4078,139529],{"style":128952,"src":139530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139532,139534],{"id":139533},"_142-css新特性","14.2 CSS新特性",[65,139536,139538],{"id":139537},"_1421-新增选择器","14.2.1 新增选择器",[24582,139540,139542],{"id":139541},"_14211-属性选择器","14.2.1.1 属性选择器",[4078,139544],{"style":128952,"src":139545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[73,139547,139549],{"className":129096,"code":139548,"language":129098,"meta":78,"style":78},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[32,139550,139551,139566,139582],{"__ignoreMap":78},[82,139552,139553,139555,139557,139559,139561,139563],{"class":84,"line":85},[82,139554,56381],{"class":53863},[82,139556,3639],{"class":92},[82,139558,105658],{"class":2384},[82,139560,113],{"class":112},[82,139562,65256],{"class":96},[82,139564,139565],{"class":92},"] {\n",[82,139567,139568,139570,139572,139574,139576,139578,139580],{"class":84,"line":157},[82,139569,73452],{"class":88},[82,139571,1357],{"class":92},[82,139573,2283],{"class":88},[82,139575,54054],{"class":112},[82,139577,54083],{"class":88},[82,139579,132676],{"class":88},[82,139581,3909],{"class":92},[82,139583,139584],{"class":84,"line":404},[82,139585,1391],{"class":92},[4078,139587],{"style":128952,"src":139588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139590,2801],{},[3755,139592,139593,139596,139599,139602],{},[29,139594,139595],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,139597,139598],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,139600,139601],{},"属性选择器也可以选择出来自定义的属性",[29,139603,139604,139606],{},[2913,139605,11616],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24582,139608,139610],{"id":139609},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[4078,139612],{"style":128952,"src":139613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,139615,139616],{},[29,139617,139618],{},"fist-child",[73,139620,139622],{"className":129096,"code":139621,"language":129098,"meta":78,"style":78},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[32,139623,139624,139629,139644,139664,139682],{"__ignoreMap":78},[82,139625,139626],{"class":84,"line":85},[82,139627,139628],{"class":2828},"\u002F* 属性选择器 *\u002F\n",[82,139630,139631,139633,139635,139637,139639,139641],{"class":84,"line":157},[82,139632,56381],{"class":53863},[82,139634,3639],{"class":92},[82,139636,105658],{"class":2384},[82,139638,113],{"class":112},[82,139640,65256],{"class":96},[82,139642,139643],{"class":92},"] { }\n",[82,139645,139646,139648,139650,139652,139655,139658,139661],{"class":84,"line":404},[82,139647,56381],{"class":53863},[82,139649,3639],{"class":92},[82,139651,17281],{"class":2384},[82,139653,139654],{"class":112},"^=",[82,139656,139657],{"class":96},"\"icon\"",[82,139659,139660],{"class":92},"] { }  ",[82,139662,139663],{"class":2828},"\u002F* 以 icon 开头 *\u002F\n",[82,139665,139666,139668,139670,139672,139675,139677,139679],{"class":84,"line":413},[82,139667,56381],{"class":53863},[82,139669,3639],{"class":92},[82,139671,17281],{"class":2384},[82,139673,139674],{"class":112},"$=",[82,139676,139657],{"class":96},[82,139678,139660],{"class":92},[82,139680,139681],{"class":2828},"\u002F* 以 icon 结尾 *\u002F\n",[82,139683,139684,139686,139688,139690,139693,139695,139697],{"class":84,"line":508},[82,139685,56381],{"class":53863},[82,139687,3639],{"class":92},[82,139689,17281],{"class":2384},[82,139691,139692],{"class":112},"*=",[82,139694,139657],{"class":96},[82,139696,139660],{"class":92},[82,139698,139699],{"class":2828},"\u002F* 包含 icon *\u002F\n",[19,139701,139702],{},"ul的第一个儿子文本为红色",[19,139704,139705],{},"一定要在冒号前加空格，不然就是选中所有的了",[73,139707,139709],{"className":129096,"code":139708,"language":129098,"meta":78,"style":78},".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",[32,139710,139711,139717,139727,139731,139735,139740,139753,139766,139782,139799,139816],{"__ignoreMap":78},[82,139712,139713,139715],{"class":84,"line":85},[82,139714,129387],{"class":2384},[82,139716,1349],{"class":92},[82,139718,139719,139721,139723,139725],{"class":84,"line":157},[82,139720,73461],{"class":88},[82,139722,1357],{"class":92},[82,139724,59979],{"class":88},[82,139726,3909],{"class":92},[82,139728,139729],{"class":84,"line":404},[82,139730,1391],{"class":92},[82,139732,139733],{"class":84,"line":413},[82,139734,138557],{"class":92},[82,139736,139737],{"class":84,"line":508},[82,139738,139739],{"class":2828},"\u002F* 结构伪类选择器 *\u002F\n",[82,139741,139742,139744,139747,139750],{"class":84,"line":513},[82,139743,29],{"class":53863},[82,139745,139746],{"class":2384},":first-child",[82,139748,139749],{"class":92}," { }           ",[82,139751,139752],{"class":2828},"\u002F* 第一个 *\u002F\n",[82,139754,139755,139757,139760,139763],{"class":84,"line":1388},[82,139756,29],{"class":53863},[82,139758,139759],{"class":2384},":last-child",[82,139761,139762],{"class":92}," { }            ",[82,139764,139765],{"class":2828},"\u002F* 最后一个 *\u002F\n",[82,139767,139768,139770,139772,139774,139776,139779],{"class":84,"line":1394},[82,139769,29],{"class":53863},[82,139771,132010],{"class":2384},[82,139773,93],{"class":92},[82,139775,1425],{"class":88},[82,139777,139778],{"class":92},") { }          ",[82,139780,139781],{"class":2828},"\u002F* 第2个 *\u002F\n",[82,139783,139784,139786,139788,139790,139793,139796],{"class":84,"line":1399},[82,139785,29],{"class":53863},[82,139787,132010],{"class":2384},[82,139789,93],{"class":92},[82,139791,139792],{"class":88},"2n",[82,139794,139795],{"class":92},") { }         ",[82,139797,139798],{"class":2828},"\u002F* 偶数 *\u002F\n",[82,139800,139801,139803,139805,139807,139810,139813],{"class":84,"line":1430},[82,139802,29],{"class":53863},[82,139804,132010],{"class":2384},[82,139806,93],{"class":92},[82,139808,139809],{"class":88},"2n+1",[82,139811,139812],{"class":92},") { }       ",[82,139814,139815],{"class":2828},"\u002F* 奇数 *\u002F\n",[82,139817,139818,139820,139822,139824,139827,139829],{"class":84,"line":1818},[82,139819,29],{"class":53863},[82,139821,132010],{"class":2384},[82,139823,93],{"class":92},[82,139825,139826],{"class":88},"-n+3",[82,139828,139812],{"class":92},[82,139830,139831],{"class":2828},"\u002F* 前3个 *\u002F\n",[54173,139833,139836],{"className":139834},[139835],"example","\n  示例内容\n",[19,139838,139839],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3755,139841,139842],{},[29,139843,139844,139847],{},[32,139845,139846],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139849,139850],{},"也就是说它选择的是熊大",[26,139852,139853],{"start":513},[29,139854,139855],{},"权重",[73,139857,139859],{"className":129096,"code":139858,"language":129098,"meta":78,"style":78},"\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",[32,139860,139861,139865,139875,139885,139899,139913,139927],{"__ignoreMap":78},[82,139862,139863],{"class":84,"line":85},[82,139864,139739],{"class":2828},[82,139866,139867,139869,139871,139873],{"class":84,"line":157},[82,139868,29],{"class":53863},[82,139870,139746],{"class":2384},[82,139872,139749],{"class":92},[82,139874,139752],{"class":2828},[82,139876,139877,139879,139881,139883],{"class":84,"line":404},[82,139878,29],{"class":53863},[82,139880,139759],{"class":2384},[82,139882,139762],{"class":92},[82,139884,139765],{"class":2828},[82,139886,139887,139889,139891,139893,139895,139897],{"class":84,"line":413},[82,139888,29],{"class":53863},[82,139890,132010],{"class":2384},[82,139892,93],{"class":92},[82,139894,1425],{"class":88},[82,139896,139778],{"class":92},[82,139898,139781],{"class":2828},[82,139900,139901,139903,139905,139907,139909,139911],{"class":84,"line":508},[82,139902,29],{"class":53863},[82,139904,132010],{"class":2384},[82,139906,93],{"class":92},[82,139908,139792],{"class":88},[82,139910,139795],{"class":92},[82,139912,139798],{"class":2828},[82,139914,139915,139917,139919,139921,139923,139925],{"class":84,"line":513},[82,139916,29],{"class":53863},[82,139918,132010],{"class":2384},[82,139920,93],{"class":92},[82,139922,139809],{"class":88},[82,139924,139812],{"class":92},[82,139926,139815],{"class":2828},[82,139928,139929,139931,139933,139935,139937,139939],{"class":84,"line":1388},[82,139930,29],{"class":53863},[82,139932,132010],{"class":2384},[82,139934,93],{"class":92},[82,139936,139826],{"class":88},[82,139938,139812],{"class":92},[82,139940,139831],{"class":2828},[19,139942,139943],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24582,139945,139947],{"id":139946},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139949,139950],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[4078,139952],{"style":128952,"src":139953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,139955,139956],{},[29,139957,2801],{},[3755,139959,139960,139963,139966,139969,139972,139975],{},[29,139961,139962],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,139964,139965],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,139967,139968],{},"语法： element::before {}",[29,139970,139971],{},"before 和 after 必须有 content 属性",[29,139973,139974],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,139976,139977],{},"伪元素选择器和标签选择器一样，权重为 1",[26,139979,139980],{"start":157},[29,139981,139982],{},"实例",[73,139984,139985],{"className":129096,"code":139858,"language":129098,"meta":78,"style":78},[32,139986,139987,139991,140001,140011,140025,140039,140053],{"__ignoreMap":78},[82,139988,139989],{"class":84,"line":85},[82,139990,139739],{"class":2828},[82,139992,139993,139995,139997,139999],{"class":84,"line":157},[82,139994,29],{"class":53863},[82,139996,139746],{"class":2384},[82,139998,139749],{"class":92},[82,140000,139752],{"class":2828},[82,140002,140003,140005,140007,140009],{"class":84,"line":404},[82,140004,29],{"class":53863},[82,140006,139759],{"class":2384},[82,140008,139762],{"class":92},[82,140010,139765],{"class":2828},[82,140012,140013,140015,140017,140019,140021,140023],{"class":84,"line":413},[82,140014,29],{"class":53863},[82,140016,132010],{"class":2384},[82,140018,93],{"class":92},[82,140020,1425],{"class":88},[82,140022,139778],{"class":92},[82,140024,139781],{"class":2828},[82,140026,140027,140029,140031,140033,140035,140037],{"class":84,"line":508},[82,140028,29],{"class":53863},[82,140030,132010],{"class":2384},[82,140032,93],{"class":92},[82,140034,139792],{"class":88},[82,140036,139795],{"class":92},[82,140038,139798],{"class":2828},[82,140040,140041,140043,140045,140047,140049,140051],{"class":84,"line":513},[82,140042,29],{"class":53863},[82,140044,132010],{"class":2384},[82,140046,93],{"class":92},[82,140048,139809],{"class":88},[82,140050,139812],{"class":92},[82,140052,139815],{"class":2828},[82,140054,140055,140057,140059,140061,140063,140065],{"class":84,"line":1388},[82,140056,29],{"class":53863},[82,140058,132010],{"class":2384},[82,140060,93],{"class":92},[82,140062,139826],{"class":88},[82,140064,139812],{"class":92},[82,140066,139831],{"class":2828},[4078,140068],{"style":128952,"src":140069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,140071,140072],{"start":404},[29,140073,140074],{},"使用场景1",[4078,140076],{"style":128952,"src":140077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,140079,140080],{},"不需要再加盒子来整红色那部分了",[73,140082,140084],{"className":129096,"code":140083,"language":129098,"meta":78,"style":78},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[32,140085,140086,140091,140100,140111,140121,140125,140134,140145,140155],{"__ignoreMap":78},[82,140087,140088],{"class":84,"line":85},[82,140089,140090],{"class":2828},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[82,140092,140093,140095,140098],{"class":84,"line":157},[82,140094,54173],{"class":53863},[82,140096,140097],{"class":2384},"::before",[82,140099,1349],{"class":92},[82,140101,140102,140105,140107,140109],{"class":84,"line":404},[82,140103,140104],{"class":88},"  content",[82,140106,1357],{"class":92},[82,140108,1793],{"class":96},[82,140110,3909],{"class":92},[82,140112,140113,140115,140117,140119],{"class":84,"line":413},[82,140114,130712],{"class":88},[82,140116,1357],{"class":92},[82,140118,63427],{"class":88},[82,140120,3909],{"class":92},[82,140122,140123],{"class":84,"line":508},[82,140124,1391],{"class":92},[82,140126,140127,140129,140132],{"class":84,"line":513},[82,140128,54173],{"class":53863},[82,140130,140131],{"class":2384},"::after",[82,140133,1349],{"class":92},[82,140135,140136,140138,140140,140143],{"class":84,"line":1388},[82,140137,140104],{"class":88},[82,140139,1357],{"class":92},[82,140141,140142],{"class":96},"\"→\"",[82,140144,3909],{"class":92},[82,140146,140147,140149,140151,140153],{"class":84,"line":1394},[82,140148,73461],{"class":88},[82,140150,1357],{"class":92},[82,140152,64628],{"class":88},[82,140154,3909],{"class":92},[82,140156,140157],{"class":84,"line":1399},[82,140158,1391],{"class":92},[4078,140160],{"style":128952,"src":140161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140163,140164],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[4078,140166],{"style":128952,"src":140167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140169,140170],{},"但是在引用时需要先转义一下",[19,140172,140173],{},"content='\\e930'",[26,140175,140176],{"start":413},[29,140177,140178],{},"使用场景2",[19,140180,140181],{},"仿土豆效果",[19,140183,140184],{},"通过使用伪元素选择器可以减少body中盒子的数量",[73,140186,140187],{"className":129096,"code":140083,"language":129098,"meta":78,"style":78},[32,140188,140189,140193,140201,140211,140221,140225,140233,140243,140253],{"__ignoreMap":78},[82,140190,140191],{"class":84,"line":85},[82,140192,140090],{"class":2828},[82,140194,140195,140197,140199],{"class":84,"line":157},[82,140196,54173],{"class":53863},[82,140198,140097],{"class":2384},[82,140200,1349],{"class":92},[82,140202,140203,140205,140207,140209],{"class":84,"line":404},[82,140204,140104],{"class":88},[82,140206,1357],{"class":92},[82,140208,1793],{"class":96},[82,140210,3909],{"class":92},[82,140212,140213,140215,140217,140219],{"class":84,"line":413},[82,140214,130712],{"class":88},[82,140216,1357],{"class":92},[82,140218,63427],{"class":88},[82,140220,3909],{"class":92},[82,140222,140223],{"class":84,"line":508},[82,140224,1391],{"class":92},[82,140226,140227,140229,140231],{"class":84,"line":513},[82,140228,54173],{"class":53863},[82,140230,140131],{"class":2384},[82,140232,1349],{"class":92},[82,140234,140235,140237,140239,140241],{"class":84,"line":1388},[82,140236,140104],{"class":88},[82,140238,1357],{"class":92},[82,140240,140142],{"class":96},[82,140242,3909],{"class":92},[82,140244,140245,140247,140249,140251],{"class":84,"line":1394},[82,140246,73461],{"class":88},[82,140248,1357],{"class":92},[82,140250,64628],{"class":88},[82,140252,3909],{"class":92},[82,140254,140255],{"class":84,"line":1399},[82,140256,1391],{"class":92},[4078,140258],{"style":128952,"src":140259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,140261,140262],{"start":508},[29,140263,140264],{},"使用场景3",[19,140266,140267],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[73,140269,140271],{"className":129096,"code":140270,"language":129098,"meta":78,"style":78},".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",[32,140272,140273,140279,140289,140293,140297,140301,140309,140319,140329,140333,140341,140351,140361],{"__ignoreMap":78},[82,140274,140275,140277],{"class":84,"line":85},[82,140276,132944],{"class":2384},[82,140278,1349],{"class":92},[82,140280,140281,140283,140285,140287],{"class":84,"line":157},[82,140282,133576],{"class":88},[82,140284,1357],{"class":92},[82,140286,26320],{"class":88},[82,140288,3909],{"class":92},[82,140290,140291],{"class":84,"line":404},[82,140292,1391],{"class":92},[82,140294,140295],{"class":84,"line":413},[82,140296,138557],{"class":92},[82,140298,140299],{"class":84,"line":508},[82,140300,140090],{"class":2828},[82,140302,140303,140305,140307],{"class":84,"line":513},[82,140304,54173],{"class":53863},[82,140306,140097],{"class":2384},[82,140308,1349],{"class":92},[82,140310,140311,140313,140315,140317],{"class":84,"line":1388},[82,140312,140104],{"class":88},[82,140314,1357],{"class":92},[82,140316,1793],{"class":96},[82,140318,3909],{"class":92},[82,140320,140321,140323,140325,140327],{"class":84,"line":1394},[82,140322,130712],{"class":88},[82,140324,1357],{"class":92},[82,140326,63427],{"class":88},[82,140328,3909],{"class":92},[82,140330,140331],{"class":84,"line":1399},[82,140332,1391],{"class":92},[82,140334,140335,140337,140339],{"class":84,"line":1430},[82,140336,54173],{"class":53863},[82,140338,140131],{"class":2384},[82,140340,1349],{"class":92},[82,140342,140343,140345,140347,140349],{"class":84,"line":1818},[82,140344,140104],{"class":88},[82,140346,1357],{"class":92},[82,140348,140142],{"class":96},[82,140350,3909],{"class":92},[82,140352,140353,140355,140357,140359],{"class":84,"line":2082},[82,140354,73461],{"class":88},[82,140356,1357],{"class":92},[82,140358,64628],{"class":88},[82,140360,3909],{"class":92},[82,140362,140363],{"class":84,"line":2233},[82,140364,1391],{"class":92},[19,140366,140367],{},"div {\nmargin: 0 auto;\n}",[73,140369,140372],{"className":140370,"code":140371,"language":7780},[7778],"\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",[32,140373,140371],{"__ignoreMap":78},[19,140375,140376],{},"如果想让多个元素都发生变化",[19,140378,140379],{},"不能如下操作：",[19,140381,140382],{},"transition: width 2s ease 0.5s;",[19,140384,140385],{},"transition: height 2s ease 0.5s;不对！！！",[19,140387,140388],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140390,140391],{},"使用如下：加逗号隔开",[19,140393,140394],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140396,140397],{},"transition all 2s ease;",[65,140399,140401],{"id":140400},"_1426-过渡练习","14.2.6 过渡练习",[26,140403,140404],{},[29,140405,140406],{},"进度条",[4078,140408],{"style":128952,"src":140409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[73,140411,140413],{"className":129096,"code":140412,"language":129098,"meta":78,"style":78},"div {\n  transition: all 0.3s ease;\n}\n",[32,140414,140415,140421,140439],{"__ignoreMap":78},[82,140416,140417,140419],{"class":84,"line":85},[82,140418,54173],{"class":53863},[82,140420,1349],{"class":92},[82,140422,140423,140426,140428,140430,140433,140435,140437],{"class":84,"line":157},[82,140424,140425],{"class":88},"  transition",[82,140427,1357],{"class":92},[82,140429,30703],{"class":88},[82,140431,140432],{"class":88}," 0.3",[82,140434,3446],{"class":112},[82,140436,81234],{"class":88},[82,140438,3909],{"class":92},[82,140440,140441],{"class":84,"line":404},[82,140442,1391],{"class":92},[26,140444,140445],{"start":157},[29,140446,140447],{},"小米logo",[19,140449,140450],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[73,140452,140454],{"className":129096,"code":140453,"language":129098,"meta":78,"style":78},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[32,140455,140456,140461,140467,140483,140488],{"__ignoreMap":78},[82,140457,140458],{"class":84,"line":85},[82,140459,140460],{"class":2828},"\u002F* CSS3 过渡 *\u002F\n",[82,140462,140463,140465],{"class":84,"line":157},[82,140464,54173],{"class":53863},[82,140466,1349],{"class":92},[82,140468,140469,140471,140473,140475,140477,140479,140481],{"class":84,"line":404},[82,140470,140425],{"class":88},[82,140472,1357],{"class":92},[82,140474,30703],{"class":88},[82,140476,140432],{"class":88},[82,140478,3446],{"class":112},[82,140480,81234],{"class":88},[82,140482,3909],{"class":92},[82,140484,140485],{"class":84,"line":413},[82,140486,140487],{"class":2828},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[82,140489,140490],{"class":84,"line":508},[82,140491,1391],{"class":92},[19,140493,140494],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2671,140496,140497],{},"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":78,"searchDepth":157,"depth":157,"links":140499},[140500,140505],{"id":138830,"depth":157,"text":138831,"children":140501},[140502,140503,140504],{"id":138834,"depth":404,"text":138835},{"id":138911,"depth":404,"text":138912},{"id":139242,"depth":404,"text":139243},{"id":139533,"depth":157,"text":139534,"children":140506},[140507,140508],{"id":139537,"depth":404,"text":139538},{"id":140400,"depth":404,"text":140401},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138822,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140515,"title":140516,"body":140517,"description":2699,"extension":2700,"meta":142261,"navigation":485,"path":142262,"seo":142263,"stem":142264,"__hash__":142265},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140518,"toc":142242},[140519,140522,140526,140529,140535,140541,140545,140547,140550,140553,140556,140559,140562,140565,140568,140572,140576,140579,140582,140585,140589,140592,140595,140600,140603,140606,140609,140613,140616,140625,140628,140631,140635,140638,140641,140646,140653,140667,140675,140682,140687,140690,140693,140696,140703,140707,140713,140719,140722,140725,140730,140736,140738,140746,140751,140754,140760,140762,140767,140772,140775,140777,140782,140785,140790,140795,140829,140833,140837,140840,140844,140847,140933,140936,140973,140976,141012,141016,141021,141034,141088,141090,141118,141120,141148,141154,141168,141170,141214,141216,141260,141263,141270,141281,141283,141310,141312,141338,141345,141361,141363,141457,141459,141553,141560,141563,141568,141574,141648,141651,141653,141689,141691,141727,141730,141737,141756,141759,141762,141764,141789,141791,141815,141818,141821,141851,141855,141858,141921,141923,141989,141991,142055,142058,142090,142092,142118,142120,142146,142149,142180,142182,142208,142210,142236,142239],[10,140520,140516],{"id":140521},"_15-品优购项目上篇-搭建与公共模块",[14,140523,140525],{"id":140524},"_151-项目规划","15.1 项目规划",[4078,140527],{"style":128952,"src":140528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140530,140531,140534],{},[2913,140532,140533],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140536,140537,140540],{},[2913,140538,140539],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140542,140544],{"id":140543},"_152-项目介绍","15.2 项目介绍",[19,140546,140533],{},[4078,140548],{"style":128952,"src":140549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140551,140552],{},"主页：",[4078,140554],{"style":128952,"src":140555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140557,140558],{},"列表页：",[4078,140560],{"style":128952,"src":140561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140563,140564],{},"注册页：",[4078,140566],{"style":128952,"src":140567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140569,140571],{"id":140570},"_153-项目搭建工作","15.3 项目搭建工作",[65,140573,140575],{"id":140574},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[4078,140577],{"style":128952,"src":140578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140580,140581],{},"经常更换的图片要放到upload文件夹中",[19,140583,140584],{},"不经常换的放到images文件夹中",[65,140586,140588],{"id":140587},"_1532-创建文件如下","15.3.2 创建文件如下",[4078,140590],{"style":128952,"src":140591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[4078,140593],{"style":128952,"src":140594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140596,140597],{},[2913,140598,140599],{},"初始化样式：",[19,140601,140602],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140604,140605],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140607,140608],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[65,140610,140612],{"id":140611},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140614,140615],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140617,140618,140619,140624],{},"这里最典型的应用就是 ",[2913,140620,140621],{},[32,140622,140623],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[4078,140626],{"style":128952,"src":140627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140629,140630],{},"通过link方法来引入",[65,140632,140634],{"id":140633},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[4078,140636],{"style":128952,"src":140637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140639,140640],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,140642,140643],{},[29,140644,140645],{},"制作favicon图标",[19,140647,140648,140649,140652],{},"①把品优购图标切成 ",[32,140650,140651],{},"png"," 图片",[19,140654,140655,140656,140658,140659,140662,140663],{},"②把 ",[32,140657,140651],{}," 图片转换为 ",[32,140660,140661],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[323,140664,140665],{"href":140665,"rel":140666},"http:\u002F\u002Fwww.bitbug.net\u002F",[26449],[26,140668,140669,140672],{"start":157},[29,140670,140671],{},"favicon图标放到网站根目录下",[29,140673,140674],{},"HTML页面引入favicon",[19,140676,140677,140678,140681],{},"在html 页面里面的 ",[32,140679,140680],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140683,140684],{},[32,140685,140686],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140688,140689],{},"复制这行代码或者在生成这个的网站进行复制",[4078,140691],{"style":128952,"src":140692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140694,140695],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140697,140698,140699],{},"例如:",[323,140700,140701],{"href":140701,"rel":140702},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26449],[65,140704,140706],{"id":140705},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140708,140709,140712],{},[2913,140710,140711],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140714,140715,140718],{},[2913,140716,140717],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140720,140721],{},"页面必须有三个标签用来符合 SEO 优化",[4078,140723],{"style":128952,"src":140724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,140726,140727],{},[29,140728,140729],{},"title网站标题",[19,140731,140732,140735],{},[2913,140733,140734],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140737,71347],{},[3755,140739,140740,140743],{},[29,140741,140742],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,140744,140745],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,140747,140748],{"start":157},[29,140749,140750],{},"description网站描述",[19,140752,140753],{},"简要说明我们网站主要是做什么的",[19,140755,140756,140759],{},[2913,140757,140758],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140761,71347],{},[19,140763,140764],{},[32,140765,140766],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,140768,140769],{"start":404},[29,140770,140771],{},"keywords关键词",[19,140773,140774],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140776,71347],{},[19,140778,140779],{},[32,140780,140781],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140783,140784],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140786,140787],{},[2913,140788,140789],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,140791,140792],{"start":413},[29,140793,140794],{},"代码总结",[73,140796,140797],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,140798,140799,140803,140817,140821],{"__ignoreMap":78},[82,140800,140801],{"class":84,"line":85},[82,140802,133207],{"class":2828},[82,140804,140805,140807,140809,140811,140813,140815],{"class":84,"line":157},[82,140806,3659],{"class":92},[82,140808,54173],{"class":53863},[82,140810,56046],{"class":2384},[82,140812,113],{"class":92},[82,140814,133220],{"class":96},[82,140816,53870],{"class":92},[82,140818,140819],{"class":84,"line":404},[82,140820,133227],{"class":92},[82,140822,140823,140825,140827],{"class":84,"line":413},[82,140824,54347],{"class":92},[82,140826,54173],{"class":53863},[82,140828,53870],{"class":92},[14,140830,140832],{"id":140831},"_154-项目公共部分制作","15.4 项目公共部分制作",[65,140834,140836],{"id":140835},"_1541-常用模块类命名","15.4.1 常用模块类命名",[4078,140838],{"style":128952,"src":140839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[65,140841,140843],{"id":140842},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140845,140846],{},"布局思路：",[3755,140848,140849,140852,140855,140877,140910],{},[29,140850,140851],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,140853,140854],{},"里面包含版心的盒子",[29,140856,140857,140858],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3755,140859,140860,140868,140874],{},[29,140861,140862,140863,24084,140865,140867],{},"1 号盒子 里面包含一个",[32,140864,3755],{},[32,140866,3755],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,140869,140870,140871,140873],{},"里面的内容是水平排列，所以需要给",[32,140872,29],{},"设置浮动",[29,140875,140876],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,140878,140879,140880],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3755,140881,140882,140896,140901],{},[29,140883,140884,140885,24084,140887,140889,140890,140892,140893,140895],{},"2 号盒子 里面包含一个",[32,140886,3755],{},[32,140888,3755],{},"包裹",[32,140891,29],{},"，中间的",[32,140894,3670],{},"可以用样式去设置，也可以用字符 |",[29,140897,140898,140899,140873],{},"里面内容水平排列，给",[32,140900,29],{},[29,140902,140903,140904,140906,140907,140909],{},"找到里面所有偶数的 ",[32,140905,29],{}," 设置样式（偶数的 ",[32,140908,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,140911,140912,140913],{},"需要用到字体图标",[3755,140914,140915,140921,140924,140927,140930],{},[29,140916,140917,140918],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[32,140919,140920],{},"arrow-icon",[29,140922,140923],{},"先要引入字体图片的资源",[29,140925,140926],{},"在样式里面利用 font-face 来进行声明",[29,140928,140929],{},"在伪元素的 content属性设置 图标的编码",[29,140931,140932],{},"给伪元素设置font-family属性",[19,140934,140935],{},"结构实例代码：",[73,140937,140939],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},"div::before {\n  content: \"\";\n  display: block;\n}\n",[32,140940,140941,140949,140959,140969],{"__ignoreMap":78},[82,140942,140943,140945,140947],{"class":84,"line":85},[82,140944,54173],{"class":53863},[82,140946,140097],{"class":2384},[82,140948,1349],{"class":92},[82,140950,140951,140953,140955,140957],{"class":84,"line":157},[82,140952,140104],{"class":88},[82,140954,1357],{"class":92},[82,140956,1793],{"class":96},[82,140958,3909],{"class":92},[82,140960,140961,140963,140965,140967],{"class":84,"line":404},[82,140962,130712],{"class":88},[82,140964,1357],{"class":92},[82,140966,63427],{"class":88},[82,140968,3909],{"class":92},[82,140970,140971],{"class":84,"line":413},[82,140972,1391],{"class":92},[19,140974,140975],{},"样式实例代码：",[73,140977,140978],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,140979,140980,140988,140998,141008],{"__ignoreMap":78},[82,140981,140982,140984,140986],{"class":84,"line":85},[82,140983,54173],{"class":53863},[82,140985,140097],{"class":2384},[82,140987,1349],{"class":92},[82,140989,140990,140992,140994,140996],{"class":84,"line":157},[82,140991,140104],{"class":88},[82,140993,1357],{"class":92},[82,140995,1793],{"class":96},[82,140997,3909],{"class":92},[82,140999,141000,141002,141004,141006],{"class":84,"line":404},[82,141001,130712],{"class":88},[82,141003,1357],{"class":92},[82,141005,63427],{"class":88},[82,141007,3909],{"class":92},[82,141009,141010],{"class":84,"line":413},[82,141011,1391],{"class":92},[65,141013,141015],{"id":141014},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3755,141017,141018],{},[29,141019,141020],{},"header 盒子必须要有高度",[19,141022,141023,141024,141026,141027],{},"1 号盒子是 ",[32,141025,134108],{}," 标志定位，在正常开发过程中， ",[2913,141028,141029,141030,141033],{},"logo的布局其实是有讲究的，需要进行 ",[32,141031,141032],{},"logoSEO","的优化 （★★★）",[3755,141035,141036,141044,141052,141079],{},[29,141037,141038,141040,141041,141043],{},[32,141039,134108],{}," 里面首先放一个 ",[32,141042,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,141045,141046,141048,141049,141051],{},[32,141047,10],{}," 里面再放一个链接，可以返回首页的，把 ",[32,141050,134108],{}," 的背景图片给链接即可",[29,141053,141054,141055],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3755,141056,141057,141072],{},[29,141058,141059,141060,141063,141064,141067,141068,141071],{},"方法1：",[32,141061,141062],{},"text-indent"," 移到盒子外面（",[32,141065,141066],{},"text-indent: -9999px",") ，然后 ",[32,141069,141070],{},"overflow:hidden"," ，淘宝的做法",[29,141073,141074,141075,141078],{},"方法2：直接给 ",[32,141076,141077],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,141080,141081,141082,141084,141085,141087],{},"最后给链接一个 ",[32,141083,53970],{}," 属性，这样鼠标放到 ",[32,141086,134108],{}," 上就可以看到提示文字了",[19,141089,140935],{},[73,141091,141092],{"className":129843,"code":134329,"language":129845,"meta":78,"style":78},[32,141093,141094],{"__ignoreMap":78},[82,141095,141096,141098,141100,141102,141104,141106,141108,141110,141112,141114,141116],{"class":84,"line":85},[82,141097,3659],{"class":92},[82,141099,323],{"class":53863},[82,141101,63615],{"class":2384},[82,141103,113],{"class":92},[82,141105,134344],{"class":96},[82,141107,134347],{"class":2384},[82,141109,113],{"class":92},[82,141111,134352],{"class":96},[82,141113,134355],{"class":92},[82,141115,323],{"class":53863},[82,141117,53870],{"class":92},[19,141119,140975],{},[73,141121,141122],{"className":129843,"code":134329,"language":129845,"meta":78,"style":78},[32,141123,141124],{"__ignoreMap":78},[82,141125,141126,141128,141130,141132,141134,141136,141138,141140,141142,141144,141146],{"class":84,"line":85},[82,141127,3659],{"class":92},[82,141129,323],{"class":53863},[82,141131,63615],{"class":2384},[82,141133,113],{"class":92},[82,141135,134344],{"class":96},[82,141137,134347],{"class":2384},[82,141139,113],{"class":92},[82,141141,134352],{"class":96},[82,141143,134355],{"class":92},[82,141145,323],{"class":53863},[82,141147,53870],{"class":92},[19,141149,141150,141151,141153],{},"2 号盒子是 ",[32,141152,134121],{}," 搜索模块定位",[3755,141155,141156,141159,141162,141165],{},[29,141157,141158],{},"search盒子利用定位的方式放在对应的位置",[29,141160,141161],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,141163,141164],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,141166,141167],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141169,140935],{},[73,141171,141172],{"className":129096,"code":134416,"language":129098,"meta":78,"style":78},[32,141173,141174,141196,141200,141210],{"__ignoreMap":78},[82,141175,141176,141178,141180,141182,141184,141186,141188,141190,141192,141194],{"class":84,"line":85},[82,141177,54173],{"class":53863},[82,141179,100],{"class":92},[82,141181,19],{"class":53863},[82,141183,100],{"class":92},[82,141185,10],{"class":53863},[82,141187,100],{"class":92},[82,141189,3755],{"class":53863},[82,141191,100],{"class":92},[82,141193,29],{"class":53863},[82,141195,1349],{"class":92},[82,141197,141198],{"class":84,"line":157},[82,141199,134445],{"class":2828},[82,141201,141202,141204,141206,141208],{"class":84,"line":404},[82,141203,130712],{"class":88},[82,141205,1357],{"class":92},[82,141207,63427],{"class":88},[82,141209,3909],{"class":92},[82,141211,141212],{"class":84,"line":413},[82,141213,1391],{"class":92},[19,141215,140975],{},[73,141217,141218],{"className":129096,"code":134416,"language":129098,"meta":78,"style":78},[32,141219,141220,141242,141246,141256],{"__ignoreMap":78},[82,141221,141222,141224,141226,141228,141230,141232,141234,141236,141238,141240],{"class":84,"line":85},[82,141223,54173],{"class":53863},[82,141225,100],{"class":92},[82,141227,19],{"class":53863},[82,141229,100],{"class":92},[82,141231,10],{"class":53863},[82,141233,100],{"class":92},[82,141235,3755],{"class":53863},[82,141237,100],{"class":92},[82,141239,29],{"class":53863},[82,141241,1349],{"class":92},[82,141243,141244],{"class":84,"line":157},[82,141245,134445],{"class":2828},[82,141247,141248,141250,141252,141254],{"class":84,"line":404},[82,141249,130712],{"class":88},[82,141251,1357],{"class":92},[82,141253,63427],{"class":88},[82,141255,3909],{"class":92},[82,141257,141258],{"class":84,"line":413},[82,141259,1391],{"class":92},[19,141261,141262],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141264,141265,141266,141269],{},"3 号盒子是 ",[32,141267,141268],{},"hotwords"," 热词模块定位",[3755,141271,141272,141275,141278],{},[29,141273,141274],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,141276,141277],{},"给里面所有的a标签设置 左右10px的外边距",[29,141279,141280],{},"给第一个a标签设置文字变红色（#c81623）",[19,141282,140935],{},[73,141284,141286],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},"div {\n  margin: 0 auto;\n}\n",[32,141287,141288,141294,141306],{"__ignoreMap":78},[82,141289,141290,141292],{"class":84,"line":85},[82,141291,54173],{"class":53863},[82,141293,1349],{"class":92},[82,141295,141296,141298,141300,141302,141304],{"class":84,"line":157},[82,141297,73026],{"class":88},[82,141299,1357],{"class":92},[82,141301,2244],{"class":88},[82,141303,54118],{"class":88},[82,141305,3909],{"class":92},[82,141307,141308],{"class":84,"line":404},[82,141309,1391],{"class":92},[19,141311,140975],{},[73,141313,141314],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,141315,141316,141322,141334],{"__ignoreMap":78},[82,141317,141318,141320],{"class":84,"line":85},[82,141319,54173],{"class":53863},[82,141321,1349],{"class":92},[82,141323,141324,141326,141328,141330,141332],{"class":84,"line":157},[82,141325,73026],{"class":88},[82,141327,1357],{"class":92},[82,141329,2244],{"class":88},[82,141331,54118],{"class":88},[82,141333,3909],{"class":92},[82,141335,141336],{"class":84,"line":404},[82,141337,1391],{"class":92},[19,141339,141340,141341,141344],{},"4 号盒子是 ",[32,141342,141343],{},"shopcar"," 购物车模块",[3755,141346,141347,141352,141355,141358],{},[29,141348,125879,141349,141351],{},[32,141350,141343],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,141353,141354],{},"count 统计部分用绝对定位做",[29,141356,141357],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,141359,141360],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141362,140935],{},[73,141364,141365],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,141366,141367,141371,141385,141389,141403,141407,141421,141425,141439,141443],{"__ignoreMap":78},[82,141368,141369],{"class":84,"line":85},[82,141370,134535],{"class":2828},[82,141372,141373,141375,141377,141379,141381,141383],{"class":84,"line":157},[82,141374,134540],{"class":2384},[82,141376,82361],{"class":92},[82,141378,131456],{"class":88},[82,141380,1357],{"class":92},[82,141382,134549],{"class":88},[82,141384,132026],{"class":92},[82,141386,141387],{"class":84,"line":404},[82,141388,134556],{"class":2828},[82,141390,141391,141393,141395,141397,141399,141401],{"class":84,"line":413},[82,141392,134561],{"class":2384},[82,141394,82361],{"class":92},[82,141396,131456],{"class":88},[82,141398,1357],{"class":92},[82,141400,57324],{"class":88},[82,141402,132026],{"class":92},[82,141404,141405],{"class":84,"line":508},[82,141406,134576],{"class":2828},[82,141408,141409,141411,141413,141415,141417,141419],{"class":84,"line":513},[82,141410,134581],{"class":2384},[82,141412,82361],{"class":92},[82,141414,131456],{"class":88},[82,141416,1357],{"class":92},[82,141418,57391],{"class":88},[82,141420,132026],{"class":92},[82,141422,141423],{"class":84,"line":1388},[82,141424,134596],{"class":2828},[82,141426,141427,141429,141431,141433,141435,141437],{"class":84,"line":1394},[82,141428,134601],{"class":2384},[82,141430,82361],{"class":92},[82,141432,131456],{"class":88},[82,141434,1357],{"class":92},[82,141436,88787],{"class":88},[82,141438,132026],{"class":92},[82,141440,141441],{"class":84,"line":1399},[82,141442,134616],{"class":2828},[82,141444,141445,141447,141449,141451,141453,141455],{"class":84,"line":1430},[82,141446,134621],{"class":2384},[82,141448,82361],{"class":92},[82,141450,131456],{"class":88},[82,141452,1357],{"class":92},[82,141454,134630],{"class":88},[82,141456,132026],{"class":92},[19,141458,140975],{},[73,141460,141461],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,141462,141463,141467,141481,141485,141499,141503,141517,141521,141535,141539],{"__ignoreMap":78},[82,141464,141465],{"class":84,"line":85},[82,141466,134535],{"class":2828},[82,141468,141469,141471,141473,141475,141477,141479],{"class":84,"line":157},[82,141470,134540],{"class":2384},[82,141472,82361],{"class":92},[82,141474,131456],{"class":88},[82,141476,1357],{"class":92},[82,141478,134549],{"class":88},[82,141480,132026],{"class":92},[82,141482,141483],{"class":84,"line":404},[82,141484,134556],{"class":2828},[82,141486,141487,141489,141491,141493,141495,141497],{"class":84,"line":413},[82,141488,134561],{"class":2384},[82,141490,82361],{"class":92},[82,141492,131456],{"class":88},[82,141494,1357],{"class":92},[82,141496,57324],{"class":88},[82,141498,132026],{"class":92},[82,141500,141501],{"class":84,"line":508},[82,141502,134576],{"class":2828},[82,141504,141505,141507,141509,141511,141513,141515],{"class":84,"line":513},[82,141506,134581],{"class":2384},[82,141508,82361],{"class":92},[82,141510,131456],{"class":88},[82,141512,1357],{"class":92},[82,141514,57391],{"class":88},[82,141516,132026],{"class":92},[82,141518,141519],{"class":84,"line":1388},[82,141520,134596],{"class":2828},[82,141522,141523,141525,141527,141529,141531,141533],{"class":84,"line":1394},[82,141524,134601],{"class":2384},[82,141526,82361],{"class":92},[82,141528,131456],{"class":88},[82,141530,1357],{"class":92},[82,141532,88787],{"class":88},[82,141534,132026],{"class":92},[82,141536,141537],{"class":84,"line":1399},[82,141538,134616],{"class":2828},[82,141540,141541,141543,141545,141547,141549,141551],{"class":84,"line":1430},[82,141542,134621],{"class":2384},[82,141544,82361],{"class":92},[82,141546,131456],{"class":88},[82,141548,1357],{"class":92},[82,141550,134630],{"class":88},[82,141552,132026],{"class":92},[65,141554,141556,141557,141559],{"id":141555},"_1544-nav导航模块制作","15.4.4 ",[32,141558,56273],{},"导航模块制作",[4078,141561],{"style":128952,"src":141562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141564,141565,141567],{},[32,141566,56273],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141569,141570,141571],{},"1 号盒子左侧浮动，",[32,141572,141573],{},"dropdown",[3755,141575,141576,141586,141594,141600,141608,141618,141626,141637],{},[29,141577,141578,141579,103569,141582,141585],{},"1号盒子有讲究，根据相关性 里面包含 ",[32,141580,141581],{},".dt",[32,141583,141584],{},".dd"," 两个盒子",[29,141587,141588,141590,141591,141593],{},[32,141589,141581],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[32,141592,141584],{}," 挤到下面去了",[29,141595,141596,141597,141599],{},"给 ",[32,141598,141584],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,141601,141596,141602,141604,141605,122782],{},[32,141603,141584],{}," 盒子里面定义 无序列表 （",[32,141606,141607],{},"ul > li > a",[29,141609,141610,141611,141613,141614,141617],{},"每个 ",[32,141612,29],{}," 都有一个高度（",[32,141615,141616],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,141619,141596,141620,141622,141623,122782],{},[32,141621,29],{}," 里面的a设置文字大小（",[32,141624,141625],{},"14px",[29,141627,141596,141628,141630,141631,141633,141634,141636],{},[32,141629,29],{}," 设置 ",[32,141632,130257],{},"，当鼠标移入的时候，让",[32,141635,29],{},"的背景变成白色，让里面的文字变成红色",[29,141638,141639,141641,141642,141644,141645,141647],{},[32,141640,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[32,141643,29],{},"的右侧，那么给",[32,141646,29],{},"设置相对定位",[19,141649,141650],{},"一定要注意相关性",[19,141652,140935],{},[73,141654,141655],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,141656,141657,141665,141675,141685],{"__ignoreMap":78},[82,141658,141659,141661,141663],{"class":84,"line":85},[82,141660,54173],{"class":53863},[82,141662,140097],{"class":2384},[82,141664,1349],{"class":92},[82,141666,141667,141669,141671,141673],{"class":84,"line":157},[82,141668,140104],{"class":88},[82,141670,1357],{"class":92},[82,141672,1793],{"class":96},[82,141674,3909],{"class":92},[82,141676,141677,141679,141681,141683],{"class":84,"line":404},[82,141678,130712],{"class":88},[82,141680,1357],{"class":92},[82,141682,63427],{"class":88},[82,141684,3909],{"class":92},[82,141686,141687],{"class":84,"line":413},[82,141688,1391],{"class":92},[19,141690,140975],{},[73,141692,141693],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,141694,141695,141703,141713,141723],{"__ignoreMap":78},[82,141696,141697,141699,141701],{"class":84,"line":85},[82,141698,54173],{"class":53863},[82,141700,140097],{"class":2384},[82,141702,1349],{"class":92},[82,141704,141705,141707,141709,141711],{"class":84,"line":157},[82,141706,140104],{"class":88},[82,141708,1357],{"class":92},[82,141710,1793],{"class":96},[82,141712,3909],{"class":92},[82,141714,141715,141717,141719,141721],{"class":84,"line":404},[82,141716,130712],{"class":88},[82,141718,1357],{"class":92},[82,141720,63427],{"class":88},[82,141722,3909],{"class":92},[82,141724,141725],{"class":84,"line":413},[82,141726,1391],{"class":92},[19,141728,141729],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141731,141732,141733,141736],{},"2 号盒子左侧浮动，",[32,141734,141735],{},"navitems"," 导航栏组",[3755,141738,141739,141744,141753],{},[29,141740,141741,141742],{},"里面结构是 ",[32,141743,141607],{},[29,141745,141746,141747,141749,141750,141752],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[32,141748,323],{},"左右的",[32,141751,33459],{},"把两侧撑开",[29,141754,141755],{},"让文字垂直居中（行高等于高度）",[4078,141757],{"style":128952,"src":141758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141760,141761],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141763,140935],{},[73,141765,141767],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},".box {\n  float: left;\n}\n",[32,141768,141769,141775,141785],{"__ignoreMap":78},[82,141770,141771,141773],{"class":84,"line":85},[82,141772,132944],{"class":2384},[82,141774,1349],{"class":92},[82,141776,141777,141779,141781,141783],{"class":84,"line":157},[82,141778,133576],{"class":88},[82,141780,1357],{"class":92},[82,141782,26320],{"class":88},[82,141784,3909],{"class":92},[82,141786,141787],{"class":84,"line":404},[82,141788,1391],{"class":92},[19,141790,140975],{},[73,141792,141793],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,141794,141795,141801,141811],{"__ignoreMap":78},[82,141796,141797,141799],{"class":84,"line":85},[82,141798,132944],{"class":2384},[82,141800,1349],{"class":92},[82,141802,141803,141805,141807,141809],{"class":84,"line":157},[82,141804,133576],{"class":88},[82,141806,1357],{"class":92},[82,141808,26320],{"class":88},[82,141810,3909],{"class":92},[82,141812,141813],{"class":84,"line":404},[82,141814,1391],{"class":92},[19,141816,141817],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[4078,141819],{"style":128952,"src":141820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[73,141822,141823],{"className":129096,"code":133253,"language":129098,"meta":78,"style":78},[32,141824,141825,141831,141847],{"__ignoreMap":78},[82,141826,141827,141829],{"class":84,"line":85},[82,141828,54173],{"class":53863},[82,141830,1349],{"class":92},[82,141832,141833,141835,141837,141839,141841,141843,141845],{"class":84,"line":157},[82,141834,73452],{"class":88},[82,141836,1357],{"class":92},[82,141838,2283],{"class":88},[82,141840,54054],{"class":112},[82,141842,54083],{"class":88},[82,141844,132488],{"class":88},[82,141846,3909],{"class":92},[82,141848,141849],{"class":84,"line":404},[82,141850,1391],{"class":92},[65,141852,141854],{"id":141853},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[4078,141856],{"style":128952,"src":141857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3755,141859,141860,141865,141870],{},[29,141861,141862,141864],{},[32,141863,134299],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,141866,141867,141869],{},[32,141868,134299],{}," 里面有一个大的版心",[29,141871,141872,141873,141876,141877],{},"版心里面包含 1 号盒子，",[32,141874,141875],{},"mod_service"," 是服务模块，mod 是模块的意思",[3755,141878,141879,141884,141897,141913,141918],{},[29,141880,141596,141881,141883],{},[32,141882,141875],{}," 设置高度（80px）和下边框",[29,141885,141886,141887,141890,141891,141893,141894,141896],{},"在里面定义 ",[32,141888,141889],{},"ul > li"," ,每个",[32,141892,29],{}," 宽度是300px 高度是 50px，给每个",[32,141895,29],{},"设置35px的左内边距",[29,141898,141899,141900,141902,141903,141905,141906,141908,141909,20994,141911,122782],{},"在每个",[32,141901,29],{},"里面，放一个 ",[32,141904,25494],{},"（里面放图标），一个",[32,141907,54173],{},"（里面放",[32,141910,54173],{},[32,141912,19],{},[29,141914,141596,141915,141917],{},[32,141916,25494],{},"设置浮动，让h5与这个div左右排列",[29,141919,141920],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141922,140935],{},[73,141924,141926],{"className":129096,"code":141925,"language":129098,"meta":78,"style":78},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[32,141927,141928,141934,141946,141958,141985],{"__ignoreMap":78},[82,141929,141930,141932],{"class":84,"line":85},[82,141931,136853],{"class":2384},[82,141933,1349],{"class":92},[82,141935,141936,141938,141940,141942,141944],{"class":84,"line":157},[82,141937,73124],{"class":88},[82,141939,1357],{"class":92},[82,141941,3451],{"class":88},[82,141943,54054],{"class":112},[82,141945,3909],{"class":92},[82,141947,141948,141950,141952,141954,141956],{"class":84,"line":404},[82,141949,73344],{"class":88},[82,141951,1357],{"class":92},[82,141953,3451],{"class":88},[82,141955,54054],{"class":112},[82,141957,3909],{"class":92},[82,141959,141960,141962,141964,141966,141968,141970,141972,141974,141977,141979,141981,141983],{"class":84,"line":413},[82,141961,73167],{"class":88},[82,141963,1357],{"class":92},[82,141965,64284],{"class":88},[82,141967,93],{"class":92},[82,141969,136892],{"class":108},[82,141971,725],{"class":92},[82,141973,64294],{"class":88},[82,141975,141976],{"class":88}," -10",[82,141978,54054],{"class":112},[82,141980,136911],{"class":88},[82,141982,54054],{"class":112},[82,141984,3909],{"class":92},[82,141986,141987],{"class":84,"line":508},[82,141988,1391],{"class":92},[19,141990,140975],{},[73,141992,141993],{"className":129096,"code":141925,"language":129098,"meta":78,"style":78},[32,141994,141995,142001,142013,142025,142051],{"__ignoreMap":78},[82,141996,141997,141999],{"class":84,"line":85},[82,141998,136853],{"class":2384},[82,142000,1349],{"class":92},[82,142002,142003,142005,142007,142009,142011],{"class":84,"line":157},[82,142004,73124],{"class":88},[82,142006,1357],{"class":92},[82,142008,3451],{"class":88},[82,142010,54054],{"class":112},[82,142012,3909],{"class":92},[82,142014,142015,142017,142019,142021,142023],{"class":84,"line":404},[82,142016,73344],{"class":88},[82,142018,1357],{"class":92},[82,142020,3451],{"class":88},[82,142022,54054],{"class":112},[82,142024,3909],{"class":92},[82,142026,142027,142029,142031,142033,142035,142037,142039,142041,142043,142045,142047,142049],{"class":84,"line":413},[82,142028,73167],{"class":88},[82,142030,1357],{"class":92},[82,142032,64284],{"class":88},[82,142034,93],{"class":92},[82,142036,136892],{"class":108},[82,142038,725],{"class":92},[82,142040,64294],{"class":88},[82,142042,141976],{"class":88},[82,142044,54054],{"class":112},[82,142046,136911],{"class":88},[82,142048,54054],{"class":112},[82,142050,3909],{"class":92},[82,142052,142053],{"class":84,"line":508},[82,142054,1391],{"class":92},[19,142056,142057],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3755,142059,142060,142063,142069,142075,142087],{},[29,142061,142062],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,142064,142065,142066,122782],{},"里面的布局利用 自定义列表来实现（",[32,142067,142068],{},"dl > dt + dd",[29,142070,141596,142071,142074],{},[32,142072,142073],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,142076,141596,142077,142080,142081,20994,142083,142086],{},[32,142078,142079],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[32,142082,142079],{},[32,142084,142085],{},"dd","之间有些距离",[29,142088,142089],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142091,140935],{},[73,142093,142094],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,142095,142096,142102,142114],{"__ignoreMap":78},[82,142097,142098,142100],{"class":84,"line":85},[82,142099,54173],{"class":53863},[82,142101,1349],{"class":92},[82,142103,142104,142106,142108,142110,142112],{"class":84,"line":157},[82,142105,73026],{"class":88},[82,142107,1357],{"class":92},[82,142109,2244],{"class":88},[82,142111,54118],{"class":88},[82,142113,3909],{"class":92},[82,142115,142116],{"class":84,"line":404},[82,142117,1391],{"class":92},[19,142119,140975],{},[73,142121,142122],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,142123,142124,142130,142142],{"__ignoreMap":78},[82,142125,142126,142128],{"class":84,"line":85},[82,142127,54173],{"class":53863},[82,142129,1349],{"class":92},[82,142131,142132,142134,142136,142138,142140],{"class":84,"line":157},[82,142133,73026],{"class":88},[82,142135,1357],{"class":92},[82,142137,2244],{"class":88},[82,142139,54118],{"class":88},[82,142141,3909],{"class":92},[82,142143,142144],{"class":84,"line":404},[82,142145,1391],{"class":92},[19,142147,142148],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3755,142150,142151,142160,142163,142174],{},[29,142152,142153,142154,142156,142157,142159],{},"分为上下两块，上面是 ",[32,142155,134316],{}," 友情链接，下面是 ",[32,142158,134309],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,142161,142162],{},"把内容分别复制到相应模块中",[29,142164,141596,142165,142167,142168,142170,142171,142173],{},[32,142166,134316],{}," 设置 15px 的下外边距，给",[32,142169,134316],{}," 里面 的 ",[32,142172,323],{}," 标签设置 左右 3px 的外边距",[29,142175,142176,142177,142179],{},"给",[32,142178,134309],{}," 设置 20px 的行高",[19,142181,140935],{},[73,142183,142184],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,142185,142186,142192,142204],{"__ignoreMap":78},[82,142187,142188,142190],{"class":84,"line":85},[82,142189,54173],{"class":53863},[82,142191,1349],{"class":92},[82,142193,142194,142196,142198,142200,142202],{"class":84,"line":157},[82,142195,73026],{"class":88},[82,142197,1357],{"class":92},[82,142199,2244],{"class":88},[82,142201,54118],{"class":88},[82,142203,3909],{"class":92},[82,142205,142206],{"class":84,"line":404},[82,142207,1391],{"class":92},[19,142209,140975],{},[73,142211,142212],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,142213,142214,142220,142232],{"__ignoreMap":78},[82,142215,142216,142218],{"class":84,"line":85},[82,142217,54173],{"class":53863},[82,142219,1349],{"class":92},[82,142221,142222,142224,142226,142228,142230],{"class":84,"line":157},[82,142223,73026],{"class":88},[82,142225,1357],{"class":92},[82,142227,2244],{"class":88},[82,142229,54118],{"class":88},[82,142231,3909],{"class":92},[82,142233,142234],{"class":84,"line":404},[82,142235,1391],{"class":92},[19,142237,142238],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2671,142240,142241],{},"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":78,"searchDepth":157,"depth":157,"links":142243},[142244,142245,142246,142253],{"id":140524,"depth":157,"text":140525},{"id":140543,"depth":157,"text":140544},{"id":140570,"depth":157,"text":140571,"children":142247},[142248,142249,142250,142251,142252],{"id":140574,"depth":404,"text":140575},{"id":140587,"depth":404,"text":140588},{"id":140611,"depth":404,"text":140612},{"id":140633,"depth":404,"text":140634},{"id":140705,"depth":404,"text":140706},{"id":140831,"depth":157,"text":140832,"children":142254},[142255,142256,142257,142258,142260],{"id":140835,"depth":404,"text":140836},{"id":140842,"depth":404,"text":140843},{"id":141014,"depth":404,"text":141015},{"id":141555,"depth":404,"text":142259},"15.4.4 nav导航模块制作",{"id":141853,"depth":404,"text":141854},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140516,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142267,"title":142268,"body":142269,"description":2699,"extension":2700,"meta":144671,"navigation":485,"path":144672,"seo":144673,"stem":144674,"__hash__":144675},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142270,"toc":144648},[142271,142274,142278,142282,142294,142297,142300,142303,142314,142316,142340,142342,142366,142371,142374,142376,142412,142414,142450,142453,142458,142461,142464,142467,142497,142504,142507,142517,142519,142553,142556,142590,142596,142613,142615,142651,142653,142689,142694,142719,142721,142747,142749,142773,142780,142783,142847,142849,142891,142893,142933,142940,142945,142947,142977,142979,143009,143013,143016,143023,143035,143037,143063,143065,143089,143092,143094,143118,143124,143134,143136,143166,143168,143198,143205,143246,143248,143284,143286,143322,143326,143329,143332,143335,143341,143346,143349,143372,143375,143399,143402,143426,143431,143434,143437,143440,143443,143446,143520,143522,143552,143554,143584,143587,143590,143622,143626,143630,143644,143653,143656,143661,143663,143757,143759,143853,143876,143878,143902,143904,143928,143935,143938,143948,143950,143974,143979,143987,143989,144019,144024,144064,144066,144092,144094,144120,144124,144127,144132,144135,144139,144147,144154,144162,144164,144194,144196,144226,144234,144237,144240,144242,144272,144274,144304,144307,144312,144314,144338,144340,144364,144367,144452,144454,144478,144480,144504,144508,144510,144534,144536,144570,144574,144588,144591,144596,144599,144604,144607,144637,144645],[10,142272,142268],{"id":142273},"_16-品优购项目下篇-主体与页面开发",[14,142275,142277],{"id":142276},"_161-项目主体模块制作","16.1 项目主体模块制作",[65,142279,142281],{"id":142280},"_1611-首页制作","16.1.1 首页制作",[19,142283,142284,142286,142287,142289,142290,142293],{},[2913,142285,104609],{}," 主体模块是 ",[2913,142288,76612],{}," 里面专有的，注意需要新的样式文件 ",[2913,142291,142292],{},"index.css，"," 就不要写在common.css中了",[4078,142295],{"style":128952,"src":142296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[4078,142298],{"style":128952,"src":142299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142301,142302],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3755,142304,142305,142308,142311],{},[29,142306,142307],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,142309,142310],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,142312,142313],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142315,140935],{},[73,142317,142318],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,142319,142320,142326,142336],{"__ignoreMap":78},[82,142321,142322,142324],{"class":84,"line":85},[82,142323,132944],{"class":2384},[82,142325,1349],{"class":92},[82,142327,142328,142330,142332,142334],{"class":84,"line":157},[82,142329,133576],{"class":88},[82,142331,1357],{"class":92},[82,142333,26320],{"class":88},[82,142335,3909],{"class":92},[82,142337,142338],{"class":84,"line":404},[82,142339,1391],{"class":92},[19,142341,140975],{},[73,142343,142344],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,142345,142346,142352,142362],{"__ignoreMap":78},[82,142347,142348,142350],{"class":84,"line":85},[82,142349,132944],{"class":2384},[82,142351,1349],{"class":92},[82,142353,142354,142356,142358,142360],{"class":84,"line":157},[82,142355,133576],{"class":88},[82,142357,1357],{"class":92},[82,142359,26320],{"class":88},[82,142361,3909],{"class":92},[82,142363,142364],{"class":84,"line":404},[82,142365,1391],{"class":92},[26,142367,142368],{},[29,142369,142370],{},"左侧focus模块制作",[4078,142372],{"style":128952,"src":142373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142375,140935],{},[73,142377,142378],{"className":129096,"code":130419,"language":129098,"meta":78,"style":78},[32,142379,142380,142388,142398,142408],{"__ignoreMap":78},[82,142381,142382,142384,142386],{"class":84,"line":85},[82,142383,56381],{"class":53863},[82,142385,64458],{"class":2384},[82,142387,1349],{"class":92},[82,142389,142390,142392,142394,142396],{"class":84,"line":157},[82,142391,130434],{"class":88},[82,142393,1357],{"class":92},[82,142395,57449],{"class":88},[82,142397,3909],{"class":92},[82,142399,142400,142402,142404,142406],{"class":84,"line":404},[82,142401,73354],{"class":88},[82,142403,1357],{"class":92},[82,142405,57297],{"class":88},[82,142407,3909],{"class":92},[82,142409,142410],{"class":84,"line":413},[82,142411,1391],{"class":92},[19,142413,140975],{},[73,142415,142416],{"className":129096,"code":130419,"language":129098,"meta":78,"style":78},[32,142417,142418,142426,142436,142446],{"__ignoreMap":78},[82,142419,142420,142422,142424],{"class":84,"line":85},[82,142421,56381],{"class":53863},[82,142423,64458],{"class":2384},[82,142425,1349],{"class":92},[82,142427,142428,142430,142432,142434],{"class":84,"line":157},[82,142429,130434],{"class":88},[82,142431,1357],{"class":92},[82,142433,57449],{"class":88},[82,142435,3909],{"class":92},[82,142437,142438,142440,142442,142444],{"class":84,"line":404},[82,142439,73354],{"class":88},[82,142441,1357],{"class":92},[82,142443,57297],{"class":88},[82,142445,3909],{"class":92},[82,142447,142448],{"class":84,"line":413},[82,142449,1391],{"class":92},[19,142451,142452],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,142454,142455],{"start":157},[29,142456,142457],{},"右侧newsflash模块制作",[4078,142459],{"style":128952,"src":142460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142462,142463],{},"右侧的模块 分为上中下三个盒子",[19,142465,142466],{},"结构代码：",[73,142468,142469],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,142470,142471],{"__ignoreMap":78},[82,142472,142473,142475,142477,142479,142481,142483,142485,142487,142489,142491,142493,142495],{"class":84,"line":85},[82,142474,3659],{"class":92},[82,142476,4078],{"class":53863},[82,142478,57799],{"class":2384},[82,142480,113],{"class":92},[82,142482,136613],{"class":96},[82,142484,57807],{"class":2384},[82,142486,113],{"class":92},[82,142488,136620],{"class":96},[82,142490,136623],{"class":2384},[82,142492,113],{"class":92},[82,142494,136628],{"class":96},[82,142496,53870],{"class":92},[19,142498,142499,142500,142503],{},"1 号盒子为 ",[32,142501,142502],{},"news"," 新闻模块 高度为 165px",[4078,142505],{"style":128952,"src":142506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142508,142509,142510,142513,142514],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[32,142511,142512],{},"news-hd","，下面是 ",[32,142515,142516],{},"news-bd",[19,142518,142466],{},[73,142520,142521],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,142522,142523,142527,142541,142545],{"__ignoreMap":78},[82,142524,142525],{"class":84,"line":85},[82,142526,133207],{"class":2828},[82,142528,142529,142531,142533,142535,142537,142539],{"class":84,"line":157},[82,142530,3659],{"class":92},[82,142532,54173],{"class":53863},[82,142534,56046],{"class":2384},[82,142536,113],{"class":92},[82,142538,133220],{"class":96},[82,142540,53870],{"class":92},[82,142542,142543],{"class":84,"line":404},[82,142544,133227],{"class":92},[82,142546,142547,142549,142551],{"class":84,"line":413},[82,142548,54347],{"class":92},[82,142550,54173],{"class":53863},[82,142552,53870],{"class":92},[19,142554,142555],{},"样式代码：",[73,142557,142558],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,142559,142560,142564,142578,142582],{"__ignoreMap":78},[82,142561,142562],{"class":84,"line":85},[82,142563,133207],{"class":2828},[82,142565,142566,142568,142570,142572,142574,142576],{"class":84,"line":157},[82,142567,3659],{"class":92},[82,142569,54173],{"class":53863},[82,142571,56046],{"class":2384},[82,142573,113],{"class":92},[82,142575,133220],{"class":96},[82,142577,53870],{"class":92},[82,142579,142580],{"class":84,"line":404},[82,142581,133227],{"class":92},[82,142583,142584,142586,142588],{"class":84,"line":413},[82,142585,54347],{"class":92},[82,142587,54173],{"class":53863},[82,142589,53870],{"class":92},[19,142591,142592,142593,142595],{},"上面是",[32,142594,142512],{},"，设置高度是 33px，设置下边框",[3755,142597,142598,142604],{},[29,142599,142600,142601,142603],{},"里面放一个",[32,142602,25494],{}," 标题",[29,142605,142606,142607,142609,142610,142612],{},"放一个a",[32,142608,105244],{},"，内容是 更多，然后让 ",[32,142611,323],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142614,142466],{},[73,142616,142617],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,142618,142619,142627,142637,142647],{"__ignoreMap":78},[82,142620,142621,142623,142625],{"class":84,"line":85},[82,142622,54173],{"class":53863},[82,142624,140097],{"class":2384},[82,142626,1349],{"class":92},[82,142628,142629,142631,142633,142635],{"class":84,"line":157},[82,142630,140104],{"class":88},[82,142632,1357],{"class":92},[82,142634,1793],{"class":96},[82,142636,3909],{"class":92},[82,142638,142639,142641,142643,142645],{"class":84,"line":404},[82,142640,130712],{"class":88},[82,142642,1357],{"class":92},[82,142644,63427],{"class":88},[82,142646,3909],{"class":92},[82,142648,142649],{"class":84,"line":413},[82,142650,1391],{"class":92},[19,142652,142555],{},[73,142654,142655],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,142656,142657,142665,142675,142685],{"__ignoreMap":78},[82,142658,142659,142661,142663],{"class":84,"line":85},[82,142660,54173],{"class":53863},[82,142662,140097],{"class":2384},[82,142664,1349],{"class":92},[82,142666,142667,142669,142671,142673],{"class":84,"line":157},[82,142668,140104],{"class":88},[82,142670,1357],{"class":92},[82,142672,1793],{"class":96},[82,142674,3909],{"class":92},[82,142676,142677,142679,142681,142683],{"class":84,"line":404},[82,142678,130712],{"class":88},[82,142680,1357],{"class":92},[82,142682,63427],{"class":88},[82,142684,3909],{"class":92},[82,142686,142687],{"class":84,"line":413},[82,142688,1391],{"class":92},[19,142690,142691,142692],{},"下面是",[32,142693,142516],{},[3755,142695,142696,142704],{},[29,142697,142698,142699,103569,142701,142703],{},"里面包含 ",[32,142700,3755],{},[32,142702,29],{}," 还有链接",[29,142705,142176,142706,142708,142709,142711,142712,142715,142716],{},[32,142707,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[32,142710,133762],{}," 2.设置 ",[32,142713,142714],{},"white-space: nowrap;"," 3. 设置 ",[32,142717,142718],{},"text-overflow: ellipsis;",[19,142720,142466],{},[73,142722,142724],{"className":129096,"code":142723,"language":129098,"meta":78,"style":78},"div {\n  overflow: hidden;\n}\n",[32,142725,142726,142732,142743],{"__ignoreMap":78},[82,142727,142728,142730],{"class":84,"line":85},[82,142729,54173],{"class":53863},[82,142731,1349],{"class":92},[82,142733,142734,142737,142739,142741],{"class":84,"line":157},[82,142735,142736],{"class":88},"  overflow",[82,142738,1357],{"class":92},[82,142740,64272],{"class":88},[82,142742,3909],{"class":92},[82,142744,142745],{"class":84,"line":404},[82,142746,1391],{"class":92},[19,142748,142555],{},[73,142750,142751],{"className":129096,"code":142723,"language":129098,"meta":78,"style":78},[32,142752,142753,142759,142769],{"__ignoreMap":78},[82,142754,142755,142757],{"class":84,"line":85},[82,142756,54173],{"class":53863},[82,142758,1349],{"class":92},[82,142760,142761,142763,142765,142767],{"class":84,"line":157},[82,142762,142736],{"class":88},[82,142764,1357],{"class":92},[82,142766,64272],{"class":88},[82,142768,3909],{"class":92},[82,142770,142771],{"class":84,"line":404},[82,142772,1391],{"class":92},[19,142774,142775,142776,142779],{},"2 号盒子为 ",[32,142777,142778],{},"lifeservice"," 生活服务模块 高度为 209px",[4078,142781],{"style":128952,"src":142782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3755,142784,142785,142788,142798,142822,142833],{},[29,142786,142787],{},"设置边框（左右下边框）",[29,142789,142790,142791,142794,142795,142797],{},"里面的内容 是 ",[32,142792,142793],{},"ul > 12*li","，给",[32,142796,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,142799,142800,142801],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3755,142802,142803,142808,142817],{},[29,142804,142805,142807],{},[32,142806,142778],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,142809,142810,142811,142813,142814,142816],{},"可以让 ",[32,142812,142778],{}," 里面的 ",[32,142815,3755],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,142818,142819,142821],{},[32,142820,142778],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,142823,119012,142824,142826,142827,142829,142830,142832],{},[32,142825,29],{}," 里面放一个 ",[32,142828,3199],{},"（里面放图标），下面的文本用 ",[32,142831,19],{}," 标签包裹",[29,142834,141596,142835,142837,142838,142840,142841,141630,142843,142846],{},[32,142836,3199],{}," 设置 24px宽和28px的高（注意 ",[32,142839,3199],{}," 是行内元素， 转成行内块），给 ",[32,142842,29],{},[32,142844,142845],{},"text-align:center"," 让里面内容居中显示",[19,142848,142466],{},[73,142850,142852],{"className":129096,"code":142851,"language":129098,"meta":78,"style":78},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[32,142853,142854,142872,142877,142887],{"__ignoreMap":78},[82,142855,142856,142858,142860,142862,142864,142866,142868,142870],{"class":84,"line":85},[82,142857,82],{"class":53863},[82,142859,100],{"class":92},[82,142861,323],{"class":53863},[82,142863,100],{"class":92},[82,142865,26137],{"class":53863},[82,142867,100],{"class":92},[82,142869,2913],{"class":53863},[82,142871,1349],{"class":92},[82,142873,142874],{"class":84,"line":157},[82,142875,142876],{"class":2828},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[82,142878,142879,142881,142883,142885],{"class":84,"line":404},[82,142880,130712],{"class":88},[82,142882,1357],{"class":92},[82,142884,130774],{"class":88},[82,142886,3909],{"class":92},[82,142888,142889],{"class":84,"line":413},[82,142890,1391],{"class":92},[19,142892,142555],{},[73,142894,142895],{"className":129096,"code":142851,"language":129098,"meta":78,"style":78},[32,142896,142897,142915,142919,142929],{"__ignoreMap":78},[82,142898,142899,142901,142903,142905,142907,142909,142911,142913],{"class":84,"line":85},[82,142900,82],{"class":53863},[82,142902,100],{"class":92},[82,142904,323],{"class":53863},[82,142906,100],{"class":92},[82,142908,26137],{"class":53863},[82,142910,100],{"class":92},[82,142912,2913],{"class":53863},[82,142914,1349],{"class":92},[82,142916,142917],{"class":84,"line":157},[82,142918,142876],{"class":2828},[82,142920,142921,142923,142925,142927],{"class":84,"line":404},[82,142922,130712],{"class":88},[82,142924,1357],{"class":92},[82,142926,130774],{"class":88},[82,142928,3909],{"class":92},[82,142930,142931],{"class":84,"line":413},[82,142932,1391],{"class":92},[19,142934,142935,142936,142939],{},"3 号盒子为 ",[32,142937,142938],{},"bargain"," 特价商品",[3755,142941,142942],{},[29,142943,142944],{},"这个比较简单，直接插入一张图片即可",[19,142946,142466],{},[73,142948,142949],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,142950,142951],{"__ignoreMap":78},[82,142952,142953,142955,142957,142959,142961,142963,142965,142967,142969,142971,142973,142975],{"class":84,"line":85},[82,142954,3659],{"class":92},[82,142956,4078],{"class":53863},[82,142958,57799],{"class":2384},[82,142960,113],{"class":92},[82,142962,136613],{"class":96},[82,142964,57807],{"class":2384},[82,142966,113],{"class":92},[82,142968,136620],{"class":96},[82,142970,136623],{"class":2384},[82,142972,113],{"class":92},[82,142974,136628],{"class":96},[82,142976,53870],{"class":92},[19,142978,142555],{},[73,142980,142981],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,142982,142983],{"__ignoreMap":78},[82,142984,142985,142987,142989,142991,142993,142995,142997,142999,143001,143003,143005,143007],{"class":84,"line":85},[82,142986,3659],{"class":92},[82,142988,4078],{"class":53863},[82,142990,57799],{"class":2384},[82,142992,113],{"class":92},[82,142994,136613],{"class":96},[82,142996,57807],{"class":2384},[82,142998,113],{"class":92},[82,143000,136620],{"class":96},[82,143002,136623],{"class":2384},[82,143004,113],{"class":92},[82,143006,136628],{"class":96},[82,143008,53870],{"class":92},[65,143010,143012],{"id":143011},"_1612-推荐模块制作","16.1.2 推荐模块制作",[4078,143014],{"style":128952,"src":143015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,143017,143018,143019,143022],{},"大盒子 ",[32,143020,143021],{},"recom"," 推荐模块 recommend",[3755,143024,143025],{},[29,143026,143027,143028,143030,143031,143034],{},"给这个 ",[32,143029,143021],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[32,143032,143033],{},"#ebebeb","），设置距离上边 12px",[19,143036,142466],{},[73,143038,143040],{"className":129096,"code":143039,"language":129098,"meta":78,"style":78},"div {\n  background-color: #f0f0f0;\n}\n",[32,143041,143042,143048,143059],{"__ignoreMap":78},[82,143043,143044,143046],{"class":84,"line":85},[82,143045,54173],{"class":53863},[82,143047,1349],{"class":92},[82,143049,143050,143052,143054,143057],{"class":84,"line":157},[82,143051,73434],{"class":88},[82,143053,1357],{"class":92},[82,143055,143056],{"class":88},"#f0f0f0",[82,143058,3909],{"class":92},[82,143060,143061],{"class":84,"line":404},[82,143062,1391],{"class":92},[19,143064,142555],{},[73,143066,143067],{"className":129096,"code":143039,"language":129098,"meta":78,"style":78},[32,143068,143069,143075,143085],{"__ignoreMap":78},[82,143070,143071,143073],{"class":84,"line":85},[82,143072,54173],{"class":53863},[82,143074,1349],{"class":92},[82,143076,143077,143079,143081,143083],{"class":84,"line":157},[82,143078,73434],{"class":88},[82,143080,1357],{"class":92},[82,143082,143056],{"class":88},[82,143084,3909],{"class":92},[82,143086,143087],{"class":84,"line":404},[82,143088,1391],{"class":92},[19,143090,143091],{},"里面包含 2 个盒子， 浮动即可",[19,143093,142466],{},[73,143095,143096],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143097,143098,143104,143114],{"__ignoreMap":78},[82,143099,143100,143102],{"class":84,"line":85},[82,143101,132944],{"class":2384},[82,143103,1349],{"class":92},[82,143105,143106,143108,143110,143112],{"class":84,"line":157},[82,143107,133576],{"class":88},[82,143109,1357],{"class":92},[82,143111,26320],{"class":88},[82,143113,3909],{"class":92},[82,143115,143116],{"class":84,"line":404},[82,143117,1391],{"class":92},[19,143119,143120,143121],{},"1 号盒子 ",[32,143122,143123],{},"recom_hd",[3755,143125,143126,143129],{},[29,143127,143128],{},"设置宽度205px，高度163px",[29,143130,142600,143131,143133],{},[32,143132,4078],{},"标签，插入图片即可",[19,143135,142466],{},[73,143137,143138],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,143139,143140],{"__ignoreMap":78},[82,143141,143142,143144,143146,143148,143150,143152,143154,143156,143158,143160,143162,143164],{"class":84,"line":85},[82,143143,3659],{"class":92},[82,143145,4078],{"class":53863},[82,143147,57799],{"class":2384},[82,143149,113],{"class":92},[82,143151,136613],{"class":96},[82,143153,57807],{"class":2384},[82,143155,113],{"class":92},[82,143157,136620],{"class":96},[82,143159,136623],{"class":2384},[82,143161,113],{"class":92},[82,143163,136628],{"class":96},[82,143165,53870],{"class":92},[19,143167,142555],{},[73,143169,143170],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,143171,143172],{"__ignoreMap":78},[82,143173,143174,143176,143178,143180,143182,143184,143186,143188,143190,143192,143194,143196],{"class":84,"line":85},[82,143175,3659],{"class":92},[82,143177,4078],{"class":53863},[82,143179,57799],{"class":2384},[82,143181,113],{"class":92},[82,143183,136613],{"class":96},[82,143185,57807],{"class":2384},[82,143187,113],{"class":92},[82,143189,136620],{"class":96},[82,143191,136623],{"class":2384},[82,143193,113],{"class":92},[82,143195,136628],{"class":96},[82,143197,53870],{"class":92},[19,143199,143200,143201,143204],{},"2 号盒子 ",[32,143202,143203],{},"recom_bd"," ，注意里面的小竖线",[3755,143206,143207,143218,143221,143226,143231],{},[29,143208,143209,143210,143212,143213,143215,143216],{},"右侧结构里面放 ",[32,143211,3755],{}," 包含 4个 ",[32,143214,29],{},"，每个li里面包含一个",[32,143217,4078],{},[29,143219,143220],{},"直接利用切片工具把里面的内容当成一张图片",[29,143222,141596,143223,143225],{},[32,143224,29],{}," 设置浮动",[29,143227,141596,143228,143230],{},[32,143229,4078],{}," 设置宽高，宽度 248px，高度 163px",[29,143232,143233,143234,142794,143237,143239,143240,143242,143243],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[32,143235,143236],{},"top 10px",[32,143238,29],{},"设置相对定位（注意，最后一个",[32,143241,29],{},"不用设置伪元素），可以利用 ",[32,143244,143245],{},"nth-child(-n+3){...}",[19,143247,142466],{},[73,143249,143250],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,143251,143252,143260,143270,143280],{"__ignoreMap":78},[82,143253,143254,143256,143258],{"class":84,"line":85},[82,143255,54173],{"class":53863},[82,143257,140097],{"class":2384},[82,143259,1349],{"class":92},[82,143261,143262,143264,143266,143268],{"class":84,"line":157},[82,143263,140104],{"class":88},[82,143265,1357],{"class":92},[82,143267,1793],{"class":96},[82,143269,3909],{"class":92},[82,143271,143272,143274,143276,143278],{"class":84,"line":404},[82,143273,130712],{"class":88},[82,143275,1357],{"class":92},[82,143277,63427],{"class":88},[82,143279,3909],{"class":92},[82,143281,143282],{"class":84,"line":413},[82,143283,1391],{"class":92},[19,143285,142555],{},[73,143287,143288],{"className":129096,"code":140938,"language":129098,"meta":78,"style":78},[32,143289,143290,143298,143308,143318],{"__ignoreMap":78},[82,143291,143292,143294,143296],{"class":84,"line":85},[82,143293,54173],{"class":53863},[82,143295,140097],{"class":2384},[82,143297,1349],{"class":92},[82,143299,143300,143302,143304,143306],{"class":84,"line":157},[82,143301,140104],{"class":88},[82,143303,1357],{"class":92},[82,143305,1793],{"class":96},[82,143307,3909],{"class":92},[82,143309,143310,143312,143314,143316],{"class":84,"line":404},[82,143311,130712],{"class":88},[82,143313,1357],{"class":92},[82,143315,63427],{"class":88},[82,143317,3909],{"class":92},[82,143319,143320],{"class":84,"line":413},[82,143321,1391],{"class":92},[65,143323,143325],{"id":143324},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[4078,143327],{"style":128952,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143330,143331],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143333,143334],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143336,143337,143340],{},[32,143338,143339],{},"box_hd"," 制作",[19,143342,143120,143343,143345],{},[32,143344,143339],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[4078,143347],{"style":128952,"src":143348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3755,143350,143351,143356,143361,143364],{},[29,143352,143353,143355],{},[32,143354,143339],{}," 给 30px 的高度，2个像素的下边框",[29,143357,143358,143359],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[32,143360,141607],{},[29,143362,143363],{},"左侧盒左浮动，右侧盒子右浮动",[29,143365,143366,143368,143369,143371],{},[32,143367,323],{},"标签之间的距离用左右的",[32,143370,33459],{},"撑开即可",[19,143373,143374],{},"结构代码",[73,143376,143377],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143378,143379,143385,143395],{"__ignoreMap":78},[82,143380,143381,143383],{"class":84,"line":85},[82,143382,132944],{"class":2384},[82,143384,1349],{"class":92},[82,143386,143387,143389,143391,143393],{"class":84,"line":157},[82,143388,133576],{"class":88},[82,143390,1357],{"class":92},[82,143392,26320],{"class":88},[82,143394,3909],{"class":92},[82,143396,143397],{"class":84,"line":404},[82,143398,1391],{"class":92},[19,143400,143401],{},"样式代码",[73,143403,143404],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143405,143406,143412,143422],{"__ignoreMap":78},[82,143407,143408,143410],{"class":84,"line":85},[82,143409,132944],{"class":2384},[82,143411,1349],{"class":92},[82,143413,143414,143416,143418,143420],{"class":84,"line":157},[82,143415,133576],{"class":88},[82,143417,1357],{"class":92},[82,143419,26320],{"class":88},[82,143421,3909],{"class":92},[82,143423,143424],{"class":84,"line":404},[82,143425,1391],{"class":92},[19,143427,143428,143340],{},[32,143429,143430],{},"box_bd",[19,143432,143433],{},"2 号盒子 box_bd，不要给高度",[4078,143435],{"style":128952,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143438,143439],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143441,143442],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143444,143445],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3755,143447,143448,143460,143476],{},[29,143449,143450,143452,143453,143456,143457,143459],{},[32,143451,143430],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[32,143454,143455],{},"tab_content","，在",[32,143458,143455],{}," 里面包裹tab选项卡对应的内容",[29,143461,143462,143463,143466,143467,143469,143470,143472,143473,143475],{},"内容被一个大盒子包裹（",[32,143464,143465],{},"tab_list_item","），里面是 ",[32,143468,3755],{}," 包裹 5个 ",[32,143471,29],{},"，每个",[32,143474,29],{},"设置对应的宽度，然后设置浮动",[29,143477,143478,143479,143481,143482,143484,143485],{},"而这5个",[32,143480,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[32,143483,29],{},"设置",[3755,143486,143487,143505,143508],{},[29,143488,143489,143490,143492,143493,143495,143496,143498,143499,143501,143502,143504],{},"第一个小 ",[32,143491,29],{}," 分为上下结构，上面是 ",[32,143494,3755],{}," 包裹 ",[32,143497,29],{}," ，",[32,143500,29],{},"里面包裹 ",[32,143503,323],{},"，下面插入一张图片",[29,143506,143507],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,143509,143510,143511,143513,143514,143516,143517,143519],{},"后面的小 ",[32,143512,29],{}," 里面先放一个",[32,143515,323],{},"标签，然后在",[32,143518,323],{},"标签里面插入图片即可",[19,143521,143374],{},[73,143523,143524],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,143525,143526],{"__ignoreMap":78},[82,143527,143528,143530,143532,143534,143536,143538,143540,143542,143544,143546,143548,143550],{"class":84,"line":85},[82,143529,3659],{"class":92},[82,143531,4078],{"class":53863},[82,143533,57799],{"class":2384},[82,143535,113],{"class":92},[82,143537,136613],{"class":96},[82,143539,57807],{"class":2384},[82,143541,113],{"class":92},[82,143543,136620],{"class":96},[82,143545,136623],{"class":2384},[82,143547,113],{"class":92},[82,143549,136628],{"class":96},[82,143551,53870],{"class":92},[19,143553,143401],{},[73,143555,143556],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,143557,143558],{"__ignoreMap":78},[82,143559,143560,143562,143564,143566,143568,143570,143572,143574,143576,143578,143580,143582],{"class":84,"line":85},[82,143561,3659],{"class":92},[82,143563,4078],{"class":53863},[82,143565,57799],{"class":2384},[82,143567,113],{"class":92},[82,143569,136613],{"class":96},[82,143571,57807],{"class":2384},[82,143573,113],{"class":92},[82,143575,136620],{"class":96},[82,143577,136623],{"class":2384},[82,143579,113],{"class":92},[82,143581,136628],{"class":96},[82,143583,53870],{"class":92},[19,143585,143586],{},"tab栏切换需求！！！！！！介绍：",[4078,143588],{"style":128952,"src":143589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3755,143591,143592,143600,143606,143609],{},[29,143593,143594,143597,143598],{},[32,143595,143596],{},"tab","栏的布局是 ",[32,143599,141607],{},[29,143601,143602,143603,143605],{},"有多少个",[32,143604,143596],{},"选项卡，那么对应就有多少个内容",[29,143607,143608],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,143610,143611,143612,143615,143616,143618,143619,143621],{},"等后面我们学习了",[32,143613,143614],{},"js","之后，我们就会配合",[32,143617,143614],{},"来实现，",[32,143620,143596],{},"栏的切换",[14,143623,143625],{"id":143624},"_162-列表制作","16.2 列表制作",[65,143627,143629],{"id":143628},"_1621-准备工作","16.2.1 准备工作",[3755,143631,143632,143635,143638,143641],{},[29,143633,143634],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,143636,143637],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,143639,143640],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,143642,143643],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[65,143645,143647,143648,103569,143650,143652],{"id":143646},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[32,143649,134101],{},[32,143651,56273],{}," 修改",[4078,143654],{"style":128952,"src":143655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3755,143657,143658],{},[29,143659,143660],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143662,142466],{},[73,143664,143665],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,143666,143667,143671,143685,143689,143703,143707,143721,143725,143739,143743],{"__ignoreMap":78},[82,143668,143669],{"class":84,"line":85},[82,143670,134535],{"class":2828},[82,143672,143673,143675,143677,143679,143681,143683],{"class":84,"line":157},[82,143674,134540],{"class":2384},[82,143676,82361],{"class":92},[82,143678,131456],{"class":88},[82,143680,1357],{"class":92},[82,143682,134549],{"class":88},[82,143684,132026],{"class":92},[82,143686,143687],{"class":84,"line":404},[82,143688,134556],{"class":2828},[82,143690,143691,143693,143695,143697,143699,143701],{"class":84,"line":413},[82,143692,134561],{"class":2384},[82,143694,82361],{"class":92},[82,143696,131456],{"class":88},[82,143698,1357],{"class":92},[82,143700,57324],{"class":88},[82,143702,132026],{"class":92},[82,143704,143705],{"class":84,"line":508},[82,143706,134576],{"class":2828},[82,143708,143709,143711,143713,143715,143717,143719],{"class":84,"line":513},[82,143710,134581],{"class":2384},[82,143712,82361],{"class":92},[82,143714,131456],{"class":88},[82,143716,1357],{"class":92},[82,143718,57391],{"class":88},[82,143720,132026],{"class":92},[82,143722,143723],{"class":84,"line":1388},[82,143724,134596],{"class":2828},[82,143726,143727,143729,143731,143733,143735,143737],{"class":84,"line":1394},[82,143728,134601],{"class":2384},[82,143730,82361],{"class":92},[82,143732,131456],{"class":88},[82,143734,1357],{"class":92},[82,143736,88787],{"class":88},[82,143738,132026],{"class":92},[82,143740,143741],{"class":84,"line":1399},[82,143742,134616],{"class":2828},[82,143744,143745,143747,143749,143751,143753,143755],{"class":84,"line":1430},[82,143746,134621],{"class":2384},[82,143748,82361],{"class":92},[82,143750,131456],{"class":88},[82,143752,1357],{"class":92},[82,143754,134630],{"class":88},[82,143756,132026],{"class":92},[19,143758,142555],{},[73,143760,143761],{"className":129096,"code":134528,"language":129098,"meta":78,"style":78},[32,143762,143763,143767,143781,143785,143799,143803,143817,143821,143835,143839],{"__ignoreMap":78},[82,143764,143765],{"class":84,"line":85},[82,143766,134535],{"class":2828},[82,143768,143769,143771,143773,143775,143777,143779],{"class":84,"line":157},[82,143770,134540],{"class":2384},[82,143772,82361],{"class":92},[82,143774,131456],{"class":88},[82,143776,1357],{"class":92},[82,143778,134549],{"class":88},[82,143780,132026],{"class":92},[82,143782,143783],{"class":84,"line":404},[82,143784,134556],{"class":2828},[82,143786,143787,143789,143791,143793,143795,143797],{"class":84,"line":413},[82,143788,134561],{"class":2384},[82,143790,82361],{"class":92},[82,143792,131456],{"class":88},[82,143794,1357],{"class":92},[82,143796,57324],{"class":88},[82,143798,132026],{"class":92},[82,143800,143801],{"class":84,"line":508},[82,143802,134576],{"class":2828},[82,143804,143805,143807,143809,143811,143813,143815],{"class":84,"line":513},[82,143806,134581],{"class":2384},[82,143808,82361],{"class":92},[82,143810,131456],{"class":88},[82,143812,1357],{"class":92},[82,143814,57391],{"class":88},[82,143816,132026],{"class":92},[82,143818,143819],{"class":84,"line":1388},[82,143820,134596],{"class":2828},[82,143822,143823,143825,143827,143829,143831,143833],{"class":84,"line":1394},[82,143824,134601],{"class":2384},[82,143826,82361],{"class":92},[82,143828,131456],{"class":88},[82,143830,1357],{"class":92},[82,143832,88787],{"class":88},[82,143834,132026],{"class":92},[82,143836,143837],{"class":84,"line":1399},[82,143838,134616],{"class":2828},[82,143840,143841,143843,143845,143847,143849,143851],{"class":84,"line":1430},[82,143842,134621],{"class":2384},[82,143844,82361],{"class":92},[82,143846,131456],{"class":88},[82,143848,1357],{"class":92},[82,143850,134630],{"class":88},[82,143852,132026],{"class":92},[3755,143854,143855,143866],{},[29,143856,143857,143858,143861,143862,103569,143864],{},"1 号盒子左侧浮动 ",[32,143859,143860],{},"sk_list"," 里面包含 ",[32,143863,3755],{},[32,143865,29],{},[29,143867,143868,143869,143861,143872,103569,143874],{},"2 号盒子左侧浮动 ",[32,143870,143871],{},"sk_con",[32,143873,3755],{},[32,143875,29],{},[19,143877,142466],{},[73,143879,143880],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143881,143882,143888,143898],{"__ignoreMap":78},[82,143883,143884,143886],{"class":84,"line":85},[82,143885,132944],{"class":2384},[82,143887,1349],{"class":92},[82,143889,143890,143892,143894,143896],{"class":84,"line":157},[82,143891,133576],{"class":88},[82,143893,1357],{"class":92},[82,143895,26320],{"class":88},[82,143897,3909],{"class":92},[82,143899,143900],{"class":84,"line":404},[82,143901,1391],{"class":92},[19,143903,142555],{},[73,143905,143906],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143907,143908,143914,143924],{"__ignoreMap":78},[82,143909,143910,143912],{"class":84,"line":85},[82,143911,132944],{"class":2384},[82,143913,1349],{"class":92},[82,143915,143916,143918,143920,143922],{"class":84,"line":157},[82,143917,133576],{"class":88},[82,143919,1357],{"class":92},[82,143921,26320],{"class":88},[82,143923,3909],{"class":92},[82,143925,143926],{"class":84,"line":404},[82,143927,1391],{"class":92},[65,143929,143931,143932],{"id":143930},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[32,143933,143934],{},"sk_container",[4078,143936],{"style":128952,"src":143937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3755,143939,143940,143945],{},[29,143941,143120,143942,143944],{},[32,143943,143934],{}," 给宽度 1200，不要给高度",[29,143946,143947],{},"一定不要忘记清除浮动",[19,143949,142466],{},[73,143951,143952],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,143953,143954,143960,143970],{"__ignoreMap":78},[82,143955,143956,143958],{"class":84,"line":85},[82,143957,132944],{"class":2384},[82,143959,1349],{"class":92},[82,143961,143962,143964,143966,143968],{"class":84,"line":157},[82,143963,133576],{"class":88},[82,143965,1357],{"class":92},[82,143967,26320],{"class":88},[82,143969,3909],{"class":92},[82,143971,143972],{"class":84,"line":404},[82,143973,1391],{"class":92},[26,143975,143976],{},[29,143977,143978],{},"sk_hd制作",[3755,143980,143981],{},[29,143982,143200,143983,143986],{},[32,143984,143985],{},"sk_hd"," ，插入图片即可",[19,143988,142466],{},[73,143990,143991],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,143992,143993],{"__ignoreMap":78},[82,143994,143995,143997,143999,144001,144003,144005,144007,144009,144011,144013,144015,144017],{"class":84,"line":85},[82,143996,3659],{"class":92},[82,143998,4078],{"class":53863},[82,144000,57799],{"class":2384},[82,144002,113],{"class":92},[82,144004,136613],{"class":96},[82,144006,57807],{"class":2384},[82,144008,113],{"class":92},[82,144010,136620],{"class":96},[82,144012,136623],{"class":2384},[82,144014,113],{"class":92},[82,144016,136628],{"class":96},[82,144018,53870],{"class":92},[26,144020,144021],{"start":157},[29,144022,144023],{},"sk_bd制作",[3755,144025,144026],{},[29,144027,144028,144029,144032,144033,103569,144035,144037],{},"3 号盒子 ",[32,144030,144031],{},"sk_bd"," ，里面包含很多的 ",[32,144034,3755],{},[32,144036,29],{},[3755,144038,144039,144048],{},[29,144040,144041,144042,144044,144045,144047],{},"当鼠标移入到 ",[32,144043,29],{}," 上面的时候显示红色的边框，在这里先给 ",[32,144046,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,144049,144050,144051,144053,144054,144056,144057,144060,144061,144063],{},"由于给每个 ",[32,144052,29],{}," 都设置了外边距，导致一行的最后一个 ",[32,144055,29],{}," 掉了下来，在这里我们利用 ",[32,144058,144059],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[32,144062,29],{},"，去掉外边距就好了",[19,144065,142466],{},[73,144067,144068],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,144069,144070,144076,144088],{"__ignoreMap":78},[82,144071,144072,144074],{"class":84,"line":85},[82,144073,54173],{"class":53863},[82,144075,1349],{"class":92},[82,144077,144078,144080,144082,144084,144086],{"class":84,"line":157},[82,144079,73026],{"class":88},[82,144081,1357],{"class":92},[82,144083,2244],{"class":88},[82,144085,54118],{"class":88},[82,144087,3909],{"class":92},[82,144089,144090],{"class":84,"line":404},[82,144091,1391],{"class":92},[19,144093,142555],{},[73,144095,144096],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,144097,144098,144104,144116],{"__ignoreMap":78},[82,144099,144100,144102],{"class":84,"line":85},[82,144101,54173],{"class":53863},[82,144103,1349],{"class":92},[82,144105,144106,144108,144110,144112,144114],{"class":84,"line":157},[82,144107,73026],{"class":88},[82,144109,1357],{"class":92},[82,144111,2244],{"class":88},[82,144113,54118],{"class":88},[82,144115,3909],{"class":92},[82,144117,144118],{"class":84,"line":404},[82,144119,1391],{"class":92},[14,144121,144123],{"id":144122},"_163-注册页面制作","16.3 注册页面制作",[4078,144125],{"style":128952,"src":144126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144128,144129,144131],{},[2913,144130,11616],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[4078,144133],{"style":128952,"src":144134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[65,144136,144138],{"id":144137},"_1631-准备工作","16.3.1 准备工作",[3755,144140,144141,144144],{},[29,144142,144143],{},"创建register.html，引入 base.css，引入favicon图标",[29,144145,144146],{},"创建register.css ，在html页面进行引入",[65,144148,144150,144151,144153],{"id":144149},"_1632-header-头部实现","16.3.2 ",[32,144152,134101],{}," 头部实现",[3755,144155,144156,144159],{},[29,144157,144158],{},"整个内容用 版心 进行包裹",[29,144160,144161],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144163,142466],{},[73,144165,144166],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,144167,144168],{"__ignoreMap":78},[82,144169,144170,144172,144174,144176,144178,144180,144182,144184,144186,144188,144190,144192],{"class":84,"line":85},[82,144171,3659],{"class":92},[82,144173,4078],{"class":53863},[82,144175,57799],{"class":2384},[82,144177,113],{"class":92},[82,144179,136613],{"class":96},[82,144181,57807],{"class":2384},[82,144183,113],{"class":92},[82,144185,136620],{"class":96},[82,144187,136623],{"class":2384},[82,144189,113],{"class":92},[82,144191,136628],{"class":96},[82,144193,53870],{"class":92},[19,144195,142555],{},[73,144197,144198],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,144199,144200],{"__ignoreMap":78},[82,144201,144202,144204,144206,144208,144210,144212,144214,144216,144218,144220,144222,144224],{"class":84,"line":85},[82,144203,3659],{"class":92},[82,144205,4078],{"class":53863},[82,144207,57799],{"class":2384},[82,144209,113],{"class":92},[82,144211,136613],{"class":96},[82,144213,57807],{"class":2384},[82,144215,113],{"class":92},[82,144217,136620],{"class":96},[82,144219,136623],{"class":2384},[82,144221,113],{"class":92},[82,144223,136628],{"class":96},[82,144225,53870],{"class":92},[65,144227,144229,144230,144233],{"id":144228},"_1633-registerarea-主体模块实现","16.3.3 ",[32,144231,144232],{},"registerarea"," 主体模块实现",[4078,144235],{"style":128952,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144238,144239],{},"整个大盒子 高度为 522px，设置4个边框",[19,144241,142466],{},[73,144243,144244],{"className":129096,"code":133253,"language":129098,"meta":78,"style":78},[32,144245,144246,144252,144268],{"__ignoreMap":78},[82,144247,144248,144250],{"class":84,"line":85},[82,144249,54173],{"class":53863},[82,144251,1349],{"class":92},[82,144253,144254,144256,144258,144260,144262,144264,144266],{"class":84,"line":157},[82,144255,73452],{"class":88},[82,144257,1357],{"class":92},[82,144259,2283],{"class":88},[82,144261,54054],{"class":112},[82,144263,54083],{"class":88},[82,144265,132488],{"class":88},[82,144267,3909],{"class":92},[82,144269,144270],{"class":84,"line":404},[82,144271,1391],{"class":92},[19,144273,142555],{},[73,144275,144276],{"className":129096,"code":133253,"language":129098,"meta":78,"style":78},[32,144277,144278,144284,144300],{"__ignoreMap":78},[82,144279,144280,144282],{"class":84,"line":85},[82,144281,54173],{"class":53863},[82,144283,1349],{"class":92},[82,144285,144286,144288,144290,144292,144294,144296,144298],{"class":84,"line":157},[82,144287,73452],{"class":88},[82,144289,1357],{"class":92},[82,144291,2283],{"class":88},[82,144293,54054],{"class":112},[82,144295,54083],{"class":88},[82,144297,132488],{"class":88},[82,144299,3909],{"class":92},[82,144301,144302],{"class":84,"line":404},[82,144303,1391],{"class":92},[19,144305,144306],{},"1号盒子 是一个 h3 标签，放标题",[3755,144308,144309],{},[29,144310,144311],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144313,142466],{},[73,144315,144316],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,144317,144318,144324,144334],{"__ignoreMap":78},[82,144319,144320,144322],{"class":84,"line":85},[82,144321,132944],{"class":2384},[82,144323,1349],{"class":92},[82,144325,144326,144328,144330,144332],{"class":84,"line":157},[82,144327,133576],{"class":88},[82,144329,1357],{"class":92},[82,144331,26320],{"class":88},[82,144333,3909],{"class":92},[82,144335,144336],{"class":84,"line":404},[82,144337,1391],{"class":92},[19,144339,142555],{},[73,144341,144342],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,144343,144344,144350,144360],{"__ignoreMap":78},[82,144345,144346,144348],{"class":84,"line":85},[82,144347,132944],{"class":2384},[82,144349,1349],{"class":92},[82,144351,144352,144354,144356,144358],{"class":84,"line":157},[82,144353,133576],{"class":88},[82,144355,1357],{"class":92},[82,144357,26320],{"class":88},[82,144359,3909],{"class":92},[82,144361,144362],{"class":84,"line":404},[82,144363,1391],{"class":92},[19,144365,144366],{},"2号盒子 里面放注册的内容",[3755,144368,144369,144372,144381,144395,144408,144411,144414,144432,144446],{},[29,144370,144371],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,144373,144374,144375,144377,144378,144380],{},"里面的内容利用 ",[32,144376,3755],{}," 包含 ",[32,144379,29],{}," 来实现的（不需要用表格）",[29,144382,141610,144383,144385,144386,144388,144389,144391,144392,144394],{},[32,144384,29],{}," 里面，左侧放 ",[32,144387,36176],{}," 标签， 中间放",[32,144390,56381],{}," 标签， 右侧放 ",[32,144393,82],{}," 提示信息",[29,144396,144397,144398,144400,144401,144403,144404,144407],{},"左侧 ",[32,144399,36176],{},"里面的文字都是右对齐，我们可以给",[32,144402,36176],{},"设置一个宽度（88px），然后利用",[32,144405,144406],{},"text-align"," 来设置右对齐",[29,144409,144410],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,144412,144413],{},"右侧 span修饰一下文字颜色",[29,144415,144416,144417],{},"提示信息的样式优化",[3755,144418,144419,144422,144425],{},[29,144420,144421],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,144423,144424],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,144426,144427,144428,144431],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[32,144429,144430],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,144433,144434,144435],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3755,144436,144437,144443],{},[29,144438,144439,144440,144442],{},"设置 ",[32,144441,26137],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,144444,144445],{},"分别设置 背景颜色",[29,144447,144448,144449,144451],{},"同意协议 和 完成注册 都是用 ",[32,144450,29],{}," 进行包裹",[19,144453,142466],{},[73,144455,144456],{"className":129096,"code":143039,"language":129098,"meta":78,"style":78},[32,144457,144458,144464,144474],{"__ignoreMap":78},[82,144459,144460,144462],{"class":84,"line":85},[82,144461,54173],{"class":53863},[82,144463,1349],{"class":92},[82,144465,144466,144468,144470,144472],{"class":84,"line":157},[82,144467,73434],{"class":88},[82,144469,1357],{"class":92},[82,144471,143056],{"class":88},[82,144473,3909],{"class":92},[82,144475,144476],{"class":84,"line":404},[82,144477,1391],{"class":92},[19,144479,142555],{},[73,144481,144482],{"className":129096,"code":143039,"language":129098,"meta":78,"style":78},[32,144483,144484,144490,144500],{"__ignoreMap":78},[82,144485,144486,144488],{"class":84,"line":85},[82,144487,54173],{"class":53863},[82,144489,1349],{"class":92},[82,144491,144492,144494,144496,144498],{"class":84,"line":157},[82,144493,73434],{"class":88},[82,144495,1357],{"class":92},[82,144497,143056],{"class":88},[82,144499,3909],{"class":92},[82,144501,144502],{"class":84,"line":404},[82,144503,1391],{"class":92},[65,144505,144507],{"id":144506},"_1634-底部实现","16.3.4 底部实现",[19,144509,142466],{},[73,144511,144512],{"className":129096,"code":143039,"language":129098,"meta":78,"style":78},[32,144513,144514,144520,144530],{"__ignoreMap":78},[82,144515,144516,144518],{"class":84,"line":85},[82,144517,54173],{"class":53863},[82,144519,1349],{"class":92},[82,144521,144522,144524,144526,144528],{"class":84,"line":157},[82,144523,73434],{"class":88},[82,144525,1357],{"class":92},[82,144527,143056],{"class":88},[82,144529,3909],{"class":92},[82,144531,144532],{"class":84,"line":404},[82,144533,1391],{"class":92},[19,144535,142555],{},[73,144537,144538],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,144539,144540,144544,144558,144562],{"__ignoreMap":78},[82,144541,144542],{"class":84,"line":85},[82,144543,133207],{"class":2828},[82,144545,144546,144548,144550,144552,144554,144556],{"class":84,"line":157},[82,144547,3659],{"class":92},[82,144549,54173],{"class":53863},[82,144551,56046],{"class":2384},[82,144553,113],{"class":92},[82,144555,133220],{"class":96},[82,144557,53870],{"class":92},[82,144559,144560],{"class":84,"line":404},[82,144561,133227],{"class":92},[82,144563,144564,144566,144568],{"class":84,"line":413},[82,144565,54347],{"class":92},[82,144567,54173],{"class":53863},[82,144569,53870],{"class":92},[14,144571,144573],{"id":144572},"_164-项目总结","16.4 项目总结",[26,144575,144576,144579,144582,144585],{},[29,144577,144578],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,144580,144581],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,144583,144584],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,144586,144587],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[4078,144589],{"style":128952,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,144592,144593],{"start":508},[29,144594,144595],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[4078,144597],{"style":128952,"src":144598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,144600,144601],{"start":513},[29,144602,144603],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[4078,144605],{"style":128952,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[73,144608,144609],{"className":129843,"code":139253,"language":129845,"meta":78,"style":78},[32,144610,144611],{"__ignoreMap":78},[82,144612,144613,144615,144617,144619,144621,144623,144625,144627,144629,144631,144633,144635],{"class":84,"line":85},[82,144614,3659],{"class":92},[82,144616,56381],{"class":53863},[82,144618,56384],{"class":2384},[82,144620,113],{"class":92},[82,144622,65256],{"class":96},[82,144624,17506],{"class":2384},[82,144626,113],{"class":92},[82,144628,139274],{"class":96},[82,144630,63578],{"class":2384},[82,144632,113],{"class":92},[82,144634,139281],{"class":96},[82,144636,53870],{"class":92},[26,144638,144639,144642],{"start":1388},[29,144640,144641],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,144643,144644],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2671,144646,144647],{},"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":78,"searchDepth":157,"depth":157,"links":144649},[144650,144655,144662,144670],{"id":142276,"depth":157,"text":142277,"children":144651},[144652,144653,144654],{"id":142280,"depth":404,"text":142281},{"id":143011,"depth":404,"text":143012},{"id":143324,"depth":404,"text":143325},{"id":143624,"depth":157,"text":143625,"children":144656},[144657,144658,144660],{"id":143628,"depth":404,"text":143629},{"id":143646,"depth":404,"text":144659},"16.2.2 列表页 header 和 nav 修改",{"id":143930,"depth":404,"text":144661},"16.2.3 列表页主体 sk_container",{"id":144122,"depth":157,"text":144123,"children":144663},[144664,144665,144667,144669],{"id":144137,"depth":404,"text":144138},{"id":144149,"depth":404,"text":144666},"16.3.2 header 头部实现",{"id":144228,"depth":404,"text":144668},"16.3.3 registerarea 主体模块实现",{"id":144506,"depth":404,"text":144507},{"id":144572,"depth":157,"text":144573},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142268,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144677,"title":144678,"body":144679,"description":2699,"extension":2700,"meta":144787,"navigation":485,"path":144788,"seo":144789,"stem":144790,"__hash__":144791},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144680,"toc":144782},[144681,144684,144688,144691,144694,144703,144712,144716,144721,144728,144746,144749,144752,144755,144758,144761,144764,144767,144770,144773,144776,144779],[10,144682,144678],{"id":144683},"_17-web服务器与网站发布",[14,144685,144687],{"id":144686},"_171-web服务器","17.1 Web服务器",[19,144689,144690],{},"把自己网站上传到服务器上，可以让其他人访问",[4078,144692],{"style":128952,"src":144693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144695,144696,144699,144700],{},[2913,144697,144698],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2913,144701,144702],{},"Web 服务器等",[19,144704,144705,144706,103569,144709,28324],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2913,144707,144708],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2913,144710,144711],{},"远程服务器",[65,144713,144715],{"id":144714},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144717,144718],{},[2913,144719,144720],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144722,144723,144724],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[323,144725,144726],{"href":144726,"rel":144727},"http:\u002F\u002Ffree.3v.do\u002F",[26449],[3755,144729,144730,144733,144736,144743],{},[29,144731,144732],{},"去免费空间网站注册账号。",[29,144734,144735],{},"记录下主机名、用户名、密码、域名。",[29,144737,144738,144739,144742],{},"利用 ",[32,144740,144741],{},"utftp"," 软件 上传网站到远程服务器",[29,144744,144745],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144747,144748],{},"使用软件上传，对上传软件文件进行解压",[4078,144750],{"style":128952,"src":144751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[4078,144753],{"style":128952,"src":144754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144756,144757],{},"输入刚刚申请的服务器账号信息：",[4078,144759],{"style":128952,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[4078,144762],{"style":128952,"src":144763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[4078,144765],{"style":128952,"src":144766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[4078,144768],{"style":128952,"src":144769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144771,144772],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[4078,144774],{"style":128952,"src":144775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144777,144778],{},"浏览器输入域名即可访问",[19,144780,144781],{},"首页一定必须是index",{"title":78,"searchDepth":157,"depth":157,"links":144783},[144784],{"id":144686,"depth":157,"text":144687,"children":144785},[144786],{"id":144714,"depth":404,"text":144715},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144678,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144793,"title":144794,"body":144795,"description":2699,"extension":2700,"meta":145722,"navigation":485,"path":145723,"seo":145724,"stem":145725,"__hash__":145726},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144796,"toc":145705},[144797,144800,144804,144807,144810,144821,144824,144828,144832,144837,144840,144843,144846,144849,144853,144879,144883,144887,144890,144893,144897,144930,144934,144937,144940,145004,145008,145012,145015,145018,145021,145025,145070,145074,145077,145107,145111,145115,145118,145121,145125,145128,145197,145200,145308,145310,145316,145320,145323,145326,145422,145425,145429,145453,145457,145460,145464,145467,145471,145474,145477,145480,145483,145487,145490,145493,145497,145501,145504,145507,145510,145513,145517,145520,145524,145527,145530,145575,145579,145583,145586,145589,145592,145624,145628,145631,145665,145669,145672,145702],[10,144798,144794],{"id":144799},"_18-2d动画与3d转换",[14,144801,144803],{"id":144802},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144805,144806],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144808,144809],{},"转换（transform）你可以简单理解为变形",[3755,144811,144812,144815,144818],{},[29,144813,144814],{},"移动：translate",[29,144816,144817],{},"旋转：rotate",[29,144819,144820],{},"缩放：scale",[4078,144822],{"style":128952,"src":144823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[65,144825,144827],{"id":144826},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24582,144829,144831],{"id":144830},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144833,144834,144835],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2913,144836,135755],{},[4078,144838],{"style":128952,"src":144839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144841,144842],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144844,144845],{},"对于行内元素无效",[19,144847,144848],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24582,144850,144852],{"id":144851},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[73,144854,144855],{"className":129096,"code":141285,"language":129098,"meta":78,"style":78},[32,144856,144857,144863,144875],{"__ignoreMap":78},[82,144858,144859,144861],{"class":84,"line":85},[82,144860,54173],{"class":53863},[82,144862,1349],{"class":92},[82,144864,144865,144867,144869,144871,144873],{"class":84,"line":157},[82,144866,73026],{"class":88},[82,144868,1357],{"class":92},[82,144870,2244],{"class":88},[82,144872,54118],{"class":88},[82,144874,3909],{"class":92},[82,144876,144877],{"class":84,"line":404},[82,144878,1391],{"class":92},[65,144880,144882],{"id":144881},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24582,144884,144886],{"id":144885},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144888,144889],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[4078,144891],{"style":128952,"src":144892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24582,144894,144896],{"id":144895},"_18122-旋转效果","18.1.2.2 旋转效果",[73,144898,144900],{"className":129096,"code":144899,"language":129098,"meta":78,"style":78},"div {\n  transform: rotate(45deg);\n}\n",[32,144901,144902,144908,144926],{"__ignoreMap":78},[82,144903,144904,144906],{"class":84,"line":85},[82,144905,54173],{"class":53863},[82,144907,1349],{"class":92},[82,144909,144910,144912,144914,144917,144919,144921,144924],{"class":84,"line":157},[82,144911,139080],{"class":88},[82,144913,1357],{"class":92},[82,144915,144916],{"class":88},"rotate",[82,144918,93],{"class":92},[82,144920,3285],{"class":88},[82,144922,144923],{"class":112},"deg",[82,144925,5318],{"class":92},[82,144927,144928],{"class":84,"line":404},[82,144929,1391],{"class":92},[24582,144931,144933],{"id":144932},"_18123-三角做法","18.1.2.3 三角做法",[19,144935,144936],{},"该下标当经过最外层大盒子时会实现向上反转",[4078,144938],{"style":128952,"src":144939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[73,144941,144942],{"className":129096,"code":137616,"language":129098,"meta":78,"style":78},[32,144943,144944,144948,144954,144964,144974,144990,145000],{"__ignoreMap":78},[82,144945,144946],{"class":84,"line":85},[82,144947,137623],{"class":2828},[82,144949,144950,144952],{"class":84,"line":157},[82,144951,137628],{"class":2384},[82,144953,1349],{"class":92},[82,144955,144956,144958,144960,144962],{"class":84,"line":404},[82,144957,73124],{"class":88},[82,144959,1357],{"class":92},[82,144961,2244],{"class":88},[82,144963,3909],{"class":92},[82,144965,144966,144968,144970,144972],{"class":84,"line":413},[82,144967,73344],{"class":88},[82,144969,1357],{"class":92},[82,144971,2244],{"class":88},[82,144973,3909],{"class":92},[82,144975,144976,144978,144980,144982,144984,144986,144988],{"class":84,"line":508},[82,144977,73452],{"class":88},[82,144979,1357],{"class":92},[82,144981,440],{"class":88},[82,144983,54054],{"class":112},[82,144985,54083],{"class":88},[82,144987,66548],{"class":88},[82,144989,3909],{"class":92},[82,144991,144992,144994,144996,144998],{"class":84,"line":513},[82,144993,137671],{"class":88},[82,144995,1357],{"class":92},[82,144997,64927],{"class":88},[82,144999,3909],{"class":92},[82,145001,145002],{"class":84,"line":1388},[82,145003,1391],{"class":92},[65,145005,145007],{"id":145006},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24582,145009,145011],{"id":145010},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,145013,145014],{},"设置中心点",[4078,145016],{"style":128952,"src":145017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,145019,145020],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24582,145022,145024],{"id":145023},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[73,145026,145028],{"className":129096,"code":145027,"language":129098,"meta":78,"style":78},"\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",[32,145029,145030,145035,145041,145056,145061,145066],{"__ignoreMap":78},[82,145031,145032],{"class":84,"line":85},[82,145033,145034],{"class":2828},"\u002F* 转换中心点 *\u002F\n",[82,145036,145037,145039],{"class":84,"line":157},[82,145038,54173],{"class":53863},[82,145040,1349],{"class":92},[82,145042,145043,145046,145048,145050,145052,145054],{"class":84,"line":404},[82,145044,145045],{"class":88},"  transform-origin",[82,145047,1357],{"class":92},[82,145049,54154],{"class":88},[82,145051,19728],{"class":88},[82,145053,132959],{"class":92},[82,145055,137769],{"class":2828},[82,145057,145058],{"class":84,"line":413},[82,145059,145060],{"class":2828},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[82,145062,145063],{"class":84,"line":508},[82,145064,145065],{"class":2828},"  \u002F* transform-origin: left top; *\u002F\n",[82,145067,145068],{"class":84,"line":513},[82,145069,1391],{"class":92},[24582,145071,145073],{"id":145072},"_18133-旋转案例","18.1.3.3 旋转案例",[4078,145075],{"style":128952,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[73,145078,145079],{"className":129096,"code":144899,"language":129098,"meta":78,"style":78},[32,145080,145081,145087,145103],{"__ignoreMap":78},[82,145082,145083,145085],{"class":84,"line":85},[82,145084,54173],{"class":53863},[82,145086,1349],{"class":92},[82,145088,145089,145091,145093,145095,145097,145099,145101],{"class":84,"line":157},[82,145090,139080],{"class":88},[82,145092,1357],{"class":92},[82,145094,144916],{"class":88},[82,145096,93],{"class":92},[82,145098,3285],{"class":88},[82,145100,144923],{"class":112},[82,145102,5318],{"class":92},[82,145104,145105],{"class":84,"line":404},[82,145106,1391],{"class":92},[65,145108,145110],{"id":145109},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24582,145112,145114],{"id":145113},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145116,145117],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[4078,145119],{"style":128952,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24582,145122,145124],{"id":145123},"_18142-分页按钮","18.1.4.2 分页按钮",[4078,145126],{"style":128952,"src":145127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[73,145129,145131],{"className":129096,"code":145130,"language":129098,"meta":78,"style":78},"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",[32,145132,145133,145139,145155,145159,145163,145168,145174,145188,145193],{"__ignoreMap":78},[82,145134,145135,145137],{"class":84,"line":85},[82,145136,54173],{"class":53863},[82,145138,1349],{"class":92},[82,145140,145141,145143,145145,145148,145150,145153],{"class":84,"line":157},[82,145142,139080],{"class":88},[82,145144,1357],{"class":92},[82,145146,145147],{"class":88},"scale",[82,145149,93],{"class":92},[82,145151,145152],{"class":88},"1.2",[82,145154,5318],{"class":92},[82,145156,145157],{"class":84,"line":404},[82,145158,1391],{"class":92},[82,145160,145161],{"class":84,"line":413},[82,145162,138557],{"class":92},[82,145164,145165],{"class":84,"line":508},[82,145166,145167],{"class":2828},"\u002F* 2D 缩放 *\u002F\n",[82,145169,145170,145172],{"class":84,"line":513},[82,145171,54173],{"class":53863},[82,145173,1349],{"class":92},[82,145175,145176,145178,145180,145182,145184,145186],{"class":84,"line":1388},[82,145177,139080],{"class":88},[82,145179,1357],{"class":92},[82,145181,145147],{"class":88},[82,145183,93],{"class":92},[82,145185,145152],{"class":88},[82,145187,5318],{"class":92},[82,145189,145190],{"class":84,"line":1394},[82,145191,145192],{"class":2828},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[82,145194,145195],{"class":84,"line":1399},[82,145196,1391],{"class":92},[19,145198,145199],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[73,145201,145203],{"className":129096,"code":145202,"language":129098,"meta":78,"style":78},"\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",[32,145204,145205,145210,145220,145241,145262,145266,145271,145277,145304],{"__ignoreMap":78},[82,145206,145207],{"class":84,"line":85},[82,145208,145209],{"class":2828},"\u002F* 定义动画 *\u002F\n",[82,145211,145212,145215,145218],{"class":84,"line":157},[82,145213,145214],{"class":112},"@keyframes",[82,145216,145217],{"class":108}," move",[82,145219,1349],{"class":92},[82,145221,145222,145225,145227,145229,145231,145234,145236,145238],{"class":84,"line":404},[82,145223,145224],{"class":2384},"  0%",[82,145226,82361],{"class":92},[82,145228,50697],{"class":88},[82,145230,1357],{"class":92},[82,145232,145233],{"class":88},"translateX",[82,145235,93],{"class":92},[82,145237,2244],{"class":88},[82,145239,145240],{"class":92},"); }\n",[82,145242,145243,145246,145248,145250,145252,145254,145256,145258,145260],{"class":84,"line":413},[82,145244,145245],{"class":2384},"  100%",[82,145247,82361],{"class":92},[82,145249,50697],{"class":88},[82,145251,1357],{"class":92},[82,145253,145233],{"class":88},[82,145255,93],{"class":92},[82,145257,3069],{"class":88},[82,145259,54054],{"class":112},[82,145261,145240],{"class":92},[82,145263,145264],{"class":84,"line":508},[82,145265,1391],{"class":92},[82,145267,145268],{"class":84,"line":513},[82,145269,145270],{"class":2828},"\u002F* 调用动画 *\u002F\n",[82,145272,145273,145275],{"class":84,"line":1388},[82,145274,54173],{"class":53863},[82,145276,1349],{"class":92},[82,145278,145279,145282,145284,145286,145288,145290,145292,145294,145296,145299,145302],{"class":84,"line":1394},[82,145280,145281],{"class":88},"  animation",[82,145283,1357],{"class":92},[82,145285,137782],{"class":88},[82,145287,27703],{"class":88},[82,145289,3446],{"class":112},[82,145291,81234],{"class":88},[82,145293,6688],{"class":88},[82,145295,3446],{"class":112},[82,145297,145298],{"class":88}," infinite",[82,145300,145301],{"class":88}," alternate",[82,145303,3909],{"class":92},[82,145305,145306],{"class":84,"line":1399},[82,145307,1391],{"class":92},[19,145309,145199],{},[73,145311,145314],{"className":145312,"code":145313,"language":7780},[7778],"\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",[32,145315,145313],{"__ignoreMap":78},[24582,145317,145319],{"id":145318},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145321,145322],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[4078,145324],{"style":128952,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[73,145327,145328],{"className":129096,"code":145202,"language":129098,"meta":78,"style":78},[32,145329,145330,145334,145342,145360,145380,145384,145388,145394,145418],{"__ignoreMap":78},[82,145331,145332],{"class":84,"line":85},[82,145333,145209],{"class":2828},[82,145335,145336,145338,145340],{"class":84,"line":157},[82,145337,145214],{"class":112},[82,145339,145217],{"class":108},[82,145341,1349],{"class":92},[82,145343,145344,145346,145348,145350,145352,145354,145356,145358],{"class":84,"line":404},[82,145345,145224],{"class":2384},[82,145347,82361],{"class":92},[82,145349,50697],{"class":88},[82,145351,1357],{"class":92},[82,145353,145233],{"class":88},[82,145355,93],{"class":92},[82,145357,2244],{"class":88},[82,145359,145240],{"class":92},[82,145361,145362,145364,145366,145368,145370,145372,145374,145376,145378],{"class":84,"line":413},[82,145363,145245],{"class":2384},[82,145365,82361],{"class":92},[82,145367,50697],{"class":88},[82,145369,1357],{"class":92},[82,145371,145233],{"class":88},[82,145373,93],{"class":92},[82,145375,3069],{"class":88},[82,145377,54054],{"class":112},[82,145379,145240],{"class":92},[82,145381,145382],{"class":84,"line":508},[82,145383,1391],{"class":92},[82,145385,145386],{"class":84,"line":513},[82,145387,145270],{"class":2828},[82,145389,145390,145392],{"class":84,"line":1388},[82,145391,54173],{"class":53863},[82,145393,1349],{"class":92},[82,145395,145396,145398,145400,145402,145404,145406,145408,145410,145412,145414,145416],{"class":84,"line":1394},[82,145397,145281],{"class":88},[82,145399,1357],{"class":92},[82,145401,137782],{"class":88},[82,145403,27703],{"class":88},[82,145405,3446],{"class":112},[82,145407,81234],{"class":88},[82,145409,6688],{"class":88},[82,145411,3446],{"class":112},[82,145413,145298],{"class":88},[82,145415,145301],{"class":88},[82,145417,3909],{"class":92},[82,145419,145420],{"class":84,"line":1399},[82,145421,1391],{"class":92},[19,145423,145424],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[65,145426,145428],{"id":145427},"_1823-知识点回顾","18.2.3 知识点回顾",[73,145430,145431],{"className":129096,"code":131265,"language":129098,"meta":78,"style":78},[32,145432,145433,145439,145449],{"__ignoreMap":78},[82,145434,145435,145437],{"class":84,"line":85},[82,145436,54173],{"class":53863},[82,145438,1349],{"class":92},[82,145440,145441,145443,145445,145447],{"class":84,"line":157},[82,145442,131278],{"class":88},[82,145444,1357],{"class":92},[82,145446,64294],{"class":88},[82,145448,3909],{"class":92},[82,145450,145451],{"class":84,"line":404},[82,145452,1391],{"class":92},[14,145454,145456],{"id":145455},"_183-3d-转换","18.3 3D 转换",[19,145458,145459],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[65,145461,145463],{"id":145462},"_1831-坐标轴认识","18.3.1 坐标轴认识",[4078,145465],{"style":128952,"src":145466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[65,145468,145470],{"id":145469},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[4078,145472],{"style":128952,"src":145473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145475,145476],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145478,145479],{},"translate3d的效果需要搭配透视perspective来使用",[4078,145481],{"style":128952,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[65,145484,145486],{"id":145485},"_1833-透视-perspective","18.3.3 透视 perspective",[4078,145488],{"style":128952,"src":145489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145491,145492],{},"透视写在父盒子上，单位为像素",[65,145494,145496],{"id":145495},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24582,145498,145500],{"id":145499},"_18341-分开解释","18.3.4.1 分开解释",[4078,145502],{"style":128952,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[4078,145505],{"style":128952,"src":145506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[4078,145508],{"style":128952,"src":145509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145511,145512],{},"总结来说就是左手原则",[24582,145514,145516],{"id":145515},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[4078,145518],{"style":128952,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[65,145521,145523],{"id":145522},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[4078,145525],{"style":128952,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[4078,145528],{"style":128952,"src":145529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[73,145531,145533],{"className":129096,"code":145532,"language":129098,"meta":78,"style":78},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[32,145534,145535,145541,145554,145571],{"__ignoreMap":78},[82,145536,145537,145539],{"class":84,"line":85},[82,145538,54173],{"class":53863},[82,145540,1349],{"class":92},[82,145542,145543,145546,145548,145550,145552],{"class":84,"line":157},[82,145544,145545],{"class":88},"  perspective",[82,145547,1357],{"class":92},[82,145549,67631],{"class":88},[82,145551,54054],{"class":112},[82,145553,3909],{"class":92},[82,145555,145556,145558,145560,145563,145565,145567,145569],{"class":84,"line":404},[82,145557,139080],{"class":88},[82,145559,1357],{"class":92},[82,145561,145562],{"class":88},"rotateX",[82,145564,93],{"class":92},[82,145566,3285],{"class":88},[82,145568,144923],{"class":112},[82,145570,5318],{"class":92},[82,145572,145573],{"class":84,"line":413},[82,145574,1391],{"class":92},[65,145576,145578],{"id":145577},"_1836-案例","18.3.6 案例",[24582,145580,145582],{"id":145581},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[4078,145584],{"style":128952,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[4078,145587],{"style":128952,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[4078,145590],{"style":128952,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[73,145593,145595],{"className":129096,"code":145594,"language":129098,"meta":78,"style":78},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[32,145596,145597,145602,145608,145620],{"__ignoreMap":78},[82,145598,145599],{"class":84,"line":85},[82,145600,145601],{"class":2828},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[82,145603,145604,145606],{"class":84,"line":157},[82,145605,136093],{"class":2384},[82,145607,1349],{"class":92},[82,145609,145610,145612,145614,145616,145618],{"class":84,"line":404},[82,145611,145545],{"class":88},[82,145613,1357],{"class":92},[82,145615,67631],{"class":88},[82,145617,54054],{"class":112},[82,145619,3909],{"class":92},[82,145621,145622],{"class":84,"line":413},[82,145623,1391],{"class":92},[24582,145625,145627],{"id":145626},"_18362-3d导航栏","18.3.6.2 3D导航栏",[4078,145629],{"style":128952,"src":145630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[73,145632,145633],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,145634,145635,145639,145653,145657],{"__ignoreMap":78},[82,145636,145637],{"class":84,"line":85},[82,145638,133207],{"class":2828},[82,145640,145641,145643,145645,145647,145649,145651],{"class":84,"line":157},[82,145642,3659],{"class":92},[82,145644,54173],{"class":53863},[82,145646,56046],{"class":2384},[82,145648,113],{"class":92},[82,145650,133220],{"class":96},[82,145652,53870],{"class":92},[82,145654,145655],{"class":84,"line":404},[82,145656,133227],{"class":92},[82,145658,145659,145661,145663],{"class":84,"line":413},[82,145660,54347],{"class":92},[82,145662,54173],{"class":53863},[82,145664,53870],{"class":92},[24582,145666,145668],{"id":145667},"_18363-旋转木马","18.3.6.3 旋转木马",[4078,145670],{"style":128952,"src":145671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[73,145673,145674],{"className":129096,"code":144899,"language":129098,"meta":78,"style":78},[32,145675,145676,145682,145698],{"__ignoreMap":78},[82,145677,145678,145680],{"class":84,"line":85},[82,145679,54173],{"class":53863},[82,145681,1349],{"class":92},[82,145683,145684,145686,145688,145690,145692,145694,145696],{"class":84,"line":157},[82,145685,139080],{"class":88},[82,145687,1357],{"class":92},[82,145689,144916],{"class":88},[82,145691,93],{"class":92},[82,145693,3285],{"class":88},[82,145695,144923],{"class":112},[82,145697,5318],{"class":92},[82,145699,145700],{"class":84,"line":404},[82,145701,1391],{"class":92},[2671,145703,145704],{},"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":78,"searchDepth":157,"depth":157,"links":145706},[145707,145714],{"id":144802,"depth":157,"text":144803,"children":145708},[145709,145710,145711,145712,145713],{"id":144826,"depth":404,"text":144827},{"id":144881,"depth":404,"text":144882},{"id":145006,"depth":404,"text":145007},{"id":145109,"depth":404,"text":145110},{"id":145427,"depth":404,"text":145428},{"id":145455,"depth":157,"text":145456,"children":145715},[145716,145717,145718,145719,145720,145721],{"id":145462,"depth":404,"text":145463},{"id":145469,"depth":404,"text":145470},{"id":145485,"depth":404,"text":145486},{"id":145495,"depth":404,"text":145496},{"id":145522,"depth":404,"text":145523},{"id":145577,"depth":404,"text":145578},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144794,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145728,"title":145729,"body":145730,"description":2699,"extension":2700,"meta":145933,"navigation":485,"path":145934,"seo":145935,"stem":145936,"__hash__":145937},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145731,"toc":145922},[145732,145735,145739,145742,145745,145749,145752,145755,145758,145762,145765,145769,145772,145776,145779,145783,145797,145801,145826,145829,145832,145849,145853,145857,145860,145863,145867,145870,145873,145891,145895,145898,145912,145916,145919],[10,145733,145729],{"id":145734},"_19-移动端基础-前缀现状与视口",[14,145736,145738],{"id":145737},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[4078,145740],{"style":128952,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145743,145744],{},"意思就是加个前缀，增加兼容性",[14,145746,145748],{"id":145747},"_192-移动端现状认识","19.2 移动端现状认识",[4078,145750],{"style":128952,"src":145751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145753,145754],{},"调试方法：",[4078,145756],{"style":128952,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145759,145761],{"id":145760},"_193-视口","19.3 视口",[19,145763,145764],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[65,145766,145768],{"id":145767},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[4078,145770],{"style":128952,"src":145771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[65,145773,145775],{"id":145774},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[4078,145777],{"style":128952,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[65,145780,145782],{"id":145781},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3755,145784,145785,145788,145791,145794],{},[29,145786,145787],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,145789,145790],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,145792,145793],{},"需要手动添写meta视口标签通知浏览器操作",[29,145795,145796],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[65,145798,145800],{"id":145799},"_1934-meta视口标签","19.3.4 meta视口标签",[73,145802,145804],{"className":129843,"code":145803,"language":129845,"meta":78,"style":78},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[32,145805,145806],{"__ignoreMap":78},[82,145807,145808,145810,145812,145814,145816,145818,145820,145822,145824],{"class":84,"line":85},[82,145809,3659],{"class":92},[82,145811,53907],{"class":53863},[82,145813,17506],{"class":2384},[82,145815,113],{"class":92},[82,145817,53954],{"class":96},[82,145819,53934],{"class":2384},[82,145821,113],{"class":92},[82,145823,53961],{"class":96},[82,145825,53870],{"class":92},[4078,145827],{"style":128952,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145830,145831],{},"标准视口设置：",[26,145833,145834,145837,145840,145843,145846],{},[29,145835,145836],{},"视口宽度和设备保持一致",[29,145838,145839],{},"视口的默认缩放比例1.0",[29,145841,145842],{},"不允许用户自行缩放",[29,145844,145845],{},"最大允许的缩放比例1.0",[29,145847,145848],{},"最小允许的缩放比例1.0",[65,145850,145852],{"id":145851},"_1935-二倍图","19.3.5 二倍图",[24582,145854,145856],{"id":145855},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[4078,145858],{"style":128952,"src":145859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[4078,145861],{"style":128952,"src":145862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24582,145864,145866],{"id":145865},"_19352-多倍图","19.3.5.2 多倍图",[4078,145868],{"style":128952,"src":145869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145871,145872],{},"二倍图法，代码如下：",[73,145874,145876],{"className":129096,"code":145875,"language":129098,"meta":78,"style":78},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[32,145877,145878,145883],{"__ignoreMap":78},[82,145879,145880],{"class":84,"line":85},[82,145881,145882],{"class":2828},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[82,145884,145885,145888],{"class":84,"line":157},[82,145886,145887],{"class":53863},"background-size",[82,145889,145890],{"class":92},": 50% 50%;\n",[24582,145892,145894],{"id":145893},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[4078,145896],{"style":128952,"src":145897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,145899,145900,145903,145906,145909],{},[29,145901,145902],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,145904,145905],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,145907,145908],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,145910,145911],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24582,145913,145915],{"id":145914},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[4078,145917],{"style":128952,"src":145918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2671,145920,145921],{},"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":78,"searchDepth":157,"depth":157,"links":145923},[145924,145925,145926],{"id":145737,"depth":157,"text":145738},{"id":145747,"depth":157,"text":145748},{"id":145760,"depth":157,"text":145761,"children":145927},[145928,145929,145930,145931,145932],{"id":145767,"depth":404,"text":145768},{"id":145774,"depth":404,"text":145775},{"id":145781,"depth":404,"text":145782},{"id":145799,"depth":404,"text":145800},{"id":145851,"depth":404,"text":145852},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145729,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145939,"title":145940,"body":145941,"description":2699,"extension":2700,"meta":146818,"navigation":485,"path":146819,"seo":146820,"stem":146821,"__hash__":146822},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145942,"toc":146802},[145943,145946,145950,145957,145960,145967,145970,145975,145978,145982,145986,145993,145996,145999,146003,146006,146009,146012,146015,146018,146022,146025,146029,146031,146034,146037,146040,146043,146045,146048,146050,146080,146082,146112,146116,146119,146123,146126,146143,146146,146149,146225,146227,146230,146233,146236,146239,146241,146244,146247,146251,146273,146276,146279,146283,146286,146292,146295,146299,146302,146305,146309,146312,146315,146318,146322,146325,146328,146331,146334,146338,146341,146345,146352,146355,146358,146361,146364,146374,146377,146380,146387,146390,146394,146397,146400,146404,146407,146410,146413,146458,146461,146464,146467,146469,146598,146600,146638,146641,146644,146646,146764,146766,146800],[10,145944,145940],{"id":145945},"_20-移动端布局实战上篇",[14,145947,145949],{"id":145948},"_201-移动端主流方案","20.1 移动端主流方案",[26,145951,145952],{},[29,145953,145954],{},[2913,145955,145956],{},"单独移动端页面（主流）",[4078,145958],{"style":128952,"src":145959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,145961,145962],{"start":157},[29,145963,145964],{},[2913,145965,145966],{},"响应式兼容PC移动端",[4078,145968],{"style":128952,"src":145969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,145971,145972],{"start":404},[29,145973,145974],{},"两种页面选型布局方式",[4078,145976],{"style":128952,"src":145977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145979,145981],{"id":145980},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[65,145983,145985],{"id":145984},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145987,145988,145989],{},"官网地址： ",[323,145990,145991],{"href":145991,"rel":145992},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26449],[4078,145994],{"style":128952,"src":145995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[4078,145997],{"style":128952,"src":145998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[65,146000,146002],{"id":146001},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[4078,146004],{"style":128952,"src":146005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[4078,146007],{"style":128952,"src":146008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,146010,146011],{},"去除高亮：",[19,146013,146014],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,146016,146017],{},"-webkit- tap-highlight-color: transparent;",[14,146019,146021],{"id":146020},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[4078,146023],{"style":128952,"src":146024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,146026,146028],{"id":146027},"_204-流式布局案例","20.4 流式布局案例",[19,146030,2801],{},[19,146032,146033],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,146035,146036],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,146038,146039],{},"图片格式：",[4078,146041],{"style":128952,"src":146042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,146044,138139],{},[4078,146046],{"style":128952,"src":146047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,146049,142466],{},[73,146051,146052],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,146053,146054],{"__ignoreMap":78},[82,146055,146056,146058,146060,146062,146064,146066,146068,146070,146072,146074,146076,146078],{"class":84,"line":85},[82,146057,3659],{"class":92},[82,146059,4078],{"class":53863},[82,146061,57799],{"class":2384},[82,146063,113],{"class":92},[82,146065,136613],{"class":96},[82,146067,57807],{"class":2384},[82,146069,113],{"class":92},[82,146071,136620],{"class":96},[82,146073,136623],{"class":2384},[82,146075,113],{"class":92},[82,146077,136628],{"class":96},[82,146079,53870],{"class":92},[19,146081,142555],{},[73,146083,146084],{"className":129843,"code":136598,"language":129845,"meta":78,"style":78},[32,146085,146086],{"__ignoreMap":78},[82,146087,146088,146090,146092,146094,146096,146098,146100,146102,146104,146106,146108,146110],{"class":84,"line":85},[82,146089,3659],{"class":92},[82,146091,4078],{"class":53863},[82,146093,57799],{"class":2384},[82,146095,113],{"class":92},[82,146097,136613],{"class":96},[82,146099,57807],{"class":2384},[82,146101,113],{"class":92},[82,146103,136620],{"class":96},[82,146105,136623],{"class":2384},[82,146107,113],{"class":92},[82,146109,136628],{"class":96},[82,146111,53870],{"class":92},[14,146113,146115],{"id":146114},"_205-flex布局","20.5 flex布局",[4078,146117],{"style":128952,"src":146118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[65,146120,146122],{"id":146121},"_2051-布局原理","20.5.1 布局原理",[19,146124,146125],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3755,146127,146128,146131,146134,146137,146140],{},[29,146129,146130],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,146132,146133],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,146135,146136],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,146138,146139],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,146141,146142],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146144,146145],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146147,146148],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[73,146150,146152],{"className":129096,"code":146151,"language":129098,"meta":78,"style":78},"\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",[32,146153,146154,146159,146166,146176,146188,146199,146210,146221],{"__ignoreMap":78},[82,146155,146156],{"class":84,"line":85},[82,146157,146158],{"class":2828},"\u002F* Flex 弹性布局 *\u002F\n",[82,146160,146161,146164],{"class":84,"line":157},[82,146162,146163],{"class":2384},".container",[82,146165,1349],{"class":92},[82,146167,146168,146170,146172,146174],{"class":84,"line":404},[82,146169,130712],{"class":88},[82,146171,1357],{"class":92},[82,146173,54039],{"class":88},[82,146175,3909],{"class":92},[82,146177,146178,146181,146183,146186],{"class":84,"line":413},[82,146179,146180],{"class":88},"  flex-direction",[82,146182,1357],{"class":92},[82,146184,146185],{"class":88},"row",[82,146187,3909],{"class":92},[82,146189,146190,146193,146195,146197],{"class":84,"line":508},[82,146191,146192],{"class":88},"  justify-content",[82,146194,1357],{"class":92},[82,146196,54230],{"class":88},[82,146198,3909],{"class":92},[82,146200,146201,146204,146206,146208],{"class":84,"line":513},[82,146202,146203],{"class":88},"  align-items",[82,146205,1357],{"class":92},[82,146207,54154],{"class":88},[82,146209,3909],{"class":92},[82,146211,146212,146215,146217,146219],{"class":84,"line":1388},[82,146213,146214],{"class":88},"  flex-wrap",[82,146216,1357],{"class":92},[82,146218,81164],{"class":88},[82,146220,3909],{"class":92},[82,146222,146223],{"class":84,"line":1394},[82,146224,1391],{"class":92},[19,146226,73009],{},[19,146228,146229],{},".form-item .male-label {",[19,146231,146232],{},"   margin-right: 20px;",[19,146234,146235],{},"   display: inline-flex;",[19,146237,146238],{},"   align-items: center;",[19,146240,3695],{},[4078,146242],{"style":128952,"src":146243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[4078,146245],{"style":128952,"src":146246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[65,146248,146250],{"id":146249},"_2052-常见父项属性","20.5.2 常见父项属性",[26,146252,146253,146256,146259,146262,146265,146268,146271],{},[29,146254,146255],{},"flex-direction：设置主轴的方向",[29,146257,146258],{},"justify-content：设置主轴上的子元素排列方式",[29,146260,146261],{},"flex-wrap：设置子元素是否换行",[29,146263,146264],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,146266,146267],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,146269,146270],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,146272,146255],{},[4078,146274],{"style":128952,"src":146275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[4078,146277],{"style":128952,"src":146278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,146280,146281],{"start":157},[29,146282,146258],{},[4078,146284],{"style":128952,"src":146285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146287,146288,146291],{},[32,146289,146290],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146293,146294],{},"跟着主轴走",[26,146296,146297],{"start":404},[29,146298,146261],{},[4078,146300],{"style":128952,"src":146301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146303,146304],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,146306,146307],{"start":413},[29,146308,146264],{},[4078,146310],{"style":128952,"src":146311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146313,146314],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146316,146317],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,146319,146320],{"start":508},[29,146321,146267],{},[4078,146323],{"style":128952,"src":146324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146326,146327],{},"align-items与align-content之间的区别：",[19,146329,146330],{},"单找items，多找content",[4078,146332],{"style":128952,"src":146333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,146335,146336],{"start":513},[29,146337,146270],{},[4078,146339],{"style":128952,"src":146340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[65,146342,146344],{"id":146343},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,146346,146347],{},[29,146348,146349],{},[2913,146350,146351],{},"flex 属性",[19,146353,146354],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[4078,146356],{"style":128952,"src":146357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146359,146360],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146362,146363],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,146365,146366],{"start":157},[29,146367,146368,16382,146371],{},[2913,146369,146370],{},"align-self",[2913,146372,146373],{},"控制子项自己在侧轴上的排列方式",[4078,146375],{"style":128952,"src":146376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146378,146379],{},"单个子盒子在父盒子侧轴上的排列方式",[26,146381,146382],{"start":404},[29,146383,146384,146386],{},[2913,146385,97848],{}," 属性定义项目的排列顺序",[4078,146388],{"style":128952,"src":146389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[65,146391,146393],{"id":146392},"_2054-背景线性渐变","20.5.4 背景线性渐变",[4078,146395],{"style":128952,"src":146396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146398,146399],{},"必须要添加浏览器的私有前缀",[65,146401,146403],{"id":146402},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146405,146406],{},"学到最重要的知识：",[19,146408,146409],{},"flex处理这样的布局思路",[4078,146411],{"style":128952,"src":146412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[73,146414,146416],{"className":129096,"code":146415,"language":129098,"meta":78,"style":78},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[32,146417,146418,146424,146434,146444,146454],{"__ignoreMap":78},[82,146419,146420,146422],{"class":84,"line":85},[82,146421,146163],{"class":2384},[82,146423,1349],{"class":92},[82,146425,146426,146428,146430,146432],{"class":84,"line":157},[82,146427,130712],{"class":88},[82,146429,1357],{"class":92},[82,146431,54039],{"class":88},[82,146433,3909],{"class":92},[82,146435,146436,146438,146440,146442],{"class":84,"line":404},[82,146437,146192],{"class":88},[82,146439,1357],{"class":92},[82,146441,54154],{"class":88},[82,146443,3909],{"class":92},[82,146445,146446,146448,146450,146452],{"class":84,"line":413},[82,146447,146203],{"class":88},[82,146449,1357],{"class":92},[82,146451,54154],{"class":88},[82,146453,3909],{"class":92},[82,146455,146456],{"class":84,"line":508},[82,146457,1391],{"class":92},[19,146459,146460],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146462,146463],{},"使用属性选择器",[4078,146465],{"style":128952,"src":146466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146468,71446],{},[73,146470,146472],{"className":129843,"code":146471,"language":129845,"meta":78,"style":78},"\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",[32,146473,146474,146479,146493,146498,146518,146523,146542,146547,146566,146571,146590],{"__ignoreMap":78},[82,146475,146476],{"class":84,"line":85},[82,146477,146478],{"class":2828},"\u003C!-- 携程网移动端案例结构 -->\n",[82,146480,146481,146483,146485,146487,146489,146491],{"class":84,"line":157},[82,146482,3659],{"class":92},[82,146484,54173],{"class":53863},[82,146486,56046],{"class":2384},[82,146488,113],{"class":92},[82,146490,94874],{"class":96},[82,146492,53870],{"class":92},[82,146494,146495],{"class":84,"line":404},[82,146496,146497],{"class":2828},"  \u003C!-- 搜索栏 -->\n",[82,146499,146500,146502,146504,146506,146508,146511,146514,146516],{"class":84,"line":413},[82,146501,54705],{"class":92},[82,146503,54173],{"class":53863},[82,146505,56046],{"class":2384},[82,146507,113],{"class":92},[82,146509,146510],{"class":96},"\"search-index\"",[82,146512,146513],{"class":92},">...\u003C\u002F",[82,146515,54173],{"class":53863},[82,146517,53870],{"class":92},[82,146519,146520],{"class":84,"line":508},[82,146521,146522],{"class":2828},"  \u003C!-- 焦点图 -->\n",[82,146524,146525,146527,146529,146531,146533,146536,146538,146540],{"class":84,"line":513},[82,146526,54705],{"class":92},[82,146528,54173],{"class":53863},[82,146530,56046],{"class":2384},[82,146532,113],{"class":92},[82,146534,146535],{"class":96},"\"focus\"",[82,146537,146513],{"class":92},[82,146539,54173],{"class":53863},[82,146541,53870],{"class":92},[82,146543,146544],{"class":84,"line":1388},[82,146545,146546],{"class":2828},"  \u003C!-- 主导航 -->\n",[82,146548,146549,146551,146553,146555,146557,146560,146562,146564],{"class":84,"line":1394},[82,146550,54705],{"class":92},[82,146552,54173],{"class":53863},[82,146554,56046],{"class":2384},[82,146556,113],{"class":92},[82,146558,146559],{"class":96},"\"local-nav\"",[82,146561,146513],{"class":92},[82,146563,54173],{"class":53863},[82,146565,53870],{"class":92},[82,146567,146568],{"class":84,"line":1399},[82,146569,146570],{"class":2828},"  \u003C!-- 子导航 -->\n",[82,146572,146573,146575,146577,146579,146581,146584,146586,146588],{"class":84,"line":1430},[82,146574,54705],{"class":92},[82,146576,54173],{"class":53863},[82,146578,56046],{"class":2384},[82,146580,113],{"class":92},[82,146582,146583],{"class":96},"\"nav-common\"",[82,146585,146513],{"class":92},[82,146587,54173],{"class":53863},[82,146589,53870],{"class":92},[82,146591,146592,146594,146596],{"class":84,"line":1818},[82,146593,54347],{"class":92},[82,146595,54173],{"class":53863},[82,146597,53870],{"class":92},[19,146599,73009],{},[73,146601,146602],{"className":129096,"code":139548,"language":129098,"meta":78,"style":78},[32,146603,146604,146618,146634],{"__ignoreMap":78},[82,146605,146606,146608,146610,146612,146614,146616],{"class":84,"line":85},[82,146607,56381],{"class":53863},[82,146609,3639],{"class":92},[82,146611,105658],{"class":2384},[82,146613,113],{"class":112},[82,146615,65256],{"class":96},[82,146617,139565],{"class":92},[82,146619,146620,146622,146624,146626,146628,146630,146632],{"class":84,"line":157},[82,146621,73452],{"class":88},[82,146623,1357],{"class":92},[82,146625,2283],{"class":88},[82,146627,54054],{"class":112},[82,146629,54083],{"class":88},[82,146631,132676],{"class":88},[82,146633,3909],{"class":92},[82,146635,146636],{"class":84,"line":404},[82,146637,1391],{"class":92},[19,146639,146640],{},"总代码和效果展示：",[4078,146642],{"style":128952,"src":146643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146645,71446],{},[73,146647,146648],{"className":129843,"code":146471,"language":129845,"meta":78,"style":78},[32,146649,146650,146654,146668,146672,146690,146694,146712,146716,146734,146738,146756],{"__ignoreMap":78},[82,146651,146652],{"class":84,"line":85},[82,146653,146478],{"class":2828},[82,146655,146656,146658,146660,146662,146664,146666],{"class":84,"line":157},[82,146657,3659],{"class":92},[82,146659,54173],{"class":53863},[82,146661,56046],{"class":2384},[82,146663,113],{"class":92},[82,146665,94874],{"class":96},[82,146667,53870],{"class":92},[82,146669,146670],{"class":84,"line":404},[82,146671,146497],{"class":2828},[82,146673,146674,146676,146678,146680,146682,146684,146686,146688],{"class":84,"line":413},[82,146675,54705],{"class":92},[82,146677,54173],{"class":53863},[82,146679,56046],{"class":2384},[82,146681,113],{"class":92},[82,146683,146510],{"class":96},[82,146685,146513],{"class":92},[82,146687,54173],{"class":53863},[82,146689,53870],{"class":92},[82,146691,146692],{"class":84,"line":508},[82,146693,146522],{"class":2828},[82,146695,146696,146698,146700,146702,146704,146706,146708,146710],{"class":84,"line":513},[82,146697,54705],{"class":92},[82,146699,54173],{"class":53863},[82,146701,56046],{"class":2384},[82,146703,113],{"class":92},[82,146705,146535],{"class":96},[82,146707,146513],{"class":92},[82,146709,54173],{"class":53863},[82,146711,53870],{"class":92},[82,146713,146714],{"class":84,"line":1388},[82,146715,146546],{"class":2828},[82,146717,146718,146720,146722,146724,146726,146728,146730,146732],{"class":84,"line":1394},[82,146719,54705],{"class":92},[82,146721,54173],{"class":53863},[82,146723,56046],{"class":2384},[82,146725,113],{"class":92},[82,146727,146559],{"class":96},[82,146729,146513],{"class":92},[82,146731,54173],{"class":53863},[82,146733,53870],{"class":92},[82,146735,146736],{"class":84,"line":1399},[82,146737,146570],{"class":2828},[82,146739,146740,146742,146744,146746,146748,146750,146752,146754],{"class":84,"line":1430},[82,146741,54705],{"class":92},[82,146743,54173],{"class":53863},[82,146745,56046],{"class":2384},[82,146747,113],{"class":92},[82,146749,146583],{"class":96},[82,146751,146513],{"class":92},[82,146753,54173],{"class":53863},[82,146755,53870],{"class":92},[82,146757,146758,146760,146762],{"class":84,"line":1818},[82,146759,54347],{"class":92},[82,146761,54173],{"class":53863},[82,146763,53870],{"class":92},[19,146765,73009],{},[73,146767,146768],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,146769,146770,146774,146788,146792],{"__ignoreMap":78},[82,146771,146772],{"class":84,"line":85},[82,146773,133207],{"class":2828},[82,146775,146776,146778,146780,146782,146784,146786],{"class":84,"line":157},[82,146777,3659],{"class":92},[82,146779,54173],{"class":53863},[82,146781,56046],{"class":2384},[82,146783,113],{"class":92},[82,146785,133220],{"class":96},[82,146787,53870],{"class":92},[82,146789,146790],{"class":84,"line":404},[82,146791,133227],{"class":92},[82,146793,146794,146796,146798],{"class":84,"line":413},[82,146795,54347],{"class":92},[82,146797,54173],{"class":53863},[82,146799,53870],{"class":92},[2671,146801,140497],{},{"title":78,"searchDepth":157,"depth":157,"links":146803},[146804,146805,146809,146810,146811],{"id":145948,"depth":157,"text":145949},{"id":145980,"depth":157,"text":145981,"children":146806},[146807,146808],{"id":145984,"depth":404,"text":145985},{"id":146001,"depth":404,"text":146002},{"id":146020,"depth":157,"text":146021},{"id":146027,"depth":157,"text":146028},{"id":146114,"depth":157,"text":146115,"children":146812},[146813,146814,146815,146816,146817],{"id":146121,"depth":404,"text":146122},{"id":146249,"depth":404,"text":146250},{"id":146343,"depth":404,"text":146344},{"id":146392,"depth":404,"text":146393},{"id":146402,"depth":404,"text":146403},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145940,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146824,"title":146825,"body":146826,"description":2699,"extension":2700,"meta":148053,"navigation":485,"path":148054,"seo":148055,"stem":148056,"__hash__":148057},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146827,"toc":148031},[146828,146831,146835,146839,146842,146845,146849,146854,146857,146860,146863,146866,146869,146926,146929,146934,146937,146940,146944,146955,146959,146962,146965,146972,146977,146981,146984,146990,146993,146997,147000,147007,147010,147013,147020,147023,147030,147033,147036,147043,147046,147049,147051,147068,147072,147075,147078,147081,147085,147088,147091,147094,147097,147100,147103,147105,147108,147111,147173,147176,147286,147293,147299,147302,147305,147309,147312,147316,147321,147324,147331,147334,147340,147345,147348,147351,147354,147357,147360,147363,147366,147369,147425,147427,147453,147457,147460,147463,147466,147474,147477,147480,147484,147540,147543,147547,147553,147564,147567,147572,147575,147578,147584,147587,147590,147593,147596,147599,147602,147605,147608,147633,147639,147642,147645,147648,147651,147654,147657,147662,147665,147668,147671,147679,147682,147689,147692,147695,147697,147721,147723,147726,147729,147732,147735,147738,147741,147744,147778,147781,147784,147818,147825,147828,147831,147834,147837,147840,147843,147850,147853,147856,147859,147862,147869,147872,147875,147882,147885,147888,147892,147895,147898,147901,147904,147907,147910,147913,147916,147918,147942,147944,147968,147972,147983,147986,147989,147992,147995,147998,148001,148004,148007,148010,148013,148016,148019,148022,148025,148028],[10,146829,146825],{"id":146830},"_21-移动端布局实战下篇",[14,146832,146834],{"id":146833},"_211-rem适配布局","21.1 rem适配布局",[65,146836,146838],{"id":146837},"_2111-rem单位","21.1.1 rem单位",[4078,146840],{"style":128952,"src":146841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146843,146844],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[65,146846,146848],{"id":146847},"_2112-媒体查询","21.1.2 媒体查询",[26,146850,146851],{},[29,146852,146853],{},"参数介绍",[4078,146855],{"style":128952,"src":146856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[4078,146858],{"style":128952,"src":146859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[4078,146861],{"style":128952,"src":146862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[4078,146864],{"style":128952,"src":146865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[4078,146867],{"style":128952,"src":146868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[73,146870,146872],{"className":129096,"code":146871,"language":129098,"meta":78,"style":78},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[32,146873,146874,146879,146898,146905,146918,146922],{"__ignoreMap":78},[82,146875,146876],{"class":84,"line":85},[82,146877,146878],{"class":2828},"\u002F* 媒体查询 *\u002F\n",[82,146880,146881,146884,146886,146889,146891,146894,146896],{"class":84,"line":157},[82,146882,146883],{"class":112},"@media",[82,146885,4265],{"class":92},[82,146887,146888],{"class":88},"max-width",[82,146890,1357],{"class":92},[82,146892,146893],{"class":88},"768",[82,146895,54054],{"class":112},[82,146897,15031],{"class":92},[82,146899,146900,146903],{"class":84,"line":404},[82,146901,146902],{"class":2384},"  .container",[82,146904,1349],{"class":92},[82,146906,146907,146910,146912,146914,146916],{"class":84,"line":413},[82,146908,146909],{"class":88},"    width",[82,146911,1357],{"class":92},[82,146913,3069],{"class":88},[82,146915,3086],{"class":112},[82,146917,3909],{"class":92},[82,146919,146920],{"class":84,"line":508},[82,146921,129892],{"class":92},[82,146923,146924],{"class":84,"line":513},[82,146925,1391],{"class":92},[19,146927,146928],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,146930,146931],{"start":157},[29,146932,146933],{},"引入资源",[4078,146935],{"style":128952,"src":146936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146938,146939],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[65,146941,146943],{"id":146942},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3755,146945,146946,146949,146952],{},[29,146947,146948],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,146950,146951],{},"媒体查询可以根据不同设备宽度来修改样式",[29,146953,146954],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146956,146958],{"id":146957},"_212-less基础","21.2 Less基础",[19,146960,146961],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146963,146964],{},"Less可以解决该问题，它是css的扩展语言",[19,146966,146967,146968],{},"Less中文网址： ",[323,146969,146970],{"href":146970,"rel":146971},"http:\u002F\u002Flesscss.cn\u002F",[26449],[19,146973,146974],{},[2913,146975,146976],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[65,146978,146980],{"id":146979},"_2121-less安装","21.2.1 less安装",[19,146982,146983],{},"如果使用vscode，则无需进行下方安装步骤",[19,146985,146986],{},[323,146987,146988],{"href":146988,"rel":146989},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26449],[4078,146991],{"style":128952,"src":146992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[65,146994,146996],{"id":146995},"_2122-less使用","21.2.2 less使用",[19,146998,146999],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,147001,147002],{},[29,147003,147004],{},[2913,147005,147006],{},"Less 变量",[4078,147008],{"style":128952,"src":147009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[4078,147011],{"style":128952,"src":147012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,147014,147015],{"start":157},[29,147016,147017],{},[2913,147018,147019],{},"Less 编译",[4078,147021],{"style":128952,"src":147022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,147024,147025],{"start":404},[29,147026,147027],{},[2913,147028,147029],{},"Less 嵌套",[4078,147031],{"style":128952,"src":147032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[4078,147034],{"style":128952,"src":147035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,147037,147038],{"start":413},[29,147039,147040],{},[2913,147041,147042],{},"Less 运算",[4078,147044],{"style":128952,"src":147045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,147047,147048],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,147050,2801],{},[3755,147052,147053,147056,147059,147062,147065],{},[29,147054,147055],{},"乘号（*）和除号（\u002F）的写法",[29,147057,147058],{},"运算符中间左右有个空格隔开 1px + 5",[29,147060,147061],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,147063,147064],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,147066,147067],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,147069,147071],{"id":147070},"_213-rem-适配方案","21.3 rem 适配方案",[19,147073,147074],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,147076,147077],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[4078,147079],{"style":128952,"src":147080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[65,147082,147084],{"id":147083},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147086,147087],{},"rem + 媒体查询 + less 技术",[4078,147089],{"style":128952,"src":147090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147092,147093],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147095,147096],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[4078,147098],{"style":128952,"src":147099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147101,147102],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147104,17220],{},[4078,147106],{"style":128952,"src":147107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147109,147110],{},"index.html:",[73,147112,147114],{"className":129096,"code":147113,"language":129098,"meta":78,"style":78},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[32,147115,147116,147121,147127,147143,147147,147153,147169],{"__ignoreMap":78},[82,147117,147118],{"class":84,"line":85},[82,147119,147120],{"class":2828},"\u002F* rem 适配方案 *\u002F\n",[82,147122,147123,147125],{"class":84,"line":157},[82,147124,53198],{"class":53863},[82,147126,1349],{"class":92},[82,147128,147129,147131,147133,147136,147138,147140],{"class":84,"line":404},[82,147130,73182],{"class":88},[82,147132,1357],{"class":92},[82,147134,147135],{"class":88},"62.5",[82,147137,3086],{"class":112},[82,147139,132959],{"class":92},[82,147141,147142],{"class":2828},"\u002F* 1rem = 10px *\u002F\n",[82,147144,147145],{"class":84,"line":413},[82,147146,1391],{"class":92},[82,147148,147149,147151],{"class":84,"line":508},[82,147150,132944],{"class":2384},[82,147152,1349],{"class":92},[82,147154,147155,147157,147159,147161,147164,147166],{"class":84,"line":513},[82,147156,73124],{"class":88},[82,147158,1357],{"class":92},[82,147160,440],{"class":88},[82,147162,147163],{"class":112},"rem",[82,147165,132959],{"class":92},[82,147167,147168],{"class":2828},"\u002F* 100px *\u002F\n",[82,147170,147171],{"class":84,"line":1388},[82,147172,1391],{"class":92},[19,147174,147175],{},"common.less",[73,147177,147179],{"className":129096,"code":147178,"language":129098,"meta":78,"style":78},"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",[32,147180,147181,147187,147202,147206,147212,147226,147230,147234,147238,147244,147258,147262,147268,147282],{"__ignoreMap":78},[82,147182,147183,147185],{"class":84,"line":85},[82,147184,53198],{"class":53863},[82,147186,1349],{"class":92},[82,147188,147189,147191,147193,147195,147197,147199],{"class":84,"line":157},[82,147190,73182],{"class":88},[82,147192,1357],{"class":92},[82,147194,147135],{"class":88},[82,147196,3086],{"class":112},[82,147198,28649],{"class":92},[82,147200,147201],{"class":2828},"\u002F* 10px *\u002F\n",[82,147203,147204],{"class":84,"line":404},[82,147205,1391],{"class":92},[82,147207,147208,147210],{"class":84,"line":413},[82,147209,54173],{"class":53863},[82,147211,1349],{"class":92},[82,147213,147214,147216,147218,147220,147222,147224],{"class":84,"line":508},[82,147215,73124],{"class":88},[82,147217,1357],{"class":92},[82,147219,440],{"class":88},[82,147221,147163],{"class":112},[82,147223,28649],{"class":92},[82,147225,147168],{"class":2828},[82,147227,147228],{"class":84,"line":513},[82,147229,1391],{"class":92},[82,147231,147232],{"class":84,"line":1388},[82,147233,138557],{"class":92},[82,147235,147236],{"class":84,"line":1394},[82,147237,147120],{"class":2828},[82,147239,147240,147242],{"class":84,"line":1399},[82,147241,53198],{"class":53863},[82,147243,1349],{"class":92},[82,147245,147246,147248,147250,147252,147254,147256],{"class":84,"line":1430},[82,147247,73182],{"class":88},[82,147249,1357],{"class":92},[82,147251,147135],{"class":88},[82,147253,3086],{"class":112},[82,147255,132959],{"class":92},[82,147257,147142],{"class":2828},[82,147259,147260],{"class":84,"line":1818},[82,147261,1391],{"class":92},[82,147263,147264,147266],{"class":84,"line":2082},[82,147265,132944],{"class":2384},[82,147267,1349],{"class":92},[82,147269,147270,147272,147274,147276,147278,147280],{"class":84,"line":2233},[82,147271,73124],{"class":88},[82,147273,1357],{"class":92},[82,147275,440],{"class":88},[82,147277,147163],{"class":112},[82,147279,132959],{"class":92},[82,147281,147168],{"class":2828},[82,147283,147284],{"class":84,"line":2255},[82,147285,1391],{"class":92},[19,147287,147288,147289,147292],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[26137,147290,147291],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[73,147294,147297],{"className":147295,"code":147296,"language":7780},[7778],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[32,147298,147296],{"__ignoreMap":78},[19,147300,147301],{},"less保存时会自动变成.css文件",[19,147303,147304],{},"好好搞懂上述代码写法",[65,147306,147308],{"id":147307},"_2132-样式导入样式","21.3.2 样式导入样式",[4078,147310],{"style":128952,"src":147311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[65,147313,147315],{"id":147314},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,147317,147318],{},[29,147319,147320],{},"准备工作",[4078,147322],{"style":128952,"src":147323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147325,147326,147327],{},"github地址：",[323,147328,147329],{"href":147329,"rel":147330},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26449],[19,147332,147333],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147335,147336,147337],{},"js文件引入到index.html中使用的是",[32,147338,147339],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,147341,147342],{"start":157},[29,147343,147344],{},"vscode插件",[4078,147346],{"style":128952,"src":147347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147349,147350],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147352,147353],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[4078,147355],{"style":128952,"src":147356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147358,147359],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[4078,147361],{"style":128952,"src":147362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147364,147365],{},"修改成75就可以，alt+z为快捷键",[19,147367,147368],{},"index.css：",[73,147370,147371],{"className":129096,"code":147113,"language":129098,"meta":78,"style":78},[32,147372,147373,147377,147383,147397,147401,147407,147421],{"__ignoreMap":78},[82,147374,147375],{"class":84,"line":85},[82,147376,147120],{"class":2828},[82,147378,147379,147381],{"class":84,"line":157},[82,147380,53198],{"class":53863},[82,147382,1349],{"class":92},[82,147384,147385,147387,147389,147391,147393,147395],{"class":84,"line":404},[82,147386,73182],{"class":88},[82,147388,1357],{"class":92},[82,147390,147135],{"class":88},[82,147392,3086],{"class":112},[82,147394,132959],{"class":92},[82,147396,147142],{"class":2828},[82,147398,147399],{"class":84,"line":413},[82,147400,1391],{"class":92},[82,147402,147403,147405],{"class":84,"line":508},[82,147404,132944],{"class":2384},[82,147406,1349],{"class":92},[82,147408,147409,147411,147413,147415,147417,147419],{"class":84,"line":513},[82,147410,73124],{"class":88},[82,147412,1357],{"class":92},[82,147414,440],{"class":88},[82,147416,147163],{"class":112},[82,147418,132959],{"class":92},[82,147420,147168],{"class":2828},[82,147422,147423],{"class":84,"line":1388},[82,147424,1391],{"class":92},[19,147426,147110],{},[73,147428,147429],{"className":129096,"code":129500,"language":129098,"meta":78,"style":78},[32,147430,147431,147437,147449],{"__ignoreMap":78},[82,147432,147433,147435],{"class":84,"line":85},[82,147434,54362],{"class":53863},[82,147436,1349],{"class":92},[82,147438,147439,147441,147443,147445,147447],{"class":84,"line":157},[82,147440,73182],{"class":88},[82,147442,1357],{"class":92},[82,147444,3355],{"class":88},[82,147446,54054],{"class":112},[82,147448,3909],{"class":92},[82,147450,147451],{"class":84,"line":404},[82,147452,1391],{"class":92},[14,147454,147456],{"id":147455},"_214-响应式开发","21.4 响应式开发",[19,147458,147459],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[4078,147461],{"style":128952,"src":147462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147464,147465],{},"做法：",[3755,147467,147468,147471],{},[29,147469,147470],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,147472,147473],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[4078,147475],{"style":128952,"src":147476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147478,147479],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[65,147481,147483],{"id":147482},"_2141-简单代码示范","21.4.1 简单代码示范",[73,147485,147486],{"className":129096,"code":147113,"language":129098,"meta":78,"style":78},[32,147487,147488,147492,147498,147512,147516,147522,147536],{"__ignoreMap":78},[82,147489,147490],{"class":84,"line":85},[82,147491,147120],{"class":2828},[82,147493,147494,147496],{"class":84,"line":157},[82,147495,53198],{"class":53863},[82,147497,1349],{"class":92},[82,147499,147500,147502,147504,147506,147508,147510],{"class":84,"line":404},[82,147501,73182],{"class":88},[82,147503,1357],{"class":92},[82,147505,147135],{"class":88},[82,147507,3086],{"class":112},[82,147509,132959],{"class":92},[82,147511,147142],{"class":2828},[82,147513,147514],{"class":84,"line":413},[82,147515,1391],{"class":92},[82,147517,147518,147520],{"class":84,"line":508},[82,147519,132944],{"class":2384},[82,147521,1349],{"class":92},[82,147523,147524,147526,147528,147530,147532,147534],{"class":84,"line":513},[82,147525,73124],{"class":88},[82,147527,1357],{"class":92},[82,147529,440],{"class":88},[82,147531,147163],{"class":112},[82,147533,132959],{"class":92},[82,147535,147168],{"class":2828},[82,147537,147538],{"class":84,"line":1388},[82,147539,1391],{"class":92},[19,147541,147542],{},"父盒子一般命名为container",[65,147544,147546],{"id":147545},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147548,147549,147550],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2913,147551,147552],{},"使得 Web 开发更加快捷",[3755,147554,147555],{},[29,147556,147557,147558],{},"官网：",[2913,147559,147560],{},[323,147561,147562],{"href":147562,"rel":147563},"http:\u002F\u002Fgetbootstrap.com\u002F",[26449],[19,147565,147566],{},"可以直接去官网拿现成的东西",[26,147568,147569],{},[29,147570,147571],{},"Bootstrap的使用",[19,147573,147574],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147576,147577],{},"Bootstrap 使用四步曲：",[19,147579,147580,147583],{},[2913,147581,147582],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[4078,147585],{"style":128952,"src":147586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147588,147589],{},"打开Bootstrap官网，然后下载",[4078,147591],{"style":128952,"src":147592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[4078,147594],{"style":128952,"src":147595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147597,147598],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147600,147601],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147603,147604],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[4078,147606],{"style":128952,"src":147607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[73,147609,147611],{"className":129096,"code":147610,"language":129098,"meta":78,"style":78},".center {\n  color: red;\n}\n",[32,147612,147613,147619,147629],{"__ignoreMap":78},[82,147614,147615,147617],{"class":84,"line":85},[82,147616,129387],{"class":2384},[82,147618,1349],{"class":92},[82,147620,147621,147623,147625,147627],{"class":84,"line":157},[82,147622,73461],{"class":88},[82,147624,1357],{"class":92},[82,147626,59979],{"class":88},[82,147628,3909],{"class":92},[82,147630,147631],{"class":84,"line":404},[82,147632,1391],{"class":92},[19,147634,147635,147638],{},[32,147636,147637],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[4078,147640],{"style":128952,"src":147641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[4078,147643],{"style":128952,"src":147644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[4078,147646],{"style":128952,"src":147647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147649,147650],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[4078,147652],{"style":128952,"src":147653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147655,147656],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,147658,147659],{"start":157},[29,147660,147661],{},"布局容器",[4078,147663],{"style":128952,"src":147664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147666,147667],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147669,147670],{},"container-fluid用于移动式布局比较方便",[26,147672,147673],{"start":404},[29,147674,147675,147676],{},"bootstrap ",[2913,147677,147678],{},"栅格系统原理",[4078,147680],{"style":128952,"src":147681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,147683,147684],{"start":413},[29,147685,147686],{},[2913,147687,147688],{},"栅格选项参数",[4078,147690],{"style":128952,"src":147691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147693,147694],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147696,17220],{},[73,147698,147699],{"className":129096,"code":147610,"language":129098,"meta":78,"style":78},[32,147700,147701,147707,147717],{"__ignoreMap":78},[82,147702,147703,147705],{"class":84,"line":85},[82,147704,129387],{"class":2384},[82,147706,1349],{"class":92},[82,147708,147709,147711,147713,147715],{"class":84,"line":157},[82,147710,73461],{"class":88},[82,147712,1357],{"class":92},[82,147714,59979],{"class":88},[82,147716,3909],{"class":92},[82,147718,147719],{"class":84,"line":404},[82,147720,1391],{"class":92},[19,147722,138139],{},[4078,147724],{"style":128952,"src":147725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147727,147728],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147730,147731],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147733,147734],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147736,147737],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147739,147740],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147742,147743],{},"汇总展示说明：",[73,147745,147746],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,147747,147748,147752,147766,147770],{"__ignoreMap":78},[82,147749,147750],{"class":84,"line":85},[82,147751,133207],{"class":2828},[82,147753,147754,147756,147758,147760,147762,147764],{"class":84,"line":157},[82,147755,3659],{"class":92},[82,147757,54173],{"class":53863},[82,147759,56046],{"class":2384},[82,147761,113],{"class":92},[82,147763,133220],{"class":96},[82,147765,53870],{"class":92},[82,147767,147768],{"class":84,"line":404},[82,147769,133227],{"class":92},[82,147771,147772,147774,147776],{"class":84,"line":413},[82,147773,54347],{"class":92},[82,147775,54173],{"class":53863},[82,147777,53870],{"class":92},[4078,147779],{"style":128952,"src":147780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147782,147783],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[73,147785,147786],{"className":129843,"code":133200,"language":129845,"meta":78,"style":78},[32,147787,147788,147792,147806,147810],{"__ignoreMap":78},[82,147789,147790],{"class":84,"line":85},[82,147791,133207],{"class":2828},[82,147793,147794,147796,147798,147800,147802,147804],{"class":84,"line":157},[82,147795,3659],{"class":92},[82,147797,54173],{"class":53863},[82,147799,56046],{"class":2384},[82,147801,113],{"class":92},[82,147803,133220],{"class":96},[82,147805,53870],{"class":92},[82,147807,147808],{"class":84,"line":404},[82,147809,133227],{"class":92},[82,147811,147812,147814,147816],{"class":84,"line":413},[82,147813,54347],{"class":92},[82,147815,54173],{"class":53863},[82,147817,53870],{"class":92},[26,147819,147820],{"start":508},[29,147821,147822],{},[2913,147823,147824],{},"列嵌套",[4078,147826],{"style":128952,"src":147827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147829,147830],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147832,147833],{},"没加row内部这样：",[4078,147835],{"style":128952,"src":147836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147838,147839],{},"加上row之后内部为：",[4078,147841],{"style":128952,"src":147842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,147844,147845],{"start":513},[29,147846,147847],{},[2913,147848,147849],{},"列偏移",[4078,147851],{"style":128952,"src":147852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147854,147855],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147857,147858],{},"要加偏移量，即偏移份数",[19,147860,147861],{},"偏移的份数=12-两个盒子的份数",[26,147863,147864],{"start":1388},[29,147865,147866],{},[2913,147867,147868],{},"列排序",[4078,147870],{"style":128952,"src":147871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147873,147874],{},"pull拉左；push推右",[26,147876,147877],{"start":1394},[29,147878,147879],{},[2913,147880,147881],{},"响应式工具",[4078,147883],{"style":128952,"src":147884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147886,147887],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[65,147889,147891],{"id":147890},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147893,147894],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147896,147897],{},"ul {",[19,147899,147900],{},"list-style: none;",[19,147902,147903],{},"margin:0;",[19,147905,147906],{},"padding:0; }",[4078,147908],{"style":128952,"src":147909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[4078,147911],{"style":128952,"src":147912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147914,147915],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147917,71446],{},[73,147919,147920],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,147921,147922,147928,147938],{"__ignoreMap":78},[82,147923,147924,147926],{"class":84,"line":85},[82,147925,132944],{"class":2384},[82,147927,1349],{"class":92},[82,147929,147930,147932,147934,147936],{"class":84,"line":157},[82,147931,133576],{"class":88},[82,147933,1357],{"class":92},[82,147935,26320],{"class":88},[82,147937,3909],{"class":92},[82,147939,147940],{"class":84,"line":404},[82,147941,1391],{"class":92},[19,147943,73009],{},[73,147945,147946],{"className":129096,"code":141766,"language":129098,"meta":78,"style":78},[32,147947,147948,147954,147964],{"__ignoreMap":78},[82,147949,147950,147952],{"class":84,"line":85},[82,147951,132944],{"class":2384},[82,147953,1349],{"class":92},[82,147955,147956,147958,147960,147962],{"class":84,"line":157},[82,147957,133576],{"class":88},[82,147959,1357],{"class":92},[82,147961,26320],{"class":88},[82,147963,3909],{"class":92},[82,147965,147966],{"class":84,"line":404},[82,147967,1391],{"class":92},[14,147969,147971],{"id":147970},"_215-swiper-插件使用","21.5 swiper 插件使用",[3755,147973,147974,147977,147980],{},[29,147975,147976],{},"下载需要的css和js文件html页面中 引入相关文件",[29,147978,147979],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,147981,147982],{},"根据需求定制修改模块",[4078,147984],{"style":128952,"src":147985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147987,147988],{},"解压后将这两部分放到项目中",[4078,147990],{"style":128952,"src":147991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147993,147994],{},"这个插件可以帮助我们实现轮播图效果",[19,147996,147997],{},"用法：",[4078,147999],{"style":128952,"src":148000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,148002,148003],{},"找到自己喜欢的",[4078,148005],{"style":128952,"src":148006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,148008,148009],{},"右键，查看网页源代码",[4078,148011],{"style":128952,"src":148012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,148014,148015],{},"复制人家的结构内容",[19,148017,148018],{},"然后去看API文档：",[4078,148020],{"style":128952,"src":148021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,148023,148024],{},"可以看看如何修改样式",[19,148026,148027],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2671,148029,148030],{},"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":78,"searchDepth":157,"depth":157,"links":148032},[148033,148038,148042,148047,148052],{"id":146833,"depth":157,"text":146834,"children":148034},[148035,148036,148037],{"id":146837,"depth":404,"text":146838},{"id":146847,"depth":404,"text":146848},{"id":146942,"depth":404,"text":146943},{"id":146957,"depth":157,"text":146958,"children":148039},[148040,148041],{"id":146979,"depth":404,"text":146980},{"id":146995,"depth":404,"text":146996},{"id":147070,"depth":157,"text":147071,"children":148043},[148044,148045,148046],{"id":147083,"depth":404,"text":147084},{"id":147307,"depth":404,"text":147308},{"id":147314,"depth":404,"text":147315},{"id":147455,"depth":157,"text":147456,"children":148048},[148049,148050,148051],{"id":147482,"depth":404,"text":147483},{"id":147545,"depth":404,"text":147546},{"id":147890,"depth":404,"text":147891},{"id":147970,"depth":157,"text":147971},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146825,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148059,"title":148060,"body":148061,"description":2699,"extension":2700,"meta":148281,"navigation":485,"path":148282,"seo":148283,"stem":148284,"__hash__":148285},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148062,"toc":148277},[148063,148066,148070,148073,148088,148093,148096,148101,148136,148141,148153,148158,148171,148176,148193,148198,148218,148223,148241,148244,148247,148250,148253,148257,148260,148263,148266,148269,148272,148275],[10,148064,148060],{"id":148065},"_22-代码提交与新型相对单位",[14,148067,148069],{"id":148068},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,148071,148072],{},"法1：",[26,148074,148075,148082,148085],{},[29,148076,148077,148078],{},"登录网站注册：",[323,148079,148080],{"href":148080,"rel":148081},"https:\u002F\u002Fgitee.com\u002F",[26449],[29,148083,148084],{},"码云创建新的仓库",[29,148086,148087],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3755,148089,148090],{},[29,148091,148092],{},"在网站根目录右键-- Git Bash Here",[4078,148094],{"style":128952,"src":148095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3755,148097,148098],{},[29,148099,148100],{},"如果是第一次利用git提交，请配置好全局选项",[73,148102,148104],{"className":119841,"code":148103,"language":119843,"meta":78,"style":78},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[32,148105,148106,148122],{"__ignoreMap":78},[82,148107,148108,148111,148113,148116,148119],{"class":84,"line":85},[82,148109,148110],{"class":2384},"git",[82,148112,122264],{"class":96},[82,148114,148115],{"class":88}," --global",[82,148117,148118],{"class":96}," user.name",[82,148120,148121],{"class":96}," \"你的名字\"\n",[82,148123,148124,148126,148128,148130,148133],{"class":84,"line":157},[82,148125,148110],{"class":2384},[82,148127,122264],{"class":96},[82,148129,148115],{"class":88},[82,148131,148132],{"class":96}," user.email",[82,148134,148135],{"class":96}," \"你的邮箱\"\n",[3755,148137,148138],{},[29,148139,148140],{},"初始化仓库",[73,148142,148144],{"className":119841,"code":148143,"language":119843,"meta":78,"style":78},"git init\n",[32,148145,148146],{"__ignoreMap":78},[82,148147,148148,148150],{"class":84,"line":85},[82,148149,148110],{"class":2384},[82,148151,148152],{"class":96}," init\n",[3755,148154,148155],{},[29,148156,148157],{},"把本地文件放到暂存区",[73,148159,148161],{"className":119841,"code":148160,"language":119843,"meta":78,"style":78},"git add .\n",[32,148162,148163],{"__ignoreMap":78},[82,148164,148165,148167,148169],{"class":84,"line":85},[82,148166,148110],{"class":2384},[82,148168,7802],{"class":96},[82,148170,31322],{"class":96},[3755,148172,148173],{},[29,148174,148175],{},"把本地文件放到本地仓库里面",[73,148177,148179],{"className":119841,"code":148178,"language":119843,"meta":78,"style":78},"git commit -m \"first commit\"\n",[32,148180,148181],{"__ignoreMap":78},[82,148182,148183,148185,148188,148190],{"class":84,"line":85},[82,148184,148110],{"class":2384},[82,148186,148187],{"class":96}," commit",[82,148189,103433],{"class":88},[82,148191,148192],{"class":96}," \"first commit\"\n",[3755,148194,148195],{},[29,148196,148197],{},"链接远程仓库",[73,148199,148201],{"className":119841,"code":148200,"language":119843,"meta":78,"style":78},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[32,148202,148203],{"__ignoreMap":78},[82,148204,148205,148207,148210,148212,148215],{"class":84,"line":85},[82,148206,148110],{"class":2384},[82,148208,148209],{"class":96}," remote",[82,148211,7802],{"class":96},[82,148213,148214],{"class":96}," origin",[82,148216,148217],{"class":96}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3755,148219,148220],{},[29,148221,148222],{},"把本地仓库的文件推送到远程仓库 push",[73,148224,148226],{"className":119841,"code":148225,"language":119843,"meta":78,"style":78},"git push -u origin master\n",[32,148227,148228],{"__ignoreMap":78},[82,148229,148230,148232,148234,148236,148238],{"class":84,"line":85},[82,148231,148110],{"class":2384},[82,148233,31597],{"class":96},[82,148235,30872],{"class":88},[82,148237,148214],{"class":96},[82,148239,148240],{"class":96}," master\n",[4078,148242],{"style":128952,"src":148243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148245,148246],{},"上方方法暂未实现，后边学完git后在整",[19,148248,148249],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[4078,148251],{"style":128952,"src":148252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148254,148256],{"id":148255},"_222-新型相对单位","22.2 新型相对单位",[4078,148258],{"style":128952,"src":148259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[4078,148261],{"style":128952,"src":148262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148264,148265],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148267,148268],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[4078,148270],{"style":128952,"src":148271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148273,148274],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2671,148276,26542],{},{"title":78,"searchDepth":157,"depth":157,"links":148278},[148279,148280],{"id":148068,"depth":157,"text":148069},{"id":148255,"depth":157,"text":148256},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148060,"description":2699},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148287,"title":148288,"body":148289,"description":148293,"extension":2700,"meta":148294,"navigation":485,"path":148295,"seo":148296,"stem":148297,"__hash__":148298},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148290,"toc":148291},[],{"title":78,"searchDepth":157,"depth":157,"links":148292},[],"自己正经开始学编程的第一门语言！",{"category":95390},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148288,"description":148293},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148300,"title":148301,"body":148302,"description":2699,"extension":2700,"meta":149441,"navigation":485,"path":149442,"seo":149443,"stem":149444,"__hash__":149445},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148303,"toc":149417},[148304,148307,148311,148314,148317,148342,148345,148351,148355,148358,148385,148388,148427,148430,148442,148445,148451,148455,148459,148486,148503,148510,148514,148517,148543,148546,148550,148553,148593,148596,148613,148619,148623,148628,148672,148675,148693,148696,148764,148768,148775,148778,148793,148796,148805,148808,148819,148822,148831,148834,148851,148854,148869,148873,148877,148880,148882,148901,148905,148908,148911,148922,148925,148931,148935,148941,148968,148971,148983,148986,148997,149000,149006,149010,149016,149066,149069,149111,149114,149147,149150,149184,149188,149191,149211,149214,149250,149253,149266,149270,149274,149280,149283,149296,149300,149303,149309,149312,149316,149319,149322,149365,149369,149385,149391,149398,149404,149414],[10,148305,148301],{"id":148306},"_1-python环境与第一个程序",[14,148308,148310],{"id":148309},"_11-什么是python","1.1 什么是Python",[19,148312,148313],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148315,148316],{},"理解 Python 时抓住三个关键词：",[26,148318,148319,148322,148325],{},[29,148320,148321],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,148323,148324],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,148326,148327,148328,2973,148331,2973,148334,2973,148337,2973,148339,2611],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[32,148329,148330],{},"os",[32,148332,148333],{},"sys",[32,148335,148336],{},"json",[32,148338,60418],{},[32,148340,148341],{},"datetime",[19,148343,148344],{},"Python 程序的运行链路：",[73,148346,148349],{"className":148347,"code":148348,"language":7780,"meta":78},[7778],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[32,148350,148348],{"__ignoreMap":78},[14,148352,148354],{"id":148353},"_12-python解释器","1.2 Python解释器",[19,148356,148357],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[73,148359,148361],{"className":26406,"code":148360,"language":26408,"meta":78,"style":78},"python --version\npython3 --version\npython\npython3\n",[32,148362,148363,148369,148375,148380],{"__ignoreMap":78},[82,148364,148365,148367],{"class":84,"line":85},[82,148366,77],{"class":2384},[82,148368,28875],{"class":88},[82,148370,148371,148373],{"class":84,"line":157},[82,148372,103430],{"class":2384},[82,148374,28875],{"class":88},[82,148376,148377],{"class":84,"line":404},[82,148378,148379],{"class":2384},"python\n",[82,148381,148382],{"class":84,"line":413},[82,148383,148384],{"class":2384},"python3\n",[19,148386,148387],{},"进入交互模式后，可以直接输入表达式：",[73,148389,148391],{"className":75,"code":148390,"language":77,"meta":78,"style":78},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[32,148392,148393,148404,148409,148422],{"__ignoreMap":78},[82,148394,148395,148398,148400,148402],{"class":84,"line":85},[82,148396,148397],{"class":112},">>>",[82,148399,27703],{"class":88},[82,148401,48130],{"class":112},[82,148403,50287],{"class":88},[82,148405,148406],{"class":84,"line":157},[82,148407,148408],{"class":88},"3\n",[82,148410,148411,148413,148416,148418,148420],{"class":84,"line":404},[82,148412,148397],{"class":112},[82,148414,148415],{"class":88}," print",[82,148417,93],{"class":92},[82,148419,1283],{"class":96},[82,148421,119],{"class":92},[82,148423,148424],{"class":84,"line":413},[82,148425,148426],{"class":92},"hello python\n",[19,148428,148429],{},"退出交互模式：",[73,148431,148433],{"className":75,"code":148432,"language":77,"meta":78,"style":78},"exit()\n",[32,148434,148435],{"__ignoreMap":78},[82,148436,148437,148440],{"class":84,"line":85},[82,148438,148439],{"class":88},"exit",[82,148441,4576],{"class":92},[19,148443,148444],{},"或使用快捷键：",[73,148446,148449],{"className":148447,"code":148448,"language":7780,"meta":78},[7778],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[32,148450,148448],{"__ignoreMap":78},[14,148452,148454],{"id":148453},"_13-安装python","1.3 安装Python",[65,148456,148458],{"id":148457},"_131-windows安装","1.3.1 Windows安装",[26,148460,148461,148468,148471,148477,148483],{},[29,148462,148463,148464],{},"打开 Python 官网：",[323,148465,148466],{"href":148466,"rel":148467},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26449],[29,148469,148470],{},"下载 Windows Installer。",[29,148472,148473,148474,2611],{},"安装时勾选 ",[32,148475,148476],{},"Add Python to PATH",[29,148478,148479,148480,2611],{},"点击 ",[32,148481,148482],{},"Install Now",[29,148484,148485],{},"安装完成后打开命令提示符验证：",[73,148487,148489],{"className":26406,"code":148488,"language":26408,"meta":78,"style":78},"python --version\npip --version\n",[32,148490,148491,148497],{"__ignoreMap":78},[82,148492,148493,148495],{"class":84,"line":85},[82,148494,77],{"class":2384},[82,148496,28875],{"class":88},[82,148498,148499,148501],{"class":84,"line":157},[82,148500,26415],{"class":2384},[82,148502,28875],{"class":88},[19,148504,148505,148506,148509],{},"如果提示 ",[32,148507,148508],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[65,148511,148513],{"id":148512},"_132-macos安装","1.3.2 macOS安装",[19,148515,148516],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[73,148518,148520],{"className":26406,"code":148519,"language":26408,"meta":78,"style":78},"brew install python\npython3 --version\npip3 --version\n",[32,148521,148522,148531,148537],{"__ignoreMap":78},[82,148523,148524,148527,148529],{"class":84,"line":85},[82,148525,148526],{"class":2384},"brew",[82,148528,26418],{"class":96},[82,148530,126862],{"class":96},[82,148532,148533,148535],{"class":84,"line":157},[82,148534,103430],{"class":2384},[82,148536,28875],{"class":88},[82,148538,148539,148541],{"class":84,"line":404},[82,148540,122245],{"class":2384},[82,148542,28875],{"class":88},[19,148544,148545],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[65,148547,148549],{"id":148548},"_133-linux安装","1.3.3 Linux安装",[19,148551,148552],{},"Ubuntu\u002FDebian：",[73,148554,148556],{"className":26406,"code":148555,"language":26408,"meta":78,"style":78},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[32,148557,148558,148566,148581,148587],{"__ignoreMap":78},[82,148559,148560,148562,148564],{"class":84,"line":85},[82,148561,27161],{"class":2384},[82,148563,119862],{"class":96},[82,148565,28824],{"class":96},[82,148567,148568,148570,148572,148574,148576,148578],{"class":84,"line":157},[82,148569,27161],{"class":2384},[82,148571,119862],{"class":96},[82,148573,26418],{"class":96},[82,148575,106953],{"class":96},[82,148577,103349],{"class":96},[82,148579,148580],{"class":96}," python3-venv\n",[82,148582,148583,148585],{"class":84,"line":404},[82,148584,103430],{"class":2384},[82,148586,28875],{"class":88},[82,148588,148589,148591],{"class":84,"line":413},[82,148590,122245],{"class":2384},[82,148592,28875],{"class":88},[19,148594,148595],{},"Fedora：",[73,148597,148599],{"className":26406,"code":148598,"language":26408,"meta":78,"style":78},"sudo dnf install python3 python3-pip\n",[32,148600,148601],{"__ignoreMap":78},[82,148602,148603,148605,148607,148609,148611],{"class":84,"line":85},[82,148604,27161],{"class":2384},[82,148606,28897],{"class":96},[82,148608,26418],{"class":96},[82,148610,106953],{"class":96},[82,148612,122310],{"class":96},[19,148614,148615,148616,148618],{},"Linux 上通常使用 ",[32,148617,103430],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148620,148622],{"id":148621},"_14-pip包管理器","1.4 pip包管理器",[19,148624,148625,148627],{},[32,148626,26415],{}," 用来安装第三方库。",[73,148629,148631],{"className":26406,"code":148630,"language":26408,"meta":78,"style":78},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[32,148632,148633,148642,148651,148659,148665],{"__ignoreMap":78},[82,148634,148635,148637,148639],{"class":84,"line":85},[82,148636,26415],{"class":2384},[82,148638,26418],{"class":96},[82,148640,148641],{"class":96}," requests\n",[82,148643,148644,148646,148649],{"class":84,"line":157},[82,148645,26415],{"class":2384},[82,148647,148648],{"class":96}," uninstall",[82,148650,148641],{"class":96},[82,148652,148653,148655,148657],{"class":84,"line":404},[82,148654,26415],{"class":2384},[82,148656,120119],{"class":96},[82,148658,148641],{"class":96},[82,148660,148661,148663],{"class":84,"line":413},[82,148662,26415],{"class":2384},[82,148664,121500],{"class":96},[82,148666,148667,148669],{"class":84,"line":508},[82,148668,26415],{"class":2384},[82,148670,148671],{"class":96}," freeze\n",[19,148673,148674],{},"国内网络较慢时可以临时使用镜像：",[73,148676,148678],{"className":26406,"code":148677,"language":26408,"meta":78,"style":78},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,148679,148680],{"__ignoreMap":78},[82,148681,148682,148684,148686,148689,148691],{"class":84,"line":85},[82,148683,26415],{"class":2384},[82,148685,26418],{"class":96},[82,148687,148688],{"class":96}," requests",[82,148690,29012],{"class":88},[82,148692,122273],{"class":96},[19,148694,148695],{},"常见第三方库：",[278,148697,148698,148707],{},[281,148699,148700],{},[284,148701,148702,148705],{},[287,148703,148704],{},"库",[287,148706,105247],{},[294,148708,148709,148717,148724,148732,148740,148748,148756],{},[284,148710,148711,148714],{},[299,148712,148713],{},"requests",[299,148715,148716],{},"网络请求",[284,148718,148719,148721],{},[299,148720,103177],{},[299,148722,148723],{},"数值计算",[284,148725,148726,148729],{},[299,148727,148728],{},"pandas",[299,148730,148731],{},"表格数据处理",[284,148733,148734,148737],{},[299,148735,148736],{},"matplotlib",[299,148738,148739],{},"绘图",[284,148741,148742,148745],{},[299,148743,148744],{},"pyecharts",[299,148746,148747],{},"ECharts 图表",[284,148749,148750,148753],{},[299,148751,148752],{},"flask",[299,148754,148755],{},"Web 后端",[284,148757,148758,148761],{},[299,148759,148760],{},"pytest",[299,148762,148763],{},"自动化测试",[14,148765,148767],{"id":148766},"_15-虚拟环境","1.5 虚拟环境",[19,148769,148770,148771,148774],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[32,148772,148773],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148776,148777],{},"创建虚拟环境：",[73,148779,148781],{"className":26406,"code":148780,"language":26408,"meta":78,"style":78},"python -m venv .venv\n",[32,148782,148783],{"__ignoreMap":78},[82,148784,148785,148787,148789,148791],{"class":84,"line":85},[82,148786,77],{"class":2384},[82,148788,103433],{"class":88},[82,148790,103436],{"class":96},[82,148792,103439],{"class":96},[19,148794,148795],{},"Windows 激活：",[73,148797,148799],{"className":26406,"code":148798,"language":26408,"meta":78,"style":78},".venv\\Scripts\\activate\n",[32,148800,148801],{"__ignoreMap":78},[82,148802,148803],{"class":84,"line":85},[82,148804,148798],{"class":2384},[19,148806,148807],{},"macOS\u002FLinux 激活：",[73,148809,148811],{"className":26406,"code":148810,"language":26408,"meta":78,"style":78},"source .venv\u002Fbin\u002Factivate\n",[32,148812,148813],{"__ignoreMap":78},[82,148814,148815,148817],{"class":84,"line":85},[82,148816,103444],{"class":88},[82,148818,103447],{"class":96},[19,148820,148821],{},"退出虚拟环境：",[73,148823,148825],{"className":26406,"code":148824,"language":26408,"meta":78,"style":78},"deactivate\n",[32,148826,148827],{"__ignoreMap":78},[82,148828,148829],{"class":84,"line":85},[82,148830,148824],{"class":2384},[19,148832,148833],{},"保存依赖：",[73,148835,148837],{"className":26406,"code":148836,"language":26408,"meta":78,"style":78},"pip freeze > requirements.txt\n",[32,148838,148839],{"__ignoreMap":78},[82,148840,148841,148843,148846,148848],{"class":84,"line":85},[82,148842,26415],{"class":2384},[82,148844,148845],{"class":96}," freeze",[82,148847,28804],{"class":112},[82,148849,148850],{"class":96}," requirements.txt\n",[19,148852,148853],{},"安装依赖：",[73,148855,148857],{"className":26406,"code":148856,"language":26408,"meta":78,"style":78},"pip install -r requirements.txt\n",[32,148858,148859],{"__ignoreMap":78},[82,148860,148861,148863,148865,148867],{"class":84,"line":85},[82,148862,26415],{"class":2384},[82,148864,26418],{"class":96},[82,148866,122184],{"class":88},[82,148868,148850],{"class":96},[14,148870,148872],{"id":148871},"_16-开发工具","1.6 开发工具",[65,148874,148876],{"id":148875},"_161-pycharm","1.6.1 PyCharm",[19,148878,148879],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148881,124607],{},[26,148883,148884,148887,148890,148895,148898],{},[29,148885,148886],{},"New Project：创建项目。",[29,148888,148889],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,148891,148892,148893,128527],{},"New Python File：创建 ",[32,148894,58],{},[29,148896,148897],{},"Run：运行当前文件。",[29,148899,148900],{},"Debug：断点调试。",[65,148902,148904],{"id":148903},"_162-vs-code","1.6.2 VS Code",[19,148906,148907],{},"VS Code 轻量，适合后续多语言开发。",[19,148909,148910],{},"建议安装插件：",[26,148912,148913,148916,148919],{},[29,148914,148915],{},"Python。",[29,148917,148918],{},"Pylance。",[29,148920,148921],{},"Jupyter。",[19,148923,148924],{},"选择解释器：",[73,148926,148929],{"className":148927,"code":148928,"language":7780,"meta":78},[7778],"Ctrl + Shift + P -> Python: Select Interpreter\n",[32,148930,148928],{"__ignoreMap":78},[14,148932,148934],{"id":148933},"_17-第一个python程序","1.7 第一个Python程序",[19,148936,148937,148938,27203],{},"创建文件 ",[32,148939,148940],{},"hello.py",[73,148942,148944],{"className":75,"code":148943,"language":77,"meta":78,"style":78},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[32,148945,148946,148957],{"__ignoreMap":78},[82,148947,148948,148950,148952,148955],{"class":84,"line":85},[82,148949,407],{"class":88},[82,148951,93],{"class":92},[82,148953,148954],{"class":96},"\"Hello World\"",[82,148956,119],{"class":92},[82,148958,148959,148961,148963,148966],{"class":84,"line":157},[82,148960,407],{"class":88},[82,148962,93],{"class":92},[82,148964,148965],{"class":96},"\"你好，Python\"",[82,148967,119],{"class":92},[19,148969,148970],{},"在终端运行：",[73,148972,148974],{"className":26406,"code":148973,"language":26408,"meta":78,"style":78},"python hello.py\n",[32,148975,148976],{"__ignoreMap":78},[82,148977,148978,148980],{"class":84,"line":85},[82,148979,77],{"class":2384},[82,148981,148982],{"class":96}," hello.py\n",[19,148984,148985],{},"或：",[73,148987,148989],{"className":26406,"code":148988,"language":26408,"meta":78,"style":78},"python3 hello.py\n",[32,148990,148991],{"__ignoreMap":78},[82,148992,148993,148995],{"class":84,"line":85},[82,148994,103430],{"class":2384},[82,148996,148982],{"class":96},[19,148998,148999],{},"输出：",[73,149001,149004],{"className":149002,"code":149003,"language":7780,"meta":78},[7778],"Hello World\n你好，Python\n",[32,149005,149003],{"__ignoreMap":78},[14,149007,149009],{"id":149008},"_18-print函数","1.8 print函数",[19,149011,149012,149015],{},[32,149013,149014],{},"print()"," 用来输出内容。",[73,149017,149019],{"className":75,"code":149018,"language":77,"meta":78,"style":78},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[32,149020,149021,149031,149041,149051],{"__ignoreMap":78},[82,149022,149023,149025,149027,149029],{"class":84,"line":85},[82,149024,407],{"class":88},[82,149026,93],{"class":92},[82,149028,8436],{"class":96},[82,149030,119],{"class":92},[82,149032,149033,149035,149037,149039],{"class":84,"line":157},[82,149034,407],{"class":88},[82,149036,93],{"class":92},[82,149038,3069],{"class":88},[82,149040,119],{"class":92},[82,149042,149043,149045,149047,149049],{"class":84,"line":404},[82,149044,407],{"class":88},[82,149046,93],{"class":92},[82,149048,2819],{"class":88},[82,149050,119],{"class":92},[82,149052,149053,149055,149057,149060,149062,149064],{"class":84,"line":413},[82,149054,407],{"class":88},[82,149056,93],{"class":92},[82,149058,149059],{"class":96},"\"年龄:\"",[82,149061,100],{"class":92},[82,149063,1373],{"class":88},[82,149065,119],{"class":92},[19,149067,149068],{},"多个内容用逗号隔开，默认中间加空格：",[73,149070,149072],{"className":75,"code":149071,"language":77,"meta":78,"style":78},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[32,149073,149074,149084,149094],{"__ignoreMap":78},[82,149075,149076,149079,149081],{"class":84,"line":85},[82,149077,149078],{"class":92},"name ",[82,149080,113],{"class":112},[82,149082,149083],{"class":96}," \"张三\"\n",[82,149085,149086,149089,149091],{"class":84,"line":157},[82,149087,149088],{"class":92},"age ",[82,149090,113],{"class":112},[82,149092,149093],{"class":88}," 18\n",[82,149095,149096,149098,149100,149103,149106,149108],{"class":84,"line":404},[82,149097,407],{"class":88},[82,149099,93],{"class":92},[82,149101,149102],{"class":96},"\"姓名:\"",[82,149104,149105],{"class":92},", name, ",[82,149107,149059],{"class":96},[82,149109,149110],{"class":92},", age)\n",[19,149112,149113],{},"修改分隔符：",[73,149115,149117],{"className":75,"code":149116,"language":77,"meta":78,"style":78},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[32,149118,149119],{"__ignoreMap":78},[82,149120,149121,149123,149125,149128,149130,149132,149134,149136,149138,149141,149143,149145],{"class":84,"line":85},[82,149122,407],{"class":88},[82,149124,93],{"class":92},[82,149126,149127],{"class":96},"\"2024\"",[82,149129,100],{"class":92},[82,149131,56876],{"class":96},[82,149133,100],{"class":92},[82,149135,56876],{"class":96},[82,149137,100],{"class":92},[82,149139,149140],{"class":108},"sep",[82,149142,113],{"class":112},[82,149144,35052],{"class":96},[82,149146,119],{"class":92},[19,149148,149149],{},"修改结尾符：",[73,149151,149153],{"className":75,"code":149152,"language":77,"meta":78,"style":78},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[32,149154,149155,149173],{"__ignoreMap":78},[82,149156,149157,149159,149161,149163,149165,149167,149169,149171],{"class":84,"line":85},[82,149158,407],{"class":88},[82,149160,93],{"class":92},[82,149162,8436],{"class":96},[82,149164,100],{"class":92},[82,149166,48365],{"class":108},[82,149168,113],{"class":112},[82,149170,6954],{"class":96},[82,149172,119],{"class":92},[82,149174,149175,149177,149179,149182],{"class":84,"line":157},[82,149176,407],{"class":88},[82,149178,93],{"class":92},[82,149180,149181],{"class":96},"\"python\"",[82,149183,119],{"class":92},[14,149185,149187],{"id":149186},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149189,149190],{},"交互运行适合临时验证：",[73,149192,149194],{"className":75,"code":149193,"language":77,"meta":78,"style":78},">>> 10 * 3\n30\n",[32,149195,149196,149206],{"__ignoreMap":78},[82,149197,149198,149200,149202,149204],{"class":84,"line":85},[82,149199,148397],{"class":112},[82,149201,4638],{"class":88},[82,149203,9110],{"class":112},[82,149205,122581],{"class":88},[82,149207,149208],{"class":84,"line":157},[82,149209,149210],{"class":88},"30\n",[19,149212,149213],{},"脚本运行适合保存程序：",[73,149215,149217],{"className":75,"code":149216,"language":77,"meta":78,"style":78},"price = 8\ncount = 5\nprint(price * count)\n",[32,149218,149219,149229,149238],{"__ignoreMap":78},[82,149220,149221,149224,149226],{"class":84,"line":85},[82,149222,149223],{"class":92},"price ",[82,149225,113],{"class":112},[82,149227,149228],{"class":88}," 8\n",[82,149230,149231,149234,149236],{"class":84,"line":157},[82,149232,149233],{"class":92},"count ",[82,149235,113],{"class":112},[82,149237,56987],{"class":88},[82,149239,149240,149242,149245,149247],{"class":84,"line":404},[82,149241,407],{"class":88},[82,149243,149244],{"class":92},"(price ",[82,149246,3212],{"class":112},[82,149248,149249],{"class":92}," count)\n",[19,149251,149252],{},"实际学习中推荐：",[26,149254,149255,149258,149263],{},[29,149256,149257],{},"临时试一个语法，用交互模式。",[29,149259,149260,149261,128527],{},"写完整练习，用 ",[32,149262,58],{},[29,149264,149265],{},"写项目，用独立目录和虚拟环境。",[14,149267,149269],{"id":149268},"_110-常见错误","1.10 常见错误",[65,149271,149273],{"id":149272},"_1101-命令找不到","1.10.1 命令找不到",[73,149275,149278],{"className":149276,"code":149277,"language":7780,"meta":78},[7778],"python: command not found\n",[32,149279,149277],{"__ignoreMap":78},[19,149281,149282],{},"原因：",[26,149284,149285,149288,149291],{},[29,149286,149287],{},"没安装 Python。",[29,149289,149290],{},"PATH 没配置。",[29,149292,149293,149294,2611],{},"Linux\u002FmacOS 应该使用 ",[32,149295,103430],{},[65,149297,149299],{"id":149298},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149301,149302],{},"不要把文件命名为：",[73,149304,149307],{"className":149305,"code":149306,"language":7780,"meta":78},[7778],"random.py\njson.py\ntime.py\nrequests.py\n",[32,149308,149306],{"__ignoreMap":78},[19,149310,149311],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[65,149313,149315],{"id":149314},"_1103-中文乱码","1.10.3 中文乱码",[19,149317,149318],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149320,149321],{},"如果读写文件出现乱码，要明确指定编码：",[73,149323,149325],{"className":75,"code":149324,"language":77,"meta":78,"style":78},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[32,149326,149327,149356],{"__ignoreMap":78},[82,149328,149329,149331,149333,149335,149337,149339,149341,149343,149345,149347,149349,149351,149353],{"class":84,"line":85},[82,149330,694],{"class":112},[82,149332,262],{"class":88},[82,149334,93],{"class":92},[82,149336,97],{"class":96},[82,149338,100],{"class":92},[82,149340,103],{"class":96},[82,149342,100],{"class":92},[82,149344,109],{"class":108},[82,149346,113],{"class":112},[82,149348,116],{"class":96},[82,149350,725],{"class":92},[82,149352,728],{"class":112},[82,149354,149355],{"class":92}," f:\n",[82,149357,149358,149360,149362],{"class":84,"line":157},[82,149359,737],{"class":92},[82,149361,113],{"class":112},[82,149363,149364],{"class":92}," f.read()\n",[14,149366,149368],{"id":149367},"_111-本章练习","1.11 本章练习",[26,149370,149371,149374,149380],{},[29,149372,149373],{},"安装 Python，并在终端输出版本号。",[29,149375,149376,149377,149379],{},"新建 ",[32,149378,148940],{},"，输出自己的姓名、年龄、学习目标。",[29,149381,106916,149382,149384],{},[32,149383,149014],{}," 输出下面格式：",[73,149386,149389],{"className":149387,"code":149388,"language":7780,"meta":78},[7778],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[32,149390,149388],{"__ignoreMap":78},[26,149392,149393],{"start":413},[29,149394,106916,149395,149397],{},[32,149396,149140],{}," 输出日期：",[73,149399,149402],{"className":149400,"code":149401,"language":7780,"meta":78},[7778],"2024-10-10\n",[32,149403,149401],{"__ignoreMap":78},[26,149405,149406],{"start":508},[29,149407,106916,149408,149410,149411,149413],{},[32,149409,48365],{}," 让两次 ",[32,149412,149014],{}," 输出在同一行。",[2671,149415,149416],{},"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":78,"searchDepth":157,"depth":157,"links":149418},[149419,149420,149421,149426,149427,149428,149432,149433,149434,149435,149440],{"id":148309,"depth":157,"text":148310},{"id":148353,"depth":157,"text":148354},{"id":148453,"depth":157,"text":148454,"children":149422},[149423,149424,149425],{"id":148457,"depth":404,"text":148458},{"id":148512,"depth":404,"text":148513},{"id":148548,"depth":404,"text":148549},{"id":148621,"depth":157,"text":148622},{"id":148766,"depth":157,"text":148767},{"id":148871,"depth":157,"text":148872,"children":149429},[149430,149431],{"id":148875,"depth":404,"text":148876},{"id":148903,"depth":404,"text":148904},{"id":148933,"depth":157,"text":148934},{"id":149008,"depth":157,"text":149009},{"id":149186,"depth":157,"text":149187},{"id":149268,"depth":157,"text":149269,"children":149436},[149437,149438,149439],{"id":149272,"depth":404,"text":149273},{"id":149298,"depth":404,"text":149299},{"id":149314,"depth":404,"text":149315},{"id":149367,"depth":157,"text":149368},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148301,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149447,"title":149448,"body":149449,"description":2699,"extension":2700,"meta":151845,"navigation":485,"path":151846,"seo":151847,"stem":151848,"__hash__":151849},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149450,"toc":151830},[149451,149454,149458,149461,149464,149481,149484,149526,149529,149533,149536,149539,149575,149578,149612,149615,149705,149709,149723,149726,149753,149756,149760,149862,149869,149872,149889,149893,149900,150089,150092,150165,150169,150172,150256,150259,150291,150295,150499,150502,150506,150512,150614,150617,150871,150875,150878,150881,150895,150897,151081,151085,151447,151453,151457,151460,151584,151587,151766,151769,151773,151806,151810,151827],[10,149452,149448],{"id":149453},"_10-json与pyecharts折线图",[14,149455,149457],{"id":149456},"_101-数据可视化","10.1 数据可视化",[19,149459,149460],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149462,149463],{},"常见图表：",[26,149465,149466,149469,149472,149475,149478],{},[29,149467,149468],{},"折线图：看趋势。",[29,149470,149471],{},"柱状图：看分类对比。",[29,149473,149474],{},"饼图：看占比。",[29,149476,149477],{},"地图：看地域分布。",[29,149479,149480],{},"散点图：看两个变量之间的关系。",[19,149482,149483],{},"Python 可视化常用库：",[278,149485,149486,149494],{},[281,149487,149488],{},[284,149489,149490,149492],{},[287,149491,148704],{},[287,149493,26324],{},[294,149495,149496,149503,149511,149518],{},[284,149497,149498,149500],{},[299,149499,148736],{},[299,149501,149502],{},"基础、经典、可定制",[284,149504,149505,149508],{},[299,149506,149507],{},"seaborn",[299,149509,149510],{},"统计图表更美观",[284,149512,149513,149515],{},[299,149514,148744],{},[299,149516,149517],{},"生成交互式网页图表",[284,149519,149520,149523],{},[299,149521,149522],{},"plotly",[299,149524,149525],{},"交互图表能力强",[19,149527,149528],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149530,149532],{"id":149531},"_102-json回顾","10.2 JSON回顾",[19,149534,149535],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149537,149538],{},"Python 字典：",[73,149540,149542],{"className":75,"code":149541,"language":77,"meta":78,"style":78},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[32,149543,149544,149552,149562,149571],{"__ignoreMap":78},[82,149545,149546,149548,149550],{"class":84,"line":85},[82,149547,104209],{"class":92},[82,149549,113],{"class":112},[82,149551,1349],{"class":92},[82,149553,149554,149556,149558,149560],{"class":84,"line":157},[82,149555,1354],{"class":96},[82,149557,1357],{"class":92},[82,149559,71825],{"class":96},[82,149561,1363],{"class":92},[82,149563,149564,149567,149569],{"class":84,"line":404},[82,149565,149566],{"class":96},"    \"value\"",[82,149568,1357],{"class":92},[82,149570,100009],{"class":88},[82,149572,149573],{"class":84,"line":413},[82,149574,1391],{"class":92},[19,149576,149577],{},"JSON 字符串：",[73,149579,149582],{"className":149580,"code":149581,"language":148336,"meta":78,"style":78},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[32,149583,149584,149588,149599,149608],{"__ignoreMap":78},[82,149585,149586],{"class":84,"line":85},[82,149587,4161],{"class":92},[82,149589,149590,149593,149595,149597],{"class":84,"line":157},[82,149591,149592],{"class":88},"  \"name\"",[82,149594,1357],{"class":92},[82,149596,71825],{"class":96},[82,149598,1363],{"class":92},[82,149600,149601,149604,149606],{"class":84,"line":404},[82,149602,149603],{"class":88},"  \"value\"",[82,149605,1357],{"class":92},[82,149607,100009],{"class":88},[82,149609,149610],{"class":84,"line":413},[82,149611,1391],{"class":92},[19,149613,149614],{},"Python 与 JSON 的转换：",[73,149616,149618],{"className":75,"code":149617,"language":77,"meta":78,"style":78},"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",[32,149619,149620,149626,149630,149655,149659,149677,149684,149688,149698],{"__ignoreMap":78},[82,149621,149622,149624],{"class":84,"line":85},[82,149623,1123],{"class":112},[82,149625,1335],{"class":92},[82,149627,149628],{"class":84,"line":157},[82,149629,486],{"emptyLinePlaceholder":485},[82,149631,149632,149634,149636,149638,149640,149642,149644,149646,149649,149651,149653],{"class":84,"line":404},[82,149633,104209],{"class":92},[82,149635,113],{"class":112},[82,149637,7043],{"class":92},[82,149639,1471],{"class":96},[82,149641,1357],{"class":92},[82,149643,71825],{"class":96},[82,149645,100],{"class":92},[82,149647,149648],{"class":96},"\"value\"",[82,149650,1357],{"class":92},[82,149652,3069],{"class":88},[82,149654,1391],{"class":92},[82,149656,149657],{"class":84,"line":413},[82,149658,486],{"emptyLinePlaceholder":485},[82,149660,149661,149664,149666,149669,149671,149673,149675],{"class":84,"line":508},[82,149662,149663],{"class":92},"json_text ",[82,149665,113],{"class":112},[82,149667,149668],{"class":92}," json.dumps(data, ",[82,149670,1410],{"class":108},[82,149672,113],{"class":112},[82,149674,1415],{"class":88},[82,149676,119],{"class":92},[82,149678,149679,149681],{"class":84,"line":513},[82,149680,407],{"class":88},[82,149682,149683],{"class":92},"(json_text)\n",[82,149685,149686],{"class":84,"line":1388},[82,149687,486],{"emptyLinePlaceholder":485},[82,149689,149690,149693,149695],{"class":84,"line":1394},[82,149691,149692],{"class":92},"new_data ",[82,149694,113],{"class":112},[82,149696,149697],{"class":92}," json.loads(json_text)\n",[82,149699,149700,149702],{"class":84,"line":1399},[82,149701,407],{"class":88},[82,149703,149704],{"class":92},"(new_data)\n",[14,149706,149708],{"id":149707},"_103-安装pyecharts","10.3 安装pyecharts",[73,149710,149712],{"className":26406,"code":149711,"language":26408,"meta":78,"style":78},"pip install pyecharts\n",[32,149713,149714],{"__ignoreMap":78},[82,149715,149716,149718,149720],{"class":84,"line":85},[82,149717,26415],{"class":2384},[82,149719,26418],{"class":96},[82,149721,149722],{"class":96}," pyecharts\n",[19,149724,149725],{},"验证：",[73,149727,149729],{"className":75,"code":149728,"language":77,"meta":78,"style":78},"import pyecharts\n\nprint(pyecharts.__version__)\n",[32,149730,149731,149737,149741],{"__ignoreMap":78},[82,149732,149733,149735],{"class":84,"line":85},[82,149734,1123],{"class":112},[82,149736,149722],{"class":92},[82,149738,149739],{"class":84,"line":157},[82,149740,486],{"emptyLinePlaceholder":485},[82,149742,149743,149745,149748,149751],{"class":84,"line":404},[82,149744,407],{"class":88},[82,149746,149747],{"class":92},"(pyecharts.",[82,149749,149750],{"class":88},"__version__",[82,149752,119],{"class":92},[19,149754,149755],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149757,149759],{"id":149758},"_104-第一个折线图","10.4 第一个折线图",[73,149761,149763],{"className":75,"code":149762,"language":77,"meta":78,"style":78},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[32,149764,149765,149777,149781,149790,149820,149852],{"__ignoreMap":78},[82,149766,149767,149769,149772,149774],{"class":84,"line":85},[82,149768,1117],{"class":112},[82,149770,149771],{"class":92}," pyecharts.charts ",[82,149773,1123],{"class":112},[82,149775,149776],{"class":92}," Line\n",[82,149778,149779],{"class":84,"line":157},[82,149780,486],{"emptyLinePlaceholder":485},[82,149782,149783,149785,149787],{"class":84,"line":404},[82,149784,491],{"class":92},[82,149786,113],{"class":112},[82,149788,149789],{"class":92}," Line()\n",[82,149791,149792,149795,149798,149800,149803,149805,149808,149810,149813,149815,149818],{"class":84,"line":413},[82,149793,149794],{"class":92},"line.add_xaxis([",[82,149796,149797],{"class":96},"\"周一\"",[82,149799,100],{"class":92},[82,149801,149802],{"class":96},"\"周二\"",[82,149804,100],{"class":92},[82,149806,149807],{"class":96},"\"周三\"",[82,149809,100],{"class":92},[82,149811,149812],{"class":96},"\"周四\"",[82,149814,100],{"class":92},[82,149816,149817],{"class":96},"\"周五\"",[82,149819,7252],{"class":92},[82,149821,149822,149825,149828,149830,149832,149834,149836,149838,149840,149842,149845,149847,149850],{"class":84,"line":508},[82,149823,149824],{"class":92},"line.add_yaxis(",[82,149826,149827],{"class":96},"\"销售额\"",[82,149829,80072],{"class":92},[82,149831,3069],{"class":88},[82,149833,100],{"class":92},[82,149835,3566],{"class":88},[82,149837,100],{"class":92},[82,149839,3611],{"class":88},[82,149841,100],{"class":92},[82,149843,149844],{"class":88},"150",[82,149846,100],{"class":92},[82,149848,149849],{"class":88},"180",[82,149851,7252],{"class":92},[82,149853,149854,149857,149860],{"class":84,"line":513},[82,149855,149856],{"class":92},"line.render(",[82,149858,149859],{"class":96},"\"line.html\"",[82,149861,119],{"class":92},[19,149863,149864,149865,149868],{},"运行后会生成 ",[32,149866,149867],{},"line.html","，用浏览器打开即可看到图表。",[19,149870,149871],{},"核心步骤：",[26,149873,149874,149877,149880,149883,149886],{},[29,149875,149876],{},"导入图表类。",[29,149878,149879],{},"创建图表对象。",[29,149881,149882],{},"添加 x 轴数据。",[29,149884,149885],{},"添加 y 轴数据。",[29,149887,149888],{},"渲染为 HTML。",[14,149890,149892],{"id":149891},"_105-全局配置","10.5 全局配置",[19,149894,149895,149896,149899],{},"常用配置在 ",[32,149897,149898],{},"pyecharts.options"," 中。",[73,149901,149903],{"className":75,"code":149902,"language":77,"meta":78,"style":78},"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",[32,149904,149905,149922,149932,149936,149944,149968,149996,150001,150020,150039,150057,150077,150081],{"__ignoreMap":78},[82,149906,149907,149909,149912,149914,149917,149919],{"class":84,"line":85},[82,149908,1117],{"class":112},[82,149910,149911],{"class":92}," pyecharts ",[82,149913,1123],{"class":112},[82,149915,149916],{"class":92}," options ",[82,149918,728],{"class":112},[82,149920,149921],{"class":92}," opts\n",[82,149923,149924,149926,149928,149930],{"class":84,"line":157},[82,149925,1117],{"class":112},[82,149927,149771],{"class":92},[82,149929,1123],{"class":112},[82,149931,149776],{"class":92},[82,149933,149934],{"class":84,"line":404},[82,149935,486],{"emptyLinePlaceholder":485},[82,149937,149938,149940,149942],{"class":84,"line":413},[82,149939,491],{"class":92},[82,149941,113],{"class":112},[82,149943,149789],{"class":92},[82,149945,149946,149948,149950,149952,149954,149956,149958,149960,149962,149964,149966],{"class":84,"line":508},[82,149947,149794],{"class":92},[82,149949,149797],{"class":96},[82,149951,100],{"class":92},[82,149953,149802],{"class":96},[82,149955,100],{"class":92},[82,149957,149807],{"class":96},[82,149959,100],{"class":92},[82,149961,149812],{"class":96},[82,149963,100],{"class":92},[82,149965,149817],{"class":96},[82,149967,7252],{"class":92},[82,149969,149970,149972,149974,149976,149978,149980,149982,149984,149986,149988,149990,149992,149994],{"class":84,"line":513},[82,149971,149824],{"class":92},[82,149973,149827],{"class":96},[82,149975,80072],{"class":92},[82,149977,3069],{"class":88},[82,149979,100],{"class":92},[82,149981,3566],{"class":88},[82,149983,100],{"class":92},[82,149985,3611],{"class":88},[82,149987,100],{"class":92},[82,149989,149844],{"class":88},[82,149991,100],{"class":92},[82,149993,149849],{"class":88},[82,149995,7252],{"class":92},[82,149997,149998],{"class":84,"line":1388},[82,149999,150000],{"class":92},"line.set_global_opts(\n",[82,150002,150003,150006,150008,150011,150013,150015,150018],{"class":84,"line":1394},[82,150004,150005],{"class":108},"    title_opts",[82,150007,113],{"class":112},[82,150009,150010],{"class":92},"opts.TitleOpts(",[82,150012,53970],{"class":108},[82,150014,113],{"class":112},[82,150016,150017],{"class":96},"\"一周销售额\"",[82,150019,40613],{"class":92},[82,150021,150022,150025,150027,150030,150032,150034,150037],{"class":84,"line":1399},[82,150023,150024],{"class":108},"    xaxis_opts",[82,150026,113],{"class":112},[82,150028,150029],{"class":92},"opts.AxisOpts(",[82,150031,82364],{"class":108},[82,150033,113],{"class":112},[82,150035,150036],{"class":96},"\"日期\"",[82,150038,40613],{"class":92},[82,150040,150041,150044,150046,150048,150050,150052,150055],{"class":84,"line":1430},[82,150042,150043],{"class":108},"    yaxis_opts",[82,150045,113],{"class":112},[82,150047,150029],{"class":92},[82,150049,82364],{"class":108},[82,150051,113],{"class":112},[82,150053,150054],{"class":96},"\"金额\"",[82,150056,40613],{"class":92},[82,150058,150059,150062,150064,150067,150070,150072,150075],{"class":84,"line":1818},[82,150060,150061],{"class":108},"    tooltip_opts",[82,150063,113],{"class":112},[82,150065,150066],{"class":92},"opts.TooltipOpts(",[82,150068,150069],{"class":108},"trigger",[82,150071,113],{"class":112},[82,150073,150074],{"class":96},"\"axis\"",[82,150076,40613],{"class":92},[82,150078,150079],{"class":84,"line":2082},[82,150080,119],{"class":92},[82,150082,150083,150085,150087],{"class":84,"line":2233},[82,150084,149856],{"class":92},[82,150086,149859],{"class":96},[82,150088,119],{"class":92},[19,150090,150091],{},"常见全局配置：",[278,150093,150094,150103],{},[281,150095,150096],{},[284,150097,150098,150101],{},[287,150099,150100],{},"配置",[287,150102,105247],{},[294,150104,150105,150115,150125,150135,150145,150155],{},[284,150106,150107,150112],{},[299,150108,150109],{},[32,150110,150111],{},"TitleOpts",[299,150113,150114],{},"标题",[284,150116,150117,150122],{},[299,150118,150119],{},[32,150120,150121],{},"LegendOpts",[299,150123,150124],{},"图例",[284,150126,150127,150132],{},[299,150128,150129],{},[32,150130,150131],{},"TooltipOpts",[299,150133,150134],{},"提示框",[284,150136,150137,150142],{},[299,150138,150139],{},[32,150140,150141],{},"AxisOpts",[299,150143,150144],{},"坐标轴",[284,150146,150147,150152],{},[299,150148,150149],{},[32,150150,150151],{},"VisualMapOpts",[299,150153,150154],{},"视觉映射",[284,150156,150157,150162],{},[299,150158,150159],{},[32,150160,150161],{},"DataZoomOpts",[299,150163,150164],{},"区域缩放",[14,150166,150168],{"id":150167},"_106-系列配置","10.6 系列配置",[19,150170,150171],{},"系列配置作用于某一组数据。",[73,150173,150175],{"className":75,"code":150174,"language":77,"meta":78,"style":78},"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",[32,150176,150177,150182,150193,150222,150233,150252],{"__ignoreMap":78},[82,150178,150179],{"class":84,"line":85},[82,150180,150181],{"class":92},"line.add_yaxis(\n",[82,150183,150184,150187,150189,150191],{"class":84,"line":157},[82,150185,150186],{"class":108},"    series_name",[82,150188,113],{"class":112},[82,150190,149827],{"class":96},[82,150192,1363],{"class":92},[82,150194,150195,150198,150200,150202,150204,150206,150208,150210,150212,150214,150216,150218,150220],{"class":84,"line":404},[82,150196,150197],{"class":108},"    y_axis",[82,150199,113],{"class":112},[82,150201,3639],{"class":92},[82,150203,3069],{"class":88},[82,150205,100],{"class":92},[82,150207,3566],{"class":88},[82,150209,100],{"class":92},[82,150211,3611],{"class":88},[82,150213,100],{"class":92},[82,150215,149844],{"class":88},[82,150217,100],{"class":92},[82,150219,149849],{"class":88},[82,150221,1720],{"class":92},[82,150223,150224,150227,150229,150231],{"class":84,"line":413},[82,150225,150226],{"class":108},"    is_smooth",[82,150228,113],{"class":112},[82,150230,1205],{"class":88},[82,150232,1363],{"class":92},[82,150234,150235,150238,150240,150243,150246,150248,150250],{"class":84,"line":508},[82,150236,150237],{"class":108},"    label_opts",[82,150239,113],{"class":112},[82,150241,150242],{"class":92},"opts.LabelOpts(",[82,150244,150245],{"class":108},"is_show",[82,150247,113],{"class":112},[82,150249,1205],{"class":88},[82,150251,40613],{"class":92},[82,150253,150254],{"class":84,"line":513},[82,150255,119],{"class":92},[19,150257,150258],{},"常用参数：",[26,150260,150261,150267,150273,150279,150285],{},[29,150262,150263,150266],{},[32,150264,150265],{},"series_name","：系列名称。",[29,150268,150269,150272],{},[32,150270,150271],{},"y_axis","：y 轴数据。",[29,150274,150275,150278],{},[32,150276,150277],{},"is_smooth","：是否平滑曲线。",[29,150280,150281,150284],{},[32,150282,150283],{},"label_opts","：标签配置。",[29,150286,150287,150290],{},[32,150288,150289],{},"symbol_size","：标记点大小。",[14,150292,150294],{"id":150293},"_107-多条折线","10.7 多条折线",[73,150296,150298],{"className":75,"code":150297,"language":77,"meta":78,"style":78},"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",[32,150299,150300,150314,150324,150328,150357,150361,150369,150374,150412,150449,150453,150470,150486,150490],{"__ignoreMap":78},[82,150301,150302,150304,150306,150308,150310,150312],{"class":84,"line":85},[82,150303,1117],{"class":112},[82,150305,149911],{"class":92},[82,150307,1123],{"class":112},[82,150309,149916],{"class":92},[82,150311,728],{"class":112},[82,150313,149921],{"class":92},[82,150315,150316,150318,150320,150322],{"class":84,"line":157},[82,150317,1117],{"class":112},[82,150319,149771],{"class":92},[82,150321,1123],{"class":112},[82,150323,149776],{"class":92},[82,150325,150326],{"class":84,"line":404},[82,150327,486],{"emptyLinePlaceholder":485},[82,150329,150330,150333,150335,150337,150339,150341,150343,150345,150347,150349,150351,150353,150355],{"class":84,"line":413},[82,150331,150332],{"class":92},"dates ",[82,150334,113],{"class":112},[82,150336,847],{"class":92},[82,150338,149797],{"class":96},[82,150340,100],{"class":92},[82,150342,149802],{"class":96},[82,150344,100],{"class":92},[82,150346,149807],{"class":96},[82,150348,100],{"class":92},[82,150350,149812],{"class":96},[82,150352,100],{"class":92},[82,150354,149817],{"class":96},[82,150356,875],{"class":92},[82,150358,150359],{"class":84,"line":508},[82,150360,486],{"emptyLinePlaceholder":485},[82,150362,150363,150365,150367],{"class":84,"line":513},[82,150364,491],{"class":92},[82,150366,113],{"class":112},[82,150368,149789],{"class":92},[82,150370,150371],{"class":84,"line":1388},[82,150372,150373],{"class":92},"line.add_xaxis(dates)\n",[82,150375,150376,150378,150381,150383,150385,150387,150390,150392,150394,150396,150398,150400,150402,150404,150406,150408,150410],{"class":84,"line":1394},[82,150377,149824],{"class":92},[82,150379,150380],{"class":96},"\"线上销售\"",[82,150382,80072],{"class":92},[82,150384,3069],{"class":88},[82,150386,100],{"class":92},[82,150388,150389],{"class":88},"130",[82,150391,100],{"class":92},[82,150393,3566],{"class":88},[82,150395,100],{"class":92},[82,150397,23632],{"class":88},[82,150399,100],{"class":92},[82,150401,4325],{"class":88},[82,150403,2286],{"class":92},[82,150405,150277],{"class":108},[82,150407,113],{"class":112},[82,150409,1205],{"class":88},[82,150411,119],{"class":92},[82,150413,150414,150416,150419,150421,150423,150425,150427,150429,150431,150433,150435,150437,150439,150441,150443,150445,150447],{"class":84,"line":1399},[82,150415,149824],{"class":92},[82,150417,150418],{"class":96},"\"线下销售\"",[82,150420,80072],{"class":92},[82,150422,3366],{"class":88},[82,150424,100],{"class":92},[82,150426,3611],{"class":88},[82,150428,100],{"class":92},[82,150430,3069],{"class":88},[82,150432,100],{"class":92},[82,150434,3566],{"class":88},[82,150436,100],{"class":92},[82,150438,149844],{"class":88},[82,150440,2286],{"class":92},[82,150442,150277],{"class":108},[82,150444,113],{"class":112},[82,150446,1205],{"class":88},[82,150448,119],{"class":92},[82,150450,150451],{"class":84,"line":1430},[82,150452,150000],{"class":92},[82,150454,150455,150457,150459,150461,150463,150465,150468],{"class":84,"line":1818},[82,150456,150005],{"class":108},[82,150458,113],{"class":112},[82,150460,150010],{"class":92},[82,150462,53970],{"class":108},[82,150464,113],{"class":112},[82,150466,150467],{"class":96},"\"线上线下销售趋势\"",[82,150469,40613],{"class":92},[82,150471,150472,150474,150476,150478,150480,150482,150484],{"class":84,"line":2082},[82,150473,150061],{"class":108},[82,150475,113],{"class":112},[82,150477,150066],{"class":92},[82,150479,150069],{"class":108},[82,150481,113],{"class":112},[82,150483,150074],{"class":96},[82,150485,40613],{"class":92},[82,150487,150488],{"class":84,"line":2233},[82,150489,119],{"class":92},[82,150491,150492,150494,150497],{"class":84,"line":2255},[82,150493,149856],{"class":92},[82,150495,150496],{"class":96},"\"sales.html\"",[82,150498,119],{"class":92},[19,150500,150501],{},"多条折线适合比较不同指标或不同地区。",[14,150503,150505],{"id":150504},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150507,150508,150509,27203],{},"假设 ",[32,150510,150511],{},"sales.json",[73,150513,150515],{"className":149580,"code":150514,"language":148336,"meta":78,"style":78},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[32,150516,150517,150522,150554,150582,150610],{"__ignoreMap":78},[82,150518,150519],{"class":84,"line":85},[82,150520,150521],{"class":92},"[\n",[82,150523,150524,150527,150530,150532,150534,150536,150539,150541,150543,150545,150548,150550,150552],{"class":84,"line":157},[82,150525,150526],{"class":92},"  {",[82,150528,150529],{"class":88},"\"date\"",[82,150531,1357],{"class":92},[82,150533,149797],{"class":96},[82,150535,100],{"class":92},[82,150537,150538],{"class":88},"\"online\"",[82,150540,1357],{"class":92},[82,150542,3069],{"class":88},[82,150544,100],{"class":92},[82,150546,150547],{"class":88},"\"offline\"",[82,150549,1357],{"class":92},[82,150551,3366],{"class":88},[82,150553,1497],{"class":92},[82,150555,150556,150558,150560,150562,150564,150566,150568,150570,150572,150574,150576,150578,150580],{"class":84,"line":404},[82,150557,150526],{"class":92},[82,150559,150529],{"class":88},[82,150561,1357],{"class":92},[82,150563,149802],{"class":96},[82,150565,100],{"class":92},[82,150567,150538],{"class":88},[82,150569,1357],{"class":92},[82,150571,150389],{"class":88},[82,150573,100],{"class":92},[82,150575,150547],{"class":88},[82,150577,1357],{"class":92},[82,150579,3611],{"class":88},[82,150581,1497],{"class":92},[82,150583,150584,150586,150588,150590,150592,150594,150596,150598,150600,150602,150604,150606,150608],{"class":84,"line":413},[82,150585,150526],{"class":92},[82,150587,150529],{"class":88},[82,150589,1357],{"class":92},[82,150591,149807],{"class":96},[82,150593,100],{"class":92},[82,150595,150538],{"class":88},[82,150597,1357],{"class":92},[82,150599,3566],{"class":88},[82,150601,100],{"class":92},[82,150603,150547],{"class":88},[82,150605,1357],{"class":92},[82,150607,3069],{"class":88},[82,150609,1391],{"class":92},[82,150611,150612],{"class":84,"line":508},[82,150613,875],{"class":92},[19,150615,150616],{},"读取并绘图：",[73,150618,150620],{"className":75,"code":150619,"language":77,"meta":78,"style":78},"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",[32,150621,150622,150628,150642,150652,150656,150687,150699,150703,150711,150720,150729,150733,150745,150754,150763,150772,150776,150784,150788,150805,150822,150826,150843,150859,150863],{"__ignoreMap":78},[82,150623,150624,150626],{"class":84,"line":85},[82,150625,1123],{"class":112},[82,150627,1335],{"class":92},[82,150629,150630,150632,150634,150636,150638,150640],{"class":84,"line":157},[82,150631,1117],{"class":112},[82,150633,149911],{"class":92},[82,150635,1123],{"class":112},[82,150637,149916],{"class":92},[82,150639,728],{"class":112},[82,150641,149921],{"class":92},[82,150643,150644,150646,150648,150650],{"class":84,"line":404},[82,150645,1117],{"class":112},[82,150647,149771],{"class":92},[82,150649,1123],{"class":112},[82,150651,149776],{"class":92},[82,150653,150654],{"class":84,"line":413},[82,150655,486],{"emptyLinePlaceholder":485},[82,150657,150658,150660,150662,150664,150667,150669,150671,150673,150675,150677,150679,150681,150683,150685],{"class":84,"line":508},[82,150659,694],{"class":112},[82,150661,262],{"class":88},[82,150663,93],{"class":92},[82,150665,150666],{"class":96},"\"sales.json\"",[82,150668,100],{"class":92},[82,150670,103],{"class":96},[82,150672,100],{"class":92},[82,150674,109],{"class":108},[82,150676,113],{"class":112},[82,150678,116],{"class":96},[82,150680,725],{"class":92},[82,150682,728],{"class":112},[82,150684,398],{"class":108},[82,150686,669],{"class":92},[82,150688,150689,150691,150693,150695,150697],{"class":84,"line":513},[82,150690,103972],{"class":92},[82,150692,113],{"class":112},[82,150694,1650],{"class":92},[82,150696,256],{"class":108},[82,150698,119],{"class":92},[82,150700,150701],{"class":84,"line":1388},[82,150702,486],{"emptyLinePlaceholder":485},[82,150704,150705,150707,150709],{"class":84,"line":1394},[82,150706,150332],{"class":92},[82,150708,113],{"class":112},[82,150710,2408],{"class":92},[82,150712,150713,150716,150718],{"class":84,"line":1399},[82,150714,150715],{"class":92},"online_sales ",[82,150717,113],{"class":112},[82,150719,2408],{"class":92},[82,150721,150722,150725,150727],{"class":84,"line":1430},[82,150723,150724],{"class":92},"offline_sales ",[82,150726,113],{"class":112},[82,150728,2408],{"class":92},[82,150730,150731],{"class":84,"line":1818},[82,150732,486],{"emptyLinePlaceholder":485},[82,150734,150735,150737,150740,150742],{"class":84,"line":2082},[82,150736,597],{"class":112},[82,150738,150739],{"class":92}," item ",[82,150741,603],{"class":112},[82,150743,150744],{"class":92}," data:\n",[82,150746,150747,150750,150752],{"class":84,"line":2233},[82,150748,150749],{"class":92},"    dates.append(item[",[82,150751,150529],{"class":96},[82,150753,7252],{"class":92},[82,150755,150756,150759,150761],{"class":84,"line":2255},[82,150757,150758],{"class":92},"    online_sales.append(item[",[82,150760,150538],{"class":96},[82,150762,7252],{"class":92},[82,150764,150765,150768,150770],{"class":84,"line":2260},[82,150766,150767],{"class":92},"    offline_sales.append(item[",[82,150769,150547],{"class":96},[82,150771,7252],{"class":92},[82,150773,150774],{"class":84,"line":2298},[82,150775,486],{"emptyLinePlaceholder":485},[82,150777,150778,150780,150782],{"class":84,"line":2303},[82,150779,491],{"class":92},[82,150781,113],{"class":112},[82,150783,149789],{"class":92},[82,150785,150786],{"class":84,"line":2321},[82,150787,150373],{"class":92},[82,150789,150790,150792,150794,150797,150799,150801,150803],{"class":84,"line":2533},[82,150791,149824],{"class":92},[82,150793,150380],{"class":96},[82,150795,150796],{"class":92},", online_sales, ",[82,150798,150277],{"class":108},[82,150800,113],{"class":112},[82,150802,1205],{"class":88},[82,150804,119],{"class":92},[82,150806,150807,150809,150811,150814,150816,150818,150820],{"class":84,"line":2538},[82,150808,149824],{"class":92},[82,150810,150418],{"class":96},[82,150812,150813],{"class":92},", offline_sales, ",[82,150815,150277],{"class":108},[82,150817,113],{"class":112},[82,150819,1205],{"class":88},[82,150821,119],{"class":92},[82,150823,150824],{"class":84,"line":2548},[82,150825,150000],{"class":92},[82,150827,150828,150830,150832,150834,150836,150838,150841],{"class":84,"line":2579},[82,150829,150005],{"class":108},[82,150831,113],{"class":112},[82,150833,150010],{"class":92},[82,150835,53970],{"class":108},[82,150837,113],{"class":112},[82,150839,150840],{"class":96},"\"销售趋势\"",[82,150842,40613],{"class":92},[82,150844,150845,150847,150849,150851,150853,150855,150857],{"class":84,"line":2585},[82,150846,150061],{"class":108},[82,150848,113],{"class":112},[82,150850,150066],{"class":92},[82,150852,150069],{"class":108},[82,150854,113],{"class":112},[82,150856,150074],{"class":96},[82,150858,40613],{"class":92},[82,150860,150861],{"class":84,"line":4350},[82,150862,119],{"class":92},[82,150864,150865,150867,150869],{"class":84,"line":4355},[82,150866,149856],{"class":92},[82,150868,150496],{"class":96},[82,150870,119],{"class":92},[14,150872,150874],{"id":150873},"_109-数据清洗","10.9 数据清洗",[19,150876,150877],{},"真实数据经常不整齐，需要清洗。",[19,150879,150880],{},"常见问题：",[26,150882,150883,150886,150889,150892],{},[29,150884,150885],{},"数字是字符串。",[29,150887,150888],{},"字段缺失。",[29,150890,150891],{},"空值。",[29,150893,150894],{},"日期格式不统一。",[19,150896,17721],{},[73,150898,150900],{"className":75,"code":150899,"language":77,"meta":78,"style":78},"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",[32,150901,150902,150911,150933,150953,150974,150978,150982,150990,150999,151003,151014,151028,151037,151041,151045,151053,151063,151067,151074],{"__ignoreMap":78},[82,150903,150904,150907,150909],{"class":84,"line":85},[82,150905,150906],{"class":92},"raw_data ",[82,150908,113],{"class":112},[82,150910,1463],{"class":92},[82,150912,150913,150915,150917,150919,150921,150923,150926,150928,150931],{"class":84,"line":157},[82,150914,1468],{"class":92},[82,150916,150529],{"class":96},[82,150918,1357],{"class":92},[82,150920,149797],{"class":96},[82,150922,100],{"class":92},[82,150924,150925],{"class":96},"\"sales\"",[82,150927,1357],{"class":92},[82,150929,150930],{"class":96},"\"100\"",[82,150932,1497],{"class":92},[82,150934,150935,150937,150939,150941,150943,150945,150947,150949,150951],{"class":84,"line":404},[82,150936,1468],{"class":92},[82,150938,150529],{"class":96},[82,150940,1357],{"class":92},[82,150942,149802],{"class":96},[82,150944,100],{"class":92},[82,150946,150925],{"class":96},[82,150948,1357],{"class":92},[82,150950,1793],{"class":96},[82,150952,1497],{"class":92},[82,150954,150955,150957,150959,150961,150963,150965,150967,150969,150972],{"class":84,"line":413},[82,150956,1468],{"class":92},[82,150958,150529],{"class":96},[82,150960,1357],{"class":92},[82,150962,149807],{"class":96},[82,150964,100],{"class":92},[82,150966,150925],{"class":96},[82,150968,1357],{"class":92},[82,150970,150971],{"class":96},"\"120\"",[82,150973,1497],{"class":92},[82,150975,150976],{"class":84,"line":508},[82,150977,875],{"class":92},[82,150979,150980],{"class":84,"line":513},[82,150981,486],{"emptyLinePlaceholder":485},[82,150983,150984,150986,150988],{"class":84,"line":1388},[82,150985,150332],{"class":92},[82,150987,113],{"class":112},[82,150989,2408],{"class":92},[82,150991,150992,150995,150997],{"class":84,"line":1394},[82,150993,150994],{"class":92},"sales ",[82,150996,113],{"class":112},[82,150998,2408],{"class":92},[82,151000,151001],{"class":84,"line":1399},[82,151002,486],{"emptyLinePlaceholder":485},[82,151004,151005,151007,151009,151011],{"class":84,"line":1430},[82,151006,597],{"class":112},[82,151008,150739],{"class":92},[82,151010,603],{"class":112},[82,151012,151013],{"class":92}," raw_data:\n",[82,151015,151016,151019,151021,151024,151026],{"class":84,"line":1818},[82,151017,151018],{"class":92},"    value ",[82,151020,113],{"class":112},[82,151022,151023],{"class":92}," item.get(",[82,151025,150925],{"class":96},[82,151027,119],{"class":92},[82,151029,151030,151032,151034],{"class":84,"line":2082},[82,151031,2219],{"class":112},[82,151033,2222],{"class":112},[82,151035,151036],{"class":92}," value:\n",[82,151038,151039],{"class":84,"line":2233},[82,151040,2230],{"class":112},[82,151042,151043],{"class":84,"line":2255},[82,151044,486],{"emptyLinePlaceholder":485},[82,151046,151047,151049,151051],{"class":84,"line":2260},[82,151048,150749],{"class":92},[82,151050,150529],{"class":96},[82,151052,7252],{"class":92},[82,151054,151055,151058,151060],{"class":84,"line":2298},[82,151056,151057],{"class":92},"    sales.append(",[82,151059,2776],{"class":88},[82,151061,151062],{"class":92},"(value))\n",[82,151064,151065],{"class":84,"line":2303},[82,151066,486],{"emptyLinePlaceholder":485},[82,151068,151069,151071],{"class":84,"line":2321},[82,151070,407],{"class":88},[82,151072,151073],{"class":92},"(dates)\n",[82,151075,151076,151078],{"class":84,"line":2533},[82,151077,407],{"class":88},[82,151079,151080],{"class":92},"(sales)\n",[14,151082,151084],{"id":151083},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[73,151086,151088],{"className":75,"code":151087,"language":77,"meta":78,"style":78},"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",[32,151089,151090,151104,151114,151118,151126,151147,151169,151191,151213,151235,151239,151243,151265,151286,151290,151298,151302,151306,151316,151325,151335,151351,151355,151359,151376,151392,151408,151424,151434,151438],{"__ignoreMap":78},[82,151091,151092,151094,151096,151098,151100,151102],{"class":84,"line":85},[82,151093,1117],{"class":112},[82,151095,149911],{"class":92},[82,151097,1123],{"class":112},[82,151099,149916],{"class":92},[82,151101,728],{"class":112},[82,151103,149921],{"class":92},[82,151105,151106,151108,151110,151112],{"class":84,"line":157},[82,151107,1117],{"class":112},[82,151109,149771],{"class":92},[82,151111,1123],{"class":112},[82,151113,149776],{"class":92},[82,151115,151116],{"class":84,"line":404},[82,151117,486],{"emptyLinePlaceholder":485},[82,151119,151120,151122,151124],{"class":84,"line":413},[82,151121,150994],{"class":92},[82,151123,113],{"class":112},[82,151125,1463],{"class":92},[82,151127,151128,151130,151132,151134,151137,151139,151141,151143,151145],{"class":84,"line":508},[82,151129,1468],{"class":92},[82,151131,150529],{"class":96},[82,151133,1357],{"class":92},[82,151135,151136],{"class":96},"\"2024-10-01\"",[82,151138,100],{"class":92},[82,151140,86638],{"class":96},[82,151142,1357],{"class":92},[82,151144,94574],{"class":88},[82,151146,1497],{"class":92},[82,151148,151149,151151,151153,151155,151158,151160,151162,151164,151167],{"class":84,"line":513},[82,151150,1468],{"class":92},[82,151152,150529],{"class":96},[82,151154,1357],{"class":92},[82,151156,151157],{"class":96},"\"2024-10-02\"",[82,151159,100],{"class":92},[82,151161,86638],{"class":96},[82,151163,1357],{"class":92},[82,151165,151166],{"class":88},"1800",[82,151168,1497],{"class":92},[82,151170,151171,151173,151175,151177,151180,151182,151184,151186,151189],{"class":84,"line":1388},[82,151172,1468],{"class":92},[82,151174,150529],{"class":96},[82,151176,1357],{"class":92},[82,151178,151179],{"class":96},"\"2024-10-03\"",[82,151181,100],{"class":92},[82,151183,86638],{"class":96},[82,151185,1357],{"class":92},[82,151187,151188],{"class":88},"1500",[82,151190,1497],{"class":92},[82,151192,151193,151195,151197,151199,151202,151204,151206,151208,151211],{"class":84,"line":1394},[82,151194,1468],{"class":92},[82,151196,150529],{"class":96},[82,151198,1357],{"class":92},[82,151200,151201],{"class":96},"\"2024-10-04\"",[82,151203,100],{"class":92},[82,151205,86638],{"class":96},[82,151207,1357],{"class":92},[82,151209,151210],{"class":88},"2100",[82,151212,1497],{"class":92},[82,151214,151215,151217,151219,151221,151224,151226,151228,151230,151233],{"class":84,"line":1399},[82,151216,1468],{"class":92},[82,151218,150529],{"class":96},[82,151220,1357],{"class":92},[82,151222,151223],{"class":96},"\"2024-10-05\"",[82,151225,100],{"class":92},[82,151227,86638],{"class":96},[82,151229,1357],{"class":92},[82,151231,151232],{"class":88},"2600",[82,151234,1497],{"class":92},[82,151236,151237],{"class":84,"line":1430},[82,151238,875],{"class":92},[82,151240,151241],{"class":84,"line":1818},[82,151242,486],{"emptyLinePlaceholder":485},[82,151244,151245,151247,151249,151252,151254,151256,151258,151260,151262],{"class":84,"line":2082},[82,151246,150332],{"class":92},[82,151248,113],{"class":112},[82,151250,151251],{"class":92}," [item[",[82,151253,150529],{"class":96},[82,151255,7038],{"class":92},[82,151257,597],{"class":112},[82,151259,150739],{"class":92},[82,151261,603],{"class":112},[82,151263,151264],{"class":92}," sales]\n",[82,151266,151267,151270,151272,151274,151276,151278,151280,151282,151284],{"class":84,"line":2233},[82,151268,151269],{"class":92},"amounts ",[82,151271,113],{"class":112},[82,151273,151251],{"class":92},[82,151275,86638],{"class":96},[82,151277,7038],{"class":92},[82,151279,597],{"class":112},[82,151281,150739],{"class":92},[82,151283,603],{"class":112},[82,151285,151264],{"class":92},[82,151287,151288],{"class":84,"line":2255},[82,151289,486],{"emptyLinePlaceholder":485},[82,151291,151292,151294,151296],{"class":84,"line":2260},[82,151293,491],{"class":92},[82,151295,113],{"class":112},[82,151297,149789],{"class":92},[82,151299,151300],{"class":84,"line":2298},[82,151301,150373],{"class":92},[82,151303,151304],{"class":84,"line":2303},[82,151305,150181],{"class":92},[82,151307,151308,151310,151312,151314],{"class":84,"line":2321},[82,151309,150186],{"class":108},[82,151311,113],{"class":112},[82,151313,149827],{"class":96},[82,151315,1363],{"class":92},[82,151317,151318,151320,151322],{"class":84,"line":2533},[82,151319,150197],{"class":108},[82,151321,113],{"class":112},[82,151323,151324],{"class":92},"amounts,\n",[82,151326,151327,151329,151331,151333],{"class":84,"line":2538},[82,151328,150226],{"class":108},[82,151330,113],{"class":112},[82,151332,1205],{"class":88},[82,151334,1363],{"class":92},[82,151336,151337,151339,151341,151343,151345,151347,151349],{"class":84,"line":2548},[82,151338,150237],{"class":108},[82,151340,113],{"class":112},[82,151342,150242],{"class":92},[82,151344,150245],{"class":108},[82,151346,113],{"class":112},[82,151348,1205],{"class":88},[82,151350,40613],{"class":92},[82,151352,151353],{"class":84,"line":2579},[82,151354,119],{"class":92},[82,151356,151357],{"class":84,"line":2585},[82,151358,150000],{"class":92},[82,151360,151361,151363,151365,151367,151369,151371,151374],{"class":84,"line":4350},[82,151362,150005],{"class":108},[82,151364,113],{"class":112},[82,151366,150010],{"class":92},[82,151368,53970],{"class":108},[82,151370,113],{"class":112},[82,151372,151373],{"class":96},"\"每日销售额\"",[82,151375,40613],{"class":92},[82,151377,151378,151380,151382,151384,151386,151388,151390],{"class":84,"line":4355},[82,151379,150024],{"class":108},[82,151381,113],{"class":112},[82,151383,150029],{"class":92},[82,151385,82364],{"class":108},[82,151387,113],{"class":112},[82,151389,150036],{"class":96},[82,151391,40613],{"class":92},[82,151393,151394,151396,151398,151400,151402,151404,151406],{"class":84,"line":4360},[82,151395,150043],{"class":108},[82,151397,113],{"class":112},[82,151399,150029],{"class":92},[82,151401,82364],{"class":108},[82,151403,113],{"class":112},[82,151405,150054],{"class":96},[82,151407,40613],{"class":92},[82,151409,151410,151412,151414,151416,151418,151420,151422],{"class":84,"line":4365},[82,151411,150061],{"class":108},[82,151413,113],{"class":112},[82,151415,150066],{"class":92},[82,151417,150069],{"class":108},[82,151419,113],{"class":112},[82,151421,150074],{"class":96},[82,151423,40613],{"class":92},[82,151425,151426,151429,151431],{"class":84,"line":4379},[82,151427,151428],{"class":108},"    datazoom_opts",[82,151430,113],{"class":112},[82,151432,151433],{"class":92},"[opts.DataZoomOpts()],\n",[82,151435,151436],{"class":84,"line":4384},[82,151437,119],{"class":92},[82,151439,151440,151442,151445],{"class":84,"line":5176},[82,151441,149856],{"class":92},[82,151443,151444],{"class":96},"\"daily_sales.html\"",[82,151446,119],{"class":92},[19,151448,151449,151452],{},[32,151450,151451],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151454,151456],{"id":151455},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151458,151459],{},"如果数据结构如下：",[73,151461,151463],{"className":75,"code":151462,"language":77,"meta":78,"style":78},"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",[32,151464,151465,151473,151481,151503,151524,151529,151536,151556,151576,151580],{"__ignoreMap":78},[82,151466,151467,151469,151471],{"class":84,"line":85},[82,151468,104209],{"class":92},[82,151470,113],{"class":112},[82,151472,1349],{"class":92},[82,151474,151475,151478],{"class":84,"line":157},[82,151476,151477],{"class":96},"    \"北京\"",[82,151479,151480],{"class":92},": [\n",[82,151482,151483,151485,151487,151489,151492,151494,151497,151499,151501],{"class":84,"line":404},[82,151484,7512],{"class":92},[82,151486,150529],{"class":96},[82,151488,1357],{"class":92},[82,151490,151491],{"class":96},"\"2024-01-01\"",[82,151493,100],{"class":92},[82,151495,151496],{"class":96},"\"confirm\"",[82,151498,1357],{"class":92},[82,151500,440],{"class":88},[82,151502,1497],{"class":92},[82,151504,151505,151507,151509,151511,151514,151516,151518,151520,151522],{"class":84,"line":413},[82,151506,7512],{"class":92},[82,151508,150529],{"class":96},[82,151510,1357],{"class":92},[82,151512,151513],{"class":96},"\"2024-01-02\"",[82,151515,100],{"class":92},[82,151517,151496],{"class":96},[82,151519,1357],{"class":92},[82,151521,3254],{"class":88},[82,151523,1497],{"class":92},[82,151525,151526],{"class":84,"line":508},[82,151527,151528],{"class":92},"    ],\n",[82,151530,151531,151534],{"class":84,"line":513},[82,151532,151533],{"class":96},"    \"上海\"",[82,151535,151480],{"class":92},[82,151537,151538,151540,151542,151544,151546,151548,151550,151552,151554],{"class":84,"line":1388},[82,151539,7512],{"class":92},[82,151541,150529],{"class":96},[82,151543,1357],{"class":92},[82,151545,151491],{"class":96},[82,151547,100],{"class":92},[82,151549,151496],{"class":96},[82,151551,1357],{"class":92},[82,151553,3153],{"class":88},[82,151555,1497],{"class":92},[82,151557,151558,151560,151562,151564,151566,151568,151570,151572,151574],{"class":84,"line":1394},[82,151559,7512],{"class":92},[82,151561,150529],{"class":96},[82,151563,1357],{"class":92},[82,151565,151513],{"class":96},[82,151567,100],{"class":92},[82,151569,151496],{"class":96},[82,151571,1357],{"class":92},[82,151573,3279],{"class":88},[82,151575,1497],{"class":92},[82,151577,151578],{"class":84,"line":1399},[82,151579,151528],{"class":92},[82,151581,151582],{"class":84,"line":1430},[82,151583,1391],{"class":92},[19,151585,151586],{},"绘制多地区趋势：",[73,151588,151590],{"className":75,"code":151589,"language":77,"meta":78,"style":78},"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",[32,151591,151592,151606,151616,151620,151645,151649,151657,151661,151665,151677,151699,151712,151716,151720,151737,151753,151757],{"__ignoreMap":78},[82,151593,151594,151596,151598,151600,151602,151604],{"class":84,"line":85},[82,151595,1117],{"class":112},[82,151597,149911],{"class":92},[82,151599,1123],{"class":112},[82,151601,149916],{"class":92},[82,151603,728],{"class":112},[82,151605,149921],{"class":92},[82,151607,151608,151610,151612,151614],{"class":84,"line":157},[82,151609,1117],{"class":112},[82,151611,149771],{"class":92},[82,151613,1123],{"class":112},[82,151615,149776],{"class":92},[82,151617,151618],{"class":84,"line":404},[82,151619,486],{"emptyLinePlaceholder":485},[82,151621,151622,151624,151626,151628,151630,151632,151634,151636,151638,151641,151643],{"class":84,"line":413},[82,151623,150332],{"class":92},[82,151625,113],{"class":112},[82,151627,151251],{"class":92},[82,151629,150529],{"class":96},[82,151631,7038],{"class":92},[82,151633,597],{"class":112},[82,151635,150739],{"class":92},[82,151637,603],{"class":112},[82,151639,151640],{"class":92}," data[",[82,151642,71825],{"class":96},[82,151644,80081],{"class":92},[82,151646,151647],{"class":84,"line":508},[82,151648,486],{"emptyLinePlaceholder":485},[82,151650,151651,151653,151655],{"class":84,"line":513},[82,151652,491],{"class":92},[82,151654,113],{"class":112},[82,151656,149789],{"class":92},[82,151658,151659],{"class":84,"line":1388},[82,151660,150373],{"class":92},[82,151662,151663],{"class":84,"line":1394},[82,151664,486],{"emptyLinePlaceholder":485},[82,151666,151667,151669,151672,151674],{"class":84,"line":1399},[82,151668,597],{"class":112},[82,151670,151671],{"class":92}," city, records ",[82,151673,603],{"class":112},[82,151675,151676],{"class":92}," data.items():\n",[82,151678,151679,151682,151684,151686,151688,151690,151692,151694,151696],{"class":84,"line":1430},[82,151680,151681],{"class":92},"    values ",[82,151683,113],{"class":112},[82,151685,151251],{"class":92},[82,151687,151496],{"class":96},[82,151689,7038],{"class":92},[82,151691,597],{"class":112},[82,151693,150739],{"class":92},[82,151695,603],{"class":112},[82,151697,151698],{"class":92}," records]\n",[82,151700,151701,151704,151706,151708,151710],{"class":84,"line":1818},[82,151702,151703],{"class":92},"    line.add_yaxis(city, values, ",[82,151705,150277],{"class":108},[82,151707,113],{"class":112},[82,151709,1205],{"class":88},[82,151711,119],{"class":92},[82,151713,151714],{"class":84,"line":2082},[82,151715,486],{"emptyLinePlaceholder":485},[82,151717,151718],{"class":84,"line":2233},[82,151719,150000],{"class":92},[82,151721,151722,151724,151726,151728,151730,151732,151735],{"class":84,"line":2255},[82,151723,150005],{"class":108},[82,151725,113],{"class":112},[82,151727,150010],{"class":92},[82,151729,53970],{"class":108},[82,151731,113],{"class":112},[82,151733,151734],{"class":96},"\"多地区趋势图\"",[82,151736,40613],{"class":92},[82,151738,151739,151741,151743,151745,151747,151749,151751],{"class":84,"line":2260},[82,151740,150061],{"class":108},[82,151742,113],{"class":112},[82,151744,150066],{"class":92},[82,151746,150069],{"class":108},[82,151748,113],{"class":112},[82,151750,150074],{"class":96},[82,151752,40613],{"class":92},[82,151754,151755],{"class":84,"line":2298},[82,151756,119],{"class":92},[82,151758,151759,151761,151764],{"class":84,"line":2303},[82,151760,149856],{"class":92},[82,151762,151763],{"class":96},"\"trend.html\"",[82,151765,119],{"class":92},[19,151767,151768],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151770,151772],{"id":151771},"_1012-易错点","10.12 易错点",[26,151774,151775,151781,151787,151797,151803],{},[29,151776,151777,151780],{},[32,151778,151779],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,151782,151783,151786],{},[32,151784,151785],{},"render()"," 生成的是 HTML，不是图片。",[29,151788,151789,151790,151793,151794,2611],{},"JSON 字符串用 ",[32,151791,151792],{},"json.loads()","，JSON 文件用 ",[32,151795,151796],{},"json.load()",[29,151798,151799,151800,2611],{},"中文 JSON 保存时加 ",[32,151801,151802],{},"ensure_ascii=False",[29,151804,151805],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151807,151809],{"id":151808},"_1013-本章练习","10.13 本章练习",[26,151811,151812,151815,151818,151821,151824],{},[29,151813,151814],{},"安装 pyecharts 并生成第一个折线图。",[29,151816,151817],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,151819,151820],{},"绘制两条折线，对比线上和线下销售额。",[29,151822,151823],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,151825,151826],{},"对含有空值的销售数据进行清洗后再绘图。",[2671,151828,151829],{},"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":78,"searchDepth":157,"depth":157,"links":151831},[151832,151833,151834,151835,151836,151837,151838,151839,151840,151841,151842,151843,151844],{"id":149456,"depth":157,"text":149457},{"id":149531,"depth":157,"text":149532},{"id":149707,"depth":157,"text":149708},{"id":149758,"depth":157,"text":149759},{"id":149891,"depth":157,"text":149892},{"id":150167,"depth":157,"text":150168},{"id":150293,"depth":157,"text":150294},{"id":150504,"depth":157,"text":150505},{"id":150873,"depth":157,"text":150874},{"id":151083,"depth":157,"text":151084},{"id":151455,"depth":157,"text":151456},{"id":151771,"depth":157,"text":151772},{"id":151808,"depth":157,"text":151809},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149448,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151851,"title":151852,"body":151853,"description":2699,"extension":2700,"meta":154209,"navigation":485,"path":154210,"seo":154211,"stem":154212,"__hash__":154213},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151854,"toc":154186},[151855,151858,151862,151865,151868,151944,151947,152037,152040,152044,152047,152091,152104,152108,152111,152178,152181,152185,152188,152272,152280,152284,152289,152429,152432,152443,152449,152455,152569,152573,152576,152579,152832,152835,152839,152842,152946,152949,152953,153104,153108,153115,153228,153232,153235,153341,153344,153348,153351,153382,153385,153489,153492,153496,153500,153510,153578,153582,153589,153653,153656,153660,153666,153762,153771,153775,154098,154107,154111,154139,154143,154183],[10,151856,151852],{"id":151857},"_11-面向对象基础",[14,151859,151861],{"id":151860},"_111-什么是面向对象","11.1 什么是面向对象",[19,151863,151864],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151866,151867],{},"面向过程：",[73,151869,151871],{"className":75,"code":151870,"language":77,"meta":78,"style":78},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[32,151872,151873,151882,151890,151894,151904,151935,151939],{"__ignoreMap":78},[82,151874,151875,151877,151879],{"class":84,"line":85},[82,151876,149078],{"class":92},[82,151878,113],{"class":112},[82,151880,151881],{"class":96}," \"小明\"\n",[82,151883,151884,151886,151888],{"class":84,"line":157},[82,151885,149088],{"class":92},[82,151887,113],{"class":112},[82,151889,149093],{"class":88},[82,151891,151892],{"class":84,"line":404},[82,151893,486],{"emptyLinePlaceholder":485},[82,151895,151896,151898,151901],{"class":84,"line":413},[82,151897,2381],{"class":112},[82,151899,151900],{"class":2384}," introduce",[82,151902,151903],{"class":92},"(name, age):\n",[82,151905,151906,151908,151910,151912,151915,151917,151919,151921,151924,151926,151928,151930,151933],{"class":84,"line":508},[82,151907,611],{"class":88},[82,151909,93],{"class":92},[82,151911,2822],{"class":112},[82,151913,151914],{"class":96},"\"我叫",[82,151916,3645],{"class":88},[82,151918,82364],{"class":92},[82,151920,3695],{"class":88},[82,151922,151923],{"class":96},"，今年",[82,151925,3645],{"class":88},[82,151927,72777],{"class":92},[82,151929,3695],{"class":88},[82,151931,151932],{"class":96},"岁\"",[82,151934,119],{"class":92},[82,151936,151937],{"class":84,"line":513},[82,151938,486],{"emptyLinePlaceholder":485},[82,151940,151941],{"class":84,"line":1388},[82,151942,151943],{"class":92},"introduce(name, age)\n",[19,151945,151946],{},"面向对象：",[73,151948,151950],{"className":75,"code":151949,"language":77,"meta":78,"style":78},"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",[32,151951,151952,151960,151968,151997,152001,152005,152014,152023,152032],{"__ignoreMap":78},[82,151953,151954,151956,151958],{"class":84,"line":85},[82,151955,17281],{"class":112},[82,151957,10489],{"class":2384},[82,151959,669],{"class":92},[82,151961,151962,151964,151966],{"class":84,"line":157},[82,151963,33377],{"class":112},[82,151965,151900],{"class":2384},[82,151967,33383],{"class":92},[82,151969,151970,151972,151974,151976,151978,151981,151983,151985,151987,151989,151991,151993,151995],{"class":84,"line":404},[82,151971,1901],{"class":88},[82,151973,93],{"class":92},[82,151975,2822],{"class":112},[82,151977,151914],{"class":96},[82,151979,151980],{"class":88},"{self",[82,151982,82855],{"class":92},[82,151984,3695],{"class":88},[82,151986,151923],{"class":96},[82,151988,151980],{"class":88},[82,151990,82867],{"class":92},[82,151992,3695],{"class":88},[82,151994,151932],{"class":96},[82,151996,119],{"class":92},[82,151998,151999],{"class":84,"line":413},[82,152000,486],{"emptyLinePlaceholder":485},[82,152002,152003],{"class":84,"line":508},[82,152004,486],{"emptyLinePlaceholder":485},[82,152006,152007,152009,152011],{"class":84,"line":513},[82,152008,1344],{"class":92},[82,152010,113],{"class":112},[82,152012,152013],{"class":92}," Student()\n",[82,152015,152016,152019,152021],{"class":84,"line":1388},[82,152017,152018],{"class":92},"student.name ",[82,152020,113],{"class":112},[82,152022,151881],{"class":96},[82,152024,152025,152028,152030],{"class":84,"line":1394},[82,152026,152027],{"class":92},"student.age ",[82,152029,113],{"class":112},[82,152031,149093],{"class":88},[82,152033,152034],{"class":84,"line":1399},[82,152035,152036],{"class":92},"student.introduce()\n",[19,152038,152039],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,152041,152043],{"id":152042},"_112-类和对象","11.2 类和对象",[19,152045,152046],{},"类是模板，对象是根据模板创建出来的具体实例。",[73,152048,152050],{"className":75,"code":152049,"language":77,"meta":78,"style":78},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[32,152051,152052,152060,152065,152069,152073,152082],{"__ignoreMap":78},[82,152053,152054,152056,152058],{"class":84,"line":85},[82,152055,17281],{"class":112},[82,152057,10489],{"class":2384},[82,152059,669],{"class":92},[82,152061,152062],{"class":84,"line":157},[82,152063,152064],{"class":112},"    pass\n",[82,152066,152067],{"class":84,"line":404},[82,152068,486],{"emptyLinePlaceholder":485},[82,152070,152071],{"class":84,"line":413},[82,152072,486],{"emptyLinePlaceholder":485},[82,152074,152075,152078,152080],{"class":84,"line":508},[82,152076,152077],{"class":92},"student1 ",[82,152079,113],{"class":112},[82,152081,152013],{"class":92},[82,152083,152084,152087,152089],{"class":84,"line":513},[82,152085,152086],{"class":92},"student2 ",[82,152088,113],{"class":112},[82,152090,152013],{"class":92},[19,152092,152093,152096,152097,103569,152100,152103],{},[32,152094,152095],{},"Student"," 是类，",[32,152098,152099],{},"student1",[32,152101,152102],{},"student2"," 是对象。",[14,152105,152107],{"id":152106},"_113-属性","11.3 属性",[19,152109,152110],{},"属性是对象保存的数据。",[73,152112,152114],{"className":75,"code":152113,"language":77,"meta":78,"style":78},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[32,152115,152116,152124,152128,152132,152136,152144,152152,152160,152164,152171],{"__ignoreMap":78},[82,152117,152118,152120,152122],{"class":84,"line":85},[82,152119,17281],{"class":112},[82,152121,10489],{"class":2384},[82,152123,669],{"class":92},[82,152125,152126],{"class":84,"line":157},[82,152127,152064],{"class":112},[82,152129,152130],{"class":84,"line":404},[82,152131,486],{"emptyLinePlaceholder":485},[82,152133,152134],{"class":84,"line":413},[82,152135,486],{"emptyLinePlaceholder":485},[82,152137,152138,152140,152142],{"class":84,"line":508},[82,152139,1344],{"class":92},[82,152141,113],{"class":112},[82,152143,152013],{"class":92},[82,152145,152146,152148,152150],{"class":84,"line":513},[82,152147,152018],{"class":92},[82,152149,113],{"class":112},[82,152151,151881],{"class":96},[82,152153,152154,152156,152158],{"class":84,"line":1388},[82,152155,152027],{"class":92},[82,152157,113],{"class":112},[82,152159,149093],{"class":88},[82,152161,152162],{"class":84,"line":1394},[82,152163,486],{"emptyLinePlaceholder":485},[82,152165,152166,152168],{"class":84,"line":1399},[82,152167,407],{"class":88},[82,152169,152170],{"class":92},"(student.name)\n",[82,152172,152173,152175],{"class":84,"line":1430},[82,152174,407],{"class":88},[82,152176,152177],{"class":92},"(student.age)\n",[19,152179,152180],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152182,152184],{"id":152183},"_114-方法","11.4 方法",[19,152186,152187],{},"类中的函数叫方法。",[73,152189,152190],{"className":75,"code":151949,"language":77,"meta":78,"style":78},[32,152191,152192,152200,152208,152236,152240,152244,152252,152260,152268],{"__ignoreMap":78},[82,152193,152194,152196,152198],{"class":84,"line":85},[82,152195,17281],{"class":112},[82,152197,10489],{"class":2384},[82,152199,669],{"class":92},[82,152201,152202,152204,152206],{"class":84,"line":157},[82,152203,33377],{"class":112},[82,152205,151900],{"class":2384},[82,152207,33383],{"class":92},[82,152209,152210,152212,152214,152216,152218,152220,152222,152224,152226,152228,152230,152232,152234],{"class":84,"line":404},[82,152211,1901],{"class":88},[82,152213,93],{"class":92},[82,152215,2822],{"class":112},[82,152217,151914],{"class":96},[82,152219,151980],{"class":88},[82,152221,82855],{"class":92},[82,152223,3695],{"class":88},[82,152225,151923],{"class":96},[82,152227,151980],{"class":88},[82,152229,82867],{"class":92},[82,152231,3695],{"class":88},[82,152233,151932],{"class":96},[82,152235,119],{"class":92},[82,152237,152238],{"class":84,"line":413},[82,152239,486],{"emptyLinePlaceholder":485},[82,152241,152242],{"class":84,"line":508},[82,152243,486],{"emptyLinePlaceholder":485},[82,152245,152246,152248,152250],{"class":84,"line":513},[82,152247,1344],{"class":92},[82,152249,113],{"class":112},[82,152251,152013],{"class":92},[82,152253,152254,152256,152258],{"class":84,"line":1388},[82,152255,152018],{"class":92},[82,152257,113],{"class":112},[82,152259,151881],{"class":96},[82,152261,152262,152264,152266],{"class":84,"line":1394},[82,152263,152027],{"class":92},[82,152265,113],{"class":112},[82,152267,149093],{"class":88},[82,152269,152270],{"class":84,"line":1399},[82,152271,152036],{"class":92},[19,152273,152274,152276,152277,152279],{},[32,152275,33399],{}," 表示当前对象。调用方法时不需要手动传入 ",[32,152278,33399],{},"，Python 会自动传。",[14,152281,152283],{"id":152282},"_115-构造方法__init__","11.5 构造方法__init__",[19,152285,152286,152288],{},[32,152287,33405],{}," 在对象创建时自动执行，用于初始化属性。",[73,152290,152292],{"className":75,"code":152291,"language":77,"meta":78,"style":78},"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",[32,152293,152294,152302,152311,152323,152335,152346,152350,152358,152396,152400,152404,152425],{"__ignoreMap":78},[82,152295,152296,152298,152300],{"class":84,"line":85},[82,152297,17281],{"class":112},[82,152299,10489],{"class":2384},[82,152301,669],{"class":92},[82,152303,152304,152306,152308],{"class":84,"line":157},[82,152305,33377],{"class":112},[82,152307,33380],{"class":88},[82,152309,152310],{"class":92},"(self, name, age, score):\n",[82,152312,152313,152315,152318,152320],{"class":84,"line":404},[82,152314,33421],{"class":88},[82,152316,152317],{"class":92},".name ",[82,152319,113],{"class":112},[82,152321,152322],{"class":92}," name\n",[82,152324,152325,152327,152330,152332],{"class":84,"line":413},[82,152326,33421],{"class":88},[82,152328,152329],{"class":92},".age ",[82,152331,113],{"class":112},[82,152333,152334],{"class":92}," age\n",[82,152336,152337,152339,152342,152344],{"class":84,"line":508},[82,152338,33421],{"class":88},[82,152340,152341],{"class":92},".score ",[82,152343,113],{"class":112},[82,152345,4193],{"class":92},[82,152347,152348],{"class":84,"line":513},[82,152349,486],{"emptyLinePlaceholder":485},[82,152351,152352,152354,152356],{"class":84,"line":1388},[82,152353,33377],{"class":112},[82,152355,151900],{"class":2384},[82,152357,33383],{"class":92},[82,152359,152360,152362,152364,152366,152368,152370,152372,152374,152376,152378,152380,152382,152385,152387,152390,152392,152394],{"class":84,"line":1394},[82,152361,1901],{"class":88},[82,152363,93],{"class":92},[82,152365,2822],{"class":112},[82,152367,151914],{"class":96},[82,152369,151980],{"class":88},[82,152371,82855],{"class":92},[82,152373,3695],{"class":88},[82,152375,151923],{"class":96},[82,152377,151980],{"class":88},[82,152379,82867],{"class":92},[82,152381,3695],{"class":88},[82,152383,152384],{"class":96},"岁，成绩",[82,152386,151980],{"class":88},[82,152388,152389],{"class":92},".score",[82,152391,3695],{"class":88},[82,152393,216],{"class":96},[82,152395,119],{"class":92},[82,152397,152398],{"class":84,"line":1399},[82,152399,486],{"emptyLinePlaceholder":485},[82,152401,152402],{"class":84,"line":1430},[82,152403,486],{"emptyLinePlaceholder":485},[82,152405,152406,152408,152410,152413,152415,152417,152419,152421,152423],{"class":84,"line":1818},[82,152407,1344],{"class":92},[82,152409,113],{"class":112},[82,152411,152412],{"class":92}," Student(",[82,152414,1360],{"class":96},[82,152416,100],{"class":92},[82,152418,1373],{"class":88},[82,152420,100],{"class":92},[82,152422,1494],{"class":88},[82,152424,119],{"class":92},[82,152426,152427],{"class":84,"line":2082},[82,152428,152036],{"class":92},[19,152430,152431],{},"构造方法的好处：",[26,152433,152434,152437,152440],{},[29,152435,152436],{},"创建对象时必须提供必要数据。",[29,152438,152439],{},"属性初始化集中，不容易漏。",[29,152441,152442],{},"对象状态更完整。",[14,152444,152446,152447],{"id":152445},"_116-str","11.6 ",[2913,152448,3918],{},[19,152450,152451,152452,2611],{},"直接打印对象时，默认输出不直观。可以定义 ",[32,152453,152454],{},"__str__",[73,152456,152458],{"className":75,"code":152457,"language":77,"meta":78,"style":78},"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",[32,152459,152460,152468,152477,152487,152497,152501,152510,152538,152542,152546,152562],{"__ignoreMap":78},[82,152461,152462,152464,152466],{"class":84,"line":85},[82,152463,17281],{"class":112},[82,152465,10489],{"class":2384},[82,152467,669],{"class":92},[82,152469,152470,152472,152474],{"class":84,"line":157},[82,152471,33377],{"class":112},[82,152473,33380],{"class":88},[82,152475,152476],{"class":92},"(self, name, age):\n",[82,152478,152479,152481,152483,152485],{"class":84,"line":404},[82,152480,33421],{"class":88},[82,152482,152317],{"class":92},[82,152484,113],{"class":112},[82,152486,152322],{"class":92},[82,152488,152489,152491,152493,152495],{"class":84,"line":413},[82,152490,33421],{"class":88},[82,152492,152329],{"class":92},[82,152494,113],{"class":112},[82,152496,152334],{"class":92},[82,152498,152499],{"class":84,"line":508},[82,152500,486],{"emptyLinePlaceholder":485},[82,152502,152503,152505,152508],{"class":84,"line":513},[82,152504,33377],{"class":112},[82,152506,152507],{"class":88}," __str__",[82,152509,33383],{"class":92},[82,152511,152512,152514,152517,152520,152522,152524,152526,152529,152531,152533,152535],{"class":84,"line":1388},[82,152513,2405],{"class":112},[82,152515,152516],{"class":112}," f",[82,152518,152519],{"class":96},"\"Student(name=",[82,152521,151980],{"class":88},[82,152523,82855],{"class":92},[82,152525,3695],{"class":88},[82,152527,152528],{"class":96},", age=",[82,152530,151980],{"class":88},[82,152532,82867],{"class":92},[82,152534,3695],{"class":88},[82,152536,152537],{"class":96},")\"\n",[82,152539,152540],{"class":84,"line":1394},[82,152541,486],{"emptyLinePlaceholder":485},[82,152543,152544],{"class":84,"line":1399},[82,152545,486],{"emptyLinePlaceholder":485},[82,152547,152548,152550,152552,152554,152556,152558,152560],{"class":84,"line":1430},[82,152549,1344],{"class":92},[82,152551,113],{"class":112},[82,152553,152412],{"class":92},[82,152555,1360],{"class":96},[82,152557,100],{"class":92},[82,152559,1373],{"class":88},[82,152561,119],{"class":92},[82,152563,152564,152566],{"class":84,"line":1818},[82,152565,407],{"class":88},[82,152567,152568],{"class":92},"(student)\n",[14,152570,152572],{"id":152571},"_117-封装","11.7 封装",[19,152574,152575],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152577,152578],{},"Python 中以双下划线开头的属性通常视为私有属性。",[73,152580,152582],{"className":75,"code":152581,"language":77,"meta":78,"style":78},"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",[32,152583,152584,152593,152602,152614,152626,152630,152639,152648,152652,152662,152675,152686,152691,152702,152706,152715,152727,152738,152742,152755,152766,152770,152781,152785,152789,152807,152816,152825],{"__ignoreMap":78},[82,152585,152586,152588,152591],{"class":84,"line":85},[82,152587,17281],{"class":112},[82,152589,152590],{"class":2384}," Account",[82,152592,669],{"class":92},[82,152594,152595,152597,152599],{"class":84,"line":157},[82,152596,33377],{"class":112},[82,152598,33380],{"class":88},[82,152600,152601],{"class":92},"(self, owner, balance):\n",[82,152603,152604,152606,152609,152611],{"class":84,"line":404},[82,152605,33421],{"class":88},[82,152607,152608],{"class":92},".owner ",[82,152610,113],{"class":112},[82,152612,152613],{"class":92}," owner\n",[82,152615,152616,152618,152621,152623],{"class":84,"line":413},[82,152617,33421],{"class":88},[82,152619,152620],{"class":92},".__balance ",[82,152622,113],{"class":112},[82,152624,152625],{"class":92}," balance\n",[82,152627,152628],{"class":84,"line":508},[82,152629,486],{"emptyLinePlaceholder":485},[82,152631,152632,152634,152637],{"class":84,"line":513},[82,152633,33377],{"class":112},[82,152635,152636],{"class":2384}," get_balance",[82,152638,33383],{"class":92},[82,152640,152641,152643,152645],{"class":84,"line":1388},[82,152642,2405],{"class":112},[82,152644,41439],{"class":88},[82,152646,152647],{"class":92},".__balance\n",[82,152649,152650],{"class":84,"line":1394},[82,152651,486],{"emptyLinePlaceholder":485},[82,152653,152654,152656,152659],{"class":84,"line":1399},[82,152655,33377],{"class":112},[82,152657,152658],{"class":2384}," deposit",[82,152660,152661],{"class":92},"(self, money):\n",[82,152663,152664,152666,152669,152671,152673],{"class":84,"line":1430},[82,152665,5096],{"class":112},[82,152667,152668],{"class":92}," money ",[82,152670,4202],{"class":112},[82,152672,6688],{"class":88},[82,152674,669],{"class":92},[82,152676,152677,152679,152681,152684],{"class":84,"line":1818},[82,152678,37216],{"class":88},[82,152680,93],{"class":92},[82,152682,152683],{"class":96},"\"存款金额必须大于0\"",[82,152685,119],{"class":92},[82,152687,152688],{"class":84,"line":2082},[82,152689,152690],{"class":112},"            return\n",[82,152692,152693,152695,152697,152699],{"class":84,"line":2233},[82,152694,33421],{"class":88},[82,152696,152620],{"class":92},[82,152698,12068],{"class":112},[82,152700,152701],{"class":92}," money\n",[82,152703,152704],{"class":84,"line":2255},[82,152705,486],{"emptyLinePlaceholder":485},[82,152707,152708,152710,152713],{"class":84,"line":2260},[82,152709,33377],{"class":112},[82,152711,152712],{"class":2384}," withdraw",[82,152714,152661],{"class":92},[82,152716,152717,152719,152721,152723,152725],{"class":84,"line":2298},[82,152718,5096],{"class":112},[82,152720,152668],{"class":92},[82,152722,4202],{"class":112},[82,152724,6688],{"class":88},[82,152726,669],{"class":92},[82,152728,152729,152731,152733,152736],{"class":84,"line":2303},[82,152730,37216],{"class":88},[82,152732,93],{"class":92},[82,152734,152735],{"class":96},"\"取款金额必须大于0\"",[82,152737,119],{"class":92},[82,152739,152740],{"class":84,"line":2321},[82,152741,152690],{"class":112},[82,152743,152744,152746,152748,152750,152752],{"class":84,"line":2533},[82,152745,5096],{"class":112},[82,152747,152668],{"class":92},[82,152749,3709],{"class":112},[82,152751,41439],{"class":88},[82,152753,152754],{"class":92},".__balance:\n",[82,152756,152757,152759,152761,152764],{"class":84,"line":2538},[82,152758,37216],{"class":88},[82,152760,93],{"class":92},[82,152762,152763],{"class":96},"\"余额不足\"",[82,152765,119],{"class":92},[82,152767,152768],{"class":84,"line":2548},[82,152769,152690],{"class":112},[82,152771,152772,152774,152776,152779],{"class":84,"line":2579},[82,152773,33421],{"class":88},[82,152775,152620],{"class":92},[82,152777,152778],{"class":112},"-=",[82,152780,152701],{"class":92},[82,152782,152783],{"class":84,"line":2585},[82,152784,486],{"emptyLinePlaceholder":485},[82,152786,152787],{"class":84,"line":4350},[82,152788,486],{"emptyLinePlaceholder":485},[82,152790,152791,152794,152796,152799,152801,152803,152805],{"class":84,"line":4355},[82,152792,152793],{"class":92},"account ",[82,152795,113],{"class":112},[82,152797,152798],{"class":92}," Account(",[82,152800,1360],{"class":96},[82,152802,100],{"class":92},[82,152804,9002],{"class":88},[82,152806,119],{"class":92},[82,152808,152809,152812,152814],{"class":84,"line":4360},[82,152810,152811],{"class":92},"account.deposit(",[82,152813,4325],{"class":88},[82,152815,119],{"class":92},[82,152817,152818,152821,152823],{"class":84,"line":4365},[82,152819,152820],{"class":92},"account.withdraw(",[82,152822,3069],{"class":88},[82,152824,119],{"class":92},[82,152826,152827,152829],{"class":84,"line":4379},[82,152828,407],{"class":88},[82,152830,152831],{"class":92},"(account.get_balance())\n",[19,152833,152834],{},"封装的意义是避免外部随意修改内部状态。",[14,152836,152838],{"id":152837},"_118-继承","11.8 继承",[19,152840,152841],{},"继承可以让子类复用父类的属性和方法。",[73,152843,152845],{"className":75,"code":152844,"language":77,"meta":78,"style":78},"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",[32,152846,152847,152856,152865,152876,152880,152884,152898,152907,152918,152922,152926,152936,152941],{"__ignoreMap":78},[82,152848,152849,152851,152854],{"class":84,"line":85},[82,152850,17281],{"class":112},[82,152852,152853],{"class":2384}," Animal",[82,152855,669],{"class":92},[82,152857,152858,152860,152863],{"class":84,"line":157},[82,152859,33377],{"class":112},[82,152861,152862],{"class":2384}," eat",[82,152864,33383],{"class":92},[82,152866,152867,152869,152871,152874],{"class":84,"line":404},[82,152868,1901],{"class":88},[82,152870,93],{"class":92},[82,152872,152873],{"class":96},"\"吃东西\"",[82,152875,119],{"class":92},[82,152877,152878],{"class":84,"line":413},[82,152879,486],{"emptyLinePlaceholder":485},[82,152881,152882],{"class":84,"line":508},[82,152883,486],{"emptyLinePlaceholder":485},[82,152885,152886,152888,152891,152893,152896],{"class":84,"line":513},[82,152887,17281],{"class":112},[82,152889,152890],{"class":2384}," Dog",[82,152892,93],{"class":92},[82,152894,152895],{"class":2384},"Animal",[82,152897,33362],{"class":92},[82,152899,152900,152902,152905],{"class":84,"line":1388},[82,152901,33377],{"class":112},[82,152903,152904],{"class":2384}," bark",[82,152906,33383],{"class":92},[82,152908,152909,152911,152913,152916],{"class":84,"line":1394},[82,152910,1901],{"class":88},[82,152912,93],{"class":92},[82,152914,152915],{"class":96},"\"汪汪\"",[82,152917,119],{"class":92},[82,152919,152920],{"class":84,"line":1399},[82,152921,486],{"emptyLinePlaceholder":485},[82,152923,152924],{"class":84,"line":1430},[82,152925,486],{"emptyLinePlaceholder":485},[82,152927,152928,152931,152933],{"class":84,"line":1818},[82,152929,152930],{"class":92},"dog ",[82,152932,113],{"class":112},[82,152934,152935],{"class":92}," Dog()\n",[82,152937,152938],{"class":84,"line":2082},[82,152939,152940],{"class":92},"dog.eat()\n",[82,152942,152943],{"class":84,"line":2233},[82,152944,152945],{"class":92},"dog.bark()\n",[19,152947,152948],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152950,152952],{"id":152951},"_119-方法重写","11.9 方法重写",[73,152954,152956],{"className":75,"code":152955,"language":77,"meta":78,"style":78},"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",[32,152957,152958,152966,152975,152986,152990,152994,153006,153014,153024,153028,153032,153045,153053,153064,153068,153072,153080,153090,153094,153099],{"__ignoreMap":78},[82,152959,152960,152962,152964],{"class":84,"line":85},[82,152961,17281],{"class":112},[82,152963,152853],{"class":2384},[82,152965,669],{"class":92},[82,152967,152968,152970,152973],{"class":84,"line":157},[82,152969,33377],{"class":112},[82,152971,152972],{"class":2384}," speak",[82,152974,33383],{"class":92},[82,152976,152977,152979,152981,152984],{"class":84,"line":404},[82,152978,1901],{"class":88},[82,152980,93],{"class":92},[82,152982,152983],{"class":96},"\"动物叫\"",[82,152985,119],{"class":92},[82,152987,152988],{"class":84,"line":413},[82,152989,486],{"emptyLinePlaceholder":485},[82,152991,152992],{"class":84,"line":508},[82,152993,486],{"emptyLinePlaceholder":485},[82,152995,152996,152998,153000,153002,153004],{"class":84,"line":513},[82,152997,17281],{"class":112},[82,152999,152890],{"class":2384},[82,153001,93],{"class":92},[82,153003,152895],{"class":2384},[82,153005,33362],{"class":92},[82,153007,153008,153010,153012],{"class":84,"line":1388},[82,153009,33377],{"class":112},[82,153011,152972],{"class":2384},[82,153013,33383],{"class":92},[82,153015,153016,153018,153020,153022],{"class":84,"line":1394},[82,153017,1901],{"class":88},[82,153019,93],{"class":92},[82,153021,152915],{"class":96},[82,153023,119],{"class":92},[82,153025,153026],{"class":84,"line":1399},[82,153027,486],{"emptyLinePlaceholder":485},[82,153029,153030],{"class":84,"line":1430},[82,153031,486],{"emptyLinePlaceholder":485},[82,153033,153034,153036,153039,153041,153043],{"class":84,"line":1818},[82,153035,17281],{"class":112},[82,153037,153038],{"class":2384}," Cat",[82,153040,93],{"class":92},[82,153042,152895],{"class":2384},[82,153044,33362],{"class":92},[82,153046,153047,153049,153051],{"class":84,"line":2082},[82,153048,33377],{"class":112},[82,153050,152972],{"class":2384},[82,153052,33383],{"class":92},[82,153054,153055,153057,153059,153062],{"class":84,"line":2233},[82,153056,1901],{"class":88},[82,153058,93],{"class":92},[82,153060,153061],{"class":96},"\"喵喵\"",[82,153063,119],{"class":92},[82,153065,153066],{"class":84,"line":2255},[82,153067,486],{"emptyLinePlaceholder":485},[82,153069,153070],{"class":84,"line":2260},[82,153071,486],{"emptyLinePlaceholder":485},[82,153073,153074,153076,153078],{"class":84,"line":2298},[82,153075,152930],{"class":92},[82,153077,113],{"class":112},[82,153079,152935],{"class":92},[82,153081,153082,153085,153087],{"class":84,"line":2303},[82,153083,153084],{"class":92},"cat ",[82,153086,113],{"class":112},[82,153088,153089],{"class":92}," Cat()\n",[82,153091,153092],{"class":84,"line":2321},[82,153093,486],{"emptyLinePlaceholder":485},[82,153095,153096],{"class":84,"line":2533},[82,153097,153098],{"class":92},"dog.speak()\n",[82,153100,153101],{"class":84,"line":2538},[82,153102,153103],{"class":92},"cat.speak()\n",[14,153105,153107],{"id":153106},"_1110-super","11.10 super",[19,153109,153110,153111,153114],{},"子类可以通过 ",[32,153112,153113],{},"super()"," 调用父类方法。",[73,153116,153118],{"className":75,"code":153117,"language":77,"meta":78,"style":78},"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",[32,153119,153120,153128,153137,153147,153151,153155,153167,153176,153187,153197,153201,153205,153221],{"__ignoreMap":78},[82,153121,153122,153124,153126],{"class":84,"line":85},[82,153123,17281],{"class":112},[82,153125,18155],{"class":2384},[82,153127,669],{"class":92},[82,153129,153130,153132,153134],{"class":84,"line":157},[82,153131,33377],{"class":112},[82,153133,33380],{"class":88},[82,153135,153136],{"class":92},"(self, name):\n",[82,153138,153139,153141,153143,153145],{"class":84,"line":404},[82,153140,33421],{"class":88},[82,153142,152317],{"class":92},[82,153144,113],{"class":112},[82,153146,152322],{"class":92},[82,153148,153149],{"class":84,"line":413},[82,153150,486],{"emptyLinePlaceholder":485},[82,153152,153153],{"class":84,"line":508},[82,153154,486],{"emptyLinePlaceholder":485},[82,153156,153157,153159,153161,153163,153165],{"class":84,"line":513},[82,153158,17281],{"class":112},[82,153160,10489],{"class":2384},[82,153162,93],{"class":92},[82,153164,21630],{"class":2384},[82,153166,33362],{"class":92},[82,153168,153169,153171,153173],{"class":84,"line":1388},[82,153170,33377],{"class":112},[82,153172,33380],{"class":88},[82,153174,153175],{"class":92},"(self, name, score):\n",[82,153177,153178,153180,153182,153184],{"class":84,"line":1394},[82,153179,33393],{"class":88},[82,153181,19845],{"class":92},[82,153183,33405],{"class":88},[82,153185,153186],{"class":92},"(name)\n",[82,153188,153189,153191,153193,153195],{"class":84,"line":1399},[82,153190,33421],{"class":88},[82,153192,152341],{"class":92},[82,153194,113],{"class":112},[82,153196,4193],{"class":92},[82,153198,153199],{"class":84,"line":1430},[82,153200,486],{"emptyLinePlaceholder":485},[82,153202,153203],{"class":84,"line":1818},[82,153204,486],{"emptyLinePlaceholder":485},[82,153206,153207,153209,153211,153213,153215,153217,153219],{"class":84,"line":2082},[82,153208,1344],{"class":92},[82,153210,113],{"class":112},[82,153212,152412],{"class":92},[82,153214,1360],{"class":96},[82,153216,100],{"class":92},[82,153218,1494],{"class":88},[82,153220,119],{"class":92},[82,153222,153223,153225],{"class":84,"line":2233},[82,153224,407],{"class":88},[82,153226,153227],{"class":92},"(student.name, student.score)\n",[14,153229,153231],{"id":153230},"_1111-多态","11.11 多态",[19,153233,153234],{},"多态指不同对象响应同一个方法，表现出不同结果。",[73,153236,153238],{"className":75,"code":153237,"language":77,"meta":78,"style":78},"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",[32,153239,153240,153248,153256,153266,153270,153274,153282,153290,153300,153304,153308,153318,153323,153327,153331,153336],{"__ignoreMap":78},[82,153241,153242,153244,153246],{"class":84,"line":85},[82,153243,17281],{"class":112},[82,153245,152890],{"class":2384},[82,153247,669],{"class":92},[82,153249,153250,153252,153254],{"class":84,"line":157},[82,153251,33377],{"class":112},[82,153253,152972],{"class":2384},[82,153255,33383],{"class":92},[82,153257,153258,153260,153262,153264],{"class":84,"line":404},[82,153259,1901],{"class":88},[82,153261,93],{"class":92},[82,153263,152915],{"class":96},[82,153265,119],{"class":92},[82,153267,153268],{"class":84,"line":413},[82,153269,486],{"emptyLinePlaceholder":485},[82,153271,153272],{"class":84,"line":508},[82,153273,486],{"emptyLinePlaceholder":485},[82,153275,153276,153278,153280],{"class":84,"line":513},[82,153277,17281],{"class":112},[82,153279,153038],{"class":2384},[82,153281,669],{"class":92},[82,153283,153284,153286,153288],{"class":84,"line":1388},[82,153285,33377],{"class":112},[82,153287,152972],{"class":2384},[82,153289,33383],{"class":92},[82,153291,153292,153294,153296,153298],{"class":84,"line":1394},[82,153293,1901],{"class":88},[82,153295,93],{"class":92},[82,153297,153061],{"class":96},[82,153299,119],{"class":92},[82,153301,153302],{"class":84,"line":1399},[82,153303,486],{"emptyLinePlaceholder":485},[82,153305,153306],{"class":84,"line":1430},[82,153307,486],{"emptyLinePlaceholder":485},[82,153309,153310,153312,153315],{"class":84,"line":1818},[82,153311,2381],{"class":112},[82,153313,153314],{"class":2384}," make_sound",[82,153316,153317],{"class":92},"(animal):\n",[82,153319,153320],{"class":84,"line":2082},[82,153321,153322],{"class":92},"    animal.speak()\n",[82,153324,153325],{"class":84,"line":2233},[82,153326,486],{"emptyLinePlaceholder":485},[82,153328,153329],{"class":84,"line":2255},[82,153330,486],{"emptyLinePlaceholder":485},[82,153332,153333],{"class":84,"line":2260},[82,153334,153335],{"class":92},"make_sound(Dog())\n",[82,153337,153338],{"class":84,"line":2298},[82,153339,153340],{"class":92},"make_sound(Cat())\n",[19,153342,153343],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153345,153347],{"id":153346},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153349,153350],{},"实例属性属于对象：",[73,153352,153354],{"className":75,"code":153353,"language":77,"meta":78,"style":78},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[32,153355,153356,153364,153372],{"__ignoreMap":78},[82,153357,153358,153360,153362],{"class":84,"line":85},[82,153359,17281],{"class":112},[82,153361,10489],{"class":2384},[82,153363,669],{"class":92},[82,153365,153366,153368,153370],{"class":84,"line":157},[82,153367,33377],{"class":112},[82,153369,33380],{"class":88},[82,153371,153136],{"class":92},[82,153373,153374,153376,153378,153380],{"class":84,"line":404},[82,153375,33421],{"class":88},[82,153377,152317],{"class":92},[82,153379,113],{"class":112},[82,153381,152322],{"class":92},[19,153383,153384],{},"类属性属于类，所有对象共享：",[73,153386,153388],{"className":75,"code":153387,"language":77,"meta":78,"style":78},"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",[32,153389,153390,153398,153408,153412,153420,153430,153434,153438,153451,153464,153468,153475,153482],{"__ignoreMap":78},[82,153391,153392,153394,153396],{"class":84,"line":85},[82,153393,17281],{"class":112},[82,153395,10489],{"class":2384},[82,153397,669],{"class":92},[82,153399,153400,153403,153405],{"class":84,"line":157},[82,153401,153402],{"class":92},"    school ",[82,153404,113],{"class":112},[82,153406,153407],{"class":96}," \"黑马学校\"\n",[82,153409,153410],{"class":84,"line":404},[82,153411,486],{"emptyLinePlaceholder":485},[82,153413,153414,153416,153418],{"class":84,"line":413},[82,153415,33377],{"class":112},[82,153417,33380],{"class":88},[82,153419,153136],{"class":92},[82,153421,153422,153424,153426,153428],{"class":84,"line":508},[82,153423,33421],{"class":88},[82,153425,152317],{"class":92},[82,153427,113],{"class":112},[82,153429,152322],{"class":92},[82,153431,153432],{"class":84,"line":513},[82,153433,486],{"emptyLinePlaceholder":485},[82,153435,153436],{"class":84,"line":1388},[82,153437,486],{"emptyLinePlaceholder":485},[82,153439,153440,153443,153445,153447,153449],{"class":84,"line":1394},[82,153441,153442],{"class":92},"s1 ",[82,153444,113],{"class":112},[82,153446,152412],{"class":92},[82,153448,1360],{"class":96},[82,153450,119],{"class":92},[82,153452,153453,153456,153458,153460,153462],{"class":84,"line":1399},[82,153454,153455],{"class":92},"s2 ",[82,153457,113],{"class":112},[82,153459,152412],{"class":92},[82,153461,1508],{"class":96},[82,153463,119],{"class":92},[82,153465,153466],{"class":84,"line":1430},[82,153467,486],{"emptyLinePlaceholder":485},[82,153469,153470,153472],{"class":84,"line":1818},[82,153471,407],{"class":88},[82,153473,153474],{"class":92},"(s1.school)\n",[82,153476,153477,153479],{"class":84,"line":2082},[82,153478,407],{"class":88},[82,153480,153481],{"class":92},"(s2.school)\n",[82,153483,153484,153486],{"class":84,"line":2233},[82,153485,407],{"class":88},[82,153487,153488],{"class":92},"(Student.school)\n",[19,153490,153491],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153493,153495],{"id":153494},"_1113-类方法和静态方法","11.13 类方法和静态方法",[65,153497,153499],{"id":153498},"_11131-类方法","11.13.1 类方法",[19,153501,153502,153503,153506,153507,2611],{},"类方法使用 ",[32,153504,153505],{},"@classmethod","，第一个参数通常是 ",[32,153508,153509],{},"cls",[73,153511,153513],{"className":75,"code":153512,"language":77,"meta":78,"style":78},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[32,153514,153515,153523,153531,153535,153543,153553,153563,153567,153571],{"__ignoreMap":78},[82,153516,153517,153519,153521],{"class":84,"line":85},[82,153518,17281],{"class":112},[82,153520,10489],{"class":2384},[82,153522,669],{"class":92},[82,153524,153525,153527,153529],{"class":84,"line":157},[82,153526,153402],{"class":92},[82,153528,113],{"class":112},[82,153530,153407],{"class":96},[82,153532,153533],{"class":84,"line":404},[82,153534,486],{"emptyLinePlaceholder":485},[82,153536,153537,153540],{"class":84,"line":413},[82,153538,153539],{"class":2384},"    @",[82,153541,153542],{"class":88},"classmethod\n",[82,153544,153545,153547,153550],{"class":84,"line":508},[82,153546,33377],{"class":112},[82,153548,153549],{"class":2384}," get_school",[82,153551,153552],{"class":92},"(cls):\n",[82,153554,153555,153557,153560],{"class":84,"line":513},[82,153556,2405],{"class":112},[82,153558,153559],{"class":88}," cls",[82,153561,153562],{"class":92},".school\n",[82,153564,153565],{"class":84,"line":1388},[82,153566,486],{"emptyLinePlaceholder":485},[82,153568,153569],{"class":84,"line":1394},[82,153570,486],{"emptyLinePlaceholder":485},[82,153572,153573,153575],{"class":84,"line":1399},[82,153574,407],{"class":88},[82,153576,153577],{"class":92},"(Student.get_school())\n",[65,153579,153581],{"id":153580},"_11132-静态方法","11.13.2 静态方法",[19,153583,153584,153585,153588],{},"静态方法使用 ",[32,153586,153587],{},"@staticmethod","，不需要访问实例和类。",[73,153590,153592],{"className":75,"code":153591,"language":77,"meta":78,"style":78},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[32,153593,153594,153603,153610,153619,153630,153634,153638],{"__ignoreMap":78},[82,153595,153596,153598,153601],{"class":84,"line":85},[82,153597,17281],{"class":112},[82,153599,153600],{"class":2384}," MathUtils",[82,153602,669],{"class":92},[82,153604,153605,153607],{"class":84,"line":157},[82,153606,153539],{"class":2384},[82,153608,153609],{"class":88},"staticmethod\n",[82,153611,153612,153614,153616],{"class":84,"line":404},[82,153613,33377],{"class":112},[82,153615,7802],{"class":2384},[82,153617,153618],{"class":92},"(a, b):\n",[82,153620,153621,153623,153625,153627],{"class":84,"line":413},[82,153622,2405],{"class":112},[82,153624,13459],{"class":92},[82,153626,2249],{"class":112},[82,153628,153629],{"class":92}," b\n",[82,153631,153632],{"class":84,"line":508},[82,153633,486],{"emptyLinePlaceholder":485},[82,153635,153636],{"class":84,"line":513},[82,153637,486],{"emptyLinePlaceholder":485},[82,153639,153640,153642,153645,153647,153649,153651],{"class":84,"line":1388},[82,153641,407],{"class":88},[82,153643,153644],{"class":92},"(MathUtils.add(",[82,153646,2283],{"class":88},[82,153648,100],{"class":92},[82,153650,1425],{"class":88},[82,153652,33074],{"class":92},[19,153654,153655],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153657,153659],{"id":153658},"_1114-dataclass","11.14 dataclass",[19,153661,153662,153665],{},[32,153663,153664],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[73,153667,153669],{"className":75,"code":153668,"language":77,"meta":78,"style":78},"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",[32,153670,153671,153683,153687,153691,153696,153704,153712,153720,153728,153732,153736,153756],{"__ignoreMap":78},[82,153672,153673,153675,153678,153680],{"class":84,"line":85},[82,153674,1117],{"class":112},[82,153676,153677],{"class":92}," dataclasses ",[82,153679,1123],{"class":112},[82,153681,153682],{"class":92}," dataclass\n",[82,153684,153685],{"class":84,"line":157},[82,153686,486],{"emptyLinePlaceholder":485},[82,153688,153689],{"class":84,"line":404},[82,153690,486],{"emptyLinePlaceholder":485},[82,153692,153693],{"class":84,"line":413},[82,153694,153695],{"class":2384},"@dataclass\n",[82,153697,153698,153700,153702],{"class":84,"line":508},[82,153699,17281],{"class":112},[82,153701,10489],{"class":2384},[82,153703,669],{"class":92},[82,153705,153706,153709],{"class":84,"line":513},[82,153707,153708],{"class":92},"    name: ",[82,153710,153711],{"class":88},"str\n",[82,153713,153714,153717],{"class":84,"line":1388},[82,153715,153716],{"class":92},"    age: ",[82,153718,153719],{"class":88},"int\n",[82,153721,153722,153725],{"class":84,"line":1394},[82,153723,153724],{"class":92},"    score: ",[82,153726,153727],{"class":88},"float\n",[82,153729,153730],{"class":84,"line":1399},[82,153731,486],{"emptyLinePlaceholder":485},[82,153733,153734],{"class":84,"line":1430},[82,153735,486],{"emptyLinePlaceholder":485},[82,153737,153738,153740,153742,153744,153746,153748,153750,153752,153754],{"class":84,"line":1818},[82,153739,1344],{"class":92},[82,153741,113],{"class":112},[82,153743,152412],{"class":92},[82,153745,1360],{"class":96},[82,153747,100],{"class":92},[82,153749,1373],{"class":88},[82,153751,100],{"class":92},[82,153753,1494],{"class":88},[82,153755,119],{"class":92},[82,153757,153758,153760],{"class":84,"line":2082},[82,153759,407],{"class":88},[82,153761,152568],{"class":92},[19,153763,153764,153765,2973,153767,153770],{},"它会自动生成 ",[32,153766,33405],{},[32,153768,153769],{},"__repr__"," 等方法。适合数据模型类。",[14,153772,153774],{"id":153773},"_1115-小案例学生类","11.15 小案例：学生类",[73,153776,153778],{"className":75,"code":153777,"language":77,"meta":78,"style":78},"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",[32,153779,153780,153788,153797,153809,153819,153829,153839,153843,153852,153865,153869,153878,153884,153896,153908,153920,153932,153936,153940,153946,153956,153965,153975,153983,153991,153999,154003,154007,154015,154051,154055,154059,154084,154091],{"__ignoreMap":78},[82,153781,153782,153784,153786],{"class":84,"line":85},[82,153783,17281],{"class":112},[82,153785,10489],{"class":2384},[82,153787,669],{"class":92},[82,153789,153790,153792,153794],{"class":84,"line":157},[82,153791,33377],{"class":112},[82,153793,33380],{"class":88},[82,153795,153796],{"class":92},"(self, student_id, name, age, score):\n",[82,153798,153799,153801,153804,153806],{"class":84,"line":404},[82,153800,33421],{"class":88},[82,153802,153803],{"class":92},".student_id ",[82,153805,113],{"class":112},[82,153807,153808],{"class":92}," student_id\n",[82,153810,153811,153813,153815,153817],{"class":84,"line":413},[82,153812,33421],{"class":88},[82,153814,152317],{"class":92},[82,153816,113],{"class":112},[82,153818,152322],{"class":92},[82,153820,153821,153823,153825,153827],{"class":84,"line":508},[82,153822,33421],{"class":88},[82,153824,152329],{"class":92},[82,153826,113],{"class":112},[82,153828,152334],{"class":92},[82,153830,153831,153833,153835,153837],{"class":84,"line":513},[82,153832,33421],{"class":88},[82,153834,152341],{"class":92},[82,153836,113],{"class":112},[82,153838,4193],{"class":92},[82,153840,153841],{"class":84,"line":1388},[82,153842,486],{"emptyLinePlaceholder":485},[82,153844,153845,153847,153850],{"class":84,"line":1394},[82,153846,33377],{"class":112},[82,153848,153849],{"class":2384}," is_passed",[82,153851,33383],{"class":92},[82,153853,153854,153856,153858,153860,153862],{"class":84,"line":1399},[82,153855,2405],{"class":112},[82,153857,41439],{"class":88},[82,153859,152341],{"class":92},[82,153861,4313],{"class":112},[82,153863,153864],{"class":88}," 60\n",[82,153866,153867],{"class":84,"line":1430},[82,153868,486],{"emptyLinePlaceholder":485},[82,153870,153871,153873,153876],{"class":84,"line":1818},[82,153872,33377],{"class":112},[82,153874,153875],{"class":2384}," to_dict",[82,153877,33383],{"class":92},[82,153879,153880,153882],{"class":84,"line":2082},[82,153881,2405],{"class":112},[82,153883,1349],{"class":92},[82,153885,153886,153889,153891,153893],{"class":84,"line":2233},[82,153887,153888],{"class":96},"            \"student_id\"",[82,153890,1357],{"class":92},[82,153892,33399],{"class":88},[82,153894,153895],{"class":92},".student_id,\n",[82,153897,153898,153901,153903,153905],{"class":84,"line":2255},[82,153899,153900],{"class":96},"            \"name\"",[82,153902,1357],{"class":92},[82,153904,33399],{"class":88},[82,153906,153907],{"class":92},".name,\n",[82,153909,153910,153913,153915,153917],{"class":84,"line":2260},[82,153911,153912],{"class":96},"            \"age\"",[82,153914,1357],{"class":92},[82,153916,33399],{"class":88},[82,153918,153919],{"class":92},".age,\n",[82,153921,153922,153925,153927,153929],{"class":84,"line":2298},[82,153923,153924],{"class":96},"            \"score\"",[82,153926,1357],{"class":92},[82,153928,33399],{"class":88},[82,153930,153931],{"class":92},".score,\n",[82,153933,153934],{"class":84,"line":2303},[82,153935,5128],{"class":92},[82,153937,153938],{"class":84,"line":2321},[82,153939,486],{"emptyLinePlaceholder":485},[82,153941,153942,153944],{"class":84,"line":2533},[82,153943,153539],{"class":2384},[82,153945,153542],{"class":88},[82,153947,153948,153950,153953],{"class":84,"line":2538},[82,153949,33377],{"class":112},[82,153951,153952],{"class":2384}," from_dict",[82,153954,153955],{"class":92},"(cls, data):\n",[82,153957,153958,153960,153962],{"class":84,"line":2548},[82,153959,2405],{"class":112},[82,153961,153559],{"class":88},[82,153963,153964],{"class":92},"(\n",[82,153966,153967,153970,153973],{"class":84,"line":2579},[82,153968,153969],{"class":92},"            data[",[82,153971,153972],{"class":96},"\"student_id\"",[82,153974,1720],{"class":92},[82,153976,153977,153979,153981],{"class":84,"line":2585},[82,153978,153969],{"class":92},[82,153980,1471],{"class":96},[82,153982,1720],{"class":92},[82,153984,153985,153987,153989],{"class":84,"line":4350},[82,153986,153969],{"class":92},[82,153988,1480],{"class":96},[82,153990,1720],{"class":92},[82,153992,153993,153995,153997],{"class":84,"line":4355},[82,153994,153969],{"class":92},[82,153996,1489],{"class":96},[82,153998,1720],{"class":92},[82,154000,154001],{"class":84,"line":4360},[82,154002,40692],{"class":92},[82,154004,154005],{"class":84,"line":4365},[82,154006,486],{"emptyLinePlaceholder":485},[82,154008,154009,154011,154013],{"class":84,"line":4379},[82,154010,33377],{"class":112},[82,154012,152507],{"class":88},[82,154014,33383],{"class":92},[82,154016,154017,154019,154021,154023,154025,154028,154030,154033,154035,154037,154039,154041,154043,154045,154047,154049],{"class":84,"line":4384},[82,154018,2405],{"class":112},[82,154020,152516],{"class":112},[82,154022,216],{"class":96},[82,154024,151980],{"class":88},[82,154026,154027],{"class":92},".student_id",[82,154029,3695],{"class":88},[82,154031,154032],{"class":88}," {self",[82,154034,82855],{"class":92},[82,154036,3695],{"class":88},[82,154038,154032],{"class":88},[82,154040,82867],{"class":92},[82,154042,3695],{"class":88},[82,154044,154032],{"class":88},[82,154046,152389],{"class":92},[82,154048,3695],{"class":88},[82,154050,239],{"class":96},[82,154052,154053],{"class":84,"line":5176},[82,154054,486],{"emptyLinePlaceholder":485},[82,154056,154057],{"class":84,"line":5190},[82,154058,486],{"emptyLinePlaceholder":485},[82,154060,154061,154063,154065,154067,154070,154072,154074,154076,154078,154080,154082],{"class":84,"line":5198},[82,154062,1344],{"class":92},[82,154064,113],{"class":112},[82,154066,152412],{"class":92},[82,154068,154069],{"class":96},"\"001\"",[82,154071,100],{"class":92},[82,154073,1360],{"class":96},[82,154075,100],{"class":92},[82,154077,1373],{"class":88},[82,154079,100],{"class":92},[82,154081,1494],{"class":88},[82,154083,119],{"class":92},[82,154085,154086,154088],{"class":84,"line":5203},[82,154087,407],{"class":88},[82,154089,154090],{"class":92},"(student.is_passed())\n",[82,154092,154093,154095],{"class":84,"line":5209},[82,154094,407],{"class":88},[82,154096,154097],{"class":92},"(student.to_dict())\n",[19,154099,154100,103569,154103,154106],{},[32,154101,154102],{},"to_dict()",[32,154104,154105],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154108,154110],{"id":154109},"_1116-易错点","11.16 易错点",[26,154112,154113,154119,154125,154130,154133,154136],{},[29,154114,154115,154116,2611],{},"类名推荐使用大驼峰，如 ",[32,154117,154118],{},"StudentManager",[29,154120,154121,154122,154124],{},"方法第一个参数必须写 ",[32,154123,33399],{},"，调用时不用传。",[29,154126,154127,154129],{},[32,154128,33405],{}," 不是普通方法，它在创建对象时自动执行。",[29,154131,154132],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,154134,154135],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,154137,154138],{},"类中方法太多时，说明职责可能过重。",[14,154140,154142],{"id":154141},"_1117-本章练习","11.17 本章练习",[26,154144,154145,154151,154157,154162,154175],{},[29,154146,154147,154148,154150],{},"定义 ",[32,154149,152095],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,154152,154147,154153,154156],{},[32,154154,154155],{},"Account"," 类，实现存款、取款、查询余额。",[29,154158,154147,154159,154161],{},[32,154160,19810],{}," 类，计算圆的周长和面积。",[29,154163,154147,154164,2973,154167,154170,154171,154174],{},[32,154165,154166],{},"Dog",[32,154168,154169],{},"Cat"," 类，并用同一个函数调用它们的 ",[32,154172,154173],{},"speak()"," 方法。",[29,154176,106916,154177,154179,154180,2611],{},[32,154178,153664],{}," 定义一个商品类 ",[32,154181,154182],{},"Product",[2671,154184,154185],{},"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":78,"searchDepth":157,"depth":157,"links":154187},[154188,154189,154190,154191,154192,154193,154195,154196,154197,154198,154199,154200,154201,154205,154206,154207,154208],{"id":151860,"depth":157,"text":151861},{"id":152042,"depth":157,"text":152043},{"id":152106,"depth":157,"text":152107},{"id":152183,"depth":157,"text":152184},{"id":152282,"depth":157,"text":152283},{"id":152445,"depth":157,"text":154194},"11.6 str",{"id":152571,"depth":157,"text":152572},{"id":152837,"depth":157,"text":152838},{"id":152951,"depth":157,"text":152952},{"id":153106,"depth":157,"text":153107},{"id":153230,"depth":157,"text":153231},{"id":153346,"depth":157,"text":153347},{"id":153494,"depth":157,"text":153495,"children":154202},[154203,154204],{"id":153498,"depth":404,"text":153499},{"id":153580,"depth":404,"text":153581},{"id":153658,"depth":157,"text":153659},{"id":153773,"depth":157,"text":153774},{"id":154109,"depth":157,"text":154110},{"id":154141,"depth":157,"text":154142},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151852,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154215,"title":154216,"body":154217,"description":2699,"extension":2700,"meta":157515,"navigation":485,"path":157516,"seo":157517,"stem":157518,"__hash__":157519},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154218,"toc":157491},[154219,154222,154226,154229,154232,154261,154264,154272,154276,154280,154283,154306,154309,154315,154319,155753,155756,155777,155781,155784,155796,155799,155983,155986,156112,156115,156119,156123,156259,156263,156349,156353,156435,156439,156473,156477,156666,156670,156673,156903,156907,156910,157091,157094,157098,157101,157107,157110,157136,157140,157143,157157,157160,157185,157188,157202,157205,157222,157225,157242,157245,157262,157266,157292,157296,157319,157323,157326,157328,157334,157336,157357,157360,157366,157372,157376,157379,157455,157458,157462,157488],[10,154220,154216],{"id":154221},"_12-综合案例与复习路线",[14,154223,154225],{"id":154224},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,154227,154228],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,154230,154231],{},"一个合格的入门综合项目最好覆盖：",[26,154233,154234,154237,154240,154243,154246,154249,154252,154255,154258],{},[29,154235,154236],{},"输入输出。",[29,154238,154239],{},"判断和循环。",[29,154241,154242],{},"函数拆分。",[29,154244,154245],{},"列表、字典等容器。",[29,154247,154248],{},"文件持久化。",[29,154250,154251],{},"异常处理。",[29,154253,154254],{},"模块拆分。",[29,154256,154257],{},"可选：面向对象。",[29,154259,154260],{},"可选：数据可视化。",[19,154262,154263],{},"本章整理两个方向：",[26,154265,154266,154269],{},[29,154267,154268],{},"学生管理系统。",[29,154270,154271],{},"销售数据统计和可视化。",[14,154273,154275],{"id":154274},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[65,154277,154279],{"id":154278},"_1221-需求","12.2.1 需求",[19,154281,154282],{},"实现一个命令行学生管理系统：",[26,154284,154285,154288,154291,154294,154297,154300,154303],{},[29,154286,154287],{},"添加学生。",[29,154289,154290],{},"删除学生。",[29,154292,154293],{},"修改学生。",[29,154295,154296],{},"查询学生。",[29,154298,154299],{},"显示所有学生。",[29,154301,154302],{},"保存到 JSON 文件。",[29,154304,154305],{},"程序启动时自动读取 JSON 文件。",[19,154307,154308],{},"学生字段：",[73,154310,154313],{"className":154311,"code":154312,"language":7780,"meta":78},[7778],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[32,154314,154312],{"__ignoreMap":78},[14,154316,154318],{"id":154317},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[73,154320,154322],{"className":75,"code":154321,"language":77,"meta":78,"style":78},"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",[32,154323,154324,154330,154340,154344,154356,154360,154364,154372,154382,154388,154392,154398,154429,154439,154446,154457,154463,154467,154471,154479,154509,154533,154537,154541,154550,154561,154572,154583,154594,154605,154616,154627,154631,154635,154645,154657,154673,154680,154687,154691,154695,154705,154713,154720,154733,154743,154754,154758,154762,154771,154779,154785,154797,154805,154816,154820,154824,154833,154849,154853,154860,154871,154876,154880,154896,154911,154926,154930,154935,154943,154951,154959,154967,154971,154976,154987,154991,154995,155004,155019,155029,155033,155045,155056,155060,155064,155069,155073,155084,155088,155092,155101,155116,155124,155128,155140,155150,155154,155158,155173,155186,155199,155203,155216,155228,155240,155244,155248,155259,155263,155267,155276,155291,155299,155303,155315,155325,155329,155333,155338,155342,155346,155356,155362,155384,155403,155422,155441,155446,155450,155454,155463,155471,155482,155486,155490,155516,155526,155531,155535,155539,155547,155555,155559,155567,155572,155588,155592,155606,155611,155625,155630,155643,155648,155661,155666,155679,155684,155697,155708,155712,155718,155729,155733,155737,155749],{"__ignoreMap":78},[82,154325,154326,154328],{"class":84,"line":85},[82,154327,1123],{"class":112},[82,154329,1335],{"class":92},[82,154331,154332,154334,154336,154338],{"class":84,"line":157},[82,154333,1117],{"class":112},[82,154335,1120],{"class":92},[82,154337,1123],{"class":112},[82,154339,1126],{"class":92},[82,154341,154342],{"class":84,"line":404},[82,154343,486],{"emptyLinePlaceholder":485},[82,154345,154346,154348,154350,154352,154354],{"class":84,"line":413},[82,154347,2360],{"class":88},[82,154349,259],{"class":112},[82,154351,1139],{"class":92},[82,154353,1547],{"class":96},[82,154355,119],{"class":92},[82,154357,154358],{"class":84,"line":508},[82,154359,486],{"emptyLinePlaceholder":485},[82,154361,154362],{"class":84,"line":513},[82,154363,486],{"emptyLinePlaceholder":485},[82,154365,154366,154368,154370],{"class":84,"line":1388},[82,154367,2381],{"class":112},[82,154369,2385],{"class":2384},[82,154371,2388],{"class":92},[82,154373,154374,154376,154378,154380],{"class":84,"line":1394},[82,154375,2219],{"class":112},[82,154377,2222],{"class":112},[82,154379,2397],{"class":88},[82,154381,2400],{"class":92},[82,154383,154384,154386],{"class":84,"line":1399},[82,154385,2405],{"class":112},[82,154387,2408],{"class":92},[82,154389,154390],{"class":84,"line":1430},[82,154391,486],{"emptyLinePlaceholder":485},[82,154393,154394,154396],{"class":84,"line":1818},[82,154395,128328],{"class":112},[82,154397,669],{"class":92},[82,154399,154400,154403,154405,154407,154409,154411,154413,154415,154417,154419,154421,154423,154425,154427],{"class":84,"line":2082},[82,154401,154402],{"class":112},"        with",[82,154404,262],{"class":88},[82,154406,93],{"class":92},[82,154408,2360],{"class":88},[82,154410,100],{"class":92},[82,154412,103],{"class":96},[82,154414,100],{"class":92},[82,154416,109],{"class":108},[82,154418,113],{"class":112},[82,154420,116],{"class":96},[82,154422,725],{"class":92},[82,154424,728],{"class":112},[82,154426,398],{"class":108},[82,154428,669],{"class":92},[82,154430,154431,154433,154435,154437],{"class":84,"line":2233},[82,154432,18317],{"class":112},[82,154434,1650],{"class":92},[82,154436,256],{"class":108},[82,154438,119],{"class":92},[82,154440,154441,154443],{"class":84,"line":2255},[82,154442,128356],{"class":112},[82,154444,154445],{"class":92}," json.JSONDecodeError:\n",[82,154447,154448,154450,154452,154455],{"class":84,"line":2260},[82,154449,1901],{"class":88},[82,154451,93],{"class":92},[82,154453,154454],{"class":96},"\"数据文件格式错误，已使用空数据启动\"",[82,154456,119],{"class":92},[82,154458,154459,154461],{"class":84,"line":2298},[82,154460,2405],{"class":112},[82,154462,2408],{"class":92},[82,154464,154465],{"class":84,"line":2303},[82,154466,486],{"emptyLinePlaceholder":485},[82,154468,154469],{"class":84,"line":2321},[82,154470,486],{"emptyLinePlaceholder":485},[82,154472,154473,154475,154477],{"class":84,"line":2533},[82,154474,2381],{"class":112},[82,154476,2468],{"class":2384},[82,154478,2471],{"class":92},[82,154480,154481,154483,154485,154487,154489,154491,154493,154495,154497,154499,154501,154503,154505,154507],{"class":84,"line":2538},[82,154482,2417],{"class":112},[82,154484,262],{"class":88},[82,154486,93],{"class":92},[82,154488,2360],{"class":88},[82,154490,100],{"class":92},[82,154492,781],{"class":96},[82,154494,100],{"class":92},[82,154496,109],{"class":108},[82,154498,113],{"class":112},[82,154500,116],{"class":96},[82,154502,725],{"class":92},[82,154504,728],{"class":112},[82,154506,398],{"class":108},[82,154508,669],{"class":92},[82,154510,154511,154513,154515,154517,154519,154521,154523,154525,154527,154529,154531],{"class":84,"line":2548},[82,154512,2506],{"class":92},[82,154514,256],{"class":108},[82,154516,100],{"class":92},[82,154518,1410],{"class":108},[82,154520,113],{"class":112},[82,154522,1415],{"class":88},[82,154524,100],{"class":92},[82,154526,1420],{"class":108},[82,154528,113],{"class":112},[82,154530,1425],{"class":88},[82,154532,119],{"class":92},[82,154534,154535],{"class":84,"line":2579},[82,154536,486],{"emptyLinePlaceholder":485},[82,154538,154539],{"class":84,"line":2585},[82,154540,486],{"emptyLinePlaceholder":485},[82,154542,154543,154545,154548],{"class":84,"line":4350},[82,154544,2381],{"class":112},[82,154546,154547],{"class":2384}," show_menu",[82,154549,2388],{"class":92},[82,154551,154552,154554,154556,154559],{"class":84,"line":4355},[82,154553,611],{"class":88},[82,154555,93],{"class":92},[82,154557,154558],{"class":96},"\"====== 学生管理系统 ======\"",[82,154560,119],{"class":92},[82,154562,154563,154565,154567,154570],{"class":84,"line":4360},[82,154564,611],{"class":88},[82,154566,93],{"class":92},[82,154568,154569],{"class":96},"\"1. 添加学生\"",[82,154571,119],{"class":92},[82,154573,154574,154576,154578,154581],{"class":84,"line":4365},[82,154575,611],{"class":88},[82,154577,93],{"class":92},[82,154579,154580],{"class":96},"\"2. 删除学生\"",[82,154582,119],{"class":92},[82,154584,154585,154587,154589,154592],{"class":84,"line":4379},[82,154586,611],{"class":88},[82,154588,93],{"class":92},[82,154590,154591],{"class":96},"\"3. 修改学生\"",[82,154593,119],{"class":92},[82,154595,154596,154598,154600,154603],{"class":84,"line":4384},[82,154597,611],{"class":88},[82,154599,93],{"class":92},[82,154601,154602],{"class":96},"\"4. 查询学生\"",[82,154604,119],{"class":92},[82,154606,154607,154609,154611,154614],{"class":84,"line":5176},[82,154608,611],{"class":88},[82,154610,93],{"class":92},[82,154612,154613],{"class":96},"\"5. 显示所有学生\"",[82,154615,119],{"class":92},[82,154617,154618,154620,154622,154625],{"class":84,"line":5190},[82,154619,611],{"class":88},[82,154621,93],{"class":92},[82,154623,154624],{"class":96},"\"0. 退出系统\"",[82,154626,119],{"class":92},[82,154628,154629],{"class":84,"line":5198},[82,154630,486],{"emptyLinePlaceholder":485},[82,154632,154633],{"class":84,"line":5203},[82,154634,486],{"emptyLinePlaceholder":485},[82,154636,154637,154639,154642],{"class":84,"line":5209},[82,154638,2381],{"class":112},[82,154640,154641],{"class":2384}," find_student",[82,154643,154644],{"class":92},"(students, student_id):\n",[82,154646,154647,154649,154652,154654],{"class":84,"line":5215},[82,154648,1888],{"class":112},[82,154650,154651],{"class":92}," student ",[82,154653,603],{"class":112},[82,154655,154656],{"class":92}," students:\n",[82,154658,154659,154661,154664,154666,154668,154670],{"class":84,"line":5220},[82,154660,5096],{"class":112},[82,154662,154663],{"class":92}," student[",[82,154665,153972],{"class":96},[82,154667,7038],{"class":92},[82,154669,5548],{"class":112},[82,154671,154672],{"class":92}," student_id:\n",[82,154674,154675,154677],{"class":84,"line":10539},[82,154676,18317],{"class":112},[82,154678,154679],{"class":92}," student\n",[82,154681,154682,154684],{"class":84,"line":10563},[82,154683,6685],{"class":112},[82,154685,154686],{"class":88}," None\n",[82,154688,154689],{"class":84,"line":10568},[82,154690,486],{"emptyLinePlaceholder":485},[82,154692,154693],{"class":84,"line":10574},[82,154694,486],{"emptyLinePlaceholder":485},[82,154696,154697,154699,154702],{"class":84,"line":10601},[82,154698,2381],{"class":112},[82,154700,154701],{"class":2384}," input_int",[82,154703,154704],{"class":92},"(prompt):\n",[82,154706,154707,154709,154711],{"class":84,"line":10606},[82,154708,4851],{"class":112},[82,154710,97843],{"class":88},[82,154712,669],{"class":92},[82,154714,154715,154718],{"class":84,"line":10612},[82,154716,154717],{"class":112},"        try",[82,154719,669],{"class":92},[82,154721,154722,154724,154726,154728,154730],{"class":84,"line":10624},[82,154723,18317],{"class":112},[82,154725,4982],{"class":88},[82,154727,93],{"class":92},[82,154729,56381],{"class":88},[82,154731,154732],{"class":92},"(prompt))\n",[82,154734,154735,154738,154741],{"class":84,"line":10636},[82,154736,154737],{"class":112},"        except",[82,154739,154740],{"class":88}," ValueError",[82,154742,669],{"class":92},[82,154744,154745,154747,154749,154752],{"class":84,"line":10648},[82,154746,37216],{"class":88},[82,154748,93],{"class":92},[82,154750,154751],{"class":96},"\"请输入整数\"",[82,154753,119],{"class":92},[82,154755,154756],{"class":84,"line":12307},[82,154757,486],{"emptyLinePlaceholder":485},[82,154759,154760],{"class":84,"line":12332},[82,154761,486],{"emptyLinePlaceholder":485},[82,154763,154764,154766,154769],{"class":84,"line":12355},[82,154765,2381],{"class":112},[82,154767,154768],{"class":2384}," input_float",[82,154770,154704],{"class":92},[82,154772,154773,154775,154777],{"class":84,"line":12379},[82,154774,4851],{"class":112},[82,154776,97843],{"class":88},[82,154778,669],{"class":92},[82,154780,154781,154783],{"class":84,"line":12384},[82,154782,154717],{"class":112},[82,154784,669],{"class":92},[82,154786,154787,154789,154791,154793,154795],{"class":84,"line":12389},[82,154788,18317],{"class":112},[82,154790,112343],{"class":88},[82,154792,93],{"class":92},[82,154794,56381],{"class":88},[82,154796,154732],{"class":92},[82,154798,154799,154801,154803],{"class":84,"line":12394},[82,154800,154737],{"class":112},[82,154802,154740],{"class":88},[82,154804,669],{"class":92},[82,154806,154807,154809,154811,154814],{"class":84,"line":12403},[82,154808,37216],{"class":88},[82,154810,93],{"class":92},[82,154812,154813],{"class":96},"\"请输入数字\"",[82,154815,119],{"class":92},[82,154817,154818],{"class":84,"line":12408},[82,154819,486],{"emptyLinePlaceholder":485},[82,154821,154822],{"class":84,"line":12414},[82,154823,486],{"emptyLinePlaceholder":485},[82,154825,154826,154828,154831],{"class":84,"line":12435},[82,154827,2381],{"class":112},[82,154829,154830],{"class":2384}," add_student",[82,154832,2471],{"class":92},[82,154834,154835,154838,154840,154842,154844,154847],{"class":84,"line":12441},[82,154836,154837],{"class":92},"    student_id ",[82,154839,113],{"class":112},[82,154841,63163],{"class":88},[82,154843,93],{"class":92},[82,154845,154846],{"class":96},"\"请输入学号:\"",[82,154848,119],{"class":92},[82,154850,154851],{"class":84,"line":12455},[82,154852,486],{"emptyLinePlaceholder":485},[82,154854,154855,154857],{"class":84,"line":12461},[82,154856,2219],{"class":112},[82,154858,154859],{"class":92}," find_student(students, student_id):\n",[82,154861,154862,154864,154866,154869],{"class":84,"line":12488},[82,154863,1901],{"class":88},[82,154865,93],{"class":92},[82,154867,154868],{"class":96},"\"学号已存在\"",[82,154870,119],{"class":92},[82,154872,154873],{"class":84,"line":12497},[82,154874,154875],{"class":112},"        return\n",[82,154877,154878],{"class":84,"line":12503},[82,154879,486],{"emptyLinePlaceholder":485},[82,154881,154882,154885,154887,154889,154891,154894],{"class":84,"line":12511},[82,154883,154884],{"class":92},"    name ",[82,154886,113],{"class":112},[82,154888,63163],{"class":88},[82,154890,93],{"class":92},[82,154892,154893],{"class":96},"\"请输入姓名:\"",[82,154895,119],{"class":92},[82,154897,154898,154901,154903,154906,154909],{"class":84,"line":12516},[82,154899,154900],{"class":92},"    age ",[82,154902,113],{"class":112},[82,154904,154905],{"class":92}," input_int(",[82,154907,154908],{"class":96},"\"请输入年龄:\"",[82,154910,119],{"class":92},[82,154912,154913,154916,154918,154921,154924],{"class":84,"line":19189},[82,154914,154915],{"class":92},"    score ",[82,154917,113],{"class":112},[82,154919,154920],{"class":92}," input_float(",[82,154922,154923],{"class":96},"\"请输入成绩:\"",[82,154925,119],{"class":92},[82,154927,154928],{"class":84,"line":19195},[82,154929,486],{"emptyLinePlaceholder":485},[82,154931,154932],{"class":84,"line":19218},[82,154933,154934],{"class":92},"    students.append({\n",[82,154936,154937,154940],{"class":84,"line":19224},[82,154938,154939],{"class":96},"        \"student_id\"",[82,154941,154942],{"class":92},": student_id,\n",[82,154944,154945,154948],{"class":84,"line":19247},[82,154946,154947],{"class":96},"        \"name\"",[82,154949,154950],{"class":92},": name,\n",[82,154952,154953,154956],{"class":84,"line":19261},[82,154954,154955],{"class":96},"        \"age\"",[82,154957,154958],{"class":92},": age,\n",[82,154960,154961,154964],{"class":84,"line":19281},[82,154962,154963],{"class":96},"        \"score\"",[82,154965,154966],{"class":92},": score,\n",[82,154968,154969],{"class":84,"line":19287},[82,154970,36029],{"class":92},[82,154972,154973],{"class":84,"line":19298},[82,154974,154975],{"class":92},"    save_students(students)\n",[82,154977,154978,154980,154982,154985],{"class":84,"line":19321},[82,154979,611],{"class":88},[82,154981,93],{"class":92},[82,154983,154984],{"class":96},"\"添加成功\"",[82,154986,119],{"class":92},[82,154988,154989],{"class":84,"line":19343},[82,154990,486],{"emptyLinePlaceholder":485},[82,154992,154993],{"class":84,"line":19348},[82,154994,486],{"emptyLinePlaceholder":485},[82,154996,154997,154999,155002],{"class":84,"line":19354},[82,154998,2381],{"class":112},[82,155000,155001],{"class":2384}," delete_student",[82,155003,2471],{"class":92},[82,155005,155006,155008,155010,155012,155014,155017],{"class":84,"line":19368},[82,155007,154837],{"class":92},[82,155009,113],{"class":112},[82,155011,63163],{"class":88},[82,155013,93],{"class":92},[82,155015,155016],{"class":96},"\"请输入要删除的学号:\"",[82,155018,119],{"class":92},[82,155020,155021,155024,155026],{"class":84,"line":19381},[82,155022,155023],{"class":92},"    student ",[82,155025,113],{"class":112},[82,155027,155028],{"class":92}," find_student(students, student_id)\n",[82,155030,155031],{"class":84,"line":19386},[82,155032,486],{"emptyLinePlaceholder":485},[82,155034,155035,155037,155039,155041,155043],{"class":84,"line":19400},[82,155036,2219],{"class":112},[82,155038,154651],{"class":92},[82,155040,41493],{"class":112},[82,155042,41498],{"class":88},[82,155044,669],{"class":92},[82,155046,155047,155049,155051,155054],{"class":84,"line":19405},[82,155048,1901],{"class":88},[82,155050,93],{"class":92},[82,155052,155053],{"class":96},"\"学生不存在\"",[82,155055,119],{"class":92},[82,155057,155058],{"class":84,"line":19411},[82,155059,154875],{"class":112},[82,155061,155062],{"class":84,"line":19416},[82,155063,486],{"emptyLinePlaceholder":485},[82,155065,155066],{"class":84,"line":19430},[82,155067,155068],{"class":92},"    students.remove(student)\n",[82,155070,155071],{"class":84,"line":19435},[82,155072,154975],{"class":92},[82,155074,155075,155077,155079,155082],{"class":84,"line":19440},[82,155076,611],{"class":88},[82,155078,93],{"class":92},[82,155080,155081],{"class":96},"\"删除成功\"",[82,155083,119],{"class":92},[82,155085,155086],{"class":84,"line":19454},[82,155087,486],{"emptyLinePlaceholder":485},[82,155089,155090],{"class":84,"line":19466},[82,155091,486],{"emptyLinePlaceholder":485},[82,155093,155094,155096,155099],{"class":84,"line":19471},[82,155095,2381],{"class":112},[82,155097,155098],{"class":2384}," update_student",[82,155100,2471],{"class":92},[82,155102,155103,155105,155107,155109,155111,155114],{"class":84,"line":19484},[82,155104,154837],{"class":92},[82,155106,113],{"class":112},[82,155108,63163],{"class":88},[82,155110,93],{"class":92},[82,155112,155113],{"class":96},"\"请输入要修改的学号:\"",[82,155115,119],{"class":92},[82,155117,155118,155120,155122],{"class":84,"line":19489},[82,155119,155023],{"class":92},[82,155121,113],{"class":112},[82,155123,155028],{"class":92},[82,155125,155126],{"class":84,"line":19494},[82,155127,486],{"emptyLinePlaceholder":485},[82,155129,155130,155132,155134,155136,155138],{"class":84,"line":19499},[82,155131,2219],{"class":112},[82,155133,154651],{"class":92},[82,155135,41493],{"class":112},[82,155137,41498],{"class":88},[82,155139,669],{"class":92},[82,155141,155142,155144,155146,155148],{"class":84,"line":19512},[82,155143,1901],{"class":88},[82,155145,93],{"class":92},[82,155147,155053],{"class":96},[82,155149,119],{"class":92},[82,155151,155152],{"class":84,"line":19517},[82,155153,154875],{"class":112},[82,155155,155156],{"class":84,"line":35202},[82,155157,486],{"emptyLinePlaceholder":485},[82,155159,155160,155162,155164,155166,155168,155171],{"class":84,"line":35208},[82,155161,154884],{"class":92},[82,155163,113],{"class":112},[82,155165,63163],{"class":88},[82,155167,93],{"class":92},[82,155169,155170],{"class":96},"\"请输入新姓名:\"",[82,155172,119],{"class":92},[82,155174,155175,155177,155179,155181,155184],{"class":84,"line":35214},[82,155176,154900],{"class":92},[82,155178,113],{"class":112},[82,155180,154905],{"class":92},[82,155182,155183],{"class":96},"\"请输入新年龄:\"",[82,155185,119],{"class":92},[82,155187,155188,155190,155192,155194,155197],{"class":84,"line":35220},[82,155189,154915],{"class":92},[82,155191,113],{"class":112},[82,155193,154920],{"class":92},[82,155195,155196],{"class":96},"\"请输入新成绩:\"",[82,155198,119],{"class":92},[82,155200,155201],{"class":84,"line":35226},[82,155202,486],{"emptyLinePlaceholder":485},[82,155204,155205,155208,155210,155212,155214],{"class":84,"line":35237},[82,155206,155207],{"class":92},"    student[",[82,155209,1471],{"class":96},[82,155211,7038],{"class":92},[82,155213,113],{"class":112},[82,155215,152322],{"class":92},[82,155217,155218,155220,155222,155224,155226],{"class":84,"line":35243},[82,155219,155207],{"class":92},[82,155221,1480],{"class":96},[82,155223,7038],{"class":92},[82,155225,113],{"class":112},[82,155227,152334],{"class":92},[82,155229,155230,155232,155234,155236,155238],{"class":84,"line":35263},[82,155231,155207],{"class":92},[82,155233,1489],{"class":96},[82,155235,7038],{"class":92},[82,155237,113],{"class":112},[82,155239,4193],{"class":92},[82,155241,155242],{"class":84,"line":35269},[82,155243,486],{"emptyLinePlaceholder":485},[82,155245,155246],{"class":84,"line":35280},[82,155247,154975],{"class":92},[82,155249,155250,155252,155254,155257],{"class":84,"line":35286},[82,155251,611],{"class":88},[82,155253,93],{"class":92},[82,155255,155256],{"class":96},"\"修改成功\"",[82,155258,119],{"class":92},[82,155260,155261],{"class":84,"line":35292},[82,155262,486],{"emptyLinePlaceholder":485},[82,155264,155265],{"class":84,"line":35298},[82,155266,486],{"emptyLinePlaceholder":485},[82,155268,155269,155271,155274],{"class":84,"line":35304},[82,155270,2381],{"class":112},[82,155272,155273],{"class":2384}," query_student",[82,155275,2471],{"class":92},[82,155277,155278,155280,155282,155284,155286,155289],{"class":84,"line":35310},[82,155279,154837],{"class":92},[82,155281,113],{"class":112},[82,155283,63163],{"class":88},[82,155285,93],{"class":92},[82,155287,155288],{"class":96},"\"请输入要查询的学号:\"",[82,155290,119],{"class":92},[82,155292,155293,155295,155297],{"class":84,"line":35316},[82,155294,155023],{"class":92},[82,155296,113],{"class":112},[82,155298,155028],{"class":92},[82,155300,155301],{"class":84,"line":35322},[82,155302,486],{"emptyLinePlaceholder":485},[82,155304,155305,155307,155309,155311,155313],{"class":84,"line":35342},[82,155306,2219],{"class":112},[82,155308,154651],{"class":92},[82,155310,41493],{"class":112},[82,155312,41498],{"class":88},[82,155314,669],{"class":92},[82,155316,155317,155319,155321,155323],{"class":84,"line":35348},[82,155318,1901],{"class":88},[82,155320,93],{"class":92},[82,155322,155053],{"class":96},[82,155324,119],{"class":92},[82,155326,155327],{"class":84,"line":35364},[82,155328,154875],{"class":112},[82,155330,155331],{"class":84,"line":35370},[82,155332,486],{"emptyLinePlaceholder":485},[82,155334,155335],{"class":84,"line":35384},[82,155336,155337],{"class":92},"    print_student(student)\n",[82,155339,155340],{"class":84,"line":35390},[82,155341,486],{"emptyLinePlaceholder":485},[82,155343,155344],{"class":84,"line":35405},[82,155345,486],{"emptyLinePlaceholder":485},[82,155347,155348,155350,155353],{"class":84,"line":35411},[82,155349,2381],{"class":112},[82,155351,155352],{"class":2384}," print_student",[82,155354,155355],{"class":92},"(student):\n",[82,155357,155358,155360],{"class":84,"line":35420},[82,155359,611],{"class":88},[82,155361,153964],{"class":92},[82,155363,155364,155367,155369,155371,155374,155377,155379,155382],{"class":84,"line":35426},[82,155365,155366],{"class":112},"        f",[82,155368,216],{"class":96},[82,155370,3645],{"class":88},[82,155372,155373],{"class":92},"student[",[82,155375,155376],{"class":96},"'student_id'",[82,155378,3689],{"class":92},[82,155380,155381],{"class":88},"}\\t",[82,155383,239],{"class":96},[82,155385,155386,155388,155390,155392,155394,155397,155399,155401],{"class":84,"line":35435},[82,155387,155366],{"class":112},[82,155389,216],{"class":96},[82,155391,3645],{"class":88},[82,155393,155373],{"class":92},[82,155395,155396],{"class":96},"'name'",[82,155398,3689],{"class":92},[82,155400,155381],{"class":88},[82,155402,239],{"class":96},[82,155404,155405,155407,155409,155411,155413,155416,155418,155420],{"class":84,"line":35441},[82,155406,155366],{"class":112},[82,155408,216],{"class":96},[82,155410,3645],{"class":88},[82,155412,155373],{"class":92},[82,155414,155415],{"class":96},"'age'",[82,155417,3689],{"class":92},[82,155419,155381],{"class":88},[82,155421,239],{"class":96},[82,155423,155424,155426,155428,155430,155432,155435,155437,155439],{"class":84,"line":35447},[82,155425,155366],{"class":112},[82,155427,216],{"class":96},[82,155429,3645],{"class":88},[82,155431,155373],{"class":92},[82,155433,155434],{"class":96},"'score'",[82,155436,3689],{"class":92},[82,155438,3695],{"class":88},[82,155440,239],{"class":96},[82,155442,155443],{"class":84,"line":35456},[82,155444,155445],{"class":92},"    )\n",[82,155447,155448],{"class":84,"line":35462},[82,155449,486],{"emptyLinePlaceholder":485},[82,155451,155452],{"class":84,"line":35473},[82,155453,486],{"emptyLinePlaceholder":485},[82,155455,155456,155458,155461],{"class":84,"line":35479},[82,155457,2381],{"class":112},[82,155459,155460],{"class":2384}," show_all_students",[82,155462,2471],{"class":92},[82,155464,155465,155467,155469],{"class":84,"line":35498},[82,155466,2219],{"class":112},[82,155468,2222],{"class":112},[82,155470,154656],{"class":92},[82,155472,155473,155475,155477,155480],{"class":84,"line":35504},[82,155474,1901],{"class":88},[82,155476,93],{"class":92},[82,155478,155479],{"class":96},"\"暂无学生\"",[82,155481,119],{"class":92},[82,155483,155484],{"class":84,"line":35515},[82,155485,154875],{"class":112},[82,155487,155488],{"class":84,"line":35521},[82,155489,486],{"emptyLinePlaceholder":485},[82,155491,155492,155494,155496,155499,155501,155504,155506,155509,155511,155514],{"class":84,"line":35541},[82,155493,611],{"class":88},[82,155495,93],{"class":92},[82,155497,155498],{"class":96},"\"学号",[82,155500,3849],{"class":88},[82,155502,155503],{"class":96},"姓名",[82,155505,3849],{"class":88},[82,155507,155508],{"class":96},"年龄",[82,155510,3849],{"class":88},[82,155512,155513],{"class":96},"成绩\"",[82,155515,119],{"class":92},[82,155517,155518,155520,155522,155524],{"class":84,"line":35557},[82,155519,1888],{"class":112},[82,155521,154651],{"class":92},[82,155523,603],{"class":112},[82,155525,154656],{"class":92},[82,155527,155528],{"class":84,"line":35563},[82,155529,155530],{"class":92},"        print_student(student)\n",[82,155532,155533],{"class":84,"line":35577},[82,155534,486],{"emptyLinePlaceholder":485},[82,155536,155537],{"class":84,"line":35583},[82,155538,486],{"emptyLinePlaceholder":485},[82,155540,155541,155543,155545],{"class":84,"line":35589},[82,155542,2381],{"class":112},[82,155544,4573],{"class":2384},[82,155546,2388],{"class":92},[82,155548,155549,155551,155553],{"class":84,"line":35600},[82,155550,1645],{"class":92},[82,155552,113],{"class":112},[82,155554,2545],{"class":92},[82,155556,155557],{"class":84,"line":35606},[82,155558,486],{"emptyLinePlaceholder":485},[82,155560,155561,155563,155565],{"class":84,"line":35612},[82,155562,4851],{"class":112},[82,155564,97843],{"class":88},[82,155566,669],{"class":92},[82,155568,155569],{"class":84,"line":35622},[82,155570,155571],{"class":92},"        show_menu()\n",[82,155573,155574,155577,155579,155581,155583,155586],{"class":84,"line":35628},[82,155575,155576],{"class":92},"        choice ",[82,155578,113],{"class":112},[82,155580,63163],{"class":88},[82,155582,93],{"class":92},[82,155584,155585],{"class":96},"\"请输入操作:\"",[82,155587,119],{"class":92},[82,155589,155590],{"class":84,"line":35639},[82,155591,486],{"emptyLinePlaceholder":485},[82,155593,155594,155596,155599,155601,155604],{"class":84,"line":35645},[82,155595,5096],{"class":112},[82,155597,155598],{"class":92}," choice ",[82,155600,5548],{"class":112},[82,155602,155603],{"class":96}," \"1\"",[82,155605,669],{"class":92},[82,155607,155608],{"class":84,"line":35655},[82,155609,155610],{"class":92},"            add_student(students)\n",[82,155612,155613,155616,155618,155620,155623],{"class":84,"line":35660},[82,155614,155615],{"class":112},"        elif",[82,155617,155598],{"class":92},[82,155619,5548],{"class":112},[82,155621,155622],{"class":96}," \"2\"",[82,155624,669],{"class":92},[82,155626,155627],{"class":84,"line":35666},[82,155628,155629],{"class":92},"            delete_student(students)\n",[82,155631,155632,155634,155636,155638,155641],{"class":84,"line":35715},[82,155633,155615],{"class":112},[82,155635,155598],{"class":92},[82,155637,5548],{"class":112},[82,155639,155640],{"class":96}," \"3\"",[82,155642,669],{"class":92},[82,155644,155645],{"class":84,"line":35762},[82,155646,155647],{"class":92},"            update_student(students)\n",[82,155649,155650,155652,155654,155656,155659],{"class":84,"line":35767},[82,155651,155615],{"class":112},[82,155653,155598],{"class":92},[82,155655,5548],{"class":112},[82,155657,155658],{"class":96}," \"4\"",[82,155660,669],{"class":92},[82,155662,155663],{"class":84,"line":35773},[82,155664,155665],{"class":92},"            query_student(students)\n",[82,155667,155668,155670,155672,155674,155677],{"class":84,"line":35792},[82,155669,155615],{"class":112},[82,155671,155598],{"class":92},[82,155673,5548],{"class":112},[82,155675,155676],{"class":96}," \"5\"",[82,155678,669],{"class":92},[82,155680,155681],{"class":84,"line":35798},[82,155682,155683],{"class":92},"            show_all_students(students)\n",[82,155685,155686,155688,155690,155692,155695],{"class":84,"line":35817},[82,155687,155615],{"class":112},[82,155689,155598],{"class":92},[82,155691,5548],{"class":112},[82,155693,155694],{"class":96}," \"0\"",[82,155696,669],{"class":92},[82,155698,155699,155701,155703,155706],{"class":84,"line":35823},[82,155700,37216],{"class":88},[82,155702,93],{"class":92},[82,155704,155705],{"class":96},"\"退出系统\"",[82,155707,119],{"class":92},[82,155709,155710],{"class":84,"line":35829},[82,155711,117643],{"class":112},[82,155713,155714,155716],{"class":84,"line":35839},[82,155715,5133],{"class":112},[82,155717,669],{"class":92},[82,155719,155720,155722,155724,155727],{"class":84,"line":35844},[82,155721,37216],{"class":88},[82,155723,93],{"class":92},[82,155725,155726],{"class":96},"\"输入错误\"",[82,155728,119],{"class":92},[82,155730,155731],{"class":84,"line":35850},[82,155732,486],{"emptyLinePlaceholder":485},[82,155734,155735],{"class":84,"line":35866},[82,155736,486],{"emptyLinePlaceholder":485},[82,155738,155739,155741,155743,155745,155747],{"class":84,"line":35911},[82,155740,1237],{"class":112},[82,155742,33796],{"class":88},[82,155744,104110],{"class":112},[82,155746,104113],{"class":96},[82,155748,669],{"class":92},[82,155750,155751],{"class":84,"line":35917},[82,155752,104120],{"class":92},[19,155754,155755],{},"这个项目串联了：",[26,155757,155758,155761,155764,155767,155770,155772],{},[29,155759,155760],{},"菜单循环。",[29,155762,155763],{},"函数封装。",[29,155765,155766],{},"列表字典。",[29,155768,155769],{},"JSON 读写。",[29,155771,154251],{},[29,155773,155774,2611],{},[32,155775,155776],{},"if __name__ == \"__main__\"",[14,155778,155780],{"id":155779},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155782,155783],{},"可以进一步拆成两个类：",[26,155785,155786,155791],{},[29,155787,155788,155790],{},[32,155789,152095],{},"：表示单个学生。",[29,155792,155793,155795],{},[32,155794,154118],{},"：负责学生增删改查和文件保存。",[19,155797,155798],{},"示意代码：",[73,155800,155802],{"className":75,"code":155801,"language":77,"meta":78,"style":78},"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",[32,155803,155804,155814,155818,155822,155826,155834,155841,155847,155853,155859,155863,155871,155877,155887,155897,155907,155917,155921,155925,155931,155939,155947,155955,155963,155971,155979],{"__ignoreMap":78},[82,155805,155806,155808,155810,155812],{"class":84,"line":85},[82,155807,1117],{"class":112},[82,155809,153677],{"class":92},[82,155811,1123],{"class":112},[82,155813,153682],{"class":92},[82,155815,155816],{"class":84,"line":157},[82,155817,486],{"emptyLinePlaceholder":485},[82,155819,155820],{"class":84,"line":404},[82,155821,486],{"emptyLinePlaceholder":485},[82,155823,155824],{"class":84,"line":413},[82,155825,153695],{"class":2384},[82,155827,155828,155830,155832],{"class":84,"line":508},[82,155829,17281],{"class":112},[82,155831,10489],{"class":2384},[82,155833,669],{"class":92},[82,155835,155836,155839],{"class":84,"line":513},[82,155837,155838],{"class":92},"    student_id: ",[82,155840,153711],{"class":88},[82,155842,155843,155845],{"class":84,"line":1388},[82,155844,153708],{"class":92},[82,155846,153711],{"class":88},[82,155848,155849,155851],{"class":84,"line":1394},[82,155850,153716],{"class":92},[82,155852,153719],{"class":88},[82,155854,155855,155857],{"class":84,"line":1399},[82,155856,153724],{"class":92},[82,155858,153727],{"class":88},[82,155860,155861],{"class":84,"line":1430},[82,155862,486],{"emptyLinePlaceholder":485},[82,155864,155865,155867,155869],{"class":84,"line":1818},[82,155866,33377],{"class":112},[82,155868,153875],{"class":2384},[82,155870,33383],{"class":92},[82,155872,155873,155875],{"class":84,"line":2082},[82,155874,2405],{"class":112},[82,155876,1349],{"class":92},[82,155878,155879,155881,155883,155885],{"class":84,"line":2233},[82,155880,153888],{"class":96},[82,155882,1357],{"class":92},[82,155884,33399],{"class":88},[82,155886,153895],{"class":92},[82,155888,155889,155891,155893,155895],{"class":84,"line":2255},[82,155890,153900],{"class":96},[82,155892,1357],{"class":92},[82,155894,33399],{"class":88},[82,155896,153907],{"class":92},[82,155898,155899,155901,155903,155905],{"class":84,"line":2260},[82,155900,153912],{"class":96},[82,155902,1357],{"class":92},[82,155904,33399],{"class":88},[82,155906,153919],{"class":92},[82,155908,155909,155911,155913,155915],{"class":84,"line":2298},[82,155910,153924],{"class":96},[82,155912,1357],{"class":92},[82,155914,33399],{"class":88},[82,155916,153931],{"class":92},[82,155918,155919],{"class":84,"line":2303},[82,155920,5128],{"class":92},[82,155922,155923],{"class":84,"line":2321},[82,155924,486],{"emptyLinePlaceholder":485},[82,155926,155927,155929],{"class":84,"line":2533},[82,155928,153539],{"class":2384},[82,155930,153542],{"class":88},[82,155932,155933,155935,155937],{"class":84,"line":2538},[82,155934,33377],{"class":112},[82,155936,153952],{"class":2384},[82,155938,153955],{"class":92},[82,155940,155941,155943,155945],{"class":84,"line":2548},[82,155942,2405],{"class":112},[82,155944,153559],{"class":88},[82,155946,153964],{"class":92},[82,155948,155949,155951,155953],{"class":84,"line":2579},[82,155950,153969],{"class":92},[82,155952,153972],{"class":96},[82,155954,1720],{"class":92},[82,155956,155957,155959,155961],{"class":84,"line":2585},[82,155958,153969],{"class":92},[82,155960,1471],{"class":96},[82,155962,1720],{"class":92},[82,155964,155965,155967,155969],{"class":84,"line":4350},[82,155966,153969],{"class":92},[82,155968,1480],{"class":96},[82,155970,1720],{"class":92},[82,155972,155973,155975,155977],{"class":84,"line":4355},[82,155974,153969],{"class":92},[82,155976,1489],{"class":96},[82,155978,1720],{"class":92},[82,155980,155981],{"class":84,"line":4360},[82,155982,40692],{"class":92},[19,155984,155985],{},"管理器示意：",[73,155987,155989],{"className":75,"code":155988,"language":77,"meta":78,"style":78},"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",[32,155990,155991,156000,156008,156019,156023,156033,156046,156057,156064,156070,156074,156083,156092,156098,156105],{"__ignoreMap":78},[82,155992,155993,155995,155998],{"class":84,"line":85},[82,155994,17281],{"class":112},[82,155996,155997],{"class":2384}," StudentManager",[82,155999,669],{"class":92},[82,156001,156002,156004,156006],{"class":84,"line":157},[82,156003,33377],{"class":112},[82,156005,33380],{"class":88},[82,156007,33383],{"class":92},[82,156009,156010,156012,156015,156017],{"class":84,"line":404},[82,156011,33421],{"class":88},[82,156013,156014],{"class":92},".students ",[82,156016,113],{"class":112},[82,156018,2408],{"class":92},[82,156020,156021],{"class":84,"line":413},[82,156022,486],{"emptyLinePlaceholder":485},[82,156024,156025,156027,156030],{"class":84,"line":508},[82,156026,33377],{"class":112},[82,156028,156029],{"class":2384}," find_by_id",[82,156031,156032],{"class":92},"(self, student_id):\n",[82,156034,156035,156037,156039,156041,156043],{"class":84,"line":513},[82,156036,5999],{"class":112},[82,156038,154651],{"class":92},[82,156040,603],{"class":112},[82,156042,41439],{"class":88},[82,156044,156045],{"class":92},".students:\n",[82,156047,156048,156050,156053,156055],{"class":84,"line":1388},[82,156049,7237],{"class":112},[82,156051,156052],{"class":92}," student.student_id ",[82,156054,5548],{"class":112},[82,156056,154672],{"class":92},[82,156058,156059,156062],{"class":84,"line":1394},[82,156060,156061],{"class":112},"                return",[82,156063,154679],{"class":92},[82,156065,156066,156068],{"class":84,"line":1399},[82,156067,2405],{"class":112},[82,156069,154686],{"class":88},[82,156071,156072],{"class":84,"line":1430},[82,156073,486],{"emptyLinePlaceholder":485},[82,156075,156076,156078,156080],{"class":84,"line":1818},[82,156077,33377],{"class":112},[82,156079,7802],{"class":2384},[82,156081,156082],{"class":92},"(self, student):\n",[82,156084,156085,156087,156089],{"class":84,"line":2082},[82,156086,5096],{"class":112},[82,156088,41439],{"class":88},[82,156090,156091],{"class":92},".find_by_id(student.student_id):\n",[82,156093,156094,156096],{"class":84,"line":2233},[82,156095,18317],{"class":112},[82,156097,128351],{"class":88},[82,156099,156100,156102],{"class":84,"line":2255},[82,156101,33421],{"class":88},[82,156103,156104],{"class":92},".students.append(student)\n",[82,156106,156107,156109],{"class":84,"line":2260},[82,156108,2405],{"class":112},[82,156110,156111],{"class":88}," True\n",[19,156113,156114],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,156116,156118],{"id":156117},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[65,156120,156122],{"id":156121},"_1251-数据结构","12.5.1 数据结构",[73,156124,156126],{"className":75,"code":156125,"language":77,"meta":78,"style":78},"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",[32,156127,156128,156136,156167,156197,156226,156255],{"__ignoreMap":78},[82,156129,156130,156132,156134],{"class":84,"line":85},[82,156131,150994],{"class":92},[82,156133,113],{"class":112},[82,156135,1463],{"class":92},[82,156137,156138,156140,156142,156144,156146,156148,156151,156153,156156,156158,156160,156162,156165],{"class":84,"line":157},[82,156139,1468],{"class":92},[82,156141,150529],{"class":96},[82,156143,1357],{"class":92},[82,156145,151136],{"class":96},[82,156147,100],{"class":92},[82,156149,156150],{"class":96},"\"category\"",[82,156152,1357],{"class":92},[82,156154,156155],{"class":96},"\"手机\"",[82,156157,100],{"class":92},[82,156159,86638],{"class":96},[82,156161,1357],{"class":92},[82,156163,156164],{"class":88},"12000",[82,156166,1497],{"class":92},[82,156168,156169,156171,156173,156175,156177,156179,156181,156183,156186,156188,156190,156192,156195],{"class":84,"line":404},[82,156170,1468],{"class":92},[82,156172,150529],{"class":96},[82,156174,1357],{"class":92},[82,156176,151136],{"class":96},[82,156178,100],{"class":92},[82,156180,156150],{"class":96},[82,156182,1357],{"class":92},[82,156184,156185],{"class":96},"\"电脑\"",[82,156187,100],{"class":92},[82,156189,86638],{"class":96},[82,156191,1357],{"class":92},[82,156193,156194],{"class":88},"18000",[82,156196,1497],{"class":92},[82,156198,156199,156201,156203,156205,156207,156209,156211,156213,156215,156217,156219,156221,156224],{"class":84,"line":413},[82,156200,1468],{"class":92},[82,156202,150529],{"class":96},[82,156204,1357],{"class":92},[82,156206,151157],{"class":96},[82,156208,100],{"class":92},[82,156210,156150],{"class":96},[82,156212,1357],{"class":92},[82,156214,156155],{"class":96},[82,156216,100],{"class":92},[82,156218,86638],{"class":96},[82,156220,1357],{"class":92},[82,156222,156223],{"class":88},"15000",[82,156225,1497],{"class":92},[82,156227,156228,156230,156232,156234,156236,156238,156240,156242,156244,156246,156248,156250,156253],{"class":84,"line":508},[82,156229,1468],{"class":92},[82,156231,150529],{"class":96},[82,156233,1357],{"class":92},[82,156235,151157],{"class":96},[82,156237,100],{"class":92},[82,156239,156150],{"class":96},[82,156241,1357],{"class":92},[82,156243,156185],{"class":96},[82,156245,100],{"class":92},[82,156247,86638],{"class":96},[82,156249,1357],{"class":92},[82,156251,156252],{"class":88},"16000",[82,156254,1497],{"class":92},[82,156256,156257],{"class":84,"line":513},[82,156258,875],{"class":92},[65,156260,156262],{"id":156261},"_1252-按日期统计","12.5.2 按日期统计",[73,156264,156266],{"className":75,"code":156265,"language":77,"meta":78,"style":78},"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",[32,156267,156268,156277,156281,156292,156306,156319,156338,156342],{"__ignoreMap":78},[82,156269,156270,156273,156275],{"class":84,"line":85},[82,156271,156272],{"class":92},"daily_total ",[82,156274,113],{"class":112},[82,156276,2177],{"class":92},[82,156278,156279],{"class":84,"line":157},[82,156280,486],{"emptyLinePlaceholder":485},[82,156282,156283,156285,156287,156289],{"class":84,"line":404},[82,156284,597],{"class":112},[82,156286,150739],{"class":92},[82,156288,603],{"class":112},[82,156290,156291],{"class":92}," sales:\n",[82,156293,156294,156297,156299,156302,156304],{"class":84,"line":413},[82,156295,156296],{"class":92},"    date ",[82,156298,113],{"class":112},[82,156300,156301],{"class":92}," item[",[82,156303,150529],{"class":96},[82,156305,875],{"class":92},[82,156307,156308,156311,156313,156315,156317],{"class":84,"line":508},[82,156309,156310],{"class":92},"    amount ",[82,156312,113],{"class":112},[82,156314,156301],{"class":92},[82,156316,86638],{"class":96},[82,156318,875],{"class":92},[82,156320,156321,156324,156326,156329,156331,156333,156335],{"class":84,"line":513},[82,156322,156323],{"class":92},"    daily_total[date] ",[82,156325,113],{"class":112},[82,156327,156328],{"class":92}," daily_total.get(date, ",[82,156330,2244],{"class":88},[82,156332,725],{"class":92},[82,156334,2249],{"class":112},[82,156336,156337],{"class":92}," amount\n",[82,156339,156340],{"class":84,"line":1388},[82,156341,486],{"emptyLinePlaceholder":485},[82,156343,156344,156346],{"class":84,"line":1394},[82,156345,407],{"class":88},[82,156347,156348],{"class":92},"(daily_total)\n",[65,156350,156352],{"id":156351},"_1253-按类别统计","12.5.3 按类别统计",[73,156354,156356],{"className":75,"code":156355,"language":77,"meta":78,"style":78},"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",[32,156357,156358,156367,156371,156381,156394,156406,156424,156428],{"__ignoreMap":78},[82,156359,156360,156363,156365],{"class":84,"line":85},[82,156361,156362],{"class":92},"category_total ",[82,156364,113],{"class":112},[82,156366,2177],{"class":92},[82,156368,156369],{"class":84,"line":157},[82,156370,486],{"emptyLinePlaceholder":485},[82,156372,156373,156375,156377,156379],{"class":84,"line":404},[82,156374,597],{"class":112},[82,156376,150739],{"class":92},[82,156378,603],{"class":112},[82,156380,156291],{"class":92},[82,156382,156383,156386,156388,156390,156392],{"class":84,"line":413},[82,156384,156385],{"class":92},"    category ",[82,156387,113],{"class":112},[82,156389,156301],{"class":92},[82,156391,156150],{"class":96},[82,156393,875],{"class":92},[82,156395,156396,156398,156400,156402,156404],{"class":84,"line":508},[82,156397,156310],{"class":92},[82,156399,113],{"class":112},[82,156401,156301],{"class":92},[82,156403,86638],{"class":96},[82,156405,875],{"class":92},[82,156407,156408,156411,156413,156416,156418,156420,156422],{"class":84,"line":513},[82,156409,156410],{"class":92},"    category_total[category] ",[82,156412,113],{"class":112},[82,156414,156415],{"class":92}," category_total.get(category, ",[82,156417,2244],{"class":88},[82,156419,725],{"class":92},[82,156421,2249],{"class":112},[82,156423,156337],{"class":92},[82,156425,156426],{"class":84,"line":1388},[82,156427,486],{"emptyLinePlaceholder":485},[82,156429,156430,156432],{"class":84,"line":1394},[82,156431,407],{"class":88},[82,156433,156434],{"class":92},"(category_total)\n",[65,156436,156438],{"id":156437},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[73,156440,156442],{"className":75,"code":156441,"language":77,"meta":78,"style":78},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[32,156443,156444,156466],{"__ignoreMap":78},[82,156445,156446,156449,156451,156453,156456,156458,156460,156462,156464],{"class":84,"line":85},[82,156447,156448],{"class":92},"top_date, top_amount ",[82,156450,113],{"class":112},[82,156452,8543],{"class":88},[82,156454,156455],{"class":92},"(daily_total.items(), ",[82,156457,2274],{"class":108},[82,156459,2277],{"class":112},[82,156461,2280],{"class":92},[82,156463,2283],{"class":88},[82,156465,7252],{"class":92},[82,156467,156468,156470],{"class":84,"line":157},[82,156469,407],{"class":88},[82,156471,156472],{"class":92},"(top_date, top_amount)\n",[14,156474,156476],{"id":156475},"_126-绘制柱状图","12.6 绘制柱状图",[73,156478,156480],{"className":75,"code":156479,"language":77,"meta":78,"style":78},"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",[32,156481,156482,156496,156507,156511,156519,156531,156543,156554,156558,156562,156572,156583,156597,156602,156619,156636,156652,156656],{"__ignoreMap":78},[82,156483,156484,156486,156488,156490,156492,156494],{"class":84,"line":85},[82,156485,1117],{"class":112},[82,156487,149911],{"class":92},[82,156489,1123],{"class":112},[82,156491,149916],{"class":92},[82,156493,728],{"class":112},[82,156495,149921],{"class":92},[82,156497,156498,156500,156502,156504],{"class":84,"line":157},[82,156499,1117],{"class":112},[82,156501,149771],{"class":92},[82,156503,1123],{"class":112},[82,156505,156506],{"class":92}," Bar\n",[82,156508,156509],{"class":84,"line":404},[82,156510,486],{"emptyLinePlaceholder":485},[82,156512,156513,156515,156517],{"class":84,"line":413},[82,156514,156362],{"class":92},[82,156516,113],{"class":112},[82,156518,1349],{"class":92},[82,156520,156521,156524,156526,156529],{"class":84,"line":508},[82,156522,156523],{"class":96},"    \"手机\"",[82,156525,1357],{"class":92},[82,156527,156528],{"class":88},"27000",[82,156530,1363],{"class":92},[82,156532,156533,156536,156538,156541],{"class":84,"line":513},[82,156534,156535],{"class":96},"    \"电脑\"",[82,156537,1357],{"class":92},[82,156539,156540],{"class":88},"34000",[82,156542,1363],{"class":92},[82,156544,156545,156548,156550,156552],{"class":84,"line":1388},[82,156546,156547],{"class":96},"    \"耳机\"",[82,156549,1357],{"class":92},[82,156551,126943],{"class":88},[82,156553,1363],{"class":92},[82,156555,156556],{"class":84,"line":1394},[82,156557,1391],{"class":92},[82,156559,156560],{"class":84,"line":1399},[82,156561,486],{"emptyLinePlaceholder":485},[82,156563,156564,156567,156569],{"class":84,"line":1430},[82,156565,156566],{"class":92},"bar ",[82,156568,113],{"class":112},[82,156570,156571],{"class":92}," Bar()\n",[82,156573,156574,156577,156580],{"class":84,"line":1818},[82,156575,156576],{"class":92},"bar.add_xaxis(",[82,156578,156579],{"class":88},"list",[82,156581,156582],{"class":92},"(category_total.keys()))\n",[82,156584,156585,156588,156590,156592,156594],{"class":84,"line":2082},[82,156586,156587],{"class":92},"bar.add_yaxis(",[82,156589,149827],{"class":96},[82,156591,100],{"class":92},[82,156593,156579],{"class":88},[82,156595,156596],{"class":92},"(category_total.values()))\n",[82,156598,156599],{"class":84,"line":2233},[82,156600,156601],{"class":92},"bar.set_global_opts(\n",[82,156603,156604,156606,156608,156610,156612,156614,156617],{"class":84,"line":2255},[82,156605,150005],{"class":108},[82,156607,113],{"class":112},[82,156609,150010],{"class":92},[82,156611,53970],{"class":108},[82,156613,113],{"class":112},[82,156615,156616],{"class":96},"\"品类销售额\"",[82,156618,40613],{"class":92},[82,156620,156621,156623,156625,156627,156629,156631,156634],{"class":84,"line":2260},[82,156622,150024],{"class":108},[82,156624,113],{"class":112},[82,156626,150029],{"class":92},[82,156628,82364],{"class":108},[82,156630,113],{"class":112},[82,156632,156633],{"class":96},"\"品类\"",[82,156635,40613],{"class":92},[82,156637,156638,156640,156642,156644,156646,156648,156650],{"class":84,"line":2298},[82,156639,150043],{"class":108},[82,156641,113],{"class":112},[82,156643,150029],{"class":92},[82,156645,82364],{"class":108},[82,156647,113],{"class":112},[82,156649,149827],{"class":96},[82,156651,40613],{"class":92},[82,156653,156654],{"class":84,"line":2303},[82,156655,119],{"class":92},[82,156657,156658,156661,156664],{"class":84,"line":2321},[82,156659,156660],{"class":92},"bar.render(",[82,156662,156663],{"class":96},"\"category_sales.html\"",[82,156665,119],{"class":92},[14,156667,156669],{"id":156668},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156671,156672],{},"时间线适合展示不同日期、月份、年份的数据变化。",[73,156674,156676],{"className":75,"code":156675,"language":77,"meta":78,"style":78},"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",[32,156677,156678,156692,156703,156707,156715,156739,156762,156787,156791,156795,156805,156809,156820,156829,156839,156853,156884,156889,156893],{"__ignoreMap":78},[82,156679,156680,156682,156684,156686,156688,156690],{"class":84,"line":85},[82,156681,1117],{"class":112},[82,156683,149911],{"class":92},[82,156685,1123],{"class":112},[82,156687,149916],{"class":92},[82,156689,728],{"class":112},[82,156691,149921],{"class":92},[82,156693,156694,156696,156698,156700],{"class":84,"line":157},[82,156695,1117],{"class":112},[82,156697,149771],{"class":92},[82,156699,1123],{"class":112},[82,156701,156702],{"class":92}," Bar, Timeline\n",[82,156704,156705],{"class":84,"line":404},[82,156706,486],{"emptyLinePlaceholder":485},[82,156708,156709,156711,156713],{"class":84,"line":413},[82,156710,104209],{"class":92},[82,156712,113],{"class":112},[82,156714,1349],{"class":92},[82,156716,156717,156720,156723,156725,156727,156729,156731,156733,156735,156737],{"class":84,"line":508},[82,156718,156719],{"class":96},"    \"2024-10-01\"",[82,156721,156722],{"class":92},": {",[82,156724,156155],{"class":96},[82,156726,1357],{"class":92},[82,156728,156164],{"class":88},[82,156730,100],{"class":92},[82,156732,156185],{"class":96},[82,156734,1357],{"class":92},[82,156736,156194],{"class":88},[82,156738,1497],{"class":92},[82,156740,156741,156744,156746,156748,156750,156752,156754,156756,156758,156760],{"class":84,"line":513},[82,156742,156743],{"class":96},"    \"2024-10-02\"",[82,156745,156722],{"class":92},[82,156747,156155],{"class":96},[82,156749,1357],{"class":92},[82,156751,156223],{"class":88},[82,156753,100],{"class":92},[82,156755,156185],{"class":96},[82,156757,1357],{"class":92},[82,156759,156252],{"class":88},[82,156761,1497],{"class":92},[82,156763,156764,156767,156769,156771,156773,156776,156778,156780,156782,156785],{"class":84,"line":1388},[82,156765,156766],{"class":96},"    \"2024-10-03\"",[82,156768,156722],{"class":92},[82,156770,156155],{"class":96},[82,156772,1357],{"class":92},[82,156774,156775],{"class":88},"17000",[82,156777,100],{"class":92},[82,156779,156185],{"class":96},[82,156781,1357],{"class":92},[82,156783,156784],{"class":88},"19000",[82,156786,1497],{"class":92},[82,156788,156789],{"class":84,"line":1394},[82,156790,1391],{"class":92},[82,156792,156793],{"class":84,"line":1399},[82,156794,486],{"emptyLinePlaceholder":485},[82,156796,156797,156800,156802],{"class":84,"line":1430},[82,156798,156799],{"class":92},"timeline ",[82,156801,113],{"class":112},[82,156803,156804],{"class":92}," Timeline()\n",[82,156806,156807],{"class":84,"line":1818},[82,156808,486],{"emptyLinePlaceholder":485},[82,156810,156811,156813,156816,156818],{"class":84,"line":2082},[82,156812,597],{"class":112},[82,156814,156815],{"class":92}," date, category_data ",[82,156817,603],{"class":112},[82,156819,151676],{"class":92},[82,156821,156822,156825,156827],{"class":84,"line":2233},[82,156823,156824],{"class":92},"    bar ",[82,156826,113],{"class":112},[82,156828,156571],{"class":92},[82,156830,156831,156834,156836],{"class":84,"line":2255},[82,156832,156833],{"class":92},"    bar.add_xaxis(",[82,156835,156579],{"class":88},[82,156837,156838],{"class":92},"(category_data.keys()))\n",[82,156840,156841,156844,156846,156848,156850],{"class":84,"line":2260},[82,156842,156843],{"class":92},"    bar.add_yaxis(",[82,156845,149827],{"class":96},[82,156847,100],{"class":92},[82,156849,156579],{"class":88},[82,156851,156852],{"class":92},"(category_data.values()))\n",[82,156854,156855,156858,156861,156863,156865,156867,156869,156871,156873,156875,156877,156879,156882],{"class":84,"line":2298},[82,156856,156857],{"class":92},"    bar.set_global_opts(",[82,156859,156860],{"class":108},"title_opts",[82,156862,113],{"class":112},[82,156864,150010],{"class":92},[82,156866,53970],{"class":108},[82,156868,113],{"class":112},[82,156870,2822],{"class":112},[82,156872,216],{"class":96},[82,156874,3645],{"class":88},[82,156876,76480],{"class":92},[82,156878,3695],{"class":88},[82,156880,156881],{"class":96},"销售额\"",[82,156883,33074],{"class":92},[82,156885,156886],{"class":84,"line":2303},[82,156887,156888],{"class":92},"    timeline.add(bar, date)\n",[82,156890,156891],{"class":84,"line":2321},[82,156892,486],{"emptyLinePlaceholder":485},[82,156894,156895,156898,156901],{"class":84,"line":2533},[82,156896,156897],{"class":92},"timeline.render(",[82,156899,156900],{"class":96},"\"timeline_sales.html\"",[82,156902,119],{"class":92},[14,156904,156906],{"id":156905},"_128-绘制地图","12.8 绘制地图",[19,156908,156909],{},"地图适合展示地区数据。",[73,156911,156913],{"className":75,"code":156912,"language":77,"meta":78,"style":78},"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",[32,156914,156915,156929,156940,156944,156952,156965,156977,156990,157003,157007,157011,157021,157036,157041,157058,157077,157081],{"__ignoreMap":78},[82,156916,156917,156919,156921,156923,156925,156927],{"class":84,"line":85},[82,156918,1117],{"class":112},[82,156920,149911],{"class":92},[82,156922,1123],{"class":112},[82,156924,149916],{"class":92},[82,156926,728],{"class":112},[82,156928,149921],{"class":92},[82,156930,156931,156933,156935,156937],{"class":84,"line":157},[82,156932,1117],{"class":112},[82,156934,149771],{"class":92},[82,156936,1123],{"class":112},[82,156938,156939],{"class":92}," Map\n",[82,156941,156942],{"class":84,"line":404},[82,156943,486],{"emptyLinePlaceholder":485},[82,156945,156946,156948,156950],{"class":84,"line":413},[82,156947,104209],{"class":92},[82,156949,113],{"class":112},[82,156951,1463],{"class":92},[82,156953,156954,156957,156959,156961,156963],{"class":84,"line":508},[82,156955,156956],{"class":92},"    (",[82,156958,71825],{"class":96},[82,156960,100],{"class":92},[82,156962,3566],{"class":88},[82,156964,40613],{"class":92},[82,156966,156967,156969,156971,156973,156975],{"class":84,"line":513},[82,156968,156956],{"class":92},[82,156970,71845],{"class":96},[82,156972,100],{"class":92},[82,156974,149844],{"class":88},[82,156976,40613],{"class":92},[82,156978,156979,156981,156984,156986,156988],{"class":84,"line":1388},[82,156980,156956],{"class":92},[82,156982,156983],{"class":96},"\"广东\"",[82,156985,100],{"class":92},[82,156987,4325],{"class":88},[82,156989,40613],{"class":92},[82,156991,156992,156994,156997,156999,157001],{"class":84,"line":1394},[82,156993,156956],{"class":92},[82,156995,156996],{"class":96},"\"浙江\"",[82,156998,100],{"class":92},[82,157000,149849],{"class":88},[82,157002,40613],{"class":92},[82,157004,157005],{"class":84,"line":1399},[82,157006,875],{"class":92},[82,157008,157009],{"class":84,"line":1430},[82,157010,486],{"emptyLinePlaceholder":485},[82,157012,157013,157016,157018],{"class":84,"line":1818},[82,157014,157015],{"class":92},"map_chart ",[82,157017,113],{"class":112},[82,157019,157020],{"class":92}," Map()\n",[82,157022,157023,157026,157028,157031,157034],{"class":84,"line":2082},[82,157024,157025],{"class":92},"map_chart.add(",[82,157027,149827],{"class":96},[82,157029,157030],{"class":92},", data, ",[82,157032,157033],{"class":96},"\"china\"",[82,157035,119],{"class":92},[82,157037,157038],{"class":84,"line":2233},[82,157039,157040],{"class":92},"map_chart.set_global_opts(\n",[82,157042,157043,157045,157047,157049,157051,157053,157056],{"class":84,"line":2255},[82,157044,150005],{"class":108},[82,157046,113],{"class":112},[82,157048,150010],{"class":92},[82,157050,53970],{"class":108},[82,157052,113],{"class":112},[82,157054,157055],{"class":96},"\"地区销售额\"",[82,157057,40613],{"class":92},[82,157059,157060,157063,157065,157068,157071,157073,157075],{"class":84,"line":2260},[82,157061,157062],{"class":108},"    visualmap_opts",[82,157064,113],{"class":112},[82,157066,157067],{"class":92},"opts.VisualMapOpts(",[82,157069,157070],{"class":108},"max_",[82,157072,113],{"class":112},[82,157074,4325],{"class":88},[82,157076,40613],{"class":92},[82,157078,157079],{"class":84,"line":2298},[82,157080,119],{"class":92},[82,157082,157083,157086,157089],{"class":84,"line":2303},[82,157084,157085],{"class":92},"map_chart.render(",[82,157087,157088],{"class":96},"\"map_sales.html\"",[82,157090,119],{"class":92},[19,157092,157093],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,157095,157097],{"id":157096},"_129-项目拆分建议","12.9 项目拆分建议",[19,157099,157100],{},"当代码超过一个文件时，可以这样组织：",[73,157102,157105],{"className":157103,"code":157104,"language":7780,"meta":78},[7778],"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",[32,157106,157104],{"__ignoreMap":78},[19,157108,157109],{},"职责：",[26,157111,157112,157118,157124,157130],{},[29,157113,157114,157117],{},[32,157115,157116],{},"main.py","：程序入口。",[29,157119,157120,157123],{},[32,157121,157122],{},"file_utils.py","：读写 JSON。",[29,157125,157126,157129],{},[32,157127,157128],{},"sales_service.py","：统计销售数据。",[29,157131,157132,157135],{},[32,157133,157134],{},"chart_builder.py","：生成图表。",[14,157137,157139],{"id":157138},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,157141,157142],{},"语法基础：",[26,157144,157145,157148,157151,157154],{},[29,157146,157147],{},"会写变量、注释、输入输出。",[29,157149,157150],{},"会使用 int、float、str、bool。",[29,157152,157153],{},"会做类型转换。",[29,157155,157156],{},"会使用 f-string 格式化输出。",[19,157158,157159],{},"流程控制：",[26,157161,157162,157168,157174,157182],{},[29,157163,157164,157165,2611],{},"会写 ",[32,157166,157167],{},"if elif else",[29,157169,157164,157170,103569,157172,2611],{},[32,157171,111209],{},[32,157173,597],{},[29,157175,157176,157177,103569,157179,2611],{},"理解 ",[32,157178,4653],{},[32,157180,157181],{},"continue",[29,157183,157184],{},"能写嵌套循环。",[19,157186,157187],{},"函数：",[26,157189,157190,157193,157196,157199],{},[29,157191,157192],{},"会定义和调用函数。",[29,157194,157195],{},"理解参数和返回值。",[29,157197,157198],{},"知道局部变量和全局变量。",[29,157200,157201],{},"会使用默认参数、关键字参数、不定长参数。",[19,157203,157204],{},"容器：",[26,157206,157207,157210,157213,157216,157219],{},[29,157208,157209],{},"会使用列表增删改查。",[29,157211,157212],{},"会遍历列表、字典。",[29,157214,157215],{},"会使用切片。",[29,157217,157218],{},"会用集合去重。",[29,157220,157221],{},"会处理列表嵌套字典。",[19,157223,157224],{},"文件和模块：",[26,157226,157227,157230,157233,157236,157239],{},[29,157228,157229],{},"会读写文本文件。",[29,157231,157232],{},"会读写 JSON。",[29,157234,157235],{},"会捕获常见异常。",[29,157237,157238],{},"会导入模块和第三方包。",[29,157240,157241],{},"会创建简单包结构。",[19,157243,157244],{},"项目能力：",[26,157246,157247,157250,157253,157256,157259],{},[29,157248,157249],{},"能把代码拆成函数。",[29,157251,157252],{},"能把数据保存到文件。",[29,157254,157255],{},"能处理用户输入错误。",[29,157257,157258],{},"能写一个完整菜单程序。",[29,157260,157261],{},"能用 pyecharts 生成图表。",[14,157263,157265],{"id":157264},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,157267,157268,157271,157274,157277,157280,157283,157286,157289],{},[29,157269,157270],{},"猜数字游戏。",[29,157272,157273],{},"ATM 菜单程序。",[29,157275,157276],{},"学生成绩统计。",[29,157278,157279],{},"学生管理系统函数版。",[29,157281,157282],{},"学生管理系统文件持久化版。",[29,157284,157285],{},"学生管理系统面向对象版。",[29,157287,157288],{},"销售数据统计。",[29,157290,157291],{},"销售数据可视化。",[14,157293,157295],{"id":157294},"_1212-常见学习误区","12.12 常见学习误区",[26,157297,157298,157301,157304,157307,157310,157313,157316],{},[29,157299,157300],{},"只看视频不敲代码。",[29,157302,157303],{},"一报错就复制错误去搜，不先读报错位置。",[29,157305,157306],{},"变量名随便写，后续自己看不懂。",[29,157308,157309],{},"所有代码都写在一个文件一个函数里。",[29,157311,157312],{},"不保存练习代码，复习时没有材料。",[29,157314,157315],{},"还没掌握列表字典就急着学框架。",[29,157317,157318],{},"不会读官方文档，只依赖教程。",[14,157320,157322],{"id":157321},"_1213-如何读报错","12.13 如何读报错",[19,157324,157325],{},"报错通常从下往上看最后几行。",[19,157327,17721],{},[73,157329,157332],{"className":157330,"code":157331,"language":7780,"meta":78},[7778],"ValueError: invalid literal for int() with base 10: 'abc'\n",[32,157333,157331],{"__ignoreMap":78},[19,157335,27184],{},[26,157337,157338,157344,157354],{},[29,157339,157340,157341,2611],{},"异常类型是 ",[32,157342,157343],{},"ValueError",[29,157345,109895,157346,157349,157350,157353],{},[32,157347,157348],{},"int()"," 无法把 ",[32,157351,157352],{},"'abc'"," 转成整数。",[29,157355,157356],{},"应该检查输入内容或增加异常处理。",[19,157358,157359],{},"再看文件名和行号：",[73,157361,157364],{"className":157362,"code":157363,"language":7780,"meta":78},[7778],"File \"main.py\", line 10, in \u003Cmodule>\n",[32,157365,157363],{"__ignoreMap":78},[19,157367,157368,157369,157371],{},"表示错误发生在 ",[32,157370,157116],{}," 第 10 行。",[14,157373,157375],{"id":157374},"_1214-后续学习方向","12.14 后续学习方向",[19,157377,157378],{},"Python 基础完成后，可以按兴趣选择方向：",[26,157380,157381,157393,157402,157414,157425,157434,157444],{},[29,157382,157383,157384,2973,157387,2973,157390,2611],{},"自动化办公：",[32,157385,157386],{},"openpyxl",[32,157388,157389],{},"python-docx",[32,157391,157392],{},"pdfplumber",[29,157394,157395,157396,2973,157398,2973,157400,2611],{},"数据分析：",[32,157397,103177],{},[32,157399,148728],{},[32,157401,148736],{},[29,157403,157404,157405,2973,157408,2973,157411,2611],{},"Web 后端：",[32,157406,157407],{},"Flask",[32,157409,157410],{},"FastAPI",[32,157412,157413],{},"Django",[29,157415,157416,157417,2973,157419,2973,157422,2611],{},"爬虫：",[32,157418,148713],{},[32,157420,157421],{},"BeautifulSoup",[32,157423,157424],{},"Scrapy",[29,157426,157427,157428,2973,157430,157433],{},"测试开发：",[32,157429,148760],{},[32,157431,157432],{},"selenium","、接口测试。",[29,157435,157436,157437,2973,157439,2973,157441,2611],{},"人工智能：",[32,157438,103177],{},[32,157440,148728],{},[32,157442,157443],{},"pytorch",[29,157445,157446,157447,2973,157449,2973,157452,2611],{},"运维脚本：",[32,157448,148330],{},[32,157450,157451],{},"subprocess",[32,157453,157454],{},"paramiko",[19,157456,157457],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157459,157461],{"id":157460},"_1215-结课练习","12.15 结课练习",[26,157463,157464,157467,157470,157473,157476,157479,157482,157485],{},[29,157465,157466],{},"完成函数版学生管理系统。",[29,157468,157469],{},"给学生管理系统增加 JSON 持久化。",[29,157471,157472],{},"给学生管理系统增加异常处理。",[29,157474,157475],{},"把学生管理系统改成面向对象版。",[29,157477,157478],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,157480,157481],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,157483,157484],{},"按品类统计销售额并绘制柱状图。",[29,157486,157487],{},"写一份自己的 Python 学习路线图。",[2671,157489,157490],{},"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":78,"searchDepth":157,"depth":157,"links":157492},[157493,157494,157497,157498,157499,157505,157506,157507,157508,157509,157510,157511,157512,157513,157514],{"id":154224,"depth":157,"text":154225},{"id":154274,"depth":157,"text":154275,"children":157495},[157496],{"id":154278,"depth":404,"text":154279},{"id":154317,"depth":157,"text":154318},{"id":155779,"depth":157,"text":155780},{"id":156117,"depth":157,"text":156118,"children":157500},[157501,157502,157503,157504],{"id":156121,"depth":404,"text":156122},{"id":156261,"depth":404,"text":156262},{"id":156351,"depth":404,"text":156352},{"id":156437,"depth":404,"text":156438},{"id":156475,"depth":157,"text":156476},{"id":156668,"depth":157,"text":156669},{"id":156905,"depth":157,"text":156906},{"id":157096,"depth":157,"text":157097},{"id":157138,"depth":157,"text":157139},{"id":157264,"depth":157,"text":157265},{"id":157294,"depth":157,"text":157295},{"id":157321,"depth":157,"text":157322},{"id":157374,"depth":157,"text":157375},{"id":157460,"depth":157,"text":157461},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154216,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157521,"title":157522,"body":157523,"description":2699,"extension":2700,"meta":159989,"navigation":485,"path":159990,"seo":159991,"stem":159992,"__hash__":159993},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157524,"toc":159964},[157525,157528,157532,157535,157538,157558,157561,157584,157587,157590,157612,157615,157637,157641,157644,157684,157687,157808,157812,157815,157855,157858,157882,157885,157889,157892,157906,157939,157942,157977,157980,158003,158006,158039,158042,158044,158050,158125,158128,158134,158151,158191,158195,158198,158244,158246,158284,158287,158322,158325,158360,158363,158395,158398,158417,158421,158425,158538,158540,158615,158619,158665,158668,158694,158703,158707,158710,158773,158781,158809,158813,158853,158918,158922,158925,158963,158966,159010,159013,159073,159077,159104,159107,159135,159138,159142,159146,159211,159214,159252,159255,159287,159291,159390,159394,159397,159470,159473,159521,159525,159531,159571,159574,159621,159624,159673,159677,159679,159693,159695,159876,159880,159907,159927,159934,159938,159955,159961],[10,157526,157522],{"id":157527},"_2-基础语法变量与字符串",[14,157529,157531],{"id":157530},"_21-注释","2.1 注释",[19,157533,157534],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157536,157537],{},"单行注释：",[73,157539,157541],{"className":75,"code":157540,"language":77,"meta":78,"style":78},"# 这是单行注释\nprint(\"hello\")\n",[32,157542,157543,157548],{"__ignoreMap":78},[82,157544,157545],{"class":84,"line":85},[82,157546,157547],{"class":2828},"# 这是单行注释\n",[82,157549,157550,157552,157554,157556],{"class":84,"line":157},[82,157551,407],{"class":88},[82,157553,93],{"class":92},[82,157555,8436],{"class":96},[82,157557,119],{"class":92},[19,157559,157560],{},"多行说明常用三引号：",[73,157562,157564],{"className":75,"code":157563,"language":77,"meta":78,"style":78},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[32,157565,157566,157570,157575,157580],{"__ignoreMap":78},[82,157567,157568],{"class":84,"line":85},[82,157569,98249],{"class":96},[82,157571,157572],{"class":84,"line":157},[82,157573,157574],{"class":96},"这是多行说明。\n",[82,157576,157577],{"class":84,"line":404},[82,157578,157579],{"class":96},"常用于文件顶部说明、函数说明等。\n",[82,157581,157582],{"class":84,"line":413},[82,157583,98249],{"class":96},[19,157585,157586],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157588,157589],{},"不好：",[73,157591,157593],{"className":75,"code":157592,"language":77,"meta":78,"style":78},"# age 加 1\nage = age + 1\n",[32,157594,157595,157600],{"__ignoreMap":78},[82,157596,157597],{"class":84,"line":85},[82,157598,157599],{"class":2828},"# age 加 1\n",[82,157601,157602,157604,157606,157608,157610],{"class":84,"line":157},[82,157603,149088],{"class":92},[82,157605,113],{"class":112},[82,157607,18292],{"class":92},[82,157609,2249],{"class":112},[82,157611,2252],{"class":88},[19,157613,157614],{},"较好：",[73,157616,157618],{"className":75,"code":157617,"language":77,"meta":78,"style":78},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[32,157619,157620,157625],{"__ignoreMap":78},[82,157621,157622],{"class":84,"line":85},[82,157623,157624],{"class":2828},"# 用户过完生日后，年龄增加一岁\n",[82,157626,157627,157629,157631,157633,157635],{"class":84,"line":157},[82,157628,149088],{"class":92},[82,157630,113],{"class":112},[82,157632,18292],{"class":92},[82,157634,2249],{"class":112},[82,157636,2252],{"class":88},[14,157638,157640],{"id":157639},"_22-字面量","2.2 字面量",[19,157642,157643],{},"字面量就是代码中直接写出来的数据。",[73,157645,157647],{"className":75,"code":157646,"language":77,"meta":78,"style":78},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[32,157648,157649,157656,157663,157670,157677],{"__ignoreMap":78},[82,157650,157651,157653],{"class":84,"line":85},[82,157652,3069],{"class":88},[82,157654,157655],{"class":2828},"          # 整数\n",[82,157657,157658,157660],{"class":84,"line":157},[82,157659,2819],{"class":88},[82,157661,157662],{"class":2828},"         # 小数\n",[82,157664,157665,157667],{"class":84,"line":404},[82,157666,8436],{"class":96},[82,157668,157669],{"class":2828},"      # 字符串\n",[82,157671,157672,157674],{"class":84,"line":413},[82,157673,1205],{"class":88},[82,157675,157676],{"class":2828},"         # 布尔值\n",[82,157678,157679,157681],{"class":84,"line":508},[82,157680,98237],{"class":88},[82,157682,157683],{"class":2828},"         # 空值\n",[19,157685,157686],{},"常见字面量类型：",[278,157688,157689,157699],{},[281,157690,157691],{},[284,157692,157693,157695,157697],{},[287,157694,26321],{},[287,157696,30074],{},[287,157698,292],{},[294,157700,157701,157712,157723,157734,157746,157758,157770,157783,157795],{},[284,157702,157703,157705,157709],{},[299,157704,2776],{},[299,157706,157707],{},[32,157708,3069],{},[299,157710,157711],{},"整数",[284,157713,157714,157716,157720],{},[299,157715,2811],{},[299,157717,157718],{},[32,157719,2819],{},[299,157721,157722],{},"浮点数",[284,157724,157725,157727,157731],{},[299,157726,3918],{},[299,157728,157729],{},[32,157730,8436],{},[299,157732,157733],{},"字符串",[284,157735,157736,157738,157744],{},[299,157737,3970],{},[299,157739,157740,2973,157742],{},[32,157741,1205],{},[32,157743,1415],{},[299,157745,68572],{},[284,157747,157748,157751,157755],{},[299,157749,157750],{},"NoneType",[299,157752,157753],{},[32,157754,98237],{},[299,157756,157757],{},"空值",[284,157759,157760,157762,157767],{},[299,157761,156579],{},[299,157763,157764],{},[32,157765,157766],{},"[1, 2, 3]",[299,157768,157769],{},"列表",[284,157771,157772,157775,157780],{},[299,157773,157774],{},"tuple",[299,157776,157777],{},[32,157778,157779],{},"(1, 2, 3)",[299,157781,157782],{},"元组",[284,157784,157785,157787,157792],{},[299,157786,117091],{},[299,157788,157789],{},[32,157790,157791],{},"{\"name\": \"张三\"}",[299,157793,157794],{},"字典",[284,157796,157797,157800,157805],{},[299,157798,157799],{},"set",[299,157801,157802],{},[32,157803,157804],{},"{1, 2, 3}",[299,157806,157807],{},"集合",[14,157809,157811],{"id":157810},"_23-变量","2.3 变量",[19,157813,157814],{},"变量是保存数据的名字。",[73,157816,157818],{"className":75,"code":157817,"language":77,"meta":78,"style":78},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[32,157819,157820,157828,157836,157846],{"__ignoreMap":78},[82,157821,157822,157824,157826],{"class":84,"line":85},[82,157823,149078],{"class":92},[82,157825,113],{"class":112},[82,157827,151881],{"class":96},[82,157829,157830,157832,157834],{"class":84,"line":157},[82,157831,149088],{"class":92},[82,157833,113],{"class":112},[82,157835,149093],{"class":88},[82,157837,157838,157841,157843],{"class":84,"line":404},[82,157839,157840],{"class":92},"height ",[82,157842,113],{"class":112},[82,157844,157845],{"class":88}," 1.75\n",[82,157847,157848,157851,157853],{"class":84,"line":413},[82,157849,157850],{"class":92},"is_student ",[82,157852,113],{"class":112},[82,157854,156111],{"class":88},[19,157856,157857],{},"Python 的变量不需要提前声明类型：",[73,157859,157861],{"className":75,"code":157860,"language":77,"meta":78,"style":78},"score = 100\nscore = \"满分\"\n",[32,157862,157863,157873],{"__ignoreMap":78},[82,157864,157865,157868,157870],{"class":84,"line":85},[82,157866,157867],{"class":92},"score ",[82,157869,113],{"class":112},[82,157871,157872],{"class":88}," 100\n",[82,157874,157875,157877,157879],{"class":84,"line":157},[82,157876,157867],{"class":92},[82,157878,113],{"class":112},[82,157880,157881],{"class":96}," \"满分\"\n",[19,157883,157884],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157886,157888],{"id":157887},"_24-变量命名规则","2.4 变量命名规则",[19,157890,157891],{},"硬性规则：",[26,157893,157894,157897,157900,157903],{},[29,157895,157896],{},"只能由字母、数字、下划线组成。",[29,157898,157899],{},"不能以数字开头。",[29,157901,157902],{},"不能使用 Python 关键字。",[29,157904,157905],{},"区分大小写。",[73,157907,157909],{"className":75,"code":157908,"language":77,"meta":78,"style":78},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[32,157910,157911,157920,157929],{"__ignoreMap":78},[82,157912,157913,157916,157918],{"class":84,"line":85},[82,157914,157915],{"class":92},"user_name ",[82,157917,113],{"class":112},[82,157919,149083],{"class":96},[82,157921,157922,157925,157927],{"class":84,"line":157},[82,157923,157924],{"class":92},"age2 ",[82,157926,113],{"class":112},[82,157928,149093],{"class":88},[82,157930,157931,157934,157936],{"class":84,"line":404},[82,157932,157933],{"class":92},"_token ",[82,157935,113],{"class":112},[82,157937,157938],{"class":96}," \"abc\"\n",[19,157940,157941],{},"错误写法：",[73,157943,157945],{"className":75,"code":157944,"language":77,"meta":78,"style":78},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[32,157946,157947,157956,157968],{"__ignoreMap":78},[82,157948,157949,157952,157954],{"class":84,"line":85},[82,157950,157951],{"class":79957},"2age",[82,157953,259],{"class":112},[82,157955,149093],{"class":88},[82,157957,157958,157960,157962,157964,157966],{"class":84,"line":157},[82,157959,134128],{"class":92},[82,157961,3288],{"class":112},[82,157963,149078],{"class":92},[82,157965,113],{"class":112},[82,157967,149083],{"class":96},[82,157969,157970,157972,157974],{"class":84,"line":404},[82,157971,17281],{"class":112},[82,157973,259],{"class":112},[82,157975,157976],{"class":96}," \"一班\"\n",[19,157978,157979],{},"查看关键字：",[73,157981,157983],{"className":75,"code":157982,"language":77,"meta":78,"style":78},"import keyword\n\nprint(keyword.kwlist)\n",[32,157984,157985,157992,157996],{"__ignoreMap":78},[82,157986,157987,157989],{"class":84,"line":85},[82,157988,1123],{"class":112},[82,157990,157991],{"class":92}," keyword\n",[82,157993,157994],{"class":84,"line":157},[82,157995,486],{"emptyLinePlaceholder":485},[82,157997,157998,158000],{"class":84,"line":404},[82,157999,407],{"class":88},[82,158001,158002],{"class":92},"(keyword.kwlist)\n",[19,158004,158005],{},"推荐命名风格：",[73,158007,158009],{"className":75,"code":158008,"language":77,"meta":78,"style":78},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[32,158010,158011,158020,158030],{"__ignoreMap":78},[82,158012,158013,158016,158018],{"class":84,"line":85},[82,158014,158015],{"class":92},"student_name ",[82,158017,113],{"class":112},[82,158019,151881],{"class":96},[82,158021,158022,158025,158027],{"class":84,"line":157},[82,158023,158024],{"class":92},"total_price ",[82,158026,113],{"class":112},[82,158028,158029],{"class":88}," 99.8\n",[82,158031,158032,158035,158037],{"class":84,"line":404},[82,158033,158034],{"class":92},"is_finished ",[82,158036,113],{"class":112},[82,158038,128351],{"class":88},[19,158040,158041],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,158043,53295],{"id":53294},[19,158045,106916,158046,158049],{},[32,158047,158048],{},"type()"," 查看数据类型：",[73,158051,158053],{"className":75,"code":158052,"language":77,"meta":78,"style":78},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[32,158054,158055,158069,158083,158097,158111],{"__ignoreMap":78},[82,158056,158057,158059,158061,158063,158065,158067],{"class":84,"line":85},[82,158058,407],{"class":88},[82,158060,93],{"class":92},[82,158062,105658],{"class":88},[82,158064,93],{"class":92},[82,158066,3069],{"class":88},[82,158068,33074],{"class":92},[82,158070,158071,158073,158075,158077,158079,158081],{"class":84,"line":157},[82,158072,407],{"class":88},[82,158074,93],{"class":92},[82,158076,105658],{"class":88},[82,158078,93],{"class":92},[82,158080,2819],{"class":88},[82,158082,33074],{"class":92},[82,158084,158085,158087,158089,158091,158093,158095],{"class":84,"line":404},[82,158086,407],{"class":88},[82,158088,93],{"class":92},[82,158090,105658],{"class":88},[82,158092,93],{"class":92},[82,158094,8436],{"class":96},[82,158096,33074],{"class":92},[82,158098,158099,158101,158103,158105,158107,158109],{"class":84,"line":413},[82,158100,407],{"class":88},[82,158102,93],{"class":92},[82,158104,105658],{"class":88},[82,158106,93],{"class":92},[82,158108,1205],{"class":88},[82,158110,33074],{"class":92},[82,158112,158113,158115,158117,158119,158121,158123],{"class":84,"line":508},[82,158114,407],{"class":88},[82,158116,93],{"class":92},[82,158118,105658],{"class":88},[82,158120,93],{"class":92},[82,158122,98237],{"class":88},[82,158124,33074],{"class":92},[19,158126,158127],{},"输出类似：",[73,158129,158132],{"className":158130,"code":158131,"language":7780,"meta":78},[7778],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[32,158133,158131],{"__ignoreMap":78},[19,158135,11616,158136,109833,158138,158140,158141,158143,158144,24084,158146,158143,158148,158150],{},[32,158137,3970],{},[32,158139,2776],{}," 的子类，",[32,158142,1205],{}," 可以当作 ",[32,158145,2283],{},[32,158147,1415],{},[32,158149,2244],{},"，但业务代码中不要滥用。",[73,158152,158154],{"className":75,"code":158153,"language":77,"meta":78,"style":78},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[32,158155,158156,158174],{"__ignoreMap":78},[82,158157,158158,158160,158162,158164,158166,158168,158171],{"class":84,"line":85},[82,158159,407],{"class":88},[82,158161,93],{"class":92},[82,158163,1205],{"class":88},[82,158165,48130],{"class":112},[82,158167,27703],{"class":88},[82,158169,158170],{"class":92},")   ",[82,158172,158173],{"class":2828},"# 2\n",[82,158175,158176,158178,158180,158182,158184,158186,158188],{"class":84,"line":157},[82,158177,407],{"class":88},[82,158179,93],{"class":92},[82,158181,1415],{"class":88},[82,158183,48130],{"class":112},[82,158185,27703],{"class":88},[82,158187,48372],{"class":92},[82,158189,158190],{"class":2828},"# 1\n",[14,158192,158194],{"id":158193},"_26-类型转换","2.6 类型转换",[19,158196,158197],{},"常用转换函数：",[73,158199,158201],{"className":75,"code":158200,"language":77,"meta":78,"style":78},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[32,158202,158203,158213,158224,158234],{"__ignoreMap":78},[82,158204,158205,158207,158209,158211],{"class":84,"line":85},[82,158206,2776],{"class":88},[82,158208,93],{"class":92},[82,158210,56876],{"class":96},[82,158212,119],{"class":92},[82,158214,158215,158217,158219,158222],{"class":84,"line":157},[82,158216,2811],{"class":88},[82,158218,93],{"class":92},[82,158220,158221],{"class":96},"\"3.14\"",[82,158223,119],{"class":92},[82,158225,158226,158228,158230,158232],{"class":84,"line":404},[82,158227,3918],{"class":88},[82,158229,93],{"class":92},[82,158231,3069],{"class":88},[82,158233,119],{"class":92},[82,158235,158236,158238,158240,158242],{"class":84,"line":413},[82,158237,3970],{"class":88},[82,158239,93],{"class":92},[82,158241,2283],{"class":88},[82,158243,119],{"class":92},[19,158245,17721],{},[73,158247,158249],{"className":75,"code":158248,"language":77,"meta":78,"style":78},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[32,158250,158251,158260,158271],{"__ignoreMap":78},[82,158252,158253,158255,158257],{"class":84,"line":85},[82,158254,149088],{"class":92},[82,158256,113],{"class":112},[82,158258,158259],{"class":96}," \"18\"\n",[82,158261,158262,158264,158266,158268],{"class":84,"line":157},[82,158263,149088],{"class":92},[82,158265,113],{"class":112},[82,158267,4982],{"class":88},[82,158269,158270],{"class":92},"(age)\n",[82,158272,158273,158275,158278,158280,158282],{"class":84,"line":404},[82,158274,407],{"class":88},[82,158276,158277],{"class":92},"(age ",[82,158279,2249],{"class":112},[82,158281,27703],{"class":88},[82,158283,119],{"class":92},[19,158285,158286],{},"输入得到的内容永远是字符串：",[73,158288,158290],{"className":75,"code":158289,"language":77,"meta":78,"style":78},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[32,158291,158292,158308],{"__ignoreMap":78},[82,158293,158294,158297,158299,158301,158303,158306],{"class":84,"line":85},[82,158295,158296],{"class":92},"num ",[82,158298,113],{"class":112},[82,158300,63163],{"class":88},[82,158302,93],{"class":92},[82,158304,158305],{"class":96},"\"请输入数字:\"",[82,158307,119],{"class":92},[82,158309,158310,158312,158314,158316,158319],{"class":84,"line":157},[82,158311,407],{"class":88},[82,158313,93],{"class":92},[82,158315,105658],{"class":88},[82,158317,158318],{"class":92},"(num))  ",[82,158320,158321],{"class":2828},"# str\n",[19,158323,158324],{},"如果要做数学运算，必须转换：",[73,158326,158328],{"className":75,"code":158327,"language":77,"meta":78,"style":78},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[32,158329,158330,158348],{"__ignoreMap":78},[82,158331,158332,158334,158336,158338,158340,158342,158344,158346],{"class":84,"line":85},[82,158333,158296],{"class":92},[82,158335,113],{"class":112},[82,158337,4982],{"class":88},[82,158339,93],{"class":92},[82,158341,56381],{"class":88},[82,158343,93],{"class":92},[82,158345,158305],{"class":96},[82,158347,33074],{"class":92},[82,158349,158350,158352,158354,158356,158358],{"class":84,"line":157},[82,158351,407],{"class":88},[82,158353,48183],{"class":92},[82,158355,2249],{"class":112},[82,158357,4638],{"class":88},[82,158359,119],{"class":92},[19,158361,158362],{},"常见错误：",[73,158364,158366],{"className":75,"code":158365,"language":77,"meta":78,"style":78},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[32,158367,158368,158381],{"__ignoreMap":78},[82,158369,158370,158372,158374,158376,158378],{"class":84,"line":85},[82,158371,2776],{"class":88},[82,158373,93],{"class":92},[82,158375,158221],{"class":96},[82,158377,158170],{"class":92},[82,158379,158380],{"class":2828},"# 错误\n",[82,158382,158383,158385,158387,158390,158393],{"class":84,"line":157},[82,158384,2776],{"class":88},[82,158386,93],{"class":92},[82,158388,158389],{"class":96},"\"abc\"",[82,158391,158392],{"class":92},")    ",[82,158394,158380],{"class":2828},[19,158396,158397],{},"正确写法：",[73,158399,158401],{"className":75,"code":158400,"language":77,"meta":78,"style":78},"num = float(\"3.14\")\n",[32,158402,158403],{"__ignoreMap":78},[82,158404,158405,158407,158409,158411,158413,158415],{"class":84,"line":85},[82,158406,158296],{"class":92},[82,158408,113],{"class":112},[82,158410,112343],{"class":88},[82,158412,93],{"class":92},[82,158414,158221],{"class":96},[82,158416,119],{"class":92},[14,158418,158420],{"id":158419},"_27-运算符","2.7 运算符",[65,158422,158424],{"id":158423},"_271-算术运算符","2.7.1 算术运算符",[278,158426,158427,158438],{},[281,158428,158429],{},[284,158430,158431,158434,158436],{},[287,158432,158433],{},"运算符",[287,158435,292],{},[287,158437,30074],{},[294,158439,158440,158454,158468,158482,158496,158510,158524],{},[284,158441,158442,158446,158449],{},[299,158443,158444],{},[32,158445,2249],{},[299,158447,158448],{},"加法",[299,158450,158451],{},[32,158452,158453],{},"1 + 2",[284,158455,158456,158460,158463],{},[299,158457,158458],{},[32,158459,3288],{},[299,158461,158462],{},"减法",[299,158464,158465],{},[32,158466,158467],{},"5 - 3",[284,158469,158470,158474,158477],{},[299,158471,158472],{},[32,158473,3212],{},[299,158475,158476],{},"乘法",[299,158478,158479],{},[32,158480,158481],{},"2 * 3",[284,158483,158484,158488,158491],{},[299,158485,158486],{},[32,158487,1147],{},[299,158489,158490],{},"除法，结果是浮点数",[299,158492,158493],{},[32,158494,158495],{},"5 \u002F 2",[284,158497,158498,158502,158505],{},[299,158499,158500],{},[32,158501,35897],{},[299,158503,158504],{},"整除",[299,158506,158507],{},[32,158508,158509],{},"5 \u002F\u002F 2",[284,158511,158512,158516,158519],{},[299,158513,158514],{},[32,158515,3086],{},[299,158517,158518],{},"取余",[299,158520,158521],{},[32,158522,158523],{},"5 % 2",[284,158525,158526,158530,158533],{},[299,158527,158528],{},[32,158529,13251],{},[299,158531,158532],{},"幂运算",[299,158534,158535],{},[32,158536,158537],{},"2 ** 3",[19,158539,17721],{},[73,158541,158543],{"className":75,"code":158542,"language":77,"meta":78,"style":78},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[32,158544,158545,158563,158580,158597],{"__ignoreMap":78},[82,158546,158547,158549,158551,158553,158556,158558,158560],{"class":84,"line":85},[82,158548,407],{"class":88},[82,158550,93],{"class":92},[82,158552,3077],{"class":88},[82,158554,158555],{"class":112}," \u002F",[82,158557,17341],{"class":88},[82,158559,158170],{"class":92},[82,158561,158562],{"class":2828},"# 2.5\n",[82,158564,158565,158567,158569,158571,158574,158576,158578],{"class":84,"line":157},[82,158566,407],{"class":88},[82,158568,93],{"class":92},[82,158570,3077],{"class":88},[82,158572,158573],{"class":112}," \u002F\u002F",[82,158575,17341],{"class":88},[82,158577,48372],{"class":92},[82,158579,158173],{"class":2828},[82,158581,158582,158584,158586,158588,158591,158593,158595],{"class":84,"line":404},[82,158583,407],{"class":88},[82,158585,93],{"class":92},[82,158587,3077],{"class":88},[82,158589,158590],{"class":112}," %",[82,158592,17341],{"class":88},[82,158594,158170],{"class":92},[82,158596,158190],{"class":2828},[82,158598,158599,158601,158603,158605,158608,158610,158612],{"class":84,"line":413},[82,158600,407],{"class":88},[82,158602,93],{"class":92},[82,158604,1425],{"class":88},[82,158606,158607],{"class":112}," **",[82,158609,80624],{"class":88},[82,158611,48372],{"class":92},[82,158613,158614],{"class":2828},"# 8\n",[65,158616,158618],{"id":158617},"_272-赋值运算符","2.7.2 赋值运算符",[73,158620,158622],{"className":75,"code":158621,"language":77,"meta":78,"style":78},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[32,158623,158624,158632,158640,158648,158656],{"__ignoreMap":78},[82,158625,158626,158628,158630],{"class":84,"line":85},[82,158627,158296],{"class":92},[82,158629,113],{"class":112},[82,158631,60986],{"class":88},[82,158633,158634,158636,158638],{"class":84,"line":157},[82,158635,158296],{"class":92},[82,158637,12068],{"class":112},[82,158639,56987],{"class":88},[82,158641,158642,158644,158646],{"class":84,"line":404},[82,158643,158296],{"class":92},[82,158645,152778],{"class":112},[82,158647,50287],{"class":88},[82,158649,158650,158652,158654],{"class":84,"line":413},[82,158651,158296],{"class":92},[82,158653,139692],{"class":112},[82,158655,122581],{"class":88},[82,158657,158658,158660,158663],{"class":84,"line":508},[82,158659,158296],{"class":92},[82,158661,158662],{"class":112},"\u002F=",[82,158664,50287],{"class":88},[19,158666,158667],{},"等价关系：",[73,158669,158671],{"className":75,"code":158670,"language":77,"meta":78,"style":78},"num += 1\nnum = num + 1\n",[32,158672,158673,158681],{"__ignoreMap":78},[82,158674,158675,158677,158679],{"class":84,"line":85},[82,158676,158296],{"class":92},[82,158678,12068],{"class":112},[82,158680,2252],{"class":88},[82,158682,158683,158685,158687,158690,158692],{"class":84,"line":157},[82,158684,158296],{"class":92},[82,158686,113],{"class":112},[82,158688,158689],{"class":92}," num ",[82,158691,2249],{"class":112},[82,158693,2252],{"class":88},[19,158695,158696,158697,103569,158700,2611],{},"Python 没有 ",[32,158698,158699],{},"num++",[32,158701,158702],{},"num--",[65,158704,158706],{"id":158705},"_273-比较运算符","2.7.3 比较运算符",[19,158708,158709],{},"比较运算结果是布尔值。",[73,158711,158713],{"className":75,"code":158712,"language":77,"meta":78,"style":78},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[32,158714,158715,158729,158744,158758],{"__ignoreMap":78},[82,158716,158717,158719,158721,158723,158725,158727],{"class":84,"line":85},[82,158718,407],{"class":88},[82,158720,93],{"class":92},[82,158722,440],{"class":88},[82,158724,28804],{"class":112},[82,158726,4748],{"class":88},[82,158728,119],{"class":92},[82,158730,158731,158733,158735,158737,158740,158742],{"class":84,"line":157},[82,158732,407],{"class":88},[82,158734,93],{"class":92},[82,158736,440],{"class":88},[82,158738,158739],{"class":112}," >=",[82,158741,4638],{"class":88},[82,158743,119],{"class":92},[82,158745,158746,158748,158750,158752,158754,158756],{"class":84,"line":404},[82,158747,407],{"class":88},[82,158749,93],{"class":92},[82,158751,440],{"class":88},[82,158753,104110],{"class":112},[82,158755,4683],{"class":88},[82,158757,119],{"class":92},[82,158759,158760,158762,158764,158766,158769,158771],{"class":84,"line":413},[82,158761,407],{"class":88},[82,158763,93],{"class":92},[82,158765,440],{"class":88},[82,158767,158768],{"class":112}," !=",[82,158770,4683],{"class":88},[82,158772,119],{"class":92},[19,158774,158775,158776,158778,158779,2611],{},"注意：判断相等用 ",[32,158777,5548],{},"，赋值用 ",[32,158780,113],{},[73,158782,158784],{"className":75,"code":158783,"language":77,"meta":78,"style":78},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[32,158785,158786,158798],{"__ignoreMap":78},[82,158787,158788,158790,158792,158795],{"class":84,"line":85},[82,158789,149088],{"class":92},[82,158791,113],{"class":112},[82,158793,158794],{"class":88}," 18",[82,158796,158797],{"class":2828},"       # 赋值\n",[82,158799,158800,158802,158804,158806],{"class":84,"line":157},[82,158801,149088],{"class":92},[82,158803,5548],{"class":112},[82,158805,158794],{"class":88},[82,158807,158808],{"class":2828},"      # 判断是否相等\n",[65,158810,158812],{"id":158811},"_274-逻辑运算符","2.7.4 逻辑运算符",[278,158814,158815,158823],{},[281,158816,158817],{},[284,158818,158819,158821],{},[287,158820,158433],{},[287,158822,292],{},[294,158824,158825,158834,158843],{},[284,158826,158827,158831],{},[299,158828,158829],{},[32,158830,33039],{},[299,158832,158833],{},"并且",[284,158835,158836,158840],{},[299,158837,158838],{},[32,158839,117635],{},[299,158841,158842],{},"或者",[284,158844,158845,158850],{},[299,158846,158847],{},[32,158848,158849],{},"not",[299,158851,158852],{},"取反",[73,158854,158856],{"className":75,"code":158855,"language":77,"meta":78,"style":78},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[32,158857,158858,158866,158875,158879,158894,158908],{"__ignoreMap":78},[82,158859,158860,158862,158864],{"class":84,"line":85},[82,158861,149088],{"class":92},[82,158863,113],{"class":112},[82,158865,90616],{"class":88},[82,158867,158868,158871,158873],{"class":84,"line":157},[82,158869,158870],{"class":92},"has_ticket ",[82,158872,113],{"class":112},[82,158874,156111],{"class":88},[82,158876,158877],{"class":84,"line":404},[82,158878,486],{"emptyLinePlaceholder":485},[82,158880,158881,158883,158885,158887,158889,158891],{"class":84,"line":413},[82,158882,407],{"class":88},[82,158884,158277],{"class":92},[82,158886,4313],{"class":112},[82,158888,158794],{"class":88},[82,158890,122974],{"class":112},[82,158892,158893],{"class":92}," has_ticket)\n",[82,158895,158896,158898,158900,158902,158904,158906],{"class":84,"line":508},[82,158897,407],{"class":88},[82,158899,158277],{"class":92},[82,158901,3659],{"class":112},[82,158903,158794],{"class":88},[82,158905,116746],{"class":112},[82,158907,158893],{"class":92},[82,158909,158910,158912,158914,158916],{"class":84,"line":513},[82,158911,407],{"class":88},[82,158913,93],{"class":92},[82,158915,158849],{"class":112},[82,158917,158893],{"class":92},[14,158919,158921],{"id":158920},"_28-字符串定义","2.8 字符串定义",[19,158923,158924],{},"三种常见写法：",[73,158926,158928],{"className":75,"code":158927,"language":77,"meta":78,"style":78},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[32,158929,158930,158940,158949,158958],{"__ignoreMap":78},[82,158931,158932,158935,158937],{"class":84,"line":85},[82,158933,158934],{"class":92},"name1 ",[82,158936,113],{"class":112},[82,158938,158939],{"class":96}," '小明'\n",[82,158941,158942,158945,158947],{"class":84,"line":157},[82,158943,158944],{"class":92},"name2 ",[82,158946,113],{"class":112},[82,158948,151881],{"class":96},[82,158950,158951,158953,158955],{"class":84,"line":404},[82,158952,1402],{"class":92},[82,158954,113],{"class":112},[82,158956,158957],{"class":96}," \"\"\"这是多行字符串\n",[82,158959,158960],{"class":84,"line":413},[82,158961,158962],{"class":96},"可以换行\"\"\"\n",[19,158964,158965],{},"字符串中包含引号：",[73,158967,158969],{"className":75,"code":158968,"language":77,"meta":78,"style":78},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[32,158970,158971,158981,158991],{"__ignoreMap":78},[82,158972,158973,158976,158978],{"class":84,"line":85},[82,158974,158975],{"class":92},"msg ",[82,158977,113],{"class":112},[82,158979,158980],{"class":96}," \"他说:'你好'\"\n",[82,158982,158983,158986,158988],{"class":84,"line":157},[82,158984,158985],{"class":92},"msg2 ",[82,158987,113],{"class":112},[82,158989,158990],{"class":96}," '他说:\"你好\"'\n",[82,158992,158993,158996,158998,159001,159003,159006,159008],{"class":84,"line":404},[82,158994,158995],{"class":92},"msg3 ",[82,158997,113],{"class":112},[82,158999,159000],{"class":96}," \"他说:",[82,159002,2209],{"class":88},[82,159004,159005],{"class":96},"你好",[82,159007,2209],{"class":88},[82,159009,239],{"class":96},[19,159011,159012],{},"常见转义字符：",[278,159014,159015,159024],{},[281,159016,159017],{},[284,159018,159019,159022],{},[287,159020,159021],{},"写法",[287,159023,103251],{},[294,159025,159026,159035,159044,159054,159063],{},[284,159027,159028,159032],{},[299,159029,159030],{},[32,159031,811],{},[299,159033,159034],{},"换行",[284,159036,159037,159041],{},[299,159038,159039],{},[32,159040,3849],{},[299,159042,159043],{},"制表符",[284,159045,159046,159051],{},[299,159047,159048],{},[32,159049,159050],{},"\\\\",[299,159052,159053],{},"反斜杠",[284,159055,159056,159060],{},[299,159057,159058],{},[32,159059,2209],{},[299,159061,159062],{},"双引号",[284,159064,159065,159070],{},[299,159066,159067],{},[32,159068,159069],{},"\\'",[299,159071,159072],{},"单引号",[14,159074,159076],{"id":159075},"_29-字符串拼接","2.9 字符串拼接",[73,159078,159080],{"className":75,"code":159079,"language":77,"meta":78,"style":78},"name = \"小明\"\nprint(\"你好，\" + name)\n",[32,159081,159082,159090],{"__ignoreMap":78},[82,159083,159084,159086,159088],{"class":84,"line":85},[82,159085,149078],{"class":92},[82,159087,113],{"class":112},[82,159089,151881],{"class":96},[82,159091,159092,159094,159096,159099,159101],{"class":84,"line":157},[82,159093,407],{"class":88},[82,159095,93],{"class":92},[82,159097,159098],{"class":96},"\"你好，\"",[82,159100,48130],{"class":112},[82,159102,159103],{"class":92}," name)\n",[19,159105,159106],{},"字符串只能和字符串拼接：",[73,159108,159110],{"className":75,"code":159109,"language":77,"meta":78,"style":78},"age = 18\nprint(\"年龄:\" + str(age))\n",[32,159111,159112,159120],{"__ignoreMap":78},[82,159113,159114,159116,159118],{"class":84,"line":85},[82,159115,149088],{"class":92},[82,159117,113],{"class":112},[82,159119,149093],{"class":88},[82,159121,159122,159124,159126,159128,159130,159132],{"class":84,"line":157},[82,159123,407],{"class":88},[82,159125,93],{"class":92},[82,159127,149059],{"class":96},[82,159129,48130],{"class":112},[82,159131,76473],{"class":88},[82,159133,159134],{"class":92},"(age))\n",[19,159136,159137],{},"更推荐使用格式化字符串。",[14,159139,159141],{"id":159140},"_210-字符串格式化","2.10 字符串格式化",[65,159143,159145],{"id":159144},"_2101-百分号格式化","2.10.1 百分号格式化",[73,159147,159149],{"className":75,"code":159148,"language":77,"meta":78,"style":78},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[32,159150,159151,159159,159167,159176,159180],{"__ignoreMap":78},[82,159152,159153,159155,159157],{"class":84,"line":85},[82,159154,149078],{"class":92},[82,159156,113],{"class":112},[82,159158,151881],{"class":96},[82,159160,159161,159163,159165],{"class":84,"line":157},[82,159162,149088],{"class":92},[82,159164,113],{"class":112},[82,159166,149093],{"class":88},[82,159168,159169,159171,159173],{"class":84,"line":404},[82,159170,157867],{"class":92},[82,159172,113],{"class":112},[82,159174,159175],{"class":88}," 95.5\n",[82,159177,159178],{"class":84,"line":413},[82,159179,486],{"emptyLinePlaceholder":485},[82,159181,159182,159184,159186,159189,159192,159195,159198,159201,159204,159206,159208],{"class":84,"line":508},[82,159183,407],{"class":88},[82,159185,93],{"class":92},[82,159187,159188],{"class":96},"\"姓名:",[82,159190,159191],{"class":88},"%s",[82,159193,159194],{"class":96}," 年龄:",[82,159196,159197],{"class":88},"%d",[82,159199,159200],{"class":96}," 分数:",[82,159202,159203],{"class":88},"%.1f",[82,159205,216],{"class":96},[82,159207,158590],{"class":112},[82,159209,159210],{"class":92}," (name, age, score))\n",[19,159212,159213],{},"常用占位符：",[278,159215,159216,159225],{},[281,159217,159218],{},[284,159219,159220,159223],{},[287,159221,159222],{},"占位符",[287,159224,292],{},[294,159226,159227,159235,159243],{},[284,159228,159229,159233],{},[299,159230,159231],{},[32,159232,159191],{},[299,159234,157733],{},[284,159236,159237,159241],{},[299,159238,159239],{},[32,159240,159197],{},[299,159242,157711],{},[284,159244,159245,159250],{},[299,159246,159247],{},[32,159248,159249],{},"%f",[299,159251,157722],{},[19,159253,159254],{},"精度控制：",[73,159256,159258],{"className":75,"code":159257,"language":77,"meta":78,"style":78},"price = 12.3456\nprint(\"%.2f\" % price)\n",[32,159259,159260,159269],{"__ignoreMap":78},[82,159261,159262,159264,159266],{"class":84,"line":85},[82,159263,149223],{"class":92},[82,159265,113],{"class":112},[82,159267,159268],{"class":88}," 12.3456\n",[82,159270,159271,159273,159275,159277,159280,159282,159284],{"class":84,"line":157},[82,159272,407],{"class":88},[82,159274,93],{"class":92},[82,159276,216],{"class":96},[82,159278,159279],{"class":88},"%.2f",[82,159281,216],{"class":96},[82,159283,158590],{"class":112},[82,159285,159286],{"class":92}," price)\n",[65,159288,159290],{"id":159289},"_2102-format方法","2.10.2 format方法",[73,159292,159294],{"className":75,"code":159293,"language":77,"meta":78,"style":78},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[32,159295,159296,159304,159312,159316,159335,159355],{"__ignoreMap":78},[82,159297,159298,159300,159302],{"class":84,"line":85},[82,159299,149078],{"class":92},[82,159301,113],{"class":112},[82,159303,151881],{"class":96},[82,159305,159306,159308,159310],{"class":84,"line":157},[82,159307,149088],{"class":92},[82,159309,113],{"class":112},[82,159311,149093],{"class":88},[82,159313,159314],{"class":84,"line":404},[82,159315,486],{"emptyLinePlaceholder":485},[82,159317,159318,159320,159322,159324,159326,159328,159330,159332],{"class":84,"line":413},[82,159319,407],{"class":88},[82,159321,93],{"class":92},[82,159323,159188],{"class":96},[82,159325,35028],{"class":88},[82,159327,159194],{"class":96},[82,159329,35028],{"class":88},[82,159331,216],{"class":96},[82,159333,159334],{"class":92},".format(name, age))\n",[82,159336,159337,159339,159341,159343,159346,159348,159351,159353],{"class":84,"line":508},[82,159338,407],{"class":88},[82,159340,93],{"class":92},[82,159342,159188],{"class":96},[82,159344,159345],{"class":88},"{0}",[82,159347,159194],{"class":96},[82,159349,159350],{"class":88},"{1}",[82,159352,216],{"class":96},[82,159354,159334],{"class":92},[82,159356,159357,159359,159361,159363,159366,159368,159371,159373,159376,159378,159380,159383,159385,159387],{"class":84,"line":513},[82,159358,407],{"class":88},[82,159360,93],{"class":92},[82,159362,159188],{"class":96},[82,159364,159365],{"class":88},"{name}",[82,159367,159194],{"class":96},[82,159369,159370],{"class":88},"{age}",[82,159372,216],{"class":96},[82,159374,159375],{"class":92},".format(",[82,159377,82364],{"class":108},[82,159379,113],{"class":112},[82,159381,159382],{"class":92},"name, ",[82,159384,72777],{"class":108},[82,159386,113],{"class":112},[82,159388,159389],{"class":92},"age))\n",[65,159391,159393],{"id":159392},"_2103-f-string","2.10.3 f-string",[19,159395,159396],{},"推荐写法：",[73,159398,159400],{"className":75,"code":159399,"language":77,"meta":78,"style":78},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[32,159401,159402,159410,159418,159426,159430],{"__ignoreMap":78},[82,159403,159404,159406,159408],{"class":84,"line":85},[82,159405,149078],{"class":92},[82,159407,113],{"class":112},[82,159409,151881],{"class":96},[82,159411,159412,159414,159416],{"class":84,"line":157},[82,159413,149088],{"class":92},[82,159415,113],{"class":112},[82,159417,149093],{"class":88},[82,159419,159420,159422,159424],{"class":84,"line":404},[82,159421,157867],{"class":92},[82,159423,113],{"class":112},[82,159425,159175],{"class":88},[82,159427,159428],{"class":84,"line":413},[82,159429,486],{"emptyLinePlaceholder":485},[82,159431,159432,159434,159436,159438,159440,159442,159444,159446,159448,159450,159452,159454,159456,159458,159461,159464,159466,159468],{"class":84,"line":508},[82,159433,407],{"class":88},[82,159435,93],{"class":92},[82,159437,2822],{"class":112},[82,159439,159188],{"class":96},[82,159441,3645],{"class":88},[82,159443,82364],{"class":92},[82,159445,3695],{"class":88},[82,159447,159194],{"class":96},[82,159449,3645],{"class":88},[82,159451,72777],{"class":92},[82,159453,3695],{"class":88},[82,159455,159200],{"class":96},[82,159457,3645],{"class":88},[82,159459,159460],{"class":92},"score",[82,159462,159463],{"class":112},":.1f",[82,159465,3695],{"class":88},[82,159467,216],{"class":96},[82,159469,119],{"class":92},[19,159471,159472],{},"表达式也可以放进去：",[73,159474,159476],{"className":75,"code":159475,"language":77,"meta":78,"style":78},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[32,159477,159478,159486,159494],{"__ignoreMap":78},[82,159479,159480,159482,159484],{"class":84,"line":85},[82,159481,149223],{"class":92},[82,159483,113],{"class":112},[82,159485,149228],{"class":88},[82,159487,159488,159490,159492],{"class":84,"line":157},[82,159489,149233],{"class":92},[82,159491,113],{"class":112},[82,159493,56987],{"class":88},[82,159495,159496,159498,159500,159502,159505,159507,159509,159511,159514,159516,159519],{"class":84,"line":404},[82,159497,407],{"class":88},[82,159499,93],{"class":92},[82,159501,2822],{"class":112},[82,159503,159504],{"class":96},"\"总价:",[82,159506,3645],{"class":88},[82,159508,149223],{"class":92},[82,159510,3212],{"class":112},[82,159512,159513],{"class":92}," count",[82,159515,3695],{"class":88},[82,159517,159518],{"class":96},"元\"",[82,159520,119],{"class":92},[14,159522,159524],{"id":159523},"_211-input输入","2.11 input输入",[19,159526,159527,159530],{},[32,159528,159529],{},"input()"," 会暂停程序，等待用户输入。",[73,159532,159534],{"className":75,"code":159533,"language":77,"meta":78,"style":78},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[32,159535,159536,159550],{"__ignoreMap":78},[82,159537,159538,159540,159542,159544,159546,159548],{"class":84,"line":85},[82,159539,149078],{"class":92},[82,159541,113],{"class":112},[82,159543,63163],{"class":88},[82,159545,93],{"class":92},[82,159547,154893],{"class":96},[82,159549,119],{"class":92},[82,159551,159552,159554,159556,159558,159561,159563,159565,159567,159569],{"class":84,"line":157},[82,159553,407],{"class":88},[82,159555,93],{"class":92},[82,159557,2822],{"class":112},[82,159559,159560],{"class":96},"\"你好，",[82,159562,3645],{"class":88},[82,159564,82364],{"class":92},[82,159566,3695],{"class":88},[82,159568,216],{"class":96},[82,159570,119],{"class":92},[19,159572,159573],{},"输入整数：",[73,159575,159577],{"className":75,"code":159576,"language":77,"meta":78,"style":78},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[32,159578,159579,159597],{"__ignoreMap":78},[82,159580,159581,159583,159585,159587,159589,159591,159593,159595],{"class":84,"line":85},[82,159582,149088],{"class":92},[82,159584,113],{"class":112},[82,159586,4982],{"class":88},[82,159588,93],{"class":92},[82,159590,56381],{"class":88},[82,159592,93],{"class":92},[82,159594,154908],{"class":96},[82,159596,33074],{"class":92},[82,159598,159599,159601,159603,159605,159608,159610,159612,159614,159617,159619],{"class":84,"line":157},[82,159600,407],{"class":88},[82,159602,93],{"class":92},[82,159604,2822],{"class":112},[82,159606,159607],{"class":96},"\"明年你",[82,159609,3645],{"class":88},[82,159611,149088],{"class":92},[82,159613,2249],{"class":112},[82,159615,159616],{"class":88}," 1}",[82,159618,151932],{"class":96},[82,159620,119],{"class":92},[19,159622,159623],{},"输入小数：",[73,159625,159627],{"className":75,"code":159626,"language":77,"meta":78,"style":78},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[32,159628,159629,159648],{"__ignoreMap":78},[82,159630,159631,159633,159635,159637,159639,159641,159643,159646],{"class":84,"line":85},[82,159632,157840],{"class":92},[82,159634,113],{"class":112},[82,159636,112343],{"class":88},[82,159638,93],{"class":92},[82,159640,56381],{"class":88},[82,159642,93],{"class":92},[82,159644,159645],{"class":96},"\"请输入身高:\"",[82,159647,33074],{"class":92},[82,159649,159650,159652,159654,159656,159659,159661,159663,159666,159668,159671],{"class":84,"line":157},[82,159651,407],{"class":88},[82,159653,93],{"class":92},[82,159655,2822],{"class":112},[82,159657,159658],{"class":96},"\"身高:",[82,159660,3645],{"class":88},[82,159662,27566],{"class":92},[82,159664,159665],{"class":112},":.2f",[82,159667,3695],{"class":88},[82,159669,159670],{"class":96},"米\"",[82,159672,119],{"class":92},[14,159674,159676],{"id":159675},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159678,2091],{},[26,159680,159681,159684,159687,159690],{},[29,159682,159683],{},"输入商品单价。",[29,159685,159686],{},"输入购买数量。",[29,159688,159689],{},"输入折扣，例如 0.8 表示八折。",[29,159691,159692],{},"输出最终金额，保留两位小数。",[19,159694,2105],{},[73,159696,159698],{"className":75,"code":159697,"language":77,"meta":78,"style":78},"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",[32,159699,159700,159719,159738,159758,159762,159782,159786,159809,159830,159852],{"__ignoreMap":78},[82,159701,159702,159704,159706,159708,159710,159712,159714,159717],{"class":84,"line":85},[82,159703,149223],{"class":92},[82,159705,113],{"class":112},[82,159707,112343],{"class":88},[82,159709,93],{"class":92},[82,159711,56381],{"class":88},[82,159713,93],{"class":92},[82,159715,159716],{"class":96},"\"请输入商品单价:\"",[82,159718,33074],{"class":92},[82,159720,159721,159723,159725,159727,159729,159731,159733,159736],{"class":84,"line":157},[82,159722,149233],{"class":92},[82,159724,113],{"class":112},[82,159726,4982],{"class":88},[82,159728,93],{"class":92},[82,159730,56381],{"class":88},[82,159732,93],{"class":92},[82,159734,159735],{"class":96},"\"请输入购买数量:\"",[82,159737,33074],{"class":92},[82,159739,159740,159743,159745,159747,159749,159751,159753,159756],{"class":84,"line":404},[82,159741,159742],{"class":92},"discount ",[82,159744,113],{"class":112},[82,159746,112343],{"class":88},[82,159748,93],{"class":92},[82,159750,56381],{"class":88},[82,159752,93],{"class":92},[82,159754,159755],{"class":96},"\"请输入折扣:\"",[82,159757,33074],{"class":92},[82,159759,159760],{"class":84,"line":413},[82,159761,486],{"emptyLinePlaceholder":485},[82,159763,159764,159767,159769,159772,159774,159777,159779],{"class":84,"line":508},[82,159765,159766],{"class":92},"total ",[82,159768,113],{"class":112},[82,159770,159771],{"class":92}," price ",[82,159773,3212],{"class":112},[82,159775,159776],{"class":92}," count ",[82,159778,3212],{"class":112},[82,159780,159781],{"class":92}," discount\n",[82,159783,159784],{"class":84,"line":513},[82,159785,486],{"emptyLinePlaceholder":485},[82,159787,159788,159790,159792,159794,159797,159799,159801,159803,159805,159807],{"class":84,"line":1388},[82,159789,407],{"class":88},[82,159791,93],{"class":92},[82,159793,2822],{"class":112},[82,159795,159796],{"class":96},"\"商品单价:",[82,159798,3645],{"class":88},[82,159800,82369],{"class":92},[82,159802,159665],{"class":112},[82,159804,3695],{"class":88},[82,159806,216],{"class":96},[82,159808,119],{"class":92},[82,159810,159811,159813,159815,159817,159820,159822,159824,159826,159828],{"class":84,"line":1394},[82,159812,407],{"class":88},[82,159814,93],{"class":92},[82,159816,2822],{"class":112},[82,159818,159819],{"class":96},"\"购买数量:",[82,159821,3645],{"class":88},[82,159823,86988],{"class":92},[82,159825,3695],{"class":88},[82,159827,216],{"class":96},[82,159829,119],{"class":92},[82,159831,159832,159834,159836,159838,159841,159843,159846,159848,159850],{"class":84,"line":1399},[82,159833,407],{"class":88},[82,159835,93],{"class":92},[82,159837,2822],{"class":112},[82,159839,159840],{"class":96},"\"折扣:",[82,159842,3645],{"class":88},[82,159844,159845],{"class":92},"discount",[82,159847,3695],{"class":88},[82,159849,216],{"class":96},[82,159851,119],{"class":92},[82,159853,159854,159856,159858,159860,159863,159865,159868,159870,159872,159874],{"class":84,"line":1430},[82,159855,407],{"class":88},[82,159857,93],{"class":92},[82,159859,2822],{"class":112},[82,159861,159862],{"class":96},"\"应付金额:",[82,159864,3645],{"class":88},[82,159866,159867],{"class":92},"total",[82,159869,159665],{"class":112},[82,159871,3695],{"class":88},[82,159873,159518],{"class":96},[82,159875,119],{"class":92},[14,159877,159879],{"id":159878},"_213-易错点","2.13 易错点",[26,159881,159882,159887,159893,159901,159904],{},[29,159883,159884,159886],{},[32,159885,159529],{}," 的结果是字符串，做运算前要转换。",[29,159888,159889,159890,2611],{},"字符串拼接时，数字要先 ",[32,159891,159892],{},"str()",[29,159894,159895,159897,159898,159900],{},[32,159896,113],{}," 是赋值，",[32,159899,5548],{}," 是比较。",[29,159902,159903],{},"Python 没有自增自减运算符。",[29,159905,159906],{},"浮点数计算可能有精度误差：",[73,159908,159910],{"className":75,"code":159909,"language":77,"meta":78,"style":78},"print(0.1 + 0.2)\n",[32,159911,159912],{"__ignoreMap":78},[82,159913,159914,159916,159918,159920,159922,159925],{"class":84,"line":85},[82,159915,407],{"class":88},[82,159917,93],{"class":92},[82,159919,88764],{"class":88},[82,159921,48130],{"class":112},[82,159923,159924],{"class":88}," 0.2",[82,159926,119],{"class":92},[19,159928,159929,159930,159933],{},"金额计算如果要求严格，可以后续学习 ",[32,159931,159932],{},"decimal"," 模块。",[14,159935,159937],{"id":159936},"_214-本章练习","2.14 本章练习",[26,159939,159940,159943,159946,159949,159952],{},[29,159941,159942],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,159944,159945],{},"输入圆的半径，计算面积，保留两位小数。",[29,159947,159948],{},"输入工资和奖金，计算总收入。",[29,159950,159951],{},"输入摄氏温度，转换为华氏温度。",[29,159953,159954],{},"写一个 BMI 计算程序：",[73,159956,159959],{"className":159957,"code":159958,"language":7780,"meta":78},[7778],"BMI = 体重kg \u002F 身高m ** 2\n",[32,159960,159958],{"__ignoreMap":78},[2671,159962,159963],{},"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":78,"searchDepth":157,"depth":157,"links":159965},[159966,159967,159968,159969,159970,159971,159972,159978,159979,159980,159985,159986,159987,159988],{"id":157530,"depth":157,"text":157531},{"id":157639,"depth":157,"text":157640},{"id":157810,"depth":157,"text":157811},{"id":157887,"depth":157,"text":157888},{"id":53294,"depth":157,"text":53295},{"id":158193,"depth":157,"text":158194},{"id":158419,"depth":157,"text":158420,"children":159973},[159974,159975,159976,159977],{"id":158423,"depth":404,"text":158424},{"id":158617,"depth":404,"text":158618},{"id":158705,"depth":404,"text":158706},{"id":158811,"depth":404,"text":158812},{"id":158920,"depth":157,"text":158921},{"id":159075,"depth":157,"text":159076},{"id":159140,"depth":157,"text":159141,"children":159981},[159982,159983,159984],{"id":159144,"depth":404,"text":159145},{"id":159289,"depth":404,"text":159290},{"id":159392,"depth":404,"text":159393},{"id":159523,"depth":157,"text":159524},{"id":159675,"depth":157,"text":159676},{"id":159878,"depth":157,"text":159879},{"id":159936,"depth":157,"text":159937},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157522,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159995,"title":159996,"body":159997,"description":2699,"extension":2700,"meta":161633,"navigation":485,"path":161634,"seo":161635,"stem":161636,"__hash__":161637},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159998,"toc":161614},[159999,160002,160006,160009,160024,160027,160055,160059,160109,160111,160127,160130,160156,160159,160163,160230,160233,160249,160253,160256,160374,160377,160384,160433,160439,160443,160446,160559,160562,160566,160570,160573,160623,160627,160630,160680,160684,160687,160725,160729,160732,160778,160781,160816,160820,160825,160828,160874,160876,160943,160947,160953,161064,161073,161077,161079,161090,161092,161258,161262,161264,161278,161280,161494,161498,161517,161534,161537,161583,161587,161611],[10,160000,159996],{"id":160001},"_3-判断语句",[14,160003,160005],{"id":160004},"_31-布尔值","3.1 布尔值",[19,160007,160008],{},"判断语句依赖布尔值：",[73,160010,160012],{"className":75,"code":160011,"language":77,"meta":78,"style":78},"True\nFalse\n",[32,160013,160014,160019],{"__ignoreMap":78},[82,160015,160016],{"class":84,"line":85},[82,160017,160018],{"class":88},"True\n",[82,160020,160021],{"class":84,"line":157},[82,160022,160023],{"class":88},"False\n",[19,160025,160026],{},"比较表达式会产生布尔值：",[73,160028,160030],{"className":75,"code":160029,"language":77,"meta":78,"style":78},"age = 18\nprint(age >= 18)  # True\n",[32,160031,160032,160040],{"__ignoreMap":78},[82,160033,160034,160036,160038],{"class":84,"line":85},[82,160035,149088],{"class":92},[82,160037,113],{"class":112},[82,160039,149093],{"class":88},[82,160041,160042,160044,160046,160048,160050,160052],{"class":84,"line":157},[82,160043,407],{"class":88},[82,160045,158277],{"class":92},[82,160047,4313],{"class":112},[82,160049,158794],{"class":88},[82,160051,48372],{"class":92},[82,160053,160054],{"class":2828},"# True\n",[14,160056,160058],{"id":160057},"_32-if基础语法","3.2 if基础语法",[73,160060,160062],{"className":75,"code":160061,"language":77,"meta":78,"style":78},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[32,160063,160064,160082,160086,160098],{"__ignoreMap":78},[82,160065,160066,160068,160070,160072,160074,160076,160078,160080],{"class":84,"line":85},[82,160067,149088],{"class":92},[82,160069,113],{"class":112},[82,160071,4982],{"class":88},[82,160073,93],{"class":92},[82,160075,56381],{"class":88},[82,160077,93],{"class":92},[82,160079,154908],{"class":96},[82,160081,33074],{"class":92},[82,160083,160084],{"class":84,"line":157},[82,160085,486],{"emptyLinePlaceholder":485},[82,160087,160088,160090,160092,160094,160096],{"class":84,"line":404},[82,160089,1237],{"class":112},[82,160091,18292],{"class":92},[82,160093,4313],{"class":112},[82,160095,158794],{"class":88},[82,160097,669],{"class":92},[82,160099,160100,160102,160104,160107],{"class":84,"line":413},[82,160101,611],{"class":88},[82,160103,93],{"class":92},[82,160105,160106],{"class":96},"\"可以进入网吧\"",[82,160108,119],{"class":92},[19,160110,11616],{},[26,160112,160113,160118,160121,160124],{},[29,160114,160115,160117],{},[32,160116,1237],{}," 后面是条件表达式。",[29,160119,160120],{},"条件后面必须写冒号。",[29,160122,160123],{},"条件成立时执行缩进代码块。",[29,160125,160126],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,160128,160129],{},"错误示例：",[73,160131,160133],{"className":75,"code":160132,"language":77,"meta":78,"style":78},"if age >= 18\n    print(\"可以进入\")\n",[32,160134,160135,160145],{"__ignoreMap":78},[82,160136,160137,160139,160141,160143],{"class":84,"line":85},[82,160138,1237],{"class":112},[82,160140,18292],{"class":92},[82,160142,4313],{"class":112},[82,160144,149093],{"class":88},[82,160146,160147,160149,160151,160154],{"class":84,"line":157},[82,160148,611],{"class":88},[82,160150,93],{"class":92},[82,160152,160153],{"class":96},"\"可以进入\"",[82,160155,119],{"class":92},[19,160157,160158],{},"缺少冒号。",[14,160160,160162],{"id":160161},"_33-if-else","3.3 if else",[73,160164,160166],{"className":75,"code":160165,"language":77,"meta":78,"style":78},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[32,160167,160168,160186,160190,160202,160213,160219],{"__ignoreMap":78},[82,160169,160170,160172,160174,160176,160178,160180,160182,160184],{"class":84,"line":85},[82,160171,149088],{"class":92},[82,160173,113],{"class":112},[82,160175,4982],{"class":88},[82,160177,93],{"class":92},[82,160179,56381],{"class":88},[82,160181,93],{"class":92},[82,160183,154908],{"class":96},[82,160185,33074],{"class":92},[82,160187,160188],{"class":84,"line":157},[82,160189,486],{"emptyLinePlaceholder":485},[82,160191,160192,160194,160196,160198,160200],{"class":84,"line":404},[82,160193,1237],{"class":112},[82,160195,18292],{"class":92},[82,160197,4313],{"class":112},[82,160199,158794],{"class":88},[82,160201,669],{"class":92},[82,160203,160204,160206,160208,160211],{"class":84,"line":413},[82,160205,611],{"class":88},[82,160207,93],{"class":92},[82,160209,160210],{"class":96},"\"成年人\"",[82,160212,119],{"class":92},[82,160214,160215,160217],{"class":84,"line":508},[82,160216,4304],{"class":112},[82,160218,669],{"class":92},[82,160220,160221,160223,160225,160228],{"class":84,"line":513},[82,160222,611],{"class":88},[82,160224,93],{"class":92},[82,160226,160227],{"class":96},"\"未成年人\"",[82,160229,119],{"class":92},[19,160231,160232],{},"执行逻辑：",[26,160234,160235,160241,160246],{},[29,160236,160237,160238,160240],{},"条件成立，执行 ",[32,160239,1237],{}," 代码块。",[29,160242,160243,160244,160240],{},"条件不成立，执行 ",[32,160245,4304],{},[29,160247,160248],{},"两个代码块只会执行其中一个。",[14,160250,160252],{"id":160251},"_34-if-elif-else","3.4 if elif else",[19,160254,160255],{},"多条件判断：",[73,160257,160259],{"className":75,"code":160258,"language":77,"meta":78,"style":78},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[32,160260,160261,160279,160283,160297,160308,160322,160333,160346,160357,160363],{"__ignoreMap":78},[82,160262,160263,160265,160267,160269,160271,160273,160275,160277],{"class":84,"line":85},[82,160264,157867],{"class":92},[82,160266,113],{"class":112},[82,160268,4982],{"class":88},[82,160270,93],{"class":92},[82,160272,56381],{"class":88},[82,160274,93],{"class":92},[82,160276,154923],{"class":96},[82,160278,33074],{"class":92},[82,160280,160281],{"class":84,"line":157},[82,160282,486],{"emptyLinePlaceholder":485},[82,160284,160285,160287,160290,160292,160295],{"class":84,"line":404},[82,160286,1237],{"class":112},[82,160288,160289],{"class":92}," score ",[82,160291,4313],{"class":112},[82,160293,160294],{"class":88}," 90",[82,160296,669],{"class":92},[82,160298,160299,160301,160303,160306],{"class":84,"line":413},[82,160300,611],{"class":88},[82,160302,93],{"class":92},[82,160304,160305],{"class":96},"\"优秀\"",[82,160307,119],{"class":92},[82,160309,160310,160313,160315,160317,160320],{"class":84,"line":508},[82,160311,160312],{"class":112},"elif",[82,160314,160289],{"class":92},[82,160316,4313],{"class":112},[82,160318,160319],{"class":88}," 80",[82,160321,669],{"class":92},[82,160323,160324,160326,160328,160331],{"class":84,"line":513},[82,160325,611],{"class":88},[82,160327,93],{"class":92},[82,160329,160330],{"class":96},"\"良好\"",[82,160332,119],{"class":92},[82,160334,160335,160337,160339,160341,160344],{"class":84,"line":1388},[82,160336,160312],{"class":112},[82,160338,160289],{"class":92},[82,160340,4313],{"class":112},[82,160342,160343],{"class":88}," 60",[82,160345,669],{"class":92},[82,160347,160348,160350,160352,160355],{"class":84,"line":1394},[82,160349,611],{"class":88},[82,160351,93],{"class":92},[82,160353,160354],{"class":96},"\"及格\"",[82,160356,119],{"class":92},[82,160358,160359,160361],{"class":84,"line":1399},[82,160360,4304],{"class":112},[82,160362,669],{"class":92},[82,160364,160365,160367,160369,160372],{"class":84,"line":1430},[82,160366,611],{"class":88},[82,160368,93],{"class":92},[82,160370,160371],{"class":96},"\"不及格\"",[82,160373,119],{"class":92},[19,160375,160376],{},"注意判断顺序很重要。",[19,160378,160379,160380,160383],{},"如果把 ",[32,160381,160382],{},"score >= 60"," 放在最前面：",[73,160385,160387],{"className":75,"code":160386,"language":77,"meta":78,"style":78},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[32,160388,160389,160401,160411,160423],{"__ignoreMap":78},[82,160390,160391,160393,160395,160397,160399],{"class":84,"line":85},[82,160392,1237],{"class":112},[82,160394,160289],{"class":92},[82,160396,4313],{"class":112},[82,160398,160343],{"class":88},[82,160400,669],{"class":92},[82,160402,160403,160405,160407,160409],{"class":84,"line":157},[82,160404,611],{"class":88},[82,160406,93],{"class":92},[82,160408,160354],{"class":96},[82,160410,119],{"class":92},[82,160412,160413,160415,160417,160419,160421],{"class":84,"line":404},[82,160414,160312],{"class":112},[82,160416,160289],{"class":92},[82,160418,4313],{"class":112},[82,160420,160294],{"class":88},[82,160422,669],{"class":92},[82,160424,160425,160427,160429,160431],{"class":84,"line":413},[82,160426,611],{"class":88},[82,160428,93],{"class":92},[82,160430,160305],{"class":96},[82,160432,119],{"class":92},[19,160434,160435,160436,160438],{},"成绩 95 会先满足 ",[32,160437,160382],{},"，后面的优秀分支就不会执行。",[14,160440,160442],{"id":160441},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160444,160445],{},"嵌套判断就是在一个判断内部再写判断。",[73,160447,160449],{"className":75,"code":160448,"language":77,"meta":78,"style":78},"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",[32,160450,160451,160469,160484,160488,160500,160514,160524,160531,160542,160548],{"__ignoreMap":78},[82,160452,160453,160455,160457,160459,160461,160463,160465,160467],{"class":84,"line":85},[82,160454,149088],{"class":92},[82,160456,113],{"class":112},[82,160458,4982],{"class":88},[82,160460,93],{"class":92},[82,160462,56381],{"class":88},[82,160464,93],{"class":92},[82,160466,154908],{"class":96},[82,160468,33074],{"class":92},[82,160470,160471,160473,160475,160477,160479,160482],{"class":84,"line":157},[82,160472,158870],{"class":92},[82,160474,113],{"class":112},[82,160476,63163],{"class":88},[82,160478,93],{"class":92},[82,160480,160481],{"class":96},"\"是否有票(y\u002Fn):\"",[82,160483,119],{"class":92},[82,160485,160486],{"class":84,"line":404},[82,160487,486],{"emptyLinePlaceholder":485},[82,160489,160490,160492,160494,160496,160498],{"class":84,"line":413},[82,160491,1237],{"class":112},[82,160493,18292],{"class":92},[82,160495,4313],{"class":112},[82,160497,158794],{"class":88},[82,160499,669],{"class":92},[82,160501,160502,160504,160507,160509,160512],{"class":84,"line":508},[82,160503,2219],{"class":112},[82,160505,160506],{"class":92}," has_ticket ",[82,160508,5548],{"class":112},[82,160510,160511],{"class":96}," \"y\"",[82,160513,669],{"class":92},[82,160515,160516,160518,160520,160522],{"class":84,"line":513},[82,160517,1901],{"class":88},[82,160519,93],{"class":92},[82,160521,160153],{"class":96},[82,160523,119],{"class":92},[82,160525,160526,160529],{"class":84,"line":1388},[82,160527,160528],{"class":112},"    else",[82,160530,669],{"class":92},[82,160532,160533,160535,160537,160540],{"class":84,"line":1394},[82,160534,1901],{"class":88},[82,160536,93],{"class":92},[82,160538,160539],{"class":96},"\"请先买票\"",[82,160541,119],{"class":92},[82,160543,160544,160546],{"class":84,"line":1399},[82,160545,4304],{"class":112},[82,160547,669],{"class":92},[82,160549,160550,160552,160554,160557],{"class":84,"line":1430},[82,160551,611],{"class":88},[82,160553,93],{"class":92},[82,160555,160556],{"class":96},"\"未成年人禁止进入\"",[82,160558,119],{"class":92},[19,160560,160561],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160563,160565],{"id":160564},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[65,160567,160569],{"id":160568},"_361-and","3.6.1 and",[19,160571,160572],{},"两个条件都成立才成立。",[73,160574,160576],{"className":75,"code":160575,"language":77,"meta":78,"style":78},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[32,160577,160578,160586,160594,160598,160613],{"__ignoreMap":78},[82,160579,160580,160582,160584],{"class":84,"line":85},[82,160581,149088],{"class":92},[82,160583,113],{"class":112},[82,160585,90616],{"class":88},[82,160587,160588,160590,160592],{"class":84,"line":157},[82,160589,158870],{"class":92},[82,160591,113],{"class":112},[82,160593,156111],{"class":88},[82,160595,160596],{"class":84,"line":404},[82,160597,486],{"emptyLinePlaceholder":485},[82,160599,160600,160602,160604,160606,160608,160610],{"class":84,"line":413},[82,160601,1237],{"class":112},[82,160603,18292],{"class":92},[82,160605,4313],{"class":112},[82,160607,158794],{"class":88},[82,160609,122974],{"class":112},[82,160611,160612],{"class":92}," has_ticket:\n",[82,160614,160615,160617,160619,160621],{"class":84,"line":508},[82,160616,611],{"class":88},[82,160618,93],{"class":92},[82,160620,160153],{"class":96},[82,160622,119],{"class":92},[65,160624,160626],{"id":160625},"_362-or","3.6.2 or",[19,160628,160629],{},"只要一个条件成立就成立。",[73,160631,160633],{"className":75,"code":160632,"language":77,"meta":78,"style":78},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[32,160634,160635,160644,160653,160657,160669],{"__ignoreMap":78},[82,160636,160637,160640,160642],{"class":84,"line":85},[82,160638,160639],{"class":92},"is_vip ",[82,160641,113],{"class":112},[82,160643,128351],{"class":88},[82,160645,160646,160649,160651],{"class":84,"line":157},[82,160647,160648],{"class":92},"coupon ",[82,160650,113],{"class":112},[82,160652,156111],{"class":88},[82,160654,160655],{"class":84,"line":404},[82,160656,486],{"emptyLinePlaceholder":485},[82,160658,160659,160661,160664,160666],{"class":84,"line":413},[82,160660,1237],{"class":112},[82,160662,160663],{"class":92}," is_vip ",[82,160665,117635],{"class":112},[82,160667,160668],{"class":92}," coupon:\n",[82,160670,160671,160673,160675,160678],{"class":84,"line":508},[82,160672,611],{"class":88},[82,160674,93],{"class":92},[82,160676,160677],{"class":96},"\"可以享受优惠\"",[82,160679,119],{"class":92},[65,160681,160683],{"id":160682},"_363-not","3.6.3 not",[19,160685,160686],{},"取反。",[73,160688,160690],{"className":75,"code":160689,"language":77,"meta":78,"style":78},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[32,160691,160692,160701,160705,160714],{"__ignoreMap":78},[82,160693,160694,160697,160699],{"class":84,"line":85},[82,160695,160696],{"class":92},"is_closed ",[82,160698,113],{"class":112},[82,160700,128351],{"class":88},[82,160702,160703],{"class":84,"line":157},[82,160704,486],{"emptyLinePlaceholder":485},[82,160706,160707,160709,160711],{"class":84,"line":404},[82,160708,1237],{"class":112},[82,160710,2222],{"class":112},[82,160712,160713],{"class":92}," is_closed:\n",[82,160715,160716,160718,160720,160723],{"class":84,"line":413},[82,160717,611],{"class":88},[82,160719,93],{"class":92},[82,160721,160722],{"class":96},"\"店铺营业中\"",[82,160724,119],{"class":92},[14,160726,160728],{"id":160727},"_37-链式比较","3.7 链式比较",[19,160730,160731],{},"Python 支持链式比较：",[73,160733,160735],{"className":75,"code":160734,"language":77,"meta":78,"style":78},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[32,160736,160737,160746,160750,160767],{"__ignoreMap":78},[82,160738,160739,160741,160743],{"class":84,"line":85},[82,160740,157867],{"class":92},[82,160742,113],{"class":112},[82,160744,160745],{"class":88}," 85\n",[82,160747,160748],{"class":84,"line":157},[82,160749,486],{"emptyLinePlaceholder":485},[82,160751,160752,160754,160756,160759,160761,160763,160765],{"class":84,"line":404},[82,160753,1237],{"class":112},[82,160755,6688],{"class":88},[82,160757,160758],{"class":112}," \u003C=",[82,160760,160289],{"class":92},[82,160762,4202],{"class":112},[82,160764,8346],{"class":88},[82,160766,669],{"class":92},[82,160768,160769,160771,160773,160776],{"class":84,"line":413},[82,160770,611],{"class":88},[82,160772,93],{"class":92},[82,160774,160775],{"class":96},"\"成绩合法\"",[82,160777,119],{"class":92},[19,160779,160780],{},"等价于：",[73,160782,160784],{"className":75,"code":160783,"language":77,"meta":78,"style":78},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[32,160785,160786,160806],{"__ignoreMap":78},[82,160787,160788,160790,160792,160794,160796,160798,160800,160802,160804],{"class":84,"line":85},[82,160789,1237],{"class":112},[82,160791,160289],{"class":92},[82,160793,4313],{"class":112},[82,160795,6688],{"class":88},[82,160797,122974],{"class":112},[82,160799,160289],{"class":92},[82,160801,4202],{"class":112},[82,160803,8346],{"class":88},[82,160805,669],{"class":92},[82,160807,160808,160810,160812,160814],{"class":84,"line":157},[82,160809,611],{"class":88},[82,160811,93],{"class":92},[82,160813,160775],{"class":96},[82,160815,119],{"class":92},[14,160817,160819],{"id":160818},"_38-真值和假值","3.8 真值和假值",[19,160821,119012,160822,160824],{},[32,160823,1237],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160826,160827],{},"假值：",[73,160829,160831],{"className":75,"code":160830,"language":77,"meta":78,"style":78},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[32,160832,160833,160837,160842,160846,160850,160855,160859,160863,160868],{"__ignoreMap":78},[82,160834,160835],{"class":84,"line":85},[82,160836,160023],{"class":88},[82,160838,160839],{"class":84,"line":157},[82,160840,160841],{"class":88},"None\n",[82,160843,160844],{"class":84,"line":404},[82,160845,5683],{"class":88},[82,160847,160848],{"class":84,"line":413},[82,160849,34912],{"class":88},[82,160851,160852],{"class":84,"line":508},[82,160853,160854],{"class":96},"\"\"\n",[82,160856,160857],{"class":84,"line":513},[82,160858,34927],{"class":92},[82,160860,160861],{"class":84,"line":1388},[82,160862,4576],{"class":92},[82,160864,160865],{"class":84,"line":1394},[82,160866,160867],{"class":92},"{}\n",[82,160869,160870,160872],{"class":84,"line":1399},[82,160871,157799],{"class":88},[82,160873,4576],{"class":92},[19,160875,17721],{},[73,160877,160879],{"className":75,"code":160878,"language":77,"meta":78,"style":78},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[32,160880,160881,160895,160899,160906,160926,160932],{"__ignoreMap":78},[82,160882,160883,160885,160887,160889,160891,160893],{"class":84,"line":85},[82,160884,149078],{"class":92},[82,160886,113],{"class":112},[82,160888,63163],{"class":88},[82,160890,93],{"class":92},[82,160892,154893],{"class":96},[82,160894,119],{"class":92},[82,160896,160897],{"class":84,"line":157},[82,160898,486],{"emptyLinePlaceholder":485},[82,160900,160901,160903],{"class":84,"line":404},[82,160902,1237],{"class":112},[82,160904,160905],{"class":92}," name:\n",[82,160907,160908,160910,160912,160914,160916,160918,160920,160922,160924],{"class":84,"line":413},[82,160909,611],{"class":88},[82,160911,93],{"class":92},[82,160913,2822],{"class":112},[82,160915,159560],{"class":96},[82,160917,3645],{"class":88},[82,160919,82364],{"class":92},[82,160921,3695],{"class":88},[82,160923,216],{"class":96},[82,160925,119],{"class":92},[82,160927,160928,160930],{"class":84,"line":508},[82,160929,4304],{"class":112},[82,160931,669],{"class":92},[82,160933,160934,160936,160938,160941],{"class":84,"line":513},[82,160935,611],{"class":88},[82,160937,93],{"class":92},[82,160939,160940],{"class":96},"\"姓名不能为空\"",[82,160942,119],{"class":92},[14,160944,160946],{"id":160945},"_39-match语句","3.9 match语句",[19,160948,160949,160950,160952],{},"Python 3.10 开始支持 ",[32,160951,73821],{},"。它适合处理固定选项。",[73,160954,160956],{"className":75,"code":160955,"language":77,"meta":78,"style":78},"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",[32,160957,160958,160974,160978,160985,160995,161006,161015,161026,161035,161046,161053],{"__ignoreMap":78},[82,160959,160960,160963,160965,160967,160969,160972],{"class":84,"line":85},[82,160961,160962],{"class":92},"command ",[82,160964,113],{"class":112},[82,160966,63163],{"class":88},[82,160968,93],{"class":92},[82,160970,160971],{"class":96},"\"请输入命令:\"",[82,160973,119],{"class":92},[82,160975,160976],{"class":84,"line":157},[82,160977,486],{"emptyLinePlaceholder":485},[82,160979,160980,160982],{"class":84,"line":404},[82,160981,73821],{"class":112},[82,160983,160984],{"class":92}," command:\n",[82,160986,160987,160990,160993],{"class":84,"line":413},[82,160988,160989],{"class":112},"    case",[82,160991,160992],{"class":96}," \"start\"",[82,160994,669],{"class":92},[82,160996,160997,160999,161001,161004],{"class":84,"line":508},[82,160998,1901],{"class":88},[82,161000,93],{"class":92},[82,161002,161003],{"class":96},"\"启动\"",[82,161005,119],{"class":92},[82,161007,161008,161010,161013],{"class":84,"line":513},[82,161009,160989],{"class":112},[82,161011,161012],{"class":96}," \"stop\"",[82,161014,669],{"class":92},[82,161016,161017,161019,161021,161024],{"class":84,"line":1388},[82,161018,1901],{"class":88},[82,161020,93],{"class":92},[82,161022,161023],{"class":96},"\"停止\"",[82,161025,119],{"class":92},[82,161027,161028,161030,161033],{"class":84,"line":1394},[82,161029,160989],{"class":112},[82,161031,161032],{"class":96}," \"restart\"",[82,161034,669],{"class":92},[82,161036,161037,161039,161041,161044],{"class":84,"line":1399},[82,161038,1901],{"class":88},[82,161040,93],{"class":92},[82,161042,161043],{"class":96},"\"重启\"",[82,161045,119],{"class":92},[82,161047,161048,161050],{"class":84,"line":1430},[82,161049,160989],{"class":112},[82,161051,161052],{"class":92}," _:\n",[82,161054,161055,161057,161059,161062],{"class":84,"line":1818},[82,161056,1901],{"class":88},[82,161058,93],{"class":92},[82,161060,161061],{"class":96},"\"未知命令\"",[82,161063,119],{"class":92},[19,161065,161066,161067,161069,161070,161072],{},"入门阶段掌握 ",[32,161068,157167],{}," 更重要，",[32,161071,73821],{}," 可以作为补充。",[14,161074,161076],{"id":161075},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,161078,2091],{},[26,161080,161081,161084,161087],{},[29,161082,161083],{},"输入成绩。",[29,161085,161086],{},"判断成绩是否合法。",[29,161088,161089],{},"输出等级。",[19,161091,2105],{},[73,161093,161095],{"className":75,"code":161094,"language":77,"meta":78,"style":78},"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",[32,161096,161097,161115,161119,161137,161148,161160,161171,161183,161194,161207,161218,161230,161241,161247],{"__ignoreMap":78},[82,161098,161099,161101,161103,161105,161107,161109,161111,161113],{"class":84,"line":85},[82,161100,157867],{"class":92},[82,161102,113],{"class":112},[82,161104,112343],{"class":88},[82,161106,93],{"class":92},[82,161108,56381],{"class":88},[82,161110,93],{"class":92},[82,161112,154923],{"class":96},[82,161114,33074],{"class":92},[82,161116,161117],{"class":84,"line":157},[82,161118,486],{"emptyLinePlaceholder":485},[82,161120,161121,161123,161125,161127,161129,161131,161133,161135],{"class":84,"line":404},[82,161122,1237],{"class":112},[82,161124,2222],{"class":112},[82,161126,6688],{"class":88},[82,161128,160758],{"class":112},[82,161130,160289],{"class":92},[82,161132,4202],{"class":112},[82,161134,8346],{"class":88},[82,161136,669],{"class":92},[82,161138,161139,161141,161143,161146],{"class":84,"line":413},[82,161140,611],{"class":88},[82,161142,93],{"class":92},[82,161144,161145],{"class":96},"\"成绩不合法\"",[82,161147,119],{"class":92},[82,161149,161150,161152,161154,161156,161158],{"class":84,"line":508},[82,161151,160312],{"class":112},[82,161153,160289],{"class":92},[82,161155,4313],{"class":112},[82,161157,160294],{"class":88},[82,161159,669],{"class":92},[82,161161,161162,161164,161166,161169],{"class":84,"line":513},[82,161163,611],{"class":88},[82,161165,93],{"class":92},[82,161167,161168],{"class":96},"\"等级:A\"",[82,161170,119],{"class":92},[82,161172,161173,161175,161177,161179,161181],{"class":84,"line":1388},[82,161174,160312],{"class":112},[82,161176,160289],{"class":92},[82,161178,4313],{"class":112},[82,161180,160319],{"class":88},[82,161182,669],{"class":92},[82,161184,161185,161187,161189,161192],{"class":84,"line":1394},[82,161186,611],{"class":88},[82,161188,93],{"class":92},[82,161190,161191],{"class":96},"\"等级:B\"",[82,161193,119],{"class":92},[82,161195,161196,161198,161200,161202,161205],{"class":84,"line":1399},[82,161197,160312],{"class":112},[82,161199,160289],{"class":92},[82,161201,4313],{"class":112},[82,161203,161204],{"class":88}," 70",[82,161206,669],{"class":92},[82,161208,161209,161211,161213,161216],{"class":84,"line":1430},[82,161210,611],{"class":88},[82,161212,93],{"class":92},[82,161214,161215],{"class":96},"\"等级:C\"",[82,161217,119],{"class":92},[82,161219,161220,161222,161224,161226,161228],{"class":84,"line":1818},[82,161221,160312],{"class":112},[82,161223,160289],{"class":92},[82,161225,4313],{"class":112},[82,161227,160343],{"class":88},[82,161229,669],{"class":92},[82,161231,161232,161234,161236,161239],{"class":84,"line":2082},[82,161233,611],{"class":88},[82,161235,93],{"class":92},[82,161237,161238],{"class":96},"\"等级:D\"",[82,161240,119],{"class":92},[82,161242,161243,161245],{"class":84,"line":2233},[82,161244,4304],{"class":112},[82,161246,669],{"class":92},[82,161248,161249,161251,161253,161256],{"class":84,"line":2255},[82,161250,611],{"class":88},[82,161252,93],{"class":92},[82,161254,161255],{"class":96},"\"等级:E\"",[82,161257,119],{"class":92},[14,161259,161261],{"id":161260},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,161263,2091],{},[26,161265,161266,161269,161272,161275],{},[29,161267,161268],{},"输入消费金额。",[29,161270,161271],{},"输入会员等级，普通、银卡、金卡。",[29,161273,161274],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,161276,161277],{},"满 500 再减 50。",[19,161279,2105],{},[73,161281,161283],{"className":75,"code":161282,"language":77,"meta":78,"style":78},"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",[32,161284,161285,161305,161321,161325,161333,161337,161351,161361,161374,161383,161396,161404,161410,161421,161425,161439,161443,161457,161467,161471],{"__ignoreMap":78},[82,161286,161287,161290,161292,161294,161296,161298,161300,161303],{"class":84,"line":85},[82,161288,161289],{"class":92},"amount ",[82,161291,113],{"class":112},[82,161293,112343],{"class":88},[82,161295,93],{"class":92},[82,161297,56381],{"class":88},[82,161299,93],{"class":92},[82,161301,161302],{"class":96},"\"请输入消费金额:\"",[82,161304,33074],{"class":92},[82,161306,161307,161310,161312,161314,161316,161319],{"class":84,"line":157},[82,161308,161309],{"class":92},"level ",[82,161311,113],{"class":112},[82,161313,63163],{"class":88},[82,161315,93],{"class":92},[82,161317,161318],{"class":96},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[82,161320,119],{"class":92},[82,161322,161323],{"class":84,"line":404},[82,161324,486],{"emptyLinePlaceholder":485},[82,161326,161327,161329,161331],{"class":84,"line":413},[82,161328,159742],{"class":92},[82,161330,113],{"class":112},[82,161332,2252],{"class":88},[82,161334,161335],{"class":84,"line":508},[82,161336,486],{"emptyLinePlaceholder":485},[82,161338,161339,161341,161344,161346,161349],{"class":84,"line":513},[82,161340,1237],{"class":112},[82,161342,161343],{"class":92}," level ",[82,161345,5548],{"class":112},[82,161347,161348],{"class":96}," \"银卡\"",[82,161350,669],{"class":92},[82,161352,161353,161356,161358],{"class":84,"line":1388},[82,161354,161355],{"class":92},"    discount ",[82,161357,113],{"class":112},[82,161359,161360],{"class":88}," 0.9\n",[82,161362,161363,161365,161367,161369,161372],{"class":84,"line":1394},[82,161364,160312],{"class":112},[82,161366,161343],{"class":92},[82,161368,5548],{"class":112},[82,161370,161371],{"class":96}," \"金卡\"",[82,161373,669],{"class":92},[82,161375,161376,161378,161380],{"class":84,"line":1399},[82,161377,161355],{"class":92},[82,161379,113],{"class":112},[82,161381,161382],{"class":88}," 0.8\n",[82,161384,161385,161387,161389,161391,161394],{"class":84,"line":1430},[82,161386,160312],{"class":112},[82,161388,161343],{"class":92},[82,161390,5548],{"class":112},[82,161392,161393],{"class":96}," \"普通\"",[82,161395,669],{"class":92},[82,161397,161398,161400,161402],{"class":84,"line":1818},[82,161399,161355],{"class":92},[82,161401,113],{"class":112},[82,161403,2252],{"class":88},[82,161405,161406,161408],{"class":84,"line":2082},[82,161407,4304],{"class":112},[82,161409,669],{"class":92},[82,161411,161412,161414,161416,161419],{"class":84,"line":2233},[82,161413,611],{"class":88},[82,161415,93],{"class":92},[82,161417,161418],{"class":96},"\"会员等级输入错误，按普通会员计算\"",[82,161420,119],{"class":92},[82,161422,161423],{"class":84,"line":2255},[82,161424,486],{"emptyLinePlaceholder":485},[82,161426,161427,161430,161432,161435,161437],{"class":84,"line":2260},[82,161428,161429],{"class":92},"pay ",[82,161431,113],{"class":112},[82,161433,161434],{"class":92}," amount ",[82,161436,3212],{"class":112},[82,161438,159781],{"class":92},[82,161440,161441],{"class":84,"line":2298},[82,161442,486],{"emptyLinePlaceholder":485},[82,161444,161445,161447,161450,161452,161455],{"class":84,"line":2303},[82,161446,1237],{"class":112},[82,161448,161449],{"class":92}," pay ",[82,161451,4313],{"class":112},[82,161453,161454],{"class":88}," 500",[82,161456,669],{"class":92},[82,161458,161459,161462,161464],{"class":84,"line":2321},[82,161460,161461],{"class":92},"    pay ",[82,161463,152778],{"class":112},[82,161465,161466],{"class":88}," 50\n",[82,161468,161469],{"class":84,"line":2533},[82,161470,486],{"emptyLinePlaceholder":485},[82,161472,161473,161475,161477,161479,161481,161483,161486,161488,161490,161492],{"class":84,"line":2538},[82,161474,407],{"class":88},[82,161476,93],{"class":92},[82,161478,2822],{"class":112},[82,161480,159862],{"class":96},[82,161482,3645],{"class":88},[82,161484,161485],{"class":92},"pay",[82,161487,159665],{"class":112},[82,161489,3695],{"class":88},[82,161491,159518],{"class":96},[82,161493,119],{"class":92},[14,161495,161497],{"id":161496},"_312-易错点","3.12 易错点",[26,161499,161500,161503,161506,161509,161514],{},[29,161501,161502],{},"冒号不能漏。",[29,161504,161505],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,161507,161508],{},"多分支判断要注意顺序。",[29,161510,161511,161512,2611],{},"判断相等用 ",[32,161513,5548],{},[29,161515,161516],{},"字符串比较区分大小写：",[73,161518,161520],{"className":75,"code":161519,"language":77,"meta":78,"style":78},"\"Y\" == \"y\"  # False\n",[32,161521,161522],{"__ignoreMap":78},[82,161523,161524,161527,161529,161531],{"class":84,"line":85},[82,161525,161526],{"class":96},"\"Y\"",[82,161528,104110],{"class":112},[82,161530,160511],{"class":96},[82,161532,161533],{"class":2828},"  # False\n",[19,161535,161536],{},"可转换后再判断：",[73,161538,161540],{"className":75,"code":161539,"language":77,"meta":78,"style":78},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[32,161541,161542,161559,161572],{"__ignoreMap":78},[82,161543,161544,161547,161549,161551,161553,161556],{"class":84,"line":85},[82,161545,161546],{"class":92},"answer ",[82,161548,113],{"class":112},[82,161550,63163],{"class":88},[82,161552,93],{"class":92},[82,161554,161555],{"class":96},"\"是否继续(y\u002Fn):\"",[82,161557,161558],{"class":92},").lower()\n",[82,161560,161561,161563,161566,161568,161570],{"class":84,"line":157},[82,161562,1237],{"class":112},[82,161564,161565],{"class":92}," answer ",[82,161567,5548],{"class":112},[82,161569,160511],{"class":96},[82,161571,669],{"class":92},[82,161573,161574,161576,161578,161581],{"class":84,"line":404},[82,161575,611],{"class":88},[82,161577,93],{"class":92},[82,161579,161580],{"class":96},"\"继续\"",[82,161582,119],{"class":92},[14,161584,161586],{"id":161585},"_313-本章练习","3.13 本章练习",[26,161588,161589,161592,161595,161598,161608],{},[29,161590,161591],{},"输入年龄，判断是否成年。",[29,161593,161594],{},"输入年份，判断是否为闰年。",[29,161596,161597],{},"输入三个数字，输出最大值。",[29,161599,161600,161601,161604,161605,161607],{},"写登录判断：用户名是 ",[32,161602,161603],{},"admin"," 且密码是 ",[32,161606,17670],{}," 才登录成功。",[29,161609,161610],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2671,161612,161613],{},"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":78,"searchDepth":157,"depth":157,"links":161615},[161616,161617,161618,161619,161620,161621,161626,161627,161628,161629,161630,161631,161632],{"id":160004,"depth":157,"text":160005},{"id":160057,"depth":157,"text":160058},{"id":160161,"depth":157,"text":160162},{"id":160251,"depth":157,"text":160252},{"id":160441,"depth":157,"text":160442},{"id":160564,"depth":157,"text":160565,"children":161622},[161623,161624,161625],{"id":160568,"depth":404,"text":160569},{"id":160625,"depth":404,"text":160626},{"id":160682,"depth":404,"text":160683},{"id":160727,"depth":157,"text":160728},{"id":160818,"depth":157,"text":160819},{"id":160945,"depth":157,"text":160946},{"id":161075,"depth":157,"text":161076},{"id":161260,"depth":157,"text":161261},{"id":161496,"depth":157,"text":161497},{"id":161585,"depth":157,"text":161586},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159996,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161639,"title":161640,"body":161641,"description":2699,"extension":2700,"meta":163409,"navigation":485,"path":163410,"seo":163411,"stem":163412,"__hash__":163413},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161642,"toc":163389},[161643,161646,161650,161656,161659,161676,161680,161682,161699,161701,161746,161748,161765,161769,161772,161838,161841,161859,161863,162024,162033,162037,162041,162046,162093,162095,162101,162105,162110,162157,162159,162165,162169,162174,162210,162213,162259,162263,162269,162327,162332,162363,162368,162372,162427,162430,162502,162505,162564,162568,162571,162646,162649,162653,162759,162762,162788,162792,162804,162873,162876,162968,162972,162974,162985,162987,163117,163121,163323,163331,163335,163365,163369,163386],[10,161644,161640],{"id":161645},"_4-循环语句",[14,161647,161649],{"id":161648},"_41-为什么需要循环","4.1 为什么需要循环",[19,161651,161652,161653,161655],{},"如果要输出 1 到 100，不应该写 100 行 ",[32,161654,149014],{},"，而应该用循环。",[19,161657,161658],{},"循环适合处理重复任务：",[26,161660,161661,161664,161667,161670,161673],{},[29,161662,161663],{},"重复输出。",[29,161665,161666],{},"重复输入。",[29,161668,161669],{},"遍历数据。",[29,161671,161672],{},"持续执行菜单。",[29,161674,161675],{},"批量处理文件或数据。",[14,161677,161679],{"id":161678},"_42-while循环","4.2 while循环",[19,161681,246],{},[73,161683,161685],{"className":75,"code":161684,"language":77,"meta":78,"style":78},"while 条件:\n    循环体\n",[32,161686,161687,161694],{"__ignoreMap":78},[82,161688,161689,161691],{"class":84,"line":85},[82,161690,111209],{"class":112},[82,161692,161693],{"class":92}," 条件:\n",[82,161695,161696],{"class":84,"line":157},[82,161697,161698],{"class":92},"    循环体\n",[19,161700,17721],{},[73,161702,161704],{"className":75,"code":161703,"language":77,"meta":78,"style":78},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[32,161705,161706,161714,161718,161730,161737],{"__ignoreMap":78},[82,161707,161708,161710,161712],{"class":84,"line":85},[82,161709,102699],{"class":92},[82,161711,113],{"class":112},[82,161713,2252],{"class":88},[82,161715,161716],{"class":84,"line":157},[82,161717,486],{"emptyLinePlaceholder":485},[82,161719,161720,161722,161724,161726,161728],{"class":84,"line":404},[82,161721,111209],{"class":112},[82,161723,12029],{"class":92},[82,161725,4202],{"class":112},[82,161727,4748],{"class":88},[82,161729,669],{"class":92},[82,161731,161732,161734],{"class":84,"line":413},[82,161733,611],{"class":88},[82,161735,161736],{"class":92},"(i)\n",[82,161738,161739,161742,161744],{"class":84,"line":508},[82,161740,161741],{"class":92},"    i ",[82,161743,12068],{"class":112},[82,161745,2252],{"class":88},[19,161747,83483],{},[26,161749,161750,161756,161759,161762],{},[29,161751,161752,161753,2611],{},"判断条件 ",[32,161754,161755],{},"i \u003C= 5",[29,161757,161758],{},"条件成立，执行循环体。",[29,161760,161761],{},"执行完后回到条件判断。",[29,161763,161764],{},"条件不成立，退出循环。",[14,161766,161768],{"id":161767},"_43-while累加","4.3 while累加",[19,161770,161771],{},"计算 1 到 100 的和：",[73,161773,161775],{"className":75,"code":161774,"language":77,"meta":78,"style":78},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[32,161776,161777,161785,161793,161797,161809,161819,161827,161831],{"__ignoreMap":78},[82,161778,161779,161781,161783],{"class":84,"line":85},[82,161780,102699],{"class":92},[82,161782,113],{"class":112},[82,161784,2252],{"class":88},[82,161786,161787,161789,161791],{"class":84,"line":157},[82,161788,159766],{"class":92},[82,161790,113],{"class":112},[82,161792,49897],{"class":88},[82,161794,161795],{"class":84,"line":404},[82,161796,486],{"emptyLinePlaceholder":485},[82,161798,161799,161801,161803,161805,161807],{"class":84,"line":413},[82,161800,111209],{"class":112},[82,161802,12029],{"class":92},[82,161804,4202],{"class":112},[82,161806,8346],{"class":88},[82,161808,669],{"class":92},[82,161810,161811,161814,161816],{"class":84,"line":508},[82,161812,161813],{"class":92},"    total ",[82,161815,12068],{"class":112},[82,161817,161818],{"class":92}," i\n",[82,161820,161821,161823,161825],{"class":84,"line":513},[82,161822,161741],{"class":92},[82,161824,12068],{"class":112},[82,161826,2252],{"class":88},[82,161828,161829],{"class":84,"line":1388},[82,161830,486],{"emptyLinePlaceholder":485},[82,161832,161833,161835],{"class":84,"line":1394},[82,161834,407],{"class":88},[82,161836,161837],{"class":92},"(total)\n",[19,161839,161840],{},"核心思想：",[26,161842,161843,161848,161853],{},[29,161844,161845,161847],{},[32,161846,3199],{}," 控制循环次数。",[29,161849,161850,161852],{},[32,161851,159867],{}," 保存累加结果。",[29,161854,161855,161856,161858],{},"每轮循环都要更新 ",[32,161857,3199],{},"，否则可能死循环。",[14,161860,161862],{"id":161861},"_44-while猜数字","4.4 while猜数字",[73,161864,161866],{"className":75,"code":161865,"language":77,"meta":78,"style":78},"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",[32,161867,161868,161874,161878,161895,161903,161907,161915,161935,161944,161948,161960,161971,161981,161992,161998,162020],{"__ignoreMap":78},[82,161869,161870,161872],{"class":84,"line":85},[82,161871,1123],{"class":112},[82,161873,47893],{"class":92},[82,161875,161876],{"class":84,"line":157},[82,161877,486],{"emptyLinePlaceholder":485},[82,161879,161880,161882,161884,161887,161889,161891,161893],{"class":84,"line":404},[82,161881,161546],{"class":92},[82,161883,113],{"class":112},[82,161885,161886],{"class":92}," random.randint(",[82,161888,2283],{"class":88},[82,161890,100],{"class":92},[82,161892,3069],{"class":88},[82,161894,119],{"class":92},[82,161896,161897,161899,161901],{"class":84,"line":413},[82,161898,149233],{"class":92},[82,161900,113],{"class":112},[82,161902,49897],{"class":88},[82,161904,161905],{"class":84,"line":508},[82,161906,486],{"emptyLinePlaceholder":485},[82,161908,161909,161911,161913],{"class":84,"line":513},[82,161910,111209],{"class":112},[82,161912,97843],{"class":88},[82,161914,669],{"class":92},[82,161916,161917,161920,161922,161924,161926,161928,161930,161933],{"class":84,"line":1388},[82,161918,161919],{"class":92},"    guess ",[82,161921,113],{"class":112},[82,161923,4982],{"class":88},[82,161925,93],{"class":92},[82,161927,56381],{"class":88},[82,161929,93],{"class":92},[82,161931,161932],{"class":96},"\"请输入1到100之间的数字:\"",[82,161934,33074],{"class":92},[82,161936,161937,161940,161942],{"class":84,"line":1394},[82,161938,161939],{"class":92},"    count ",[82,161941,12068],{"class":112},[82,161943,2252],{"class":88},[82,161945,161946],{"class":84,"line":1399},[82,161947,486],{"emptyLinePlaceholder":485},[82,161949,161950,161952,161955,161957],{"class":84,"line":1430},[82,161951,2219],{"class":112},[82,161953,161954],{"class":92}," guess ",[82,161956,3709],{"class":112},[82,161958,161959],{"class":92}," answer:\n",[82,161961,161962,161964,161966,161969],{"class":84,"line":1818},[82,161963,1901],{"class":88},[82,161965,93],{"class":92},[82,161967,161968],{"class":96},"\"猜大了\"",[82,161970,119],{"class":92},[82,161972,161973,161975,161977,161979],{"class":84,"line":2082},[82,161974,41858],{"class":112},[82,161976,161954],{"class":92},[82,161978,3659],{"class":112},[82,161980,161959],{"class":92},[82,161982,161983,161985,161987,161990],{"class":84,"line":2233},[82,161984,1901],{"class":88},[82,161986,93],{"class":92},[82,161988,161989],{"class":96},"\"猜小了\"",[82,161991,119],{"class":92},[82,161993,161994,161996],{"class":84,"line":2255},[82,161995,160528],{"class":112},[82,161997,669],{"class":92},[82,161999,162000,162002,162004,162006,162009,162011,162013,162015,162018],{"class":84,"line":2260},[82,162001,1901],{"class":88},[82,162003,93],{"class":92},[82,162005,2822],{"class":112},[82,162007,162008],{"class":96},"\"猜对了，一共猜了",[82,162010,3645],{"class":88},[82,162012,86988],{"class":92},[82,162014,3695],{"class":88},[82,162016,162017],{"class":96},"次\"",[82,162019,119],{"class":92},[82,162021,162022],{"class":84,"line":2298},[82,162023,34199],{"class":112},[19,162025,162026,162029,162030,162032],{},[32,162027,162028],{},"while True"," 表示无限循环，通常配合 ",[32,162031,4653],{}," 使用。",[14,162034,162036],{"id":162035},"_45-break和continue","4.5 break和continue",[65,162038,162040],{"id":162039},"_451-break","4.5.1 break",[19,162042,162043,162045],{},[32,162044,4653],{}," 直接结束整个循环。",[73,162047,162049],{"className":75,"code":162048,"language":77,"meta":78,"style":78},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[32,162050,162051,162071,162083,162087],{"__ignoreMap":78},[82,162052,162053,162055,162057,162059,162061,162063,162065,162067,162069],{"class":84,"line":85},[82,162054,597],{"class":112},[82,162056,12029],{"class":92},[82,162058,603],{"class":112},[82,162060,35013],{"class":88},[82,162062,93],{"class":92},[82,162064,2283],{"class":88},[82,162066,100],{"class":92},[82,162068,3102],{"class":88},[82,162070,33362],{"class":92},[82,162072,162073,162075,162077,162079,162081],{"class":84,"line":157},[82,162074,2219],{"class":112},[82,162076,12029],{"class":92},[82,162078,5548],{"class":112},[82,162080,80624],{"class":88},[82,162082,669],{"class":92},[82,162084,162085],{"class":84,"line":404},[82,162086,34199],{"class":112},[82,162088,162089,162091],{"class":84,"line":413},[82,162090,611],{"class":88},[82,162092,161736],{"class":92},[19,162094,148999],{},[73,162096,162099],{"className":162097,"code":162098,"language":7780,"meta":78},[7778],"1\n2\n",[32,162100,162098],{"__ignoreMap":78},[65,162102,162104],{"id":162103},"_452-continue","4.5.2 continue",[19,162106,162107,162109],{},[32,162108,157181],{}," 跳过本轮剩余代码，进入下一轮循环。",[73,162111,162113],{"className":75,"code":162112,"language":77,"meta":78,"style":78},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[32,162114,162115,162135,162147,162151],{"__ignoreMap":78},[82,162116,162117,162119,162121,162123,162125,162127,162129,162131,162133],{"class":84,"line":85},[82,162118,597],{"class":112},[82,162120,12029],{"class":92},[82,162122,603],{"class":112},[82,162124,35013],{"class":88},[82,162126,93],{"class":92},[82,162128,2283],{"class":88},[82,162130,100],{"class":92},[82,162132,3102],{"class":88},[82,162134,33362],{"class":92},[82,162136,162137,162139,162141,162143,162145],{"class":84,"line":157},[82,162138,2219],{"class":112},[82,162140,12029],{"class":92},[82,162142,5548],{"class":112},[82,162144,80624],{"class":88},[82,162146,669],{"class":92},[82,162148,162149],{"class":84,"line":404},[82,162150,2230],{"class":112},[82,162152,162153,162155],{"class":84,"line":413},[82,162154,611],{"class":88},[82,162156,161736],{"class":92},[19,162158,148999],{},[73,162160,162163],{"className":162161,"code":162162,"language":7780,"meta":78},[7778],"1\n2\n4\n5\n",[32,162164,162162],{"__ignoreMap":78},[14,162166,162168],{"id":162167},"_46-for循环","4.6 for循环",[19,162170,162171,162173],{},[32,162172,597],{}," 常用于遍历序列。",[73,162175,162177],{"className":75,"code":162176,"language":77,"meta":78,"style":78},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[32,162178,162179,162188,162192,162203],{"__ignoreMap":78},[82,162180,162181,162183,162185],{"class":84,"line":85},[82,162182,149078],{"class":92},[82,162184,113],{"class":112},[82,162186,162187],{"class":96}," \"python\"\n",[82,162189,162190],{"class":84,"line":157},[82,162191,486],{"emptyLinePlaceholder":485},[82,162193,162194,162196,162199,162201],{"class":84,"line":404},[82,162195,597],{"class":112},[82,162197,162198],{"class":92}," ch ",[82,162200,603],{"class":112},[82,162202,160905],{"class":92},[82,162204,162205,162207],{"class":84,"line":413},[82,162206,611],{"class":88},[82,162208,162209],{"class":92},"(ch)\n",[19,162211,162212],{},"遍历列表：",[73,162214,162216],{"className":75,"code":162215,"language":77,"meta":78,"style":78},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[32,162217,162218,162239,162243,162253],{"__ignoreMap":78},[82,162219,162220,162222,162224,162226,162228,162230,162232,162234,162237],{"class":84,"line":85},[82,162221,1458],{"class":92},[82,162223,113],{"class":112},[82,162225,847],{"class":92},[82,162227,1360],{"class":96},[82,162229,100],{"class":92},[82,162231,1508],{"class":96},[82,162233,100],{"class":92},[82,162235,162236],{"class":96},"\"小刚\"",[82,162238,875],{"class":92},[82,162240,162241],{"class":84,"line":157},[82,162242,486],{"emptyLinePlaceholder":485},[82,162244,162245,162247,162249,162251],{"class":84,"line":404},[82,162246,597],{"class":112},[82,162248,154651],{"class":92},[82,162250,603],{"class":112},[82,162252,154656],{"class":92},[82,162254,162255,162257],{"class":84,"line":413},[82,162256,611],{"class":88},[82,162258,152568],{"class":92},[14,162260,162262],{"id":162261},"_47-range函数","4.7 range函数",[19,162264,162265,162268],{},[32,162266,162267],{},"range()"," 用于生成整数序列。",[73,162270,162272],{"className":75,"code":162271,"language":77,"meta":78,"style":78},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[32,162273,162274,162288,162306],{"__ignoreMap":78},[82,162275,162276,162278,162280,162282,162285],{"class":84,"line":85},[82,162277,35984],{"class":88},[82,162279,93],{"class":92},[82,162281,3077],{"class":88},[82,162283,162284],{"class":92},")          ",[82,162286,162287],{"class":2828},"# 0,1,2,3,4\n",[82,162289,162290,162292,162294,162296,162298,162300,162303],{"class":84,"line":157},[82,162291,35984],{"class":88},[82,162293,93],{"class":92},[82,162295,2283],{"class":88},[82,162297,100],{"class":92},[82,162299,3077],{"class":88},[82,162301,162302],{"class":92},")       ",[82,162304,162305],{"class":2828},"# 1,2,3,4\n",[82,162307,162308,162310,162312,162314,162316,162318,162320,162322,162324],{"class":84,"line":404},[82,162309,35984],{"class":88},[82,162311,93],{"class":92},[82,162313,2283],{"class":88},[82,162315,100],{"class":92},[82,162317,440],{"class":88},[82,162319,100],{"class":92},[82,162321,1425],{"class":88},[82,162323,158170],{"class":92},[82,162325,162326],{"class":2828},"# 1,3,5,7,9\n",[19,162328,162329,162330,27203],{},"配合 ",[32,162331,597],{},[73,162333,162335],{"className":75,"code":162334,"language":77,"meta":78,"style":78},"for i in range(1, 6):\n    print(i)\n",[32,162336,162337,162357],{"__ignoreMap":78},[82,162338,162339,162341,162343,162345,162347,162349,162351,162353,162355],{"class":84,"line":85},[82,162340,597],{"class":112},[82,162342,12029],{"class":92},[82,162344,603],{"class":112},[82,162346,35013],{"class":88},[82,162348,93],{"class":92},[82,162350,2283],{"class":88},[82,162352,100],{"class":92},[82,162354,3102],{"class":88},[82,162356,33362],{"class":92},[82,162358,162359,162361],{"class":84,"line":157},[82,162360,611],{"class":88},[82,162362,161736],{"class":92},[19,162364,11616,162365,162367],{},[32,162366,35984],{}," 的结束值不包含在内。",[14,162369,162371],{"id":162370},"_48-for循环求和","4.8 for循环求和",[73,162373,162375],{"className":75,"code":162374,"language":77,"meta":78,"style":78},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[32,162376,162377,162385,162389,162409,162417,162421],{"__ignoreMap":78},[82,162378,162379,162381,162383],{"class":84,"line":85},[82,162380,159766],{"class":92},[82,162382,113],{"class":112},[82,162384,49897],{"class":88},[82,162386,162387],{"class":84,"line":157},[82,162388,486],{"emptyLinePlaceholder":485},[82,162390,162391,162393,162395,162397,162399,162401,162403,162405,162407],{"class":84,"line":404},[82,162392,597],{"class":112},[82,162394,12029],{"class":92},[82,162396,603],{"class":112},[82,162398,35013],{"class":88},[82,162400,93],{"class":92},[82,162402,2283],{"class":88},[82,162404,100],{"class":92},[82,162406,3095],{"class":88},[82,162408,33362],{"class":92},[82,162410,162411,162413,162415],{"class":84,"line":413},[82,162412,161813],{"class":92},[82,162414,12068],{"class":112},[82,162416,161818],{"class":92},[82,162418,162419],{"class":84,"line":508},[82,162420,486],{"emptyLinePlaceholder":485},[82,162422,162423,162425],{"class":84,"line":513},[82,162424,407],{"class":88},[82,162426,161837],{"class":92},[19,162428,162429],{},"求偶数和：",[73,162431,162433],{"className":75,"code":162432,"language":77,"meta":78,"style":78},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[32,162434,162435,162443,162447,162467,162483,162492,162496],{"__ignoreMap":78},[82,162436,162437,162439,162441],{"class":84,"line":85},[82,162438,159766],{"class":92},[82,162440,113],{"class":112},[82,162442,49897],{"class":88},[82,162444,162445],{"class":84,"line":157},[82,162446,486],{"emptyLinePlaceholder":485},[82,162448,162449,162451,162453,162455,162457,162459,162461,162463,162465],{"class":84,"line":404},[82,162450,597],{"class":112},[82,162452,12029],{"class":92},[82,162454,603],{"class":112},[82,162456,35013],{"class":88},[82,162458,93],{"class":92},[82,162460,2283],{"class":88},[82,162462,100],{"class":92},[82,162464,3095],{"class":88},[82,162466,33362],{"class":92},[82,162468,162469,162471,162473,162475,162477,162479,162481],{"class":84,"line":413},[82,162470,2219],{"class":112},[82,162472,12029],{"class":92},[82,162474,3086],{"class":112},[82,162476,17341],{"class":88},[82,162478,104110],{"class":112},[82,162480,6688],{"class":88},[82,162482,669],{"class":92},[82,162484,162485,162488,162490],{"class":84,"line":508},[82,162486,162487],{"class":92},"        total ",[82,162489,12068],{"class":112},[82,162491,161818],{"class":92},[82,162493,162494],{"class":84,"line":513},[82,162495,486],{"emptyLinePlaceholder":485},[82,162497,162498,162500],{"class":84,"line":1388},[82,162499,407],{"class":88},[82,162501,161837],{"class":92},[19,162503,162504],{},"也可以：",[73,162506,162508],{"className":75,"code":162507,"language":77,"meta":78,"style":78},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[32,162509,162510,162518,162522,162546,162554,162558],{"__ignoreMap":78},[82,162511,162512,162514,162516],{"class":84,"line":85},[82,162513,159766],{"class":92},[82,162515,113],{"class":112},[82,162517,49897],{"class":88},[82,162519,162520],{"class":84,"line":157},[82,162521,486],{"emptyLinePlaceholder":485},[82,162523,162524,162526,162528,162530,162532,162534,162536,162538,162540,162542,162544],{"class":84,"line":404},[82,162525,597],{"class":112},[82,162527,12029],{"class":92},[82,162529,603],{"class":112},[82,162531,35013],{"class":88},[82,162533,93],{"class":92},[82,162535,1425],{"class":88},[82,162537,100],{"class":92},[82,162539,3095],{"class":88},[82,162541,100],{"class":92},[82,162543,1425],{"class":88},[82,162545,33362],{"class":92},[82,162547,162548,162550,162552],{"class":84,"line":413},[82,162549,161813],{"class":92},[82,162551,12068],{"class":112},[82,162553,161818],{"class":92},[82,162555,162556],{"class":84,"line":508},[82,162557,486],{"emptyLinePlaceholder":485},[82,162559,162560,162562],{"class":84,"line":513},[82,162561,407],{"class":88},[82,162563,161837],{"class":92},[14,162565,162567],{"id":162566},"_49-循环嵌套","4.9 循环嵌套",[19,162569,162570],{},"嵌套循环就是循环里面再写循环。",[73,162572,162574],{"className":75,"code":162573,"language":77,"meta":78,"style":78},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[32,162575,162576,162596,162616],{"__ignoreMap":78},[82,162577,162578,162580,162582,162584,162586,162588,162590,162592,162594],{"class":84,"line":85},[82,162579,597],{"class":112},[82,162581,12029],{"class":92},[82,162583,603],{"class":112},[82,162585,35013],{"class":88},[82,162587,93],{"class":92},[82,162589,2283],{"class":88},[82,162591,100],{"class":92},[82,162593,3051],{"class":88},[82,162595,33362],{"class":92},[82,162597,162598,162600,162602,162604,162606,162608,162610,162612,162614],{"class":84,"line":157},[82,162599,1888],{"class":112},[82,162601,12091],{"class":92},[82,162603,603],{"class":112},[82,162605,35013],{"class":88},[82,162607,93],{"class":92},[82,162609,2283],{"class":88},[82,162611,100],{"class":92},[82,162613,3051],{"class":88},[82,162615,33362],{"class":92},[82,162617,162618,162620,162622,162624,162627,162629,162631,162633,162636,162638,162640,162642,162644],{"class":84,"line":404},[82,162619,1901],{"class":88},[82,162621,93],{"class":92},[82,162623,2822],{"class":112},[82,162625,162626],{"class":96},"\"i=",[82,162628,3645],{"class":88},[82,162630,3199],{"class":92},[82,162632,3695],{"class":88},[82,162634,162635],{"class":96},", j=",[82,162637,3645],{"class":88},[82,162639,3224],{"class":92},[82,162641,3695],{"class":88},[82,162643,216],{"class":96},[82,162645,119],{"class":92},[19,162647,162648],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162650,162652],{"id":162651},"_410-九九乘法表","4.10 九九乘法表",[73,162654,162656],{"className":75,"code":162655,"language":77,"meta":78,"style":78},"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",[32,162657,162658,162678,162701,162753],{"__ignoreMap":78},[82,162659,162660,162662,162664,162666,162668,162670,162672,162674,162676],{"class":84,"line":85},[82,162661,597],{"class":112},[82,162663,12029],{"class":92},[82,162665,603],{"class":112},[82,162667,35013],{"class":88},[82,162669,93],{"class":92},[82,162671,2283],{"class":88},[82,162673,100],{"class":92},[82,162675,440],{"class":88},[82,162677,33362],{"class":92},[82,162679,162680,162682,162684,162686,162688,162690,162692,162695,162697,162699],{"class":84,"line":157},[82,162681,1888],{"class":112},[82,162683,12091],{"class":92},[82,162685,603],{"class":112},[82,162687,35013],{"class":88},[82,162689,93],{"class":92},[82,162691,2283],{"class":88},[82,162693,162694],{"class":92},", i ",[82,162696,2249],{"class":112},[82,162698,27703],{"class":88},[82,162700,33362],{"class":92},[82,162702,162703,162705,162707,162709,162711,162713,162715,162717,162719,162721,162723,162725,162727,162729,162731,162733,162735,162737,162739,162741,162743,162745,162747,162749,162751],{"class":84,"line":404},[82,162704,1901],{"class":88},[82,162706,93],{"class":92},[82,162708,2822],{"class":112},[82,162710,216],{"class":96},[82,162712,3645],{"class":88},[82,162714,3224],{"class":92},[82,162716,3695],{"class":88},[82,162718,3212],{"class":96},[82,162720,3645],{"class":88},[82,162722,3199],{"class":92},[82,162724,3695],{"class":88},[82,162726,113],{"class":96},[82,162728,3645],{"class":88},[82,162730,102699],{"class":92},[82,162732,3212],{"class":112},[82,162734,6006],{"class":92},[82,162736,3695],{"class":88},[82,162738,216],{"class":96},[82,162740,100],{"class":92},[82,162742,48365],{"class":108},[82,162744,113],{"class":112},[82,162746,216],{"class":96},[82,162748,3849],{"class":88},[82,162750,216],{"class":96},[82,162752,119],{"class":92},[82,162754,162755,162757],{"class":84,"line":413},[82,162756,611],{"class":88},[82,162758,4576],{"class":92},[19,162760,162761],{},"关键点：",[26,162763,162764,162770,162776,162782],{},[29,162765,162766,162767,162769],{},"外层 ",[32,162768,3199],{}," 控制行。",[29,162771,162772,162773,162775],{},"内层 ",[32,162774,3224],{}," 控制列。",[29,162777,162778,162779,162781],{},"每行结束后用 ",[32,162780,149014],{}," 换行。",[29,162783,162784,162787],{},[32,162785,162786],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162789,162791],{"id":162790},"_411-循环else","4.11 循环else",[19,162793,162794,162795,162797,162798,162800,162801,162803],{},"Python 的循环可以带 ",[32,162796,4304],{},"。当循环正常结束时执行 ",[32,162799,4304],{},"，如果被 ",[32,162802,4653],{}," 打断，则不执行。",[73,162805,162807],{"className":75,"code":162806,"language":77,"meta":78,"style":78},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,162808,162809,162829,162841,162852,162856,162862],{"__ignoreMap":78},[82,162810,162811,162813,162815,162817,162819,162821,162823,162825,162827],{"class":84,"line":85},[82,162812,597],{"class":112},[82,162814,12029],{"class":92},[82,162816,603],{"class":112},[82,162818,35013],{"class":88},[82,162820,93],{"class":92},[82,162822,2283],{"class":88},[82,162824,100],{"class":92},[82,162826,3102],{"class":88},[82,162828,33362],{"class":92},[82,162830,162831,162833,162835,162837,162839],{"class":84,"line":157},[82,162832,2219],{"class":112},[82,162834,12029],{"class":92},[82,162836,5548],{"class":112},[82,162838,4638],{"class":88},[82,162840,669],{"class":92},[82,162842,162843,162845,162847,162850],{"class":84,"line":404},[82,162844,1901],{"class":88},[82,162846,93],{"class":92},[82,162848,162849],{"class":96},"\"找到了\"",[82,162851,119],{"class":92},[82,162853,162854],{"class":84,"line":413},[82,162855,34199],{"class":112},[82,162857,162858,162860],{"class":84,"line":508},[82,162859,4304],{"class":112},[82,162861,669],{"class":92},[82,162863,162864,162866,162868,162871],{"class":84,"line":513},[82,162865,611],{"class":88},[82,162867,93],{"class":92},[82,162869,162870],{"class":96},"\"没找到\"",[82,162872,119],{"class":92},[19,162874,162875],{},"常用于搜索。",[73,162877,162879],{"className":75,"code":162878,"language":77,"meta":78,"style":78},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,162880,162881,162902,162911,162915,162927,162938,162948,162952,162958],{"__ignoreMap":78},[82,162882,162883,162886,162888,162890,162892,162894,162896,162898,162900],{"class":84,"line":85},[82,162884,162885],{"class":92},"names ",[82,162887,113],{"class":112},[82,162889,847],{"class":92},[82,162891,1360],{"class":96},[82,162893,100],{"class":92},[82,162895,1508],{"class":96},[82,162897,100],{"class":92},[82,162899,162236],{"class":96},[82,162901,875],{"class":92},[82,162903,162904,162906,162908],{"class":84,"line":157},[82,162905,114124],{"class":92},[82,162907,113],{"class":112},[82,162909,162910],{"class":96}," \"小李\"\n",[82,162912,162913],{"class":84,"line":404},[82,162914,486],{"emptyLinePlaceholder":485},[82,162916,162917,162919,162922,162924],{"class":84,"line":413},[82,162918,597],{"class":112},[82,162920,162921],{"class":92}," name ",[82,162923,603],{"class":112},[82,162925,162926],{"class":92}," names:\n",[82,162928,162929,162931,162933,162935],{"class":84,"line":508},[82,162930,2219],{"class":112},[82,162932,162921],{"class":92},[82,162934,5548],{"class":112},[82,162936,162937],{"class":92}," target:\n",[82,162939,162940,162942,162944,162946],{"class":84,"line":513},[82,162941,1901],{"class":88},[82,162943,93],{"class":92},[82,162945,162849],{"class":96},[82,162947,119],{"class":92},[82,162949,162950],{"class":84,"line":1388},[82,162951,34199],{"class":112},[82,162953,162954,162956],{"class":84,"line":1394},[82,162955,4304],{"class":112},[82,162957,669],{"class":92},[82,162959,162960,162962,162964,162966],{"class":84,"line":1399},[82,162961,611],{"class":88},[82,162963,93],{"class":92},[82,162965,162870],{"class":96},[82,162967,119],{"class":92},[14,162969,162971],{"id":162970},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162973,2091],{},[26,162975,162976,162979,162982],{},[29,162977,162978],{},"用户最多输入 3 次密码。",[29,162980,162981],{},"密码正确则登录成功。",[29,162983,162984],{},"3 次都错误则锁定账号。",[19,162986,2105],{},[73,162988,162990],{"className":75,"code":162989,"language":77,"meta":78,"style":78},"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",[32,162991,162992,163002,163006,163022,163038,163042,163054,163065,163069,163075,163100,163106],{"__ignoreMap":78},[82,162993,162994,162997,162999],{"class":84,"line":85},[82,162995,162996],{"class":92},"password ",[82,162998,113],{"class":112},[82,163000,163001],{"class":96}," \"123456\"\n",[82,163003,163004],{"class":84,"line":157},[82,163005,486],{"emptyLinePlaceholder":485},[82,163007,163008,163010,163012,163014,163016,163018,163020],{"class":84,"line":404},[82,163009,597],{"class":112},[82,163011,12029],{"class":92},[82,163013,603],{"class":112},[82,163015,35013],{"class":88},[82,163017,93],{"class":92},[82,163019,2841],{"class":88},[82,163021,33362],{"class":92},[82,163023,163024,163027,163029,163031,163033,163036],{"class":84,"line":413},[82,163025,163026],{"class":92},"    user_password ",[82,163028,113],{"class":112},[82,163030,63163],{"class":88},[82,163032,93],{"class":92},[82,163034,163035],{"class":96},"\"请输入密码:\"",[82,163037,119],{"class":92},[82,163039,163040],{"class":84,"line":508},[82,163041,486],{"emptyLinePlaceholder":485},[82,163043,163044,163046,163049,163051],{"class":84,"line":513},[82,163045,2219],{"class":112},[82,163047,163048],{"class":92}," user_password ",[82,163050,5548],{"class":112},[82,163052,163053],{"class":92}," password:\n",[82,163055,163056,163058,163060,163063],{"class":84,"line":1388},[82,163057,1901],{"class":88},[82,163059,93],{"class":92},[82,163061,163062],{"class":96},"\"登录成功\"",[82,163064,119],{"class":92},[82,163066,163067],{"class":84,"line":1394},[82,163068,34199],{"class":112},[82,163070,163071,163073],{"class":84,"line":1399},[82,163072,160528],{"class":112},[82,163074,669],{"class":92},[82,163076,163077,163079,163081,163083,163086,163089,163091,163093,163095,163098],{"class":84,"line":1430},[82,163078,1901],{"class":88},[82,163080,93],{"class":92},[82,163082,2822],{"class":112},[82,163084,163085],{"class":96},"\"密码错误，还剩",[82,163087,163088],{"class":88},"{2",[82,163090,54831],{"class":112},[82,163092,5630],{"class":92},[82,163094,3695],{"class":88},[82,163096,163097],{"class":96},"次机会\"",[82,163099,119],{"class":92},[82,163101,163102,163104],{"class":84,"line":1818},[82,163103,4304],{"class":112},[82,163105,669],{"class":92},[82,163107,163108,163110,163112,163115],{"class":84,"line":2082},[82,163109,611],{"class":88},[82,163111,93],{"class":92},[82,163113,163114],{"class":96},"\"账号已锁定\"",[82,163116,119],{"class":92},[14,163118,163120],{"id":163119},"_413-小案例菜单程序","4.13 小案例：菜单程序",[73,163122,163124],{"className":75,"code":163123,"language":77,"meta":78,"style":78},"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",[32,163125,163126,163134,163145,163156,163167,163178,163189,163193,163208,163212,163224,163235,163247,163258,163270,163281,163293,163303,163307,163313],{"__ignoreMap":78},[82,163127,163128,163130,163132],{"class":84,"line":85},[82,163129,111209],{"class":112},[82,163131,97843],{"class":88},[82,163133,669],{"class":92},[82,163135,163136,163138,163140,163143],{"class":84,"line":157},[82,163137,611],{"class":88},[82,163139,93],{"class":92},[82,163141,163142],{"class":96},"\"====== 菜单 ======\"",[82,163144,119],{"class":92},[82,163146,163147,163149,163151,163154],{"class":84,"line":404},[82,163148,611],{"class":88},[82,163150,93],{"class":92},[82,163152,163153],{"class":96},"\"1. 查询余额\"",[82,163155,119],{"class":92},[82,163157,163158,163160,163162,163165],{"class":84,"line":413},[82,163159,611],{"class":88},[82,163161,93],{"class":92},[82,163163,163164],{"class":96},"\"2. 存款\"",[82,163166,119],{"class":92},[82,163168,163169,163171,163173,163176],{"class":84,"line":508},[82,163170,611],{"class":88},[82,163172,93],{"class":92},[82,163174,163175],{"class":96},"\"3. 取款\"",[82,163177,119],{"class":92},[82,163179,163180,163182,163184,163187],{"class":84,"line":513},[82,163181,611],{"class":88},[82,163183,93],{"class":92},[82,163185,163186],{"class":96},"\"0. 退出\"",[82,163188,119],{"class":92},[82,163190,163191],{"class":84,"line":1388},[82,163192,486],{"emptyLinePlaceholder":485},[82,163194,163195,163198,163200,163202,163204,163206],{"class":84,"line":1394},[82,163196,163197],{"class":92},"    choice ",[82,163199,113],{"class":112},[82,163201,63163],{"class":88},[82,163203,93],{"class":92},[82,163205,155585],{"class":96},[82,163207,119],{"class":92},[82,163209,163210],{"class":84,"line":1399},[82,163211,486],{"emptyLinePlaceholder":485},[82,163213,163214,163216,163218,163220,163222],{"class":84,"line":1430},[82,163215,2219],{"class":112},[82,163217,155598],{"class":92},[82,163219,5548],{"class":112},[82,163221,155603],{"class":96},[82,163223,669],{"class":92},[82,163225,163226,163228,163230,163233],{"class":84,"line":1818},[82,163227,1901],{"class":88},[82,163229,93],{"class":92},[82,163231,163232],{"class":96},"\"余额为1000元\"",[82,163234,119],{"class":92},[82,163236,163237,163239,163241,163243,163245],{"class":84,"line":2082},[82,163238,41858],{"class":112},[82,163240,155598],{"class":92},[82,163242,5548],{"class":112},[82,163244,155622],{"class":96},[82,163246,669],{"class":92},[82,163248,163249,163251,163253,163256],{"class":84,"line":2233},[82,163250,1901],{"class":88},[82,163252,93],{"class":92},[82,163254,163255],{"class":96},"\"存款功能\"",[82,163257,119],{"class":92},[82,163259,163260,163262,163264,163266,163268],{"class":84,"line":2255},[82,163261,41858],{"class":112},[82,163263,155598],{"class":92},[82,163265,5548],{"class":112},[82,163267,155640],{"class":96},[82,163269,669],{"class":92},[82,163271,163272,163274,163276,163279],{"class":84,"line":2260},[82,163273,1901],{"class":88},[82,163275,93],{"class":92},[82,163277,163278],{"class":96},"\"取款功能\"",[82,163280,119],{"class":92},[82,163282,163283,163285,163287,163289,163291],{"class":84,"line":2298},[82,163284,41858],{"class":112},[82,163286,155598],{"class":92},[82,163288,5548],{"class":112},[82,163290,155694],{"class":96},[82,163292,669],{"class":92},[82,163294,163295,163297,163299,163301],{"class":84,"line":2303},[82,163296,1901],{"class":88},[82,163298,93],{"class":92},[82,163300,155705],{"class":96},[82,163302,119],{"class":92},[82,163304,163305],{"class":84,"line":2321},[82,163306,34199],{"class":112},[82,163308,163309,163311],{"class":84,"line":2533},[82,163310,160528],{"class":112},[82,163312,669],{"class":92},[82,163314,163315,163317,163319,163321],{"class":84,"line":2538},[82,163316,1901],{"class":88},[82,163318,93],{"class":92},[82,163320,155726],{"class":96},[82,163322,119],{"class":92},[19,163324,163325,163326,163328,163329,2611],{},"菜单类程序通常使用 ",[32,163327,162028],{},"，用户选择退出时 ",[32,163330,4653],{},[14,163332,163334],{"id":163333},"_414-易错点","4.14 易错点",[26,163336,163337,163342,163348,163356,163362],{},[29,163338,163339,163341],{},[32,163340,111209],{}," 循环必须更新控制变量。",[29,163343,163344,163347],{},[32,163345,163346],{},"range(1, 10)"," 不包含 10。",[29,163349,163350,163352,163353,163355],{},[32,163351,4653],{}," 结束整个循环，",[32,163354,157181],{}," 只跳过本轮。",[29,163357,163358,163359,163361],{},"嵌套循环中，",[32,163360,4653],{}," 只跳出当前所在的一层循环。",[29,163363,163364],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163366,163368],{"id":163367},"_415-本章练习","4.15 本章练习",[26,163370,163371,163374,163377,163380,163383],{},[29,163372,163373],{},"输出 1 到 100。",[29,163375,163376],{},"计算 1 到 100 的偶数和。",[29,163378,163379],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,163381,163382],{},"编写猜数字游戏，限制最多猜 7 次。",[29,163384,163385],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2671,163387,163388],{},"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":78,"searchDepth":157,"depth":157,"links":163390},[163391,163392,163393,163394,163395,163399,163400,163401,163402,163403,163404,163405,163406,163407,163408],{"id":161648,"depth":157,"text":161649},{"id":161678,"depth":157,"text":161679},{"id":161767,"depth":157,"text":161768},{"id":161861,"depth":157,"text":161862},{"id":162035,"depth":157,"text":162036,"children":163396},[163397,163398],{"id":162039,"depth":404,"text":162040},{"id":162103,"depth":404,"text":162104},{"id":162167,"depth":157,"text":162168},{"id":162261,"depth":157,"text":162262},{"id":162370,"depth":157,"text":162371},{"id":162566,"depth":157,"text":162567},{"id":162651,"depth":157,"text":162652},{"id":162790,"depth":157,"text":162791},{"id":162970,"depth":157,"text":162971},{"id":163119,"depth":157,"text":163120},{"id":163333,"depth":157,"text":163334},{"id":163367,"depth":157,"text":163368},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161640,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163415,"title":163416,"body":163417,"description":2699,"extension":2700,"meta":165422,"navigation":485,"path":165423,"seo":165424,"stem":165425,"__hash__":165426},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163418,"toc":165402},[163419,163422,163426,163429,163432,163446,163449,163463,163467,163469,163488,163490,163537,163539,163553,163557,163631,163634,163638,163641,163700,163708,163711,163764,163767,163771,163776,163831,163839,163889,163893,163898,163906,164005,164011,164015,164020,164023,164034,164075,164088,164092,164095,164131,164134,164147,164150,164210,164214,164218,164221,164272,164276,164279,164326,164332,164398,164401,164405,164408,164524,164527,164531,164534,164640,164644,164647,164685,164688,164730,164733,164793,164796,164800,165264,165267,165271,165298,165304,165365,165369,165399],[10,163420,163416],{"id":163421},"_5-函数基础",[14,163423,163425],{"id":163424},"_51-为什么需要函数","5.1 为什么需要函数",[19,163427,163428],{},"函数用于封装一段可以重复使用的代码。",[19,163430,163431],{},"不使用函数的问题：",[26,163433,163434,163437,163440,163443],{},[29,163435,163436],{},"重复代码多。",[29,163438,163439],{},"修改逻辑时容易漏改。",[29,163441,163442],{},"主流程不清晰。",[29,163444,163445],{},"程序越写越长，难以维护。",[19,163447,163448],{},"使用函数后的好处：",[26,163450,163451,163454,163457,163460],{},[29,163452,163453],{},"提高复用性。",[29,163455,163456],{},"提高可读性。",[29,163458,163459],{},"便于调试。",[29,163461,163462],{},"便于分工。",[14,163464,163466],{"id":163465},"_52-函数定义","5.2 函数定义",[19,163468,246],{},[73,163470,163472],{"className":75,"code":163471,"language":77,"meta":78,"style":78},"def 函数名():\n    函数体\n",[32,163473,163474,163483],{"__ignoreMap":78},[82,163475,163476,163478,163481],{"class":84,"line":85},[82,163477,2381],{"class":112},[82,163479,163480],{"class":2384}," 函数名",[82,163482,2388],{"class":92},[82,163484,163485],{"class":84,"line":157},[82,163486,163487],{"class":92},"    函数体\n",[19,163489,17721],{},[73,163491,163493],{"className":75,"code":163492,"language":77,"meta":78,"style":78},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[32,163494,163495,163504,163514,163524,163528,163532],{"__ignoreMap":78},[82,163496,163497,163499,163502],{"class":84,"line":85},[82,163498,2381],{"class":112},[82,163500,163501],{"class":2384}," say_hello",[82,163503,2388],{"class":92},[82,163505,163506,163508,163510,163512],{"class":84,"line":157},[82,163507,611],{"class":88},[82,163509,93],{"class":92},[82,163511,8436],{"class":96},[82,163513,119],{"class":92},[82,163515,163516,163518,163520,163522],{"class":84,"line":404},[82,163517,611],{"class":88},[82,163519,93],{"class":92},[82,163521,149181],{"class":96},[82,163523,119],{"class":92},[82,163525,163526],{"class":84,"line":413},[82,163527,486],{"emptyLinePlaceholder":485},[82,163529,163530],{"class":84,"line":508},[82,163531,486],{"emptyLinePlaceholder":485},[82,163533,163534],{"class":84,"line":513},[82,163535,163536],{"class":92},"say_hello()\n",[19,163538,11616],{},[26,163540,163541,163544,163547,163550],{},[29,163542,163543],{},"函数必须先定义，再调用。",[29,163545,163546],{},"函数名遵循变量命名规则。",[29,163548,163549],{},"函数体需要缩进。",[29,163551,163552],{},"函数不调用就不会执行。",[14,163554,163556],{"id":163555},"_53-函数调用","5.3 函数调用",[73,163558,163560],{"className":75,"code":163559,"language":77,"meta":78,"style":78},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[32,163561,163562,163571,163582,163593,163604,163614,163618,163622,163627],{"__ignoreMap":78},[82,163563,163564,163566,163569],{"class":84,"line":85},[82,163565,2381],{"class":112},[82,163567,163568],{"class":2384}," print_menu",[82,163570,2388],{"class":92},[82,163572,163573,163575,163577,163580],{"class":84,"line":157},[82,163574,611],{"class":88},[82,163576,93],{"class":92},[82,163578,163579],{"class":96},"\"1. 查询\"",[82,163581,119],{"class":92},[82,163583,163584,163586,163588,163591],{"class":84,"line":404},[82,163585,611],{"class":88},[82,163587,93],{"class":92},[82,163589,163590],{"class":96},"\"2. 添加\"",[82,163592,119],{"class":92},[82,163594,163595,163597,163599,163602],{"class":84,"line":413},[82,163596,611],{"class":88},[82,163598,93],{"class":92},[82,163600,163601],{"class":96},"\"3. 删除\"",[82,163603,119],{"class":92},[82,163605,163606,163608,163610,163612],{"class":84,"line":508},[82,163607,611],{"class":88},[82,163609,93],{"class":92},[82,163611,163186],{"class":96},[82,163613,119],{"class":92},[82,163615,163616],{"class":84,"line":513},[82,163617,486],{"emptyLinePlaceholder":485},[82,163619,163620],{"class":84,"line":1388},[82,163621,486],{"emptyLinePlaceholder":485},[82,163623,163624],{"class":84,"line":1394},[82,163625,163626],{"class":92},"print_menu()\n",[82,163628,163629],{"class":84,"line":1399},[82,163630,163626],{"class":92},[19,163632,163633],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163635,163637],{"id":163636},"_54-参数","5.4 参数",[19,163639,163640],{},"参数用于向函数传递数据。",[73,163642,163644],{"className":75,"code":163643,"language":77,"meta":78,"style":78},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[32,163645,163646,163655,163675,163679,163683,163692],{"__ignoreMap":78},[82,163647,163648,163650,163652],{"class":84,"line":85},[82,163649,2381],{"class":112},[82,163651,163501],{"class":2384},[82,163653,163654],{"class":92},"(name):\n",[82,163656,163657,163659,163661,163663,163665,163667,163669,163671,163673],{"class":84,"line":157},[82,163658,611],{"class":88},[82,163660,93],{"class":92},[82,163662,2822],{"class":112},[82,163664,159560],{"class":96},[82,163666,3645],{"class":88},[82,163668,82364],{"class":92},[82,163670,3695],{"class":88},[82,163672,216],{"class":96},[82,163674,119],{"class":92},[82,163676,163677],{"class":84,"line":404},[82,163678,486],{"emptyLinePlaceholder":485},[82,163680,163681],{"class":84,"line":413},[82,163682,486],{"emptyLinePlaceholder":485},[82,163684,163685,163688,163690],{"class":84,"line":508},[82,163686,163687],{"class":92},"say_hello(",[82,163689,1360],{"class":96},[82,163691,119],{"class":92},[82,163693,163694,163696,163698],{"class":84,"line":513},[82,163695,163687],{"class":92},[82,163697,1508],{"class":96},[82,163699,119],{"class":92},[19,163701,163702,163704,163705,163707],{},[32,163703,82364],{}," 是形参，",[32,163706,1360],{}," 是实参。",[19,163709,163710],{},"多个参数：",[73,163712,163714],{"className":75,"code":163713,"language":77,"meta":78,"style":78},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[32,163715,163716,163724,163737,163743,163747,163751],{"__ignoreMap":78},[82,163717,163718,163720,163722],{"class":84,"line":85},[82,163719,2381],{"class":112},[82,163721,7802],{"class":2384},[82,163723,153618],{"class":92},[82,163725,163726,163729,163731,163733,163735],{"class":84,"line":157},[82,163727,163728],{"class":92},"    result ",[82,163730,113],{"class":112},[82,163732,13459],{"class":92},[82,163734,2249],{"class":112},[82,163736,153629],{"class":92},[82,163738,163739,163741],{"class":84,"line":404},[82,163740,611],{"class":88},[82,163742,79139],{"class":92},[82,163744,163745],{"class":84,"line":413},[82,163746,486],{"emptyLinePlaceholder":485},[82,163748,163749],{"class":84,"line":508},[82,163750,486],{"emptyLinePlaceholder":485},[82,163752,163753,163756,163758,163760,163762],{"class":84,"line":513},[82,163754,163755],{"class":92},"add(",[82,163757,440],{"class":88},[82,163759,100],{"class":92},[82,163761,3451],{"class":88},[82,163763,119],{"class":92},[19,163765,163766],{},"调用时参数数量必须匹配。",[14,163768,163770],{"id":163769},"_55-返回值","5.5 返回值",[19,163772,163773,163775],{},[32,163774,19631],{}," 用于把函数内部的结果返回给调用者。",[73,163777,163779],{"className":75,"code":163778,"language":77,"meta":78,"style":78},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[32,163780,163781,163789,163799,163803,163807,163825],{"__ignoreMap":78},[82,163782,163783,163785,163787],{"class":84,"line":85},[82,163784,2381],{"class":112},[82,163786,7802],{"class":2384},[82,163788,153618],{"class":92},[82,163790,163791,163793,163795,163797],{"class":84,"line":157},[82,163792,6685],{"class":112},[82,163794,13459],{"class":92},[82,163796,2249],{"class":112},[82,163798,153629],{"class":92},[82,163800,163801],{"class":84,"line":404},[82,163802,486],{"emptyLinePlaceholder":485},[82,163804,163805],{"class":84,"line":413},[82,163806,486],{"emptyLinePlaceholder":485},[82,163808,163809,163812,163814,163817,163819,163821,163823],{"class":84,"line":508},[82,163810,163811],{"class":92},"result ",[82,163813,113],{"class":112},[82,163815,163816],{"class":92}," add(",[82,163818,440],{"class":88},[82,163820,100],{"class":92},[82,163822,3451],{"class":88},[82,163824,119],{"class":92},[82,163826,163827,163829],{"class":84,"line":513},[82,163828,407],{"class":88},[82,163830,79139],{"class":92},[19,163832,163833,163834,163836,163837,2611],{},"如果函数没有写 ",[32,163835,19631],{},"，默认返回 ",[32,163838,98237],{},[73,163840,163842],{"className":75,"code":163841,"language":77,"meta":78,"style":78},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[32,163843,163844,163852,163862,163866,163870,163879],{"__ignoreMap":78},[82,163845,163846,163848,163850],{"class":84,"line":85},[82,163847,2381],{"class":112},[82,163849,163501],{"class":2384},[82,163851,2388],{"class":92},[82,163853,163854,163856,163858,163860],{"class":84,"line":157},[82,163855,611],{"class":88},[82,163857,93],{"class":92},[82,163859,8436],{"class":96},[82,163861,119],{"class":92},[82,163863,163864],{"class":84,"line":404},[82,163865,486],{"emptyLinePlaceholder":485},[82,163867,163868],{"class":84,"line":413},[82,163869,486],{"emptyLinePlaceholder":485},[82,163871,163872,163874,163876],{"class":84,"line":508},[82,163873,163811],{"class":92},[82,163875,113],{"class":112},[82,163877,163878],{"class":92}," say_hello()\n",[82,163880,163881,163883,163886],{"class":84,"line":513},[82,163882,407],{"class":88},[82,163884,163885],{"class":92},"(result)  ",[82,163887,163888],{"class":2828},"# None\n",[14,163890,163892],{"id":163891},"_56-return的作用","5.6 return的作用",[19,163894,163895,163897],{},[32,163896,19631],{}," 有两个作用：",[26,163899,163900,163903],{},[29,163901,163902],{},"返回结果。",[29,163904,163905],{},"结束函数。",[73,163907,163909],{"className":75,"code":163908,"language":77,"meta":78,"style":78},"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",[32,163910,163911,163921,163933,163940,163944,163956,163963,163967,163974,163978,163982,163993],{"__ignoreMap":78},[82,163912,163913,163915,163918],{"class":84,"line":85},[82,163914,2381],{"class":112},[82,163916,163917],{"class":2384}," check_age",[82,163919,163920],{"class":92},"(age):\n",[82,163922,163923,163925,163927,163929,163931],{"class":84,"line":157},[82,163924,2219],{"class":112},[82,163926,18292],{"class":92},[82,163928,3659],{"class":112},[82,163930,6688],{"class":88},[82,163932,669],{"class":92},[82,163934,163935,163937],{"class":84,"line":404},[82,163936,2405],{"class":112},[82,163938,163939],{"class":96}," \"年龄不合法\"\n",[82,163941,163942],{"class":84,"line":413},[82,163943,486],{"emptyLinePlaceholder":485},[82,163945,163946,163948,163950,163952,163954],{"class":84,"line":508},[82,163947,2219],{"class":112},[82,163949,18292],{"class":92},[82,163951,4313],{"class":112},[82,163953,158794],{"class":88},[82,163955,669],{"class":92},[82,163957,163958,163960],{"class":84,"line":513},[82,163959,2405],{"class":112},[82,163961,163962],{"class":96}," \"成年人\"\n",[82,163964,163965],{"class":84,"line":1388},[82,163966,486],{"emptyLinePlaceholder":485},[82,163968,163969,163971],{"class":84,"line":1394},[82,163970,6685],{"class":112},[82,163972,163973],{"class":96}," \"未成年人\"\n",[82,163975,163976],{"class":84,"line":1399},[82,163977,486],{"emptyLinePlaceholder":485},[82,163979,163980],{"class":84,"line":1430},[82,163981,486],{"emptyLinePlaceholder":485},[82,163983,163984,163986,163989,163991],{"class":84,"line":1818},[82,163985,407],{"class":88},[82,163987,163988],{"class":92},"(check_age(",[82,163990,3451],{"class":88},[82,163992,33074],{"class":92},[82,163994,163995,163997,163999,164001,164003],{"class":84,"line":2082},[82,163996,407],{"class":88},[82,163998,163988],{"class":92},[82,164000,3288],{"class":112},[82,164002,2283],{"class":88},[82,164004,33074],{"class":92},[19,164006,164007,164008,164010],{},"函数执行到 ",[32,164009,19631],{}," 后，后面的代码不会继续执行。",[14,164012,164014],{"id":164013},"_57-none","5.7 None",[19,164016,164017,164019],{},[32,164018,98237],{}," 表示空值或没有结果。",[19,164021,164022],{},"常见使用场景：",[26,164024,164025,164028,164031],{},[29,164026,164027],{},"函数没有返回值。",[29,164029,164030],{},"变量暂时没有具体值。",[29,164032,164033],{},"表示查询不到结果。",[73,164035,164037],{"className":75,"code":164036,"language":77,"meta":78,"style":78},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[32,164038,164039,164047,164051,164064],{"__ignoreMap":78},[82,164040,164041,164043,164045],{"class":84,"line":85},[82,164042,163811],{"class":92},[82,164044,113],{"class":112},[82,164046,154686],{"class":88},[82,164048,164049],{"class":84,"line":157},[82,164050,486],{"emptyLinePlaceholder":485},[82,164052,164053,164055,164058,164060,164062],{"class":84,"line":404},[82,164054,1237],{"class":112},[82,164056,164057],{"class":92}," result ",[82,164059,41493],{"class":112},[82,164061,41498],{"class":88},[82,164063,669],{"class":92},[82,164065,164066,164068,164070,164073],{"class":84,"line":413},[82,164067,611],{"class":88},[82,164069,93],{"class":92},[82,164071,164072],{"class":96},"\"没有数据\"",[82,164074,119],{"class":92},[19,164076,164077,164078,164080,164081,164084,164085,2611],{},"判断 ",[32,164079,98237],{}," 推荐使用 ",[32,164082,164083],{},"is None","，不要写成 ",[32,164086,164087],{},"== None",[14,164089,164091],{"id":164090},"_58-函数文档字符串","5.8 函数文档字符串",[19,164093,164094],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[73,164096,164098],{"className":75,"code":164097,"language":77,"meta":78,"style":78},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[32,164099,164100,164110,164115],{"__ignoreMap":78},[82,164101,164102,164104,164107],{"class":84,"line":85},[82,164103,2381],{"class":112},[82,164105,164106],{"class":2384}," calculate_bmi",[82,164108,164109],{"class":92},"(weight, height):\n",[82,164111,164112],{"class":84,"line":157},[82,164113,164114],{"class":96},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[82,164116,164117,164119,164122,164124,164127,164129],{"class":84,"line":404},[82,164118,6685],{"class":112},[82,164120,164121],{"class":92}," weight ",[82,164123,1147],{"class":112},[82,164125,164126],{"class":92}," height ",[82,164128,13251],{"class":112},[82,164130,50287],{"class":88},[19,164132,164133],{},"查看说明：",[73,164135,164137],{"className":75,"code":164136,"language":77,"meta":78,"style":78},"help(calculate_bmi)\n",[32,164138,164139],{"__ignoreMap":78},[82,164140,164141,164144],{"class":84,"line":85},[82,164142,164143],{"class":88},"help",[82,164145,164146],{"class":92},"(calculate_bmi)\n",[19,164148,164149],{},"较完整的写法：",[73,164151,164153],{"className":75,"code":164152,"language":77,"meta":78,"style":78},"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",[32,164154,164155,164163,164168,164173,164177,164182,164187,164192,164196],{"__ignoreMap":78},[82,164156,164157,164159,164161],{"class":84,"line":85},[82,164158,2381],{"class":112},[82,164160,164106],{"class":2384},[82,164162,164109],{"class":92},[82,164164,164165],{"class":84,"line":157},[82,164166,164167],{"class":96},"    \"\"\"\n",[82,164169,164170],{"class":84,"line":404},[82,164171,164172],{"class":96},"    计算BMI。\n",[82,164174,164175],{"class":84,"line":413},[82,164176,486],{"emptyLinePlaceholder":485},[82,164178,164179],{"class":84,"line":508},[82,164180,164181],{"class":96},"    :param weight: 体重，单位kg\n",[82,164183,164184],{"class":84,"line":513},[82,164185,164186],{"class":96},"    :param height: 身高，单位m\n",[82,164188,164189],{"class":84,"line":1388},[82,164190,164191],{"class":96},"    :return: BMI数值\n",[82,164193,164194],{"class":84,"line":1394},[82,164195,164167],{"class":96},[82,164197,164198,164200,164202,164204,164206,164208],{"class":84,"line":1399},[82,164199,6685],{"class":112},[82,164201,164121],{"class":92},[82,164203,1147],{"class":112},[82,164205,164126],{"class":92},[82,164207,13251],{"class":112},[82,164209,50287],{"class":88},[14,164211,164213],{"id":164212},"_59-变量作用域","5.9 变量作用域",[65,164215,164217],{"id":164216},"_591-局部变量","5.9.1 局部变量",[19,164219,164220],{},"在函数内部定义的变量，只能在函数内部使用。",[73,164222,164224],{"className":75,"code":164223,"language":77,"meta":78,"style":78},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[32,164225,164226,164235,164243,164249,164253,164257,164262],{"__ignoreMap":78},[82,164227,164228,164230,164233],{"class":84,"line":85},[82,164229,2381],{"class":112},[82,164231,164232],{"class":2384}," test",[82,164234,2388],{"class":92},[82,164236,164237,164239,164241],{"class":84,"line":157},[82,164238,48157],{"class":92},[82,164240,113],{"class":112},[82,164242,60986],{"class":88},[82,164244,164245,164247],{"class":84,"line":404},[82,164246,611],{"class":88},[82,164248,2785],{"class":92},[82,164250,164251],{"class":84,"line":413},[82,164252,486],{"emptyLinePlaceholder":485},[82,164254,164255],{"class":84,"line":508},[82,164256,486],{"emptyLinePlaceholder":485},[82,164258,164259],{"class":84,"line":513},[82,164260,164261],{"class":92},"test()\n",[82,164263,164264,164266,164269],{"class":84,"line":1388},[82,164265,407],{"class":88},[82,164267,164268],{"class":92},"(num)  ",[82,164270,164271],{"class":2828},"# 报错\n",[65,164273,164275],{"id":164274},"_592-全局变量","5.9.2 全局变量",[19,164277,164278],{},"在函数外部定义的变量，可以在函数内部读取。",[73,164280,164282],{"className":75,"code":164281,"language":77,"meta":78,"style":78},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[32,164283,164284,164292,164296,164300,164308,164314,164318,164322],{"__ignoreMap":78},[82,164285,164286,164288,164290],{"class":84,"line":85},[82,164287,149078],{"class":92},[82,164289,113],{"class":112},[82,164291,151881],{"class":96},[82,164293,164294],{"class":84,"line":157},[82,164295,486],{"emptyLinePlaceholder":485},[82,164297,164298],{"class":84,"line":404},[82,164299,486],{"emptyLinePlaceholder":485},[82,164301,164302,164304,164306],{"class":84,"line":413},[82,164303,2381],{"class":112},[82,164305,163501],{"class":2384},[82,164307,2388],{"class":92},[82,164309,164310,164312],{"class":84,"line":508},[82,164311,611],{"class":88},[82,164313,153186],{"class":92},[82,164315,164316],{"class":84,"line":513},[82,164317,486],{"emptyLinePlaceholder":485},[82,164319,164320],{"class":84,"line":1388},[82,164321,486],{"emptyLinePlaceholder":485},[82,164323,164324],{"class":84,"line":1394},[82,164325,163536],{"class":92},[19,164327,164328,164329,2611],{},"如果要在函数内部修改全局变量，需要 ",[32,164330,164331],{},"global",[73,164333,164335],{"className":75,"code":164334,"language":77,"meta":78,"style":78},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[32,164336,164337,164345,164349,164353,164362,164370,164378,164382,164386,164391],{"__ignoreMap":78},[82,164338,164339,164341,164343],{"class":84,"line":85},[82,164340,149233],{"class":92},[82,164342,113],{"class":112},[82,164344,49897],{"class":88},[82,164346,164347],{"class":84,"line":157},[82,164348,486],{"emptyLinePlaceholder":485},[82,164350,164351],{"class":84,"line":404},[82,164352,486],{"emptyLinePlaceholder":485},[82,164354,164355,164357,164360],{"class":84,"line":413},[82,164356,2381],{"class":112},[82,164358,164359],{"class":2384}," add_count",[82,164361,2388],{"class":92},[82,164363,164364,164367],{"class":84,"line":508},[82,164365,164366],{"class":112},"    global",[82,164368,164369],{"class":92}," count\n",[82,164371,164372,164374,164376],{"class":84,"line":513},[82,164373,161939],{"class":92},[82,164375,12068],{"class":112},[82,164377,2252],{"class":88},[82,164379,164380],{"class":84,"line":1388},[82,164381,486],{"emptyLinePlaceholder":485},[82,164383,164384],{"class":84,"line":1394},[82,164385,486],{"emptyLinePlaceholder":485},[82,164387,164388],{"class":84,"line":1399},[82,164389,164390],{"class":92},"add_count()\n",[82,164392,164393,164395],{"class":84,"line":1430},[82,164394,407],{"class":88},[82,164396,164397],{"class":92},"(count)\n",[19,164399,164400],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164402,164404],{"id":164403},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164406,164407],{},"一个函数中可以调用另一个函数。",[73,164409,164411],{"className":75,"code":164410,"language":77,"meta":78,"style":78},"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",[32,164412,164413,164422,164436,164440,164444,164453,164458,164478,164499,164503,164507,164511],{"__ignoreMap":78},[82,164414,164415,164417,164420],{"class":84,"line":85},[82,164416,2381],{"class":112},[82,164418,164419],{"class":2384}," print_line",[82,164421,2388],{"class":92},[82,164423,164424,164426,164428,164430,164432,164434],{"class":84,"line":157},[82,164425,611],{"class":88},[82,164427,93],{"class":92},[82,164429,35052],{"class":96},[82,164431,9110],{"class":112},[82,164433,81219],{"class":88},[82,164435,119],{"class":92},[82,164437,164438],{"class":84,"line":404},[82,164439,486],{"emptyLinePlaceholder":485},[82,164441,164442],{"class":84,"line":413},[82,164443,486],{"emptyLinePlaceholder":485},[82,164445,164446,164448,164451],{"class":84,"line":508},[82,164447,2381],{"class":112},[82,164449,164450],{"class":2384}," print_info",[82,164452,151903],{"class":92},[82,164454,164455],{"class":84,"line":513},[82,164456,164457],{"class":92},"    print_line()\n",[82,164459,164460,164462,164464,164466,164468,164470,164472,164474,164476],{"class":84,"line":1388},[82,164461,611],{"class":88},[82,164463,93],{"class":92},[82,164465,2822],{"class":112},[82,164467,159188],{"class":96},[82,164469,3645],{"class":88},[82,164471,82364],{"class":92},[82,164473,3695],{"class":88},[82,164475,216],{"class":96},[82,164477,119],{"class":92},[82,164479,164480,164482,164484,164486,164489,164491,164493,164495,164497],{"class":84,"line":1394},[82,164481,611],{"class":88},[82,164483,93],{"class":92},[82,164485,2822],{"class":112},[82,164487,164488],{"class":96},"\"年龄:",[82,164490,3645],{"class":88},[82,164492,72777],{"class":92},[82,164494,3695],{"class":88},[82,164496,216],{"class":96},[82,164498,119],{"class":92},[82,164500,164501],{"class":84,"line":1399},[82,164502,164457],{"class":92},[82,164504,164505],{"class":84,"line":1430},[82,164506,486],{"emptyLinePlaceholder":485},[82,164508,164509],{"class":84,"line":1818},[82,164510,486],{"emptyLinePlaceholder":485},[82,164512,164513,164516,164518,164520,164522],{"class":84,"line":2082},[82,164514,164515],{"class":92},"print_info(",[82,164517,1360],{"class":96},[82,164519,100],{"class":92},[82,164521,1373],{"class":88},[82,164523,119],{"class":92},[19,164525,164526],{},"这种方式可以把小功能组合成大功能。",[14,164528,164530],{"id":164529},"_511-参数检查","5.11 参数检查",[19,164532,164533],{},"函数内部可以检查参数是否合法。",[73,164535,164537],{"className":75,"code":164536,"language":77,"meta":78,"style":78},"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",[32,164538,164539,164548,164560,164566,164576,164580,164584,164601,164605,164617,164628,164634],{"__ignoreMap":78},[82,164540,164541,164543,164546],{"class":84,"line":85},[82,164542,2381],{"class":112},[82,164544,164545],{"class":2384}," divide",[82,164547,153618],{"class":92},[82,164549,164550,164552,164554,164556,164558],{"class":84,"line":157},[82,164551,2219],{"class":112},[82,164553,13472],{"class":92},[82,164555,5548],{"class":112},[82,164557,6688],{"class":88},[82,164559,669],{"class":92},[82,164561,164562,164564],{"class":84,"line":404},[82,164563,2405],{"class":112},[82,164565,154686],{"class":88},[82,164567,164568,164570,164572,164574],{"class":84,"line":413},[82,164569,6685],{"class":112},[82,164571,13459],{"class":92},[82,164573,1147],{"class":112},[82,164575,153629],{"class":92},[82,164577,164578],{"class":84,"line":508},[82,164579,486],{"emptyLinePlaceholder":485},[82,164581,164582],{"class":84,"line":513},[82,164583,486],{"emptyLinePlaceholder":485},[82,164585,164586,164588,164590,164593,164595,164597,164599],{"class":84,"line":1388},[82,164587,163811],{"class":92},[82,164589,113],{"class":112},[82,164591,164592],{"class":92}," divide(",[82,164594,440],{"class":88},[82,164596,100],{"class":92},[82,164598,2244],{"class":88},[82,164600,119],{"class":92},[82,164602,164603],{"class":84,"line":1394},[82,164604,486],{"emptyLinePlaceholder":485},[82,164606,164607,164609,164611,164613,164615],{"class":84,"line":1399},[82,164608,1237],{"class":112},[82,164610,164057],{"class":92},[82,164612,41493],{"class":112},[82,164614,41498],{"class":88},[82,164616,669],{"class":92},[82,164618,164619,164621,164623,164626],{"class":84,"line":1430},[82,164620,611],{"class":88},[82,164622,93],{"class":92},[82,164624,164625],{"class":96},"\"除数不能为0\"",[82,164627,119],{"class":92},[82,164629,164630,164632],{"class":84,"line":1818},[82,164631,4304],{"class":112},[82,164633,669],{"class":92},[82,164635,164636,164638],{"class":84,"line":2082},[82,164637,611],{"class":88},[82,164639,79139],{"class":92},[14,164641,164643],{"id":164642},"_512-类型提示","5.12 类型提示",[19,164645,164646],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[73,164648,164650],{"className":75,"code":164649,"language":77,"meta":78,"style":78},"def add(a: int, b: int) -> int:\n    return a + b\n",[32,164651,164652,164675],{"__ignoreMap":78},[82,164653,164654,164656,164658,164661,164663,164666,164668,164671,164673],{"class":84,"line":85},[82,164655,2381],{"class":112},[82,164657,7802],{"class":2384},[82,164659,164660],{"class":92},"(a: ",[82,164662,2776],{"class":88},[82,164664,164665],{"class":92},", b: ",[82,164667,2776],{"class":88},[82,164669,164670],{"class":92},") -> ",[82,164672,2776],{"class":88},[82,164674,669],{"class":92},[82,164676,164677,164679,164681,164683],{"class":84,"line":157},[82,164678,6685],{"class":112},[82,164680,13459],{"class":92},[82,164682,2249],{"class":112},[82,164684,153629],{"class":92},[19,164686,164687],{},"字符串参数：",[73,164689,164691],{"className":75,"code":164690,"language":77,"meta":78,"style":78},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[32,164692,164693,164710],{"__ignoreMap":78},[82,164694,164695,164697,164699,164702,164704,164706,164708],{"class":84,"line":85},[82,164696,2381],{"class":112},[82,164698,163501],{"class":2384},[82,164700,164701],{"class":92},"(name: ",[82,164703,3918],{"class":88},[82,164705,164670],{"class":92},[82,164707,98237],{"class":88},[82,164709,669],{"class":92},[82,164711,164712,164714,164716,164718,164720,164722,164724,164726,164728],{"class":84,"line":157},[82,164713,611],{"class":88},[82,164715,93],{"class":92},[82,164717,2822],{"class":112},[82,164719,159560],{"class":96},[82,164721,3645],{"class":88},[82,164723,82364],{"class":92},[82,164725,3695],{"class":88},[82,164727,216],{"class":96},[82,164729,119],{"class":92},[19,164731,164732],{},"列表参数：",[73,164734,164736],{"className":75,"code":164735,"language":77,"meta":78,"style":78},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[32,164737,164738,164757,164765,164777,164786],{"__ignoreMap":78},[82,164739,164740,164742,164745,164748,164750,164753,164755],{"class":84,"line":85},[82,164741,2381],{"class":112},[82,164743,164744],{"class":2384}," get_total",[82,164746,164747],{"class":92},"(numbers: list[",[82,164749,2776],{"class":88},[82,164751,164752],{"class":92},"]) -> ",[82,164754,2776],{"class":88},[82,164756,669],{"class":92},[82,164758,164759,164761,164763],{"class":84,"line":157},[82,164760,161813],{"class":92},[82,164762,113],{"class":112},[82,164764,49897],{"class":88},[82,164766,164767,164769,164772,164774],{"class":84,"line":404},[82,164768,1888],{"class":112},[82,164770,164771],{"class":92}," number ",[82,164773,603],{"class":112},[82,164775,164776],{"class":92}," numbers:\n",[82,164778,164779,164781,164783],{"class":84,"line":413},[82,164780,162487],{"class":92},[82,164782,12068],{"class":112},[82,164784,164785],{"class":92}," number\n",[82,164787,164788,164790],{"class":84,"line":508},[82,164789,6685],{"class":112},[82,164791,164792],{"class":92}," total\n",[19,164794,164795],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164797,164799],{"id":164798},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[73,164801,164803],{"className":75,"code":164802,"language":77,"meta":78,"style":78},"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",[32,164804,164805,164815,164819,164823,164831,164842,164852,164862,164872,164882,164886,164890,164899,164921,164925,164929,164938,164944,164964,164976,164987,164991,165000,165011,165016,165020,165024,165033,165039,165058,165070,165080,165084,165095,165105,165109,165117,165128,165132,165136,165140,165148,165153,165167,165171,165183,165188,165200,165205,165217,165222,165234,165244,165248,165254],{"__ignoreMap":78},[82,164806,164807,164810,164812],{"class":84,"line":85},[82,164808,164809],{"class":92},"balance ",[82,164811,113],{"class":112},[82,164813,164814],{"class":88}," 1000\n",[82,164816,164817],{"class":84,"line":157},[82,164818,486],{"emptyLinePlaceholder":485},[82,164820,164821],{"class":84,"line":404},[82,164822,486],{"emptyLinePlaceholder":485},[82,164824,164825,164827,164829],{"class":84,"line":413},[82,164826,2381],{"class":112},[82,164828,154547],{"class":2384},[82,164830,2388],{"class":92},[82,164832,164833,164835,164837,164840],{"class":84,"line":508},[82,164834,611],{"class":88},[82,164836,93],{"class":92},[82,164838,164839],{"class":96},"\"====== ATM ======\"",[82,164841,119],{"class":92},[82,164843,164844,164846,164848,164850],{"class":84,"line":513},[82,164845,611],{"class":88},[82,164847,93],{"class":92},[82,164849,163153],{"class":96},[82,164851,119],{"class":92},[82,164853,164854,164856,164858,164860],{"class":84,"line":1388},[82,164855,611],{"class":88},[82,164857,93],{"class":92},[82,164859,163164],{"class":96},[82,164861,119],{"class":92},[82,164863,164864,164866,164868,164870],{"class":84,"line":1394},[82,164865,611],{"class":88},[82,164867,93],{"class":92},[82,164869,163175],{"class":96},[82,164871,119],{"class":92},[82,164873,164874,164876,164878,164880],{"class":84,"line":1399},[82,164875,611],{"class":88},[82,164877,93],{"class":92},[82,164879,163186],{"class":96},[82,164881,119],{"class":92},[82,164883,164884],{"class":84,"line":1430},[82,164885,486],{"emptyLinePlaceholder":485},[82,164887,164888],{"class":84,"line":1818},[82,164889,486],{"emptyLinePlaceholder":485},[82,164891,164892,164894,164897],{"class":84,"line":2082},[82,164893,2381],{"class":112},[82,164895,164896],{"class":2384}," show_balance",[82,164898,2388],{"class":92},[82,164900,164901,164903,164905,164907,164910,164912,164915,164917,164919],{"class":84,"line":2233},[82,164902,611],{"class":88},[82,164904,93],{"class":92},[82,164906,2822],{"class":112},[82,164908,164909],{"class":96},"\"当前余额:",[82,164911,3645],{"class":88},[82,164913,164914],{"class":92},"balance",[82,164916,3695],{"class":88},[82,164918,159518],{"class":96},[82,164920,119],{"class":92},[82,164922,164923],{"class":84,"line":2255},[82,164924,486],{"emptyLinePlaceholder":485},[82,164926,164927],{"class":84,"line":2260},[82,164928,486],{"emptyLinePlaceholder":485},[82,164930,164931,164933,164936],{"class":84,"line":2298},[82,164932,2381],{"class":112},[82,164934,164935],{"class":2384}," save_money",[82,164937,2388],{"class":92},[82,164939,164940,164942],{"class":84,"line":2303},[82,164941,164366],{"class":112},[82,164943,152625],{"class":92},[82,164945,164946,164949,164951,164953,164955,164957,164959,164962],{"class":84,"line":2321},[82,164947,164948],{"class":92},"    money ",[82,164950,113],{"class":112},[82,164952,112343],{"class":88},[82,164954,93],{"class":92},[82,164956,56381],{"class":88},[82,164958,93],{"class":92},[82,164960,164961],{"class":96},"\"请输入存款金额:\"",[82,164963,33074],{"class":92},[82,164965,164966,164968,164970,164972,164974],{"class":84,"line":2533},[82,164967,2219],{"class":112},[82,164969,152668],{"class":92},[82,164971,4202],{"class":112},[82,164973,6688],{"class":88},[82,164975,669],{"class":92},[82,164977,164978,164980,164982,164985],{"class":84,"line":2538},[82,164979,1901],{"class":88},[82,164981,93],{"class":92},[82,164983,164984],{"class":96},"\"金额必须大于0\"",[82,164986,119],{"class":92},[82,164988,164989],{"class":84,"line":2548},[82,164990,154875],{"class":112},[82,164992,164993,164996,164998],{"class":84,"line":2579},[82,164994,164995],{"class":92},"    balance ",[82,164997,12068],{"class":112},[82,164999,152701],{"class":92},[82,165001,165002,165004,165006,165009],{"class":84,"line":2585},[82,165003,611],{"class":88},[82,165005,93],{"class":92},[82,165007,165008],{"class":96},"\"存款成功\"",[82,165010,119],{"class":92},[82,165012,165013],{"class":84,"line":4350},[82,165014,165015],{"class":92},"    show_balance()\n",[82,165017,165018],{"class":84,"line":4355},[82,165019,486],{"emptyLinePlaceholder":485},[82,165021,165022],{"class":84,"line":4360},[82,165023,486],{"emptyLinePlaceholder":485},[82,165025,165026,165028,165031],{"class":84,"line":4365},[82,165027,2381],{"class":112},[82,165029,165030],{"class":2384}," withdraw_money",[82,165032,2388],{"class":92},[82,165034,165035,165037],{"class":84,"line":4379},[82,165036,164366],{"class":112},[82,165038,152625],{"class":92},[82,165040,165041,165043,165045,165047,165049,165051,165053,165056],{"class":84,"line":4384},[82,165042,164948],{"class":92},[82,165044,113],{"class":112},[82,165046,112343],{"class":88},[82,165048,93],{"class":92},[82,165050,56381],{"class":88},[82,165052,93],{"class":92},[82,165054,165055],{"class":96},"\"请输入取款金额:\"",[82,165057,33074],{"class":92},[82,165059,165060,165062,165064,165066,165068],{"class":84,"line":5176},[82,165061,2219],{"class":112},[82,165063,152668],{"class":92},[82,165065,4202],{"class":112},[82,165067,6688],{"class":88},[82,165069,669],{"class":92},[82,165071,165072,165074,165076,165078],{"class":84,"line":5190},[82,165073,1901],{"class":88},[82,165075,93],{"class":92},[82,165077,164984],{"class":96},[82,165079,119],{"class":92},[82,165081,165082],{"class":84,"line":5198},[82,165083,154875],{"class":112},[82,165085,165086,165088,165090,165092],{"class":84,"line":5203},[82,165087,2219],{"class":112},[82,165089,152668],{"class":92},[82,165091,3709],{"class":112},[82,165093,165094],{"class":92}," balance:\n",[82,165096,165097,165099,165101,165103],{"class":84,"line":5209},[82,165098,1901],{"class":88},[82,165100,93],{"class":92},[82,165102,152763],{"class":96},[82,165104,119],{"class":92},[82,165106,165107],{"class":84,"line":5215},[82,165108,154875],{"class":112},[82,165110,165111,165113,165115],{"class":84,"line":5220},[82,165112,164995],{"class":92},[82,165114,152778],{"class":112},[82,165116,152701],{"class":92},[82,165118,165119,165121,165123,165126],{"class":84,"line":10539},[82,165120,611],{"class":88},[82,165122,93],{"class":92},[82,165124,165125],{"class":96},"\"取款成功\"",[82,165127,119],{"class":92},[82,165129,165130],{"class":84,"line":10563},[82,165131,165015],{"class":92},[82,165133,165134],{"class":84,"line":10568},[82,165135,486],{"emptyLinePlaceholder":485},[82,165137,165138],{"class":84,"line":10574},[82,165139,486],{"emptyLinePlaceholder":485},[82,165141,165142,165144,165146],{"class":84,"line":10601},[82,165143,111209],{"class":112},[82,165145,97843],{"class":88},[82,165147,669],{"class":92},[82,165149,165150],{"class":84,"line":10606},[82,165151,165152],{"class":92},"    show_menu()\n",[82,165154,165155,165157,165159,165161,165163,165165],{"class":84,"line":10612},[82,165156,163197],{"class":92},[82,165158,113],{"class":112},[82,165160,63163],{"class":88},[82,165162,93],{"class":92},[82,165164,155585],{"class":96},[82,165166,119],{"class":92},[82,165168,165169],{"class":84,"line":10624},[82,165170,486],{"emptyLinePlaceholder":485},[82,165172,165173,165175,165177,165179,165181],{"class":84,"line":10636},[82,165174,2219],{"class":112},[82,165176,155598],{"class":92},[82,165178,5548],{"class":112},[82,165180,155603],{"class":96},[82,165182,669],{"class":92},[82,165184,165185],{"class":84,"line":10648},[82,165186,165187],{"class":92},"        show_balance()\n",[82,165189,165190,165192,165194,165196,165198],{"class":84,"line":12307},[82,165191,41858],{"class":112},[82,165193,155598],{"class":92},[82,165195,5548],{"class":112},[82,165197,155622],{"class":96},[82,165199,669],{"class":92},[82,165201,165202],{"class":84,"line":12332},[82,165203,165204],{"class":92},"        save_money()\n",[82,165206,165207,165209,165211,165213,165215],{"class":84,"line":12355},[82,165208,41858],{"class":112},[82,165210,155598],{"class":92},[82,165212,5548],{"class":112},[82,165214,155640],{"class":96},[82,165216,669],{"class":92},[82,165218,165219],{"class":84,"line":12379},[82,165220,165221],{"class":92},"        withdraw_money()\n",[82,165223,165224,165226,165228,165230,165232],{"class":84,"line":12384},[82,165225,41858],{"class":112},[82,165227,155598],{"class":92},[82,165229,5548],{"class":112},[82,165231,155694],{"class":96},[82,165233,669],{"class":92},[82,165235,165236,165238,165240,165242],{"class":84,"line":12389},[82,165237,1901],{"class":88},[82,165239,93],{"class":92},[82,165241,155705],{"class":96},[82,165243,119],{"class":92},[82,165245,165246],{"class":84,"line":12394},[82,165247,34199],{"class":112},[82,165249,165250,165252],{"class":84,"line":12403},[82,165251,160528],{"class":112},[82,165253,669],{"class":92},[82,165255,165256,165258,165260,165262],{"class":84,"line":12408},[82,165257,1901],{"class":88},[82,165259,93],{"class":92},[82,165261,155726],{"class":96},[82,165263,119],{"class":92},[19,165265,165266],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165268,165270],{"id":165269},"_514-易错点","5.14 易错点",[26,165272,165273,165276,165279,165284,165289,165292],{},[29,165274,165275],{},"函数定义后必须调用才会执行。",[29,165277,165278],{},"函数名后面有括号才是调用。",[29,165280,165281,165283],{},[32,165282,19631],{}," 后面的代码不会执行。",[29,165285,165286,165287,2611],{},"没有返回值的函数默认返回 ",[32,165288,98237],{},[29,165290,165291],{},"局部变量不能在函数外部访问。",[29,165293,165294,165295,165297],{},"不要滥用 ",[32,165296,164331],{},"，更好的方式是让函数返回新值。",[19,165299,165300,165301,165303],{},"例如不用 ",[32,165302,164331],{}," 改写存款：",[73,165305,165307],{"className":75,"code":165306,"language":77,"meta":78,"style":78},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[32,165308,165309,165318,165329,165333,165337,165345,165358],{"__ignoreMap":78},[82,165310,165311,165313,165315],{"class":84,"line":85},[82,165312,2381],{"class":112},[82,165314,164935],{"class":2384},[82,165316,165317],{"class":92},"(balance, money):\n",[82,165319,165320,165322,165325,165327],{"class":84,"line":157},[82,165321,6685],{"class":112},[82,165323,165324],{"class":92}," balance ",[82,165326,2249],{"class":112},[82,165328,152701],{"class":92},[82,165330,165331],{"class":84,"line":404},[82,165332,486],{"emptyLinePlaceholder":485},[82,165334,165335],{"class":84,"line":413},[82,165336,486],{"emptyLinePlaceholder":485},[82,165338,165339,165341,165343],{"class":84,"line":508},[82,165340,164809],{"class":92},[82,165342,113],{"class":112},[82,165344,164814],{"class":88},[82,165346,165347,165349,165351,165354,165356],{"class":84,"line":513},[82,165348,164809],{"class":92},[82,165350,113],{"class":112},[82,165352,165353],{"class":92}," save_money(balance, ",[82,165355,4325],{"class":88},[82,165357,119],{"class":92},[82,165359,165360,165362],{"class":84,"line":1388},[82,165361,407],{"class":88},[82,165363,165364],{"class":92},"(balance)\n",[14,165366,165368],{"id":165367},"_515-本章练习","5.15 本章练习",[26,165370,165371,165378,165384,165390,165396],{},[29,165372,165373,165374,165377],{},"定义函数 ",[32,165375,165376],{},"print_student(name, age)","，输出学生信息。",[29,165379,165373,165380,165383],{},[32,165381,165382],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,165385,165373,165386,165389],{},[32,165387,165388],{},"is_even(num)","，判断一个数是否为偶数。",[29,165391,165373,165392,165395],{},[32,165393,165394],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,165397,165398],{},"把第 4 章的菜单程序拆分成多个函数。",[2671,165400,165401],{},"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":78,"searchDepth":157,"depth":157,"links":165403},[165404,165405,165406,165407,165408,165409,165410,165411,165412,165416,165417,165418,165419,165420,165421],{"id":163424,"depth":157,"text":163425},{"id":163465,"depth":157,"text":163466},{"id":163555,"depth":157,"text":163556},{"id":163636,"depth":157,"text":163637},{"id":163769,"depth":157,"text":163770},{"id":163891,"depth":157,"text":163892},{"id":164013,"depth":157,"text":164014},{"id":164090,"depth":157,"text":164091},{"id":164212,"depth":157,"text":164213,"children":165413},[165414,165415],{"id":164216,"depth":404,"text":164217},{"id":164274,"depth":404,"text":164275},{"id":164403,"depth":157,"text":164404},{"id":164529,"depth":157,"text":164530},{"id":164642,"depth":157,"text":164643},{"id":164798,"depth":157,"text":164799},{"id":165269,"depth":157,"text":165270},{"id":165367,"depth":157,"text":165368},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163416,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165428,"title":165429,"body":165430,"description":2699,"extension":2700,"meta":168464,"navigation":485,"path":168465,"seo":168466,"stem":168467,"__hash__":168468},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165431,"toc":168445},[165432,165435,165439,165442,165445,165549,165552,165556,165559,165639,165642,165646,165649,165709,165712,165748,165751,165766,165770,165843,165846,165901,165904,165974,165977,166060,166070,166127,166131,166176,166179,166205,166208,166314,166318,166321,166363,166366,166430,166433,166437,166440,166501,166504,166534,166537,166574,166578,166581,166590,166593,166717,166720,166761,166765,166768,166779,166819,166822,166837,166842,166845,166912,166915,167005,167009,167012,167057,167060,167087,167089,167119,167122,167142,167145,167176,167179,167212,167216,167219,167243,167246,167270,167273,167297,167301,167304,167434,167437,167516,167519,167594,167598,167601,167650,167653,167695,167698,167722,167724,167748,167751,167806,167809,167874,167878,167881,167884,167922,167925,167978,167981,168027,168030,168063,168066,168070,168388,168392,168421,168425,168442],[10,165433,165429],{"id":165434},"_6-数据容器",[14,165436,165438],{"id":165437},"_61-什么是数据容器","6.1 什么是数据容器",[19,165440,165441],{},"数据容器用于一次保存多个数据。",[19,165443,165444],{},"常见容器：",[278,165446,165447,165464],{},[281,165448,165449],{},[284,165450,165451,165453,165456,165459,165462],{},[287,165452,28355],{},[287,165454,165455],{},"是否有序",[287,165457,165458],{},"是否可变",[287,165460,165461],{},"是否允许重复",[287,165463,30074],{},[294,165465,165466,165484,165500,165515,165532],{},[284,165467,165468,165471,165474,165477,165480],{},[299,165469,165470],{},"list列表",[299,165472,165473],{},"有序",[299,165475,165476],{},"可变",[299,165478,165479],{},"允许",[299,165481,165482],{},[32,165483,157766],{},[284,165485,165486,165489,165491,165494,165496],{},[299,165487,165488],{},"tuple元组",[299,165490,165473],{},[299,165492,165493],{},"不可变",[299,165495,165479],{},[299,165497,165498],{},[32,165499,157779],{},[284,165501,165502,165505,165507,165509,165511],{},[299,165503,165504],{},"str字符串",[299,165506,165473],{},[299,165508,165493],{},[299,165510,165479],{},[299,165512,165513],{},[32,165514,158389],{},[284,165516,165517,165520,165523,165525,165528],{},[299,165518,165519],{},"set集合",[299,165521,165522],{},"无序",[299,165524,165476],{},[299,165526,165527],{},"不允许",[299,165529,165530],{},[32,165531,157804],{},[284,165533,165534,165537,165539,165541,165544],{},[299,165535,165536],{},"dict字典",[299,165538,165473],{},[299,165540,165476],{},[299,165542,165543],{},"key不允许重复",[299,165545,165546],{},[32,165547,165548],{},"{\"name\": \"小明\"}",[19,165550,165551],{},"Python 3.7 之后，字典保持插入顺序。",[14,165553,165555],{"id":165554},"_62-列表list","6.2 列表list",[19,165557,165558],{},"列表用于保存一组有顺序的数据。",[73,165560,165562],{"className":75,"code":165561,"language":77,"meta":78,"style":78},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[32,165563,165564,165584,165609,165630],{"__ignoreMap":78},[82,165565,165566,165568,165570,165572,165574,165576,165578,165580,165582],{"class":84,"line":85},[82,165567,162885],{"class":92},[82,165569,113],{"class":112},[82,165571,847],{"class":92},[82,165573,1360],{"class":96},[82,165575,100],{"class":92},[82,165577,1508],{"class":96},[82,165579,100],{"class":92},[82,165581,162236],{"class":96},[82,165583,875],{"class":92},[82,165585,165586,165589,165591,165593,165595,165597,165599,165601,165603,165605,165607],{"class":84,"line":157},[82,165587,165588],{"class":92},"numbers ",[82,165590,113],{"class":112},[82,165592,847],{"class":92},[82,165594,2283],{"class":88},[82,165596,100],{"class":92},[82,165598,1425],{"class":88},[82,165600,100],{"class":92},[82,165602,2841],{"class":88},[82,165604,100],{"class":92},[82,165606,3051],{"class":88},[82,165608,875],{"class":92},[82,165610,165611,165614,165616,165618,165620,165622,165624,165626,165628],{"class":84,"line":404},[82,165612,165613],{"class":92},"mixed ",[82,165615,113],{"class":112},[82,165617,847],{"class":92},[82,165619,1360],{"class":96},[82,165621,100],{"class":92},[82,165623,1373],{"class":88},[82,165625,100],{"class":92},[82,165627,1205],{"class":88},[82,165629,875],{"class":92},[82,165631,165632,165635,165637],{"class":84,"line":413},[82,165633,165634],{"class":92},"empty ",[82,165636,113],{"class":112},[82,165638,2408],{"class":92},[19,165640,165641],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165643,165645],{"id":165644},"_63-列表索引","6.3 列表索引",[19,165647,165648],{},"正向索引从 0 开始：",[73,165650,165652],{"className":75,"code":165651,"language":77,"meta":78,"style":78},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[32,165653,165654,165674,165678,165689,165699],{"__ignoreMap":78},[82,165655,165656,165658,165660,165662,165664,165666,165668,165670,165672],{"class":84,"line":85},[82,165657,162885],{"class":92},[82,165659,113],{"class":112},[82,165661,847],{"class":92},[82,165663,1360],{"class":96},[82,165665,100],{"class":92},[82,165667,1508],{"class":96},[82,165669,100],{"class":92},[82,165671,162236],{"class":96},[82,165673,875],{"class":92},[82,165675,165676],{"class":84,"line":157},[82,165677,486],{"emptyLinePlaceholder":485},[82,165679,165680,165682,165685,165687],{"class":84,"line":404},[82,165681,407],{"class":88},[82,165683,165684],{"class":92},"(names[",[82,165686,2244],{"class":88},[82,165688,7252],{"class":92},[82,165690,165691,165693,165695,165697],{"class":84,"line":413},[82,165692,407],{"class":88},[82,165694,165684],{"class":92},[82,165696,2283],{"class":88},[82,165698,7252],{"class":92},[82,165700,165701,165703,165705,165707],{"class":84,"line":508},[82,165702,407],{"class":88},[82,165704,165684],{"class":92},[82,165706,1425],{"class":88},[82,165708,7252],{"class":92},[19,165710,165711],{},"反向索引从 -1 开始：",[73,165713,165715],{"className":75,"code":165714,"language":77,"meta":78,"style":78},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[32,165716,165717,165733],{"__ignoreMap":78},[82,165718,165719,165721,165723,165725,165727,165730],{"class":84,"line":85},[82,165720,407],{"class":88},[82,165722,165684],{"class":92},[82,165724,3288],{"class":112},[82,165726,2283],{"class":88},[82,165728,165729],{"class":92},"])  ",[82,165731,165732],{"class":2828},"# 小刚\n",[82,165734,165735,165737,165739,165741,165743,165745],{"class":84,"line":157},[82,165736,407],{"class":88},[82,165738,165684],{"class":92},[82,165740,3288],{"class":112},[82,165742,1425],{"class":88},[82,165744,165729],{"class":92},[82,165746,165747],{"class":2828},"# 小红\n",[19,165749,165750],{},"索引越界会报错：",[73,165752,165754],{"className":75,"code":165753,"language":77,"meta":78,"style":78},"print(names[3])\n",[32,165755,165756],{"__ignoreMap":78},[82,165757,165758,165760,165762,165764],{"class":84,"line":85},[82,165759,407],{"class":88},[82,165761,165684],{"class":92},[82,165763,2841],{"class":88},[82,165765,7252],{"class":92},[14,165767,165769],{"id":165768},"_64-列表常用方法","6.4 列表常用方法",[73,165771,165773],{"className":75,"code":165772,"language":77,"meta":78,"style":78},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[32,165774,165775,165791,165795,165804,165818,165832,165836],{"__ignoreMap":78},[82,165776,165777,165779,165781,165783,165785,165787,165789],{"class":84,"line":85},[82,165778,162885],{"class":92},[82,165780,113],{"class":112},[82,165782,847],{"class":92},[82,165784,1360],{"class":96},[82,165786,100],{"class":92},[82,165788,1508],{"class":96},[82,165790,875],{"class":92},[82,165792,165793],{"class":84,"line":157},[82,165794,486],{"emptyLinePlaceholder":485},[82,165796,165797,165800,165802],{"class":84,"line":404},[82,165798,165799],{"class":92},"names.append(",[82,165801,162236],{"class":96},[82,165803,119],{"class":92},[82,165805,165806,165809,165811,165813,165816],{"class":84,"line":413},[82,165807,165808],{"class":92},"names.insert(",[82,165810,2283],{"class":88},[82,165812,100],{"class":92},[82,165814,165815],{"class":96},"\"小李\"",[82,165817,119],{"class":92},[82,165819,165820,165823,165825,165827,165830],{"class":84,"line":508},[82,165821,165822],{"class":92},"names.extend([",[82,165824,11274],{"class":96},[82,165826,100],{"class":92},[82,165828,165829],{"class":96},"\"小赵\"",[82,165831,7252],{"class":92},[82,165833,165834],{"class":84,"line":513},[82,165835,486],{"emptyLinePlaceholder":485},[82,165837,165838,165840],{"class":84,"line":1388},[82,165839,407],{"class":88},[82,165841,165842],{"class":92},"(names)\n",[19,165844,165845],{},"删除元素：",[73,165847,165849],{"className":75,"code":165848,"language":77,"meta":78,"style":78},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[32,165850,165851,165860,165870,165884,165896],{"__ignoreMap":78},[82,165852,165853,165856,165858],{"class":84,"line":85},[82,165854,165855],{"class":92},"names.remove(",[82,165857,1508],{"class":96},[82,165859,119],{"class":92},[82,165861,165862,165865,165867],{"class":84,"line":157},[82,165863,165864],{"class":92},"last ",[82,165866,113],{"class":112},[82,165868,165869],{"class":92}," names.pop()\n",[82,165871,165872,165875,165877,165880,165882],{"class":84,"line":404},[82,165873,165874],{"class":92},"first ",[82,165876,113],{"class":112},[82,165878,165879],{"class":92}," names.pop(",[82,165881,2244],{"class":88},[82,165883,119],{"class":92},[82,165885,165886,165889,165892,165894],{"class":84,"line":413},[82,165887,165888],{"class":112},"del",[82,165890,165891],{"class":92}," names[",[82,165893,2244],{"class":88},[82,165895,875],{"class":92},[82,165897,165898],{"class":84,"line":508},[82,165899,165900],{"class":92},"names.clear()\n",[19,165902,165903],{},"查询和统计：",[73,165905,165907],{"className":75,"code":165906,"language":77,"meta":78,"style":78},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[32,165908,165909,165937,165941,165952,165963],{"__ignoreMap":78},[82,165910,165911,165913,165915,165917,165919,165921,165923,165925,165927,165929,165931,165933,165935],{"class":84,"line":85},[82,165912,165588],{"class":92},[82,165914,113],{"class":112},[82,165916,847],{"class":92},[82,165918,2283],{"class":88},[82,165920,100],{"class":92},[82,165922,1425],{"class":88},[82,165924,100],{"class":92},[82,165926,2841],{"class":88},[82,165928,100],{"class":92},[82,165930,1425],{"class":88},[82,165932,100],{"class":92},[82,165934,3051],{"class":88},[82,165936,875],{"class":92},[82,165938,165939],{"class":84,"line":157},[82,165940,486],{"emptyLinePlaceholder":485},[82,165942,165943,165945,165948,165950],{"class":84,"line":404},[82,165944,407],{"class":88},[82,165946,165947],{"class":92},"(numbers.index(",[82,165949,2841],{"class":88},[82,165951,33074],{"class":92},[82,165953,165954,165956,165959,165961],{"class":84,"line":413},[82,165955,407],{"class":88},[82,165957,165958],{"class":92},"(numbers.count(",[82,165960,1425],{"class":88},[82,165962,33074],{"class":92},[82,165964,165965,165967,165969,165971],{"class":84,"line":508},[82,165966,407],{"class":88},[82,165968,93],{"class":92},[82,165970,9950],{"class":88},[82,165972,165973],{"class":92},"(numbers))\n",[19,165975,165976],{},"排序：",[73,165978,165980],{"className":75,"code":165979,"language":77,"meta":78,"style":78},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[32,165981,165982,166006,166010,166015,166022,166026,166039,166045,166049,166054],{"__ignoreMap":78},[82,165983,165984,165986,165988,165990,165992,165994,165996,165998,166000,166002,166004],{"class":84,"line":85},[82,165985,165588],{"class":92},[82,165987,113],{"class":112},[82,165989,847],{"class":92},[82,165991,2841],{"class":88},[82,165993,100],{"class":92},[82,165995,2283],{"class":88},[82,165997,100],{"class":92},[82,165999,3077],{"class":88},[82,166001,100],{"class":92},[82,166003,1425],{"class":88},[82,166005,875],{"class":92},[82,166007,166008],{"class":84,"line":157},[82,166009,486],{"emptyLinePlaceholder":485},[82,166011,166012],{"class":84,"line":404},[82,166013,166014],{"class":92},"numbers.sort()\n",[82,166016,166017,166019],{"class":84,"line":413},[82,166018,407],{"class":88},[82,166020,166021],{"class":92},"(numbers)\n",[82,166023,166024],{"class":84,"line":508},[82,166025,486],{"emptyLinePlaceholder":485},[82,166027,166028,166031,166033,166035,166037],{"class":84,"line":513},[82,166029,166030],{"class":92},"numbers.sort(",[82,166032,2289],{"class":108},[82,166034,113],{"class":112},[82,166036,1205],{"class":88},[82,166038,119],{"class":92},[82,166040,166041,166043],{"class":84,"line":1388},[82,166042,407],{"class":88},[82,166044,166021],{"class":92},[82,166046,166047],{"class":84,"line":1394},[82,166048,486],{"emptyLinePlaceholder":485},[82,166050,166051],{"class":84,"line":1399},[82,166052,166053],{"class":92},"numbers.reverse()\n",[82,166055,166056,166058],{"class":84,"line":1430},[82,166057,407],{"class":88},[82,166059,166021],{"class":92},[19,166061,166062,166065,166066,166069],{},[32,166063,166064],{},"sort()"," 会修改原列表，",[32,166067,166068],{},"sorted()"," 返回新列表。",[73,166071,166073],{"className":75,"code":166072,"language":77,"meta":78,"style":78},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[32,166074,166075,166099,166110,166114,166120],{"__ignoreMap":78},[82,166076,166077,166079,166081,166083,166085,166087,166089,166091,166093,166095,166097],{"class":84,"line":85},[82,166078,165588],{"class":92},[82,166080,113],{"class":112},[82,166082,847],{"class":92},[82,166084,2841],{"class":88},[82,166086,100],{"class":92},[82,166088,2283],{"class":88},[82,166090,100],{"class":92},[82,166092,3077],{"class":88},[82,166094,100],{"class":92},[82,166096,1425],{"class":88},[82,166098,875],{"class":92},[82,166100,166101,166104,166106,166108],{"class":84,"line":157},[82,166102,166103],{"class":92},"new_numbers ",[82,166105,113],{"class":112},[82,166107,2268],{"class":88},[82,166109,166021],{"class":92},[82,166111,166112],{"class":84,"line":404},[82,166113,486],{"emptyLinePlaceholder":485},[82,166115,166116,166118],{"class":84,"line":413},[82,166117,407],{"class":88},[82,166119,166021],{"class":92},[82,166121,166122,166124],{"class":84,"line":508},[82,166123,407],{"class":88},[82,166125,166126],{"class":92},"(new_numbers)\n",[14,166128,166130],{"id":166129},"_65-列表遍历","6.5 列表遍历",[73,166132,166134],{"className":75,"code":166133,"language":77,"meta":78,"style":78},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[32,166135,166136,166156,166160,166170],{"__ignoreMap":78},[82,166137,166138,166140,166142,166144,166146,166148,166150,166152,166154],{"class":84,"line":85},[82,166139,162885],{"class":92},[82,166141,113],{"class":112},[82,166143,847],{"class":92},[82,166145,1360],{"class":96},[82,166147,100],{"class":92},[82,166149,1508],{"class":96},[82,166151,100],{"class":92},[82,166153,162236],{"class":96},[82,166155,875],{"class":92},[82,166157,166158],{"class":84,"line":157},[82,166159,486],{"emptyLinePlaceholder":485},[82,166161,166162,166164,166166,166168],{"class":84,"line":404},[82,166163,597],{"class":112},[82,166165,162921],{"class":92},[82,166167,603],{"class":112},[82,166169,162926],{"class":92},[82,166171,166172,166174],{"class":84,"line":413},[82,166173,611],{"class":88},[82,166175,153186],{"class":92},[19,166177,166178],{},"需要索引时：",[73,166180,166182],{"className":75,"code":166181,"language":77,"meta":78,"style":78},"for index, name in enumerate(names):\n    print(index, name)\n",[32,166183,166184,166198],{"__ignoreMap":78},[82,166185,166186,166188,166191,166193,166195],{"class":84,"line":85},[82,166187,597],{"class":112},[82,166189,166190],{"class":92}," index, name ",[82,166192,603],{"class":112},[82,166194,34178],{"class":88},[82,166196,166197],{"class":92},"(names):\n",[82,166199,166200,166202],{"class":84,"line":157},[82,166201,611],{"class":88},[82,166203,166204],{"class":92},"(index, name)\n",[19,166206,166207],{},"统计总分：",[73,166209,166211],{"className":75,"code":166210,"language":77,"meta":78,"style":78},"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",[32,166212,166213,166238,166246,166250,166261,166269,166273,166290],{"__ignoreMap":78},[82,166214,166215,166218,166220,166222,166224,166226,166228,166230,166232,166234,166236],{"class":84,"line":85},[82,166216,166217],{"class":92},"scores ",[82,166219,113],{"class":112},[82,166221,847],{"class":92},[82,166223,3611],{"class":88},[82,166225,100],{"class":92},[82,166227,3487],{"class":88},[82,166229,100],{"class":92},[82,166231,3012],{"class":88},[82,166233,100],{"class":92},[82,166235,3316],{"class":88},[82,166237,875],{"class":92},[82,166239,166240,166242,166244],{"class":84,"line":157},[82,166241,159766],{"class":92},[82,166243,113],{"class":112},[82,166245,49897],{"class":88},[82,166247,166248],{"class":84,"line":404},[82,166249,486],{"emptyLinePlaceholder":485},[82,166251,166252,166254,166256,166258],{"class":84,"line":413},[82,166253,597],{"class":112},[82,166255,160289],{"class":92},[82,166257,603],{"class":112},[82,166259,166260],{"class":92}," scores:\n",[82,166262,166263,166265,166267],{"class":84,"line":508},[82,166264,161813],{"class":92},[82,166266,12068],{"class":112},[82,166268,4193],{"class":92},[82,166270,166271],{"class":84,"line":513},[82,166272,486],{"emptyLinePlaceholder":485},[82,166274,166275,166278,166280,166283,166285,166287],{"class":84,"line":1388},[82,166276,166277],{"class":92},"avg ",[82,166279,113],{"class":112},[82,166281,166282],{"class":92}," total ",[82,166284,1147],{"class":112},[82,166286,9923],{"class":88},[82,166288,166289],{"class":92},"(scores)\n",[82,166291,166292,166294,166296,166298,166301,166303,166306,166308,166310,166312],{"class":84,"line":1394},[82,166293,407],{"class":88},[82,166295,93],{"class":92},[82,166297,2822],{"class":112},[82,166299,166300],{"class":96},"\"平均分:",[82,166302,3645],{"class":88},[82,166304,166305],{"class":92},"avg",[82,166307,159665],{"class":112},[82,166309,3695],{"class":88},[82,166311,216],{"class":96},[82,166313,119],{"class":92},[14,166315,166317],{"id":166316},"_66-元组tuple","6.6 元组tuple",[19,166319,166320],{},"元组和列表类似，但不可修改。",[73,166322,166324],{"className":75,"code":166323,"language":77,"meta":78,"style":78},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[32,166325,166326,166343],{"__ignoreMap":78},[82,166327,166328,166331,166333,166335,166337,166339,166341],{"class":84,"line":85},[82,166329,166330],{"class":92},"point ",[82,166332,113],{"class":112},[82,166334,4265],{"class":92},[82,166336,440],{"class":88},[82,166338,100],{"class":92},[82,166340,3451],{"class":88},[82,166342,119],{"class":92},[82,166344,166345,166347,166349,166351,166353,166355,166357,166359,166361],{"class":84,"line":157},[82,166346,118859],{"class":92},[82,166348,113],{"class":112},[82,166350,4265],{"class":92},[82,166352,1360],{"class":96},[82,166354,100],{"class":92},[82,166356,1373],{"class":88},[82,166358,100],{"class":92},[82,166360,71825],{"class":96},[82,166362,119],{"class":92},[19,166364,166365],{},"单元素元组必须加逗号：",[73,166367,166369],{"className":75,"code":166368,"language":77,"meta":78,"style":78},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[32,166370,166371,166385,166398,166402,166416],{"__ignoreMap":78},[82,166372,166373,166376,166378,166380,166382],{"class":84,"line":85},[82,166374,166375],{"class":92},"t1 ",[82,166377,113],{"class":112},[82,166379,4265],{"class":92},[82,166381,440],{"class":88},[82,166383,166384],{"class":92},",)\n",[82,166386,166387,166390,166392,166394,166396],{"class":84,"line":157},[82,166388,166389],{"class":92},"t2 ",[82,166391,113],{"class":112},[82,166393,4265],{"class":92},[82,166395,440],{"class":88},[82,166397,119],{"class":92},[82,166399,166400],{"class":84,"line":404},[82,166401,486],{"emptyLinePlaceholder":485},[82,166403,166404,166406,166408,166410,166413],{"class":84,"line":413},[82,166405,407],{"class":88},[82,166407,93],{"class":92},[82,166409,105658],{"class":88},[82,166411,166412],{"class":92},"(t1))  ",[82,166414,166415],{"class":2828},"# tuple\n",[82,166417,166418,166420,166422,166424,166427],{"class":84,"line":508},[82,166419,407],{"class":88},[82,166421,93],{"class":92},[82,166423,105658],{"class":88},[82,166425,166426],{"class":92},"(t2))  ",[82,166428,166429],{"class":2828},"# int\n",[19,166431,166432],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166434,166436],{"id":166435},"_67-字符串str","6.7 字符串str",[19,166438,166439],{},"字符串也是序列，可以索引、切片和遍历。",[73,166441,166443],{"className":75,"code":166442,"language":77,"meta":78,"style":78},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[32,166444,166445,166453,166457,166468,166480,166484,166495],{"__ignoreMap":78},[82,166446,166447,166449,166451],{"class":84,"line":85},[82,166448,1402],{"class":92},[82,166450,113],{"class":112},[82,166452,162187],{"class":96},[82,166454,166455],{"class":84,"line":157},[82,166456,486],{"emptyLinePlaceholder":485},[82,166458,166459,166461,166464,166466],{"class":84,"line":404},[82,166460,407],{"class":88},[82,166462,166463],{"class":92},"(text[",[82,166465,2244],{"class":88},[82,166467,7252],{"class":92},[82,166469,166470,166472,166474,166476,166478],{"class":84,"line":413},[82,166471,407],{"class":88},[82,166473,166463],{"class":92},[82,166475,3288],{"class":112},[82,166477,2283],{"class":88},[82,166479,7252],{"class":92},[82,166481,166482],{"class":84,"line":508},[82,166483,486],{"emptyLinePlaceholder":485},[82,166485,166486,166488,166490,166492],{"class":84,"line":513},[82,166487,597],{"class":112},[82,166489,162198],{"class":92},[82,166491,603],{"class":112},[82,166493,166494],{"class":92}," text:\n",[82,166496,166497,166499],{"class":84,"line":1388},[82,166498,611],{"class":88},[82,166500,162209],{"class":92},[19,166502,166503],{},"字符串不可变：",[73,166505,166507],{"className":75,"code":166506,"language":77,"meta":78,"style":78},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[32,166508,166509,166517],{"__ignoreMap":78},[82,166510,166511,166513,166515],{"class":84,"line":85},[82,166512,1402],{"class":92},[82,166514,113],{"class":112},[82,166516,162187],{"class":96},[82,166518,166519,166522,166524,166526,166528,166531],{"class":84,"line":157},[82,166520,166521],{"class":92},"text[",[82,166523,2244],{"class":88},[82,166525,7038],{"class":92},[82,166527,113],{"class":112},[82,166529,166530],{"class":96}," \"P\"",[82,166532,166533],{"class":2828},"  # 报错\n",[19,166535,166536],{},"如果要得到新字符串：",[73,166538,166540],{"className":75,"code":166539,"language":77,"meta":78,"style":78},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[32,166541,166542,166550,166568],{"__ignoreMap":78},[82,166543,166544,166546,166548],{"class":84,"line":85},[82,166545,1402],{"class":92},[82,166547,113],{"class":112},[82,166549,162187],{"class":96},[82,166551,166552,166554,166556,166558,166560,166563,166565],{"class":84,"line":157},[82,166553,1402],{"class":92},[82,166555,113],{"class":112},[82,166557,166530],{"class":96},[82,166559,48130],{"class":112},[82,166561,166562],{"class":92}," text[",[82,166564,2283],{"class":88},[82,166566,166567],{"class":92},":]\n",[82,166569,166570,166572],{"class":84,"line":404},[82,166571,407],{"class":88},[82,166573,1435],{"class":92},[14,166575,166577],{"id":166576},"_68-切片","6.8 切片",[19,166579,166580],{},"切片用于从序列中取一部分。",[73,166582,166584],{"className":75,"code":166583,"language":77,"meta":78,"style":78},"序列[开始:结束:步长]\n",[32,166585,166586],{"__ignoreMap":78},[82,166587,166588],{"class":84,"line":85},[82,166589,166583],{"class":92},[19,166591,166592],{},"结束位置不包含。",[73,166594,166596],{"className":75,"code":166595,"language":77,"meta":78,"style":78},"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",[32,166597,166598,166635,166639,166658,166673,166687,166701],{"__ignoreMap":78},[82,166599,166600,166603,166605,166607,166609,166611,166613,166615,166617,166619,166621,166623,166625,166627,166629,166631,166633],{"class":84,"line":85},[82,166601,166602],{"class":92},"nums ",[82,166604,113],{"class":112},[82,166606,847],{"class":92},[82,166608,2244],{"class":88},[82,166610,100],{"class":92},[82,166612,2283],{"class":88},[82,166614,100],{"class":92},[82,166616,1425],{"class":88},[82,166618,100],{"class":92},[82,166620,2841],{"class":88},[82,166622,100],{"class":92},[82,166624,3051],{"class":88},[82,166626,100],{"class":92},[82,166628,3077],{"class":88},[82,166630,100],{"class":92},[82,166632,3102],{"class":88},[82,166634,875],{"class":92},[82,166636,166637],{"class":84,"line":157},[82,166638,486],{"emptyLinePlaceholder":485},[82,166640,166641,166643,166646,166648,166650,166652,166655],{"class":84,"line":404},[82,166642,407],{"class":88},[82,166644,166645],{"class":92},"(nums[",[82,166647,2283],{"class":88},[82,166649,3608],{"class":92},[82,166651,3051],{"class":88},[82,166653,166654],{"class":92},"])    ",[82,166656,166657],{"class":2828},"# [1, 2, 3]\n",[82,166659,166660,166662,166665,166667,166670],{"class":84,"line":413},[82,166661,407],{"class":88},[82,166663,166664],{"class":92},"(nums[:",[82,166666,2841],{"class":88},[82,166668,166669],{"class":92},"])     ",[82,166671,166672],{"class":2828},"# [0, 1, 2]\n",[82,166674,166675,166677,166679,166681,166684],{"class":84,"line":508},[82,166676,407],{"class":88},[82,166678,166645],{"class":92},[82,166680,2841],{"class":88},[82,166682,166683],{"class":92},":])     ",[82,166685,166686],{"class":2828},"# [3, 4, 5, 6]\n",[82,166688,166689,166691,166694,166696,166698],{"class":84,"line":513},[82,166690,407],{"class":88},[82,166692,166693],{"class":92},"(nums[::",[82,166695,1425],{"class":88},[82,166697,166654],{"class":92},[82,166699,166700],{"class":2828},"# [0, 2, 4, 6]\n",[82,166702,166703,166705,166707,166709,166711,166714],{"class":84,"line":1388},[82,166704,407],{"class":88},[82,166706,166693],{"class":92},[82,166708,3288],{"class":112},[82,166710,2283],{"class":88},[82,166712,166713],{"class":92},"])   ",[82,166715,166716],{"class":2828},"# 反转\n",[19,166718,166719],{},"字符串切片：",[73,166721,166723],{"className":75,"code":166722,"language":77,"meta":78,"style":78},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[32,166724,166725,166734,166748],{"__ignoreMap":78},[82,166726,166727,166729,166731],{"class":84,"line":85},[82,166728,1402],{"class":92},[82,166730,113],{"class":112},[82,166732,166733],{"class":96}," \"abcdef\"\n",[82,166735,166736,166738,166740,166742,166744,166746],{"class":84,"line":157},[82,166737,407],{"class":88},[82,166739,166463],{"class":92},[82,166741,2283],{"class":88},[82,166743,3608],{"class":92},[82,166745,3051],{"class":88},[82,166747,7252],{"class":92},[82,166749,166750,166752,166755,166757,166759],{"class":84,"line":404},[82,166751,407],{"class":88},[82,166753,166754],{"class":92},"(text[::",[82,166756,3288],{"class":112},[82,166758,2283],{"class":88},[82,166760,7252],{"class":92},[14,166762,166764],{"id":166763},"_69-集合set","6.9 集合set",[19,166766,166767],{},"集合特点：",[26,166769,166770,166773,166776],{},[29,166771,166772],{},"无序。",[29,166774,166775],{},"元素不重复。",[29,166777,166778],{},"可以做交集、并集、差集。",[73,166780,166782],{"className":75,"code":166781,"language":77,"meta":78,"style":78},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[32,166783,166784,166812],{"__ignoreMap":78},[82,166785,166786,166788,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810],{"class":84,"line":85},[82,166787,166602],{"class":92},[82,166789,113],{"class":112},[82,166791,7043],{"class":92},[82,166793,2283],{"class":88},[82,166795,100],{"class":92},[82,166797,1425],{"class":88},[82,166799,100],{"class":92},[82,166801,2841],{"class":88},[82,166803,100],{"class":92},[82,166805,2841],{"class":88},[82,166807,100],{"class":92},[82,166809,3051],{"class":88},[82,166811,1391],{"class":92},[82,166813,166814,166816],{"class":84,"line":157},[82,166815,407],{"class":88},[82,166817,166818],{"class":92},"(nums)\n",[19,166820,166821],{},"创建空集合：",[73,166823,166825],{"className":75,"code":166824,"language":77,"meta":78,"style":78},"s = set()\n",[32,166826,166827],{"__ignoreMap":78},[82,166828,166829,166831,166833,166835],{"class":84,"line":85},[82,166830,13169],{"class":92},[82,166832,113],{"class":112},[82,166834,122267],{"class":88},[82,166836,4576],{"class":92},[19,166838,11616,166839,166841],{},[32,166840,35028],{}," 是空字典，不是空集合。",[19,166843,166844],{},"集合常用操作：",[73,166846,166848],{"className":75,"code":166847,"language":77,"meta":78,"style":78},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[32,166849,166850,166870,166874,166883,166892,166901],{"__ignoreMap":78},[82,166851,166852,166854,166856,166858,166860,166862,166864,166866,166868],{"class":84,"line":85},[82,166853,13169],{"class":92},[82,166855,113],{"class":112},[82,166857,7043],{"class":92},[82,166859,2283],{"class":88},[82,166861,100],{"class":92},[82,166863,1425],{"class":88},[82,166865,100],{"class":92},[82,166867,2841],{"class":88},[82,166869,1391],{"class":92},[82,166871,166872],{"class":84,"line":157},[82,166873,486],{"emptyLinePlaceholder":485},[82,166875,166876,166879,166881],{"class":84,"line":404},[82,166877,166878],{"class":92},"s.add(",[82,166880,3051],{"class":88},[82,166882,119],{"class":92},[82,166884,166885,166888,166890],{"class":84,"line":413},[82,166886,166887],{"class":92},"s.remove(",[82,166889,1425],{"class":88},[82,166891,119],{"class":92},[82,166893,166894,166897,166899],{"class":84,"line":508},[82,166895,166896],{"class":92},"s.discard(",[82,166898,440],{"class":88},[82,166900,119],{"class":92},[82,166902,166903,166905,166907,166909],{"class":84,"line":513},[82,166904,407],{"class":88},[82,166906,93],{"class":92},[82,166908,9950],{"class":88},[82,166910,166911],{"class":92},"(s))\n",[19,166913,166914],{},"交并差：",[73,166916,166918],{"className":75,"code":166917,"language":77,"meta":78,"style":78},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[32,166919,166920,166940,166960,166964,166979,166992],{"__ignoreMap":78},[82,166921,166922,166924,166926,166928,166930,166932,166934,166936,166938],{"class":84,"line":85},[82,166923,13509],{"class":92},[82,166925,113],{"class":112},[82,166927,7043],{"class":92},[82,166929,2283],{"class":88},[82,166931,100],{"class":92},[82,166933,1425],{"class":88},[82,166935,100],{"class":92},[82,166937,2841],{"class":88},[82,166939,1391],{"class":92},[82,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":84,"line":157},[82,166943,13535],{"class":92},[82,166945,113],{"class":112},[82,166947,7043],{"class":92},[82,166949,2841],{"class":88},[82,166951,100],{"class":92},[82,166953,3051],{"class":88},[82,166955,100],{"class":92},[82,166957,3077],{"class":88},[82,166959,1391],{"class":92},[82,166961,166962],{"class":84,"line":404},[82,166963,486],{"emptyLinePlaceholder":485},[82,166965,166966,166968,166971,166973,166976],{"class":84,"line":413},[82,166967,407],{"class":88},[82,166969,166970],{"class":92},"(a ",[82,166972,3111],{"class":112},[82,166974,166975],{"class":92}," b)  ",[82,166977,166978],{"class":2828},"# 交集\n",[82,166980,166981,166983,166985,166987,166989],{"class":84,"line":508},[82,166982,407],{"class":88},[82,166984,166970],{"class":92},[82,166986,3670],{"class":112},[82,166988,166975],{"class":92},[82,166990,166991],{"class":2828},"# 并集\n",[82,166993,166994,166996,166998,167000,167002],{"class":84,"line":513},[82,166995,407],{"class":88},[82,166997,166970],{"class":92},[82,166999,3288],{"class":112},[82,167001,166975],{"class":92},[82,167003,167004],{"class":2828},"# 差集\n",[14,167006,167008],{"id":167007},"_610-字典dict","6.10 字典dict",[19,167010,167011],{},"字典通过 key-value 保存数据。",[73,167013,167015],{"className":75,"code":167014,"language":77,"meta":78,"style":78},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[32,167016,167017,167025,167035,167045,167053],{"__ignoreMap":78},[82,167018,167019,167021,167023],{"class":84,"line":85},[82,167020,1344],{"class":92},[82,167022,113],{"class":112},[82,167024,1349],{"class":92},[82,167026,167027,167029,167031,167033],{"class":84,"line":157},[82,167028,1354],{"class":96},[82,167030,1357],{"class":92},[82,167032,1360],{"class":96},[82,167034,1363],{"class":92},[82,167036,167037,167039,167041,167043],{"class":84,"line":404},[82,167038,1368],{"class":96},[82,167040,1357],{"class":92},[82,167042,1373],{"class":88},[82,167044,1363],{"class":92},[82,167046,167047,167049,167051],{"class":84,"line":413},[82,167048,1380],{"class":96},[82,167050,1357],{"class":92},[82,167052,1385],{"class":88},[82,167054,167055],{"class":84,"line":508},[82,167056,1391],{"class":92},[19,167058,167059],{},"获取值：",[73,167061,167063],{"className":75,"code":167062,"language":77,"meta":78,"style":78},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[32,167064,167065,167076],{"__ignoreMap":78},[82,167066,167067,167069,167072,167074],{"class":84,"line":85},[82,167068,407],{"class":88},[82,167070,167071],{"class":92},"(student[",[82,167073,1471],{"class":96},[82,167075,7252],{"class":92},[82,167077,167078,167080,167083,167085],{"class":84,"line":157},[82,167079,407],{"class":88},[82,167081,167082],{"class":92},"(student.get(",[82,167084,1471],{"class":96},[82,167086,33074],{"class":92},[19,167088,17974],{},[73,167090,167092],{"className":75,"code":167091,"language":77,"meta":78,"style":78},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[32,167093,167094,167107],{"__ignoreMap":78},[82,167095,167096,167098,167101,167104],{"class":84,"line":85},[82,167097,155373],{"class":92},[82,167099,167100],{"class":96},"\"address\"",[82,167102,167103],{"class":92},"]     ",[82,167105,167106],{"class":2828},"# key不存在会报错\n",[82,167108,167109,167112,167114,167116],{"class":84,"line":157},[82,167110,167111],{"class":92},"student.get(",[82,167113,167100],{"class":96},[82,167115,725],{"class":92},[82,167117,167118],{"class":2828},"# key不存在返回None\n",[19,167120,167121],{},"设置默认值：",[73,167123,167125],{"className":75,"code":167124,"language":77,"meta":78,"style":78},"print(student.get(\"address\", \"未知\"))\n",[32,167126,167127],{"__ignoreMap":78},[82,167128,167129,167131,167133,167135,167137,167140],{"class":84,"line":85},[82,167130,407],{"class":88},[82,167132,167082],{"class":92},[82,167134,167100],{"class":96},[82,167136,100],{"class":92},[82,167138,167139],{"class":96},"\"未知\"",[82,167141,33074],{"class":92},[19,167143,167144],{},"新增和修改：",[73,167146,167148],{"className":75,"code":167147,"language":77,"meta":78,"style":78},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[32,167149,167150,167163],{"__ignoreMap":78},[82,167151,167152,167154,167156,167158,167160],{"class":84,"line":85},[82,167153,155373],{"class":92},[82,167155,1480],{"class":96},[82,167157,7038],{"class":92},[82,167159,113],{"class":112},[82,167161,167162],{"class":88}," 19\n",[82,167164,167165,167167,167169,167171,167173],{"class":84,"line":157},[82,167166,155373],{"class":92},[82,167168,167100],{"class":96},[82,167170,7038],{"class":92},[82,167172,113],{"class":112},[82,167174,167175],{"class":96}," \"北京\"\n",[19,167177,167178],{},"删除：",[73,167180,167182],{"className":75,"code":167181,"language":77,"meta":78,"style":78},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[32,167183,167184,167197,167207],{"__ignoreMap":78},[82,167185,167186,167188,167190,167193,167195],{"class":84,"line":85},[82,167187,157867],{"class":92},[82,167189,113],{"class":112},[82,167191,167192],{"class":92}," student.pop(",[82,167194,1489],{"class":96},[82,167196,119],{"class":92},[82,167198,167199,167201,167203,167205],{"class":84,"line":157},[82,167200,165888],{"class":112},[82,167202,154663],{"class":92},[82,167204,1480],{"class":96},[82,167206,875],{"class":92},[82,167208,167209],{"class":84,"line":404},[82,167210,167211],{"class":92},"student.clear()\n",[14,167213,167215],{"id":167214},"_611-字典遍历","6.11 字典遍历",[19,167217,167218],{},"遍历 key：",[73,167220,167222],{"className":75,"code":167221,"language":77,"meta":78,"style":78},"for key in student:\n    print(key, student[key])\n",[32,167223,167224,167236],{"__ignoreMap":78},[82,167225,167226,167228,167231,167233],{"class":84,"line":85},[82,167227,597],{"class":112},[82,167229,167230],{"class":92}," key ",[82,167232,603],{"class":112},[82,167234,167235],{"class":92}," student:\n",[82,167237,167238,167240],{"class":84,"line":157},[82,167239,611],{"class":88},[82,167241,167242],{"class":92},"(key, student[key])\n",[19,167244,167245],{},"遍历 value：",[73,167247,167249],{"className":75,"code":167248,"language":77,"meta":78,"style":78},"for value in student.values():\n    print(value)\n",[32,167250,167251,167263],{"__ignoreMap":78},[82,167252,167253,167255,167258,167260],{"class":84,"line":85},[82,167254,597],{"class":112},[82,167256,167257],{"class":92}," value ",[82,167259,603],{"class":112},[82,167261,167262],{"class":92}," student.values():\n",[82,167264,167265,167267],{"class":84,"line":157},[82,167266,611],{"class":88},[82,167268,167269],{"class":92},"(value)\n",[19,167271,167272],{},"遍历 key 和 value：",[73,167274,167276],{"className":75,"code":167275,"language":77,"meta":78,"style":78},"for key, value in student.items():\n    print(key, value)\n",[32,167277,167278,167290],{"__ignoreMap":78},[82,167279,167280,167282,167285,167287],{"class":84,"line":85},[82,167281,597],{"class":112},[82,167283,167284],{"class":92}," key, value ",[82,167286,603],{"class":112},[82,167288,167289],{"class":92}," student.items():\n",[82,167291,167292,167294],{"class":84,"line":157},[82,167293,611],{"class":88},[82,167295,167296],{"class":92},"(key, value)\n",[14,167298,167300],{"id":167299},"_612-嵌套容器","6.12 嵌套容器",[19,167302,167303],{},"列表中保存字典，是项目中最常见的结构之一。",[73,167305,167307],{"className":75,"code":167306,"language":77,"meta":78,"style":78},"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",[32,167308,167309,167317,167345,167373,167401,167405,167409,167419],{"__ignoreMap":78},[82,167310,167311,167313,167315],{"class":84,"line":85},[82,167312,1458],{"class":92},[82,167314,113],{"class":112},[82,167316,1463],{"class":92},[82,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335,167337,167339,167341,167343],{"class":84,"line":157},[82,167320,1468],{"class":92},[82,167322,1471],{"class":96},[82,167324,1357],{"class":92},[82,167326,1360],{"class":96},[82,167328,100],{"class":92},[82,167330,1480],{"class":96},[82,167332,1357],{"class":92},[82,167334,1373],{"class":88},[82,167336,100],{"class":92},[82,167338,1489],{"class":96},[82,167340,1357],{"class":92},[82,167342,1494],{"class":88},[82,167344,1497],{"class":92},[82,167346,167347,167349,167351,167353,167355,167357,167359,167361,167363,167365,167367,167369,167371],{"class":84,"line":404},[82,167348,1468],{"class":92},[82,167350,1471],{"class":96},[82,167352,1357],{"class":92},[82,167354,1508],{"class":96},[82,167356,100],{"class":92},[82,167358,1480],{"class":96},[82,167360,1357],{"class":92},[82,167362,1517],{"class":88},[82,167364,100],{"class":92},[82,167366,1489],{"class":96},[82,167368,1357],{"class":92},[82,167370,1526],{"class":88},[82,167372,1497],{"class":92},[82,167374,167375,167377,167379,167381,167383,167385,167387,167389,167391,167393,167395,167397,167399],{"class":84,"line":413},[82,167376,1468],{"class":92},[82,167378,1471],{"class":96},[82,167380,1357],{"class":92},[82,167382,162236],{"class":96},[82,167384,100],{"class":92},[82,167386,1480],{"class":96},[82,167388,1357],{"class":92},[82,167390,3426],{"class":88},[82,167392,100],{"class":92},[82,167394,1489],{"class":96},[82,167396,1357],{"class":92},[82,167398,3164],{"class":88},[82,167400,1497],{"class":92},[82,167402,167403],{"class":84,"line":508},[82,167404,875],{"class":92},[82,167406,167407],{"class":84,"line":513},[82,167408,486],{"emptyLinePlaceholder":485},[82,167410,167411,167413,167415,167417],{"class":84,"line":1388},[82,167412,597],{"class":112},[82,167414,154651],{"class":92},[82,167416,603],{"class":112},[82,167418,154656],{"class":92},[82,167420,167421,167423,167425,167427,167430,167432],{"class":84,"line":1394},[82,167422,611],{"class":88},[82,167424,167071],{"class":92},[82,167426,1471],{"class":96},[82,167428,167429],{"class":92},"], student[",[82,167431,1489],{"class":96},[82,167433,7252],{"class":92},[19,167435,167436],{},"统计平均分：",[73,167438,167440],{"className":75,"code":167439,"language":77,"meta":78,"style":78},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[32,167441,167442,167450,167454,167464,167476,167480,167494],{"__ignoreMap":78},[82,167443,167444,167446,167448],{"class":84,"line":85},[82,167445,159766],{"class":92},[82,167447,113],{"class":112},[82,167449,49897],{"class":88},[82,167451,167452],{"class":84,"line":157},[82,167453,486],{"emptyLinePlaceholder":485},[82,167455,167456,167458,167460,167462],{"class":84,"line":404},[82,167457,597],{"class":112},[82,167459,154651],{"class":92},[82,167461,603],{"class":112},[82,167463,154656],{"class":92},[82,167465,167466,167468,167470,167472,167474],{"class":84,"line":413},[82,167467,161813],{"class":92},[82,167469,12068],{"class":112},[82,167471,154663],{"class":92},[82,167473,1489],{"class":96},[82,167475,875],{"class":92},[82,167477,167478],{"class":84,"line":508},[82,167479,486],{"emptyLinePlaceholder":485},[82,167481,167482,167484,167486,167488,167490,167492],{"class":84,"line":513},[82,167483,166277],{"class":92},[82,167485,113],{"class":112},[82,167487,166282],{"class":92},[82,167489,1147],{"class":112},[82,167491,9923],{"class":88},[82,167493,1665],{"class":92},[82,167495,167496,167498,167500,167502,167504,167506,167508,167510,167512,167514],{"class":84,"line":1388},[82,167497,407],{"class":88},[82,167499,93],{"class":92},[82,167501,2822],{"class":112},[82,167503,166300],{"class":96},[82,167505,3645],{"class":88},[82,167507,166305],{"class":92},[82,167509,159665],{"class":112},[82,167511,3695],{"class":88},[82,167513,216],{"class":96},[82,167515,119],{"class":92},[19,167517,167518],{},"查找学生：",[73,167520,167522],{"className":75,"code":167521,"language":77,"meta":78,"style":78},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[32,167523,167524,167539,167543,167553,167567,167573,167577,167583],{"__ignoreMap":78},[82,167525,167526,167528,167530,167532,167534,167537],{"class":84,"line":85},[82,167527,114124],{"class":92},[82,167529,113],{"class":112},[82,167531,63163],{"class":88},[82,167533,93],{"class":92},[82,167535,167536],{"class":96},"\"请输入学生姓名:\"",[82,167538,119],{"class":92},[82,167540,167541],{"class":84,"line":157},[82,167542,486],{"emptyLinePlaceholder":485},[82,167544,167545,167547,167549,167551],{"class":84,"line":404},[82,167546,597],{"class":112},[82,167548,154651],{"class":92},[82,167550,603],{"class":112},[82,167552,154656],{"class":92},[82,167554,167555,167557,167559,167561,167563,167565],{"class":84,"line":413},[82,167556,2219],{"class":112},[82,167558,154663],{"class":92},[82,167560,1471],{"class":96},[82,167562,7038],{"class":92},[82,167564,5548],{"class":112},[82,167566,162937],{"class":92},[82,167568,167569,167571],{"class":84,"line":508},[82,167570,1901],{"class":88},[82,167572,152568],{"class":92},[82,167574,167575],{"class":84,"line":513},[82,167576,34199],{"class":112},[82,167578,167579,167581],{"class":84,"line":1388},[82,167580,4304],{"class":112},[82,167582,669],{"class":92},[82,167584,167585,167587,167589,167592],{"class":84,"line":1394},[82,167586,611],{"class":88},[82,167588,93],{"class":92},[82,167590,167591],{"class":96},"\"没有找到\"",[82,167593,119],{"class":92},[14,167595,167597],{"id":167596},"_613-容器通用操作","6.13 容器通用操作",[19,167599,167600],{},"长度：",[73,167602,167604],{"className":75,"code":167603,"language":77,"meta":78,"style":78},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[32,167605,167606,167625,167635],{"__ignoreMap":78},[82,167607,167608,167610,167613,167615,167617,167619,167621,167623],{"class":84,"line":85},[82,167609,9950],{"class":88},[82,167611,167612],{"class":92},"([",[82,167614,2283],{"class":88},[82,167616,100],{"class":92},[82,167618,1425],{"class":88},[82,167620,100],{"class":92},[82,167622,2841],{"class":88},[82,167624,7252],{"class":92},[82,167626,167627,167629,167631,167633],{"class":84,"line":157},[82,167628,9950],{"class":88},[82,167630,93],{"class":92},[82,167632,158389],{"class":96},[82,167634,119],{"class":92},[82,167636,167637,167639,167642,167644,167646,167648],{"class":84,"line":404},[82,167638,9950],{"class":88},[82,167640,167641],{"class":92},"({",[82,167643,1471],{"class":96},[82,167645,1357],{"class":92},[82,167647,1360],{"class":96},[82,167649,2576],{"class":92},[19,167651,167652],{},"最大最小：",[73,167654,167656],{"className":75,"code":167655,"language":77,"meta":78,"style":78},"max([1, 2, 3])\nmin([1, 2, 3])\n",[32,167657,167658,167676],{"__ignoreMap":78},[82,167659,167660,167662,167664,167666,167668,167670,167672,167674],{"class":84,"line":85},[82,167661,8607],{"class":88},[82,167663,167612],{"class":92},[82,167665,2283],{"class":88},[82,167667,100],{"class":92},[82,167669,1425],{"class":88},[82,167671,100],{"class":92},[82,167673,2841],{"class":88},[82,167675,7252],{"class":92},[82,167677,167678,167681,167683,167685,167687,167689,167691,167693],{"class":84,"line":157},[82,167679,167680],{"class":88},"min",[82,167682,167612],{"class":92},[82,167684,2283],{"class":88},[82,167686,100],{"class":92},[82,167688,1425],{"class":88},[82,167690,100],{"class":92},[82,167692,2841],{"class":88},[82,167694,7252],{"class":92},[19,167696,167697],{},"求和：",[73,167699,167701],{"className":75,"code":167700,"language":77,"meta":78,"style":78},"sum([1, 2, 3])\n",[32,167702,167703],{"__ignoreMap":78},[82,167704,167705,167708,167710,167712,167714,167716,167718,167720],{"class":84,"line":85},[82,167706,167707],{"class":88},"sum",[82,167709,167612],{"class":92},[82,167711,2283],{"class":88},[82,167713,100],{"class":92},[82,167715,1425],{"class":88},[82,167717,100],{"class":92},[82,167719,2841],{"class":88},[82,167721,7252],{"class":92},[19,167723,165976],{},[73,167725,167727],{"className":75,"code":167726,"language":77,"meta":78,"style":78},"sorted([3, 1, 2])\n",[32,167728,167729],{"__ignoreMap":78},[82,167730,167731,167734,167736,167738,167740,167742,167744,167746],{"class":84,"line":85},[82,167732,167733],{"class":88},"sorted",[82,167735,167612],{"class":92},[82,167737,2841],{"class":88},[82,167739,100],{"class":92},[82,167741,2283],{"class":88},[82,167743,100],{"class":92},[82,167745,1425],{"class":88},[82,167747,7252],{"class":92},[19,167749,167750],{},"类型转换：",[73,167752,167754],{"className":75,"code":167753,"language":77,"meta":78,"style":78},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[32,167755,167756,167766,167784],{"__ignoreMap":78},[82,167757,167758,167760,167762,167764],{"class":84,"line":85},[82,167759,156579],{"class":88},[82,167761,93],{"class":92},[82,167763,158389],{"class":96},[82,167765,119],{"class":92},[82,167767,167768,167770,167772,167774,167776,167778,167780,167782],{"class":84,"line":157},[82,167769,157774],{"class":88},[82,167771,167612],{"class":92},[82,167773,2283],{"class":88},[82,167775,100],{"class":92},[82,167777,1425],{"class":88},[82,167779,100],{"class":92},[82,167781,2841],{"class":88},[82,167783,7252],{"class":92},[82,167785,167786,167788,167790,167792,167794,167796,167798,167800,167802,167804],{"class":84,"line":404},[82,167787,157799],{"class":88},[82,167789,167612],{"class":92},[82,167791,2283],{"class":88},[82,167793,100],{"class":92},[82,167795,2283],{"class":88},[82,167797,100],{"class":92},[82,167799,1425],{"class":88},[82,167801,100],{"class":92},[82,167803,2841],{"class":88},[82,167805,7252],{"class":92},[19,167807,167808],{},"成员判断：",[73,167810,167812],{"className":75,"code":167811,"language":77,"meta":78,"style":78},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[32,167813,167814,167830,167854],{"__ignoreMap":78},[82,167815,167816,167818,167820,167822,167825,167828],{"class":84,"line":85},[82,167817,407],{"class":88},[82,167819,93],{"class":92},[82,167821,947],{"class":96},[82,167823,167824],{"class":112}," in",[82,167826,167827],{"class":96}," \"abc\"",[82,167829,119],{"class":92},[82,167831,167832,167834,167836,167838,167840,167842,167844,167846,167848,167850,167852],{"class":84,"line":157},[82,167833,407],{"class":88},[82,167835,93],{"class":92},[82,167837,2283],{"class":88},[82,167839,167824],{"class":112},[82,167841,847],{"class":92},[82,167843,2283],{"class":88},[82,167845,100],{"class":92},[82,167847,1425],{"class":88},[82,167849,100],{"class":92},[82,167851,2841],{"class":88},[82,167853,7252],{"class":92},[82,167855,167856,167858,167860,167862,167864,167866,167868,167870,167872],{"class":84,"line":404},[82,167857,407],{"class":88},[82,167859,93],{"class":92},[82,167861,1471],{"class":96},[82,167863,167824],{"class":112},[82,167865,7043],{"class":92},[82,167867,1471],{"class":96},[82,167869,1357],{"class":92},[82,167871,1360],{"class":96},[82,167873,2576],{"class":92},[14,167875,167877],{"id":167876},"_614-推导式","6.14 推导式",[19,167879,167880],{},"推导式用于快速生成容器。",[19,167882,167883],{},"列表推导式：",[73,167885,167887],{"className":75,"code":167886,"language":77,"meta":78,"style":78},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[32,167888,167889,167916],{"__ignoreMap":78},[82,167890,167891,167893,167895,167898,167900,167902,167904,167906,167908,167910,167912,167914],{"class":84,"line":85},[82,167892,166602],{"class":92},[82,167894,113],{"class":112},[82,167896,167897],{"class":92}," [i ",[82,167899,597],{"class":112},[82,167901,12029],{"class":92},[82,167903,603],{"class":112},[82,167905,35013],{"class":88},[82,167907,93],{"class":92},[82,167909,2283],{"class":88},[82,167911,100],{"class":92},[82,167913,3102],{"class":88},[82,167915,99851],{"class":92},[82,167917,167918,167920],{"class":84,"line":157},[82,167919,407],{"class":88},[82,167921,166818],{"class":92},[19,167923,167924],{},"带条件：",[73,167926,167928],{"className":75,"code":167927,"language":77,"meta":78,"style":78},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[32,167929,167930,167971],{"__ignoreMap":78},[82,167931,167932,167935,167937,167939,167941,167943,167945,167947,167949,167951,167953,167955,167957,167959,167961,167963,167965,167967,167969],{"class":84,"line":85},[82,167933,167934],{"class":92},"even_nums ",[82,167936,113],{"class":112},[82,167938,167897],{"class":92},[82,167940,597],{"class":112},[82,167942,12029],{"class":92},[82,167944,603],{"class":112},[82,167946,35013],{"class":88},[82,167948,93],{"class":92},[82,167950,2283],{"class":88},[82,167952,100],{"class":92},[82,167954,3095],{"class":88},[82,167956,725],{"class":92},[82,167958,1237],{"class":112},[82,167960,12029],{"class":92},[82,167962,3086],{"class":112},[82,167964,17341],{"class":88},[82,167966,104110],{"class":112},[82,167968,6688],{"class":88},[82,167970,875],{"class":92},[82,167972,167973,167975],{"class":84,"line":157},[82,167974,407],{"class":88},[82,167976,167977],{"class":92},"(even_nums)\n",[19,167979,167980],{},"字典推导式：",[73,167982,167984],{"className":75,"code":167983,"language":77,"meta":78,"style":78},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[32,167985,167986,168020],{"__ignoreMap":78},[82,167987,167988,167991,167993,167996,167998,168000,168003,168005,168007,168009,168011,168013,168015,168017],{"class":84,"line":85},[82,167989,167990],{"class":92},"squares ",[82,167992,113],{"class":112},[82,167994,167995],{"class":92}," {i: i ",[82,167997,13251],{"class":112},[82,167999,17341],{"class":88},[82,168001,168002],{"class":112}," for",[82,168004,12029],{"class":92},[82,168006,603],{"class":112},[82,168008,35013],{"class":88},[82,168010,93],{"class":92},[82,168012,2283],{"class":88},[82,168014,100],{"class":92},[82,168016,3102],{"class":88},[82,168018,168019],{"class":92},")}\n",[82,168021,168022,168024],{"class":84,"line":157},[82,168023,407],{"class":88},[82,168025,168026],{"class":92},"(squares)\n",[19,168028,168029],{},"集合推导式：",[73,168031,168033],{"className":75,"code":168032,"language":77,"meta":78,"style":78},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[32,168034,168035,168056],{"__ignoreMap":78},[82,168036,168037,168040,168042,168045,168047,168049,168051,168054],{"class":84,"line":85},[82,168038,168039],{"class":92},"chars ",[82,168041,113],{"class":112},[82,168043,168044],{"class":92}," {ch ",[82,168046,597],{"class":112},[82,168048,162198],{"class":92},[82,168050,603],{"class":112},[82,168052,168053],{"class":96}," \"hello\"",[82,168055,1391],{"class":92},[82,168057,168058,168060],{"class":84,"line":157},[82,168059,407],{"class":88},[82,168061,168062],{"class":92},"(chars)\n",[19,168064,168065],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,168067,168069],{"id":168068},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[73,168071,168073],{"className":75,"code":168072,"language":77,"meta":78,"style":78},"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",[32,168074,168075,168083,168103,168123,168143,168163,168167,168171,168179,168193,168202,168206,168216,168228,168232,168251,168260,168264,168280,168285,168289,168303,168307,168329,168365],{"__ignoreMap":78},[82,168076,168077,168079,168081],{"class":84,"line":85},[82,168078,1458],{"class":92},[82,168080,113],{"class":112},[82,168082,1463],{"class":92},[82,168084,168085,168087,168089,168091,168093,168095,168097,168099,168101],{"class":84,"line":157},[82,168086,1468],{"class":92},[82,168088,1471],{"class":96},[82,168090,1357],{"class":92},[82,168092,1360],{"class":96},[82,168094,100],{"class":92},[82,168096,1489],{"class":96},[82,168098,1357],{"class":92},[82,168100,1494],{"class":88},[82,168102,1497],{"class":92},[82,168104,168105,168107,168109,168111,168113,168115,168117,168119,168121],{"class":84,"line":404},[82,168106,1468],{"class":92},[82,168108,1471],{"class":96},[82,168110,1357],{"class":92},[82,168112,1508],{"class":96},[82,168114,100],{"class":92},[82,168116,1489],{"class":96},[82,168118,1357],{"class":92},[82,168120,1526],{"class":88},[82,168122,1497],{"class":92},[82,168124,168125,168127,168129,168131,168133,168135,168137,168139,168141],{"class":84,"line":413},[82,168126,1468],{"class":92},[82,168128,1471],{"class":96},[82,168130,1357],{"class":92},[82,168132,162236],{"class":96},[82,168134,100],{"class":92},[82,168136,1489],{"class":96},[82,168138,1357],{"class":92},[82,168140,3164],{"class":88},[82,168142,1497],{"class":92},[82,168144,168145,168147,168149,168151,168153,168155,168157,168159,168161],{"class":84,"line":508},[82,168146,1468],{"class":92},[82,168148,1471],{"class":96},[82,168150,1357],{"class":92},[82,168152,165815],{"class":96},[82,168154,100],{"class":92},[82,168156,1489],{"class":96},[82,168158,1357],{"class":92},[82,168160,3631],{"class":88},[82,168162,1497],{"class":92},[82,168164,168165],{"class":84,"line":513},[82,168166,875],{"class":92},[82,168168,168169],{"class":84,"line":1388},[82,168170,486],{"emptyLinePlaceholder":485},[82,168172,168173,168175,168177],{"class":84,"line":1394},[82,168174,159766],{"class":92},[82,168176,113],{"class":112},[82,168178,49897],{"class":88},[82,168180,168181,168184,168186,168189,168191],{"class":84,"line":1399},[82,168182,168183],{"class":92},"max_student ",[82,168185,113],{"class":112},[82,168187,168188],{"class":92}," students[",[82,168190,2244],{"class":88},[82,168192,875],{"class":92},[82,168194,168195,168198,168200],{"class":84,"line":1430},[82,168196,168197],{"class":92},"passed ",[82,168199,113],{"class":112},[82,168201,2408],{"class":92},[82,168203,168204],{"class":84,"line":1818},[82,168205,486],{"emptyLinePlaceholder":485},[82,168207,168208,168210,168212,168214],{"class":84,"line":2082},[82,168209,597],{"class":112},[82,168211,154651],{"class":92},[82,168213,603],{"class":112},[82,168215,154656],{"class":92},[82,168217,168218,168220,168222,168224,168226],{"class":84,"line":2233},[82,168219,161813],{"class":92},[82,168221,12068],{"class":112},[82,168223,154663],{"class":92},[82,168225,1489],{"class":96},[82,168227,875],{"class":92},[82,168229,168230],{"class":84,"line":2255},[82,168231,486],{"emptyLinePlaceholder":485},[82,168233,168234,168236,168238,168240,168242,168244,168247,168249],{"class":84,"line":2260},[82,168235,2219],{"class":112},[82,168237,154663],{"class":92},[82,168239,1489],{"class":96},[82,168241,7038],{"class":92},[82,168243,3709],{"class":112},[82,168245,168246],{"class":92}," max_student[",[82,168248,1489],{"class":96},[82,168250,2318],{"class":92},[82,168252,168253,168256,168258],{"class":84,"line":2298},[82,168254,168255],{"class":92},"        max_student ",[82,168257,113],{"class":112},[82,168259,154679],{"class":92},[82,168261,168262],{"class":84,"line":2303},[82,168263,486],{"emptyLinePlaceholder":485},[82,168265,168266,168268,168270,168272,168274,168276,168278],{"class":84,"line":2321},[82,168267,2219],{"class":112},[82,168269,154663],{"class":92},[82,168271,1489],{"class":96},[82,168273,7038],{"class":92},[82,168275,4313],{"class":112},[82,168277,160343],{"class":88},[82,168279,669],{"class":92},[82,168281,168282],{"class":84,"line":2533},[82,168283,168284],{"class":92},"        passed.append(student)\n",[82,168286,168287],{"class":84,"line":2538},[82,168288,486],{"emptyLinePlaceholder":485},[82,168290,168291,168293,168295,168297,168299,168301],{"class":84,"line":2548},[82,168292,166277],{"class":92},[82,168294,113],{"class":112},[82,168296,166282],{"class":92},[82,168298,1147],{"class":112},[82,168300,9923],{"class":88},[82,168302,1665],{"class":92},[82,168304,168305],{"class":84,"line":2579},[82,168306,486],{"emptyLinePlaceholder":485},[82,168308,168309,168311,168313,168315,168317,168319,168321,168323,168325,168327],{"class":84,"line":2585},[82,168310,407],{"class":88},[82,168312,93],{"class":92},[82,168314,2822],{"class":112},[82,168316,166300],{"class":96},[82,168318,3645],{"class":88},[82,168320,166305],{"class":92},[82,168322,159665],{"class":112},[82,168324,3695],{"class":88},[82,168326,216],{"class":96},[82,168328,119],{"class":92},[82,168330,168331,168333,168335,168337,168340,168342,168345,168347,168349,168351,168353,168355,168357,168359,168361,168363],{"class":84,"line":4350},[82,168332,407],{"class":88},[82,168334,93],{"class":92},[82,168336,2822],{"class":112},[82,168338,168339],{"class":96},"\"最高分学生:",[82,168341,3645],{"class":88},[82,168343,168344],{"class":92},"max_student[",[82,168346,155396],{"class":96},[82,168348,3689],{"class":92},[82,168350,3695],{"class":88},[82,168352,7043],{"class":88},[82,168354,168344],{"class":92},[82,168356,155434],{"class":96},[82,168358,3689],{"class":92},[82,168360,3695],{"class":88},[82,168362,216],{"class":96},[82,168364,119],{"class":92},[82,168366,168367,168369,168371,168373,168376,168379,168382,168384,168386],{"class":84,"line":4355},[82,168368,407],{"class":88},[82,168370,93],{"class":92},[82,168372,2822],{"class":112},[82,168374,168375],{"class":96},"\"及格人数:",[82,168377,168378],{"class":88},"{len",[82,168380,168381],{"class":92},"(passed)",[82,168383,3695],{"class":88},[82,168385,216],{"class":96},[82,168387,119],{"class":92},[14,168389,168391],{"id":168390},"_616-易错点","6.16 易错点",[26,168393,168394,168397,168400,168403,168409,168418],{},[29,168395,168396],{},"列表可变，元组和字符串不可变。",[29,168398,168399],{},"切片结束位置不包含。",[29,168401,168402],{},"字典通过 key 取值，不是通过索引。",[29,168404,168405,168406,2611],{},"空集合要用 ",[32,168407,168408],{},"set()",[29,168410,106916,168411,168414,168415,2611],{},[32,168412,168413],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[32,168416,168417],{},"get()",[29,168419,168420],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168422,168424],{"id":168423},"_617-本章练习","6.17 本章练习",[26,168426,168427,168430,168433,168436,168439],{},[29,168428,168429],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,168431,168432],{},"输入一句话，统计每个字符出现次数。",[29,168434,168435],{},"使用集合去除列表中的重复元素。",[29,168437,168438],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,168440,168441],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2671,168443,168444],{},"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":78,"searchDepth":157,"depth":157,"links":168446},[168447,168448,168449,168450,168451,168452,168453,168454,168455,168456,168457,168458,168459,168460,168461,168462,168463],{"id":165437,"depth":157,"text":165438},{"id":165554,"depth":157,"text":165555},{"id":165644,"depth":157,"text":165645},{"id":165768,"depth":157,"text":165769},{"id":166129,"depth":157,"text":166130},{"id":166316,"depth":157,"text":166317},{"id":166435,"depth":157,"text":166436},{"id":166576,"depth":157,"text":166577},{"id":166763,"depth":157,"text":166764},{"id":167007,"depth":157,"text":167008},{"id":167214,"depth":157,"text":167215},{"id":167299,"depth":157,"text":167300},{"id":167596,"depth":157,"text":167597},{"id":167876,"depth":157,"text":167877},{"id":168068,"depth":157,"text":168069},{"id":168390,"depth":157,"text":168391},{"id":168423,"depth":157,"text":168424},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165429,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168470,"title":168471,"body":168472,"description":2699,"extension":2700,"meta":170644,"navigation":485,"path":170645,"seo":170646,"stem":170647,"__hash__":170648},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168473,"toc":170619},[168474,168477,168481,168484,168564,168567,168588,168591,168595,168598,168660,168663,168680,168684,168687,168732,168734,168742,168746,168749,168831,168834,168837,168862,168865,168888,168892,168895,168897,168959,168962,168964,169015,169019,169023,169029,169134,169138,169144,169215,169219,169222,169290,169293,169373,169377,169383,169419,169422,169425,169535,169541,169545,169548,169620,169623,169627,169631,169636,169698,169702,169707,169775,169779,169784,169900,169904,169907,169987,169990,169994,169997,170101,170103,170118,170121,170125,170263,170271,170275,170277,170288,170290,170548,170552,170584,170588,170616],[10,168475,168471],{"id":168476},"_7-函数进阶",[14,168478,168480],{"id":168479},"_71-多返回值","7.1 多返回值",[19,168482,168483],{},"Python 函数可以返回多个值，本质上返回的是元组。",[73,168485,168487],{"className":75,"code":168486,"language":77,"meta":78,"style":78},"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",[32,168488,168489,168498,168506,168514,168523,168530,168534,168538,168547,168553],{"__ignoreMap":78},[82,168490,168491,168493,168496],{"class":84,"line":85},[82,168492,2381],{"class":112},[82,168494,168495],{"class":2384}," get_info",[82,168497,2388],{"class":92},[82,168499,168500,168502,168504],{"class":84,"line":157},[82,168501,154884],{"class":92},[82,168503,113],{"class":112},[82,168505,151881],{"class":96},[82,168507,168508,168510,168512],{"class":84,"line":404},[82,168509,154900],{"class":92},[82,168511,113],{"class":112},[82,168513,149093],{"class":88},[82,168515,168516,168518,168520],{"class":84,"line":413},[82,168517,154915],{"class":92},[82,168519,113],{"class":112},[82,168521,168522],{"class":88}," 95\n",[82,168524,168525,168527],{"class":84,"line":508},[82,168526,6685],{"class":112},[82,168528,168529],{"class":92}," name, age, score\n",[82,168531,168532],{"class":84,"line":513},[82,168533,486],{"emptyLinePlaceholder":485},[82,168535,168536],{"class":84,"line":1388},[82,168537,486],{"emptyLinePlaceholder":485},[82,168539,168540,168542,168544],{"class":84,"line":1394},[82,168541,163811],{"class":92},[82,168543,113],{"class":112},[82,168545,168546],{"class":92}," get_info()\n",[82,168548,168549,168551],{"class":84,"line":1399},[82,168550,407],{"class":88},[82,168552,79139],{"class":92},[82,168554,168555,168557,168559,168561],{"class":84,"line":1430},[82,168556,407],{"class":88},[82,168558,93],{"class":92},[82,168560,105658],{"class":88},[82,168562,168563],{"class":92},"(result))\n",[19,168565,168566],{},"可以直接解包：",[73,168568,168570],{"className":75,"code":168569,"language":77,"meta":78,"style":78},"name, age, score = get_info()\nprint(name, age, score)\n",[32,168571,168572,168581],{"__ignoreMap":78},[82,168573,168574,168577,168579],{"class":84,"line":85},[82,168575,168576],{"class":92},"name, age, score ",[82,168578,113],{"class":112},[82,168580,168546],{"class":92},[82,168582,168583,168585],{"class":84,"line":157},[82,168584,407],{"class":88},[82,168586,168587],{"class":92},"(name, age, score)\n",[19,168589,168590],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168592,168594],{"id":168593},"_72-位置参数","7.2 位置参数",[19,168596,168597],{},"位置参数按顺序传递。",[73,168599,168601],{"className":75,"code":168600,"language":77,"meta":78,"style":78},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[32,168602,168603,168611,168639,168643,168647],{"__ignoreMap":78},[82,168604,168605,168607,168609],{"class":84,"line":85},[82,168606,2381],{"class":112},[82,168608,151900],{"class":2384},[82,168610,151903],{"class":92},[82,168612,168613,168615,168617,168619,168621,168623,168625,168627,168629,168631,168633,168635,168637],{"class":84,"line":157},[82,168614,611],{"class":88},[82,168616,93],{"class":92},[82,168618,2822],{"class":112},[82,168620,151914],{"class":96},[82,168622,3645],{"class":88},[82,168624,82364],{"class":92},[82,168626,3695],{"class":88},[82,168628,151923],{"class":96},[82,168630,3645],{"class":88},[82,168632,72777],{"class":92},[82,168634,3695],{"class":88},[82,168636,151932],{"class":96},[82,168638,119],{"class":92},[82,168640,168641],{"class":84,"line":404},[82,168642,486],{"emptyLinePlaceholder":485},[82,168644,168645],{"class":84,"line":413},[82,168646,486],{"emptyLinePlaceholder":485},[82,168648,168649,168652,168654,168656,168658],{"class":84,"line":508},[82,168650,168651],{"class":92},"introduce(",[82,168653,1360],{"class":96},[82,168655,100],{"class":92},[82,168657,1373],{"class":88},[82,168659,119],{"class":92},[19,168661,168662],{},"顺序错了就会得到错误含义：",[73,168664,168666],{"className":75,"code":168665,"language":77,"meta":78,"style":78},"introduce(18, \"小明\")\n",[32,168667,168668],{"__ignoreMap":78},[82,168669,168670,168672,168674,168676,168678],{"class":84,"line":85},[82,168671,168651],{"class":92},[82,168673,1373],{"class":88},[82,168675,100],{"class":92},[82,168677,1360],{"class":96},[82,168679,119],{"class":92},[14,168681,168683],{"id":168682},"_73-关键字参数","7.3 关键字参数",[19,168685,168686],{},"关键字参数按参数名传递。",[73,168688,168690],{"className":75,"code":168689,"language":77,"meta":78,"style":78},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[32,168691,168692,168712],{"__ignoreMap":78},[82,168693,168694,168696,168698,168700,168702,168704,168706,168708,168710],{"class":84,"line":85},[82,168695,168651],{"class":92},[82,168697,82364],{"class":108},[82,168699,113],{"class":112},[82,168701,1360],{"class":96},[82,168703,100],{"class":92},[82,168705,72777],{"class":108},[82,168707,113],{"class":112},[82,168709,1373],{"class":88},[82,168711,119],{"class":92},[82,168713,168714,168716,168718,168720,168722,168724,168726,168728,168730],{"class":84,"line":157},[82,168715,168651],{"class":92},[82,168717,72777],{"class":108},[82,168719,113],{"class":112},[82,168721,1373],{"class":88},[82,168723,100],{"class":92},[82,168725,82364],{"class":108},[82,168727,113],{"class":112},[82,168729,1360],{"class":96},[82,168731,119],{"class":92},[19,168733,120479],{},[26,168735,168736,168739],{},[29,168737,168738],{},"顺序不容易错。",[29,168740,168741],{},"调用时可读性更强。",[14,168743,168745],{"id":168744},"_74-默认参数","7.4 默认参数",[19,168747,168748],{},"默认参数给参数设置默认值。",[73,168750,168752],{"className":75,"code":168751,"language":77,"meta":78,"style":78},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[32,168753,168754,168770,168800,168804,168808,168818],{"__ignoreMap":78},[82,168755,168756,168758,168760,168763,168765,168768],{"class":84,"line":85},[82,168757,2381],{"class":112},[82,168759,124638],{"class":2384},[82,168761,168762],{"class":92},"(host, port",[82,168764,113],{"class":112},[82,168766,168767],{"class":88},"3306",[82,168769,33362],{"class":92},[82,168771,168772,168774,168776,168778,168781,168783,168785,168787,168789,168791,168794,168796,168798],{"class":84,"line":157},[82,168773,611],{"class":88},[82,168775,93],{"class":92},[82,168777,2822],{"class":112},[82,168779,168780],{"class":96},"\"连接",[82,168782,3645],{"class":88},[82,168784,29977],{"class":92},[82,168786,3695],{"class":88},[82,168788,3608],{"class":96},[82,168790,3645],{"class":88},[82,168792,168793],{"class":92},"port",[82,168795,3695],{"class":88},[82,168797,216],{"class":96},[82,168799,119],{"class":92},[82,168801,168802],{"class":84,"line":404},[82,168803,486],{"emptyLinePlaceholder":485},[82,168805,168806],{"class":84,"line":413},[82,168807,486],{"emptyLinePlaceholder":485},[82,168809,168810,168813,168816],{"class":84,"line":508},[82,168811,168812],{"class":92},"connect(",[82,168814,168815],{"class":96},"\"localhost\"",[82,168817,119],{"class":92},[82,168819,168820,168822,168824,168826,168829],{"class":84,"line":513},[82,168821,168812],{"class":92},[82,168823,168815],{"class":96},[82,168825,100],{"class":92},[82,168827,168828],{"class":88},"6379",[82,168830,119],{"class":92},[19,168832,168833],{},"注意：默认参数必须放在非默认参数后面。",[19,168835,168836],{},"错误：",[73,168838,168840],{"className":75,"code":168839,"language":77,"meta":78,"style":78},"def connect(port=3306, host):\n    pass\n",[32,168841,168842,168858],{"__ignoreMap":78},[82,168843,168844,168846,168848,168851,168853,168855],{"class":84,"line":85},[82,168845,2381],{"class":112},[82,168847,124638],{"class":2384},[82,168849,168850],{"class":92},"(port",[82,168852,113],{"class":112},[82,168854,168767],{"class":88},[82,168856,168857],{"class":92},", host):\n",[82,168859,168860],{"class":84,"line":157},[82,168861,152064],{"class":112},[19,168863,168864],{},"正确：",[73,168866,168868],{"className":75,"code":168867,"language":77,"meta":78,"style":78},"def connect(host, port=3306):\n    pass\n",[32,168869,168870,168884],{"__ignoreMap":78},[82,168871,168872,168874,168876,168878,168880,168882],{"class":84,"line":85},[82,168873,2381],{"class":112},[82,168875,124638],{"class":2384},[82,168877,168762],{"class":92},[82,168879,113],{"class":112},[82,168881,168767],{"class":88},[82,168883,33362],{"class":92},[82,168885,168886],{"class":84,"line":157},[82,168887,152064],{"class":112},[14,168889,168891],{"id":168890},"_75-默认参数的坑","7.5 默认参数的坑",[19,168893,168894],{},"不要使用可变对象作为默认参数。",[19,168896,160129],{},[73,168898,168900],{"className":75,"code":168899,"language":77,"meta":78,"style":78},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[32,168901,168902,168917,168922,168929,168933,168937,168948],{"__ignoreMap":78},[82,168903,168904,168906,168909,168912,168914],{"class":84,"line":85},[82,168905,2381],{"class":112},[82,168907,168908],{"class":2384}," add_item",[82,168910,168911],{"class":92},"(item, items",[82,168913,113],{"class":112},[82,168915,168916],{"class":92},"[]):\n",[82,168918,168919],{"class":84,"line":157},[82,168920,168921],{"class":92},"    items.append(item)\n",[82,168923,168924,168926],{"class":84,"line":404},[82,168925,6685],{"class":112},[82,168927,168928],{"class":92}," items\n",[82,168930,168931],{"class":84,"line":413},[82,168932,486],{"emptyLinePlaceholder":485},[82,168934,168935],{"class":84,"line":508},[82,168936,486],{"emptyLinePlaceholder":485},[82,168938,168939,168941,168944,168946],{"class":84,"line":513},[82,168940,407],{"class":88},[82,168942,168943],{"class":92},"(add_item(",[82,168945,947],{"class":96},[82,168947,33074],{"class":92},[82,168949,168950,168952,168954,168957],{"class":84,"line":1388},[82,168951,407],{"class":88},[82,168953,168943],{"class":92},[82,168955,168956],{"class":96},"\"b\"",[82,168958,33074],{"class":92},[19,168960,168961],{},"第二次调用会复用第一次的列表。",[19,168963,158397],{},[73,168965,168967],{"className":75,"code":168966,"language":77,"meta":78,"style":78},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[32,168968,168969,168983,168996,169005,169009],{"__ignoreMap":78},[82,168970,168971,168973,168975,168977,168979,168981],{"class":84,"line":85},[82,168972,2381],{"class":112},[82,168974,168908],{"class":2384},[82,168976,168911],{"class":92},[82,168978,113],{"class":112},[82,168980,98237],{"class":88},[82,168982,33362],{"class":92},[82,168984,168985,168987,168990,168992,168994],{"class":84,"line":157},[82,168986,2219],{"class":112},[82,168988,168989],{"class":92}," items ",[82,168991,41493],{"class":112},[82,168993,41498],{"class":88},[82,168995,669],{"class":92},[82,168997,168998,169001,169003],{"class":84,"line":404},[82,168999,169000],{"class":92},"        items ",[82,169002,113],{"class":112},[82,169004,2408],{"class":92},[82,169006,169007],{"class":84,"line":413},[82,169008,168921],{"class":92},[82,169010,169011,169013],{"class":84,"line":508},[82,169012,6685],{"class":112},[82,169014,168928],{"class":92},[14,169016,169018],{"id":169017},"_76-不定长参数","7.6 不定长参数",[65,169020,169022],{"id":169021},"_761-args","7.6.1 *args",[19,169024,169025,169028],{},[32,169026,169027],{},"*args"," 接收任意数量的位置参数，得到元组。",[73,169030,169032],{"className":75,"code":169031,"language":77,"meta":78,"style":78},"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",[32,169033,169034,169047,169055,169066,169075,169081,169085,169089,169108],{"__ignoreMap":78},[82,169035,169036,169038,169040,169042,169044],{"class":84,"line":85},[82,169037,2381],{"class":112},[82,169039,7802],{"class":2384},[82,169041,93],{"class":92},[82,169043,3212],{"class":112},[82,169045,169046],{"class":92},"args):\n",[82,169048,169049,169051,169053],{"class":84,"line":157},[82,169050,161813],{"class":92},[82,169052,113],{"class":112},[82,169054,49897],{"class":88},[82,169056,169057,169059,169061,169063],{"class":84,"line":404},[82,169058,1888],{"class":112},[82,169060,158689],{"class":92},[82,169062,603],{"class":112},[82,169064,169065],{"class":92}," args:\n",[82,169067,169068,169070,169072],{"class":84,"line":413},[82,169069,162487],{"class":92},[82,169071,12068],{"class":112},[82,169073,169074],{"class":92}," num\n",[82,169076,169077,169079],{"class":84,"line":508},[82,169078,6685],{"class":112},[82,169080,164792],{"class":92},[82,169082,169083],{"class":84,"line":513},[82,169084,486],{"emptyLinePlaceholder":485},[82,169086,169087],{"class":84,"line":1388},[82,169088,486],{"emptyLinePlaceholder":485},[82,169090,169091,169093,169096,169098,169100,169102,169104,169106],{"class":84,"line":1394},[82,169092,407],{"class":88},[82,169094,169095],{"class":92},"(add(",[82,169097,2283],{"class":88},[82,169099,100],{"class":92},[82,169101,1425],{"class":88},[82,169103,100],{"class":92},[82,169105,2841],{"class":88},[82,169107,33074],{"class":92},[82,169109,169110,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132],{"class":84,"line":1399},[82,169111,407],{"class":88},[82,169113,169095],{"class":92},[82,169115,2283],{"class":88},[82,169117,100],{"class":92},[82,169119,1425],{"class":88},[82,169121,100],{"class":92},[82,169123,2841],{"class":88},[82,169125,100],{"class":92},[82,169127,3051],{"class":88},[82,169129,100],{"class":92},[82,169131,3077],{"class":88},[82,169133,33074],{"class":92},[65,169135,169137],{"id":169136},"_762-kwargs","7.6.2 **kwargs",[19,169139,169140,169143],{},[32,169141,169142],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[73,169145,169147],{"className":75,"code":169146,"language":77,"meta":78,"style":78},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[32,169148,169149,169162,169173,169179,169183,169187],{"__ignoreMap":78},[82,169150,169151,169153,169155,169157,169159],{"class":84,"line":85},[82,169152,2381],{"class":112},[82,169154,164450],{"class":2384},[82,169156,93],{"class":92},[82,169158,13251],{"class":112},[82,169160,169161],{"class":92},"kwargs):\n",[82,169163,169164,169166,169168,169170],{"class":84,"line":157},[82,169165,1888],{"class":112},[82,169167,167284],{"class":92},[82,169169,603],{"class":112},[82,169171,169172],{"class":92}," kwargs.items():\n",[82,169174,169175,169177],{"class":84,"line":404},[82,169176,1901],{"class":88},[82,169178,167296],{"class":92},[82,169180,169181],{"class":84,"line":413},[82,169182,486],{"emptyLinePlaceholder":485},[82,169184,169185],{"class":84,"line":508},[82,169186,486],{"emptyLinePlaceholder":485},[82,169188,169189,169191,169193,169195,169197,169199,169201,169203,169205,169207,169209,169211,169213],{"class":84,"line":513},[82,169190,164515],{"class":92},[82,169192,82364],{"class":108},[82,169194,113],{"class":112},[82,169196,1360],{"class":96},[82,169198,100],{"class":92},[82,169200,72777],{"class":108},[82,169202,113],{"class":112},[82,169204,1373],{"class":88},[82,169206,100],{"class":92},[82,169208,72828],{"class":108},[82,169210,113],{"class":112},[82,169212,71825],{"class":96},[82,169214,119],{"class":92},[14,169216,169218],{"id":169217},"_77-参数解包","7.7 参数解包",[19,169220,169221],{},"列表或元组解包为位置参数：",[73,169223,169225],{"className":75,"code":169224,"language":77,"meta":78,"style":78},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[32,169226,169227,169236,169251,169255,169259,169279],{"__ignoreMap":78},[82,169228,169229,169231,169233],{"class":84,"line":85},[82,169230,2381],{"class":112},[82,169232,7802],{"class":2384},[82,169234,169235],{"class":92},"(a, b, c):\n",[82,169237,169238,169240,169242,169244,169246,169248],{"class":84,"line":157},[82,169239,6685],{"class":112},[82,169241,13459],{"class":92},[82,169243,2249],{"class":112},[82,169245,13472],{"class":92},[82,169247,2249],{"class":112},[82,169249,169250],{"class":92}," c\n",[82,169252,169253],{"class":84,"line":404},[82,169254,486],{"emptyLinePlaceholder":485},[82,169256,169257],{"class":84,"line":413},[82,169258,486],{"emptyLinePlaceholder":485},[82,169260,169261,169263,169265,169267,169269,169271,169273,169275,169277],{"class":84,"line":508},[82,169262,166602],{"class":92},[82,169264,113],{"class":112},[82,169266,847],{"class":92},[82,169268,2283],{"class":88},[82,169270,100],{"class":92},[82,169272,1425],{"class":88},[82,169274,100],{"class":92},[82,169276,2841],{"class":88},[82,169278,875],{"class":92},[82,169280,169281,169283,169285,169287],{"class":84,"line":513},[82,169282,407],{"class":88},[82,169284,169095],{"class":92},[82,169286,3212],{"class":112},[82,169288,169289],{"class":92},"nums))\n",[19,169291,169292],{},"字典解包为关键字参数：",[73,169294,169296],{"className":75,"code":169295,"language":77,"meta":78,"style":78},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[32,169297,169298,169306,169332,169336,169340,169364],{"__ignoreMap":78},[82,169299,169300,169302,169304],{"class":84,"line":85},[82,169301,2381],{"class":112},[82,169303,151900],{"class":2384},[82,169305,151903],{"class":92},[82,169307,169308,169310,169312,169314,169316,169318,169320,169322,169324,169326,169328,169330],{"class":84,"line":157},[82,169309,611],{"class":88},[82,169311,93],{"class":92},[82,169313,2822],{"class":112},[82,169315,216],{"class":96},[82,169317,3645],{"class":88},[82,169319,82364],{"class":92},[82,169321,3695],{"class":88},[82,169323,7043],{"class":88},[82,169325,72777],{"class":92},[82,169327,3695],{"class":88},[82,169329,216],{"class":96},[82,169331,119],{"class":92},[82,169333,169334],{"class":84,"line":404},[82,169335,486],{"emptyLinePlaceholder":485},[82,169337,169338],{"class":84,"line":413},[82,169339,486],{"emptyLinePlaceholder":485},[82,169341,169342,169344,169346,169348,169350,169352,169354,169356,169358,169360,169362],{"class":84,"line":508},[82,169343,118859],{"class":92},[82,169345,113],{"class":112},[82,169347,7043],{"class":92},[82,169349,1471],{"class":96},[82,169351,1357],{"class":92},[82,169353,1360],{"class":96},[82,169355,100],{"class":92},[82,169357,1480],{"class":96},[82,169359,1357],{"class":92},[82,169361,1373],{"class":88},[82,169363,1391],{"class":92},[82,169365,169366,169368,169370],{"class":84,"line":513},[82,169367,168651],{"class":92},[82,169369,13251],{"class":112},[82,169371,169372],{"class":92},"info)\n",[14,169374,169376],{"id":169375},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169378,169379,169382],{},[32,169380,169381],{},"lambda"," 用于定义简单匿名函数。",[73,169384,169386],{"className":75,"code":169385,"language":77,"meta":78,"style":78},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[32,169387,169388,169405],{"__ignoreMap":78},[82,169389,169390,169393,169395,169398,169401,169403],{"class":84,"line":85},[82,169391,169392],{"class":92},"add ",[82,169394,113],{"class":112},[82,169396,169397],{"class":112}," lambda",[82,169399,169400],{"class":92}," a, b: a ",[82,169402,2249],{"class":112},[82,169404,153629],{"class":92},[82,169406,169407,169409,169411,169413,169415,169417],{"class":84,"line":157},[82,169408,407],{"class":88},[82,169410,169095],{"class":92},[82,169412,2283],{"class":88},[82,169414,100],{"class":92},[82,169416,1425],{"class":88},[82,169418,33074],{"class":92},[19,169420,169421],{},"常和排序、过滤等函数一起使用。",[19,169423,169424],{},"按分数排序：",[73,169426,169428],{"className":75,"code":169427,"language":77,"meta":78,"style":78},"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",[32,169429,169430,169438,169458,169478,169498,169502,169506,169529],{"__ignoreMap":78},[82,169431,169432,169434,169436],{"class":84,"line":85},[82,169433,1458],{"class":92},[82,169435,113],{"class":112},[82,169437,1463],{"class":92},[82,169439,169440,169442,169444,169446,169448,169450,169452,169454,169456],{"class":84,"line":157},[82,169441,1468],{"class":92},[82,169443,1471],{"class":96},[82,169445,1357],{"class":92},[82,169447,1360],{"class":96},[82,169449,100],{"class":92},[82,169451,1489],{"class":96},[82,169453,1357],{"class":92},[82,169455,1494],{"class":88},[82,169457,1497],{"class":92},[82,169459,169460,169462,169464,169466,169468,169470,169472,169474,169476],{"class":84,"line":404},[82,169461,1468],{"class":92},[82,169463,1471],{"class":96},[82,169465,1357],{"class":92},[82,169467,1508],{"class":96},[82,169469,100],{"class":92},[82,169471,1489],{"class":96},[82,169473,1357],{"class":92},[82,169475,1526],{"class":88},[82,169477,1497],{"class":92},[82,169479,169480,169482,169484,169486,169488,169490,169492,169494,169496],{"class":84,"line":413},[82,169481,1468],{"class":92},[82,169483,1471],{"class":96},[82,169485,1357],{"class":92},[82,169487,162236],{"class":96},[82,169489,100],{"class":92},[82,169491,1489],{"class":96},[82,169493,1357],{"class":92},[82,169495,3164],{"class":88},[82,169497,1497],{"class":92},[82,169499,169500],{"class":84,"line":508},[82,169501,875],{"class":92},[82,169503,169504],{"class":84,"line":513},[82,169505,486],{"emptyLinePlaceholder":485},[82,169507,169508,169511,169513,169515,169517,169519,169521,169523,169525,169527],{"class":84,"line":1388},[82,169509,169510],{"class":92},"students.sort(",[82,169512,2274],{"class":108},[82,169514,2277],{"class":112},[82,169516,2280],{"class":92},[82,169518,1489],{"class":96},[82,169520,2286],{"class":92},[82,169522,2289],{"class":108},[82,169524,113],{"class":112},[82,169526,1205],{"class":88},[82,169528,119],{"class":92},[82,169530,169531,169533],{"class":84,"line":1394},[82,169532,407],{"class":88},[82,169534,1665],{"class":92},[19,169536,169537,169538,169540],{},"如果逻辑复杂，不要硬写 ",[32,169539,169381],{},"，定义普通函数更清晰。",[14,169542,169544],{"id":169543},"_79-函数作为参数","7.9 函数作为参数",[19,169546,169547],{},"函数可以作为参数传给另一个函数。",[73,169549,169551],{"className":75,"code":169550,"language":77,"meta":78,"style":78},"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",[32,169552,169553,169561,169571,169575,169579,169589,169596,169600,169604],{"__ignoreMap":78},[82,169554,169555,169557,169559],{"class":84,"line":85},[82,169556,2381],{"class":112},[82,169558,7802],{"class":2384},[82,169560,153618],{"class":92},[82,169562,169563,169565,169567,169569],{"class":84,"line":157},[82,169564,6685],{"class":112},[82,169566,13459],{"class":92},[82,169568,2249],{"class":112},[82,169570,153629],{"class":92},[82,169572,169573],{"class":84,"line":404},[82,169574,486],{"emptyLinePlaceholder":485},[82,169576,169577],{"class":84,"line":413},[82,169578,486],{"emptyLinePlaceholder":485},[82,169580,169581,169583,169586],{"class":84,"line":508},[82,169582,2381],{"class":112},[82,169584,169585],{"class":2384}," calculate",[82,169587,169588],{"class":92},"(a, b, func):\n",[82,169590,169591,169593],{"class":84,"line":513},[82,169592,6685],{"class":112},[82,169594,169595],{"class":92}," func(a, b)\n",[82,169597,169598],{"class":84,"line":1388},[82,169599,486],{"emptyLinePlaceholder":485},[82,169601,169602],{"class":84,"line":1394},[82,169603,486],{"emptyLinePlaceholder":485},[82,169605,169606,169608,169611,169613,169615,169617],{"class":84,"line":1399},[82,169607,407],{"class":88},[82,169609,169610],{"class":92},"(calculate(",[82,169612,440],{"class":88},[82,169614,100],{"class":92},[82,169616,3451],{"class":88},[82,169618,169619],{"class":92},", add))\n",[19,169621,169622],{},"这种思想在排序、回调、框架中经常出现。",[14,169624,169626],{"id":169625},"_710-mapfiltersorted","7.10 map、filter、sorted",[65,169628,169630],{"id":169629},"_7101-map","7.10.1 map",[19,169632,169633,169635],{},[32,169634,76598],{}," 对每个元素执行函数。",[73,169637,169639],{"className":75,"code":169638,"language":77,"meta":78,"style":78},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[32,169640,169641,169665,169688],{"__ignoreMap":78},[82,169642,169643,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663],{"class":84,"line":85},[82,169644,166602],{"class":92},[82,169646,113],{"class":112},[82,169648,847],{"class":92},[82,169650,2283],{"class":88},[82,169652,100],{"class":92},[82,169654,1425],{"class":88},[82,169656,100],{"class":92},[82,169658,2841],{"class":88},[82,169660,100],{"class":92},[82,169662,3051],{"class":88},[82,169664,875],{"class":92},[82,169666,169667,169669,169671,169674,169676,169678,169681,169683,169685],{"class":84,"line":157},[82,169668,163811],{"class":92},[82,169670,113],{"class":112},[82,169672,169673],{"class":88}," map",[82,169675,93],{"class":92},[82,169677,169381],{"class":112},[82,169679,169680],{"class":92}," x: x ",[82,169682,3212],{"class":112},[82,169684,17341],{"class":88},[82,169686,169687],{"class":92},", nums)\n",[82,169689,169690,169692,169694,169696],{"class":84,"line":404},[82,169691,407],{"class":88},[82,169693,93],{"class":92},[82,169695,156579],{"class":88},[82,169697,168563],{"class":92},[65,169699,169701],{"id":169700},"_7102-filter","7.10.2 filter",[19,169703,169704,169706],{},[32,169705,82605],{}," 保留满足条件的元素。",[73,169708,169710],{"className":75,"code":169709,"language":77,"meta":78,"style":78},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[32,169711,169712,169740,169765],{"__ignoreMap":78},[82,169713,169714,169716,169718,169720,169722,169724,169726,169728,169730,169732,169734,169736,169738],{"class":84,"line":85},[82,169715,166602],{"class":92},[82,169717,113],{"class":112},[82,169719,847],{"class":92},[82,169721,2283],{"class":88},[82,169723,100],{"class":92},[82,169725,1425],{"class":88},[82,169727,100],{"class":92},[82,169729,2841],{"class":88},[82,169731,100],{"class":92},[82,169733,3051],{"class":88},[82,169735,100],{"class":92},[82,169737,3077],{"class":88},[82,169739,875],{"class":92},[82,169741,169742,169744,169746,169749,169751,169753,169755,169757,169759,169761,169763],{"class":84,"line":157},[82,169743,163811],{"class":92},[82,169745,113],{"class":112},[82,169747,169748],{"class":88}," filter",[82,169750,93],{"class":92},[82,169752,169381],{"class":112},[82,169754,169680],{"class":92},[82,169756,3086],{"class":112},[82,169758,17341],{"class":88},[82,169760,104110],{"class":112},[82,169762,6688],{"class":88},[82,169764,169687],{"class":92},[82,169766,169767,169769,169771,169773],{"class":84,"line":404},[82,169768,407],{"class":88},[82,169770,93],{"class":92},[82,169772,156579],{"class":88},[82,169774,168563],{"class":92},[65,169776,169778],{"id":169777},"_7103-sorted","7.10.3 sorted",[19,169780,169781,169783],{},[32,169782,167733],{}," 返回排序后的新列表。",[73,169785,169787],{"className":75,"code":169786,"language":77,"meta":78,"style":78},"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",[32,169788,169789,169797,169817,169837,169857,169861,169865,169894],{"__ignoreMap":78},[82,169790,169791,169793,169795],{"class":84,"line":85},[82,169792,1458],{"class":92},[82,169794,113],{"class":112},[82,169796,1463],{"class":92},[82,169798,169799,169801,169803,169805,169807,169809,169811,169813,169815],{"class":84,"line":157},[82,169800,1468],{"class":92},[82,169802,1471],{"class":96},[82,169804,1357],{"class":92},[82,169806,1360],{"class":96},[82,169808,100],{"class":92},[82,169810,1489],{"class":96},[82,169812,1357],{"class":92},[82,169814,1494],{"class":88},[82,169816,1497],{"class":92},[82,169818,169819,169821,169823,169825,169827,169829,169831,169833,169835],{"class":84,"line":404},[82,169820,1468],{"class":92},[82,169822,1471],{"class":96},[82,169824,1357],{"class":92},[82,169826,1508],{"class":96},[82,169828,100],{"class":92},[82,169830,1489],{"class":96},[82,169832,1357],{"class":92},[82,169834,1526],{"class":88},[82,169836,1497],{"class":92},[82,169838,169839,169841,169843,169845,169847,169849,169851,169853,169855],{"class":84,"line":413},[82,169840,1468],{"class":92},[82,169842,1471],{"class":96},[82,169844,1357],{"class":92},[82,169846,162236],{"class":96},[82,169848,100],{"class":92},[82,169850,1489],{"class":96},[82,169852,1357],{"class":92},[82,169854,3164],{"class":88},[82,169856,1497],{"class":92},[82,169858,169859],{"class":84,"line":508},[82,169860,875],{"class":92},[82,169862,169863],{"class":84,"line":513},[82,169864,486],{"emptyLinePlaceholder":485},[82,169866,169867,169869,169871,169873,169876,169878,169880,169882,169884,169886,169888,169890,169892],{"class":84,"line":1388},[82,169868,163811],{"class":92},[82,169870,113],{"class":112},[82,169872,2268],{"class":88},[82,169874,169875],{"class":92},"(students, ",[82,169877,2274],{"class":108},[82,169879,2277],{"class":112},[82,169881,2280],{"class":92},[82,169883,1489],{"class":96},[82,169885,2286],{"class":92},[82,169887,2289],{"class":108},[82,169889,113],{"class":112},[82,169891,1205],{"class":88},[82,169893,119],{"class":92},[82,169895,169896,169898],{"class":84,"line":1394},[82,169897,407],{"class":88},[82,169899,79139],{"class":92},[14,169901,169903],{"id":169902},"_711-闭包入门","7.11 闭包入门",[19,169905,169906],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[73,169908,169910],{"className":75,"code":169909,"language":77,"meta":78,"style":78},"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",[32,169911,169912,169922,169932,169943,169947,169954,169958,169962,169976],{"__ignoreMap":78},[82,169913,169914,169916,169919],{"class":84,"line":85},[82,169915,2381],{"class":112},[82,169917,169918],{"class":2384}," outer",[82,169920,169921],{"class":92},"(base):\n",[82,169923,169924,169926,169929],{"class":84,"line":157},[82,169925,33377],{"class":112},[82,169927,169928],{"class":2384}," inner",[82,169930,169931],{"class":92},"(num):\n",[82,169933,169934,169936,169939,169941],{"class":84,"line":404},[82,169935,2405],{"class":112},[82,169937,169938],{"class":92}," base ",[82,169940,2249],{"class":112},[82,169942,169074],{"class":92},[82,169944,169945],{"class":84,"line":413},[82,169946,486],{"emptyLinePlaceholder":485},[82,169948,169949,169951],{"class":84,"line":508},[82,169950,6685],{"class":112},[82,169952,169953],{"class":92}," inner\n",[82,169955,169956],{"class":84,"line":513},[82,169957,486],{"emptyLinePlaceholder":485},[82,169959,169960],{"class":84,"line":1388},[82,169961,486],{"emptyLinePlaceholder":485},[82,169963,169964,169967,169969,169972,169974],{"class":84,"line":1394},[82,169965,169966],{"class":92},"add_10 ",[82,169968,113],{"class":112},[82,169970,169971],{"class":92}," outer(",[82,169973,440],{"class":88},[82,169975,119],{"class":92},[82,169977,169978,169980,169983,169985],{"class":84,"line":1399},[82,169979,407],{"class":88},[82,169981,169982],{"class":92},"(add_10(",[82,169984,3077],{"class":88},[82,169986,33074],{"class":92},[19,169988,169989],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169991,169993],{"id":169992},"_712-装饰器入门","7.12 装饰器入门",[19,169995,169996],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[73,169998,170000],{"className":75,"code":169999,"language":77,"meta":78,"style":78},"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",[32,170001,170002,170011,170020,170031,170036,170047,170051,170058,170062,170066,170071,170079,170089,170093,170097],{"__ignoreMap":78},[82,170003,170004,170006,170008],{"class":84,"line":85},[82,170005,2381],{"class":112},[82,170007,89744],{"class":2384},[82,170009,170010],{"class":92},"(func):\n",[82,170012,170013,170015,170018],{"class":84,"line":157},[82,170014,33377],{"class":112},[82,170016,170017],{"class":2384}," wrapper",[82,170019,2388],{"class":92},[82,170021,170022,170024,170026,170029],{"class":84,"line":404},[82,170023,1901],{"class":88},[82,170025,93],{"class":92},[82,170027,170028],{"class":96},"\"函数开始执行\"",[82,170030,119],{"class":92},[82,170032,170033],{"class":84,"line":413},[82,170034,170035],{"class":92},"        func()\n",[82,170037,170038,170040,170042,170045],{"class":84,"line":508},[82,170039,1901],{"class":88},[82,170041,93],{"class":92},[82,170043,170044],{"class":96},"\"函数执行结束\"",[82,170046,119],{"class":92},[82,170048,170049],{"class":84,"line":513},[82,170050,486],{"emptyLinePlaceholder":485},[82,170052,170053,170055],{"class":84,"line":1388},[82,170054,6685],{"class":112},[82,170056,170057],{"class":92}," wrapper\n",[82,170059,170060],{"class":84,"line":1394},[82,170061,486],{"emptyLinePlaceholder":485},[82,170063,170064],{"class":84,"line":1399},[82,170065,486],{"emptyLinePlaceholder":485},[82,170067,170068],{"class":84,"line":1430},[82,170069,170070],{"class":2384},"@log\n",[82,170072,170073,170075,170077],{"class":84,"line":1818},[82,170074,2381],{"class":112},[82,170076,163501],{"class":2384},[82,170078,2388],{"class":92},[82,170080,170081,170083,170085,170087],{"class":84,"line":2082},[82,170082,611],{"class":88},[82,170084,93],{"class":92},[82,170086,8436],{"class":96},[82,170088,119],{"class":92},[82,170090,170091],{"class":84,"line":2233},[82,170092,486],{"emptyLinePlaceholder":485},[82,170094,170095],{"class":84,"line":2255},[82,170096,486],{"emptyLinePlaceholder":485},[82,170098,170099],{"class":84,"line":2260},[82,170100,163536],{"class":92},[19,170102,160780],{},[73,170104,170106],{"className":75,"code":170105,"language":77,"meta":78,"style":78},"say_hello = log(say_hello)\n",[32,170107,170108],{"__ignoreMap":78},[82,170109,170110,170113,170115],{"class":84,"line":85},[82,170111,170112],{"class":92},"say_hello ",[82,170114,113],{"class":112},[82,170116,170117],{"class":92}," log(say_hello)\n",[19,170119,170120],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,170122,170124],{"id":170123},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[73,170126,170128],{"className":75,"code":170127,"language":77,"meta":78,"style":78},"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",[32,170129,170130,170138,170155,170165,170184,170194,170201,170205,170211,170215,170219,170223,170231,170241,170245,170249],{"__ignoreMap":78},[82,170131,170132,170134,170136],{"class":84,"line":85},[82,170133,2381],{"class":112},[82,170135,89744],{"class":2384},[82,170137,170010],{"class":92},[82,170139,170140,170142,170144,170146,170148,170151,170153],{"class":84,"line":157},[82,170141,33377],{"class":112},[82,170143,170017],{"class":2384},[82,170145,93],{"class":92},[82,170147,3212],{"class":112},[82,170149,170150],{"class":92},"args, ",[82,170152,13251],{"class":112},[82,170154,169161],{"class":92},[82,170156,170157,170159,170161,170163],{"class":84,"line":404},[82,170158,1901],{"class":88},[82,170160,93],{"class":92},[82,170162,170028],{"class":96},[82,170164,119],{"class":92},[82,170166,170167,170170,170172,170175,170177,170179,170181],{"class":84,"line":413},[82,170168,170169],{"class":92},"        result ",[82,170171,113],{"class":112},[82,170173,170174],{"class":92}," func(",[82,170176,3212],{"class":112},[82,170178,170150],{"class":92},[82,170180,13251],{"class":112},[82,170182,170183],{"class":92},"kwargs)\n",[82,170185,170186,170188,170190,170192],{"class":84,"line":508},[82,170187,1901],{"class":88},[82,170189,93],{"class":92},[82,170191,170044],{"class":96},[82,170193,119],{"class":92},[82,170195,170196,170198],{"class":84,"line":513},[82,170197,2405],{"class":112},[82,170199,170200],{"class":92}," result\n",[82,170202,170203],{"class":84,"line":1388},[82,170204,486],{"emptyLinePlaceholder":485},[82,170206,170207,170209],{"class":84,"line":1394},[82,170208,6685],{"class":112},[82,170210,170057],{"class":92},[82,170212,170213],{"class":84,"line":1399},[82,170214,486],{"emptyLinePlaceholder":485},[82,170216,170217],{"class":84,"line":1430},[82,170218,486],{"emptyLinePlaceholder":485},[82,170220,170221],{"class":84,"line":1818},[82,170222,170070],{"class":2384},[82,170224,170225,170227,170229],{"class":84,"line":2082},[82,170226,2381],{"class":112},[82,170228,7802],{"class":2384},[82,170230,153618],{"class":92},[82,170232,170233,170235,170237,170239],{"class":84,"line":2233},[82,170234,6685],{"class":112},[82,170236,13459],{"class":92},[82,170238,2249],{"class":112},[82,170240,153629],{"class":92},[82,170242,170243],{"class":84,"line":2255},[82,170244,486],{"emptyLinePlaceholder":485},[82,170246,170247],{"class":84,"line":2260},[82,170248,486],{"emptyLinePlaceholder":485},[82,170250,170251,170253,170255,170257,170259,170261],{"class":84,"line":2298},[82,170252,407],{"class":88},[82,170254,169095],{"class":92},[82,170256,440],{"class":88},[82,170258,100],{"class":92},[82,170260,3451],{"class":88},[82,170262,33074],{"class":92},[19,170264,170265,170266,103569,170268,170270],{},"这个写法使用 ",[32,170267,169027],{},[32,170269,169142],{}," 接收原函数的所有参数。",[14,170272,170274],{"id":170273},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,170276,2091],{},[26,170278,170279,170282,170285],{},[29,170280,170281],{},"给定一组学生数据。",[29,170283,170284],{},"封装函数，根据传入规则筛选学生。",[29,170286,170287],{},"筛选及格、优秀、未成年学生。",[19,170289,2105],{},[73,170291,170293],{"className":75,"code":170292,"language":77,"meta":78,"style":78},"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",[32,170294,170295,170303,170331,170359,170387,170391,170395,170399,170409,170417,170427,170434,170439,170445,170449,170453,170477,170500,170523,170527,170534,170541],{"__ignoreMap":78},[82,170296,170297,170299,170301],{"class":84,"line":85},[82,170298,1458],{"class":92},[82,170300,113],{"class":112},[82,170302,1463],{"class":92},[82,170304,170305,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325,170327,170329],{"class":84,"line":157},[82,170306,1468],{"class":92},[82,170308,1471],{"class":96},[82,170310,1357],{"class":92},[82,170312,1360],{"class":96},[82,170314,100],{"class":92},[82,170316,1480],{"class":96},[82,170318,1357],{"class":92},[82,170320,1373],{"class":88},[82,170322,100],{"class":92},[82,170324,1489],{"class":96},[82,170326,1357],{"class":92},[82,170328,1494],{"class":88},[82,170330,1497],{"class":92},[82,170332,170333,170335,170337,170339,170341,170343,170345,170347,170349,170351,170353,170355,170357],{"class":84,"line":404},[82,170334,1468],{"class":92},[82,170336,1471],{"class":96},[82,170338,1357],{"class":92},[82,170340,1508],{"class":96},[82,170342,100],{"class":92},[82,170344,1480],{"class":96},[82,170346,1357],{"class":92},[82,170348,1517],{"class":88},[82,170350,100],{"class":92},[82,170352,1489],{"class":96},[82,170354,1357],{"class":92},[82,170356,1526],{"class":88},[82,170358,1497],{"class":92},[82,170360,170361,170363,170365,170367,170369,170371,170373,170375,170377,170379,170381,170383,170385],{"class":84,"line":413},[82,170362,1468],{"class":92},[82,170364,1471],{"class":96},[82,170366,1357],{"class":92},[82,170368,162236],{"class":96},[82,170370,100],{"class":92},[82,170372,1480],{"class":96},[82,170374,1357],{"class":92},[82,170376,3426],{"class":88},[82,170378,100],{"class":92},[82,170380,1489],{"class":96},[82,170382,1357],{"class":92},[82,170384,3631],{"class":88},[82,170386,1497],{"class":92},[82,170388,170389],{"class":84,"line":508},[82,170390,875],{"class":92},[82,170392,170393],{"class":84,"line":513},[82,170394,486],{"emptyLinePlaceholder":485},[82,170396,170397],{"class":84,"line":1388},[82,170398,486],{"emptyLinePlaceholder":485},[82,170400,170401,170403,170406],{"class":84,"line":1394},[82,170402,2381],{"class":112},[82,170404,170405],{"class":2384}," filter_students",[82,170407,170408],{"class":92},"(students, condition):\n",[82,170410,170411,170413,170415],{"class":84,"line":1399},[82,170412,163728],{"class":92},[82,170414,113],{"class":112},[82,170416,2408],{"class":92},[82,170418,170419,170421,170423,170425],{"class":84,"line":1430},[82,170420,1888],{"class":112},[82,170422,154651],{"class":92},[82,170424,603],{"class":112},[82,170426,154656],{"class":92},[82,170428,170429,170431],{"class":84,"line":1818},[82,170430,5096],{"class":112},[82,170432,170433],{"class":92}," condition(student):\n",[82,170435,170436],{"class":84,"line":2082},[82,170437,170438],{"class":92},"            result.append(student)\n",[82,170440,170441,170443],{"class":84,"line":2233},[82,170442,6685],{"class":112},[82,170444,170200],{"class":92},[82,170446,170447],{"class":84,"line":2255},[82,170448,486],{"emptyLinePlaceholder":485},[82,170450,170451],{"class":84,"line":2260},[82,170452,486],{"emptyLinePlaceholder":485},[82,170454,170455,170457,170459,170462,170464,170467,170469,170471,170473,170475],{"class":84,"line":2298},[82,170456,168197],{"class":92},[82,170458,113],{"class":112},[82,170460,170461],{"class":92}," filter_students(students, ",[82,170463,169381],{"class":112},[82,170465,170466],{"class":92}," s: s[",[82,170468,1489],{"class":96},[82,170470,7038],{"class":92},[82,170472,4313],{"class":112},[82,170474,160343],{"class":88},[82,170476,119],{"class":92},[82,170478,170479,170482,170484,170486,170488,170490,170492,170494,170496,170498],{"class":84,"line":2303},[82,170480,170481],{"class":92},"excellent ",[82,170483,113],{"class":112},[82,170485,170461],{"class":92},[82,170487,169381],{"class":112},[82,170489,170466],{"class":92},[82,170491,1489],{"class":96},[82,170493,7038],{"class":92},[82,170495,4313],{"class":112},[82,170497,160294],{"class":88},[82,170499,119],{"class":92},[82,170501,170502,170505,170507,170509,170511,170513,170515,170517,170519,170521],{"class":84,"line":2321},[82,170503,170504],{"class":92},"under_age ",[82,170506,113],{"class":112},[82,170508,170461],{"class":92},[82,170510,169381],{"class":112},[82,170512,170466],{"class":92},[82,170514,1480],{"class":96},[82,170516,7038],{"class":92},[82,170518,3659],{"class":112},[82,170520,158794],{"class":88},[82,170522,119],{"class":92},[82,170524,170525],{"class":84,"line":2533},[82,170526,486],{"emptyLinePlaceholder":485},[82,170528,170529,170531],{"class":84,"line":2538},[82,170530,407],{"class":88},[82,170532,170533],{"class":92},"(passed)\n",[82,170535,170536,170538],{"class":84,"line":2548},[82,170537,407],{"class":88},[82,170539,170540],{"class":92},"(excellent)\n",[82,170542,170543,170545],{"class":84,"line":2579},[82,170544,407],{"class":88},[82,170546,170547],{"class":92},"(under_age)\n",[14,170549,170551],{"id":170550},"_715-易错点","7.15 易错点",[26,170553,170554,170557,170565,170570,170581],{},[29,170555,170556],{},"默认参数不要写可变对象。",[29,170558,170559,170561,170562,170564],{},[32,170560,169027],{}," 是元组，",[32,170563,169142],{}," 是字典。",[29,170566,170567,170569],{},[32,170568,169381],{}," 只适合简单表达式。",[29,170571,170572,103569,170574,170576,170577,170580],{},[32,170573,76598],{},[32,170575,82605],{}," 的结果是迭代器，常用 ",[32,170578,170579],{},"list()"," 转换查看。",[29,170582,170583],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170585,170587],{"id":170586},"_716-本章练习","7.16 本章练习",[26,170589,170590,170597,170603,170608,170613],{},[29,170591,170592,170593,170596],{},"写函数 ",[32,170594,170595],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,170598,170592,170599,170602],{},[32,170600,170601],{},"print_user(**kwargs)","，输出用户所有字段。",[29,170604,106916,170605,170607],{},[32,170606,169381],{}," 对学生列表按年龄排序。",[29,170609,106916,170610,170612],{},[32,170611,82605],{}," 找出成绩不及格的学生。",[29,170614,170615],{},"写一个装饰器，统计函数执行前后的提示信息。",[2671,170617,170618],{},"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":78,"searchDepth":157,"depth":157,"links":170620},[170621,170622,170623,170624,170625,170626,170630,170631,170632,170633,170638,170639,170640,170641,170642,170643],{"id":168479,"depth":157,"text":168480},{"id":168593,"depth":157,"text":168594},{"id":168682,"depth":157,"text":168683},{"id":168744,"depth":157,"text":168745},{"id":168890,"depth":157,"text":168891},{"id":169017,"depth":157,"text":169018,"children":170627},[170628,170629],{"id":169021,"depth":404,"text":169022},{"id":169136,"depth":404,"text":169137},{"id":169217,"depth":157,"text":169218},{"id":169375,"depth":157,"text":169376},{"id":169543,"depth":157,"text":169544},{"id":169625,"depth":157,"text":169626,"children":170634},[170635,170636,170637],{"id":169629,"depth":404,"text":169630},{"id":169700,"depth":404,"text":169701},{"id":169777,"depth":404,"text":169778},{"id":169902,"depth":157,"text":169903},{"id":169992,"depth":157,"text":169993},{"id":170123,"depth":157,"text":170124},{"id":170273,"depth":157,"text":170274},{"id":170550,"depth":157,"text":170551},{"id":170586,"depth":157,"text":170587},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168471,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":4,"title":5,"body":170650,"description":2699,"extension":2700,"meta":172929,"navigation":485,"path":2702,"seo":172930,"stem":2704,"__hash__":2705},{"type":7,"value":170651,"toc":172904},[170652,170654,170656,170658,170660,170682,170684,170686,170688,170714,170716,170718,170766,170768,170780,170782,170812,170814,170816,170838,170840,170892,170894,170896,170898,170950,170952,170970,170972,170974,171034,171036,171038,171090,171094,171114,171116,171118,171180,171182,171186,171236,171238,171240,171244,171306,171308,171384,171386,171390,171438,171440,171442,171444,171446,171452,171454,171498,171500,171544,171546,171550,171590,171592,171634,171636,171672,171674,171732,171734,171736,171824,171826,171966,171968,172034,172036,172038,172040,172172,172174,172246,172248,172418,172420,172422,172430,172432,172612,172614,172854,172856,172880,172882,172902],[10,170653,5],{"id":12},[14,170655,17],{"id":16},[19,170657,21],{},[19,170659,24],{},[26,170661,170662,170666,170670,170674,170678],{},[29,170663,170664,35],{},[32,170665,34],{},[29,170667,170668,41],{},[32,170669,40],{},[29,170671,170672,47],{},[32,170673,46],{},[29,170675,170676,53],{},[32,170677,52],{},[29,170679,170680,59],{},[32,170681,58],{},[14,170683,63],{"id":62},[65,170685,68],{"id":67},[19,170687,71],{},[73,170689,170690],{"className":75,"code":76,"language":77,"meta":78,"style":78},[32,170691,170692],{"__ignoreMap":78},[82,170693,170694,170696,170698,170700,170702,170704,170706,170708,170710,170712],{"class":84,"line":85},[82,170695,89],{"class":88},[82,170697,93],{"class":92},[82,170699,97],{"class":96},[82,170701,100],{"class":92},[82,170703,103],{"class":96},[82,170705,100],{"class":92},[82,170707,109],{"class":108},[82,170709,113],{"class":112},[82,170711,116],{"class":96},[82,170713,119],{"class":92},[65,170715,123],{"id":122},[19,170717,126],{},[73,170719,170720],{"className":75,"code":129,"language":77,"meta":78,"style":78},[32,170721,170722,170744],{"__ignoreMap":78},[82,170723,170724,170726,170728,170730,170732,170734,170736,170738,170740,170742],{"class":84,"line":85},[82,170725,89],{"class":88},[82,170727,93],{"class":92},[82,170729,140],{"class":96},[82,170731,100],{"class":92},[82,170733,103],{"class":96},[82,170735,100],{"class":92},[82,170737,109],{"class":108},[82,170739,113],{"class":112},[82,170741,116],{"class":96},[82,170743,119],{"class":92},[82,170745,170746,170748,170750,170752,170754,170756,170758,170760,170762,170764],{"class":84,"line":157},[82,170747,89],{"class":88},[82,170749,93],{"class":92},[82,170751,164],{"class":96},[82,170753,100],{"class":92},[82,170755,103],{"class":96},[82,170757,100],{"class":92},[82,170759,109],{"class":108},[82,170761,113],{"class":112},[82,170763,116],{"class":96},[82,170765,119],{"class":92},[19,170767,181],{},[73,170769,170770],{"className":75,"code":184,"language":77,"meta":78,"style":78},[32,170771,170772],{"__ignoreMap":78},[82,170773,170774,170776,170778],{"class":84,"line":85},[82,170775,191],{"class":92},[82,170777,113],{"class":112},[82,170779,196],{"class":96},[19,170781,199],{},[73,170783,170784],{"className":75,"code":202,"language":77,"meta":78,"style":78},[32,170785,170786],{"__ignoreMap":78},[82,170787,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808,170810],{"class":84,"line":85},[82,170789,191],{"class":92},[82,170791,113],{"class":112},[82,170793,213],{"class":112},[82,170795,216],{"class":96},[82,170797,220],{"class":219},[82,170799,223],{"class":88},[82,170801,226],{"class":219},[82,170803,223],{"class":88},[82,170805,226],{"class":219},[82,170807,233],{"class":88},[82,170809,236],{"class":219},[82,170811,239],{"class":96},[14,170813,243],{"id":242},[19,170815,246],{},[73,170817,170818],{"className":75,"code":249,"language":77,"meta":78,"style":78},[32,170819,170820],{"__ignoreMap":78},[82,170821,170822,170824,170826,170828,170830,170832,170834,170836],{"class":84,"line":85},[82,170823,256],{"class":108},[82,170825,259],{"class":112},[82,170827,262],{"class":88},[82,170829,265],{"class":92},[82,170831,109],{"class":108},[82,170833,113],{"class":112},[82,170835,116],{"class":96},[82,170837,119],{"class":92},[19,170839,276],{},[278,170841,170842,170850],{},[281,170843,170844],{},[284,170845,170846,170848],{},[287,170847,289],{},[287,170849,292],{},[294,170851,170852,170860,170868,170876,170884],{},[284,170853,170854,170858],{},[299,170855,170856],{},[32,170857,303],{},[299,170859,306],{},[284,170861,170862,170866],{},[299,170863,170864],{},[32,170865,313],{},[299,170867,316],{},[284,170869,170870,170874],{},[299,170871,170872],{},[32,170873,323],{},[299,170875,326],{},[284,170877,170878,170882],{},[299,170879,170880],{},[32,170881,333],{},[299,170883,336],{},[284,170885,170886,170890],{},[299,170887,170888],{},[32,170889,343],{},[299,170891,346],{},[14,170893,350],{"id":349},[65,170895,354],{"id":353},[19,170897,357],{},[73,170899,170900],{"className":75,"code":360,"language":77,"meta":78,"style":78},[32,170901,170902,170928,170938,170944],{"__ignoreMap":78},[82,170903,170904,170906,170908,170910,170912,170914,170916,170918,170920,170922,170924,170926],{"class":84,"line":85},[82,170905,256],{"class":108},[82,170907,259],{"class":112},[82,170909,262],{"class":88},[82,170911,93],{"class":92},[82,170913,97],{"class":96},[82,170915,100],{"class":92},[82,170917,103],{"class":96},[82,170919,100],{"class":92},[82,170921,109],{"class":108},[82,170923,113],{"class":112},[82,170925,116],{"class":96},[82,170927,119],{"class":92},[82,170929,170930,170932,170934,170936],{"class":84,"line":157},[82,170931,393],{"class":92},[82,170933,113],{"class":112},[82,170935,398],{"class":108},[82,170937,401],{"class":92},[82,170939,170940,170942],{"class":84,"line":404},[82,170941,407],{"class":88},[82,170943,410],{"class":92},[82,170945,170946,170948],{"class":84,"line":413},[82,170947,256],{"class":108},[82,170949,418],{"class":92},[19,170951,421],{},[73,170953,170954],{"className":75,"code":424,"language":77,"meta":78,"style":78},[32,170955,170956],{"__ignoreMap":78},[82,170957,170958,170960,170962,170964,170966,170968],{"class":84,"line":85},[82,170959,393],{"class":92},[82,170961,113],{"class":112},[82,170963,398],{"class":108},[82,170965,437],{"class":92},[82,170967,440],{"class":88},[82,170969,119],{"class":92},[65,170971,446],{"id":445},[19,170973,449],{},[73,170975,170976],{"className":75,"code":452,"language":77,"meta":78,"style":78},[32,170977,170978,171004,171008,171018,171024,171028],{"__ignoreMap":78},[82,170979,170980,170982,170984,170986,170988,170990,170992,170994,170996,170998,171000,171002],{"class":84,"line":85},[82,170981,256],{"class":108},[82,170983,259],{"class":112},[82,170985,262],{"class":88},[82,170987,93],{"class":92},[82,170989,97],{"class":96},[82,170991,100],{"class":92},[82,170993,103],{"class":96},[82,170995,100],{"class":92},[82,170997,109],{"class":108},[82,170999,113],{"class":112},[82,171001,116],{"class":96},[82,171003,119],{"class":92},[82,171005,171006],{"class":84,"line":157},[82,171007,486],{"emptyLinePlaceholder":485},[82,171009,171010,171012,171014,171016],{"class":84,"line":404},[82,171011,491],{"class":92},[82,171013,113],{"class":112},[82,171015,398],{"class":108},[82,171017,498],{"class":92},[82,171019,171020,171022],{"class":84,"line":413},[82,171021,407],{"class":88},[82,171023,505],{"class":92},[82,171025,171026],{"class":84,"line":508},[82,171027,486],{"emptyLinePlaceholder":485},[82,171029,171030,171032],{"class":84,"line":513},[82,171031,256],{"class":108},[82,171033,418],{"class":92},[65,171035,521],{"id":520},[19,171037,524],{},[73,171039,171040],{"className":75,"code":527,"language":77,"meta":78,"style":78},[32,171041,171042,171068,171078,171084],{"__ignoreMap":78},[82,171043,171044,171046,171048,171050,171052,171054,171056,171058,171060,171062,171064,171066],{"class":84,"line":85},[82,171045,256],{"class":108},[82,171047,259],{"class":112},[82,171049,262],{"class":88},[82,171051,93],{"class":92},[82,171053,97],{"class":96},[82,171055,100],{"class":92},[82,171057,103],{"class":96},[82,171059,100],{"class":92},[82,171061,109],{"class":108},[82,171063,113],{"class":112},[82,171065,116],{"class":96},[82,171067,119],{"class":92},[82,171069,171070,171072,171074,171076],{"class":84,"line":157},[82,171071,560],{"class":92},[82,171073,113],{"class":112},[82,171075,398],{"class":108},[82,171077,567],{"class":92},[82,171079,171080,171082],{"class":84,"line":404},[82,171081,407],{"class":88},[82,171083,574],{"class":92},[82,171085,171086,171088],{"class":84,"line":413},[82,171087,256],{"class":108},[82,171089,418],{"class":92},[19,171091,583,171092,587],{},[32,171093,586],{},[73,171095,171096],{"className":75,"code":590,"language":77,"meta":78,"style":78},[32,171097,171098,171108],{"__ignoreMap":78},[82,171099,171100,171102,171104,171106],{"class":84,"line":85},[82,171101,597],{"class":112},[82,171103,600],{"class":92},[82,171105,603],{"class":112},[82,171107,606],{"class":92},[82,171109,171110,171112],{"class":84,"line":157},[82,171111,611],{"class":88},[82,171113,614],{"class":92},[65,171115,618],{"id":617},[19,171117,621],{},[73,171119,171120],{"className":75,"code":624,"language":77,"meta":78,"style":78},[32,171121,171122,171148,171152,171164,171170,171174],{"__ignoreMap":78},[82,171123,171124,171126,171128,171130,171132,171134,171136,171138,171140,171142,171144,171146],{"class":84,"line":85},[82,171125,256],{"class":108},[82,171127,259],{"class":112},[82,171129,262],{"class":88},[82,171131,93],{"class":92},[82,171133,97],{"class":96},[82,171135,100],{"class":92},[82,171137,103],{"class":96},[82,171139,100],{"class":92},[82,171141,109],{"class":108},[82,171143,113],{"class":112},[82,171145,116],{"class":96},[82,171147,119],{"class":92},[82,171149,171150],{"class":84,"line":157},[82,171151,486],{"emptyLinePlaceholder":485},[82,171153,171154,171156,171158,171160,171162],{"class":84,"line":404},[82,171155,597],{"class":112},[82,171157,600],{"class":92},[82,171159,603],{"class":112},[82,171161,398],{"class":108},[82,171163,669],{"class":92},[82,171165,171166,171168],{"class":84,"line":413},[82,171167,611],{"class":88},[82,171169,614],{"class":92},[82,171171,171172],{"class":84,"line":508},[82,171173,486],{"emptyLinePlaceholder":485},[82,171175,171176,171178],{"class":84,"line":513},[82,171177,256],{"class":108},[82,171179,418],{"class":92},[14,171181,689],{"id":688},[19,171183,171184,695],{},[32,171185,694],{},[73,171187,171188],{"className":75,"code":698,"language":77,"meta":78,"style":78},[32,171189,171190,171220,171230],{"__ignoreMap":78},[82,171191,171192,171194,171196,171198,171200,171202,171204,171206,171208,171210,171212,171214,171216,171218],{"class":84,"line":85},[82,171193,694],{"class":112},[82,171195,262],{"class":88},[82,171197,93],{"class":92},[82,171199,97],{"class":96},[82,171201,100],{"class":92},[82,171203,103],{"class":96},[82,171205,100],{"class":92},[82,171207,109],{"class":108},[82,171209,113],{"class":112},[82,171211,116],{"class":96},[82,171213,725],{"class":92},[82,171215,728],{"class":112},[82,171217,398],{"class":108},[82,171219,669],{"class":92},[82,171221,171222,171224,171226,171228],{"class":84,"line":157},[82,171223,737],{"class":92},[82,171225,113],{"class":112},[82,171227,398],{"class":108},[82,171229,401],{"class":92},[82,171231,171232,171234],{"class":84,"line":404},[82,171233,611],{"class":88},[82,171235,410],{"class":92},[19,171237,752],{},[14,171239,756],{"id":755},[19,171241,171242,761],{},[32,171243,313],{},[73,171245,171246],{"className":75,"code":764,"language":77,"meta":78,"style":78},[32,171247,171248,171278,171292],{"__ignoreMap":78},[82,171249,171250,171252,171254,171256,171258,171260,171262,171264,171266,171268,171270,171272,171274,171276],{"class":84,"line":85},[82,171251,694],{"class":112},[82,171253,262],{"class":88},[82,171255,93],{"class":92},[82,171257,97],{"class":96},[82,171259,100],{"class":92},[82,171261,781],{"class":96},[82,171263,100],{"class":92},[82,171265,109],{"class":108},[82,171267,113],{"class":112},[82,171269,116],{"class":96},[82,171271,725],{"class":92},[82,171273,728],{"class":112},[82,171275,398],{"class":108},[82,171277,669],{"class":92},[82,171279,171280,171282,171284,171286,171288,171290],{"class":84,"line":157},[82,171281,802],{"class":108},[82,171283,805],{"class":92},[82,171285,808],{"class":96},[82,171287,811],{"class":88},[82,171289,216],{"class":96},[82,171291,119],{"class":92},[82,171293,171294,171296,171298,171300,171302,171304],{"class":84,"line":404},[82,171295,802],{"class":108},[82,171297,805],{"class":92},[82,171299,824],{"class":96},[82,171301,811],{"class":88},[82,171303,216],{"class":96},[82,171305,119],{"class":92},[19,171307,833],{},[73,171309,171310],{"className":75,"code":836,"language":77,"meta":78,"style":78},[32,171311,171312,171344,171348,171378],{"__ignoreMap":78},[82,171313,171314,171316,171318,171320,171322,171324,171326,171328,171330,171332,171334,171336,171338,171340,171342],{"class":84,"line":85},[82,171315,560],{"class":92},[82,171317,113],{"class":112},[82,171319,847],{"class":92},[82,171321,850],{"class":96},[82,171323,811],{"class":88},[82,171325,216],{"class":96},[82,171327,100],{"class":92},[82,171329,859],{"class":96},[82,171331,811],{"class":88},[82,171333,216],{"class":96},[82,171335,100],{"class":92},[82,171337,868],{"class":96},[82,171339,811],{"class":88},[82,171341,216],{"class":96},[82,171343,875],{"class":92},[82,171345,171346],{"class":84,"line":157},[82,171347,486],{"emptyLinePlaceholder":485},[82,171349,171350,171352,171354,171356,171358,171360,171362,171364,171366,171368,171370,171372,171374,171376],{"class":84,"line":404},[82,171351,694],{"class":112},[82,171353,262],{"class":88},[82,171355,93],{"class":92},[82,171357,890],{"class":96},[82,171359,100],{"class":92},[82,171361,781],{"class":96},[82,171363,100],{"class":92},[82,171365,109],{"class":108},[82,171367,113],{"class":112},[82,171369,116],{"class":96},[82,171371,725],{"class":92},[82,171373,728],{"class":112},[82,171375,398],{"class":108},[82,171377,669],{"class":92},[82,171379,171380,171382],{"class":84,"line":413},[82,171381,802],{"class":108},[82,171383,917],{"class":92},[14,171385,921],{"id":920},[19,171387,171388,926],{},[32,171389,323],{},[73,171391,171392],{"className":75,"code":929,"language":77,"meta":78,"style":78},[32,171393,171394,171424],{"__ignoreMap":78},[82,171395,171396,171398,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418,171420,171422],{"class":84,"line":85},[82,171397,694],{"class":112},[82,171399,262],{"class":88},[82,171401,93],{"class":92},[82,171403,942],{"class":96},[82,171405,100],{"class":92},[82,171407,947],{"class":96},[82,171409,100],{"class":92},[82,171411,109],{"class":108},[82,171413,113],{"class":112},[82,171415,116],{"class":96},[82,171417,725],{"class":92},[82,171419,728],{"class":112},[82,171421,398],{"class":108},[82,171423,669],{"class":92},[82,171425,171426,171428,171430,171432,171434,171436],{"class":84,"line":157},[82,171427,802],{"class":108},[82,171429,805],{"class":92},[82,171431,972],{"class":96},[82,171433,811],{"class":88},[82,171435,216],{"class":96},[82,171437,119],{"class":92},[19,171439,981],{},[14,171441,985],{"id":984},[19,171443,988],{},[19,171445,991],{},[26,171447,171448,171450],{},[29,171449,996],{},[29,171451,999],{},[19,171453,1002],{},[73,171455,171456],{"className":75,"code":1005,"language":77,"meta":78,"style":78},[32,171457,171458,171488],{"__ignoreMap":78},[82,171459,171460,171462,171464,171466,171468,171470,171472,171474,171476,171478,171480,171482,171484,171486],{"class":84,"line":85},[82,171461,694],{"class":112},[82,171463,262],{"class":88},[82,171465,93],{"class":92},[82,171467,97],{"class":96},[82,171469,100],{"class":92},[82,171471,103],{"class":96},[82,171473,100],{"class":92},[82,171475,109],{"class":108},[82,171477,113],{"class":112},[82,171479,1030],{"class":96},[82,171481,725],{"class":92},[82,171483,728],{"class":112},[82,171485,398],{"class":108},[82,171487,669],{"class":92},[82,171489,171490,171492,171494,171496],{"class":84,"line":157},[82,171491,737],{"class":92},[82,171493,113],{"class":112},[82,171495,398],{"class":108},[82,171497,401],{"class":92},[19,171499,1051],{},[73,171501,171502],{"className":75,"code":1054,"language":77,"meta":78,"style":78},[32,171503,171504,171534],{"__ignoreMap":78},[82,171505,171506,171508,171510,171512,171514,171516,171518,171520,171522,171524,171526,171528,171530,171532],{"class":84,"line":85},[82,171507,694],{"class":112},[82,171509,262],{"class":88},[82,171511,93],{"class":92},[82,171513,97],{"class":96},[82,171515,100],{"class":92},[82,171517,781],{"class":96},[82,171519,100],{"class":92},[82,171521,109],{"class":108},[82,171523,113],{"class":112},[82,171525,116],{"class":96},[82,171527,725],{"class":92},[82,171529,728],{"class":112},[82,171531,398],{"class":108},[82,171533,669],{"class":92},[82,171535,171536,171538,171540,171542],{"class":84,"line":157},[82,171537,802],{"class":108},[82,171539,805],{"class":92},[82,171541,1095],{"class":96},[82,171543,119],{"class":92},[14,171545,1101],{"id":1100},[19,171547,171548,1107],{},[32,171549,1106],{},[73,171551,171552],{"className":75,"code":1110,"language":77,"meta":78,"style":78},[32,171553,171554,171564,171568,171584],{"__ignoreMap":78},[82,171555,171556,171558,171560,171562],{"class":84,"line":85},[82,171557,1117],{"class":112},[82,171559,1120],{"class":92},[82,171561,1123],{"class":112},[82,171563,1126],{"class":92},[82,171565,171566],{"class":84,"line":157},[82,171567,486],{"emptyLinePlaceholder":485},[82,171569,171570,171572,171574,171576,171578,171580,171582],{"class":84,"line":404},[82,171571,191],{"class":92},[82,171573,113],{"class":112},[82,171575,1139],{"class":92},[82,171577,1142],{"class":96},[82,171579,725],{"class":92},[82,171581,1147],{"class":112},[82,171583,1150],{"class":96},[82,171585,171586,171588],{"class":84,"line":413},[82,171587,407],{"class":88},[82,171589,1157],{"class":92},[19,171591,1160],{},[73,171593,171594],{"className":75,"code":1163,"language":77,"meta":78,"style":78},[32,171595,171596,171606,171610,171622],{"__ignoreMap":78},[82,171597,171598,171600,171602,171604],{"class":84,"line":85},[82,171599,1117],{"class":112},[82,171601,1120],{"class":92},[82,171603,1123],{"class":112},[82,171605,1126],{"class":92},[82,171607,171608],{"class":84,"line":157},[82,171609,486],{"emptyLinePlaceholder":485},[82,171611,171612,171614,171616,171618,171620],{"class":84,"line":404},[82,171613,1184],{"class":92},[82,171615,113],{"class":112},[82,171617,1139],{"class":92},[82,171619,1142],{"class":96},[82,171621,119],{"class":92},[82,171623,171624,171626,171628,171630,171632],{"class":84,"line":413},[82,171625,1197],{"class":92},[82,171627,1200],{"class":108},[82,171629,113],{"class":112},[82,171631,1205],{"class":88},[82,171633,119],{"class":92},[19,171635,1210],{},[73,171637,171638],{"className":75,"code":1213,"language":77,"meta":78,"style":78},[32,171639,171640,171652,171656,171662],{"__ignoreMap":78},[82,171641,171642,171644,171646,171648,171650],{"class":84,"line":85},[82,171643,191],{"class":92},[82,171645,113],{"class":112},[82,171647,1139],{"class":92},[82,171649,1226],{"class":96},[82,171651,119],{"class":92},[82,171653,171654],{"class":84,"line":157},[82,171655,486],{"emptyLinePlaceholder":485},[82,171657,171658,171660],{"class":84,"line":404},[82,171659,1237],{"class":112},[82,171661,1240],{"class":92},[82,171663,171664,171666,171668,171670],{"class":84,"line":413},[82,171665,611],{"class":88},[82,171667,93],{"class":92},[82,171669,1249],{"class":96},[82,171671,119],{"class":92},[19,171673,1254],{},[73,171675,171676],{"className":75,"code":1257,"language":77,"meta":78,"style":78},[32,171677,171678,171690,171694,171710,171726],{"__ignoreMap":78},[82,171679,171680,171682,171684,171686,171688],{"class":84,"line":85},[82,171681,191],{"class":92},[82,171683,113],{"class":112},[82,171685,1139],{"class":92},[82,171687,97],{"class":96},[82,171689,119],{"class":92},[82,171691,171692],{"class":84,"line":157},[82,171693,486],{"emptyLinePlaceholder":485},[82,171695,171696,171698,171700,171702,171704,171706,171708],{"class":84,"line":404},[82,171697,1280],{"class":92},[82,171699,1283],{"class":96},[82,171701,100],{"class":92},[82,171703,109],{"class":108},[82,171705,113],{"class":112},[82,171707,116],{"class":96},[82,171709,119],{"class":92},[82,171711,171712,171714,171716,171718,171720,171722,171724],{"class":84,"line":413},[82,171713,393],{"class":92},[82,171715,113],{"class":112},[82,171717,1302],{"class":92},[82,171719,109],{"class":108},[82,171721,113],{"class":112},[82,171723,116],{"class":96},[82,171725,119],{"class":92},[82,171727,171728,171730],{"class":84,"line":508},[82,171729,407],{"class":88},[82,171731,410],{"class":92},[14,171733,1320],{"id":1319},[19,171735,1323],{},[73,171737,171738],{"className":75,"code":1326,"language":77,"meta":78,"style":78},[32,171739,171740,171746,171750,171758,171768,171778,171786,171790,171794,171818],{"__ignoreMap":78},[82,171741,171742,171744],{"class":84,"line":85},[82,171743,1123],{"class":112},[82,171745,1335],{"class":92},[82,171747,171748],{"class":84,"line":157},[82,171749,486],{"emptyLinePlaceholder":485},[82,171751,171752,171754,171756],{"class":84,"line":404},[82,171753,1344],{"class":92},[82,171755,113],{"class":112},[82,171757,1349],{"class":92},[82,171759,171760,171762,171764,171766],{"class":84,"line":413},[82,171761,1354],{"class":96},[82,171763,1357],{"class":92},[82,171765,1360],{"class":96},[82,171767,1363],{"class":92},[82,171769,171770,171772,171774,171776],{"class":84,"line":508},[82,171771,1368],{"class":96},[82,171773,1357],{"class":92},[82,171775,1373],{"class":88},[82,171777,1363],{"class":92},[82,171779,171780,171782,171784],{"class":84,"line":513},[82,171781,1380],{"class":96},[82,171783,1357],{"class":92},[82,171785,1385],{"class":88},[82,171787,171788],{"class":84,"line":1388},[82,171789,1391],{"class":92},[82,171791,171792],{"class":84,"line":1394},[82,171793,486],{"emptyLinePlaceholder":485},[82,171795,171796,171798,171800,171802,171804,171806,171808,171810,171812,171814,171816],{"class":84,"line":1399},[82,171797,1402],{"class":92},[82,171799,113],{"class":112},[82,171801,1407],{"class":92},[82,171803,1410],{"class":108},[82,171805,113],{"class":112},[82,171807,1415],{"class":88},[82,171809,100],{"class":92},[82,171811,1420],{"class":108},[82,171813,113],{"class":112},[82,171815,1425],{"class":88},[82,171817,119],{"class":92},[82,171819,171820,171822],{"class":84,"line":1430},[82,171821,407],{"class":88},[82,171823,1435],{"class":92},[19,171825,1438],{},[73,171827,171828],{"className":75,"code":1441,"language":77,"meta":78,"style":78},[32,171829,171830,171836,171840,171848,171876,171904,171908,171912,171942],{"__ignoreMap":78},[82,171831,171832,171834],{"class":84,"line":85},[82,171833,1123],{"class":112},[82,171835,1335],{"class":92},[82,171837,171838],{"class":84,"line":157},[82,171839,486],{"emptyLinePlaceholder":485},[82,171841,171842,171844,171846],{"class":84,"line":404},[82,171843,1458],{"class":92},[82,171845,113],{"class":112},[82,171847,1463],{"class":92},[82,171849,171850,171852,171854,171856,171858,171860,171862,171864,171866,171868,171870,171872,171874],{"class":84,"line":413},[82,171851,1468],{"class":92},[82,171853,1471],{"class":96},[82,171855,1357],{"class":92},[82,171857,1360],{"class":96},[82,171859,100],{"class":92},[82,171861,1480],{"class":96},[82,171863,1357],{"class":92},[82,171865,1373],{"class":88},[82,171867,100],{"class":92},[82,171869,1489],{"class":96},[82,171871,1357],{"class":92},[82,171873,1494],{"class":88},[82,171875,1497],{"class":92},[82,171877,171878,171880,171882,171884,171886,171888,171890,171892,171894,171896,171898,171900,171902],{"class":84,"line":508},[82,171879,1468],{"class":92},[82,171881,1471],{"class":96},[82,171883,1357],{"class":92},[82,171885,1508],{"class":96},[82,171887,100],{"class":92},[82,171889,1480],{"class":96},[82,171891,1357],{"class":92},[82,171893,1517],{"class":88},[82,171895,100],{"class":92},[82,171897,1489],{"class":96},[82,171899,1357],{"class":92},[82,171901,1526],{"class":88},[82,171903,1497],{"class":92},[82,171905,171906],{"class":84,"line":513},[82,171907,875],{"class":92},[82,171909,171910],{"class":84,"line":1388},[82,171911,486],{"emptyLinePlaceholder":485},[82,171913,171914,171916,171918,171920,171922,171924,171926,171928,171930,171932,171934,171936,171938,171940],{"class":84,"line":1394},[82,171915,694],{"class":112},[82,171917,262],{"class":88},[82,171919,93],{"class":92},[82,171921,1547],{"class":96},[82,171923,100],{"class":92},[82,171925,781],{"class":96},[82,171927,100],{"class":92},[82,171929,109],{"class":108},[82,171931,113],{"class":112},[82,171933,116],{"class":96},[82,171935,725],{"class":92},[82,171937,728],{"class":112},[82,171939,398],{"class":108},[82,171941,669],{"class":92},[82,171943,171944,171946,171948,171950,171952,171954,171956,171958,171960,171962,171964],{"class":84,"line":1399},[82,171945,1572],{"class":92},[82,171947,256],{"class":108},[82,171949,100],{"class":92},[82,171951,1410],{"class":108},[82,171953,113],{"class":112},[82,171955,1415],{"class":88},[82,171957,100],{"class":92},[82,171959,1420],{"class":108},[82,171961,113],{"class":112},[82,171963,1425],{"class":88},[82,171965,119],{"class":92},[19,171967,1595],{},[73,171969,171970],{"className":75,"code":1598,"language":77,"meta":78,"style":78},[32,171971,171972,171978,171982,172012,172024,172028],{"__ignoreMap":78},[82,171973,171974,171976],{"class":84,"line":85},[82,171975,1123],{"class":112},[82,171977,1335],{"class":92},[82,171979,171980],{"class":84,"line":157},[82,171981,486],{"emptyLinePlaceholder":485},[82,171983,171984,171986,171988,171990,171992,171994,171996,171998,172000,172002,172004,172006,172008,172010],{"class":84,"line":404},[82,171985,694],{"class":112},[82,171987,262],{"class":88},[82,171989,93],{"class":92},[82,171991,1547],{"class":96},[82,171993,100],{"class":92},[82,171995,103],{"class":96},[82,171997,100],{"class":92},[82,171999,109],{"class":108},[82,172001,113],{"class":112},[82,172003,116],{"class":96},[82,172005,725],{"class":92},[82,172007,728],{"class":112},[82,172009,398],{"class":108},[82,172011,669],{"class":92},[82,172013,172014,172016,172018,172020,172022],{"class":84,"line":413},[82,172015,1645],{"class":92},[82,172017,113],{"class":112},[82,172019,1650],{"class":92},[82,172021,256],{"class":108},[82,172023,119],{"class":92},[82,172025,172026],{"class":84,"line":508},[82,172027,486],{"emptyLinePlaceholder":485},[82,172029,172030,172032],{"class":84,"line":513},[82,172031,407],{"class":88},[82,172033,1665],{"class":92},[14,172035,1669],{"id":1668},[19,172037,1672],{},[19,172039,1675],{},[73,172041,172042],{"className":75,"code":1678,"language":77,"meta":78,"style":78},[32,172043,172044,172050,172054,172062,172078,172094,172110,172114,172118,172156,172168],{"__ignoreMap":78},[82,172045,172046,172048],{"class":84,"line":85},[82,172047,1123],{"class":112},[82,172049,1687],{"class":92},[82,172051,172052],{"class":84,"line":157},[82,172053,486],{"emptyLinePlaceholder":485},[82,172055,172056,172058,172060],{"class":84,"line":404},[82,172057,1458],{"class":92},[82,172059,113],{"class":112},[82,172061,1463],{"class":92},[82,172063,172064,172066,172068,172070,172072,172074,172076],{"class":84,"line":413},[82,172065,1704],{"class":92},[82,172067,1707],{"class":96},[82,172069,100],{"class":92},[82,172071,1712],{"class":96},[82,172073,100],{"class":92},[82,172075,1717],{"class":96},[82,172077,1720],{"class":92},[82,172079,172080,172082,172084,172086,172088,172090,172092],{"class":84,"line":508},[82,172081,1704],{"class":92},[82,172083,1360],{"class":96},[82,172085,100],{"class":92},[82,172087,1373],{"class":88},[82,172089,100],{"class":92},[82,172091,1494],{"class":88},[82,172093,1720],{"class":92},[82,172095,172096,172098,172100,172102,172104,172106,172108],{"class":84,"line":513},[82,172097,1704],{"class":92},[82,172099,1508],{"class":96},[82,172101,100],{"class":92},[82,172103,1517],{"class":88},[82,172105,100],{"class":92},[82,172107,1526],{"class":88},[82,172109,1720],{"class":92},[82,172111,172112],{"class":84,"line":1388},[82,172113,875],{"class":92},[82,172115,172116],{"class":84,"line":1394},[82,172117,486],{"emptyLinePlaceholder":485},[82,172119,172120,172122,172124,172126,172128,172130,172132,172134,172136,172138,172140,172142,172144,172146,172148,172150,172152,172154],{"class":84,"line":1399},[82,172121,694],{"class":112},[82,172123,262],{"class":88},[82,172125,93],{"class":92},[82,172127,1771],{"class":96},[82,172129,100],{"class":92},[82,172131,781],{"class":96},[82,172133,100],{"class":92},[82,172135,109],{"class":108},[82,172137,113],{"class":112},[82,172139,116],{"class":96},[82,172141,100],{"class":92},[82,172143,1788],{"class":108},[82,172145,113],{"class":112},[82,172147,1793],{"class":96},[82,172149,725],{"class":92},[82,172151,728],{"class":112},[82,172153,398],{"class":108},[82,172155,669],{"class":92},[82,172157,172158,172160,172162,172164,172166],{"class":84,"line":1430},[82,172159,1806],{"class":92},[82,172161,113],{"class":112},[82,172163,1811],{"class":92},[82,172165,256],{"class":108},[82,172167,119],{"class":92},[82,172169,172170],{"class":84,"line":1818},[82,172171,1821],{"class":92},[19,172173,1824],{},[73,172175,172176],{"className":75,"code":1827,"language":77,"meta":78,"style":78},[32,172177,172178,172184,172188,172218,172230,172240],{"__ignoreMap":78},[82,172179,172180,172182],{"class":84,"line":85},[82,172181,1123],{"class":112},[82,172183,1687],{"class":92},[82,172185,172186],{"class":84,"line":157},[82,172187,486],{"emptyLinePlaceholder":485},[82,172189,172190,172192,172194,172196,172198,172200,172202,172204,172206,172208,172210,172212,172214,172216],{"class":84,"line":404},[82,172191,694],{"class":112},[82,172193,262],{"class":88},[82,172195,93],{"class":92},[82,172197,1771],{"class":96},[82,172199,100],{"class":92},[82,172201,103],{"class":96},[82,172203,100],{"class":92},[82,172205,109],{"class":108},[82,172207,113],{"class":112},[82,172209,116],{"class":96},[82,172211,725],{"class":92},[82,172213,728],{"class":112},[82,172215,398],{"class":108},[82,172217,669],{"class":92},[82,172219,172220,172222,172224,172226,172228],{"class":84,"line":413},[82,172221,1874],{"class":92},[82,172223,113],{"class":112},[82,172225,1879],{"class":92},[82,172227,256],{"class":108},[82,172229,119],{"class":92},[82,172231,172232,172234,172236,172238],{"class":84,"line":508},[82,172233,1888],{"class":112},[82,172235,1891],{"class":92},[82,172237,603],{"class":112},[82,172239,1896],{"class":92},[82,172241,172242,172244],{"class":84,"line":513},[82,172243,1901],{"class":88},[82,172245,1904],{"class":92},[19,172247,1907],{},[73,172249,172250],{"className":75,"code":1910,"language":77,"meta":78,"style":78},[32,172251,172252,172258,172262,172270,172298,172326,172330,172334,172372,172392,172410,172414],{"__ignoreMap":78},[82,172253,172254,172256],{"class":84,"line":85},[82,172255,1123],{"class":112},[82,172257,1687],{"class":92},[82,172259,172260],{"class":84,"line":157},[82,172261,486],{"emptyLinePlaceholder":485},[82,172263,172264,172266,172268],{"class":84,"line":404},[82,172265,1458],{"class":92},[82,172267,113],{"class":112},[82,172269,1463],{"class":92},[82,172271,172272,172274,172276,172278,172280,172282,172284,172286,172288,172290,172292,172294,172296],{"class":84,"line":413},[82,172273,1468],{"class":92},[82,172275,1471],{"class":96},[82,172277,1357],{"class":92},[82,172279,1360],{"class":96},[82,172281,100],{"class":92},[82,172283,1480],{"class":96},[82,172285,1357],{"class":92},[82,172287,1373],{"class":88},[82,172289,100],{"class":92},[82,172291,1489],{"class":96},[82,172293,1357],{"class":92},[82,172295,1494],{"class":88},[82,172297,1497],{"class":92},[82,172299,172300,172302,172304,172306,172308,172310,172312,172314,172316,172318,172320,172322,172324],{"class":84,"line":508},[82,172301,1468],{"class":92},[82,172303,1471],{"class":96},[82,172305,1357],{"class":92},[82,172307,1508],{"class":96},[82,172309,100],{"class":92},[82,172311,1480],{"class":96},[82,172313,1357],{"class":92},[82,172315,1517],{"class":88},[82,172317,100],{"class":92},[82,172319,1489],{"class":96},[82,172321,1357],{"class":92},[82,172323,1526],{"class":88},[82,172325,1497],{"class":92},[82,172327,172328],{"class":84,"line":513},[82,172329,875],{"class":92},[82,172331,172332],{"class":84,"line":1388},[82,172333,486],{"emptyLinePlaceholder":485},[82,172335,172336,172338,172340,172342,172344,172346,172348,172350,172352,172354,172356,172358,172360,172362,172364,172366,172368,172370],{"class":84,"line":1394},[82,172337,694],{"class":112},[82,172339,262],{"class":88},[82,172341,93],{"class":92},[82,172343,1771],{"class":96},[82,172345,100],{"class":92},[82,172347,781],{"class":96},[82,172349,100],{"class":92},[82,172351,109],{"class":108},[82,172353,113],{"class":112},[82,172355,116],{"class":96},[82,172357,100],{"class":92},[82,172359,1788],{"class":108},[82,172361,113],{"class":112},[82,172363,1793],{"class":96},[82,172365,725],{"class":92},[82,172367,728],{"class":112},[82,172369,398],{"class":108},[82,172371,669],{"class":92},[82,172373,172374,172376,172378,172380,172382,172384,172386,172388,172390],{"class":84,"line":1399},[82,172375,2037],{"class":92},[82,172377,113],{"class":112},[82,172379,847],{"class":92},[82,172381,1471],{"class":96},[82,172383,100],{"class":92},[82,172385,1480],{"class":96},[82,172387,100],{"class":92},[82,172389,1489],{"class":96},[82,172391,875],{"class":92},[82,172393,172394,172396,172398,172400,172402,172404,172406,172408],{"class":84,"line":1430},[82,172395,1806],{"class":92},[82,172397,113],{"class":112},[82,172399,2062],{"class":92},[82,172401,256],{"class":108},[82,172403,100],{"class":92},[82,172405,2069],{"class":108},[82,172407,113],{"class":112},[82,172409,2074],{"class":92},[82,172411,172412],{"class":84,"line":1818},[82,172413,2079],{"class":92},[82,172415,172416],{"class":84,"line":2082},[82,172417,1821],{"class":92},[14,172419,2088],{"id":2087},[19,172421,2091],{},[26,172423,172424,172426,172428],{},[29,172425,2096],{},[29,172427,2099],{},[29,172429,2102],{},[19,172431,2105],{},[73,172433,172434],{"className":75,"code":2108,"language":77,"meta":78,"style":78},[32,172435,172436,172446,172450,172462,172478,172482,172490,172498,172502,172512,172528,172536,172540,172556,172560,172588,172592,172606],{"__ignoreMap":78},[82,172437,172438,172440,172442,172444],{"class":84,"line":85},[82,172439,1117],{"class":112},[82,172441,1120],{"class":92},[82,172443,1123],{"class":112},[82,172445,1126],{"class":92},[82,172447,172448],{"class":84,"line":157},[82,172449,486],{"emptyLinePlaceholder":485},[82,172451,172452,172454,172456,172458,172460],{"class":84,"line":404},[82,172453,191],{"class":92},[82,172455,113],{"class":112},[82,172457,1139],{"class":92},[82,172459,2135],{"class":96},[82,172461,119],{"class":92},[82,172463,172464,172466,172468,172470,172472,172474,172476],{"class":84,"line":413},[82,172465,393],{"class":92},[82,172467,113],{"class":112},[82,172469,1302],{"class":92},[82,172471,109],{"class":108},[82,172473,113],{"class":112},[82,172475,116],{"class":96},[82,172477,119],{"class":92},[82,172479,172480],{"class":84,"line":508},[82,172481,486],{"emptyLinePlaceholder":485},[82,172483,172484,172486,172488],{"class":84,"line":513},[82,172485,2162],{"class":92},[82,172487,113],{"class":112},[82,172489,2167],{"class":92},[82,172491,172492,172494,172496],{"class":84,"line":1388},[82,172493,2172],{"class":92},[82,172495,113],{"class":112},[82,172497,2177],{"class":92},[82,172499,172500],{"class":84,"line":1394},[82,172501,486],{"emptyLinePlaceholder":485},[82,172503,172504,172506,172508,172510],{"class":84,"line":1399},[82,172505,597],{"class":112},[82,172507,2188],{"class":92},[82,172509,603],{"class":112},[82,172511,2193],{"class":92},[82,172513,172514,172516,172518,172520,172522,172524,172526],{"class":84,"line":1430},[82,172515,2198],{"class":92},[82,172517,113],{"class":112},[82,172519,2203],{"class":92},[82,172521,2206],{"class":96},[82,172523,2209],{"class":88},[82,172525,2212],{"class":96},[82,172527,119],{"class":92},[82,172529,172530,172532,172534],{"class":84,"line":1818},[82,172531,2219],{"class":112},[82,172533,2222],{"class":112},[82,172535,2225],{"class":92},[82,172537,172538],{"class":84,"line":2082},[82,172539,2230],{"class":112},[82,172541,172542,172544,172546,172548,172550,172552,172554],{"class":84,"line":2233},[82,172543,2236],{"class":92},[82,172545,113],{"class":112},[82,172547,2241],{"class":92},[82,172549,2244],{"class":88},[82,172551,725],{"class":92},[82,172553,2249],{"class":112},[82,172555,2252],{"class":88},[82,172557,172558],{"class":84,"line":2255},[82,172559,486],{"emptyLinePlaceholder":485},[82,172561,172562,172564,172566,172568,172570,172572,172574,172576,172578,172580,172582,172584,172586],{"class":84,"line":2260},[82,172563,2263],{"class":92},[82,172565,113],{"class":112},[82,172567,2268],{"class":88},[82,172569,2271],{"class":92},[82,172571,2274],{"class":108},[82,172573,2277],{"class":112},[82,172575,2280],{"class":92},[82,172577,2283],{"class":88},[82,172579,2286],{"class":92},[82,172581,2289],{"class":108},[82,172583,113],{"class":112},[82,172585,1205],{"class":88},[82,172587,119],{"class":92},[82,172589,172590],{"class":84,"line":2298},[82,172591,486],{"emptyLinePlaceholder":485},[82,172593,172594,172596,172598,172600,172602,172604],{"class":84,"line":2303},[82,172595,597],{"class":112},[82,172597,2308],{"class":92},[82,172599,603],{"class":112},[82,172601,2313],{"class":92},[82,172603,440],{"class":88},[82,172605,2318],{"class":92},[82,172607,172608,172610],{"class":84,"line":2321},[82,172609,611],{"class":88},[82,172611,2326],{"class":92},[14,172613,2330],{"id":2329},[73,172615,172616],{"className":75,"code":2333,"language":77,"meta":78,"style":78},[32,172617,172618,172624,172634,172638,172650,172654,172658,172666,172676,172682,172686,172716,172726,172730,172734,172742,172772,172796,172800,172804,172812,172840,172844],{"__ignoreMap":78},[82,172619,172620,172622],{"class":84,"line":85},[82,172621,1123],{"class":112},[82,172623,1335],{"class":92},[82,172625,172626,172628,172630,172632],{"class":84,"line":157},[82,172627,1117],{"class":112},[82,172629,1120],{"class":92},[82,172631,1123],{"class":112},[82,172633,1126],{"class":92},[82,172635,172636],{"class":84,"line":404},[82,172637,486],{"emptyLinePlaceholder":485},[82,172639,172640,172642,172644,172646,172648],{"class":84,"line":413},[82,172641,2360],{"class":88},[82,172643,259],{"class":112},[82,172645,1139],{"class":92},[82,172647,1547],{"class":96},[82,172649,119],{"class":92},[82,172651,172652],{"class":84,"line":508},[82,172653,486],{"emptyLinePlaceholder":485},[82,172655,172656],{"class":84,"line":513},[82,172657,486],{"emptyLinePlaceholder":485},[82,172659,172660,172662,172664],{"class":84,"line":1388},[82,172661,2381],{"class":112},[82,172663,2385],{"class":2384},[82,172665,2388],{"class":92},[82,172667,172668,172670,172672,172674],{"class":84,"line":1394},[82,172669,2219],{"class":112},[82,172671,2222],{"class":112},[82,172673,2397],{"class":88},[82,172675,2400],{"class":92},[82,172677,172678,172680],{"class":84,"line":1399},[82,172679,2405],{"class":112},[82,172681,2408],{"class":92},[82,172683,172684],{"class":84,"line":1430},[82,172685,486],{"emptyLinePlaceholder":485},[82,172687,172688,172690,172692,172694,172696,172698,172700,172702,172704,172706,172708,172710,172712,172714],{"class":84,"line":1818},[82,172689,2417],{"class":112},[82,172691,262],{"class":88},[82,172693,93],{"class":92},[82,172695,2360],{"class":88},[82,172697,100],{"class":92},[82,172699,103],{"class":96},[82,172701,100],{"class":92},[82,172703,109],{"class":108},[82,172705,113],{"class":112},[82,172707,116],{"class":96},[82,172709,725],{"class":92},[82,172711,728],{"class":112},[82,172713,398],{"class":108},[82,172715,669],{"class":92},[82,172717,172718,172720,172722,172724],{"class":84,"line":2082},[82,172719,2405],{"class":112},[82,172721,1650],{"class":92},[82,172723,256],{"class":108},[82,172725,119],{"class":92},[82,172727,172728],{"class":84,"line":2233},[82,172729,486],{"emptyLinePlaceholder":485},[82,172731,172732],{"class":84,"line":2255},[82,172733,486],{"emptyLinePlaceholder":485},[82,172735,172736,172738,172740],{"class":84,"line":2260},[82,172737,2381],{"class":112},[82,172739,2468],{"class":2384},[82,172741,2471],{"class":92},[82,172743,172744,172746,172748,172750,172752,172754,172756,172758,172760,172762,172764,172766,172768,172770],{"class":84,"line":2298},[82,172745,2417],{"class":112},[82,172747,262],{"class":88},[82,172749,93],{"class":92},[82,172751,2360],{"class":88},[82,172753,100],{"class":92},[82,172755,781],{"class":96},[82,172757,100],{"class":92},[82,172759,109],{"class":108},[82,172761,113],{"class":112},[82,172763,116],{"class":96},[82,172765,725],{"class":92},[82,172767,728],{"class":112},[82,172769,398],{"class":108},[82,172771,669],{"class":92},[82,172773,172774,172776,172778,172780,172782,172784,172786,172788,172790,172792,172794],{"class":84,"line":2303},[82,172775,2506],{"class":92},[82,172777,256],{"class":108},[82,172779,100],{"class":92},[82,172781,1410],{"class":108},[82,172783,113],{"class":112},[82,172785,1415],{"class":88},[82,172787,100],{"class":92},[82,172789,1420],{"class":108},[82,172791,113],{"class":112},[82,172793,1425],{"class":88},[82,172795,119],{"class":92},[82,172797,172798],{"class":84,"line":2321},[82,172799,486],{"emptyLinePlaceholder":485},[82,172801,172802],{"class":84,"line":2533},[82,172803,486],{"emptyLinePlaceholder":485},[82,172805,172806,172808,172810],{"class":84,"line":2538},[82,172807,1458],{"class":92},[82,172809,113],{"class":112},[82,172811,2545],{"class":92},[82,172813,172814,172816,172818,172820,172822,172824,172826,172828,172830,172832,172834,172836,172838],{"class":84,"line":2548},[82,172815,2551],{"class":92},[82,172817,1471],{"class":96},[82,172819,1357],{"class":92},[82,172821,1360],{"class":96},[82,172823,100],{"class":92},[82,172825,1480],{"class":96},[82,172827,1357],{"class":92},[82,172829,1373],{"class":88},[82,172831,100],{"class":92},[82,172833,1489],{"class":96},[82,172835,1357],{"class":92},[82,172837,1494],{"class":88},[82,172839,2576],{"class":92},[82,172841,172842],{"class":84,"line":2579},[82,172843,2582],{"class":92},[82,172845,172846,172848,172850,172852],{"class":84,"line":2585},[82,172847,407],{"class":88},[82,172849,93],{"class":92},[82,172851,2592],{"class":96},[82,172853,119],{"class":92},[14,172855,2598],{"id":2597},[26,172857,172858,172862,172866,172870,172874,172878],{},[29,172859,172860,761],{},[32,172861,313],{},[29,172863,2607,172864,2611],{},[32,172865,2610],{},[29,172867,2614,172868,2611],{},[32,172869,694],{},[29,172871,2619,172872,2623],{},[32,172873,2622],{},[29,172875,2626,172876,2630],{},[32,172877,2629],{},[29,172879,2633],{},[14,172881,2637],{"id":2636},[26,172883,172884,172888,172892,172894,172896],{},[29,172885,2642,172886,2646],{},[32,172887,2645],{},[29,172889,2649,172890,2652],{},[32,172891,2645],{},[29,172893,2655],{},[29,172895,2658],{},[29,172897,2661,172898,2665,172900,2669],{},[32,172899,2664],{},[32,172901,2668],{},[2671,172903,2673],{},{"title":78,"searchDepth":157,"depth":157,"links":172905},[172906,172907,172911,172912,172918,172919,172920,172921,172922,172923,172924,172925,172926,172927,172928],{"id":16,"depth":157,"text":17},{"id":62,"depth":157,"text":63,"children":172908},[172909,172910],{"id":67,"depth":404,"text":68},{"id":122,"depth":404,"text":123},{"id":242,"depth":157,"text":243},{"id":349,"depth":157,"text":350,"children":172913},[172914,172915,172916,172917],{"id":353,"depth":404,"text":354},{"id":445,"depth":404,"text":446},{"id":520,"depth":404,"text":521},{"id":617,"depth":404,"text":618},{"id":688,"depth":157,"text":689},{"id":755,"depth":157,"text":756},{"id":920,"depth":157,"text":921},{"id":984,"depth":157,"text":985},{"id":1100,"depth":157,"text":1101},{"id":1319,"depth":157,"text":1320},{"id":1668,"depth":157,"text":1669},{"id":2087,"depth":157,"text":2088},{"id":2329,"depth":157,"text":2330},{"id":2597,"depth":157,"text":2598},{"id":2636,"depth":157,"text":2637},{},{"title":5,"description":2699},{"id":172932,"title":172933,"body":172934,"description":2699,"extension":2700,"meta":175120,"navigation":485,"path":175121,"seo":175122,"stem":175123,"__hash__":175124},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172935,"toc":175087},[172936,172939,172943,172946,172949,173041,173043,173062,173067,173071,173074,173077,173106,173113,173116,173120,173123,173152,173154,173206,173212,173265,173269,173367,173370,173437,173441,173498,173500,173506,173510,173515,173521,173612,173617,173621,173624,173702,173705,173743,173747,173865,173868,173872,173875,173920,173923,173927,173932,173938,173988,173991,174022,174026,174030,174060,174064,174099,174103,174138,174178,174182,174198,174201,174205,174209,174288,174292,174333,174337,174392,174396,174430,174434,174464,174473,174480,174486,174543,174546,174554,174557,174561,174568,174571,174577,174580,174597,174602,174606,174612,174625,174628,174665,174668,174679,174682,174696,174699,174713,174717,174724,174757,174760,174762,174768,174771,174775,174777,174783,174788,174961,174965,175028,175032,175056,175060,175084],[10,172937,172933],{"id":172938},"_9-异常模块与包",[14,172940,172942],{"id":172941},"_91-什么是异常","9.1 什么是异常",[19,172944,172945],{},"异常是程序运行过程中出现的错误。",[19,172947,172948],{},"常见异常：",[278,172950,172951,172960],{},[281,172952,172953],{},[284,172954,172955,172958],{},[287,172956,172957],{},"异常",[287,172959,292],{},[294,172961,172962,172972,172982,172991,173001,173011,173021,173031],{},[284,172963,172964,172969],{},[299,172965,172966],{},[32,172967,172968],{},"NameError",[299,172970,172971],{},"使用了未定义变量",[284,172973,172974,172979],{},[299,172975,172976],{},[32,172977,172978],{},"TypeError",[299,172980,172981],{},"类型不匹配",[284,172983,172984,172988],{},[299,172985,172986],{},[32,172987,157343],{},[299,172989,172990],{},"值不合法",[284,172992,172993,172998],{},[299,172994,172995],{},[32,172996,172997],{},"IndexError",[299,172999,173000],{},"列表索引越界",[284,173002,173003,173008],{},[299,173004,173005],{},[32,173006,173007],{},"KeyError",[299,173009,173010],{},"字典 key 不存在",[284,173012,173013,173018],{},[299,173014,173015],{},[32,173016,173017],{},"FileNotFoundError",[299,173019,173020],{},"文件不存在",[284,173022,173023,173028],{},[299,173024,173025],{},[32,173026,173027],{},"ZeroDivisionError",[299,173029,173030],{},"除数为 0",[284,173032,173033,173038],{},[299,173034,173035],{},[32,173036,173037],{},"ImportError",[299,173039,173040],{},"导入失败",[19,173042,17721],{},[73,173044,173046],{"className":75,"code":173045,"language":77,"meta":78,"style":78},"num = int(\"abc\")\n",[32,173047,173048],{"__ignoreMap":78},[82,173049,173050,173052,173054,173056,173058,173060],{"class":84,"line":85},[82,173051,158296],{"class":92},[82,173053,113],{"class":112},[82,173055,4982],{"class":88},[82,173057,93],{"class":92},[82,173059,158389],{"class":96},[82,173061,119],{"class":92},[19,173063,173064,173065,2611],{},"会触发 ",[32,173066,157343],{},[14,173068,173070],{"id":173069},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,173072,173073],{},"如果不处理异常，程序会直接终止。",[19,173075,173076],{},"例如用户输入年龄：",[73,173078,173080],{"className":75,"code":173079,"language":77,"meta":78,"style":78},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[32,173081,173082,173100],{"__ignoreMap":78},[82,173083,173084,173086,173088,173090,173092,173094,173096,173098],{"class":84,"line":85},[82,173085,149088],{"class":92},[82,173087,113],{"class":112},[82,173089,4982],{"class":88},[82,173091,93],{"class":92},[82,173093,56381],{"class":88},[82,173095,93],{"class":92},[82,173097,154908],{"class":96},[82,173099,33074],{"class":92},[82,173101,173102,173104],{"class":84,"line":157},[82,173103,407],{"class":88},[82,173105,158270],{"class":92},[19,173107,173108,173109,173112],{},"用户输入 ",[32,173110,173111],{},"abc","，程序就会报错退出。",[19,173114,173115],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173117,173119],{"id":173118},"_93-try-except","9.3 try except",[19,173121,173122],{},"基础语法：",[73,173124,173126],{"className":75,"code":173125,"language":77,"meta":78,"style":78},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[32,173127,173128,173135,173140,173147],{"__ignoreMap":78},[82,173129,173130,173133],{"class":84,"line":85},[82,173131,173132],{"class":112},"try",[82,173134,669],{"class":92},[82,173136,173137],{"class":84,"line":157},[82,173138,173139],{"class":92},"    可能出错的代码\n",[82,173141,173142,173145],{"class":84,"line":404},[82,173143,173144],{"class":112},"except",[82,173146,669],{"class":92},[82,173148,173149],{"class":84,"line":413},[82,173150,173151],{"class":92},"    出错后的处理代码\n",[19,173153,17721],{},[73,173155,173157],{"className":75,"code":173156,"language":77,"meta":78,"style":78},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[32,173158,173159,173165,173183,173189,173195],{"__ignoreMap":78},[82,173160,173161,173163],{"class":84,"line":85},[82,173162,173132],{"class":112},[82,173164,669],{"class":92},[82,173166,173167,173169,173171,173173,173175,173177,173179,173181],{"class":84,"line":157},[82,173168,154900],{"class":92},[82,173170,113],{"class":112},[82,173172,4982],{"class":88},[82,173174,93],{"class":92},[82,173176,56381],{"class":88},[82,173178,93],{"class":92},[82,173180,154908],{"class":96},[82,173182,33074],{"class":92},[82,173184,173185,173187],{"class":84,"line":404},[82,173186,611],{"class":88},[82,173188,158270],{"class":92},[82,173190,173191,173193],{"class":84,"line":413},[82,173192,173144],{"class":112},[82,173194,669],{"class":92},[82,173196,173197,173199,173201,173204],{"class":84,"line":508},[82,173198,611],{"class":88},[82,173200,93],{"class":92},[82,173202,173203],{"class":96},"\"年龄必须是数字\"",[82,173205,119],{"class":92},[19,173207,173208,173209,173211],{},"不建议裸写 ",[32,173210,173144],{},"，最好指定异常类型。",[73,173213,173215],{"className":75,"code":173214,"language":77,"meta":78,"style":78},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[32,173216,173217,173223,173241,173247,173255],{"__ignoreMap":78},[82,173218,173219,173221],{"class":84,"line":85},[82,173220,173132],{"class":112},[82,173222,669],{"class":92},[82,173224,173225,173227,173229,173231,173233,173235,173237,173239],{"class":84,"line":157},[82,173226,154900],{"class":92},[82,173228,113],{"class":112},[82,173230,4982],{"class":88},[82,173232,93],{"class":92},[82,173234,56381],{"class":88},[82,173236,93],{"class":92},[82,173238,154908],{"class":96},[82,173240,33074],{"class":92},[82,173242,173243,173245],{"class":84,"line":404},[82,173244,611],{"class":88},[82,173246,158270],{"class":92},[82,173248,173249,173251,173253],{"class":84,"line":413},[82,173250,173144],{"class":112},[82,173252,154740],{"class":88},[82,173254,669],{"class":92},[82,173256,173257,173259,173261,173263],{"class":84,"line":508},[82,173258,611],{"class":88},[82,173260,93],{"class":92},[82,173262,173203],{"class":96},[82,173264,119],{"class":92},[14,173266,173268],{"id":173267},"_94-捕获多个异常","9.4 捕获多个异常",[73,173270,173272],{"className":75,"code":173271,"language":77,"meta":78,"style":78},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[32,173273,173274,173280,173301,173321,173328,173336,173347,173356],{"__ignoreMap":78},[82,173275,173276,173278],{"class":84,"line":85},[82,173277,173132],{"class":112},[82,173279,669],{"class":92},[82,173281,173282,173285,173287,173289,173291,173293,173295,173297,173299],{"class":84,"line":157},[82,173283,173284],{"class":92},"    nums ",[82,173286,113],{"class":112},[82,173288,847],{"class":92},[82,173290,2283],{"class":88},[82,173292,100],{"class":92},[82,173294,1425],{"class":88},[82,173296,100],{"class":92},[82,173298,2841],{"class":88},[82,173300,875],{"class":92},[82,173302,173303,173306,173308,173310,173312,173314,173316,173319],{"class":84,"line":404},[82,173304,173305],{"class":92},"    index ",[82,173307,113],{"class":112},[82,173309,4982],{"class":88},[82,173311,93],{"class":92},[82,173313,56381],{"class":88},[82,173315,93],{"class":92},[82,173317,173318],{"class":96},"\"请输入索引:\"",[82,173320,33074],{"class":92},[82,173322,173323,173325],{"class":84,"line":413},[82,173324,611],{"class":88},[82,173326,173327],{"class":92},"(nums[index])\n",[82,173329,173330,173332,173334],{"class":84,"line":508},[82,173331,173144],{"class":112},[82,173333,154740],{"class":88},[82,173335,669],{"class":92},[82,173337,173338,173340,173342,173345],{"class":84,"line":513},[82,173339,611],{"class":88},[82,173341,93],{"class":92},[82,173343,173344],{"class":96},"\"索引必须是整数\"",[82,173346,119],{"class":92},[82,173348,173349,173351,173354],{"class":84,"line":1388},[82,173350,173144],{"class":112},[82,173352,173353],{"class":88}," IndexError",[82,173355,669],{"class":92},[82,173357,173358,173360,173362,173365],{"class":84,"line":1394},[82,173359,611],{"class":88},[82,173361,93],{"class":92},[82,173363,173364],{"class":96},"\"索引越界\"",[82,173366,119],{"class":92},[19,173368,173369],{},"多个异常使用相同处理逻辑：",[73,173371,173373],{"className":75,"code":173372,"language":77,"meta":78,"style":78},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[32,173374,173375,173381,173399,173412,173426],{"__ignoreMap":78},[82,173376,173377,173379],{"class":84,"line":85},[82,173378,173132],{"class":112},[82,173380,669],{"class":92},[82,173382,173383,173385,173387,173389,173391,173393,173395,173397],{"class":84,"line":157},[82,173384,48157],{"class":92},[82,173386,113],{"class":112},[82,173388,4982],{"class":88},[82,173390,93],{"class":92},[82,173392,56381],{"class":88},[82,173394,93],{"class":92},[82,173396,158305],{"class":96},[82,173398,33074],{"class":92},[82,173400,173401,173403,173405,173407,173409],{"class":84,"line":404},[82,173402,611],{"class":88},[82,173404,93],{"class":92},[82,173406,440],{"class":88},[82,173408,158555],{"class":112},[82,173410,173411],{"class":92}," num)\n",[82,173413,173414,173416,173418,173420,173422,173424],{"class":84,"line":413},[82,173415,173144],{"class":112},[82,173417,4265],{"class":92},[82,173419,157343],{"class":88},[82,173421,100],{"class":92},[82,173423,173027],{"class":88},[82,173425,33362],{"class":92},[82,173427,173428,173430,173432,173435],{"class":84,"line":508},[82,173429,611],{"class":88},[82,173431,93],{"class":92},[82,173433,173434],{"class":96},"\"输入不合法\"",[82,173436,119],{"class":92},[14,173438,173440],{"id":173439},"_95-获取异常信息","9.5 获取异常信息",[73,173442,173444],{"className":75,"code":173443,"language":77,"meta":78,"style":78},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[32,173445,173446,173452,173466,173477],{"__ignoreMap":78},[82,173447,173448,173450],{"class":84,"line":85},[82,173449,173132],{"class":112},[82,173451,669],{"class":92},[82,173453,173454,173456,173458,173460,173462,173464],{"class":84,"line":157},[82,173455,48157],{"class":92},[82,173457,113],{"class":112},[82,173459,4982],{"class":88},[82,173461,93],{"class":92},[82,173463,158389],{"class":96},[82,173465,119],{"class":92},[82,173467,173468,173470,173472,173474],{"class":84,"line":404},[82,173469,173144],{"class":112},[82,173471,154740],{"class":88},[82,173473,67161],{"class":112},[82,173475,173476],{"class":92}," e:\n",[82,173478,173479,173481,173483,173485,173488,173490,173492,173494,173496],{"class":84,"line":413},[82,173480,611],{"class":88},[82,173482,93],{"class":92},[82,173484,2822],{"class":112},[82,173486,173487],{"class":96},"\"出错了:",[82,173489,3645],{"class":88},[82,173491,2844],{"class":92},[82,173493,3695],{"class":88},[82,173495,216],{"class":96},[82,173497,119],{"class":92},[19,173499,148999],{},[73,173501,173504],{"className":173502,"code":173503,"language":7780,"meta":78},[7778],"出错了:invalid literal for int() with base 10: 'abc'\n",[32,173505,173503],{"__ignoreMap":78},[14,173507,173509],{"id":173508},"_96-else和finally","9.6 else和finally",[19,173511,173512,173514],{},[32,173513,4304],{},"：没有异常时执行。",[19,173516,173517,173520],{},[32,173518,173519],{},"finally","：无论是否异常都会执行。",[73,173522,173524],{"className":75,"code":173523,"language":77,"meta":78,"style":78},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[32,173525,173526,173532,173550,173558,173568,173574,173595,173601],{"__ignoreMap":78},[82,173527,173528,173530],{"class":84,"line":85},[82,173529,173132],{"class":112},[82,173531,669],{"class":92},[82,173533,173534,173536,173538,173540,173542,173544,173546,173548],{"class":84,"line":157},[82,173535,48157],{"class":92},[82,173537,113],{"class":112},[82,173539,4982],{"class":88},[82,173541,93],{"class":92},[82,173543,56381],{"class":88},[82,173545,93],{"class":92},[82,173547,158305],{"class":96},[82,173549,33074],{"class":92},[82,173551,173552,173554,173556],{"class":84,"line":404},[82,173553,173144],{"class":112},[82,173555,154740],{"class":88},[82,173557,669],{"class":92},[82,173559,173560,173562,173564,173566],{"class":84,"line":413},[82,173561,611],{"class":88},[82,173563,93],{"class":92},[82,173565,155726],{"class":96},[82,173567,119],{"class":92},[82,173569,173570,173572],{"class":84,"line":508},[82,173571,4304],{"class":112},[82,173573,669],{"class":92},[82,173575,173576,173578,173580,173582,173585,173587,173589,173591,173593],{"class":84,"line":513},[82,173577,611],{"class":88},[82,173579,93],{"class":92},[82,173581,2822],{"class":112},[82,173583,173584],{"class":96},"\"输入正确:",[82,173586,3645],{"class":88},[82,173588,4272],{"class":92},[82,173590,3695],{"class":88},[82,173592,216],{"class":96},[82,173594,119],{"class":92},[82,173596,173597,173599],{"class":84,"line":1388},[82,173598,173519],{"class":112},[82,173600,669],{"class":92},[82,173602,173603,173605,173607,173610],{"class":84,"line":1394},[82,173604,611],{"class":88},[82,173606,93],{"class":92},[82,173608,173609],{"class":96},"\"程序结束\"",[82,173611,119],{"class":92},[19,173613,173614,173616],{},[32,173615,173519],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173618,173620],{"id":173619},"_97-抛出异常","9.7 抛出异常",[19,173622,173623],{},"程序可以主动抛出异常。",[73,173625,173627],{"className":75,"code":173626,"language":77,"meta":78,"style":78},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[32,173628,173629,173638,173650,173663,173683,173687,173691],{"__ignoreMap":78},[82,173630,173631,173633,173636],{"class":84,"line":85},[82,173632,2381],{"class":112},[82,173634,173635],{"class":2384}," set_age",[82,173637,163920],{"class":92},[82,173639,173640,173642,173644,173646,173648],{"class":84,"line":157},[82,173641,2219],{"class":112},[82,173643,18292],{"class":92},[82,173645,3659],{"class":112},[82,173647,6688],{"class":88},[82,173649,669],{"class":92},[82,173651,173652,173654,173656,173658,173661],{"class":84,"line":404},[82,173653,105983],{"class":112},[82,173655,154740],{"class":88},[82,173657,93],{"class":92},[82,173659,173660],{"class":96},"\"年龄不能为负数\"",[82,173662,119],{"class":92},[82,173664,173665,173667,173669,173671,173673,173675,173677,173679,173681],{"class":84,"line":413},[82,173666,611],{"class":88},[82,173668,93],{"class":92},[82,173670,2822],{"class":112},[82,173672,164488],{"class":96},[82,173674,3645],{"class":88},[82,173676,72777],{"class":92},[82,173678,3695],{"class":88},[82,173680,216],{"class":96},[82,173682,119],{"class":92},[82,173684,173685],{"class":84,"line":508},[82,173686,486],{"emptyLinePlaceholder":485},[82,173688,173689],{"class":84,"line":513},[82,173690,486],{"emptyLinePlaceholder":485},[82,173692,173693,173696,173698,173700],{"class":84,"line":1388},[82,173694,173695],{"class":92},"set_age(",[82,173697,3288],{"class":112},[82,173699,2283],{"class":88},[82,173701,119],{"class":92},[19,173703,173704],{},"调用者可以捕获：",[73,173706,173708],{"className":75,"code":173707,"language":77,"meta":78,"style":78},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[32,173709,173710,173716,173727,173737],{"__ignoreMap":78},[82,173711,173712,173714],{"class":84,"line":85},[82,173713,173132],{"class":112},[82,173715,669],{"class":92},[82,173717,173718,173721,173723,173725],{"class":84,"line":157},[82,173719,173720],{"class":92},"    set_age(",[82,173722,3288],{"class":112},[82,173724,2283],{"class":88},[82,173726,119],{"class":92},[82,173728,173729,173731,173733,173735],{"class":84,"line":404},[82,173730,173144],{"class":112},[82,173732,154740],{"class":88},[82,173734,67161],{"class":112},[82,173736,173476],{"class":92},[82,173738,173739,173741],{"class":84,"line":413},[82,173740,611],{"class":88},[82,173742,69556],{"class":92},[14,173744,173746],{"id":173745},"_98-自定义异常","9.8 自定义异常",[73,173748,173750],{"className":75,"code":173749,"language":77,"meta":78,"style":78},"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",[32,173751,173752,173766,173770,173774,173778,173786,173796,173807,173817,173821,173825,173831,173848,173859],{"__ignoreMap":78},[82,173753,173754,173756,173759,173761,173764],{"class":84,"line":85},[82,173755,17281],{"class":112},[82,173757,173758],{"class":2384}," BalanceNotEnoughError",[82,173760,93],{"class":92},[82,173762,173763],{"class":88},"Exception",[82,173765,33362],{"class":92},[82,173767,173768],{"class":84,"line":157},[82,173769,152064],{"class":112},[82,173771,173772],{"class":84,"line":404},[82,173773,486],{"emptyLinePlaceholder":485},[82,173775,173776],{"class":84,"line":413},[82,173777,486],{"emptyLinePlaceholder":485},[82,173779,173780,173782,173784],{"class":84,"line":508},[82,173781,2381],{"class":112},[82,173783,152712],{"class":2384},[82,173785,165317],{"class":92},[82,173787,173788,173790,173792,173794],{"class":84,"line":513},[82,173789,2219],{"class":112},[82,173791,152668],{"class":92},[82,173793,3709],{"class":112},[82,173795,165094],{"class":92},[82,173797,173798,173800,173803,173805],{"class":84,"line":1388},[82,173799,105983],{"class":112},[82,173801,173802],{"class":92}," BalanceNotEnoughError(",[82,173804,152763],{"class":96},[82,173806,119],{"class":92},[82,173808,173809,173811,173813,173815],{"class":84,"line":1394},[82,173810,6685],{"class":112},[82,173812,165324],{"class":92},[82,173814,3288],{"class":112},[82,173816,152701],{"class":92},[82,173818,173819],{"class":84,"line":1399},[82,173820,486],{"emptyLinePlaceholder":485},[82,173822,173823],{"class":84,"line":1430},[82,173824,486],{"emptyLinePlaceholder":485},[82,173826,173827,173829],{"class":84,"line":1818},[82,173828,173132],{"class":112},[82,173830,669],{"class":92},[82,173832,173833,173835,173837,173840,173842,173844,173846],{"class":84,"line":2082},[82,173834,164995],{"class":92},[82,173836,113],{"class":112},[82,173838,173839],{"class":92}," withdraw(",[82,173841,3069],{"class":88},[82,173843,100],{"class":92},[82,173845,4325],{"class":88},[82,173847,119],{"class":92},[82,173849,173850,173852,173855,173857],{"class":84,"line":2233},[82,173851,173144],{"class":112},[82,173853,173854],{"class":92}," BalanceNotEnoughError ",[82,173856,728],{"class":112},[82,173858,173476],{"class":92},[82,173860,173861,173863],{"class":84,"line":2255},[82,173862,611],{"class":88},[82,173864,69556],{"class":92},[19,173866,173867],{},"入门阶段大多数情况使用内置异常即可。",[14,173869,173871],{"id":173870},"_99-traceback","9.9 traceback",[19,173873,173874],{},"调试时可以输出完整异常堆栈。",[73,173876,173878],{"className":75,"code":173877,"language":77,"meta":78,"style":78},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[32,173879,173880,173887,173891,173897,173907,173915],{"__ignoreMap":78},[82,173881,173882,173884],{"class":84,"line":85},[82,173883,1123],{"class":112},[82,173885,173886],{"class":92}," traceback\n",[82,173888,173889],{"class":84,"line":157},[82,173890,486],{"emptyLinePlaceholder":485},[82,173892,173893,173895],{"class":84,"line":404},[82,173894,173132],{"class":112},[82,173896,669],{"class":92},[82,173898,173899,173901,173903,173905],{"class":84,"line":413},[82,173900,4585],{"class":88},[82,173902,93],{"class":92},[82,173904,158389],{"class":96},[82,173906,119],{"class":92},[82,173908,173909,173911,173913],{"class":84,"line":508},[82,173910,173144],{"class":112},[82,173912,154740],{"class":88},[82,173914,669],{"class":92},[82,173916,173917],{"class":84,"line":513},[82,173918,173919],{"class":92},"    traceback.print_exc()\n",[19,173921,173922],{},"日志系统中常把异常堆栈记录到文件。",[14,173924,173926],{"id":173925},"_910-什么是模块","9.10 什么是模块",[19,173928,173929,173930,128527],{},"模块就是一个 ",[32,173931,58],{},[19,173933,173934,173935,27203],{},"例如创建 ",[32,173936,173937],{},"my_math.py",[73,173939,173941],{"className":75,"code":173940,"language":77,"meta":78,"style":78},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[32,173942,173943,173951,173961,173965,173969,173978],{"__ignoreMap":78},[82,173944,173945,173947,173949],{"class":84,"line":85},[82,173946,2381],{"class":112},[82,173948,7802],{"class":2384},[82,173950,153618],{"class":92},[82,173952,173953,173955,173957,173959],{"class":84,"line":157},[82,173954,6685],{"class":112},[82,173956,13459],{"class":92},[82,173958,2249],{"class":112},[82,173960,153629],{"class":92},[82,173962,173963],{"class":84,"line":404},[82,173964,486],{"emptyLinePlaceholder":485},[82,173966,173967],{"class":84,"line":413},[82,173968,486],{"emptyLinePlaceholder":485},[82,173970,173971,173973,173976],{"class":84,"line":508},[82,173972,2381],{"class":112},[82,173974,173975],{"class":2384}," sub",[82,173977,153618],{"class":92},[82,173979,173980,173982,173984,173986],{"class":84,"line":513},[82,173981,6685],{"class":112},[82,173983,13459],{"class":92},[82,173985,3288],{"class":112},[82,173987,153629],{"class":92},[19,173989,173990],{},"在另一个文件中导入：",[73,173992,173994],{"className":75,"code":173993,"language":77,"meta":78,"style":78},"import my_math\n\nprint(my_math.add(1, 2))\n",[32,173995,173996,174003,174007],{"__ignoreMap":78},[82,173997,173998,174000],{"class":84,"line":85},[82,173999,1123],{"class":112},[82,174001,174002],{"class":92}," my_math\n",[82,174004,174005],{"class":84,"line":157},[82,174006,486],{"emptyLinePlaceholder":485},[82,174008,174009,174011,174014,174016,174018,174020],{"class":84,"line":404},[82,174010,407],{"class":88},[82,174012,174013],{"class":92},"(my_math.add(",[82,174015,2283],{"class":88},[82,174017,100],{"class":92},[82,174019,1425],{"class":88},[82,174021,33074],{"class":92},[14,174023,174025],{"id":174024},"_911-import导入","9.11 import导入",[65,174027,174029],{"id":174028},"_9111-导入模块","9.11.1 导入模块",[73,174031,174033],{"className":75,"code":174032,"language":77,"meta":78,"style":78},"import random\n\nprint(random.randint(1, 10))\n",[32,174034,174035,174041,174045],{"__ignoreMap":78},[82,174036,174037,174039],{"class":84,"line":85},[82,174038,1123],{"class":112},[82,174040,47893],{"class":92},[82,174042,174043],{"class":84,"line":157},[82,174044,486],{"emptyLinePlaceholder":485},[82,174046,174047,174049,174052,174054,174056,174058],{"class":84,"line":404},[82,174048,407],{"class":88},[82,174050,174051],{"class":92},"(random.randint(",[82,174053,2283],{"class":88},[82,174055,100],{"class":92},[82,174057,440],{"class":88},[82,174059,33074],{"class":92},[65,174061,174063],{"id":174062},"_9112-导入指定内容","9.11.2 导入指定内容",[73,174065,174067],{"className":75,"code":174066,"language":77,"meta":78,"style":78},"from random import randint\n\nprint(randint(1, 10))\n",[32,174068,174069,174080,174084],{"__ignoreMap":78},[82,174070,174071,174073,174075,174077],{"class":84,"line":85},[82,174072,1117],{"class":112},[82,174074,60354],{"class":92},[82,174076,1123],{"class":112},[82,174078,174079],{"class":92}," randint\n",[82,174081,174082],{"class":84,"line":157},[82,174083,486],{"emptyLinePlaceholder":485},[82,174085,174086,174088,174091,174093,174095,174097],{"class":84,"line":404},[82,174087,407],{"class":88},[82,174089,174090],{"class":92},"(randint(",[82,174092,2283],{"class":88},[82,174094,100],{"class":92},[82,174096,440],{"class":88},[82,174098,33074],{"class":92},[65,174100,174102],{"id":174101},"_9113-起别名","9.11.3 起别名",[73,174104,174106],{"className":75,"code":174105,"language":77,"meta":78,"style":78},"import random as rd\n\nprint(rd.randint(1, 10))\n",[32,174107,174108,174119,174123],{"__ignoreMap":78},[82,174109,174110,174112,174114,174116],{"class":84,"line":85},[82,174111,1123],{"class":112},[82,174113,60354],{"class":92},[82,174115,728],{"class":112},[82,174117,174118],{"class":92}," rd\n",[82,174120,174121],{"class":84,"line":157},[82,174122,486],{"emptyLinePlaceholder":485},[82,174124,174125,174127,174130,174132,174134,174136],{"class":84,"line":404},[82,174126,407],{"class":88},[82,174128,174129],{"class":92},"(rd.randint(",[82,174131,2283],{"class":88},[82,174133,100],{"class":92},[82,174135,440],{"class":88},[82,174137,33074],{"class":92},[73,174139,174141],{"className":75,"code":174140,"language":77,"meta":78,"style":78},"from random import randint as rint\n\nprint(rint(1, 10))\n",[32,174142,174143,174159,174163],{"__ignoreMap":78},[82,174144,174145,174147,174149,174151,174154,174156],{"class":84,"line":85},[82,174146,1117],{"class":112},[82,174148,60354],{"class":92},[82,174150,1123],{"class":112},[82,174152,174153],{"class":92}," randint ",[82,174155,728],{"class":112},[82,174157,174158],{"class":92}," rint\n",[82,174160,174161],{"class":84,"line":157},[82,174162,486],{"emptyLinePlaceholder":485},[82,174164,174165,174167,174170,174172,174174,174176],{"class":84,"line":404},[82,174166,407],{"class":88},[82,174168,174169],{"class":92},"(rint(",[82,174171,2283],{"class":88},[82,174173,100],{"class":92},[82,174175,440],{"class":88},[82,174177,33074],{"class":92},[65,174179,174181],{"id":174180},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[73,174183,174185],{"className":75,"code":174184,"language":77,"meta":78,"style":78},"from random import *\n",[32,174186,174187],{"__ignoreMap":78},[82,174188,174189,174191,174193,174195],{"class":84,"line":85},[82,174190,1117],{"class":112},[82,174192,60354],{"class":92},[82,174194,1123],{"class":112},[82,174196,174197],{"class":112}," *\n",[19,174199,174200],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174202,174204],{"id":174203},"_912-常用内置模块","9.12 常用内置模块",[65,174206,174208],{"id":174207},"_9121-random","9.12.1 random",[73,174210,174212],{"className":75,"code":174211,"language":77,"meta":78,"style":78},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[32,174213,174214,174220,174224,174238,174257],{"__ignoreMap":78},[82,174215,174216,174218],{"class":84,"line":85},[82,174217,1123],{"class":112},[82,174219,47893],{"class":92},[82,174221,174222],{"class":84,"line":157},[82,174223,486],{"emptyLinePlaceholder":485},[82,174225,174226,174228,174230,174232,174234,174236],{"class":84,"line":404},[82,174227,407],{"class":88},[82,174229,174051],{"class":92},[82,174231,2283],{"class":88},[82,174233,100],{"class":92},[82,174235,440],{"class":88},[82,174237,33074],{"class":92},[82,174239,174240,174242,174245,174247,174249,174251,174253,174255],{"class":84,"line":413},[82,174241,407],{"class":88},[82,174243,174244],{"class":92},"(random.choice([",[82,174246,1360],{"class":96},[82,174248,100],{"class":92},[82,174250,1508],{"class":96},[82,174252,100],{"class":92},[82,174254,162236],{"class":96},[82,174256,35712],{"class":92},[82,174258,174259,174261,174264,174266,174268,174270,174272,174274,174276,174278,174280,174282,174284,174286],{"class":84,"line":508},[82,174260,407],{"class":88},[82,174262,174263],{"class":92},"(random.sample([",[82,174265,2283],{"class":88},[82,174267,100],{"class":92},[82,174269,1425],{"class":88},[82,174271,100],{"class":92},[82,174273,2841],{"class":88},[82,174275,100],{"class":92},[82,174277,3051],{"class":88},[82,174279,100],{"class":92},[82,174281,3077],{"class":88},[82,174283,2286],{"class":92},[82,174285,1425],{"class":88},[82,174287,33074],{"class":92},[65,174289,174291],{"id":174290},"_9122-time","9.12.2 time",[73,174293,174295],{"className":75,"code":174294,"language":77,"meta":78,"style":78},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[32,174296,174297,174303,174307,174314,174322],{"__ignoreMap":78},[82,174298,174299,174301],{"class":84,"line":85},[82,174300,1123],{"class":112},[82,174302,34401],{"class":92},[82,174304,174305],{"class":84,"line":157},[82,174306,486],{"emptyLinePlaceholder":485},[82,174308,174309,174311],{"class":84,"line":404},[82,174310,407],{"class":88},[82,174312,174313],{"class":92},"(time.time())\n",[82,174315,174316,174318,174320],{"class":84,"line":413},[82,174317,97622],{"class":92},[82,174319,2283],{"class":88},[82,174321,119],{"class":92},[82,174323,174324,174326,174328,174331],{"class":84,"line":508},[82,174325,407],{"class":88},[82,174327,93],{"class":92},[82,174329,174330],{"class":96},"\"1秒后执行\"",[82,174332,119],{"class":92},[65,174334,174336],{"id":174335},"_9123-datetime","9.12.3 datetime",[73,174338,174340],{"className":75,"code":174339,"language":77,"meta":78,"style":78},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[32,174341,174342,174354,174358,174368,174375],{"__ignoreMap":78},[82,174343,174344,174346,174349,174351],{"class":84,"line":85},[82,174345,1117],{"class":112},[82,174347,174348],{"class":92}," datetime ",[82,174350,1123],{"class":112},[82,174352,174353],{"class":92}," datetime\n",[82,174355,174356],{"class":84,"line":157},[82,174357,486],{"emptyLinePlaceholder":485},[82,174359,174360,174363,174365],{"class":84,"line":404},[82,174361,174362],{"class":92},"now ",[82,174364,113],{"class":112},[82,174366,174367],{"class":92}," datetime.now()\n",[82,174369,174370,174372],{"class":84,"line":413},[82,174371,407],{"class":88},[82,174373,174374],{"class":92},"(now)\n",[82,174376,174377,174379,174382,174385,174387,174390],{"class":84,"line":508},[82,174378,407],{"class":88},[82,174380,174381],{"class":92},"(now.strftime(",[82,174383,174384],{"class":96},"\"%Y-%m-",[82,174386,159197],{"class":88},[82,174388,174389],{"class":96}," %H:%M:%S\"",[82,174391,33074],{"class":92},[65,174393,174395],{"id":174394},"_9124-os","9.12.4 os",[73,174397,174399],{"className":75,"code":174398,"language":77,"meta":78,"style":78},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[32,174400,174401,174407,174411,174418],{"__ignoreMap":78},[82,174402,174403,174405],{"class":84,"line":85},[82,174404,1123],{"class":112},[82,174406,47870],{"class":92},[82,174408,174409],{"class":84,"line":157},[82,174410,486],{"emptyLinePlaceholder":485},[82,174412,174413,174415],{"class":84,"line":404},[82,174414,407],{"class":88},[82,174416,174417],{"class":92},"(os.getcwd())\n",[82,174419,174420,174422,174425,174428],{"class":84,"line":413},[82,174421,407],{"class":88},[82,174423,174424],{"class":92},"(os.listdir(",[82,174426,174427],{"class":96},"\".\"",[82,174429,33074],{"class":92},[65,174431,174433],{"id":174432},"_9125-sys","9.12.5 sys",[73,174435,174437],{"className":75,"code":174436,"language":77,"meta":78,"style":78},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[32,174438,174439,174446,174450,174457],{"__ignoreMap":78},[82,174440,174441,174443],{"class":84,"line":85},[82,174442,1123],{"class":112},[82,174444,174445],{"class":92}," sys\n",[82,174447,174448],{"class":84,"line":157},[82,174449,486],{"emptyLinePlaceholder":485},[82,174451,174452,174454],{"class":84,"line":404},[82,174453,407],{"class":88},[82,174455,174456],{"class":92},"(sys.version)\n",[82,174458,174459,174461],{"class":84,"line":413},[82,174460,407],{"class":88},[82,174462,174463],{"class":92},"(sys.path)\n",[14,174465,174467,174468,174470,174471,216],{"id":174466},"_913-if-name-main","9.13 if ",[2913,174469,82364],{}," == \"",[2913,174472,104609],{},[19,174474,174475,174476,174479],{},"模块被直接运行和被导入时，",[32,174477,174478],{},"__name__"," 的值不同。",[19,174481,174482,174483,27203],{},"创建 ",[32,174484,174485],{},"my_module.py",[73,174487,174489],{"className":75,"code":174488,"language":77,"meta":78,"style":78},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[32,174490,174491,174499,174509,174513,174517,174529],{"__ignoreMap":78},[82,174492,174493,174495,174497],{"class":84,"line":85},[82,174494,2381],{"class":112},[82,174496,7802],{"class":2384},[82,174498,153618],{"class":92},[82,174500,174501,174503,174505,174507],{"class":84,"line":157},[82,174502,6685],{"class":112},[82,174504,13459],{"class":92},[82,174506,2249],{"class":112},[82,174508,153629],{"class":92},[82,174510,174511],{"class":84,"line":404},[82,174512,486],{"emptyLinePlaceholder":485},[82,174514,174515],{"class":84,"line":413},[82,174516,486],{"emptyLinePlaceholder":485},[82,174518,174519,174521,174523,174525,174527],{"class":84,"line":508},[82,174520,1237],{"class":112},[82,174522,33796],{"class":88},[82,174524,104110],{"class":112},[82,174526,104113],{"class":96},[82,174528,669],{"class":92},[82,174530,174531,174533,174535,174537,174539,174541],{"class":84,"line":513},[82,174532,611],{"class":88},[82,174534,169095],{"class":92},[82,174536,2283],{"class":88},[82,174538,100],{"class":92},[82,174540,1425],{"class":88},[82,174542,33074],{"class":92},[19,174544,174545],{},"作用：",[26,174547,174548,174551],{},[29,174549,174550],{},"直接运行该文件时，执行测试代码。",[29,174552,174553],{},"被其他文件导入时，不执行测试代码。",[19,174555,174556],{},"这是写模块时很常用的习惯。",[14,174558,174560],{"id":174559},"_914-包","9.14 包",[19,174562,174563,174564,174567],{},"包是包含 ",[32,174565,174566],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174569,174570],{},"目录结构：",[73,174572,174575],{"className":174573,"code":174574,"language":7780,"meta":78},[7778],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[32,174576,174574],{"__ignoreMap":78},[19,174578,174579],{},"导入：",[73,174581,174583],{"className":75,"code":174582,"language":77,"meta":78,"style":78},"from utils.file_utils import read_file\n",[32,174584,174585],{"__ignoreMap":78},[82,174586,174587,174589,174592,174594],{"class":84,"line":85},[82,174588,1117],{"class":112},[82,174590,174591],{"class":92}," utils.file_utils ",[82,174593,1123],{"class":112},[82,174595,174596],{"class":92}," read_file\n",[19,174598,174599,174601],{},[32,174600,174566],{}," 可以为空，也可以写包初始化逻辑。",[14,174603,174605],{"id":174604},"_915-第三方包","9.15 第三方包",[19,174607,174608,174609,174611],{},"第三方包通过 ",[32,174610,26415],{}," 安装。",[73,174613,174615],{"className":26406,"code":174614,"language":26408,"meta":78,"style":78},"pip install requests\n",[32,174616,174617],{"__ignoreMap":78},[82,174618,174619,174621,174623],{"class":84,"line":85},[82,174620,26415],{"class":2384},[82,174622,26418],{"class":96},[82,174624,148641],{"class":96},[19,174626,174627],{},"使用：",[73,174629,174631],{"className":75,"code":174630,"language":77,"meta":78,"style":78},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[32,174632,174633,174639,174643,174658],{"__ignoreMap":78},[82,174634,174635,174637],{"class":84,"line":85},[82,174636,1123],{"class":112},[82,174638,148641],{"class":92},[82,174640,174641],{"class":84,"line":157},[82,174642,486],{"emptyLinePlaceholder":485},[82,174644,174645,174648,174650,174653,174656],{"class":84,"line":404},[82,174646,174647],{"class":92},"response ",[82,174649,113],{"class":112},[82,174651,174652],{"class":92}," requests.get(",[82,174654,174655],{"class":96},"\"https:\u002F\u002Fwww.example.com\"",[82,174657,119],{"class":92},[82,174659,174660,174662],{"class":84,"line":413},[82,174661,407],{"class":88},[82,174663,174664],{"class":92},"(response.status_code)\n",[19,174666,174667],{},"查看已安装包：",[73,174669,174671],{"className":26406,"code":174670,"language":26408,"meta":78,"style":78},"pip list\n",[32,174672,174673],{"__ignoreMap":78},[82,174674,174675,174677],{"class":84,"line":85},[82,174676,26415],{"class":2384},[82,174678,121500],{"class":96},[19,174680,174681],{},"导出项目依赖：",[73,174683,174684],{"className":26406,"code":148836,"language":26408,"meta":78,"style":78},[32,174685,174686],{"__ignoreMap":78},[82,174687,174688,174690,174692,174694],{"class":84,"line":85},[82,174689,26415],{"class":2384},[82,174691,148845],{"class":96},[82,174693,28804],{"class":112},[82,174695,148850],{"class":96},[19,174697,174698],{},"安装项目依赖：",[73,174700,174701],{"className":26406,"code":148856,"language":26408,"meta":78,"style":78},[32,174702,174703],{"__ignoreMap":78},[82,174704,174705,174707,174709,174711],{"class":84,"line":85},[82,174706,26415],{"class":2384},[82,174708,26418],{"class":96},[82,174710,122184],{"class":88},[82,174712,148850],{"class":96},[14,174714,174716],{"id":174715},"_916-模块搜索路径","9.16 模块搜索路径",[19,174718,174719,174720,174723],{},"Python 导入模块时会在 ",[32,174721,174722],{},"sys.path"," 中查找。",[73,174725,174727],{"className":75,"code":174726,"language":77,"meta":78,"style":78},"import sys\n\nfor path in sys.path:\n    print(path)\n",[32,174728,174729,174735,174739,174751],{"__ignoreMap":78},[82,174730,174731,174733],{"class":84,"line":85},[82,174732,1123],{"class":112},[82,174734,174445],{"class":92},[82,174736,174737],{"class":84,"line":157},[82,174738,486],{"emptyLinePlaceholder":485},[82,174740,174741,174743,174746,174748],{"class":84,"line":404},[82,174742,597],{"class":112},[82,174744,174745],{"class":92}," path ",[82,174747,603],{"class":112},[82,174749,174750],{"class":92}," sys.path:\n",[82,174752,174753,174755],{"class":84,"line":413},[82,174754,611],{"class":88},[82,174756,1157],{"class":92},[19,174758,174759],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174761,160129],{},[73,174763,174766],{"className":174764,"code":174765,"language":7780,"meta":78},[7778],"random.py\njson.py\ntime.py\n",[32,174767,174765],{"__ignoreMap":78},[19,174769,174770],{},"这些文件名可能导致导入异常。",[14,174772,174774],{"id":174773},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174776,174570],{},[73,174778,174781],{"className":174779,"code":174780,"language":7780,"meta":78},[7778],"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",[32,174782,174780],{"__ignoreMap":78},[19,174784,174785,27203],{},[32,174786,174787],{},"utils\u002Ffile_utils.py",[73,174789,174791],{"className":75,"code":174790,"language":77,"meta":78,"style":78},"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",[32,174792,174793,174799,174809,174813,174817,174827,174837,174845,174851,174855,174882,174892,174896,174900,174910,174936],{"__ignoreMap":78},[82,174794,174795,174797],{"class":84,"line":85},[82,174796,1123],{"class":112},[82,174798,1335],{"class":92},[82,174800,174801,174803,174805,174807],{"class":84,"line":157},[82,174802,1117],{"class":112},[82,174804,1120],{"class":92},[82,174806,1123],{"class":112},[82,174808,1126],{"class":92},[82,174810,174811],{"class":84,"line":404},[82,174812,486],{"emptyLinePlaceholder":485},[82,174814,174815],{"class":84,"line":413},[82,174816,486],{"emptyLinePlaceholder":485},[82,174818,174819,174821,174824],{"class":84,"line":508},[82,174820,2381],{"class":112},[82,174822,174823],{"class":2384}," read_json",[82,174825,174826],{"class":92},"(path):\n",[82,174828,174829,174832,174834],{"class":84,"line":513},[82,174830,174831],{"class":92},"    path ",[82,174833,113],{"class":112},[82,174835,174836],{"class":92}," Path(path)\n",[82,174838,174839,174841,174843],{"class":84,"line":1388},[82,174840,2219],{"class":112},[82,174842,2222],{"class":112},[82,174844,1240],{"class":92},[82,174846,174847,174849],{"class":84,"line":1394},[82,174848,2405],{"class":112},[82,174850,2408],{"class":92},[82,174852,174853],{"class":84,"line":1399},[82,174854,486],{"emptyLinePlaceholder":485},[82,174856,174857,174859,174861,174864,174866,174868,174870,174872,174874,174876,174878,174880],{"class":84,"line":1430},[82,174858,2417],{"class":112},[82,174860,262],{"class":88},[82,174862,174863],{"class":92},"(path, ",[82,174865,103],{"class":96},[82,174867,100],{"class":92},[82,174869,109],{"class":108},[82,174871,113],{"class":112},[82,174873,116],{"class":96},[82,174875,725],{"class":92},[82,174877,728],{"class":112},[82,174879,398],{"class":108},[82,174881,669],{"class":92},[82,174883,174884,174886,174888,174890],{"class":84,"line":1818},[82,174885,2405],{"class":112},[82,174887,1650],{"class":92},[82,174889,256],{"class":108},[82,174891,119],{"class":92},[82,174893,174894],{"class":84,"line":2082},[82,174895,486],{"emptyLinePlaceholder":485},[82,174897,174898],{"class":84,"line":2233},[82,174899,486],{"emptyLinePlaceholder":485},[82,174901,174902,174904,174907],{"class":84,"line":2255},[82,174903,2381],{"class":112},[82,174905,174906],{"class":2384}," write_json",[82,174908,174909],{"class":92},"(path, data):\n",[82,174911,174912,174914,174916,174918,174920,174922,174924,174926,174928,174930,174932,174934],{"class":84,"line":2260},[82,174913,2417],{"class":112},[82,174915,262],{"class":88},[82,174917,174863],{"class":92},[82,174919,781],{"class":96},[82,174921,100],{"class":92},[82,174923,109],{"class":108},[82,174925,113],{"class":112},[82,174927,116],{"class":96},[82,174929,725],{"class":92},[82,174931,728],{"class":112},[82,174933,398],{"class":108},[82,174935,669],{"class":92},[82,174937,174938,174941,174943,174945,174947,174949,174951,174953,174955,174957,174959],{"class":84,"line":2298},[82,174939,174940],{"class":92},"        json.dump(data, ",[82,174942,256],{"class":108},[82,174944,100],{"class":92},[82,174946,1410],{"class":108},[82,174948,113],{"class":112},[82,174950,1415],{"class":88},[82,174952,100],{"class":92},[82,174954,1420],{"class":108},[82,174956,113],{"class":112},[82,174958,1425],{"class":88},[82,174960,119],{"class":92},[19,174962,174963,27203],{},[32,174964,157116],{},[73,174966,174968],{"className":75,"code":174967,"language":77,"meta":78,"style":78},"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",[32,174969,174970,174981,174985,174998,175018],{"__ignoreMap":78},[82,174971,174972,174974,174976,174978],{"class":84,"line":85},[82,174973,1117],{"class":112},[82,174975,174591],{"class":92},[82,174977,1123],{"class":112},[82,174979,174980],{"class":92}," read_json, write_json\n",[82,174982,174983],{"class":84,"line":157},[82,174984,486],{"emptyLinePlaceholder":485},[82,174986,174987,174989,174991,174994,174996],{"class":84,"line":404},[82,174988,1458],{"class":92},[82,174990,113],{"class":112},[82,174992,174993],{"class":92}," read_json(",[82,174995,1547],{"class":96},[82,174997,119],{"class":92},[82,174999,175000,175002,175004,175006,175008,175010,175012,175014,175016],{"class":84,"line":413},[82,175001,2551],{"class":92},[82,175003,1471],{"class":96},[82,175005,1357],{"class":92},[82,175007,1360],{"class":96},[82,175009,100],{"class":92},[82,175011,1489],{"class":96},[82,175013,1357],{"class":92},[82,175015,1494],{"class":88},[82,175017,2576],{"class":92},[82,175019,175020,175023,175025],{"class":84,"line":508},[82,175021,175022],{"class":92},"write_json(",[82,175024,1547],{"class":96},[82,175026,175027],{"class":92},", students)\n",[14,175029,175031],{"id":175030},"_918-易错点","9.18 易错点",[26,175033,175034,175037,175042,175047,175050,175053],{},[29,175035,175036],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,175038,175039,175040,2611],{},"能指定异常类型就不要裸写 ",[32,175041,173144],{},[29,175043,175044,175046],{},[32,175045,173519],{}," 无论是否出错都会执行。",[29,175048,175049],{},"模块文件名不要和标准库重名。",[29,175051,175052],{},"导入自己写的模块时，要注意运行目录。",[29,175054,175055],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175057,175059],{"id":175058},"_919-本章练习","9.19 本章练习",[26,175061,175062,175065,175068,175074,175081],{},[29,175063,175064],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,175066,175067],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,175069,174482,175070,175073],{},[32,175071,175072],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,175075,175076,175077,175080],{},"创建一个 ",[32,175078,175079],{},"utils"," 包，把 JSON 读写函数放进去。",[29,175082,175083],{},"写一个程序，捕获除零异常和输入格式异常。",[2671,175085,175086],{},"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":78,"searchDepth":157,"depth":157,"links":175088},[175089,175090,175091,175092,175093,175094,175095,175096,175097,175098,175099,175105,175112,175114,175115,175116,175117,175118,175119],{"id":172941,"depth":157,"text":172942},{"id":173069,"depth":157,"text":173070},{"id":173118,"depth":157,"text":173119},{"id":173267,"depth":157,"text":173268},{"id":173439,"depth":157,"text":173440},{"id":173508,"depth":157,"text":173509},{"id":173619,"depth":157,"text":173620},{"id":173745,"depth":157,"text":173746},{"id":173870,"depth":157,"text":173871},{"id":173925,"depth":157,"text":173926},{"id":174024,"depth":157,"text":174025,"children":175100},[175101,175102,175103,175104],{"id":174028,"depth":404,"text":174029},{"id":174062,"depth":404,"text":174063},{"id":174101,"depth":404,"text":174102},{"id":174180,"depth":404,"text":174181},{"id":174203,"depth":157,"text":174204,"children":175106},[175107,175108,175109,175110,175111],{"id":174207,"depth":404,"text":174208},{"id":174290,"depth":404,"text":174291},{"id":174335,"depth":404,"text":174336},{"id":174394,"depth":404,"text":174395},{"id":174432,"depth":404,"text":174433},{"id":174466,"depth":157,"text":175113},"9.13 if name == \"main\"",{"id":174559,"depth":157,"text":174560},{"id":174604,"depth":157,"text":174605},{"id":174715,"depth":157,"text":174716},{"id":174773,"depth":157,"text":174774},{"id":175030,"depth":157,"text":175031},{"id":175058,"depth":157,"text":175059},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172933,"description":2699},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175126,"title":175127,"body":175128,"description":175291,"extension":2700,"meta":175292,"navigation":485,"path":175293,"seo":175294,"stem":175295,"__hash__":175296},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175129,"toc":175286},[175130,175133,175136,175139,175150,175152,175226,175229,175232,175235,175238,175241,175244,175247,175250,175253,175256],[10,175131,175127],{"id":175132},"python教程",[19,175134,175135],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175137,175138],{},"建议学习环境：",[26,175140,175141,175144,175147],{},[29,175142,175143],{},"Python 版本：Python 3.10 及以上。",[29,175145,175146],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,175148,175149],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175151,119623],{"id":119623},[26,175153,175154,175160,175166,175172,175178,175184,175190,175196,175202,175208,175214,175220],{},[29,175155,175156],{},[323,175157,175159],{"href":175158},".\u002Fch1-Python","Python环境与第一个程序",[29,175161,175162],{},[323,175163,175165],{"href":175164},".\u002Fch2","基础语法、变量与字符串",[29,175167,175168],{},[323,175169,175171],{"href":175170},".\u002Fch3","判断语句",[29,175173,175174],{},[323,175175,175177],{"href":175176},".\u002Fch4","循环语句",[29,175179,175180],{},[323,175181,175183],{"href":175182},".\u002Fch5","函数基础",[29,175185,175186],{},[323,175187,175189],{"href":175188},".\u002Fch6","数据容器",[29,175191,175192],{},[323,175193,175195],{"href":175194},".\u002Fch7","函数进阶",[29,175197,175198],{},[323,175199,175201],{"href":175200},".\u002Fch8","文件操作",[29,175203,175204],{},[323,175205,175207],{"href":175206},".\u002Fch9","异常、模块与包",[29,175209,175210],{},[323,175211,175213],{"href":175212},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,175215,175216],{},[323,175217,175219],{"href":175218},".\u002Fch11","面向对象基础",[29,175221,175222],{},[323,175223,175225],{"href":175224},".\u002Fch12","综合案例与复习路线",[14,175227,175228],{"id":175228},"学习路线",[19,175230,175231],{},"第一阶段：能运行程序。",[19,175233,175234],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175236,175237],{},"第二阶段：能组织数据。",[19,175239,175240],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175242,175243],{},"第三阶段：能封装逻辑。",[19,175245,175246],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175248,175249],{},"第四阶段：能做小项目。",[19,175251,175252],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175254,175255],{"id":175255},"参考资料",[26,175257,175258,175265,175272,175279],{},[29,175259,175260,175261],{},"黑马程序员 Python 入门教程推荐：",[323,175262,175263],{"href":175263,"rel":175264},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26449],[29,175266,175267,175268],{},"Python 官方中文教程：",[323,175269,175270],{"href":175270,"rel":175271},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26449],[29,175273,175274,175275],{},"Python 标准库文档：",[323,175276,175277],{"href":175277,"rel":175278},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26449],[29,175280,175281,175282],{},"pyecharts 文档：",[323,175283,175284],{"href":175284,"rel":175285},"https:\u002F\u002Fpyecharts.org\u002F",[26449],{"title":78,"searchDepth":157,"depth":157,"links":175287},[175288,175289,175290],{"id":119623,"depth":157,"text":119623},{"id":175228,"depth":157,"text":175228},{"id":175255,"depth":157,"text":175255},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25962},"\u002Fwiki\u002F2024-10-10-python",{"title":175127,"description":175291},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331479052]