[{"data":1,"prerenderedAt":175169},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch2-ji-chu-yu-fa-bian-liang-yu-zi-fu-chuan":3,"wiki-doc-nav":2637},{"id":4,"title":5,"body":6,"description":2630,"extension":2631,"meta":2632,"navigation":545,"path":2633,"seo":2634,"stem":2635,"__hash__":2636},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":8,"toc":2605},"minimark",[9,13,18,22,25,62,65,91,94,97,125,128,150,154,157,202,205,344,348,351,395,398,422,425,429,432,448,482,485,525,528,554,557,591,594,598,605,682,685,693,715,758,762,765,812,815,854,857,893,896,934,937,969,972,992,996,1001,1119,1121,1200,1204,1257,1260,1286,1297,1301,1304,1372,1381,1409,1413,1455,1526,1530,1533,1572,1575,1621,1624,1687,1691,1718,1721,1751,1754,1758,1762,1828,1831,1869,1872,1905,1909,2012,2016,2019,2095,2098,2148,2152,2158,2199,2202,2251,2254,2304,2308,2311,2325,2328,2515,2519,2546,2567,2574,2578,2595,2601],[10,11,5],"h1",{"id":12},"_2-基础语法变量与字符串",[14,15,17],"h2",{"id":16},"_21-注释","2.1 注释",[19,20,21],"p",{},"注释是给人看的说明文字，不会被 Python 执行。",[19,23,24],{},"单行注释：",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","# 这是单行注释\nprint(\"hello\")\n","python","",[33,34,35,44],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sJ8bj","# 这是单行注释\n",[36,45,47,51,55,59],{"class":38,"line":46},2,[36,48,50],{"class":49},"sj4cs","print",[36,52,54],{"class":53},"sVt8B","(",[36,56,58],{"class":57},"sZZnC","\"hello\"",[36,60,61],{"class":53},")\n",[19,63,64],{},"多行说明常用三引号：",[26,66,68],{"className":28,"code":67,"language":30,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,69,70,75,80,86],{"__ignoreMap":31},[36,71,72],{"class":38,"line":39},[36,73,74],{"class":57},"\"\"\"\n",[36,76,77],{"class":38,"line":46},[36,78,79],{"class":57},"这是多行说明。\n",[36,81,83],{"class":38,"line":82},3,[36,84,85],{"class":57},"常用于文件顶部说明、函数说明等。\n",[36,87,89],{"class":38,"line":88},4,[36,90,74],{"class":57},[19,92,93],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,95,96],{},"不好：",[26,98,100],{"className":28,"code":99,"language":30,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,101,102,107],{"__ignoreMap":31},[36,103,104],{"class":38,"line":39},[36,105,106],{"class":42},"# age 加 1\n",[36,108,109,112,116,119,122],{"class":38,"line":46},[36,110,111],{"class":53},"age ",[36,113,115],{"class":114},"szBVR","=",[36,117,118],{"class":53}," age ",[36,120,121],{"class":114},"+",[36,123,124],{"class":49}," 1\n",[19,126,127],{},"较好：",[26,129,131],{"className":28,"code":130,"language":30,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,132,133,138],{"__ignoreMap":31},[36,134,135],{"class":38,"line":39},[36,136,137],{"class":42},"# 用户过完生日后，年龄增加一岁\n",[36,139,140,142,144,146,148],{"class":38,"line":46},[36,141,111],{"class":53},[36,143,115],{"class":114},[36,145,118],{"class":53},[36,147,121],{"class":114},[36,149,124],{"class":49},[14,151,153],{"id":152},"_22-字面量","2.2 字面量",[19,155,156],{},"字面量就是代码中直接写出来的数据。",[26,158,160],{"className":28,"code":159,"language":30,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,161,162,170,178,185,193],{"__ignoreMap":31},[36,163,164,167],{"class":38,"line":39},[36,165,166],{"class":49},"100",[36,168,169],{"class":42},"          # 整数\n",[36,171,172,175],{"class":38,"line":46},[36,173,174],{"class":49},"3.14",[36,176,177],{"class":42},"         # 小数\n",[36,179,180,182],{"class":38,"line":82},[36,181,58],{"class":57},[36,183,184],{"class":42},"      # 字符串\n",[36,186,187,190],{"class":38,"line":88},[36,188,189],{"class":49},"True",[36,191,192],{"class":42},"         # 布尔值\n",[36,194,196,199],{"class":38,"line":195},5,[36,197,198],{"class":49},"None",[36,200,201],{"class":42},"         # 空值\n",[19,203,204],{},"常见字面量类型：",[206,207,208,224],"table",{},[209,210,211],"thead",{},[212,213,214,218,221],"tr",{},[215,216,217],"th",{},"类型",[215,219,220],{},"示例",[215,222,223],{},"说明",[225,226,227,240,252,264,280,292,305,318,331],"tbody",{},[212,228,229,233,237],{},[230,231,232],"td",{},"int",[230,234,235],{},[33,236,166],{},[230,238,239],{},"整数",[212,241,242,245,249],{},[230,243,244],{},"float",[230,246,247],{},[33,248,174],{},[230,250,251],{},"浮点数",[212,253,254,257,261],{},[230,255,256],{},"str",[230,258,259],{},[33,260,58],{},[230,262,263],{},"字符串",[212,265,266,269,277],{},[230,267,268],{},"bool",[230,270,271,273,274],{},[33,272,189],{},"、",[33,275,276],{},"False",[230,278,279],{},"布尔值",[212,281,282,285,289],{},[230,283,284],{},"NoneType",[230,286,287],{},[33,288,198],{},[230,290,291],{},"空值",[212,293,294,297,302],{},[230,295,296],{},"list",[230,298,299],{},[33,300,301],{},"[1, 2, 3]",[230,303,304],{},"列表",[212,306,307,310,315],{},[230,308,309],{},"tuple",[230,311,312],{},[33,313,314],{},"(1, 2, 3)",[230,316,317],{},"元组",[212,319,320,323,328],{},[230,321,322],{},"dict",[230,324,325],{},[33,326,327],{},"{\"name\": \"张三\"}",[230,329,330],{},"字典",[212,332,333,336,341],{},[230,334,335],{},"set",[230,337,338],{},[33,339,340],{},"{1, 2, 3}",[230,342,343],{},"集合",[14,345,347],{"id":346},"_23-变量","2.3 变量",[19,349,350],{},"变量是保存数据的名字。",[26,352,354],{"className":28,"code":353,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,355,356,366,375,385],{"__ignoreMap":31},[36,357,358,361,363],{"class":38,"line":39},[36,359,360],{"class":53},"name ",[36,362,115],{"class":114},[36,364,365],{"class":57}," \"小明\"\n",[36,367,368,370,372],{"class":38,"line":46},[36,369,111],{"class":53},[36,371,115],{"class":114},[36,373,374],{"class":49}," 18\n",[36,376,377,380,382],{"class":38,"line":82},[36,378,379],{"class":53},"height ",[36,381,115],{"class":114},[36,383,384],{"class":49}," 1.75\n",[36,386,387,390,392],{"class":38,"line":88},[36,388,389],{"class":53},"is_student ",[36,391,115],{"class":114},[36,393,394],{"class":49}," True\n",[19,396,397],{},"Python 的变量不需要提前声明类型：",[26,399,401],{"className":28,"code":400,"language":30,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,402,403,413],{"__ignoreMap":31},[36,404,405,408,410],{"class":38,"line":39},[36,406,407],{"class":53},"score ",[36,409,115],{"class":114},[36,411,412],{"class":49}," 100\n",[36,414,415,417,419],{"class":38,"line":46},[36,416,407],{"class":53},[36,418,115],{"class":114},[36,420,421],{"class":57}," \"满分\"\n",[19,423,424],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,426,428],{"id":427},"_24-变量命名规则","2.4 变量命名规则",[19,430,431],{},"硬性规则：",[433,434,435,439,442,445],"ol",{},[436,437,438],"li",{},"只能由字母、数字、下划线组成。",[436,440,441],{},"不能以数字开头。",[436,443,444],{},"不能使用 Python 关键字。",[436,446,447],{},"区分大小写。",[26,449,451],{"className":28,"code":450,"language":30,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,452,453,463,472],{"__ignoreMap":31},[36,454,455,458,460],{"class":38,"line":39},[36,456,457],{"class":53},"user_name ",[36,459,115],{"class":114},[36,461,462],{"class":57}," \"张三\"\n",[36,464,465,468,470],{"class":38,"line":46},[36,466,467],{"class":53},"age2 ",[36,469,115],{"class":114},[36,471,374],{"class":49},[36,473,474,477,479],{"class":38,"line":82},[36,475,476],{"class":53},"_token ",[36,478,115],{"class":114},[36,480,481],{"class":57}," \"abc\"\n",[19,483,484],{},"错误写法：",[26,486,488],{"className":28,"code":487,"language":30,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,489,490,501,515],{"__ignoreMap":31},[36,491,492,496,499],{"class":38,"line":39},[36,493,495],{"class":494},"s7hpK","2age",[36,497,498],{"class":114}," =",[36,500,374],{"class":49},[36,502,503,506,509,511,513],{"class":38,"line":46},[36,504,505],{"class":53},"user",[36,507,508],{"class":114},"-",[36,510,360],{"class":53},[36,512,115],{"class":114},[36,514,462],{"class":57},[36,516,517,520,522],{"class":38,"line":82},[36,518,519],{"class":114},"class",[36,521,498],{"class":114},[36,523,524],{"class":57}," \"一班\"\n",[19,526,527],{},"查看关键字：",[26,529,531],{"className":28,"code":530,"language":30,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,532,533,541,547],{"__ignoreMap":31},[36,534,535,538],{"class":38,"line":39},[36,536,537],{"class":114},"import",[36,539,540],{"class":53}," keyword\n",[36,542,543],{"class":38,"line":46},[36,544,546],{"emptyLinePlaceholder":545},true,"\n",[36,548,549,551],{"class":38,"line":82},[36,550,50],{"class":49},[36,552,553],{"class":53},"(keyword.kwlist)\n",[19,555,556],{},"推荐命名风格：",[26,558,560],{"className":28,"code":559,"language":30,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,561,562,571,581],{"__ignoreMap":31},[36,563,564,567,569],{"class":38,"line":39},[36,565,566],{"class":53},"student_name ",[36,568,115],{"class":114},[36,570,365],{"class":57},[36,572,573,576,578],{"class":38,"line":46},[36,574,575],{"class":53},"total_price ",[36,577,115],{"class":114},[36,579,580],{"class":49}," 99.8\n",[36,582,583,586,588],{"class":38,"line":82},[36,584,585],{"class":53},"is_finished ",[36,587,115],{"class":114},[36,589,590],{"class":49}," False\n",[19,592,593],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,595,597],{"id":596},"_25-数据类型","2.5 数据类型",[19,599,600,601,604],{},"使用 ",[33,602,603],{},"type()"," 查看数据类型：",[26,606,608],{"className":28,"code":607,"language":30,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,609,610,626,640,654,668],{"__ignoreMap":31},[36,611,612,614,616,619,621,623],{"class":38,"line":39},[36,613,50],{"class":49},[36,615,54],{"class":53},[36,617,618],{"class":49},"type",[36,620,54],{"class":53},[36,622,166],{"class":49},[36,624,625],{"class":53},"))\n",[36,627,628,630,632,634,636,638],{"class":38,"line":46},[36,629,50],{"class":49},[36,631,54],{"class":53},[36,633,618],{"class":49},[36,635,54],{"class":53},[36,637,174],{"class":49},[36,639,625],{"class":53},[36,641,642,644,646,648,650,652],{"class":38,"line":82},[36,643,50],{"class":49},[36,645,54],{"class":53},[36,647,618],{"class":49},[36,649,54],{"class":53},[36,651,58],{"class":57},[36,653,625],{"class":53},[36,655,656,658,660,662,664,666],{"class":38,"line":88},[36,657,50],{"class":49},[36,659,54],{"class":53},[36,661,618],{"class":49},[36,663,54],{"class":53},[36,665,189],{"class":49},[36,667,625],{"class":53},[36,669,670,672,674,676,678,680],{"class":38,"line":195},[36,671,50],{"class":49},[36,673,54],{"class":53},[36,675,618],{"class":49},[36,677,54],{"class":53},[36,679,198],{"class":49},[36,681,625],{"class":53},[19,683,684],{},"输出类似：",[26,686,691],{"className":687,"code":689,"language":690,"meta":31},[688],"language-text","\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n","text",[33,692,689],{"__ignoreMap":31},[19,694,695,696,698,699,701,702,704,705,708,709,704,711,714],{},"注意：",[33,697,268],{}," 是 ",[33,700,232],{}," 的子类，",[33,703,189],{}," 可以当作 ",[33,706,707],{},"1","，",[33,710,276],{},[33,712,713],{},"0","，但业务代码中不要滥用。",[26,716,718],{"className":28,"code":717,"language":30,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,719,720,740],{"__ignoreMap":31},[36,721,722,724,726,728,731,734,737],{"class":38,"line":39},[36,723,50],{"class":49},[36,725,54],{"class":53},[36,727,189],{"class":49},[36,729,730],{"class":114}," +",[36,732,733],{"class":49}," 1",[36,735,736],{"class":53},")   ",[36,738,739],{"class":42},"# 2\n",[36,741,742,744,746,748,750,752,755],{"class":38,"line":46},[36,743,50],{"class":49},[36,745,54],{"class":53},[36,747,276],{"class":49},[36,749,730],{"class":114},[36,751,733],{"class":49},[36,753,754],{"class":53},")  ",[36,756,757],{"class":42},"# 1\n",[14,759,761],{"id":760},"_26-类型转换","2.6 类型转换",[19,763,764],{},"常用转换函数：",[26,766,768],{"className":28,"code":767,"language":30,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,769,770,781,792,802],{"__ignoreMap":31},[36,771,772,774,776,779],{"class":38,"line":39},[36,773,232],{"class":49},[36,775,54],{"class":53},[36,777,778],{"class":57},"\"10\"",[36,780,61],{"class":53},[36,782,783,785,787,790],{"class":38,"line":46},[36,784,244],{"class":49},[36,786,54],{"class":53},[36,788,789],{"class":57},"\"3.14\"",[36,791,61],{"class":53},[36,793,794,796,798,800],{"class":38,"line":82},[36,795,256],{"class":49},[36,797,54],{"class":53},[36,799,166],{"class":49},[36,801,61],{"class":53},[36,803,804,806,808,810],{"class":38,"line":88},[36,805,268],{"class":49},[36,807,54],{"class":53},[36,809,707],{"class":49},[36,811,61],{"class":53},[19,813,814],{},"示例：",[26,816,818],{"className":28,"code":817,"language":30,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,819,820,829,841],{"__ignoreMap":31},[36,821,822,824,826],{"class":38,"line":39},[36,823,111],{"class":53},[36,825,115],{"class":114},[36,827,828],{"class":57}," \"18\"\n",[36,830,831,833,835,838],{"class":38,"line":46},[36,832,111],{"class":53},[36,834,115],{"class":114},[36,836,837],{"class":49}," int",[36,839,840],{"class":53},"(age)\n",[36,842,843,845,848,850,852],{"class":38,"line":82},[36,844,50],{"class":49},[36,846,847],{"class":53},"(age ",[36,849,121],{"class":114},[36,851,733],{"class":49},[36,853,61],{"class":53},[19,855,856],{},"输入得到的内容永远是字符串：",[26,858,860],{"className":28,"code":859,"language":30,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,861,862,879],{"__ignoreMap":31},[36,863,864,867,869,872,874,877],{"class":38,"line":39},[36,865,866],{"class":53},"num ",[36,868,115],{"class":114},[36,870,871],{"class":49}," input",[36,873,54],{"class":53},[36,875,876],{"class":57},"\"请输入数字:\"",[36,878,61],{"class":53},[36,880,881,883,885,887,890],{"class":38,"line":46},[36,882,50],{"class":49},[36,884,54],{"class":53},[36,886,618],{"class":49},[36,888,889],{"class":53},"(num))  ",[36,891,892],{"class":42},"# str\n",[19,894,895],{},"如果要做数学运算，必须转换：",[26,897,899],{"className":28,"code":898,"language":30,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,900,901,920],{"__ignoreMap":31},[36,902,903,905,907,909,911,914,916,918],{"class":38,"line":39},[36,904,866],{"class":53},[36,906,115],{"class":114},[36,908,837],{"class":49},[36,910,54],{"class":53},[36,912,913],{"class":49},"input",[36,915,54],{"class":53},[36,917,876],{"class":57},[36,919,625],{"class":53},[36,921,922,924,927,929,932],{"class":38,"line":46},[36,923,50],{"class":49},[36,925,926],{"class":53},"(num ",[36,928,121],{"class":114},[36,930,931],{"class":49}," 10",[36,933,61],{"class":53},[19,935,936],{},"常见错误：",[26,938,940],{"className":28,"code":939,"language":30,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,941,942,955],{"__ignoreMap":31},[36,943,944,946,948,950,952],{"class":38,"line":39},[36,945,232],{"class":49},[36,947,54],{"class":53},[36,949,789],{"class":57},[36,951,736],{"class":53},[36,953,954],{"class":42},"# 错误\n",[36,956,957,959,961,964,967],{"class":38,"line":46},[36,958,232],{"class":49},[36,960,54],{"class":53},[36,962,963],{"class":57},"\"abc\"",[36,965,966],{"class":53},")    ",[36,968,954],{"class":42},[19,970,971],{},"正确写法：",[26,973,975],{"className":28,"code":974,"language":30,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,976,977],{"__ignoreMap":31},[36,978,979,981,983,986,988,990],{"class":38,"line":39},[36,980,866],{"class":53},[36,982,115],{"class":114},[36,984,985],{"class":49}," float",[36,987,54],{"class":53},[36,989,789],{"class":57},[36,991,61],{"class":53},[14,993,995],{"id":994},"_27-运算符","2.7 运算符",[997,998,1000],"h3",{"id":999},"_271-算术运算符","2.7.1 算术运算符",[206,1002,1003,1014],{},[209,1004,1005],{},[212,1006,1007,1010,1012],{},[215,1008,1009],{},"运算符",[215,1011,223],{},[215,1013,220],{},[225,1015,1016,1030,1044,1059,1074,1089,1104],{},[212,1017,1018,1022,1025],{},[230,1019,1020],{},[33,1021,121],{},[230,1023,1024],{},"加法",[230,1026,1027],{},[33,1028,1029],{},"1 + 2",[212,1031,1032,1036,1039],{},[230,1033,1034],{},[33,1035,508],{},[230,1037,1038],{},"减法",[230,1040,1041],{},[33,1042,1043],{},"5 - 3",[212,1045,1046,1051,1054],{},[230,1047,1048],{},[33,1049,1050],{},"*",[230,1052,1053],{},"乘法",[230,1055,1056],{},[33,1057,1058],{},"2 * 3",[212,1060,1061,1066,1069],{},[230,1062,1063],{},[33,1064,1065],{},"\u002F",[230,1067,1068],{},"除法，结果是浮点数",[230,1070,1071],{},[33,1072,1073],{},"5 \u002F 2",[212,1075,1076,1081,1084],{},[230,1077,1078],{},[33,1079,1080],{},"\u002F\u002F",[230,1082,1083],{},"整除",[230,1085,1086],{},[33,1087,1088],{},"5 \u002F\u002F 2",[212,1090,1091,1096,1099],{},[230,1092,1093],{},[33,1094,1095],{},"%",[230,1097,1098],{},"取余",[230,1100,1101],{},[33,1102,1103],{},"5 % 2",[212,1105,1106,1111,1114],{},[230,1107,1108],{},[33,1109,1110],{},"**",[230,1112,1113],{},"幂运算",[230,1115,1116],{},[33,1117,1118],{},"2 ** 3",[19,1120,814],{},[26,1122,1124],{"className":28,"code":1123,"language":30,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,1125,1126,1146,1163,1180],{"__ignoreMap":31},[36,1127,1128,1130,1132,1135,1138,1141,1143],{"class":38,"line":39},[36,1129,50],{"class":49},[36,1131,54],{"class":53},[36,1133,1134],{"class":49},"5",[36,1136,1137],{"class":114}," \u002F",[36,1139,1140],{"class":49}," 2",[36,1142,736],{"class":53},[36,1144,1145],{"class":42},"# 2.5\n",[36,1147,1148,1150,1152,1154,1157,1159,1161],{"class":38,"line":46},[36,1149,50],{"class":49},[36,1151,54],{"class":53},[36,1153,1134],{"class":49},[36,1155,1156],{"class":114}," \u002F\u002F",[36,1158,1140],{"class":49},[36,1160,754],{"class":53},[36,1162,739],{"class":42},[36,1164,1165,1167,1169,1171,1174,1176,1178],{"class":38,"line":82},[36,1166,50],{"class":49},[36,1168,54],{"class":53},[36,1170,1134],{"class":49},[36,1172,1173],{"class":114}," %",[36,1175,1140],{"class":49},[36,1177,736],{"class":53},[36,1179,757],{"class":42},[36,1181,1182,1184,1186,1189,1192,1195,1197],{"class":38,"line":88},[36,1183,50],{"class":49},[36,1185,54],{"class":53},[36,1187,1188],{"class":49},"2",[36,1190,1191],{"class":114}," **",[36,1193,1194],{"class":49}," 3",[36,1196,754],{"class":53},[36,1198,1199],{"class":42},"# 8\n",[997,1201,1203],{"id":1202},"_272-赋值运算符","2.7.2 赋值运算符",[26,1205,1207],{"className":28,"code":1206,"language":30,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,1208,1209,1218,1228,1238,1248],{"__ignoreMap":31},[36,1210,1211,1213,1215],{"class":38,"line":39},[36,1212,866],{"class":53},[36,1214,115],{"class":114},[36,1216,1217],{"class":49}," 10\n",[36,1219,1220,1222,1225],{"class":38,"line":46},[36,1221,866],{"class":53},[36,1223,1224],{"class":114},"+=",[36,1226,1227],{"class":49}," 5\n",[36,1229,1230,1232,1235],{"class":38,"line":82},[36,1231,866],{"class":53},[36,1233,1234],{"class":114},"-=",[36,1236,1237],{"class":49}," 2\n",[36,1239,1240,1242,1245],{"class":38,"line":88},[36,1241,866],{"class":53},[36,1243,1244],{"class":114},"*=",[36,1246,1247],{"class":49}," 3\n",[36,1249,1250,1252,1255],{"class":38,"line":195},[36,1251,866],{"class":53},[36,1253,1254],{"class":114},"\u002F=",[36,1256,1237],{"class":49},[19,1258,1259],{},"等价关系：",[26,1261,1263],{"className":28,"code":1262,"language":30,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,1264,1265,1273],{"__ignoreMap":31},[36,1266,1267,1269,1271],{"class":38,"line":39},[36,1268,866],{"class":53},[36,1270,1224],{"class":114},[36,1272,124],{"class":49},[36,1274,1275,1277,1279,1282,1284],{"class":38,"line":46},[36,1276,866],{"class":53},[36,1278,115],{"class":114},[36,1280,1281],{"class":53}," num ",[36,1283,121],{"class":114},[36,1285,124],{"class":49},[19,1287,1288,1289,1292,1293,1296],{},"Python 没有 ",[33,1290,1291],{},"num++"," 和 ",[33,1294,1295],{},"num--","。",[997,1298,1300],{"id":1299},"_273-比较运算符","2.7.3 比较运算符",[19,1302,1303],{},"比较运算结果是布尔值。",[26,1305,1307],{"className":28,"code":1306,"language":30,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,1308,1309,1326,1341,1357],{"__ignoreMap":31},[36,1310,1311,1313,1315,1318,1321,1324],{"class":38,"line":39},[36,1312,50],{"class":49},[36,1314,54],{"class":53},[36,1316,1317],{"class":49},"10",[36,1319,1320],{"class":114}," >",[36,1322,1323],{"class":49}," 5",[36,1325,61],{"class":53},[36,1327,1328,1330,1332,1334,1337,1339],{"class":38,"line":46},[36,1329,50],{"class":49},[36,1331,54],{"class":53},[36,1333,1317],{"class":49},[36,1335,1336],{"class":114}," >=",[36,1338,931],{"class":49},[36,1340,61],{"class":53},[36,1342,1343,1345,1347,1349,1352,1355],{"class":38,"line":82},[36,1344,50],{"class":49},[36,1346,54],{"class":53},[36,1348,1317],{"class":49},[36,1350,1351],{"class":114}," ==",[36,1353,1354],{"class":49}," 8",[36,1356,61],{"class":53},[36,1358,1359,1361,1363,1365,1368,1370],{"class":38,"line":88},[36,1360,50],{"class":49},[36,1362,54],{"class":53},[36,1364,1317],{"class":49},[36,1366,1367],{"class":114}," !=",[36,1369,1354],{"class":49},[36,1371,61],{"class":53},[19,1373,1374,1375,1378,1379,1296],{},"注意：判断相等用 ",[33,1376,1377],{},"==","，赋值用 ",[33,1380,115],{},[26,1382,1384],{"className":28,"code":1383,"language":30,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,1385,1386,1398],{"__ignoreMap":31},[36,1387,1388,1390,1392,1395],{"class":38,"line":39},[36,1389,111],{"class":53},[36,1391,115],{"class":114},[36,1393,1394],{"class":49}," 18",[36,1396,1397],{"class":42},"       # 赋值\n",[36,1399,1400,1402,1404,1406],{"class":38,"line":46},[36,1401,111],{"class":53},[36,1403,1377],{"class":114},[36,1405,1394],{"class":49},[36,1407,1408],{"class":42},"      # 判断是否相等\n",[997,1410,1412],{"id":1411},"_274-逻辑运算符","2.7.4 逻辑运算符",[206,1414,1415,1423],{},[209,1416,1417],{},[212,1418,1419,1421],{},[215,1420,1009],{},[215,1422,223],{},[225,1424,1425,1435,1445],{},[212,1426,1427,1432],{},[230,1428,1429],{},[33,1430,1431],{},"and",[230,1433,1434],{},"并且",[212,1436,1437,1442],{},[230,1438,1439],{},[33,1440,1441],{},"or",[230,1443,1444],{},"或者",[212,1446,1447,1452],{},[230,1448,1449],{},[33,1450,1451],{},"not",[230,1453,1454],{},"取反",[26,1456,1458],{"className":28,"code":1457,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,1459,1460,1469,1478,1482,1499,1515],{"__ignoreMap":31},[36,1461,1462,1464,1466],{"class":38,"line":39},[36,1463,111],{"class":53},[36,1465,115],{"class":114},[36,1467,1468],{"class":49}," 20\n",[36,1470,1471,1474,1476],{"class":38,"line":46},[36,1472,1473],{"class":53},"has_ticket ",[36,1475,115],{"class":114},[36,1477,394],{"class":49},[36,1479,1480],{"class":38,"line":82},[36,1481,546],{"emptyLinePlaceholder":545},[36,1483,1484,1486,1488,1491,1493,1496],{"class":38,"line":88},[36,1485,50],{"class":49},[36,1487,847],{"class":53},[36,1489,1490],{"class":114},">=",[36,1492,1394],{"class":49},[36,1494,1495],{"class":114}," and",[36,1497,1498],{"class":53}," has_ticket)\n",[36,1500,1501,1503,1505,1508,1510,1513],{"class":38,"line":195},[36,1502,50],{"class":49},[36,1504,847],{"class":53},[36,1506,1507],{"class":114},"\u003C",[36,1509,1394],{"class":49},[36,1511,1512],{"class":114}," or",[36,1514,1498],{"class":53},[36,1516,1518,1520,1522,1524],{"class":38,"line":1517},6,[36,1519,50],{"class":49},[36,1521,54],{"class":53},[36,1523,1451],{"class":114},[36,1525,1498],{"class":53},[14,1527,1529],{"id":1528},"_28-字符串定义","2.8 字符串定义",[19,1531,1532],{},"三种常见写法：",[26,1534,1536],{"className":28,"code":1535,"language":30,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,1537,1538,1548,1557,1567],{"__ignoreMap":31},[36,1539,1540,1543,1545],{"class":38,"line":39},[36,1541,1542],{"class":53},"name1 ",[36,1544,115],{"class":114},[36,1546,1547],{"class":57}," '小明'\n",[36,1549,1550,1553,1555],{"class":38,"line":46},[36,1551,1552],{"class":53},"name2 ",[36,1554,115],{"class":114},[36,1556,365],{"class":57},[36,1558,1559,1562,1564],{"class":38,"line":82},[36,1560,1561],{"class":53},"text ",[36,1563,115],{"class":114},[36,1565,1566],{"class":57}," \"\"\"这是多行字符串\n",[36,1568,1569],{"class":38,"line":88},[36,1570,1571],{"class":57},"可以换行\"\"\"\n",[19,1573,1574],{},"字符串中包含引号：",[26,1576,1578],{"className":28,"code":1577,"language":30,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,1579,1580,1590,1600],{"__ignoreMap":31},[36,1581,1582,1585,1587],{"class":38,"line":39},[36,1583,1584],{"class":53},"msg ",[36,1586,115],{"class":114},[36,1588,1589],{"class":57}," \"他说:'你好'\"\n",[36,1591,1592,1595,1597],{"class":38,"line":46},[36,1593,1594],{"class":53},"msg2 ",[36,1596,115],{"class":114},[36,1598,1599],{"class":57}," '他说:\"你好\"'\n",[36,1601,1602,1605,1607,1610,1613,1616,1618],{"class":38,"line":82},[36,1603,1604],{"class":53},"msg3 ",[36,1606,115],{"class":114},[36,1608,1609],{"class":57}," \"他说:",[36,1611,1612],{"class":49},"\\\"",[36,1614,1615],{"class":57},"你好",[36,1617,1612],{"class":49},[36,1619,1620],{"class":57},"\"\n",[19,1622,1623],{},"常见转义字符：",[206,1625,1626,1636],{},[209,1627,1628],{},[212,1629,1630,1633],{},[215,1631,1632],{},"写法",[215,1634,1635],{},"含义",[225,1637,1638,1648,1658,1668,1677],{},[212,1639,1640,1645],{},[230,1641,1642],{},[33,1643,1644],{},"\\n",[230,1646,1647],{},"换行",[212,1649,1650,1655],{},[230,1651,1652],{},[33,1653,1654],{},"\\t",[230,1656,1657],{},"制表符",[212,1659,1660,1665],{},[230,1661,1662],{},[33,1663,1664],{},"\\\\",[230,1666,1667],{},"反斜杠",[212,1669,1670,1674],{},[230,1671,1672],{},[33,1673,1612],{},[230,1675,1676],{},"双引号",[212,1678,1679,1684],{},[230,1680,1681],{},[33,1682,1683],{},"\\'",[230,1685,1686],{},"单引号",[14,1688,1690],{"id":1689},"_29-字符串拼接","2.9 字符串拼接",[26,1692,1694],{"className":28,"code":1693,"language":30,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,1695,1696,1704],{"__ignoreMap":31},[36,1697,1698,1700,1702],{"class":38,"line":39},[36,1699,360],{"class":53},[36,1701,115],{"class":114},[36,1703,365],{"class":57},[36,1705,1706,1708,1710,1713,1715],{"class":38,"line":46},[36,1707,50],{"class":49},[36,1709,54],{"class":53},[36,1711,1712],{"class":57},"\"你好，\"",[36,1714,730],{"class":114},[36,1716,1717],{"class":53}," name)\n",[19,1719,1720],{},"字符串只能和字符串拼接：",[26,1722,1724],{"className":28,"code":1723,"language":30,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,1725,1726,1734],{"__ignoreMap":31},[36,1727,1728,1730,1732],{"class":38,"line":39},[36,1729,111],{"class":53},[36,1731,115],{"class":114},[36,1733,374],{"class":49},[36,1735,1736,1738,1740,1743,1745,1748],{"class":38,"line":46},[36,1737,50],{"class":49},[36,1739,54],{"class":53},[36,1741,1742],{"class":57},"\"年龄:\"",[36,1744,730],{"class":114},[36,1746,1747],{"class":49}," str",[36,1749,1750],{"class":53},"(age))\n",[19,1752,1753],{},"更推荐使用格式化字符串。",[14,1755,1757],{"id":1756},"_210-字符串格式化","2.10 字符串格式化",[997,1759,1761],{"id":1760},"_2101-百分号格式化","2.10.1 百分号格式化",[26,1763,1765],{"className":28,"code":1764,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,1766,1767,1775,1783,1792,1796],{"__ignoreMap":31},[36,1768,1769,1771,1773],{"class":38,"line":39},[36,1770,360],{"class":53},[36,1772,115],{"class":114},[36,1774,365],{"class":57},[36,1776,1777,1779,1781],{"class":38,"line":46},[36,1778,111],{"class":53},[36,1780,115],{"class":114},[36,1782,374],{"class":49},[36,1784,1785,1787,1789],{"class":38,"line":82},[36,1786,407],{"class":53},[36,1788,115],{"class":114},[36,1790,1791],{"class":49}," 95.5\n",[36,1793,1794],{"class":38,"line":88},[36,1795,546],{"emptyLinePlaceholder":545},[36,1797,1798,1800,1802,1805,1808,1811,1814,1817,1820,1823,1825],{"class":38,"line":195},[36,1799,50],{"class":49},[36,1801,54],{"class":53},[36,1803,1804],{"class":57},"\"姓名:",[36,1806,1807],{"class":49},"%s",[36,1809,1810],{"class":57}," 年龄:",[36,1812,1813],{"class":49},"%d",[36,1815,1816],{"class":57}," 分数:",[36,1818,1819],{"class":49},"%.1f",[36,1821,1822],{"class":57},"\"",[36,1824,1173],{"class":114},[36,1826,1827],{"class":53}," (name, age, score))\n",[19,1829,1830],{},"常用占位符：",[206,1832,1833,1842],{},[209,1834,1835],{},[212,1836,1837,1840],{},[215,1838,1839],{},"占位符",[215,1841,223],{},[225,1843,1844,1852,1860],{},[212,1845,1846,1850],{},[230,1847,1848],{},[33,1849,1807],{},[230,1851,263],{},[212,1853,1854,1858],{},[230,1855,1856],{},[33,1857,1813],{},[230,1859,239],{},[212,1861,1862,1867],{},[230,1863,1864],{},[33,1865,1866],{},"%f",[230,1868,251],{},[19,1870,1871],{},"精度控制：",[26,1873,1875],{"className":28,"code":1874,"language":30,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,1876,1877,1887],{"__ignoreMap":31},[36,1878,1879,1882,1884],{"class":38,"line":39},[36,1880,1881],{"class":53},"price ",[36,1883,115],{"class":114},[36,1885,1886],{"class":49}," 12.3456\n",[36,1888,1889,1891,1893,1895,1898,1900,1902],{"class":38,"line":46},[36,1890,50],{"class":49},[36,1892,54],{"class":53},[36,1894,1822],{"class":57},[36,1896,1897],{"class":49},"%.2f",[36,1899,1822],{"class":57},[36,1901,1173],{"class":114},[36,1903,1904],{"class":53}," price)\n",[997,1906,1908],{"id":1907},"_2102-format方法","2.10.2 format方法",[26,1910,1912],{"className":28,"code":1911,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,1913,1914,1922,1930,1934,1954,1974],{"__ignoreMap":31},[36,1915,1916,1918,1920],{"class":38,"line":39},[36,1917,360],{"class":53},[36,1919,115],{"class":114},[36,1921,365],{"class":57},[36,1923,1924,1926,1928],{"class":38,"line":46},[36,1925,111],{"class":53},[36,1927,115],{"class":114},[36,1929,374],{"class":49},[36,1931,1932],{"class":38,"line":82},[36,1933,546],{"emptyLinePlaceholder":545},[36,1935,1936,1938,1940,1942,1945,1947,1949,1951],{"class":38,"line":88},[36,1937,50],{"class":49},[36,1939,54],{"class":53},[36,1941,1804],{"class":57},[36,1943,1944],{"class":49},"{}",[36,1946,1810],{"class":57},[36,1948,1944],{"class":49},[36,1950,1822],{"class":57},[36,1952,1953],{"class":53},".format(name, age))\n",[36,1955,1956,1958,1960,1962,1965,1967,1970,1972],{"class":38,"line":195},[36,1957,50],{"class":49},[36,1959,54],{"class":53},[36,1961,1804],{"class":57},[36,1963,1964],{"class":49},"{0}",[36,1966,1810],{"class":57},[36,1968,1969],{"class":49},"{1}",[36,1971,1822],{"class":57},[36,1973,1953],{"class":53},[36,1975,1976,1978,1980,1982,1985,1987,1990,1992,1995,1999,2001,2004,2007,2009],{"class":38,"line":1517},[36,1977,50],{"class":49},[36,1979,54],{"class":53},[36,1981,1804],{"class":57},[36,1983,1984],{"class":49},"{name}",[36,1986,1810],{"class":57},[36,1988,1989],{"class":49},"{age}",[36,1991,1822],{"class":57},[36,1993,1994],{"class":53},".format(",[36,1996,1998],{"class":1997},"s4XuR","name",[36,2000,115],{"class":114},[36,2002,2003],{"class":53},"name, ",[36,2005,2006],{"class":1997},"age",[36,2008,115],{"class":114},[36,2010,2011],{"class":53},"age))\n",[997,2013,2015],{"id":2014},"_2103-f-string","2.10.3 f-string",[19,2017,2018],{},"推荐写法：",[26,2020,2022],{"className":28,"code":2021,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,2023,2024,2032,2040,2048,2052],{"__ignoreMap":31},[36,2025,2026,2028,2030],{"class":38,"line":39},[36,2027,360],{"class":53},[36,2029,115],{"class":114},[36,2031,365],{"class":57},[36,2033,2034,2036,2038],{"class":38,"line":46},[36,2035,111],{"class":53},[36,2037,115],{"class":114},[36,2039,374],{"class":49},[36,2041,2042,2044,2046],{"class":38,"line":82},[36,2043,407],{"class":53},[36,2045,115],{"class":114},[36,2047,1791],{"class":49},[36,2049,2050],{"class":38,"line":88},[36,2051,546],{"emptyLinePlaceholder":545},[36,2053,2054,2056,2058,2061,2063,2066,2068,2071,2073,2075,2077,2079,2081,2083,2086,2089,2091,2093],{"class":38,"line":195},[36,2055,50],{"class":49},[36,2057,54],{"class":53},[36,2059,2060],{"class":114},"f",[36,2062,1804],{"class":57},[36,2064,2065],{"class":49},"{",[36,2067,1998],{"class":53},[36,2069,2070],{"class":49},"}",[36,2072,1810],{"class":57},[36,2074,2065],{"class":49},[36,2076,2006],{"class":53},[36,2078,2070],{"class":49},[36,2080,1816],{"class":57},[36,2082,2065],{"class":49},[36,2084,2085],{"class":53},"score",[36,2087,2088],{"class":114},":.1f",[36,2090,2070],{"class":49},[36,2092,1822],{"class":57},[36,2094,61],{"class":53},[19,2096,2097],{},"表达式也可以放进去：",[26,2099,2101],{"className":28,"code":2100,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,2102,2103,2112,2121],{"__ignoreMap":31},[36,2104,2105,2107,2109],{"class":38,"line":39},[36,2106,1881],{"class":53},[36,2108,115],{"class":114},[36,2110,2111],{"class":49}," 8\n",[36,2113,2114,2117,2119],{"class":38,"line":46},[36,2115,2116],{"class":53},"count ",[36,2118,115],{"class":114},[36,2120,1227],{"class":49},[36,2122,2123,2125,2127,2129,2132,2134,2136,2138,2141,2143,2146],{"class":38,"line":82},[36,2124,50],{"class":49},[36,2126,54],{"class":53},[36,2128,2060],{"class":114},[36,2130,2131],{"class":57},"\"总价:",[36,2133,2065],{"class":49},[36,2135,1881],{"class":53},[36,2137,1050],{"class":114},[36,2139,2140],{"class":53}," count",[36,2142,2070],{"class":49},[36,2144,2145],{"class":57},"元\"",[36,2147,61],{"class":53},[14,2149,2151],{"id":2150},"_211-input输入","2.11 input输入",[19,2153,2154,2157],{},[33,2155,2156],{},"input()"," 会暂停程序，等待用户输入。",[26,2159,2161],{"className":28,"code":2160,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,2162,2163,2178],{"__ignoreMap":31},[36,2164,2165,2167,2169,2171,2173,2176],{"class":38,"line":39},[36,2166,360],{"class":53},[36,2168,115],{"class":114},[36,2170,871],{"class":49},[36,2172,54],{"class":53},[36,2174,2175],{"class":57},"\"请输入姓名:\"",[36,2177,61],{"class":53},[36,2179,2180,2182,2184,2186,2189,2191,2193,2195,2197],{"class":38,"line":46},[36,2181,50],{"class":49},[36,2183,54],{"class":53},[36,2185,2060],{"class":114},[36,2187,2188],{"class":57},"\"你好，",[36,2190,2065],{"class":49},[36,2192,1998],{"class":53},[36,2194,2070],{"class":49},[36,2196,1822],{"class":57},[36,2198,61],{"class":53},[19,2200,2201],{},"输入整数：",[26,2203,2205],{"className":28,"code":2204,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,2206,2207,2226],{"__ignoreMap":31},[36,2208,2209,2211,2213,2215,2217,2219,2221,2224],{"class":38,"line":39},[36,2210,111],{"class":53},[36,2212,115],{"class":114},[36,2214,837],{"class":49},[36,2216,54],{"class":53},[36,2218,913],{"class":49},[36,2220,54],{"class":53},[36,2222,2223],{"class":57},"\"请输入年龄:\"",[36,2225,625],{"class":53},[36,2227,2228,2230,2232,2234,2237,2239,2241,2243,2246,2249],{"class":38,"line":46},[36,2229,50],{"class":49},[36,2231,54],{"class":53},[36,2233,2060],{"class":114},[36,2235,2236],{"class":57},"\"明年你",[36,2238,2065],{"class":49},[36,2240,111],{"class":53},[36,2242,121],{"class":114},[36,2244,2245],{"class":49}," 1}",[36,2247,2248],{"class":57},"岁\"",[36,2250,61],{"class":53},[19,2252,2253],{},"输入小数：",[26,2255,2257],{"className":28,"code":2256,"language":30,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,2258,2259,2278],{"__ignoreMap":31},[36,2260,2261,2263,2265,2267,2269,2271,2273,2276],{"class":38,"line":39},[36,2262,379],{"class":53},[36,2264,115],{"class":114},[36,2266,985],{"class":49},[36,2268,54],{"class":53},[36,2270,913],{"class":49},[36,2272,54],{"class":53},[36,2274,2275],{"class":57},"\"请输入身高:\"",[36,2277,625],{"class":53},[36,2279,2280,2282,2284,2286,2289,2291,2294,2297,2299,2302],{"class":38,"line":46},[36,2281,50],{"class":49},[36,2283,54],{"class":53},[36,2285,2060],{"class":114},[36,2287,2288],{"class":57},"\"身高:",[36,2290,2065],{"class":49},[36,2292,2293],{"class":53},"height",[36,2295,2296],{"class":114},":.2f",[36,2298,2070],{"class":49},[36,2300,2301],{"class":57},"米\"",[36,2303,61],{"class":53},[14,2305,2307],{"id":2306},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,2309,2310],{},"需求：",[433,2312,2313,2316,2319,2322],{},[436,2314,2315],{},"输入商品单价。",[436,2317,2318],{},"输入购买数量。",[436,2320,2321],{},"输入折扣，例如 0.8 表示八折。",[436,2323,2324],{},"输出最终金额，保留两位小数。",[19,2326,2327],{},"代码：",[26,2329,2331],{"className":28,"code":2330,"language":30,"meta":31,"style":31},"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",[33,2332,2333,2352,2371,2391,2395,2415,2419,2444,2467,2490],{"__ignoreMap":31},[36,2334,2335,2337,2339,2341,2343,2345,2347,2350],{"class":38,"line":39},[36,2336,1881],{"class":53},[36,2338,115],{"class":114},[36,2340,985],{"class":49},[36,2342,54],{"class":53},[36,2344,913],{"class":49},[36,2346,54],{"class":53},[36,2348,2349],{"class":57},"\"请输入商品单价:\"",[36,2351,625],{"class":53},[36,2353,2354,2356,2358,2360,2362,2364,2366,2369],{"class":38,"line":46},[36,2355,2116],{"class":53},[36,2357,115],{"class":114},[36,2359,837],{"class":49},[36,2361,54],{"class":53},[36,2363,913],{"class":49},[36,2365,54],{"class":53},[36,2367,2368],{"class":57},"\"请输入购买数量:\"",[36,2370,625],{"class":53},[36,2372,2373,2376,2378,2380,2382,2384,2386,2389],{"class":38,"line":82},[36,2374,2375],{"class":53},"discount ",[36,2377,115],{"class":114},[36,2379,985],{"class":49},[36,2381,54],{"class":53},[36,2383,913],{"class":49},[36,2385,54],{"class":53},[36,2387,2388],{"class":57},"\"请输入折扣:\"",[36,2390,625],{"class":53},[36,2392,2393],{"class":38,"line":88},[36,2394,546],{"emptyLinePlaceholder":545},[36,2396,2397,2400,2402,2405,2407,2410,2412],{"class":38,"line":195},[36,2398,2399],{"class":53},"total ",[36,2401,115],{"class":114},[36,2403,2404],{"class":53}," price ",[36,2406,1050],{"class":114},[36,2408,2409],{"class":53}," count ",[36,2411,1050],{"class":114},[36,2413,2414],{"class":53}," discount\n",[36,2416,2417],{"class":38,"line":1517},[36,2418,546],{"emptyLinePlaceholder":545},[36,2420,2422,2424,2426,2428,2431,2433,2436,2438,2440,2442],{"class":38,"line":2421},7,[36,2423,50],{"class":49},[36,2425,54],{"class":53},[36,2427,2060],{"class":114},[36,2429,2430],{"class":57},"\"商品单价:",[36,2432,2065],{"class":49},[36,2434,2435],{"class":53},"price",[36,2437,2296],{"class":114},[36,2439,2070],{"class":49},[36,2441,1822],{"class":57},[36,2443,61],{"class":53},[36,2445,2447,2449,2451,2453,2456,2458,2461,2463,2465],{"class":38,"line":2446},8,[36,2448,50],{"class":49},[36,2450,54],{"class":53},[36,2452,2060],{"class":114},[36,2454,2455],{"class":57},"\"购买数量:",[36,2457,2065],{"class":49},[36,2459,2460],{"class":53},"count",[36,2462,2070],{"class":49},[36,2464,1822],{"class":57},[36,2466,61],{"class":53},[36,2468,2470,2472,2474,2476,2479,2481,2484,2486,2488],{"class":38,"line":2469},9,[36,2471,50],{"class":49},[36,2473,54],{"class":53},[36,2475,2060],{"class":114},[36,2477,2478],{"class":57},"\"折扣:",[36,2480,2065],{"class":49},[36,2482,2483],{"class":53},"discount",[36,2485,2070],{"class":49},[36,2487,1822],{"class":57},[36,2489,61],{"class":53},[36,2491,2493,2495,2497,2499,2502,2504,2507,2509,2511,2513],{"class":38,"line":2492},10,[36,2494,50],{"class":49},[36,2496,54],{"class":53},[36,2498,2060],{"class":114},[36,2500,2501],{"class":57},"\"应付金额:",[36,2503,2065],{"class":49},[36,2505,2506],{"class":53},"total",[36,2508,2296],{"class":114},[36,2510,2070],{"class":49},[36,2512,2145],{"class":57},[36,2514,61],{"class":53},[14,2516,2518],{"id":2517},"_213-易错点","2.13 易错点",[433,2520,2521,2526,2532,2540,2543],{},[436,2522,2523,2525],{},[33,2524,2156],{}," 的结果是字符串，做运算前要转换。",[436,2527,2528,2529,1296],{},"字符串拼接时，数字要先 ",[33,2530,2531],{},"str()",[436,2533,2534,2536,2537,2539],{},[33,2535,115],{}," 是赋值，",[33,2538,1377],{}," 是比较。",[436,2541,2542],{},"Python 没有自增自减运算符。",[436,2544,2545],{},"浮点数计算可能有精度误差：",[26,2547,2549],{"className":28,"code":2548,"language":30,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,2550,2551],{"__ignoreMap":31},[36,2552,2553,2555,2557,2560,2562,2565],{"class":38,"line":39},[36,2554,50],{"class":49},[36,2556,54],{"class":53},[36,2558,2559],{"class":49},"0.1",[36,2561,730],{"class":114},[36,2563,2564],{"class":49}," 0.2",[36,2566,61],{"class":53},[19,2568,2569,2570,2573],{},"金额计算如果要求严格，可以后续学习 ",[33,2571,2572],{},"decimal"," 模块。",[14,2575,2577],{"id":2576},"_214-本章练习","2.14 本章练习",[433,2579,2580,2583,2586,2589,2592],{},[436,2581,2582],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[436,2584,2585],{},"输入圆的半径，计算面积，保留两位小数。",[436,2587,2588],{},"输入工资和奖金，计算总收入。",[436,2590,2591],{},"输入摄氏温度，转换为华氏温度。",[436,2593,2594],{},"写一个 BMI 计算程序：",[26,2596,2599],{"className":2597,"code":2598,"language":690,"meta":31},[688],"BMI = 体重kg \u002F 身高m ** 2\n",[33,2600,2598],{"__ignoreMap":31},[2602,2603,2604],"style",{},"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":31,"searchDepth":46,"depth":46,"links":2606},[2607,2608,2609,2610,2611,2612,2613,2619,2620,2621,2626,2627,2628,2629],{"id":16,"depth":46,"text":17},{"id":152,"depth":46,"text":153},{"id":346,"depth":46,"text":347},{"id":427,"depth":46,"text":428},{"id":596,"depth":46,"text":597},{"id":760,"depth":46,"text":761},{"id":994,"depth":46,"text":995,"children":2614},[2615,2616,2617,2618],{"id":999,"depth":82,"text":1000},{"id":1202,"depth":82,"text":1203},{"id":1299,"depth":82,"text":1300},{"id":1411,"depth":82,"text":1412},{"id":1528,"depth":46,"text":1529},{"id":1689,"depth":46,"text":1690},{"id":1756,"depth":46,"text":1757,"children":2622},[2623,2624,2625],{"id":1760,"depth":82,"text":1761},{"id":1907,"depth":82,"text":1908},{"id":2014,"depth":82,"text":2015},{"id":2150,"depth":46,"text":2151},{"id":2306,"depth":46,"text":2307},{"id":2517,"depth":46,"text":2518},{"id":2576,"depth":46,"text":2577},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":5,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",[2638,7693,8797,10217,13202,14553,16042,17130,25888,25900,26498,26524,26648,26889,26954,26972,26985,27032,27156,27325,27523,27701,27906,28042,28137,28174,28187,28496,29236,29944,29965,30983,32614,32765,32778,32790,33085,52889,52904,52921,52954,55824,79163,95301,95322,95435,95556,96326,96989,97350,97388,97494,97594,97637,97663,97724,99376,99477,99502,99993,100493,101573,101856,102598,103100,103112,105125,106788,108290,109987,111904,113822,115844,119311,119743,120206,120955,123897,124245,124267,124623,127929,127941,128343,128366,128513,128680,128885,129186,129743,130400,132331,133929,134577,136071,137502,138737,140430,142182,144592,144708,145643,145854,146739,147974,148202,148215,149362,151774,154139,157456,159610,161254,163031,165044,168096,170276,172803,174997],{"id":2639,"title":2640,"body":2641,"description":31,"extension":2631,"meta":7688,"navigation":545,"path":7689,"seo":7690,"stem":7691,"__hash__":7692},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2642,"toc":7660},[2643,2646,2650,2653,2657,2668,2672,2676,2679,2682,2685,2688,2691,2716,2720,2723,2726,2729,2732,2778,2782,2800,2802,2816,2819,2827,2830,3672,3679,3696,3700,3785,3789,3795,3880,3884,3921,3925,3989,3993,3997,4004,4015,4019,4024,4028,4033,4037,4042,4046,4050,4055,4324,4329,4467,4472,4726,4729,4737,4741,4746,4849,4852,5156,5165,5266,5269,5272,5275,5278,5537,5542,5682,5685,5864,5867,5995,5998,6150,6154,6159,6162,6173,6181,6184,6291,6295,6299,6304,6354,6359,6364,6388,6393,6446,6449,6454,6631,6636,6921,6926,7323,7327,7332,7389,7394,7402,7405,7545,7548,7657],[10,2644,2640],{"id":2645},"_1基础入门",[14,2647,2649],{"id":2648},"_11注释","1.1注释",[19,2651,2652],{},"\u002F\u002F或者\u002F* *\u002F",[14,2654,2656],{"id":2655},"_12命名","1.2命名",[433,2658,2659,2662,2665],{},[436,2660,2661],{},"字母数字下划线",[436,2663,2664],{},"开头必须是字母或_",[436,2666,2667],{},"不能使用关键词",[14,2669,2671],{"id":2670},"_13数据类型","1.3数据类型",[997,2673,2675],{"id":2674},"_131整形","1.3.1整形",[19,2677,2678],{},"short 短整形 2",[19,2680,2681],{},"int 整形 4",[19,2683,2684],{},"long 长整形 win4 linux32位4 linux64位8",[19,2686,2687],{},"long long 长长整形 8",[19,2689,2690],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,2692,2696],{"className":2693,"code":2694,"language":2695,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,2697,2698,2709],{"__ignoreMap":31},[36,2699,2700,2703,2705,2707],{"class":38,"line":39},[36,2701,2702],{"class":114},"sizeof",[36,2704,54],{"class":53},[36,2706,232],{"class":114},[36,2708,61],{"class":53},[36,2710,2711,2713],{"class":38,"line":46},[36,2712,2702],{"class":114},[36,2714,2715],{"class":53},"(num)\n",[997,2717,2719],{"id":2718},"_132浮点型","1.3.2浮点型",[19,2721,2722],{},"float 单精度 4节 7位有效数字",[19,2724,2725],{},"double 双精度 8节 15-16有效数字",[19,2727,2728],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2730,2731],{},"注意点：",[26,2733,2735],{"className":2693,"code":2734,"language":2695,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,2736,2737,2756],{"__ignoreMap":31},[36,2738,2739,2741,2744,2746,2748,2750,2753],{"class":38,"line":39},[36,2740,244],{"class":114},[36,2742,2743],{"class":53}," f1",[36,2745,115],{"class":114},[36,2747,174],{"class":49},[36,2749,2060],{"class":114},[36,2751,2752],{"class":53},";",[36,2754,2755],{"class":42}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,2757,2758,2760,2763,2765,2768,2771,2773,2775],{"class":38,"line":46},[36,2759,244],{"class":114},[36,2761,2762],{"class":53}," f2",[36,2764,115],{"class":114},[36,2766,2767],{"class":49},"3",[36,2769,2770],{"class":114},"e",[36,2772,1188],{"class":49},[36,2774,2752],{"class":53},[36,2776,2777],{"class":42}," \u002F\u002F科学记数法\n",[997,2779,2781],{"id":2780},"_133字符型","1.3.3字符型",[26,2783,2785],{"className":2693,"code":2784,"language":2695,"meta":31,"style":31},"char ch='a'\n",[33,2786,2787],{"__ignoreMap":31},[36,2788,2789,2792,2795,2797],{"class":38,"line":39},[36,2790,2791],{"class":114},"char",[36,2793,2794],{"class":53}," ch",[36,2796,115],{"class":114},[36,2798,2799],{"class":57},"'a'\n",[19,2801,2731],{},[433,2803,2804,2807,2810,2813],{},[436,2805,2806],{},"在显示字符型变量时，只能单引号，双引号x",[436,2808,2809],{},"单引号内只能一个字符，不能字符串",[436,2811,2812],{},"c和c++字符型变量只占用一个字符",[436,2814,2815],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2817,2818],{},"ASCII码大致由以下两部分组成：",[433,2820,2821,2824],{},[436,2822,2823],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[436,2825,2826],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2828,2829],{},"ASCII码表格：",[206,2831,2832,2873],{},[209,2833,2834],{},[212,2835,2836,2843,2848,2852,2857,2861,2865,2869],{},[215,2837,2838,2842],{},[2839,2840,2841],"strong",{},"ASCII","值",[215,2844,2845],{},[2839,2846,2847],{},"控制字符",[215,2849,2850,2842],{},[2839,2851,2841],{},[215,2853,2854],{},[2839,2855,2856],{},"字符",[215,2858,2859,2842],{},[2839,2860,2841],{},[215,2862,2863],{},[2839,2864,2856],{},[215,2866,2867,2842],{},[2839,2868,2841],{},[215,2870,2871],{},[2839,2872,2856],{},[225,2874,2875,2899,2924,2948,2973,2998,3021,3046,3072,3097,3123,3147,3172,3197,3222,3248,3273,3297,3322,3347,3372,3397,3422,3447,3472,3497,3522,3548,3572,3596,3620,3646],{},[212,2876,2877,2879,2882,2885,2888,2891,2894,2897],{},[230,2878,713],{},[230,2880,2881],{},"NUT",[230,2883,2884],{},"32",[230,2886,2887],{},"(space)",[230,2889,2890],{},"64",[230,2892,2893],{},"@",[230,2895,2896],{},"96",[230,2898,273],{},[212,2900,2901,2903,2906,2909,2912,2915,2918,2921],{},[230,2902,707],{},[230,2904,2905],{},"SOH",[230,2907,2908],{},"33",[230,2910,2911],{},"!",[230,2913,2914],{},"65",[230,2916,2917],{},"A",[230,2919,2920],{},"97",[230,2922,2923],{},"a",[212,2925,2926,2928,2931,2934,2936,2939,2942,2945],{},[230,2927,1188],{},[230,2929,2930],{},"STX",[230,2932,2933],{},"34",[230,2935,1822],{},[230,2937,2938],{},"66",[230,2940,2941],{},"B",[230,2943,2944],{},"98",[230,2946,2947],{},"b",[212,2949,2950,2952,2955,2958,2961,2964,2967,2970],{},[230,2951,2767],{},[230,2953,2954],{},"ETX",[230,2956,2957],{},"35",[230,2959,2960],{},"#",[230,2962,2963],{},"67",[230,2965,2966],{},"C",[230,2968,2969],{},"99",[230,2971,2972],{},"c",[212,2974,2975,2978,2981,2984,2987,2990,2993,2995],{},[230,2976,2977],{},"4",[230,2979,2980],{},"EOT",[230,2982,2983],{},"36",[230,2985,2986],{},"$",[230,2988,2989],{},"68",[230,2991,2992],{},"D",[230,2994,166],{},[230,2996,2997],{},"d",[212,2999,3000,3002,3005,3008,3010,3013,3016,3019],{},[230,3001,1134],{},[230,3003,3004],{},"ENQ",[230,3006,3007],{},"37",[230,3009,1095],{},[230,3011,3012],{},"69",[230,3014,3015],{},"E",[230,3017,3018],{},"101",[230,3020,2770],{},[212,3022,3023,3026,3029,3032,3035,3038,3041,3044],{},[230,3024,3025],{},"6",[230,3027,3028],{},"ACK",[230,3030,3031],{},"38",[230,3033,3034],{},"&",[230,3036,3037],{},"70",[230,3039,3040],{},"F",[230,3042,3043],{},"102",[230,3045,2060],{},[212,3047,3048,3051,3054,3057,3060,3063,3066,3069],{},[230,3049,3050],{},"7",[230,3052,3053],{},"BEL",[230,3055,3056],{},"39",[230,3058,3059],{},",",[230,3061,3062],{},"71",[230,3064,3065],{},"G",[230,3067,3068],{},"103",[230,3070,3071],{},"g",[212,3073,3074,3077,3080,3083,3085,3088,3091,3094],{},[230,3075,3076],{},"8",[230,3078,3079],{},"BS",[230,3081,3082],{},"40",[230,3084,54],{},[230,3086,3087],{},"72",[230,3089,3090],{},"H",[230,3092,3093],{},"104",[230,3095,3096],{},"h",[212,3098,3099,3102,3105,3108,3111,3114,3117,3120],{},[230,3100,3101],{},"9",[230,3103,3104],{},"HT",[230,3106,3107],{},"41",[230,3109,3110],{},")",[230,3112,3113],{},"73",[230,3115,3116],{},"I",[230,3118,3119],{},"105",[230,3121,3122],{},"i",[212,3124,3125,3127,3130,3133,3135,3138,3141,3144],{},[230,3126,1317],{},[230,3128,3129],{},"LF",[230,3131,3132],{},"42",[230,3134,1050],{},[230,3136,3137],{},"74",[230,3139,3140],{},"J",[230,3142,3143],{},"106",[230,3145,3146],{},"j",[212,3148,3149,3152,3155,3158,3160,3163,3166,3169],{},[230,3150,3151],{},"11",[230,3153,3154],{},"VT",[230,3156,3157],{},"43",[230,3159,121],{},[230,3161,3162],{},"75",[230,3164,3165],{},"K",[230,3167,3168],{},"107",[230,3170,3171],{},"k",[212,3173,3174,3177,3180,3183,3185,3188,3191,3194],{},[230,3175,3176],{},"12",[230,3178,3179],{},"FF",[230,3181,3182],{},"44",[230,3184,3059],{},[230,3186,3187],{},"76",[230,3189,3190],{},"L",[230,3192,3193],{},"108",[230,3195,3196],{},"l",[212,3198,3199,3202,3205,3208,3210,3213,3216,3219],{},[230,3200,3201],{},"13",[230,3203,3204],{},"CR",[230,3206,3207],{},"45",[230,3209,508],{},[230,3211,3212],{},"77",[230,3214,3215],{},"M",[230,3217,3218],{},"109",[230,3220,3221],{},"m",[212,3223,3224,3227,3230,3233,3236,3239,3242,3245],{},[230,3225,3226],{},"14",[230,3228,3229],{},"SO",[230,3231,3232],{},"46",[230,3234,3235],{},".",[230,3237,3238],{},"78",[230,3240,3241],{},"N",[230,3243,3244],{},"110",[230,3246,3247],{},"n",[212,3249,3250,3253,3256,3259,3261,3264,3267,3270],{},[230,3251,3252],{},"15",[230,3254,3255],{},"SI",[230,3257,3258],{},"47",[230,3260,1065],{},[230,3262,3263],{},"79",[230,3265,3266],{},"O",[230,3268,3269],{},"111",[230,3271,3272],{},"o",[212,3274,3275,3278,3281,3284,3286,3289,3292,3295],{},[230,3276,3277],{},"16",[230,3279,3280],{},"DLE",[230,3282,3283],{},"48",[230,3285,713],{},[230,3287,3288],{},"80",[230,3290,3291],{},"P",[230,3293,3294],{},"112",[230,3296,19],{},[212,3298,3299,3302,3305,3308,3310,3313,3316,3319],{},[230,3300,3301],{},"17",[230,3303,3304],{},"DCI",[230,3306,3307],{},"49",[230,3309,707],{},[230,3311,3312],{},"81",[230,3314,3315],{},"Q",[230,3317,3318],{},"113",[230,3320,3321],{},"q",[212,3323,3324,3327,3330,3333,3335,3338,3341,3344],{},[230,3325,3326],{},"18",[230,3328,3329],{},"DC2",[230,3331,3332],{},"50",[230,3334,1188],{},[230,3336,3337],{},"82",[230,3339,3340],{},"R",[230,3342,3343],{},"114",[230,3345,3346],{},"r",[212,3348,3349,3352,3355,3358,3360,3363,3366,3369],{},[230,3350,3351],{},"19",[230,3353,3354],{},"DC3",[230,3356,3357],{},"51",[230,3359,2767],{},[230,3361,3362],{},"83",[230,3364,3365],{},"S",[230,3367,3368],{},"115",[230,3370,3371],{},"s",[212,3373,3374,3377,3380,3383,3385,3388,3391,3394],{},[230,3375,3376],{},"20",[230,3378,3379],{},"DC4",[230,3381,3382],{},"52",[230,3384,2977],{},[230,3386,3387],{},"84",[230,3389,3390],{},"T",[230,3392,3393],{},"116",[230,3395,3396],{},"t",[212,3398,3399,3402,3405,3408,3410,3413,3416,3419],{},[230,3400,3401],{},"21",[230,3403,3404],{},"NAK",[230,3406,3407],{},"53",[230,3409,1134],{},[230,3411,3412],{},"85",[230,3414,3415],{},"U",[230,3417,3418],{},"117",[230,3420,3421],{},"u",[212,3423,3424,3427,3430,3433,3435,3438,3441,3444],{},[230,3425,3426],{},"22",[230,3428,3429],{},"SYN",[230,3431,3432],{},"54",[230,3434,3025],{},[230,3436,3437],{},"86",[230,3439,3440],{},"V",[230,3442,3443],{},"118",[230,3445,3446],{},"v",[212,3448,3449,3452,3455,3458,3460,3463,3466,3469],{},[230,3450,3451],{},"23",[230,3453,3454],{},"TB",[230,3456,3457],{},"55",[230,3459,3050],{},[230,3461,3462],{},"87",[230,3464,3465],{},"W",[230,3467,3468],{},"119",[230,3470,3471],{},"w",[212,3473,3474,3477,3480,3483,3485,3488,3491,3494],{},[230,3475,3476],{},"24",[230,3478,3479],{},"CAN",[230,3481,3482],{},"56",[230,3484,3076],{},[230,3486,3487],{},"88",[230,3489,3490],{},"X",[230,3492,3493],{},"120",[230,3495,3496],{},"x",[212,3498,3499,3502,3505,3508,3510,3513,3516,3519],{},[230,3500,3501],{},"25",[230,3503,3504],{},"EM",[230,3506,3507],{},"57",[230,3509,3101],{},[230,3511,3512],{},"89",[230,3514,3515],{},"Y",[230,3517,3518],{},"121",[230,3520,3521],{},"y",[212,3523,3524,3527,3530,3533,3536,3539,3542,3545],{},[230,3525,3526],{},"26",[230,3528,3529],{},"SUB",[230,3531,3532],{},"58",[230,3534,3535],{},":",[230,3537,3538],{},"90",[230,3540,3541],{},"Z",[230,3543,3544],{},"122",[230,3546,3547],{},"z",[212,3549,3550,3553,3556,3559,3561,3564,3567,3570],{},[230,3551,3552],{},"27",[230,3554,3555],{},"ESC",[230,3557,3558],{},"59",[230,3560,2752],{},[230,3562,3563],{},"91",[230,3565,3566],{},"[",[230,3568,3569],{},"123",[230,3571,2065],{},[212,3573,3574,3577,3580,3583,3585,3588,3590,3593],{},[230,3575,3576],{},"28",[230,3578,3579],{},"FS",[230,3581,3582],{},"60",[230,3584,1507],{},[230,3586,3587],{},"92",[230,3589,1065],{},[230,3591,3592],{},"124",[230,3594,3595],{},"|",[212,3597,3598,3601,3604,3607,3609,3612,3615,3618],{},[230,3599,3600],{},"29",[230,3602,3603],{},"GS",[230,3605,3606],{},"61",[230,3608,115],{},[230,3610,3611],{},"93",[230,3613,3614],{},"]",[230,3616,3617],{},"125",[230,3619,2070],{},[212,3621,3622,3625,3628,3631,3634,3637,3640,3643],{},[230,3623,3624],{},"30",[230,3626,3627],{},"RS",[230,3629,3630],{},"62",[230,3632,3633],{},">",[230,3635,3636],{},"94",[230,3638,3639],{},"^",[230,3641,3642],{},"126",[230,3644,3645],{},"`",[212,3647,3648,3651,3654,3657,3660,3663,3666,3669],{},[230,3649,3650],{},"31",[230,3652,3653],{},"US",[230,3655,3656],{},"63",[230,3658,3659],{},"?",[230,3661,3662],{},"95",[230,3664,3665],{},"_",[230,3667,3668],{},"127",[230,3670,3671],{},"DEL",[19,3673,3674,3675,3678],{},"ASCII 码大致由以下",[2839,3676,3677],{},"两部分组","成：",[3680,3681,3682,3689],"ul",{},[436,3683,3684,3685,3688],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2839,3686,3687],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[436,3690,3691,3692,3695],{},"ASCII 打印字符：数字 ",[2839,3693,3694],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[997,3697,3699],{"id":3698},"_134转义字符","1.3.4转义字符",[26,3701,3703],{"className":2693,"code":3702,"language":2695,"meta":31,"style":31},"\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",[33,3704,3705,3710,3726,3740,3745,3758,3763],{"__ignoreMap":31},[36,3706,3707],{"class":38,"line":39},[36,3708,3709],{"class":42},"\u002F\u002F换行符\n",[36,3711,3712,3715,3718,3721,3723],{"class":38,"line":46},[36,3713,3714],{"class":53},"cout ",[36,3716,3717],{"class":114},"\u003C\u003C",[36,3719,3720],{"class":57},"\"hello world\u002Fn\"",[36,3722,2752],{"class":53},[36,3724,3725],{"class":42}," \u002F\u002F就等同于如下：\n",[36,3727,3728,3730,3732,3735,3737],{"class":38,"line":82},[36,3729,3714],{"class":53},[36,3731,3717],{"class":114},[36,3733,3734],{"class":57},"\"hello world\"",[36,3736,3717],{"class":114},[36,3738,3739],{"class":53},"endl;\n",[36,3741,3742],{"class":38,"line":88},[36,3743,3744],{"class":42},"\u002F\u002F反斜杠\n",[36,3746,3747,3749,3751,3754,3756],{"class":38,"line":195},[36,3748,3714],{"class":53},[36,3750,3717],{"class":114},[36,3752,3753],{"class":57},"\"\u002F\u002F\"",[36,3755,3717],{"class":114},[36,3757,3739],{"class":53},[36,3759,3760],{"class":38,"line":1517},[36,3761,3762],{"class":42},"\u002F\u002F水平制表符\n",[36,3764,3765,3767,3769,3772,3774,3777,3779,3782],{"class":38,"line":2421},[36,3766,3714],{"class":53},[36,3768,3717],{"class":114},[36,3770,3771],{"class":57},"\"aaaa",[36,3773,1654],{"class":49},[36,3775,3776],{"class":57},"helloworld\"",[36,3778,3717],{"class":114},[36,3780,3781],{"class":53},"endl;",[36,3783,3784],{"class":42}," \u002F\u002F输出窗口时有对齐效果\n",[997,3786,3788],{"id":3787},"_135字符串型","1.3.5字符串型",[19,3790,3791,3792,3794],{},"char 变量名",[36,3793],{},"=\"字符串值\"",[26,3796,3798],{"className":2693,"code":3797,"language":2695,"meta":31,"style":31},"\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",[33,3799,3800,3805,3810,3815,3820,3834,3846,3851,3856,3867],{"__ignoreMap":31},[36,3801,3802],{"class":38,"line":39},[36,3803,3804],{"class":42},"\u002F\u002Fc风格字符串\n",[36,3806,3807],{"class":38,"line":46},[36,3808,3809],{"class":42},"\u002F\u002F注意事项：\n",[36,3811,3812],{"class":38,"line":82},[36,3813,3814],{"class":42},"\u002F\u002F1.char字符串名[]\n",[36,3816,3817],{"class":38,"line":88},[36,3818,3819],{"class":42},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,3821,3822,3824,3827,3829,3831],{"class":38,"line":195},[36,3823,2791],{"class":114},[36,3825,3826],{"class":53}," str[]",[36,3828,115],{"class":114},[36,3830,3734],{"class":57},[36,3832,3833],{"class":53},";\n",[36,3835,3836,3838,3840,3842,3844],{"class":38,"line":1517},[36,3837,3714],{"class":53},[36,3839,3717],{"class":114},[36,3841,256],{"class":53},[36,3843,3717],{"class":114},[36,3845,3739],{"class":53},[36,3847,3848],{"class":38,"line":2421},[36,3849,3850],{"class":42},"\u002F\u002Fc++风格字符串\n",[36,3852,3853],{"class":38,"line":2446},[36,3854,3855],{"class":42},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,3857,3858,3861,3863,3865],{"class":38,"line":2469},[36,3859,3860],{"class":53},"string str2",[36,3862,115],{"class":114},[36,3864,3734],{"class":57},[36,3866,3833],{"class":53},[36,3868,3869,3871,3873,3876,3878],{"class":38,"line":2492},[36,3870,3714],{"class":53},[36,3872,3717],{"class":114},[36,3874,3875],{"class":53},"str2",[36,3877,3717],{"class":114},[36,3879,3739],{"class":53},[997,3881,3883],{"id":3882},"_136布尔类型bool","1.3.6布尔类型bool",[26,3885,3887],{"className":2693,"code":3886,"language":2695,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,3888,3889,3903],{"__ignoreMap":31},[36,3890,3891,3893,3896,3898,3901],{"class":38,"line":39},[36,3892,268],{"class":114},[36,3894,3895],{"class":53}," flag",[36,3897,115],{"class":114},[36,3899,3900],{"class":49},"true",[36,3902,3833],{"class":53},[36,3904,3905,3908,3911,3914,3916,3918],{"class":38,"line":46},[36,3906,3907],{"class":53},"cout",[36,3909,3910],{"class":114},"\u003C\u003Csizeof",[36,3912,3913],{"class":53},"(flag)",[36,3915,3717],{"class":114},[36,3917,3781],{"class":53},[36,3919,3920],{"class":42}," \u002F\u002F查看布尔占内存空间\n",[14,3922,3924],{"id":3923},"_14键盘输入cin","1.4键盘输入cin",[26,3926,3928],{"className":2693,"code":3927,"language":2695,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,3929,3930,3943,3960,3971],{"__ignoreMap":31},[36,3931,3932,3934,3937,3939,3941],{"class":38,"line":39},[36,3933,232],{"class":114},[36,3935,3936],{"class":53}," a",[36,3938,115],{"class":114},[36,3940,713],{"class":49},[36,3942,3833],{"class":53},[36,3944,3945,3947,3949,3952,3954,3956,3958],{"class":38,"line":46},[36,3946,3907],{"class":53},[36,3948,3717],{"class":114},[36,3950,3951],{"class":57},"\"请给整型变量a赋值\"",[36,3953,3717],{"class":114},[36,3955,2923],{"class":53},[36,3957,3717],{"class":114},[36,3959,3739],{"class":53},[36,3961,3962,3965,3968],{"class":38,"line":82},[36,3963,3964],{"class":53},"cin ",[36,3966,3967],{"class":114},">>",[36,3969,3970],{"class":53}," a;\n",[36,3972,3973,3975,3977,3980,3983,3985,3987],{"class":38,"line":88},[36,3974,3714],{"class":53},[36,3976,3717],{"class":114},[36,3978,3979],{"class":57}," \"整型变量a=\"",[36,3981,3982],{"class":114}," \u003C\u003C",[36,3984,2923],{"class":53},[36,3986,3717],{"class":114},[36,3988,3739],{"class":53},[14,3990,3992],{"id":3991},"_15运算符","1.5运算符",[997,3994,3996],{"id":3995},"_151算术运算符","1.5.1算术运算符",[19,3998,3999,4003],{},[4000,4001],"img",{"alt":31,"src":4002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[433,4005,4006,4009,4012],{},[436,4007,4008],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[436,4010,4011],{},"两个小数不可以做取模运算",[436,4013,4014],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[997,4016,4018],{"id":4017},"_152赋值运算符","1.5.2赋值运算符",[19,4020,4021],{},[4000,4022],{"alt":31,"src":4023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[997,4025,4027],{"id":4026},"_153比较运算符","1.5.3比较运算符",[19,4029,4030],{},[4000,4031],{"alt":31,"src":4032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[997,4034,4036],{"id":4035},"_154逻辑运算符","1.5.4逻辑运算符",[19,4038,4039],{},[4000,4040],{"alt":31,"src":4041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4043,4045],{"id":4044},"_16程序流程结构","1.6程序流程结构",[997,4047,4049],{"id":4048},"_161选择结构","1.6.1选择结构",[433,4051,4052],{},[436,4053,4054],{},"if语句\n单行、多行、多条件if语句",[26,4056,4058],{"className":2693,"code":4057,"language":2695,"meta":31,"style":31},"\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",[33,4059,4060,4065,4080,4085,4099,4104,4109,4118,4131,4135,4148,4153,4159,4164,4178,4183,4189,4210,4215,4229,4234,4262,4267,4284,4289,4294,4299,4313,4318],{"__ignoreMap":31},[36,4061,4062],{"class":38,"line":39},[36,4063,4064],{"class":42},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,4066,4067,4070,4073,4075,4078],{"class":38,"line":46},[36,4068,4069],{"class":114},"if",[36,4071,4072],{"class":53},"(score",[36,4074,3633],{"class":114},[36,4076,4077],{"class":49},"600",[36,4079,61],{"class":53},[36,4081,4082],{"class":38,"line":82},[36,4083,4084],{"class":53},"{\n",[36,4086,4087,4090,4092,4095,4097],{"class":38,"line":88},[36,4088,4089],{"class":53},"    cout",[36,4091,3717],{"class":114},[36,4093,4094],{"class":57},"'这是单行if语句'",[36,4096,3717],{"class":114},[36,4098,3739],{"class":53},[36,4100,4101],{"class":38,"line":195},[36,4102,4103],{"class":53},"}\n",[36,4105,4106],{"class":38,"line":1517},[36,4107,4108],{"class":42},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,4110,4111,4113,4115],{"class":38,"line":2421},[36,4112,3964],{"class":53},[36,4114,3967],{"class":114},[36,4116,4117],{"class":53}," score\n",[36,4119,4120,4122,4124,4127,4129],{"class":38,"line":2446},[36,4121,4069],{"class":114},[36,4123,4072],{"class":53},[36,4125,4126],{"class":114},"\u003C=",[36,4128,4077],{"class":49},[36,4130,61],{"class":53},[36,4132,4133],{"class":38,"line":2469},[36,4134,4084],{"class":53},[36,4136,4137,4139,4141,4144,4146],{"class":38,"line":2492},[36,4138,4089],{"class":53},[36,4140,3967],{"class":114},[36,4142,4143],{"class":57},"\"小于等于600\"",[36,4145,3717],{"class":114},[36,4147,3739],{"class":53},[36,4149,4151],{"class":38,"line":4150},11,[36,4152,4103],{"class":53},[36,4154,4156],{"class":38,"line":4155},12,[36,4157,4158],{"class":114},"else\n",[36,4160,4162],{"class":38,"line":4161},13,[36,4163,4084],{"class":53},[36,4165,4167,4169,4171,4174,4176],{"class":38,"line":4166},14,[36,4168,4089],{"class":53},[36,4170,3967],{"class":114},[36,4172,4173],{"class":57},"\"大于600\"",[36,4175,3967],{"class":114},[36,4177,3739],{"class":53},[36,4179,4181],{"class":38,"line":4180},15,[36,4182,4103],{"class":53},[36,4184,4186],{"class":38,"line":4185},16,[36,4187,4188],{"class":42},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,4190,4192,4194,4197,4199,4201,4204,4206,4208],{"class":38,"line":4191},17,[36,4193,4069],{"class":114},[36,4195,4196],{"class":53}," (",[36,4198,713],{"class":49},[36,4200,1507],{"class":114},[36,4202,4203],{"class":53},"num",[36,4205,1507],{"class":114},[36,4207,166],{"class":49},[36,4209,61],{"class":53},[36,4211,4213],{"class":38,"line":4212},18,[36,4214,4084],{"class":53},[36,4216,4218,4220,4222,4225,4227],{"class":38,"line":4217},19,[36,4219,4089],{"class":53},[36,4221,3717],{"class":114},[36,4223,4224],{"class":57},"\"小于100\"",[36,4226,3717],{"class":114},[36,4228,3739],{"class":53},[36,4230,4232],{"class":38,"line":4231},20,[36,4233,4103],{"class":53},[36,4235,4237,4240,4243,4246,4248,4250,4253,4255,4257,4260],{"class":38,"line":4236},21,[36,4238,4239],{"class":114},"else",[36,4241,4242],{"class":114}," if",[36,4244,4245],{"class":53}," (nmu",[36,4247,1490],{"class":114},[36,4249,166],{"class":49},[36,4251,4252],{"class":114},"&&",[36,4254,4203],{"class":53},[36,4256,1507],{"class":114},[36,4258,4259],{"class":49},"200",[36,4261,61],{"class":53},[36,4263,4265],{"class":38,"line":4264},22,[36,4266,4084],{"class":53},[36,4268,4270,4272,4274,4277,4279,4281],{"class":38,"line":4269},23,[36,4271,4089],{"class":53},[36,4273,3717],{"class":114},[36,4275,4276],{"class":57},"\"不小于100且小于200\"",[36,4278,3717],{"class":114},[36,4280,3781],{"class":53},[36,4282,4283],{"class":42}," \u002F\u002F可以无限else if,python中是elif：\n",[36,4285,4287],{"class":38,"line":4286},24,[36,4288,4103],{"class":53},[36,4290,4292],{"class":38,"line":4291},25,[36,4293,4158],{"class":114},[36,4295,4297],{"class":38,"line":4296},26,[36,4298,4084],{"class":53},[36,4300,4302,4304,4306,4309,4311],{"class":38,"line":4301},27,[36,4303,4089],{"class":53},[36,4305,3717],{"class":114},[36,4307,4308],{"class":57},"\"不小于200\"",[36,4310,3717],{"class":114},[36,4312,3739],{"class":53},[36,4314,4316],{"class":38,"line":4315},28,[36,4317,4103],{"class":53},[36,4319,4321],{"class":38,"line":4320},29,[36,4322,4323],{"class":42},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[433,4325,4326],{"start":46},[436,4327,4328],{},"三目运算符",[26,4330,4332],{"className":2693,"code":4331,"language":2695,"meta":31,"style":31},"\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",[33,4333,4334,4339,4344,4370,4392,4409,4414,4437,4452],{"__ignoreMap":31},[36,4335,4336],{"class":38,"line":39},[36,4337,4338],{"class":42},"\u002F\u002F创建三个变量a,b,c\n",[36,4340,4341],{"class":38,"line":46},[36,4342,4343],{"class":42},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,4345,4346,4348,4350,4352,4354,4357,4359,4361,4364,4366,4368],{"class":38,"line":82},[36,4347,232],{"class":114},[36,4349,3936],{"class":53},[36,4351,115],{"class":114},[36,4353,3376],{"class":49},[36,4355,4356],{"class":53},",b",[36,4358,115],{"class":114},[36,4360,1317],{"class":49},[36,4362,4363],{"class":53},",c",[36,4365,115],{"class":114},[36,4367,713],{"class":49},[36,4369,3833],{"class":53},[36,4371,4372,4374,4376,4379,4381,4383,4385,4387,4389],{"class":38,"line":88},[36,4373,2972],{"class":53},[36,4375,115],{"class":114},[36,4377,4378],{"class":53},"(a",[36,4380,3633],{"class":114},[36,4382,2947],{"class":53},[36,4384,3659],{"class":114},[36,4386,2923],{"class":53},[36,4388,3535],{"class":114},[36,4390,4391],{"class":53},"b)\n",[36,4393,4394,4396,4398,4401,4403,4405,4407],{"class":38,"line":195},[36,4395,3907],{"class":53},[36,4397,3717],{"class":114},[36,4399,4400],{"class":57},"\"c=\"",[36,4402,3717],{"class":114},[36,4404,2972],{"class":53},[36,4406,3717],{"class":114},[36,4408,3739],{"class":53},[36,4410,4411],{"class":38,"line":1517},[36,4412,4413],{"class":42},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,4415,4416,4418,4420,4422,4424,4426,4428,4431,4433,4435],{"class":38,"line":2421},[36,4417,4378],{"class":53},[36,4419,3633],{"class":114},[36,4421,2947],{"class":53},[36,4423,3659],{"class":114},[36,4425,2923],{"class":53},[36,4427,3535],{"class":114},[36,4429,4430],{"class":53},"b)",[36,4432,115],{"class":114},[36,4434,166],{"class":49},[36,4436,3833],{"class":53},[36,4438,4439,4441,4443,4445,4447,4449],{"class":38,"line":2446},[36,4440,3907],{"class":53},[36,4442,3717],{"class":114},[36,4444,2923],{"class":53},[36,4446,3717],{"class":114},[36,4448,3781],{"class":53},[36,4450,4451],{"class":42}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,4453,4454,4456,4458,4460,4462,4464],{"class":38,"line":2469},[36,4455,3907],{"class":53},[36,4457,3717],{"class":114},[36,4459,2947],{"class":53},[36,4461,3717],{"class":114},[36,4463,3781],{"class":53},[36,4465,4466],{"class":42}," \u002F\u002F10   a>b,b还是原值\n",[433,4468,4469],{"start":82},[436,4470,4471],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,4473,4475],{"className":2693,"code":4474,"language":2695,"meta":31,"style":31},"\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",[33,4476,4477,4482,4490,4504,4514,4518,4532,4545,4555,4563,4568,4592,4613,4634,4655,4677,4697,4717,4722],{"__ignoreMap":31},[36,4478,4479],{"class":38,"line":39},[36,4480,4481],{"class":42},"\u002F\u002F案例-电影打分\n",[36,4483,4484,4487],{"class":38,"line":46},[36,4485,4486],{"class":114},"#include",[36,4488,4489],{"class":57},"\u003Ciostream>\n",[36,4491,4492,4495,4498,4502],{"class":38,"line":82},[36,4493,4494],{"class":114},"using",[36,4496,4497],{"class":114}," namespace",[36,4499,4501],{"class":4500},"sScJk"," std",[36,4503,3833],{"class":53},[36,4505,4506,4508,4511],{"class":38,"line":88},[36,4507,232],{"class":114},[36,4509,4510],{"class":4500}," main",[36,4512,4513],{"class":53},"()\n",[36,4515,4516],{"class":38,"line":195},[36,4517,4084],{"class":53},[36,4519,4520,4523,4526,4528,4530],{"class":38,"line":1517},[36,4521,4522],{"class":114},"    int",[36,4524,4525],{"class":53}," score",[36,4527,115],{"class":114},[36,4529,713],{"class":49},[36,4531,3833],{"class":53},[36,4533,4534,4536,4538,4541,4543],{"class":38,"line":2421},[36,4535,4089],{"class":53},[36,4537,3717],{"class":114},[36,4539,4540],{"class":57},"\"电影打分：\"",[36,4542,3717],{"class":114},[36,4544,3739],{"class":53},[36,4546,4547,4550,4552],{"class":38,"line":2446},[36,4548,4549],{"class":53},"    cin",[36,4551,3967],{"class":114},[36,4553,4554],{"class":53},"score;\n",[36,4556,4557,4560],{"class":38,"line":2469},[36,4558,4559],{"class":114},"    switch",[36,4561,4562],{"class":53},"(score)\n",[36,4564,4565],{"class":38,"line":2492},[36,4566,4567],{"class":53},"    {\n",[36,4569,4570,4573,4575,4578,4580,4583,4585,4587,4590],{"class":38,"line":4150},[36,4571,4572],{"class":114},"        case",[36,4574,931],{"class":49},[36,4576,4577],{"class":53},":cout",[36,4579,3717],{"class":114},[36,4581,4582],{"class":57},"\"经典\"",[36,4584,3717],{"class":114},[36,4586,3781],{"class":53},[36,4588,4589],{"class":114},"break",[36,4591,3833],{"class":53},[36,4593,4594,4596,4599,4601,4603,4605,4607,4609,4611],{"class":38,"line":4155},[36,4595,4572],{"class":114},[36,4597,4598],{"class":49}," 9",[36,4600,4577],{"class":53},[36,4602,3717],{"class":114},[36,4604,4582],{"class":57},[36,4606,3717],{"class":114},[36,4608,3781],{"class":53},[36,4610,4589],{"class":114},[36,4612,3833],{"class":53},[36,4614,4615,4617,4619,4621,4623,4626,4628,4630,4632],{"class":38,"line":4161},[36,4616,4572],{"class":114},[36,4618,1354],{"class":49},[36,4620,4577],{"class":53},[36,4622,3717],{"class":114},[36,4624,4625],{"class":57},"\"非常好\"",[36,4627,3717],{"class":114},[36,4629,3781],{"class":53},[36,4631,4589],{"class":114},[36,4633,3833],{"class":53},[36,4635,4636,4638,4641,4643,4645,4647,4649,4651,4653],{"class":38,"line":4166},[36,4637,4572],{"class":114},[36,4639,4640],{"class":49}," 7",[36,4642,4577],{"class":53},[36,4644,3717],{"class":114},[36,4646,4625],{"class":57},[36,4648,3717],{"class":114},[36,4650,3781],{"class":53},[36,4652,4589],{"class":114},[36,4654,3833],{"class":53},[36,4656,4657,4659,4662,4664,4666,4669,4671,4673,4675],{"class":38,"line":4180},[36,4658,4572],{"class":114},[36,4660,4661],{"class":49}," 6",[36,4663,4577],{"class":53},[36,4665,3717],{"class":114},[36,4667,4668],{"class":57},"\"一般\"",[36,4670,3717],{"class":114},[36,4672,3781],{"class":53},[36,4674,4589],{"class":114},[36,4676,3833],{"class":53},[36,4678,4679,4681,4683,4685,4687,4689,4691,4693,4695],{"class":38,"line":4185},[36,4680,4572],{"class":114},[36,4682,1323],{"class":49},[36,4684,4577],{"class":53},[36,4686,3717],{"class":114},[36,4688,4668],{"class":57},[36,4690,3717],{"class":114},[36,4692,3781],{"class":53},[36,4694,4589],{"class":114},[36,4696,3833],{"class":53},[36,4698,4699,4702,4704,4706,4709,4711,4713,4715],{"class":38,"line":4191},[36,4700,4701],{"class":114},"        default",[36,4703,4577],{"class":53},[36,4705,3717],{"class":114},[36,4707,4708],{"class":57},"\"烂片\"",[36,4710,3717],{"class":114},[36,4712,3781],{"class":53},[36,4714,4589],{"class":114},[36,4716,3833],{"class":53},[36,4718,4719],{"class":38,"line":4212},[36,4720,4721],{"class":53},"    }\n",[36,4723,4724],{"class":38,"line":4217},[36,4725,4103],{"class":53},[19,4727,4728],{},"if和switch区别：",[3680,4730,4731,4734],{},[436,4732,4733],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[436,4735,4736],{},"switch优点：结构清晰，执行效率高",[997,4738,4740],{"id":4739},"_162循环结构","1.6.2循环结构",[433,4742,4743],{},[436,4744,4745],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,4747,4749],{"className":2693,"code":4748,"language":2695,"meta":31,"style":31},"\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",[33,4750,4751,4756,4764,4768,4781,4795,4799,4819,4829,4833,4845],{"__ignoreMap":31},[36,4752,4753],{"class":38,"line":39},[36,4754,4755],{"class":42},"\u002F\u002F打印0-9数字\n",[36,4757,4758,4760,4762],{"class":38,"line":46},[36,4759,232],{"class":114},[36,4761,4510],{"class":4500},[36,4763,4513],{"class":53},[36,4765,4766],{"class":38,"line":82},[36,4767,4084],{"class":53},[36,4769,4770,4772,4775,4777,4779],{"class":38,"line":88},[36,4771,4522],{"class":114},[36,4773,4774],{"class":53}," num",[36,4776,115],{"class":114},[36,4778,713],{"class":49},[36,4780,3833],{"class":53},[36,4782,4783,4786,4789,4791,4793],{"class":38,"line":195},[36,4784,4785],{"class":114},"    while",[36,4787,4788],{"class":53},"(num",[36,4790,1507],{"class":114},[36,4792,1317],{"class":49},[36,4794,61],{"class":53},[36,4796,4797],{"class":38,"line":1517},[36,4798,4567],{"class":53},[36,4800,4801,4804,4807,4809,4811,4813,4816],{"class":38,"line":2421},[36,4802,4803],{"class":4500},"       std",[36,4805,4806],{"class":53},"::cout",[36,4808,3717],{"class":114},[36,4810,4203],{"class":53},[36,4812,3717],{"class":114},[36,4814,4815],{"class":4500},"std",[36,4817,4818],{"class":53},"::endl;\n",[36,4820,4821,4824,4827],{"class":38,"line":2446},[36,4822,4823],{"class":53},"        num",[36,4825,4826],{"class":114},"++",[36,4828,3833],{"class":53},[36,4830,4831],{"class":38,"line":2469},[36,4832,4721],{"class":53},[36,4834,4835,4838,4840,4843],{"class":38,"line":2492},[36,4836,4837],{"class":4500},"    system",[36,4839,54],{"class":53},[36,4841,4842],{"class":57},"\"pause\"",[36,4844,61],{"class":53},[36,4846,4847],{"class":38,"line":4150},[36,4848,4103],{"class":53},[19,4850,4851],{},"注意：写好循环条件，避免死循环情况",[26,4853,4855],{"className":2693,"code":4854,"language":2695,"meta":31,"style":31},"\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",[33,4856,4857,4862,4869,4876,4886,4894,4898,4903,4929,4933,4938,4946,4973,4978,4983,4996,5006,5010,5020,5025,5038,5043,5057,5062,5077,5081,5094,5098,5103,5107,5121,5129,5134,5140,5146,5151],{"__ignoreMap":31},[36,4858,4859],{"class":38,"line":39},[36,4860,4861],{"class":42},"\u002F\u002F循环结构-猜数字\n",[36,4863,4864,4866],{"class":38,"line":46},[36,4865,4486],{"class":114},[36,4867,4868],{"class":57}," \u003Ciostream>\n",[36,4870,4871,4873],{"class":38,"line":82},[36,4872,4486],{"class":114},[36,4874,4875],{"class":57}," \u003Cctime>\n",[36,4877,4878,4880,4882,4884],{"class":38,"line":88},[36,4879,4494],{"class":114},[36,4881,4497],{"class":114},[36,4883,4501],{"class":4500},[36,4885,3833],{"class":53},[36,4887,4888,4890,4892],{"class":38,"line":195},[36,4889,232],{"class":114},[36,4891,4510],{"class":4500},[36,4893,4513],{"class":53},[36,4895,4896],{"class":38,"line":1517},[36,4897,4084],{"class":53},[36,4899,4900],{"class":38,"line":2421},[36,4901,4902],{"class":42},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,4904,4905,4908,4911,4914,4916,4918,4921,4923,4926],{"class":38,"line":2446},[36,4906,4907],{"class":4500},"    srand",[36,4909,4910],{"class":53},"((",[36,4912,4913],{"class":114},"unsigned",[36,4915,837],{"class":114},[36,4917,3110],{"class":53},[36,4919,4920],{"class":4500},"time",[36,4922,54],{"class":53},[36,4924,4925],{"class":49},"NULL",[36,4927,4928],{"class":53},"));\n",[36,4930,4931],{"class":38,"line":2469},[36,4932,546],{"emptyLinePlaceholder":545},[36,4934,4935],{"class":38,"line":2492},[36,4936,4937],{"class":42},"    \u002F\u002F1.系统生成随机数\n",[36,4939,4940,4943],{"class":38,"line":4150},[36,4941,4942],{"class":42},"    \u002F\u002Frand()%100",[36,4944,4945],{"class":42}," \u002F\u002F生成0-99的随机数\n",[36,4947,4948,4950,4952,4954,4957,4960,4962,4964,4966,4968,4970],{"class":38,"line":4155},[36,4949,4522],{"class":114},[36,4951,4774],{"class":53},[36,4953,115],{"class":114},[36,4955,4956],{"class":4500},"rand",[36,4958,4959],{"class":53},"()",[36,4961,1095],{"class":114},[36,4963,166],{"class":49},[36,4965,121],{"class":114},[36,4967,707],{"class":49},[36,4969,2752],{"class":53},[36,4971,4972],{"class":42}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,4974,4975],{"class":38,"line":4161},[36,4976,4977],{"class":42},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,4979,4980],{"class":38,"line":4166},[36,4981,4982],{"class":42},"    \u002F\u002F2.玩家猜测\n",[36,4984,4985,4987,4990,4992,4994],{"class":38,"line":4180},[36,4986,4522],{"class":114},[36,4988,4989],{"class":53}," val",[36,4991,115],{"class":114},[36,4993,713],{"class":49},[36,4995,3833],{"class":53},[36,4997,4998,5000,5002,5004],{"class":38,"line":4185},[36,4999,4785],{"class":114},[36,5001,4196],{"class":53},[36,5003,707],{"class":49},[36,5005,61],{"class":53},[36,5007,5008],{"class":38,"line":4191},[36,5009,4567],{"class":53},[36,5011,5012,5015,5017],{"class":38,"line":4212},[36,5013,5014],{"class":53},"        cin",[36,5016,3967],{"class":114},[36,5018,5019],{"class":53},"val;\n",[36,5021,5022],{"class":38,"line":4217},[36,5023,5024],{"class":42},"        \u002F\u002F3.判断玩家猜测\n",[36,5026,5027,5030,5033,5035],{"class":38,"line":4231},[36,5028,5029],{"class":114},"        if",[36,5031,5032],{"class":53},"(val",[36,5034,1507],{"class":114},[36,5036,5037],{"class":53},"num) \n",[36,5039,5040],{"class":38,"line":4236},[36,5041,5042],{"class":53},"        {\n",[36,5044,5045,5048,5050,5053,5055],{"class":38,"line":4264},[36,5046,5047],{"class":53},"            cout",[36,5049,3717],{"class":114},[36,5051,5052],{"class":57},"\"猜小了！\"",[36,5054,3717],{"class":114},[36,5056,3739],{"class":53},[36,5058,5059],{"class":38,"line":4269},[36,5060,5061],{"class":53},"        }\n",[36,5063,5064,5067,5069,5072,5074],{"class":38,"line":4286},[36,5065,5066],{"class":114},"        else",[36,5068,4242],{"class":114},[36,5070,5071],{"class":53}," (val",[36,5073,3633],{"class":114},[36,5075,5076],{"class":53},"num)\n",[36,5078,5079],{"class":38,"line":4291},[36,5080,5042],{"class":53},[36,5082,5083,5085,5087,5090,5092],{"class":38,"line":4296},[36,5084,5047],{"class":53},[36,5086,3717],{"class":114},[36,5088,5089],{"class":57},"\"猜大了！\"",[36,5091,3717],{"class":114},[36,5093,3739],{"class":53},[36,5095,5096],{"class":38,"line":4301},[36,5097,5061],{"class":53},[36,5099,5100],{"class":38,"line":4315},[36,5101,5102],{"class":114},"        else\n",[36,5104,5105],{"class":38,"line":4320},[36,5106,5042],{"class":53},[36,5108,5110,5112,5114,5117,5119],{"class":38,"line":5109},30,[36,5111,5047],{"class":53},[36,5113,3717],{"class":114},[36,5115,5116],{"class":57},"\"猜对了！\"",[36,5118,3717],{"class":114},[36,5120,3739],{"class":53},[36,5122,5124,5127],{"class":38,"line":5123},31,[36,5125,5126],{"class":114},"            break",[36,5128,3833],{"class":53},[36,5130,5132],{"class":38,"line":5131},32,[36,5133,5061],{"class":53},[36,5135,5137],{"class":38,"line":5136},33,[36,5138,5139],{"class":42},"        \u002F\u002F猜对 退出游戏\n",[36,5141,5143],{"class":38,"line":5142},34,[36,5144,5145],{"class":42},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,5147,5149],{"class":38,"line":5148},35,[36,5150,4721],{"class":53},[36,5152,5154],{"class":38,"line":5153},36,[36,5155,4103],{"class":53},[433,5157,5158],{"start":46},[436,5159,5160,5161,5164],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2839,5162,5163],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,5166,5168],{"className":2693,"code":5167,"language":2695,"meta":31,"style":31},"\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",[33,5169,5170,5175,5183,5187,5199,5207,5211,5228,5235,5239,5252,5262],{"__ignoreMap":31},[36,5171,5172],{"class":38,"line":39},[36,5173,5174],{"class":42},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,5176,5177,5179,5181],{"class":38,"line":46},[36,5178,232],{"class":114},[36,5180,4510],{"class":4500},[36,5182,4513],{"class":53},[36,5184,5185],{"class":38,"line":82},[36,5186,4084],{"class":53},[36,5188,5189,5191,5193,5195,5197],{"class":38,"line":88},[36,5190,4522],{"class":114},[36,5192,4774],{"class":53},[36,5194,115],{"class":114},[36,5196,713],{"class":49},[36,5198,3833],{"class":53},[36,5200,5201,5204],{"class":38,"line":195},[36,5202,5203],{"class":114},"    do",[36,5205,5206],{"class":53}," \n",[36,5208,5209],{"class":38,"line":1517},[36,5210,4567],{"class":53},[36,5212,5213,5216,5218,5220,5222,5224,5226],{"class":38,"line":2421},[36,5214,5215],{"class":4500},"        std",[36,5217,4806],{"class":53},[36,5219,3717],{"class":114},[36,5221,4203],{"class":53},[36,5223,3717],{"class":114},[36,5225,4815],{"class":4500},[36,5227,4818],{"class":53},[36,5229,5230,5232],{"class":38,"line":2446},[36,5231,4823],{"class":53},[36,5233,5234],{"class":114},"++\n",[36,5236,5237],{"class":38,"line":2469},[36,5238,4721],{"class":53},[36,5240,5241,5243,5245,5247,5249],{"class":38,"line":2492},[36,5242,4785],{"class":114},[36,5244,4788],{"class":53},[36,5246,1507],{"class":114},[36,5248,1317],{"class":49},[36,5250,5251],{"class":53},");\n",[36,5253,5254,5256,5258,5260],{"class":38,"line":4150},[36,5255,4837],{"class":4500},[36,5257,54],{"class":53},[36,5259,4842],{"class":57},[36,5261,5251],{"class":53},[36,5263,5264],{"class":38,"line":4155},[36,5265,4103],{"class":53},[19,5267,5268],{},"案例-水仙花数",[19,5270,5271],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5273,5274],{},"例如：1^3+5^3+3^3=153",[19,5276,5277],{},"请用do...while语句，求出所有3位数的水仙花数",[26,5279,5281],{"className":2693,"code":5280,"language":2695,"meta":31,"style":31},"#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",[33,5282,5283,5289,5299,5307,5311,5316,5328,5334,5338,5343,5359,5375,5391,5406,5425,5440,5487,5491,5503,5507,5515,5519,5533],{"__ignoreMap":31},[36,5284,5285,5287],{"class":38,"line":39},[36,5286,4486],{"class":114},[36,5288,4868],{"class":57},[36,5290,5291,5293,5295,5297],{"class":38,"line":46},[36,5292,4494],{"class":114},[36,5294,4497],{"class":114},[36,5296,4501],{"class":4500},[36,5298,3833],{"class":53},[36,5300,5301,5303,5305],{"class":38,"line":82},[36,5302,232],{"class":114},[36,5304,4510],{"class":4500},[36,5306,4513],{"class":53},[36,5308,5309],{"class":38,"line":88},[36,5310,4084],{"class":53},[36,5312,5313],{"class":38,"line":195},[36,5314,5315],{"class":42},"    \u002F\u002F1.先打印所有三位数字\n",[36,5317,5318,5320,5322,5324,5326],{"class":38,"line":1517},[36,5319,4522],{"class":114},[36,5321,4774],{"class":53},[36,5323,115],{"class":114},[36,5325,166],{"class":49},[36,5327,3833],{"class":53},[36,5329,5330,5332],{"class":38,"line":2421},[36,5331,5203],{"class":114},[36,5333,5206],{"class":53},[36,5335,5336],{"class":38,"line":2446},[36,5337,4567],{"class":53},[36,5339,5340],{"class":38,"line":2469},[36,5341,5342],{"class":42},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,5344,5345,5348,5350,5352,5354,5356],{"class":38,"line":2492},[36,5346,5347],{"class":114},"        int",[36,5349,3936],{"class":53},[36,5351,115],{"class":114},[36,5353,713],{"class":49},[36,5355,2752],{"class":53},[36,5357,5358],{"class":42}," \u002F\u002F个位\n",[36,5360,5361,5363,5366,5368,5370,5372],{"class":38,"line":4150},[36,5362,5347],{"class":114},[36,5364,5365],{"class":53}," b",[36,5367,115],{"class":114},[36,5369,713],{"class":49},[36,5371,2752],{"class":53},[36,5373,5374],{"class":42}," \u002F\u002F十位\n",[36,5376,5377,5379,5382,5384,5386,5388],{"class":38,"line":4155},[36,5378,5347],{"class":114},[36,5380,5381],{"class":53}," c",[36,5383,115],{"class":114},[36,5385,713],{"class":49},[36,5387,2752],{"class":53},[36,5389,5390],{"class":42}," \u002F\u002F百位\n",[36,5392,5393,5396,5398,5400,5402,5404],{"class":38,"line":4161},[36,5394,5395],{"class":53},"        a",[36,5397,115],{"class":114},[36,5399,4203],{"class":53},[36,5401,1095],{"class":114},[36,5403,1317],{"class":49},[36,5405,3833],{"class":53},[36,5407,5408,5411,5413,5415,5417,5419,5421,5423],{"class":38,"line":4166},[36,5409,5410],{"class":53},"        b",[36,5412,115],{"class":114},[36,5414,4203],{"class":53},[36,5416,1065],{"class":114},[36,5418,1317],{"class":49},[36,5420,1095],{"class":114},[36,5422,1317],{"class":49},[36,5424,3833],{"class":53},[36,5426,5427,5430,5432,5434,5436,5438],{"class":38,"line":4180},[36,5428,5429],{"class":53},"        c",[36,5431,115],{"class":114},[36,5433,4203],{"class":53},[36,5435,1065],{"class":114},[36,5437,166],{"class":49},[36,5439,3833],{"class":53},[36,5441,5442,5444,5446,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5479,5481,5484],{"class":38,"line":4185},[36,5443,5029],{"class":114},[36,5445,4378],{"class":53},[36,5447,1050],{"class":114},[36,5449,2923],{"class":53},[36,5451,1050],{"class":114},[36,5453,2923],{"class":53},[36,5455,121],{"class":114},[36,5457,2947],{"class":53},[36,5459,1050],{"class":114},[36,5461,2947],{"class":53},[36,5463,1050],{"class":114},[36,5465,2947],{"class":53},[36,5467,121],{"class":114},[36,5469,2972],{"class":53},[36,5471,1050],{"class":114},[36,5473,2972],{"class":53},[36,5475,1050],{"class":114},[36,5477,5478],{"class":53},"c ",[36,5480,1377],{"class":114},[36,5482,5483],{"class":53}," num)",[36,5485,5486],{"class":42}," \u002F\u002F如果是水仙花数，才打印\n",[36,5488,5489],{"class":38,"line":4191},[36,5490,5042],{"class":53},[36,5492,5493,5495,5497,5499,5501],{"class":38,"line":4212},[36,5494,5047],{"class":53},[36,5496,3717],{"class":114},[36,5498,4203],{"class":53},[36,5500,3717],{"class":114},[36,5502,3739],{"class":53},[36,5504,5505],{"class":38,"line":4217},[36,5506,5061],{"class":53},[36,5508,5509,5511,5513],{"class":38,"line":4231},[36,5510,4823],{"class":53},[36,5512,4826],{"class":114},[36,5514,3833],{"class":53},[36,5516,5517],{"class":38,"line":4236},[36,5518,4721],{"class":53},[36,5520,5521,5523,5526,5528,5531],{"class":38,"line":4264},[36,5522,4785],{"class":114},[36,5524,5525],{"class":53}," (num ",[36,5527,1507],{"class":114},[36,5529,5530],{"class":49}," 1000",[36,5532,5251],{"class":53},[36,5534,5535],{"class":38,"line":4269},[36,5536,4103],{"class":53},[433,5538,5539],{"start":82},[436,5540,5541],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,5543,5545],{"className":2693,"code":5544,"language":2695,"meta":31,"style":31},"\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",[33,5546,5547,5552,5581,5585,5597,5601,5606,5617,5624,5628,5642,5646,5653,5657,5669,5678],{"__ignoreMap":31},[36,5548,5549],{"class":38,"line":39},[36,5550,5551],{"class":42},"\u002F\u002F从数字0-9打印\n",[36,5553,5554,5557,5559,5561,5564,5566,5568,5571,5573,5575,5577,5579],{"class":38,"line":46},[36,5555,5556],{"class":114},"for",[36,5558,54],{"class":53},[36,5560,232],{"class":114},[36,5562,5563],{"class":53}," i",[36,5565,115],{"class":114},[36,5567,713],{"class":49},[36,5569,5570],{"class":53},";i",[36,5572,1507],{"class":114},[36,5574,1317],{"class":49},[36,5576,5570],{"class":53},[36,5578,4826],{"class":114},[36,5580,61],{"class":53},[36,5582,5583],{"class":38,"line":82},[36,5584,4084],{"class":53},[36,5586,5587,5589,5591,5593,5595],{"class":38,"line":88},[36,5588,4089],{"class":53},[36,5590,3717],{"class":114},[36,5592,3122],{"class":53},[36,5594,3717],{"class":114},[36,5596,3739],{"class":53},[36,5598,5599],{"class":38,"line":195},[36,5600,4103],{"class":53},[36,5602,5603],{"class":38,"line":1517},[36,5604,5605],{"class":42},"\u002F\u002F上式可以进行拆分\n",[36,5607,5608,5610,5612,5614],{"class":38,"line":2421},[36,5609,232],{"class":114},[36,5611,5563],{"class":53},[36,5613,115],{"class":114},[36,5615,5616],{"class":49},"0\n",[36,5618,5619,5621],{"class":38,"line":2446},[36,5620,5556],{"class":114},[36,5622,5623],{"class":53},"(;;;)\n",[36,5625,5626],{"class":38,"line":2469},[36,5627,4084],{"class":53},[36,5629,5630,5633,5636,5638,5640],{"class":38,"line":2492},[36,5631,5632],{"class":114},"    if",[36,5634,5635],{"class":53},"(i",[36,5637,1490],{"class":114},[36,5639,1317],{"class":49},[36,5641,61],{"class":53},[36,5643,5644],{"class":38,"line":4150},[36,5645,4567],{"class":53},[36,5647,5648,5651],{"class":38,"line":4155},[36,5649,5650],{"class":114},"        break",[36,5652,3833],{"class":53},[36,5654,5655],{"class":38,"line":4161},[36,5656,4721],{"class":53},[36,5658,5659,5661,5663,5665,5667],{"class":38,"line":4166},[36,5660,4089],{"class":53},[36,5662,3717],{"class":114},[36,5664,3122],{"class":53},[36,5666,3717],{"class":114},[36,5668,3739],{"class":53},[36,5670,5671,5674,5676],{"class":38,"line":4180},[36,5672,5673],{"class":53},"    i",[36,5675,4826],{"class":114},[36,5677,3833],{"class":53},[36,5679,5680],{"class":38,"line":4185},[36,5681,4103],{"class":53},[19,5683,5684],{},"小练习",[26,5686,5688],{"className":2693,"code":5687,"language":2695,"meta":31,"style":31},"#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",[33,5689,5690,5696,5706,5714,5718,5723,5728,5756,5760,5765,5770,5811,5815,5828,5832,5836,5840,5852,5856,5860],{"__ignoreMap":31},[36,5691,5692,5694],{"class":38,"line":39},[36,5693,4486],{"class":114},[36,5695,4489],{"class":57},[36,5697,5698,5700,5702,5704],{"class":38,"line":46},[36,5699,4494],{"class":114},[36,5701,4497],{"class":114},[36,5703,4501],{"class":4500},[36,5705,3833],{"class":53},[36,5707,5708,5710,5712],{"class":38,"line":82},[36,5709,232],{"class":114},[36,5711,4510],{"class":4500},[36,5713,4513],{"class":53},[36,5715,5716],{"class":38,"line":88},[36,5717,4084],{"class":53},[36,5719,5720],{"class":38,"line":195},[36,5721,5722],{"class":42},"    \u002F\u002F敲桌子案例\n",[36,5724,5725],{"class":38,"line":1517},[36,5726,5727],{"class":42},"    \u002F\u002F1.先输出1-100的数字\n",[36,5729,5730,5733,5735,5737,5739,5741,5743,5746,5748,5750,5752,5754],{"class":38,"line":2421},[36,5731,5732],{"class":114},"    for",[36,5734,54],{"class":53},[36,5736,232],{"class":114},[36,5738,5563],{"class":53},[36,5740,115],{"class":114},[36,5742,707],{"class":49},[36,5744,5745],{"class":53},"; i",[36,5747,4126],{"class":114},[36,5749,166],{"class":49},[36,5751,5745],{"class":53},[36,5753,4826],{"class":114},[36,5755,61],{"class":53},[36,5757,5758],{"class":38,"line":2446},[36,5759,4567],{"class":53},[36,5761,5762],{"class":38,"line":2469},[36,5763,5764],{"class":42},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,5766,5767],{"class":38,"line":2492},[36,5768,5769],{"class":42},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,5771,5772,5774,5776,5778,5780,5782,5784,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809],{"class":38,"line":4150},[36,5773,5029],{"class":114},[36,5775,5635],{"class":53},[36,5777,1095],{"class":114},[36,5779,3050],{"class":49},[36,5781,1377],{"class":114},[36,5783,713],{"class":49},[36,5785,5786],{"class":114}," ||",[36,5788,5563],{"class":53},[36,5790,1095],{"class":114},[36,5792,1317],{"class":49},[36,5794,1377],{"class":114},[36,5796,3050],{"class":49},[36,5798,5786],{"class":114},[36,5800,5563],{"class":53},[36,5802,1065],{"class":114},[36,5804,1317],{"class":49},[36,5806,1377],{"class":114},[36,5808,3050],{"class":49},[36,5810,61],{"class":53},[36,5812,5813],{"class":38,"line":4155},[36,5814,5042],{"class":53},[36,5816,5817,5819,5821,5824,5826],{"class":38,"line":4161},[36,5818,5047],{"class":53},[36,5820,3717],{"class":114},[36,5822,5823],{"class":57},"\"敲桌子\"",[36,5825,3717],{"class":114},[36,5827,3739],{"class":53},[36,5829,5830],{"class":38,"line":4166},[36,5831,5061],{"class":53},[36,5833,5834],{"class":38,"line":4180},[36,5835,5102],{"class":114},[36,5837,5838],{"class":38,"line":4185},[36,5839,5042],{"class":53},[36,5841,5842,5844,5846,5848,5850],{"class":38,"line":4191},[36,5843,5047],{"class":53},[36,5845,3717],{"class":114},[36,5847,3122],{"class":53},[36,5849,3717],{"class":114},[36,5851,3739],{"class":53},[36,5853,5854],{"class":38,"line":4212},[36,5855,5061],{"class":53},[36,5857,5858],{"class":38,"line":4217},[36,5859,4721],{"class":53},[36,5861,5862],{"class":38,"line":4231},[36,5863,4103],{"class":53},[19,5865,5866],{},"嵌套实现星图",[26,5868,5870],{"className":2693,"code":5869,"language":2695,"meta":31,"style":31},"#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",[33,5871,5872,5878,5888,5896,5900,5926,5930,5959,5963,5974,5978,5987,5991],{"__ignoreMap":31},[36,5873,5874,5876],{"class":38,"line":39},[36,5875,4486],{"class":114},[36,5877,4489],{"class":57},[36,5879,5880,5882,5884,5886],{"class":38,"line":46},[36,5881,4494],{"class":114},[36,5883,4497],{"class":114},[36,5885,4501],{"class":4500},[36,5887,3833],{"class":53},[36,5889,5890,5892,5894],{"class":38,"line":82},[36,5891,232],{"class":114},[36,5893,4510],{"class":4500},[36,5895,4513],{"class":53},[36,5897,5898],{"class":38,"line":88},[36,5899,4084],{"class":53},[36,5901,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924],{"class":38,"line":195},[36,5903,5732],{"class":114},[36,5905,4196],{"class":53},[36,5907,232],{"class":114},[36,5909,5563],{"class":53},[36,5911,115],{"class":114},[36,5913,713],{"class":49},[36,5915,5570],{"class":53},[36,5917,1507],{"class":114},[36,5919,1317],{"class":49},[36,5921,5570],{"class":53},[36,5923,4826],{"class":114},[36,5925,61],{"class":53},[36,5927,5928],{"class":38,"line":1517},[36,5929,4567],{"class":53},[36,5931,5932,5935,5937,5939,5942,5944,5946,5949,5951,5953,5955,5957],{"class":38,"line":2421},[36,5933,5934],{"class":114},"        for",[36,5936,4196],{"class":53},[36,5938,232],{"class":114},[36,5940,5941],{"class":53}," j",[36,5943,115],{"class":114},[36,5945,713],{"class":49},[36,5947,5948],{"class":53},";j",[36,5950,1507],{"class":114},[36,5952,1317],{"class":49},[36,5954,5948],{"class":53},[36,5956,4826],{"class":114},[36,5958,61],{"class":53},[36,5960,5961],{"class":38,"line":2446},[36,5962,5042],{"class":53},[36,5964,5965,5967,5969,5972],{"class":38,"line":2469},[36,5966,5047],{"class":53},[36,5968,3717],{"class":114},[36,5970,5971],{"class":57},"\"*\"",[36,5973,3833],{"class":53},[36,5975,5976],{"class":38,"line":2492},[36,5977,5061],{"class":53},[36,5979,5980,5983,5985],{"class":38,"line":4150},[36,5981,5982],{"class":53},"        cout",[36,5984,3717],{"class":114},[36,5986,3739],{"class":53},[36,5988,5989],{"class":38,"line":4155},[36,5990,4721],{"class":53},[36,5992,5993],{"class":38,"line":4161},[36,5994,4103],{"class":53},[19,5996,5997],{},"乘法口诀表",[26,5999,6001],{"className":2693,"code":6000,"language":2695,"meta":31,"style":31},"#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",[33,6002,6003,6009,6019,6027,6031,6057,6061,6086,6090,6130,6134,6142,6146],{"__ignoreMap":31},[36,6004,6005,6007],{"class":38,"line":39},[36,6006,4486],{"class":114},[36,6008,4868],{"class":57},[36,6010,6011,6013,6015,6017],{"class":38,"line":46},[36,6012,4494],{"class":114},[36,6014,4497],{"class":114},[36,6016,4501],{"class":4500},[36,6018,3833],{"class":53},[36,6020,6021,6023,6025],{"class":38,"line":82},[36,6022,232],{"class":114},[36,6024,4510],{"class":4500},[36,6026,4513],{"class":53},[36,6028,6029],{"class":38,"line":88},[36,6030,4084],{"class":53},[36,6032,6033,6035,6037,6039,6041,6043,6045,6047,6049,6051,6053,6055],{"class":38,"line":195},[36,6034,5732],{"class":114},[36,6036,54],{"class":53},[36,6038,232],{"class":114},[36,6040,5563],{"class":53},[36,6042,115],{"class":114},[36,6044,707],{"class":49},[36,6046,5570],{"class":53},[36,6048,1507],{"class":114},[36,6050,1317],{"class":49},[36,6052,5570],{"class":53},[36,6054,4826],{"class":114},[36,6056,61],{"class":53},[36,6058,6059],{"class":38,"line":1517},[36,6060,4567],{"class":53},[36,6062,6063,6065,6067,6069,6071,6073,6075,6077,6079,6082,6084],{"class":38,"line":2421},[36,6064,5934],{"class":114},[36,6066,54],{"class":53},[36,6068,232],{"class":114},[36,6070,5941],{"class":53},[36,6072,115],{"class":114},[36,6074,707],{"class":49},[36,6076,5948],{"class":53},[36,6078,4126],{"class":114},[36,6080,6081],{"class":53},"i;j",[36,6083,4826],{"class":114},[36,6085,61],{"class":53},[36,6087,6088],{"class":38,"line":2446},[36,6089,5042],{"class":53},[36,6091,6092,6094,6096,6098,6100,6102,6104,6106,6108,6111,6113,6115,6117,6119,6121,6124,6126,6128],{"class":38,"line":2469},[36,6093,5047],{"class":53},[36,6095,3717],{"class":114},[36,6097,3146],{"class":53},[36,6099,3717],{"class":114},[36,6101,5971],{"class":57},[36,6103,3717],{"class":114},[36,6105,3122],{"class":53},[36,6107,3717],{"class":114},[36,6109,6110],{"class":57},"\"=\"",[36,6112,3717],{"class":114},[36,6114,3122],{"class":53},[36,6116,1050],{"class":114},[36,6118,3146],{"class":53},[36,6120,3717],{"class":114},[36,6122,6123],{"class":57},"'",[36,6125,1654],{"class":49},[36,6127,6123],{"class":57},[36,6129,3833],{"class":53},[36,6131,6132],{"class":38,"line":2492},[36,6133,5061],{"class":53},[36,6135,6136,6138,6140],{"class":38,"line":4150},[36,6137,5982],{"class":53},[36,6139,3717],{"class":114},[36,6141,3739],{"class":53},[36,6143,6144],{"class":38,"line":4155},[36,6145,4721],{"class":53},[36,6147,6148],{"class":38,"line":4161},[36,6149,4103],{"class":53},[997,6151,6153],{"id":6152},"_163跳出语句","1.6.3跳出语句",[433,6155,6156],{},[436,6157,6158],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6160,6161],{},"break使用时机：",[3680,6163,6164,6167,6170],{},[436,6165,6166],{},"出现在switch条件语句中，作用是终止case并跳出switch",[436,6168,6169],{},"出现在循环结构中，作用是跳出当前的循环结构",[436,6171,6172],{},"出现在嵌套循环中，跳出最近的内层循环语句",[433,6174,6175,6178],{"start":46},[436,6176,6177],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[436,6179,6180],{},"goto语句\n语法：goto 标记;",[19,6182,6183],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,6185,6187],{"className":2693,"code":6186,"language":2695,"meta":31,"style":31},"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",[33,6188,6189,6197,6201,6214,6224,6237,6250,6263,6271,6287],{"__ignoreMap":31},[36,6190,6191,6193,6195],{"class":38,"line":39},[36,6192,232],{"class":114},[36,6194,4510],{"class":4500},[36,6196,4513],{"class":53},[36,6198,6199],{"class":38,"line":46},[36,6200,4084],{"class":53},[36,6202,6203,6205,6207,6210,6212],{"class":38,"line":82},[36,6204,4089],{"class":53},[36,6206,3717],{"class":114},[36,6208,6209],{"class":57},"\"1\"",[36,6211,3717],{"class":114},[36,6213,3739],{"class":53},[36,6215,6216,6219,6222],{"class":38,"line":88},[36,6217,6218],{"class":114},"    goto",[36,6220,6221],{"class":4500}," FLAG",[36,6223,3833],{"class":53},[36,6225,6226,6228,6230,6233,6235],{"class":38,"line":195},[36,6227,4089],{"class":53},[36,6229,3717],{"class":114},[36,6231,6232],{"class":57},"\"2\"",[36,6234,3717],{"class":114},[36,6236,3739],{"class":53},[36,6238,6239,6241,6243,6246,6248],{"class":38,"line":1517},[36,6240,4089],{"class":53},[36,6242,3717],{"class":114},[36,6244,6245],{"class":57},"\"3\"",[36,6247,3717],{"class":114},[36,6249,3739],{"class":53},[36,6251,6252,6254,6256,6259,6261],{"class":38,"line":2421},[36,6253,4089],{"class":53},[36,6255,3717],{"class":114},[36,6257,6258],{"class":57},"\"4\"",[36,6260,3717],{"class":114},[36,6262,3739],{"class":53},[36,6264,6265,6268],{"class":38,"line":2446},[36,6266,6267],{"class":4500},"    FLAG",[36,6269,6270],{"class":53},":\n",[36,6272,6273,6275,6277,6280,6282,6284],{"class":38,"line":2469},[36,6274,4089],{"class":53},[36,6276,3717],{"class":114},[36,6278,6279],{"class":57},"\"5\"",[36,6281,3717],{"class":114},[36,6283,3781],{"class":53},[36,6285,6286],{"class":42},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,6288,6289],{"class":38,"line":2492},[36,6290,4103],{"class":53},[14,6292,6294],{"id":6293},"_17数组","1.7数组",[997,6296,6298],{"id":6297},"_171一维数组","1.7.1一维数组",[433,6300,6301],{},[436,6302,6303],{},"一维数组定义方式",[206,6305,6306,6316],{},[209,6307,6308],{},[212,6309,6310,6313],{},[215,6311,6312],{},"方式",[215,6314,6315],{},"注意事项",[225,6317,6318,6332,6342],{},[212,6319,6320,6326],{},[230,6321,6322,6323,2752],{},"数据类型 数组名",[36,6324,6325],{},"数组长度",[230,6327,6328,6329,6331],{},"这种方式是先定义再arr",[36,6330,3122],{},"赋值",[212,6333,6334,6339],{},[230,6335,6322,6336,6338],{},[36,6337,6325],{},"={值1,值2....};",[230,6340,6341],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[212,6343,6344,6348],{},[230,6345,6322,6346,6338],{},[36,6347],{},[230,6349,6350,6351,6353],{},"int arr",[36,6352],{},";这是不正确的，按照这样的方式定义必须有初始长度",[433,6355,6356],{"start":46},[436,6357,6358],{},"一维数组数组名\n用途：",[3680,6360,6361],{},[436,6362,6363],{},"1.可以统计整个数组在内存中的长度：",[26,6365,6367],{"className":2693,"code":6366,"language":2695,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,6368,6369,6376],{"__ignoreMap":31},[36,6370,6371,6373],{"class":38,"line":39},[36,6372,2702],{"class":114},[36,6374,6375],{"class":53},"(arr);\n",[36,6377,6378,6380,6383,6385],{"class":38,"line":46},[36,6379,2702],{"class":114},[36,6381,6382],{"class":53},"(arr[",[36,6384,713],{"class":49},[36,6386,6387],{"class":53},"]);\n",[3680,6389,6390],{},[436,6391,6392],{},"2.可以获取数组在内存中的首地址:",[26,6394,6396],{"className":2693,"code":6395,"language":2695,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,6397,6398,6403,6416,6421],{"__ignoreMap":31},[36,6399,6400],{"class":38,"line":39},[36,6401,6402],{"class":42},"\u002F\u002F查看16进制的首地址\n",[36,6404,6405,6407,6409,6412,6414],{"class":38,"line":46},[36,6406,3907],{"class":53},[36,6408,3717],{"class":114},[36,6410,6411],{"class":53},"arr",[36,6413,3717],{"class":114},[36,6415,3739],{"class":53},[36,6417,6418],{"class":38,"line":82},[36,6419,6420],{"class":42},"\u002F\u002F看10进制数\n",[36,6422,6423,6425,6427,6429,6431,6433,6435,6438,6440,6442,6444],{"class":38,"line":88},[36,6424,3907],{"class":53},[36,6426,3717],{"class":114},[36,6428,54],{"class":53},[36,6430,232],{"class":114},[36,6432,3110],{"class":53},[36,6434,3034],{"class":114},[36,6436,6437],{"class":53},"arr[",[36,6439,713],{"class":49},[36,6441,3614],{"class":53},[36,6443,3717],{"class":114},[36,6445,3739],{"class":53},[19,6447,6448],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3680,6450,6451],{},[436,6452,6453],{},"1️⃣五只小猪称体重",[26,6455,6457],{"className":2693,"code":6456,"language":2695,"meta":31,"style":31},"#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",[33,6458,6459,6465,6475,6483,6487,6527,6540,6566,6570,6582,6586,6596,6600,6604,6617,6627],{"__ignoreMap":31},[36,6460,6461,6463],{"class":38,"line":39},[36,6462,4486],{"class":114},[36,6464,4489],{"class":57},[36,6466,6467,6469,6471,6473],{"class":38,"line":46},[36,6468,4494],{"class":114},[36,6470,4497],{"class":114},[36,6472,4501],{"class":4500},[36,6474,3833],{"class":53},[36,6476,6477,6479,6481],{"class":38,"line":82},[36,6478,232],{"class":114},[36,6480,4510],{"class":4500},[36,6482,4513],{"class":53},[36,6484,6485],{"class":38,"line":88},[36,6486,4084],{"class":53},[36,6488,6489,6491,6494,6496,6498,6500,6502,6505,6507,6510,6512,6514,6516,6519,6521,6524],{"class":38,"line":195},[36,6490,4522],{"class":114},[36,6492,6493],{"class":53}," arr[",[36,6495,1134],{"class":49},[36,6497,3614],{"class":53},[36,6499,115],{"class":114},[36,6501,2065],{"class":53},[36,6503,6504],{"class":49},"300",[36,6506,3059],{"class":53},[36,6508,6509],{"class":49},"350",[36,6511,3059],{"class":53},[36,6513,4259],{"class":49},[36,6515,3059],{"class":53},[36,6517,6518],{"class":49},"400",[36,6520,3059],{"class":53},[36,6522,6523],{"class":49},"250",[36,6525,6526],{"class":53},"};\n",[36,6528,6529,6531,6534,6536,6538],{"class":38,"line":1517},[36,6530,4522],{"class":114},[36,6532,6533],{"class":53}," tmp",[36,6535,115],{"class":114},[36,6537,713],{"class":49},[36,6539,3833],{"class":53},[36,6541,6542,6544,6546,6548,6550,6552,6554,6556,6558,6560,6562,6564],{"class":38,"line":2421},[36,6543,5732],{"class":114},[36,6545,4196],{"class":53},[36,6547,232],{"class":114},[36,6549,5563],{"class":53},[36,6551,115],{"class":114},[36,6553,713],{"class":49},[36,6555,5570],{"class":53},[36,6557,1507],{"class":114},[36,6559,1134],{"class":49},[36,6561,5570],{"class":53},[36,6563,4826],{"class":114},[36,6565,61],{"class":53},[36,6567,6568],{"class":38,"line":2446},[36,6569,4567],{"class":53},[36,6571,6572,6574,6577,6579],{"class":38,"line":2469},[36,6573,5029],{"class":114},[36,6575,6576],{"class":53},"(tmp",[36,6578,1507],{"class":114},[36,6580,6581],{"class":53},"arr[i])\n",[36,6583,6584],{"class":38,"line":2492},[36,6585,5042],{"class":53},[36,6587,6588,6591,6593],{"class":38,"line":4150},[36,6589,6590],{"class":53},"            tmp",[36,6592,115],{"class":114},[36,6594,6595],{"class":53},"arr[i];\n",[36,6597,6598],{"class":38,"line":4155},[36,6599,5061],{"class":53},[36,6601,6602],{"class":38,"line":4161},[36,6603,4721],{"class":53},[36,6605,6606,6608,6610,6613,6615],{"class":38,"line":4166},[36,6607,4089],{"class":53},[36,6609,3717],{"class":114},[36,6611,6612],{"class":53},"tmp",[36,6614,3717],{"class":114},[36,6616,3739],{"class":53},[36,6618,6619,6622,6625],{"class":38,"line":4180},[36,6620,6621],{"class":114},"    return",[36,6623,6624],{"class":49}," 0",[36,6626,3833],{"class":53},[36,6628,6629],{"class":38,"line":4185},[36,6630,4103],{"class":53},[3680,6632,6633],{},[436,6634,6635],{},"2️⃣数组元素逆置",[26,6637,6639],{"className":2693,"code":6638,"language":2695,"meta":31,"style":31},"\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",[33,6640,6641,6646,6652,6662,6670,6674,6709,6725,6757,6770,6775,6780,6792,6802,6812,6817,6826,6836,6841,6846,6873,6877,6893,6897,6908,6917],{"__ignoreMap":31},[36,6642,6643],{"class":38,"line":39},[36,6644,6645],{"class":42},"\u002F\u002F元素逆置\n",[36,6647,6648,6650],{"class":38,"line":46},[36,6649,4486],{"class":114},[36,6651,4489],{"class":57},[36,6653,6654,6656,6658,6660],{"class":38,"line":82},[36,6655,4494],{"class":114},[36,6657,4497],{"class":114},[36,6659,4501],{"class":4500},[36,6661,3833],{"class":53},[36,6663,6664,6666,6668],{"class":38,"line":88},[36,6665,232],{"class":114},[36,6667,4510],{"class":4500},[36,6669,4513],{"class":53},[36,6671,6672],{"class":38,"line":195},[36,6673,4084],{"class":53},[36,6675,6676,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707],{"class":38,"line":1517},[36,6677,6678],{"class":114},"   int",[36,6680,6493],{"class":53},[36,6682,1134],{"class":49},[36,6684,3614],{"class":53},[36,6686,115],{"class":114},[36,6688,2065],{"class":53},[36,6690,707],{"class":49},[36,6692,3059],{"class":53},[36,6694,1188],{"class":49},[36,6696,3059],{"class":53},[36,6698,2767],{"class":49},[36,6700,3059],{"class":53},[36,6702,2977],{"class":49},[36,6704,3059],{"class":53},[36,6706,1134],{"class":49},[36,6708,6526],{"class":53},[36,6710,6711,6713,6716,6718,6720,6722],{"class":38,"line":2421},[36,6712,6678],{"class":114},[36,6714,6715],{"class":53}," start",[36,6717,115],{"class":114},[36,6719,713],{"class":49},[36,6721,2752],{"class":53},[36,6723,6724],{"class":42},"\u002F\u002F起始下标\n",[36,6726,6727,6729,6732,6735,6738,6741,6743,6745,6748,6750,6752,6754],{"class":38,"line":2446},[36,6728,6678],{"class":114},[36,6730,6731],{"class":53}," end",[36,6733,6734],{"class":114},"=sizeof",[36,6736,6737],{"class":53},"(arr)",[36,6739,6740],{"class":114},"\u002Fsizeof",[36,6742,6382],{"class":53},[36,6744,713],{"class":49},[36,6746,6747],{"class":53},"])",[36,6749,508],{"class":114},[36,6751,707],{"class":49},[36,6753,2752],{"class":53},[36,6755,6756],{"class":42},"\u002F\u002F结束下标\n",[36,6758,6759,6762,6765,6767],{"class":38,"line":2469},[36,6760,6761],{"class":114},"   while",[36,6763,6764],{"class":53}," (start",[36,6766,1507],{"class":114},[36,6768,6769],{"class":53},"end)\n",[36,6771,6772],{"class":38,"line":2492},[36,6773,6774],{"class":53},"   {\n",[36,6776,6777],{"class":38,"line":4150},[36,6778,6779],{"class":42},"    \u002F\u002F实现元素互换代码\n",[36,6781,6782,6784,6787,6789],{"class":38,"line":4155},[36,6783,4522],{"class":114},[36,6785,6786],{"class":53}," temp",[36,6788,115],{"class":114},[36,6790,6791],{"class":53},"arr[start];\n",[36,6793,6794,6797,6799],{"class":38,"line":4161},[36,6795,6796],{"class":53},"    arr[start]",[36,6798,115],{"class":114},[36,6800,6801],{"class":53},"arr[end];\n",[36,6803,6804,6807,6809],{"class":38,"line":4166},[36,6805,6806],{"class":53},"    arr[end]",[36,6808,115],{"class":114},[36,6810,6811],{"class":53},"temp;\n",[36,6813,6814],{"class":38,"line":4180},[36,6815,6816],{"class":42},"    \u002F\u002F下标更新\n",[36,6818,6819,6822,6824],{"class":38,"line":4185},[36,6820,6821],{"class":53},"    start",[36,6823,4826],{"class":114},[36,6825,3833],{"class":53},[36,6827,6828,6831,6834],{"class":38,"line":4191},[36,6829,6830],{"class":53},"    end",[36,6832,6833],{"class":114},"--",[36,6835,3833],{"class":53},[36,6837,6838],{"class":38,"line":4212},[36,6839,6840],{"class":53},"   }\n",[36,6842,6843],{"class":38,"line":4217},[36,6844,6845],{"class":42},"   \u002F\u002F输出逆置后的数组\n",[36,6847,6848,6851,6853,6855,6857,6859,6861,6863,6865,6867,6869,6871],{"class":38,"line":4231},[36,6849,6850],{"class":114},"   for",[36,6852,4196],{"class":53},[36,6854,232],{"class":114},[36,6856,5563],{"class":53},[36,6858,115],{"class":114},[36,6860,713],{"class":49},[36,6862,5570],{"class":53},[36,6864,1507],{"class":114},[36,6866,1134],{"class":49},[36,6868,5570],{"class":53},[36,6870,4826],{"class":114},[36,6872,61],{"class":53},[36,6874,6875],{"class":38,"line":4236},[36,6876,6774],{"class":53},[36,6878,6879,6881,6883,6886,6888,6891],{"class":38,"line":4264},[36,6880,4089],{"class":53},[36,6882,3717],{"class":114},[36,6884,6885],{"class":53},"arr[i]",[36,6887,3717],{"class":114},[36,6889,6890],{"class":57},"\" \"",[36,6892,3833],{"class":53},[36,6894,6895],{"class":38,"line":4269},[36,6896,6840],{"class":53},[36,6898,6899,6902,6904,6906],{"class":38,"line":4286},[36,6900,6901],{"class":4500},"   system",[36,6903,54],{"class":53},[36,6905,4842],{"class":57},[36,6907,5251],{"class":53},[36,6909,6910,6913,6915],{"class":38,"line":4291},[36,6911,6912],{"class":114},"   return",[36,6914,6624],{"class":49},[36,6916,3833],{"class":53},[36,6918,6919],{"class":38,"line":4296},[36,6920,4103],{"class":53},[3680,6922,6923],{},[436,6924,6925],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,6927,6929],{"className":2693,"code":6928,"language":2695,"meta":31,"style":31},"\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",[33,6930,6931,6936,6942,6952,6960,6964,7016,7029,7055,7059,7073,7077,7082,7087,7117,7121,7126,7160,7164,7169,7189,7194,7206,7222,7237,7242,7246,7250,7263,7289,7293,7307,7311,7319],{"__ignoreMap":31},[36,6932,6933],{"class":38,"line":39},[36,6934,6935],{"class":42},"\u002F\u002F冒泡排序,升序\n",[36,6937,6938,6940],{"class":38,"line":46},[36,6939,4486],{"class":114},[36,6941,4489],{"class":57},[36,6943,6944,6946,6948,6950],{"class":38,"line":82},[36,6945,4494],{"class":114},[36,6947,4497],{"class":114},[36,6949,4501],{"class":4500},[36,6951,3833],{"class":53},[36,6953,6954,6956,6958],{"class":38,"line":88},[36,6955,232],{"class":114},[36,6957,4510],{"class":4500},[36,6959,4513],{"class":53},[36,6961,6962],{"class":38,"line":195},[36,6963,4084],{"class":53},[36,6965,6966,6968,6970,6972,6975,6977,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014],{"class":38,"line":1517},[36,6967,4522],{"class":114},[36,6969,6493],{"class":53},[36,6971,3101],{"class":49},[36,6973,6974],{"class":53},"] ",[36,6976,115],{"class":114},[36,6978,6979],{"class":53}," {",[36,6981,2977],{"class":49},[36,6983,3059],{"class":53},[36,6985,1188],{"class":49},[36,6987,3059],{"class":53},[36,6989,3076],{"class":49},[36,6991,3059],{"class":53},[36,6993,713],{"class":49},[36,6995,3059],{"class":53},[36,6997,1134],{"class":49},[36,6999,3059],{"class":53},[36,7001,3050],{"class":49},[36,7003,3059],{"class":53},[36,7005,707],{"class":49},[36,7007,3059],{"class":53},[36,7009,2767],{"class":49},[36,7011,3059],{"class":53},[36,7013,3101],{"class":49},[36,7015,6526],{"class":53},[36,7017,7018,7020,7022,7025,7027],{"class":38,"line":2421},[36,7019,4089],{"class":53},[36,7021,3717],{"class":114},[36,7023,7024],{"class":57},"\"排序前：\"",[36,7026,3717],{"class":114},[36,7028,3739],{"class":53},[36,7030,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053],{"class":38,"line":2446},[36,7032,5732],{"class":114},[36,7034,4196],{"class":53},[36,7036,232],{"class":114},[36,7038,5563],{"class":53},[36,7040,115],{"class":114},[36,7042,713],{"class":49},[36,7044,5570],{"class":53},[36,7046,1507],{"class":114},[36,7048,3101],{"class":49},[36,7050,5570],{"class":53},[36,7052,4826],{"class":114},[36,7054,61],{"class":53},[36,7056,7057],{"class":38,"line":2469},[36,7058,4567],{"class":53},[36,7060,7061,7063,7065,7067,7069,7071],{"class":38,"line":2492},[36,7062,5982],{"class":53},[36,7064,3717],{"class":114},[36,7066,6885],{"class":53},[36,7068,3717],{"class":114},[36,7070,6890],{"class":57},[36,7072,3833],{"class":53},[36,7074,7075],{"class":38,"line":4150},[36,7076,4721],{"class":53},[36,7078,7079],{"class":38,"line":4155},[36,7080,7081],{"class":42},"    \u002F\u002F开始冒泡排序\n",[36,7083,7084],{"class":38,"line":4161},[36,7085,7086],{"class":42},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,7088,7089,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115],{"class":38,"line":4166},[36,7090,5732],{"class":114},[36,7092,4196],{"class":53},[36,7094,232],{"class":114},[36,7096,5563],{"class":53},[36,7098,115],{"class":114},[36,7100,713],{"class":49},[36,7102,5570],{"class":53},[36,7104,1507],{"class":114},[36,7106,3101],{"class":49},[36,7108,508],{"class":114},[36,7110,707],{"class":49},[36,7112,5570],{"class":53},[36,7114,4826],{"class":114},[36,7116,61],{"class":53},[36,7118,7119],{"class":38,"line":4180},[36,7120,4567],{"class":53},[36,7122,7123],{"class":38,"line":4185},[36,7124,7125],{"class":42},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,7127,7128,7130,7132,7134,7136,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156,7158],{"class":38,"line":4191},[36,7129,5934],{"class":114},[36,7131,4196],{"class":53},[36,7133,232],{"class":114},[36,7135,5941],{"class":53},[36,7137,115],{"class":114},[36,7139,713],{"class":49},[36,7141,5948],{"class":53},[36,7143,1507],{"class":114},[36,7145,3101],{"class":49},[36,7147,508],{"class":114},[36,7149,3122],{"class":53},[36,7151,508],{"class":114},[36,7153,707],{"class":49},[36,7155,5948],{"class":53},[36,7157,4826],{"class":114},[36,7159,61],{"class":53},[36,7161,7162],{"class":38,"line":4212},[36,7163,5042],{"class":53},[36,7165,7166],{"class":38,"line":4217},[36,7167,7168],{"class":42},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,7170,7171,7174,7177,7179,7182,7184,7186],{"class":38,"line":4231},[36,7172,7173],{"class":114},"            if",[36,7175,7176],{"class":53},"(arr[j]",[36,7178,3633],{"class":114},[36,7180,7181],{"class":53},"arr[j",[36,7183,121],{"class":114},[36,7185,707],{"class":49},[36,7187,7188],{"class":53},"])\n",[36,7190,7191],{"class":38,"line":4236},[36,7192,7193],{"class":53},"            {\n",[36,7195,7196,7199,7201,7203],{"class":38,"line":4264},[36,7197,7198],{"class":114},"                int",[36,7200,6786],{"class":53},[36,7202,115],{"class":114},[36,7204,7205],{"class":53},"arr[j];\n",[36,7207,7208,7211,7213,7215,7217,7219],{"class":38,"line":4269},[36,7209,7210],{"class":53},"                arr[j]",[36,7212,115],{"class":114},[36,7214,7181],{"class":53},[36,7216,121],{"class":114},[36,7218,707],{"class":49},[36,7220,7221],{"class":53},"];\n",[36,7223,7224,7227,7229,7231,7233,7235],{"class":38,"line":4286},[36,7225,7226],{"class":53},"                arr[j",[36,7228,121],{"class":114},[36,7230,707],{"class":49},[36,7232,3614],{"class":53},[36,7234,115],{"class":114},[36,7236,6811],{"class":53},[36,7238,7239],{"class":38,"line":4291},[36,7240,7241],{"class":53},"            }\n",[36,7243,7244],{"class":38,"line":4296},[36,7245,5061],{"class":53},[36,7247,7248],{"class":38,"line":4301},[36,7249,4721],{"class":53},[36,7251,7252,7254,7256,7259,7261],{"class":38,"line":4315},[36,7253,4089],{"class":53},[36,7255,3717],{"class":114},[36,7257,7258],{"class":57},"\"排序后：\"",[36,7260,3717],{"class":114},[36,7262,3739],{"class":53},[36,7264,7265,7267,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287],{"class":38,"line":4320},[36,7266,5732],{"class":114},[36,7268,4196],{"class":53},[36,7270,232],{"class":114},[36,7272,5563],{"class":53},[36,7274,115],{"class":114},[36,7276,713],{"class":49},[36,7278,5570],{"class":53},[36,7280,1507],{"class":114},[36,7282,3101],{"class":49},[36,7284,5570],{"class":53},[36,7286,4826],{"class":114},[36,7288,61],{"class":53},[36,7290,7291],{"class":38,"line":5109},[36,7292,4567],{"class":53},[36,7294,7295,7297,7299,7301,7303,7305],{"class":38,"line":5123},[36,7296,5982],{"class":53},[36,7298,3717],{"class":114},[36,7300,6885],{"class":53},[36,7302,3717],{"class":114},[36,7304,6890],{"class":57},[36,7306,3833],{"class":53},[36,7308,7309],{"class":38,"line":5131},[36,7310,4721],{"class":53},[36,7312,7313,7315,7317],{"class":38,"line":5136},[36,7314,6621],{"class":114},[36,7316,6624],{"class":49},[36,7318,3833],{"class":53},[36,7320,7321],{"class":38,"line":5142},[36,7322,4103],{"class":53},[997,7324,7326],{"id":7325},"_172二维数组","1.7.2二维数组",[433,7328,7329],{},[436,7330,7331],{},"二维数组的四种定义方式",[206,7333,7334,7343],{},[209,7335,7336],{},[212,7337,7338,7341],{},[215,7339,7340],{},"序号",[215,7342,6312],{},[225,7344,7345,7355,7364,7373,7382],{},[212,7346,7347,7349],{},[230,7348,707],{},[230,7350,7351,7352,2752],{},"数据类型 数组名[行数]",[36,7353,7354],{},"列数",[212,7356,7357,7359],{},[230,7358,1188],{},[230,7360,7351,7361,7363],{},[36,7362,7354],{},"={ {数据1,数据2}，{数据3，数据4}... }",[212,7365,7366,7368],{},[230,7367,2767],{},[230,7369,7351,7370,7372],{},[36,7371,7354],{},"={数据1,数据2,数据3...}",[212,7374,7375,7377],{},[230,7376,2977],{},[230,7378,7379,7380,7372],{},"数据类型 数组名[]",[36,7381,7354],{},[212,7383,7384,7387],{},[230,7385,7386],{},"注意：不能只省略列数",[230,7388],{},[433,7390,7391],{"start":46},[436,7392,7393],{},"二维数组数组名",[3680,7395,7396,7399],{},[436,7397,7398],{},"1.查看二维数组所占内存空间",[436,7400,7401],{},"2.获取二维数组首地址",[19,7403,7404],{},"已知二维数组，求二维数组的行数与列数",[26,7406,7408],{"className":2693,"code":7407,"language":2695,"meta":31,"style":31},"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",[33,7409,7410,7418,7422,7440,7444,7462,7478,7483,7508,7541],{"__ignoreMap":31},[36,7411,7412,7414,7416],{"class":38,"line":39},[36,7413,232],{"class":114},[36,7415,4510],{"class":4500},[36,7417,4513],{"class":53},[36,7419,7420],{"class":38,"line":46},[36,7421,4084],{"class":53},[36,7423,7424,7426,7428,7430,7433,7435,7437],{"class":38,"line":82},[36,7425,4522],{"class":114},[36,7427,6493],{"class":53},[36,7429,1188],{"class":49},[36,7431,7432],{"class":53},"][",[36,7434,2767],{"class":49},[36,7436,3614],{"class":53},[36,7438,7439],{"class":114},"=\n",[36,7441,7442],{"class":38,"line":88},[36,7443,4567],{"class":53},[36,7445,7446,7449,7451,7453,7455,7457,7459],{"class":38,"line":195},[36,7447,7448],{"class":53},"        {",[36,7450,707],{"class":49},[36,7452,3059],{"class":53},[36,7454,1188],{"class":49},[36,7456,3059],{"class":53},[36,7458,2767],{"class":49},[36,7460,7461],{"class":53},"},\n",[36,7463,7464,7466,7468,7470,7472,7474,7476],{"class":38,"line":1517},[36,7465,7448],{"class":53},[36,7467,2977],{"class":49},[36,7469,3059],{"class":53},[36,7471,1134],{"class":49},[36,7473,3059],{"class":53},[36,7475,3025],{"class":49},[36,7477,4103],{"class":53},[36,7479,7480],{"class":38,"line":2421},[36,7481,7482],{"class":53},"    };\n",[36,7484,7485,7487,7489,7492,7494,7496,7498,7500,7502,7504,7506],{"class":38,"line":2446},[36,7486,4089],{"class":53},[36,7488,3717],{"class":114},[36,7490,7491],{"class":57},"\"二维数组的行数\"",[36,7493,3910],{"class":114},[36,7495,6737],{"class":53},[36,7497,6740],{"class":114},[36,7499,6382],{"class":53},[36,7501,713],{"class":49},[36,7503,6747],{"class":53},[36,7505,3717],{"class":114},[36,7507,3739],{"class":53},[36,7509,7510,7512,7514,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539],{"class":38,"line":2469},[36,7511,4089],{"class":53},[36,7513,3717],{"class":114},[36,7515,7516],{"class":57},"\"二维数组的列数\"",[36,7518,3910],{"class":114},[36,7520,6382],{"class":53},[36,7522,713],{"class":49},[36,7524,6747],{"class":53},[36,7526,6740],{"class":114},[36,7528,6382],{"class":53},[36,7530,713],{"class":49},[36,7532,7432],{"class":53},[36,7534,713],{"class":49},[36,7536,6747],{"class":53},[36,7538,3717],{"class":114},[36,7540,3739],{"class":53},[36,7542,7543],{"class":38,"line":2492},[36,7544,4103],{"class":53},[19,7546,7547],{},"查看二维数组首地址",[26,7549,7551],{"className":2693,"code":7550,"language":2695,"meta":31,"style":31},"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",[33,7552,7553,7570,7596,7621],{"__ignoreMap":31},[36,7554,7555,7557,7559,7562,7564,7566,7568],{"class":38,"line":39},[36,7556,3907],{"class":53},[36,7558,3717],{"class":114},[36,7560,7561],{"class":57},"\"二维数组首地址：\"",[36,7563,3717],{"class":114},[36,7565,6411],{"class":53},[36,7567,3717],{"class":114},[36,7569,3739],{"class":53},[36,7571,7572,7574,7576,7579,7581,7583,7585,7588,7590,7592,7594],{"class":38,"line":46},[36,7573,3907],{"class":53},[36,7575,3717],{"class":114},[36,7577,7578],{"class":57},"\"二维数组第一行的首地址：\"",[36,7580,3717],{"class":114},[36,7582,54],{"class":53},[36,7584,232],{"class":114},[36,7586,7587],{"class":53},")arr[",[36,7589,713],{"class":49},[36,7591,3614],{"class":53},[36,7593,3717],{"class":114},[36,7595,3739],{"class":53},[36,7597,7598,7600,7602,7605,7607,7609,7611,7613,7615,7617,7619],{"class":38,"line":82},[36,7599,3907],{"class":53},[36,7601,3717],{"class":114},[36,7603,7604],{"class":57},"\"二维数组第二行的首地址：\"",[36,7606,3717],{"class":114},[36,7608,54],{"class":53},[36,7610,232],{"class":114},[36,7612,7587],{"class":53},[36,7614,707],{"class":49},[36,7616,3614],{"class":53},[36,7618,3717],{"class":114},[36,7620,3739],{"class":53},[36,7622,7623,7625,7627,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654],{"class":38,"line":88},[36,7624,3907],{"class":53},[36,7626,3717],{"class":114},[36,7628,7629],{"class":57},"\"二维数组第一个元素的首地址:\"",[36,7631,3717],{"class":114},[36,7633,54],{"class":53},[36,7635,232],{"class":114},[36,7637,3110],{"class":53},[36,7639,3034],{"class":114},[36,7641,6437],{"class":53},[36,7643,713],{"class":49},[36,7645,7432],{"class":53},[36,7647,713],{"class":49},[36,7649,3614],{"class":53},[36,7651,3717],{"class":114},[36,7653,3781],{"class":53},[36,7655,7656],{"class":42},"\u002F\u002F对于数，要加取址符\n",[2602,7658,7659],{},"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":31,"searchDepth":46,"depth":46,"links":7661},[7662,7663,7664,7672,7673,7679,7684],{"id":2648,"depth":46,"text":2649},{"id":2655,"depth":46,"text":2656},{"id":2670,"depth":46,"text":2671,"children":7665},[7666,7667,7668,7669,7670,7671],{"id":2674,"depth":82,"text":2675},{"id":2718,"depth":82,"text":2719},{"id":2780,"depth":82,"text":2781},{"id":3698,"depth":82,"text":3699},{"id":3787,"depth":82,"text":3788},{"id":3882,"depth":82,"text":3883},{"id":3923,"depth":46,"text":3924},{"id":3991,"depth":46,"text":3992,"children":7674},[7675,7676,7677,7678],{"id":3995,"depth":82,"text":3996},{"id":4017,"depth":82,"text":4018},{"id":4026,"depth":82,"text":4027},{"id":4035,"depth":82,"text":4036},{"id":4044,"depth":46,"text":4045,"children":7680},[7681,7682,7683],{"id":4048,"depth":82,"text":4049},{"id":4739,"depth":82,"text":4740},{"id":6152,"depth":82,"text":6153},{"id":6293,"depth":46,"text":6294,"children":7685},[7686,7687],{"id":6297,"depth":82,"text":6298},{"id":7325,"depth":82,"text":7326},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2640,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7694,"title":7695,"body":7696,"description":31,"extension":2631,"meta":8792,"navigation":545,"path":8793,"seo":8794,"stem":8795,"__hash__":8796},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7697,"toc":8784},[7698,7701,7705,7713,7719,7722,7787,7791,7794,7870,7874,7877,7880,7883,8096,8100,8105,8169,8174,8241,8246,8337,8340,8444,8448,8451,8457,8601,8605,8608,8622,8625,8670,8673,8781],[10,7699,7695],{"id":7700},"_2函数",[14,7702,7704],{"id":7703},"_21函数概述","2.1函数概述",[433,7706,7707,7710],{},[436,7708,7709],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[436,7711,7712],{},"语法：",[26,7714,7717],{"className":7715,"code":7716,"language":690,"meta":31},[688],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[33,7718,7716],{"__ignoreMap":31},[19,7720,7721],{},"小案例",[26,7723,7725],{"className":2693,"code":7724,"language":2695,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,7726,7727,7732,7755,7759,7776,7783],{"__ignoreMap":31},[36,7728,7729],{"class":38,"line":39},[36,7730,7731],{"class":42},"\u002F\u002Fnum1,num2形参\n",[36,7733,7734,7736,7739,7741,7743,7746,7748,7750,7753],{"class":38,"line":46},[36,7735,232],{"class":114},[36,7737,7738],{"class":4500}," add",[36,7740,54],{"class":53},[36,7742,232],{"class":114},[36,7744,7745],{"class":1997}," num1",[36,7747,3059],{"class":53},[36,7749,232],{"class":114},[36,7751,7752],{"class":1997}," num2",[36,7754,61],{"class":53},[36,7756,7757],{"class":38,"line":82},[36,7758,4084],{"class":53},[36,7760,7761,7763,7766,7768,7771,7773],{"class":38,"line":88},[36,7762,4522],{"class":114},[36,7764,7765],{"class":53}," sum",[36,7767,115],{"class":114},[36,7769,7770],{"class":53},"num1",[36,7772,121],{"class":114},[36,7774,7775],{"class":53},"num2;\n",[36,7777,7778,7780],{"class":38,"line":195},[36,7779,6621],{"class":114},[36,7781,7782],{"class":53}," sum;\n",[36,7784,7785],{"class":38,"line":1517},[36,7786,4103],{"class":53},[14,7788,7790],{"id":7789},"_22函数调用","2.2函数调用",[19,7792,7793],{},"调用刚刚写的求和函数",[26,7795,7797],{"className":2693,"code":7796,"language":2695,"meta":31,"style":31},"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",[33,7798,7799,7807,7811,7816,7828,7840,7849,7854,7866],{"__ignoreMap":31},[36,7800,7801,7803,7805],{"class":38,"line":39},[36,7802,232],{"class":114},[36,7804,4510],{"class":4500},[36,7806,4513],{"class":53},[36,7808,7809],{"class":38,"line":46},[36,7810,4084],{"class":53},[36,7812,7813],{"class":38,"line":82},[36,7814,7815],{"class":42},"    \u002F\u002Fa,b实参\n",[36,7817,7818,7820,7822,7824,7826],{"class":38,"line":88},[36,7819,4522],{"class":114},[36,7821,3936],{"class":53},[36,7823,115],{"class":114},[36,7825,713],{"class":49},[36,7827,3833],{"class":53},[36,7829,7830,7832,7834,7836,7838],{"class":38,"line":195},[36,7831,4522],{"class":114},[36,7833,5365],{"class":53},[36,7835,115],{"class":114},[36,7837,713],{"class":49},[36,7839,3833],{"class":53},[36,7841,7842,7844,7846],{"class":38,"line":1517},[36,7843,4549],{"class":53},[36,7845,3967],{"class":114},[36,7847,7848],{"class":53},"a,b;\n",[36,7850,7851],{"class":38,"line":2421},[36,7852,7853],{"class":42},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,7855,7856,7858,7860,7863],{"class":38,"line":2446},[36,7857,4089],{"class":53},[36,7859,3717],{"class":114},[36,7861,7862],{"class":4500},"add",[36,7864,7865],{"class":53},"(a,b);\n",[36,7867,7868],{"class":38,"line":2469},[36,7869,4103],{"class":53},[14,7871,7873],{"id":7872},"_23值传递","2.3值传递",[19,7875,7876],{},"值传递就是函数调用时实参将数值传给形参",[19,7878,7879],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7881,7882],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,7884,7886],{"className":2693,"code":7885,"language":2695,"meta":31,"style":31},"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",[33,7887,7888,7910,7914,7927,7944,7962,7973,7982,7991,8004,8020,8036,8045,8049,8057,8061,8073,8085,8092],{"__ignoreMap":31},[36,7889,7890,7893,7896,7898,7900,7902,7904,7906,7908],{"class":38,"line":39},[36,7891,7892],{"class":114},"void",[36,7894,7895],{"class":4500}," swap",[36,7897,54],{"class":53},[36,7899,232],{"class":114},[36,7901,7745],{"class":1997},[36,7903,3059],{"class":53},[36,7905,232],{"class":114},[36,7907,7752],{"class":1997},[36,7909,61],{"class":53},[36,7911,7912],{"class":38,"line":46},[36,7913,4084],{"class":53},[36,7915,7916,7918,7920,7923,7925],{"class":38,"line":82},[36,7917,4089],{"class":53},[36,7919,3717],{"class":114},[36,7921,7922],{"class":57},"\"交换前：\"",[36,7924,3717],{"class":114},[36,7926,3739],{"class":53},[36,7928,7929,7931,7933,7936,7938,7940,7942],{"class":38,"line":88},[36,7930,4089],{"class":53},[36,7932,3717],{"class":114},[36,7934,7935],{"class":57},"\"num1=\"",[36,7937,3717],{"class":114},[36,7939,7770],{"class":53},[36,7941,3717],{"class":114},[36,7943,3739],{"class":53},[36,7945,7946,7948,7950,7953,7955,7958,7960],{"class":38,"line":195},[36,7947,4089],{"class":53},[36,7949,3717],{"class":114},[36,7951,7952],{"class":57},"\"num2=\"",[36,7954,3717],{"class":114},[36,7956,7957],{"class":53},"num2",[36,7959,3717],{"class":114},[36,7961,3739],{"class":53},[36,7963,7964,7966,7968,7970],{"class":38,"line":1517},[36,7965,4522],{"class":114},[36,7967,6786],{"class":53},[36,7969,115],{"class":114},[36,7971,7972],{"class":53},"num1;\n",[36,7974,7975,7978,7980],{"class":38,"line":2421},[36,7976,7977],{"class":53},"    num1",[36,7979,115],{"class":114},[36,7981,7775],{"class":53},[36,7983,7984,7987,7989],{"class":38,"line":2446},[36,7985,7986],{"class":53},"    num2",[36,7988,115],{"class":114},[36,7990,6811],{"class":53},[36,7992,7993,7995,7997,8000,8002],{"class":38,"line":2469},[36,7994,4089],{"class":53},[36,7996,3717],{"class":114},[36,7998,7999],{"class":57},"\"交换后：\"",[36,8001,3717],{"class":114},[36,8003,3739],{"class":53},[36,8005,8006,8008,8010,8012,8014,8016,8018],{"class":38,"line":2492},[36,8007,4089],{"class":53},[36,8009,3717],{"class":114},[36,8011,7935],{"class":57},[36,8013,3717],{"class":114},[36,8015,7770],{"class":53},[36,8017,3717],{"class":114},[36,8019,3739],{"class":53},[36,8021,8022,8024,8026,8028,8030,8032,8034],{"class":38,"line":4150},[36,8023,4089],{"class":53},[36,8025,3717],{"class":114},[36,8027,7952],{"class":57},[36,8029,3717],{"class":114},[36,8031,7957],{"class":53},[36,8033,3717],{"class":114},[36,8035,3739],{"class":53},[36,8037,8038,8040,8042],{"class":38,"line":4155},[36,8039,6621],{"class":114},[36,8041,2752],{"class":53},[36,8043,8044],{"class":42},"\u002F\u002F或者不写\n",[36,8046,8047],{"class":38,"line":4161},[36,8048,4103],{"class":53},[36,8050,8051,8053,8055],{"class":38,"line":4166},[36,8052,232],{"class":114},[36,8054,4510],{"class":4500},[36,8056,4513],{"class":53},[36,8058,8059],{"class":38,"line":4180},[36,8060,4084],{"class":53},[36,8062,8063,8065,8067,8069,8071],{"class":38,"line":4185},[36,8064,4522],{"class":114},[36,8066,3936],{"class":53},[36,8068,115],{"class":114},[36,8070,1317],{"class":49},[36,8072,3833],{"class":53},[36,8074,8075,8077,8079,8081,8083],{"class":38,"line":4191},[36,8076,4522],{"class":114},[36,8078,5365],{"class":53},[36,8080,115],{"class":114},[36,8082,3376],{"class":49},[36,8084,3833],{"class":53},[36,8086,8087,8090],{"class":38,"line":4212},[36,8088,8089],{"class":4500},"    swap",[36,8091,7865],{"class":53},[36,8093,8094],{"class":38,"line":4217},[36,8095,4103],{"class":53},[14,8097,8099],{"id":8098},"_24函数的常见形式","2.4函数的常见形式",[433,8101,8102],{},[436,8103,8104],{},"无参无返",[26,8106,8108],{"className":2693,"code":8107,"language":2695,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,8109,8110,8119,8123,8136,8140,8148,8152,8157,8165],{"__ignoreMap":31},[36,8111,8112,8114,8117],{"class":38,"line":39},[36,8113,7892],{"class":114},[36,8115,8116],{"class":4500}," test01",[36,8118,4513],{"class":53},[36,8120,8121],{"class":38,"line":46},[36,8122,4084],{"class":53},[36,8124,8125,8127,8129,8132,8134],{"class":38,"line":82},[36,8126,4089],{"class":53},[36,8128,3717],{"class":114},[36,8130,8131],{"class":57},"\"你好\"",[36,8133,3717],{"class":114},[36,8135,3739],{"class":53},[36,8137,8138],{"class":38,"line":88},[36,8139,4103],{"class":53},[36,8141,8142,8144,8146],{"class":38,"line":195},[36,8143,232],{"class":114},[36,8145,4510],{"class":4500},[36,8147,4513],{"class":53},[36,8149,8150],{"class":38,"line":1517},[36,8151,4084],{"class":53},[36,8153,8154],{"class":38,"line":2421},[36,8155,8156],{"class":42},"    \u002F\u002F函数调用\n",[36,8158,8159,8162],{"class":38,"line":2446},[36,8160,8161],{"class":4500},"    test01",[36,8163,8164],{"class":53},"();\n",[36,8166,8167],{"class":38,"line":2469},[36,8168,4103],{"class":53},[433,8170,8171],{"start":46},[436,8172,8173],{},"有参无返",[26,8175,8177],{"className":2693,"code":8176,"language":2695,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,8178,8179,8194,8198,8210,8214,8222,8226,8237],{"__ignoreMap":31},[36,8180,8181,8183,8186,8188,8190,8192],{"class":38,"line":39},[36,8182,7892],{"class":114},[36,8184,8185],{"class":4500}," test02",[36,8187,54],{"class":53},[36,8189,232],{"class":114},[36,8191,3936],{"class":1997},[36,8193,61],{"class":53},[36,8195,8196],{"class":38,"line":46},[36,8197,4084],{"class":53},[36,8199,8200,8202,8204,8206,8208],{"class":38,"line":82},[36,8201,4089],{"class":53},[36,8203,3717],{"class":114},[36,8205,8131],{"class":57},[36,8207,3717],{"class":114},[36,8209,3739],{"class":53},[36,8211,8212],{"class":38,"line":88},[36,8213,4103],{"class":53},[36,8215,8216,8218,8220],{"class":38,"line":195},[36,8217,232],{"class":114},[36,8219,4510],{"class":4500},[36,8221,4513],{"class":53},[36,8223,8224],{"class":38,"line":1517},[36,8225,4084],{"class":53},[36,8227,8228,8231,8233,8235],{"class":38,"line":2421},[36,8229,8230],{"class":4500},"    test02",[36,8232,54],{"class":53},[36,8234,166],{"class":49},[36,8236,5251],{"class":53},[36,8238,8239],{"class":38,"line":2446},[36,8240,4103],{"class":53},[433,8242,8243],{"start":82},[436,8244,8245],{},"无参有返",[26,8247,8249],{"className":2693,"code":8248,"language":2695,"meta":31,"style":31},"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",[33,8250,8251,8260,8264,8276,8285,8289,8297,8301,8314,8333],{"__ignoreMap":31},[36,8252,8253,8255,8258],{"class":38,"line":39},[36,8254,232],{"class":114},[36,8256,8257],{"class":4500}," test03",[36,8259,4513],{"class":53},[36,8261,8262],{"class":38,"line":46},[36,8263,4084],{"class":53},[36,8265,8266,8268,8270,8272,8274],{"class":38,"line":82},[36,8267,4089],{"class":53},[36,8269,3717],{"class":114},[36,8271,8131],{"class":57},[36,8273,3717],{"class":114},[36,8275,3739],{"class":53},[36,8277,8278,8280,8283],{"class":38,"line":88},[36,8279,6621],{"class":114},[36,8281,8282],{"class":49}," 100",[36,8284,3833],{"class":53},[36,8286,8287],{"class":38,"line":195},[36,8288,4103],{"class":53},[36,8290,8291,8293,8295],{"class":38,"line":1517},[36,8292,232],{"class":114},[36,8294,4510],{"class":4500},[36,8296,4513],{"class":53},[36,8298,8299],{"class":38,"line":2421},[36,8300,4084],{"class":53},[36,8302,8303,8305,8307,8309,8312],{"class":38,"line":2446},[36,8304,4522],{"class":114},[36,8306,7745],{"class":53},[36,8308,115],{"class":114},[36,8310,8311],{"class":4500},"test03",[36,8313,8164],{"class":53},[36,8315,8316,8318,8320,8322,8324,8326,8328,8330],{"class":38,"line":2469},[36,8317,4089],{"class":53},[36,8319,3717],{"class":114},[36,8321,7935],{"class":57},[36,8323,3717],{"class":114},[36,8325,7770],{"class":53},[36,8327,3717],{"class":114},[36,8329,3781],{"class":53},[36,8331,8332],{"class":42}," \u002F\u002F100\n",[36,8334,8335],{"class":38,"line":2492},[36,8336,4103],{"class":53},[19,8338,8339],{},"4.有参有返",[26,8341,8343],{"className":2693,"code":8342,"language":2695,"meta":31,"style":31},"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",[33,8344,8345,8360,8364,8376,8382,8386,8395,8399,8411,8425,8440],{"__ignoreMap":31},[36,8346,8347,8349,8352,8354,8356,8358],{"class":38,"line":39},[36,8348,232],{"class":114},[36,8350,8351],{"class":4500}," test04",[36,8353,54],{"class":53},[36,8355,232],{"class":114},[36,8357,3936],{"class":1997},[36,8359,61],{"class":53},[36,8361,8362],{"class":38,"line":46},[36,8363,4084],{"class":53},[36,8365,8366,8368,8370,8372,8374],{"class":38,"line":82},[36,8367,4089],{"class":53},[36,8369,3717],{"class":114},[36,8371,58],{"class":57},[36,8373,3717],{"class":114},[36,8375,3739],{"class":53},[36,8377,8378,8380],{"class":38,"line":88},[36,8379,6621],{"class":114},[36,8381,3970],{"class":53},[36,8383,8384],{"class":38,"line":195},[36,8385,4103],{"class":53},[36,8387,8388,8390,8393],{"class":38,"line":1517},[36,8389,232],{"class":114},[36,8391,8392],{"class":4500}," mian",[36,8394,4513],{"class":53},[36,8396,8397],{"class":38,"line":2421},[36,8398,4084],{"class":53},[36,8400,8401,8403,8405,8407,8409],{"class":38,"line":2446},[36,8402,4522],{"class":114},[36,8404,5365],{"class":53},[36,8406,115],{"class":114},[36,8408,707],{"class":49},[36,8410,3833],{"class":53},[36,8412,8413,8415,8417,8419,8422],{"class":38,"line":2469},[36,8414,4522],{"class":114},[36,8416,5381],{"class":53},[36,8418,115],{"class":114},[36,8420,8421],{"class":4500},"test04",[36,8423,8424],{"class":53},"(b);\n",[36,8426,8427,8429,8431,8433,8435,8437],{"class":38,"line":2492},[36,8428,4089],{"class":53},[36,8430,3717],{"class":114},[36,8432,2972],{"class":53},[36,8434,3717],{"class":114},[36,8436,3781],{"class":53},[36,8438,8439],{"class":42}," \u002F\u002F1\n",[36,8441,8442],{"class":38,"line":4150},[36,8443,4103],{"class":53},[14,8445,8447],{"id":8446},"_25函数的声明","2.5函数的声明",[19,8449,8450],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8452,8453,8454],{},"函数的",[2839,8455,8456],{},"声明可以多次，但是函数的定义只能有一次",[26,8458,8460],{"className":2693,"code":8459,"language":2695,"meta":31,"style":31},"\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",[33,8461,8462,8467,8472,8497,8506,8510,8522,8534,8550,8554,8574,8578,8597],{"__ignoreMap":31},[36,8463,8464],{"class":38,"line":39},[36,8465,8466],{"class":42},"\u002F\u002F函数声明\n",[36,8468,8469],{"class":38,"line":46},[36,8470,8471],{"class":42},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,8473,8474,8476,8479,8481,8483,8485,8487,8489,8491,8494],{"class":38,"line":82},[36,8475,232],{"class":114},[36,8477,8478],{"class":4500}," max",[36,8480,54],{"class":53},[36,8482,232],{"class":114},[36,8484,3936],{"class":1997},[36,8486,3059],{"class":53},[36,8488,232],{"class":114},[36,8490,5365],{"class":1997},[36,8492,8493],{"class":53},");",[36,8495,8496],{"class":42},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,8498,8499,8501,8503],{"class":38,"line":88},[36,8500,232],{"class":114},[36,8502,4510],{"class":4500},[36,8504,8505],{"class":53},"() \n",[36,8507,8508],{"class":38,"line":195},[36,8509,4084],{"class":53},[36,8511,8512,8514,8516,8518,8520],{"class":38,"line":1517},[36,8513,4522],{"class":114},[36,8515,3936],{"class":53},[36,8517,115],{"class":114},[36,8519,1317],{"class":49},[36,8521,3833],{"class":53},[36,8523,8524,8526,8528,8530,8532],{"class":38,"line":2421},[36,8525,4522],{"class":114},[36,8527,5365],{"class":53},[36,8529,115],{"class":114},[36,8531,3376],{"class":49},[36,8533,3833],{"class":53},[36,8535,8536,8538,8540,8543,8546,8548],{"class":38,"line":2446},[36,8537,4089],{"class":53},[36,8539,3717],{"class":114},[36,8541,8542],{"class":4500},"max",[36,8544,8545],{"class":53},"(a,b)",[36,8547,3717],{"class":114},[36,8549,3739],{"class":53},[36,8551,8552],{"class":38,"line":2469},[36,8553,4103],{"class":53},[36,8555,8556,8558,8560,8562,8564,8566,8568,8570,8572],{"class":38,"line":2492},[36,8557,232],{"class":114},[36,8559,8478],{"class":4500},[36,8561,54],{"class":53},[36,8563,232],{"class":114},[36,8565,3936],{"class":1997},[36,8567,3059],{"class":53},[36,8569,232],{"class":114},[36,8571,5365],{"class":1997},[36,8573,61],{"class":53},[36,8575,8576],{"class":38,"line":4150},[36,8577,4084],{"class":53},[36,8579,8580,8582,8584,8586,8588,8590,8592,8594],{"class":38,"line":4155},[36,8581,6621],{"class":114},[36,8583,3936],{"class":53},[36,8585,3633],{"class":114},[36,8587,2947],{"class":53},[36,8589,3659],{"class":114},[36,8591,2923],{"class":53},[36,8593,3535],{"class":114},[36,8595,8596],{"class":53},"b;\n",[36,8598,8599],{"class":38,"line":4161},[36,8600,4103],{"class":53},[14,8602,8604],{"id":8603},"_26函数的分文件编写","2.6函数的分文件编写",[19,8606,8607],{},"4个步骤：",[3680,8609,8610,8613,8616,8619],{},[436,8611,8612],{},"1.创建后缀名为.h的头文件",[436,8614,8615],{},"2.创建后缀名为.cpp的源文件",[436,8617,8618],{},"3.在头文件中写函数的定义",[436,8620,8621],{},"4.在源文件中写函数的定义\n示例：",[19,8623,8624],{},"头文件：swap.h",[26,8626,8628],{"className":2693,"code":8627,"language":2695,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,8629,8630,8636,8646,8650],{"__ignoreMap":31},[36,8631,8632,8634],{"class":38,"line":39},[36,8633,4486],{"class":114},[36,8635,4489],{"class":57},[36,8637,8638,8640,8642,8644],{"class":38,"line":46},[36,8639,4494],{"class":114},[36,8641,4497],{"class":114},[36,8643,4501],{"class":4500},[36,8645,3833],{"class":53},[36,8647,8648],{"class":38,"line":82},[36,8649,8466],{"class":42},[36,8651,8652,8654,8656,8658,8660,8662,8664,8666,8668],{"class":38,"line":88},[36,8653,7892],{"class":114},[36,8655,7895],{"class":4500},[36,8657,54],{"class":53},[36,8659,232],{"class":114},[36,8661,3936],{"class":1997},[36,8663,3059],{"class":53},[36,8665,232],{"class":114},[36,8667,5365],{"class":1997},[36,8669,5251],{"class":53},[19,8671,8672],{},"源文件：swap.cpp",[26,8674,8676],{"className":2693,"code":8675,"language":2695,"meta":31,"style":31},"#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",[33,8677,8678,8685,8690,8710,8714,8725,8734,8743,8760,8777],{"__ignoreMap":31},[36,8679,8680,8682],{"class":38,"line":39},[36,8681,4486],{"class":114},[36,8683,8684],{"class":57}," \"swap.h\"\n",[36,8686,8687],{"class":38,"line":46},[36,8688,8689],{"class":42},"\u002F\u002F函数的定义\n",[36,8691,8692,8694,8696,8698,8700,8702,8704,8706,8708],{"class":38,"line":82},[36,8693,7892],{"class":114},[36,8695,7895],{"class":4500},[36,8697,54],{"class":53},[36,8699,232],{"class":114},[36,8701,3936],{"class":1997},[36,8703,3059],{"class":53},[36,8705,232],{"class":114},[36,8707,5365],{"class":1997},[36,8709,61],{"class":53},[36,8711,8712],{"class":38,"line":88},[36,8713,4084],{"class":53},[36,8715,8716,8718,8720,8722],{"class":38,"line":195},[36,8717,4522],{"class":114},[36,8719,6786],{"class":53},[36,8721,115],{"class":114},[36,8723,8724],{"class":53},"a;\n",[36,8726,8727,8730,8732],{"class":38,"line":1517},[36,8728,8729],{"class":53},"    a",[36,8731,115],{"class":114},[36,8733,8596],{"class":53},[36,8735,8736,8739,8741],{"class":38,"line":2421},[36,8737,8738],{"class":53},"    b",[36,8740,115],{"class":114},[36,8742,6811],{"class":53},[36,8744,8745,8747,8749,8752,8754,8756,8758],{"class":38,"line":2446},[36,8746,4089],{"class":53},[36,8748,3717],{"class":114},[36,8750,8751],{"class":57},"\"a=\"",[36,8753,3717],{"class":114},[36,8755,2923],{"class":53},[36,8757,3717],{"class":114},[36,8759,3739],{"class":53},[36,8761,8762,8764,8766,8769,8771,8773,8775],{"class":38,"line":2469},[36,8763,4089],{"class":53},[36,8765,3717],{"class":114},[36,8767,8768],{"class":57},"\"b=\"",[36,8770,3717],{"class":114},[36,8772,2947],{"class":53},[36,8774,3717],{"class":114},[36,8776,3739],{"class":53},[36,8778,8779],{"class":38,"line":2492},[36,8780,4103],{"class":53},[2602,8782,8783],{},"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":31,"searchDepth":46,"depth":46,"links":8785},[8786,8787,8788,8789,8790,8791],{"id":7703,"depth":46,"text":7704},{"id":7789,"depth":46,"text":7790},{"id":7872,"depth":46,"text":7873},{"id":8098,"depth":46,"text":8099},{"id":8446,"depth":46,"text":8447},{"id":8603,"depth":46,"text":8604},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7695,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8798,"title":8799,"body":8800,"description":8807,"extension":2631,"meta":10212,"navigation":545,"path":10213,"seo":10214,"stem":10215,"__hash__":10216},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8801,"toc":10202},[8802,8805,8808,8812,8974,8978,8981,8984,8987,8990,9130,9134,9137,9140,9143,9208,9212,9217,9284,9287,9291,9294,9305,9310,9330,9333,9338,9357,9360,9364,9383,9386,9390,9625,9629,9632,9635,9638,9800,9803,9807,9810,9816,10199],[10,8803,8799],{"id":8804},"_3指针",[19,8806,8807],{},"通过指针保存一个地址，指针就是个地址",[14,8809,8811],{"id":8810},"_31定义指针","3.1定义指针",[26,8813,8815],{"className":2693,"code":8814,"language":2695,"meta":31,"style":31},"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",[33,8816,8817,8825,8829,8834,8846,8851,8859,8869,8887,8907,8911,8916,8921,8926,8940,8956,8970],{"__ignoreMap":31},[36,8818,8819,8821,8823],{"class":38,"line":39},[36,8820,232],{"class":114},[36,8822,4510],{"class":4500},[36,8824,4513],{"class":53},[36,8826,8827],{"class":38,"line":46},[36,8828,4084],{"class":53},[36,8830,8831],{"class":38,"line":82},[36,8832,8833],{"class":42},"    \u002F\u002F1.定义指针\n",[36,8835,8836,8838,8840,8842,8844],{"class":38,"line":88},[36,8837,4522],{"class":114},[36,8839,3936],{"class":53},[36,8841,115],{"class":114},[36,8843,1317],{"class":49},[36,8845,3833],{"class":53},[36,8847,8848],{"class":38,"line":195},[36,8849,8850],{"class":42},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,8852,8853,8856],{"class":38,"line":1517},[36,8854,8855],{"class":114},"    int*",[36,8857,8858],{"class":53},"p;\n",[36,8860,8861,8864,8867],{"class":38,"line":2421},[36,8862,8863],{"class":53},"    p",[36,8865,8866],{"class":114},"=&",[36,8868,8724],{"class":53},[36,8870,8871,8873,8875,8878,8881,8883,8885],{"class":38,"line":2446},[36,8872,4089],{"class":53},[36,8874,3717],{"class":114},[36,8876,8877],{"class":57},"\"a的地址为：\"",[36,8879,8880],{"class":114},"\u003C\u003C&",[36,8882,2923],{"class":53},[36,8884,3717],{"class":114},[36,8886,3739],{"class":53},[36,8888,8889,8891,8893,8896,8898,8900,8902,8904],{"class":38,"line":2469},[36,8890,4089],{"class":53},[36,8892,3717],{"class":114},[36,8894,8895],{"class":57},"\"指针p为：\"",[36,8897,3717],{"class":114},[36,8899,19],{"class":53},[36,8901,3717],{"class":114},[36,8903,3781],{"class":53},[36,8905,8906],{"class":42},"\u002F\u002F指针p表示的就是a的地址\n",[36,8908,8909],{"class":38,"line":2492},[36,8910,546],{"emptyLinePlaceholder":545},[36,8912,8913],{"class":38,"line":4150},[36,8914,8915],{"class":42},"    \u002F\u002F2.使用指针\n",[36,8917,8918],{"class":38,"line":4155},[36,8919,8920],{"class":42},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,8922,8923],{"class":38,"line":4161},[36,8924,8925],{"class":42},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,8927,8928,8931,8933,8935,8938],{"class":38,"line":4166},[36,8929,8930],{"class":114},"    *",[36,8932,19],{"class":53},[36,8934,115],{"class":114},[36,8936,8937],{"class":49},"1000",[36,8939,3833],{"class":53},[36,8941,8942,8944,8947,8949,8951,8953],{"class":38,"line":4180},[36,8943,4089],{"class":53},[36,8945,8946],{"class":114},"\u003C\u003C*",[36,8948,19],{"class":53},[36,8950,3717],{"class":114},[36,8952,3781],{"class":53},[36,8954,8955],{"class":42},"\u002F\u002F1000\n",[36,8957,8958,8960,8962,8964,8966,8968],{"class":38,"line":4185},[36,8959,4089],{"class":53},[36,8961,3717],{"class":114},[36,8963,2923],{"class":53},[36,8965,3717],{"class":114},[36,8967,3781],{"class":53},[36,8969,8955],{"class":42},[36,8971,8972],{"class":38,"line":4191},[36,8973,4103],{"class":53},[14,8975,8977],{"id":8976},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8979,8980],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8982,8983],{},"在32位操作系统下：占用4个字节空间",[19,8985,8986],{},"在64位操作系统下：占用8个字节空间",[19,8988,8989],{},"上方是不管啥数据类型的",[26,8991,8993],{"className":2693,"code":8992,"language":2695,"meta":31,"style":31},"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",[33,8994,8995,9003,9007,9012,9024,9029,9034,9039,9052,9074,9100,9126],{"__ignoreMap":31},[36,8996,8997,8999,9001],{"class":38,"line":39},[36,8998,232],{"class":114},[36,9000,4510],{"class":4500},[36,9002,4513],{"class":53},[36,9004,9005],{"class":38,"line":46},[36,9006,4084],{"class":53},[36,9008,9009],{"class":38,"line":82},[36,9010,9011],{"class":42},"    \u002F\u002F指针所占内存空间\n",[36,9013,9014,9016,9018,9020,9022],{"class":38,"line":88},[36,9015,4522],{"class":114},[36,9017,3936],{"class":53},[36,9019,115],{"class":114},[36,9021,1317],{"class":49},[36,9023,3833],{"class":53},[36,9025,9026],{"class":38,"line":195},[36,9027,9028],{"class":42},"    \u002F\u002Fint *p;\n",[36,9030,9031],{"class":38,"line":1517},[36,9032,9033],{"class":42},"    \u002F\u002Fp=&a;\n",[36,9035,9036],{"class":38,"line":2421},[36,9037,9038],{"class":42},"    \u002F\u002F上述可以写为以下：\n",[36,9040,9041,9043,9046,9048,9050],{"class":38,"line":2446},[36,9042,4522],{"class":114},[36,9044,9045],{"class":114}," *",[36,9047,19],{"class":53},[36,9049,8866],{"class":114},[36,9051,8724],{"class":53},[36,9053,9054,9057,9059,9062,9064,9067,9069,9071],{"class":38,"line":2469},[36,9055,9056],{"class":53},"    cout ",[36,9058,3717],{"class":114},[36,9060,9061],{"class":57},"\"sizeof(int *)\"",[36,9063,3910],{"class":114},[36,9065,9066],{"class":53},"(p)",[36,9068,3717],{"class":114},[36,9070,3781],{"class":53},[36,9072,9073],{"class":42},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,9075,9076,9078,9080,9082,9084,9086,9088,9090,9092,9094,9097],{"class":38,"line":2492},[36,9077,9056],{"class":53},[36,9079,3717],{"class":114},[36,9081,9061],{"class":57},[36,9083,3910],{"class":114},[36,9085,54],{"class":53},[36,9087,232],{"class":114},[36,9089,9045],{"class":114},[36,9091,3110],{"class":53},[36,9093,3717],{"class":114},[36,9095,9096],{"class":53},"endl",[36,9098,9099],{"class":42},"  \u002F\u002F4字节(32位的话)\n",[36,9101,9102,9104,9106,9109,9111,9113,9115,9117,9119,9121,9123],{"class":38,"line":4150},[36,9103,9056],{"class":53},[36,9105,3717],{"class":114},[36,9107,9108],{"class":57},"\"sizeof(char *)\"",[36,9110,3910],{"class":114},[36,9112,54],{"class":53},[36,9114,2791],{"class":114},[36,9116,9045],{"class":114},[36,9118,3110],{"class":53},[36,9120,3717],{"class":114},[36,9122,3781],{"class":53},[36,9124,9125],{"class":42}," \u002F\u002F4字节(32位的话)\n",[36,9127,9128],{"class":38,"line":4155},[36,9129,4103],{"class":53},[14,9131,9133],{"id":9132},"_33空指针","3.3空指针",[19,9135,9136],{},"空指针：指针变量指向内存中编号为0的空间",[19,9138,9139],{},"用途：初始化指针变量",[19,9141,9142],{},"注意：空指针指向的内存是不可以访问的",[26,9144,9146],{"className":2693,"code":9145,"language":2695,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,9147,9148,9156,9160,9165,9179,9184,9199,9204],{"__ignoreMap":31},[36,9149,9150,9152,9154],{"class":38,"line":39},[36,9151,232],{"class":114},[36,9153,4510],{"class":4500},[36,9155,4513],{"class":53},[36,9157,9158],{"class":38,"line":46},[36,9159,4084],{"class":53},[36,9161,9162],{"class":38,"line":82},[36,9163,9164],{"class":42},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,9166,9167,9169,9171,9173,9175,9177],{"class":38,"line":88},[36,9168,4522],{"class":114},[36,9170,9045],{"class":114},[36,9172,19],{"class":53},[36,9174,115],{"class":114},[36,9176,4925],{"class":49},[36,9178,3833],{"class":53},[36,9180,9181],{"class":38,"line":195},[36,9182,9183],{"class":42},"    \u002F\u002F2.空指针不能进行访问\n",[36,9185,9186,9188,9190,9192,9194,9196],{"class":38,"line":1517},[36,9187,8930],{"class":114},[36,9189,19],{"class":53},[36,9191,115],{"class":114},[36,9193,166],{"class":49},[36,9195,2752],{"class":53},[36,9197,9198],{"class":42},"\u002F\u002F直接报错，压根不能访问\n",[36,9200,9201],{"class":38,"line":2421},[36,9202,9203],{"class":42},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,9205,9206],{"class":38,"line":2446},[36,9207,4103],{"class":53},[14,9209,9211],{"id":9210},"_34野指针","3.4野指针",[19,9213,9214],{},[2839,9215,9216],{},"指针变量指向非法的内存空间",[26,9218,9220],{"className":2693,"code":9219,"language":2695,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,9221,9222,9230,9234,9263,9268,9280],{"__ignoreMap":31},[36,9223,9224,9226,9228],{"class":38,"line":39},[36,9225,232],{"class":114},[36,9227,4510],{"class":4500},[36,9229,4513],{"class":53},[36,9231,9232],{"class":38,"line":46},[36,9233,4084],{"class":53},[36,9235,9236,9238,9240,9242,9244,9246,9248,9250,9252,9255,9258,9260],{"class":38,"line":82},[36,9237,4522],{"class":114},[36,9239,9045],{"class":114},[36,9241,19],{"class":53},[36,9243,115],{"class":114},[36,9245,54],{"class":53},[36,9247,232],{"class":114},[36,9249,9045],{"class":114},[36,9251,3110],{"class":53},[36,9253,9254],{"class":114},"0x",[36,9256,9257],{"class":49},"1100",[36,9259,2752],{"class":53},[36,9261,9262],{"class":42}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,9264,9265],{"class":38,"line":88},[36,9266,9267],{"class":42},"    \u002F\u002F访问野指针报错\n",[36,9269,9270,9272,9274,9276,9278],{"class":38,"line":195},[36,9271,4089],{"class":53},[36,9273,8946],{"class":114},[36,9275,19],{"class":53},[36,9277,3717],{"class":114},[36,9279,3739],{"class":53},[36,9281,9282],{"class":38,"line":1517},[36,9283,4103],{"class":53},[19,9285,9286],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9288,9290],{"id":9289},"_35const修饰指针","3.5const修饰指针",[19,9292,9293],{},"三种情况：",[3680,9295,9296,9299,9302],{},[436,9297,9298],{},"const修饰指针 常量指针",[436,9300,9301],{},"const修饰常量 指针常量",[436,9303,9304],{},"const即修饰指针，又修饰常量",[433,9306,9307],{},[436,9308,9309],{},"常量指针",[26,9311,9313],{"className":2693,"code":9312,"language":2695,"meta":31,"style":31},"const int *p=&a;\n",[33,9314,9315],{"__ignoreMap":31},[36,9316,9317,9320,9322,9324,9326,9328],{"class":38,"line":39},[36,9318,9319],{"class":114},"const",[36,9321,837],{"class":114},[36,9323,9045],{"class":114},[36,9325,19],{"class":53},[36,9327,8866],{"class":114},[36,9329,8724],{"class":53},[19,9331,9332],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[433,9334,9335],{"start":46},[436,9336,9337],{},"指针常量",[26,9339,9341],{"className":2693,"code":9340,"language":2695,"meta":31,"style":31},"int *const p=&a;\n",[33,9342,9343],{"__ignoreMap":31},[36,9344,9345,9347,9350,9353,9355],{"class":38,"line":39},[36,9346,232],{"class":114},[36,9348,9349],{"class":114}," *const",[36,9351,9352],{"class":53}," p",[36,9354,8866],{"class":114},[36,9356,8724],{"class":53},[19,9358,9359],{},"指针的指向不可以改，指针指向的值可以改",[433,9361,9362],{"start":82},[436,9363,9304],{},[26,9365,9367],{"className":2693,"code":9366,"language":2695,"meta":31,"style":31},"const int *const p=&a;\n",[33,9368,9369],{"__ignoreMap":31},[36,9370,9371,9373,9375,9377,9379,9381],{"class":38,"line":39},[36,9372,9319],{"class":114},[36,9374,837],{"class":114},[36,9376,9349],{"class":114},[36,9378,9352],{"class":53},[36,9380,8866],{"class":114},[36,9382,8724],{"class":53},[19,9384,9385],{},"指针的指向和指针指向的值都不可以改变",[14,9387,9389],{"id":9388},"_36指针和数组","3.6指针和数组",[26,9391,9393],{"className":2693,"code":9392,"language":2695,"meta":31,"style":31},"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",[33,9394,9395,9403,9407,9412,9466,9487,9503,9519,9530,9547,9552,9566,9592,9596,9608,9617,9621],{"__ignoreMap":31},[36,9396,9397,9399,9401],{"class":38,"line":39},[36,9398,232],{"class":114},[36,9400,4510],{"class":4500},[36,9402,4513],{"class":53},[36,9404,9405],{"class":38,"line":46},[36,9406,4084],{"class":53},[36,9408,9409],{"class":38,"line":82},[36,9410,9411],{"class":42},"    \u002F\u002F利用指针访问数组中的元素\n",[36,9413,9414,9416,9418,9420,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464],{"class":38,"line":88},[36,9415,4522],{"class":114},[36,9417,6493],{"class":53},[36,9419,1317],{"class":49},[36,9421,3614],{"class":53},[36,9423,115],{"class":114},[36,9425,2065],{"class":53},[36,9427,707],{"class":49},[36,9429,3059],{"class":53},[36,9431,1188],{"class":49},[36,9433,3059],{"class":53},[36,9435,2767],{"class":49},[36,9437,3059],{"class":53},[36,9439,2977],{"class":49},[36,9441,3059],{"class":53},[36,9443,1134],{"class":49},[36,9445,3059],{"class":53},[36,9447,3025],{"class":49},[36,9449,3059],{"class":53},[36,9451,3050],{"class":49},[36,9453,3059],{"class":53},[36,9455,3076],{"class":49},[36,9457,3059],{"class":53},[36,9459,3101],{"class":49},[36,9461,3059],{"class":53},[36,9463,1317],{"class":49},[36,9465,6526],{"class":53},[36,9467,9468,9470,9472,9475,9477,9479,9481,9483,9485],{"class":38,"line":195},[36,9469,4089],{"class":53},[36,9471,3717],{"class":114},[36,9473,9474],{"class":57},"\"数组的第一个元素为：\"",[36,9476,3717],{"class":114},[36,9478,6437],{"class":53},[36,9480,713],{"class":49},[36,9482,3614],{"class":53},[36,9484,3717],{"class":114},[36,9486,3739],{"class":53},[36,9488,9489,9491,9493,9495,9497,9500],{"class":38,"line":1517},[36,9490,4522],{"class":114},[36,9492,9045],{"class":114},[36,9494,19],{"class":53},[36,9496,115],{"class":114},[36,9498,9499],{"class":53},"arr;",[36,9501,9502],{"class":42},"\u002F\u002F注意数才要加取地址符号&\n",[36,9504,9505,9507,9509,9511,9513,9515,9517],{"class":38,"line":2421},[36,9506,4089],{"class":53},[36,9508,3717],{"class":114},[36,9510,9474],{"class":57},[36,9512,8946],{"class":114},[36,9514,19],{"class":53},[36,9516,3717],{"class":114},[36,9518,3739],{"class":53},[36,9520,9521,9523,9525,9527],{"class":38,"line":2446},[36,9522,8863],{"class":53},[36,9524,4826],{"class":114},[36,9526,2752],{"class":53},[36,9528,9529],{"class":42}," \u002F\u002F让指针向后偏移4个字节\n",[36,9531,9532,9534,9536,9539,9541,9543,9545],{"class":38,"line":2469},[36,9533,4089],{"class":53},[36,9535,3717],{"class":114},[36,9537,9538],{"class":57},"\"数组的第二个元素为：\"",[36,9540,8946],{"class":114},[36,9542,19],{"class":53},[36,9544,3717],{"class":114},[36,9546,3739],{"class":53},[36,9548,9549],{"class":38,"line":2492},[36,9550,9551],{"class":42},"    \u002F\u002F利用指针遍历数组\n",[36,9553,9554,9556,9558,9561,9563],{"class":38,"line":4150},[36,9555,4522],{"class":114},[36,9557,9045],{"class":114},[36,9559,9560],{"class":53},"p2",[36,9562,115],{"class":114},[36,9564,9565],{"class":53},"arr;\n",[36,9567,9568,9570,9572,9574,9576,9578,9580,9582,9584,9586,9588,9590],{"class":38,"line":4155},[36,9569,5732],{"class":114},[36,9571,4196],{"class":53},[36,9573,232],{"class":114},[36,9575,5563],{"class":53},[36,9577,115],{"class":114},[36,9579,713],{"class":49},[36,9581,5570],{"class":53},[36,9583,1507],{"class":114},[36,9585,1317],{"class":49},[36,9587,5570],{"class":53},[36,9589,4826],{"class":114},[36,9591,61],{"class":53},[36,9593,9594],{"class":38,"line":4161},[36,9595,4567],{"class":53},[36,9597,9598,9600,9602,9604,9606],{"class":38,"line":4166},[36,9599,5982],{"class":53},[36,9601,8946],{"class":114},[36,9603,9560],{"class":53},[36,9605,3717],{"class":114},[36,9607,3739],{"class":53},[36,9609,9610,9613,9615],{"class":38,"line":4180},[36,9611,9612],{"class":53},"        p2",[36,9614,4826],{"class":114},[36,9616,3833],{"class":53},[36,9618,9619],{"class":38,"line":4185},[36,9620,4721],{"class":53},[36,9622,9623],{"class":38,"line":4191},[36,9624,4103],{"class":53},[14,9626,9628],{"id":9627},"_37指针和函数","3.7指针和函数",[19,9630,9631],{},"利用指针做函数参数，可以修改实参的值",[19,9633,9634],{},"值传递：只改变形参，不改变实参",[19,9636,9637],{},"地址传递：",[26,9639,9641],{"className":2693,"code":9640,"language":2695,"meta":31,"style":31},"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",[33,9642,9643,9668,9672,9684,9695,9705,9709,9717,9721,9733,9745,9750,9766,9781,9796],{"__ignoreMap":31},[36,9644,9645,9647,9649,9651,9653,9655,9658,9660,9662,9664,9666],{"class":38,"line":39},[36,9646,7892],{"class":114},[36,9648,7895],{"class":4500},[36,9650,54],{"class":53},[36,9652,232],{"class":114},[36,9654,9045],{"class":114},[36,9656,9657],{"class":1997},"p1",[36,9659,3059],{"class":53},[36,9661,232],{"class":114},[36,9663,9045],{"class":114},[36,9665,9560],{"class":1997},[36,9667,61],{"class":53},[36,9669,9670],{"class":38,"line":46},[36,9671,4084],{"class":53},[36,9673,9674,9676,9678,9681],{"class":38,"line":82},[36,9675,4522],{"class":114},[36,9677,6786],{"class":53},[36,9679,9680],{"class":114},"=*",[36,9682,9683],{"class":53},"p1;\n",[36,9685,9686,9688,9690,9692],{"class":38,"line":88},[36,9687,8930],{"class":114},[36,9689,9657],{"class":53},[36,9691,9680],{"class":114},[36,9693,9694],{"class":53},"p2;\n",[36,9696,9697,9699,9701,9703],{"class":38,"line":195},[36,9698,8930],{"class":114},[36,9700,9560],{"class":53},[36,9702,115],{"class":114},[36,9704,6811],{"class":53},[36,9706,9707],{"class":38,"line":1517},[36,9708,4103],{"class":53},[36,9710,9711,9713,9715],{"class":38,"line":2421},[36,9712,232],{"class":114},[36,9714,4510],{"class":4500},[36,9716,4513],{"class":53},[36,9718,9719],{"class":38,"line":2446},[36,9720,4084],{"class":53},[36,9722,9723,9725,9727,9729,9731],{"class":38,"line":2469},[36,9724,4522],{"class":114},[36,9726,3936],{"class":53},[36,9728,115],{"class":114},[36,9730,1317],{"class":49},[36,9732,3833],{"class":53},[36,9734,9735,9737,9739,9741,9743],{"class":38,"line":2492},[36,9736,4522],{"class":114},[36,9738,5365],{"class":53},[36,9740,115],{"class":114},[36,9742,3376],{"class":49},[36,9744,3833],{"class":53},[36,9746,9747],{"class":38,"line":4150},[36,9748,9749],{"class":42},"    \u002F\u002F地址传递\n",[36,9751,9752,9754,9756,9758,9761,9763],{"class":38,"line":4155},[36,9753,8089],{"class":4500},[36,9755,54],{"class":53},[36,9757,3034],{"class":114},[36,9759,9760],{"class":53},"a,",[36,9762,3034],{"class":114},[36,9764,9765],{"class":53},"b);\n",[36,9767,9768,9770,9772,9774,9776,9778],{"class":38,"line":4161},[36,9769,4089],{"class":53},[36,9771,3717],{"class":114},[36,9773,2923],{"class":53},[36,9775,3717],{"class":114},[36,9777,3781],{"class":53},[36,9779,9780],{"class":42},"\u002F\u002F20\n",[36,9782,9783,9785,9787,9789,9791,9793],{"class":38,"line":4166},[36,9784,4089],{"class":53},[36,9786,3717],{"class":114},[36,9788,2947],{"class":53},[36,9790,3717],{"class":114},[36,9792,3781],{"class":53},[36,9794,9795],{"class":42},"\u002F\u002F10\n",[36,9797,9798],{"class":38,"line":4180},[36,9799,4103],{"class":53},[19,9801,9802],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9804,9806],{"id":9805},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9808,9809],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9811,9812,9813,9815],{},"例如数组：int arr",[36,9814,1317],{},"={4,3,6,9,1,2,10,8,7,5}",[26,9817,9819],{"className":2693,"code":9818,"language":2695,"meta":31,"style":31},"#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",[33,9820,9821,9827,9837,9861,9865,9896,9900,9934,9938,9956,9960,9971,9986,10001,10005,10009,10013,10017,10021,10029,10033,10038,10092,10104,10116,10121,10129,10133,10138,10163,10167,10182,10191,10195],{"__ignoreMap":31},[36,9822,9823,9825],{"class":38,"line":39},[36,9824,4486],{"class":114},[36,9826,4489],{"class":57},[36,9828,9829,9831,9833,9835],{"class":38,"line":46},[36,9830,4494],{"class":114},[36,9832,4497],{"class":114},[36,9834,4501],{"class":4500},[36,9836,3833],{"class":53},[36,9838,9839,9841,9844,9846,9848,9850,9852,9854,9856,9859],{"class":38,"line":82},[36,9840,7892],{"class":114},[36,9842,9843],{"class":4500}," bubbleSort",[36,9845,54],{"class":53},[36,9847,232],{"class":114},[36,9849,9045],{"class":114},[36,9851,19],{"class":1997},[36,9853,3059],{"class":53},[36,9855,232],{"class":114},[36,9857,9858],{"class":1997}," len",[36,9860,61],{"class":53},[36,9862,9863],{"class":38,"line":88},[36,9864,4084],{"class":53},[36,9866,9867,9869,9871,9873,9875,9877,9879,9881,9883,9886,9888,9890,9892,9894],{"class":38,"line":195},[36,9868,5732],{"class":114},[36,9870,54],{"class":53},[36,9872,232],{"class":114},[36,9874,5563],{"class":53},[36,9876,115],{"class":114},[36,9878,713],{"class":49},[36,9880,5570],{"class":53},[36,9882,1507],{"class":114},[36,9884,9885],{"class":53},"len",[36,9887,508],{"class":114},[36,9889,707],{"class":49},[36,9891,5570],{"class":53},[36,9893,4826],{"class":114},[36,9895,61],{"class":53},[36,9897,9898],{"class":38,"line":1517},[36,9899,4567],{"class":53},[36,9901,9902,9904,9906,9908,9910,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932],{"class":38,"line":2421},[36,9903,5934],{"class":114},[36,9905,54],{"class":53},[36,9907,232],{"class":114},[36,9909,5941],{"class":53},[36,9911,115],{"class":114},[36,9913,713],{"class":49},[36,9915,5948],{"class":53},[36,9917,1507],{"class":114},[36,9919,9885],{"class":53},[36,9921,508],{"class":114},[36,9923,3122],{"class":53},[36,9925,508],{"class":114},[36,9927,707],{"class":49},[36,9929,5948],{"class":53},[36,9931,4826],{"class":114},[36,9933,61],{"class":53},[36,9935,9936],{"class":38,"line":2446},[36,9937,5042],{"class":53},[36,9939,9940,9942,9945,9947,9950,9952,9954],{"class":38,"line":2469},[36,9941,7173],{"class":114},[36,9943,9944],{"class":53},"(p[j]",[36,9946,3633],{"class":114},[36,9948,9949],{"class":53},"p[j",[36,9951,121],{"class":114},[36,9953,707],{"class":49},[36,9955,7188],{"class":53},[36,9957,9958],{"class":38,"line":2492},[36,9959,7193],{"class":53},[36,9961,9962,9964,9966,9968],{"class":38,"line":4150},[36,9963,7198],{"class":114},[36,9965,6786],{"class":53},[36,9967,115],{"class":114},[36,9969,9970],{"class":53},"p[j];\n",[36,9972,9973,9976,9978,9980,9982,9984],{"class":38,"line":4155},[36,9974,9975],{"class":53},"                p[j]",[36,9977,115],{"class":114},[36,9979,9949],{"class":53},[36,9981,121],{"class":114},[36,9983,707],{"class":49},[36,9985,7221],{"class":53},[36,9987,9988,9991,9993,9995,9997,9999],{"class":38,"line":4161},[36,9989,9990],{"class":53},"                p[j",[36,9992,121],{"class":114},[36,9994,707],{"class":49},[36,9996,3614],{"class":53},[36,9998,115],{"class":114},[36,10000,6811],{"class":53},[36,10002,10003],{"class":38,"line":4166},[36,10004,7241],{"class":53},[36,10006,10007],{"class":38,"line":4180},[36,10008,5061],{"class":53},[36,10010,10011],{"class":38,"line":4185},[36,10012,4721],{"class":53},[36,10014,10015],{"class":38,"line":4191},[36,10016,4103],{"class":53},[36,10018,10019],{"class":38,"line":4212},[36,10020,546],{"emptyLinePlaceholder":545},[36,10022,10023,10025,10027],{"class":38,"line":4217},[36,10024,232],{"class":114},[36,10026,4510],{"class":4500},[36,10028,4513],{"class":53},[36,10030,10031],{"class":38,"line":4231},[36,10032,4084],{"class":53},[36,10034,10035],{"class":38,"line":4236},[36,10036,10037],{"class":42},"    \u002F\u002F 1.创建数组\n",[36,10039,10040,10042,10044,10046,10048,10050,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10090],{"class":38,"line":4264},[36,10041,4522],{"class":114},[36,10043,6493],{"class":53},[36,10045,1317],{"class":49},[36,10047,3614],{"class":53},[36,10049,115],{"class":114},[36,10051,2065],{"class":53},[36,10053,2977],{"class":49},[36,10055,3059],{"class":53},[36,10057,2767],{"class":49},[36,10059,3059],{"class":53},[36,10061,3025],{"class":49},[36,10063,3059],{"class":53},[36,10065,3101],{"class":49},[36,10067,3059],{"class":53},[36,10069,707],{"class":49},[36,10071,3059],{"class":53},[36,10073,1188],{"class":49},[36,10075,3059],{"class":53},[36,10077,1317],{"class":49},[36,10079,3059],{"class":53},[36,10081,3076],{"class":49},[36,10083,3059],{"class":53},[36,10085,3050],{"class":49},[36,10087,3059],{"class":53},[36,10089,1134],{"class":49},[36,10091,6526],{"class":53},[36,10093,10094,10096,10098,10100,10102],{"class":38,"line":4269},[36,10095,4522],{"class":114},[36,10097,9858],{"class":53},[36,10099,115],{"class":114},[36,10101,1317],{"class":49},[36,10103,3833],{"class":53},[36,10105,10106,10108,10110,10112,10114],{"class":38,"line":4286},[36,10107,4522],{"class":114},[36,10109,9045],{"class":114},[36,10111,19],{"class":53},[36,10113,115],{"class":114},[36,10115,9565],{"class":53},[36,10117,10118],{"class":38,"line":4291},[36,10119,10120],{"class":42},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,10122,10123,10126],{"class":38,"line":4296},[36,10124,10125],{"class":4500},"    bubbleSort",[36,10127,10128],{"class":53},"(p,len);\n",[36,10130,10131],{"class":38,"line":4301},[36,10132,546],{"emptyLinePlaceholder":545},[36,10134,10135],{"class":38,"line":4315},[36,10136,10137],{"class":42},"    \u002F\u002F 3.打印排序后的数组\n",[36,10139,10140,10142,10144,10146,10148,10150,10152,10154,10156,10159,10161],{"class":38,"line":4320},[36,10141,5732],{"class":114},[36,10143,4196],{"class":53},[36,10145,232],{"class":114},[36,10147,5563],{"class":53},[36,10149,115],{"class":114},[36,10151,713],{"class":49},[36,10153,5745],{"class":53},[36,10155,1507],{"class":114},[36,10157,10158],{"class":53},"len; i",[36,10160,4826],{"class":114},[36,10162,61],{"class":53},[36,10164,10165],{"class":38,"line":5109},[36,10166,4567],{"class":53},[36,10168,10169,10171,10173,10175,10177,10180],{"class":38,"line":5123},[36,10170,5982],{"class":53},[36,10172,8946],{"class":114},[36,10174,19],{"class":53},[36,10176,3717],{"class":114},[36,10178,10179],{"class":57},"\"\"",[36,10181,3833],{"class":53},[36,10183,10184,10187,10189],{"class":38,"line":5131},[36,10185,10186],{"class":53},"        p",[36,10188,4826],{"class":114},[36,10190,3833],{"class":53},[36,10192,10193],{"class":38,"line":5136},[36,10194,4721],{"class":53},[36,10196,10197],{"class":38,"line":5142},[36,10198,4103],{"class":53},[2602,10200,10201],{},"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":31,"searchDepth":46,"depth":46,"links":10203},[10204,10205,10206,10207,10208,10209,10210,10211],{"id":8810,"depth":46,"text":8811},{"id":8976,"depth":46,"text":8977},{"id":9132,"depth":46,"text":9133},{"id":9210,"depth":46,"text":9211},{"id":9289,"depth":46,"text":9290},{"id":9388,"depth":46,"text":9389},{"id":9627,"depth":46,"text":9628},{"id":9805,"depth":46,"text":9806},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8799,"description":8807},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10218,"title":10219,"body":10220,"description":10227,"extension":2631,"meta":13197,"navigation":545,"path":13198,"seo":13199,"stem":13200,"__hash__":13201},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10221,"toc":13188},[10222,10225,10228,10232,10235,10238,10249,10587,10590,10594,10597,10604,10859,10863,10866,10869,11024,11028,11031,11034,11240,11244,11247,11550,11552,11560,11564,11567,11718,11720,11731,11788,11792,11797,12453,12461,12464,12558,12560,13180,13185],[10,10223,10219],{"id":10224},"_4结构体",[19,10226,10227],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10229,10231],{"id":10230},"_41结构体定义与使用","4.1结构体定义与使用",[19,10233,10234],{},"语法：struct 结构体名 {结构体成员列表}；",[19,10236,10237],{},"通过结构体创建变量的方式：",[3680,10239,10240,10243,10246],{},[436,10241,10242],{},"struct 结构体名 变量名",[436,10244,10245],{},"struct 结构体名 变量名={成员1值，成员2值...}",[436,10247,10248],{},"定义结构体时顺便创建变量",[26,10250,10252],{"className":2693,"code":10251,"language":2695,"meta":31,"style":31},"#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",[33,10253,10254,10260,10270,10277,10282,10290,10294,10299,10303,10308,10313,10318,10325,10330,10337,10341,10348,10352,10356,10360,10364,10368,10372,10378,10382,10388,10396,10404,10408,10413,10418,10429,10434,10446,10457,10468,10473,10497,10502,10508,10535,10540,10546,10558,10570,10582],{"__ignoreMap":31},[36,10255,10256,10258],{"class":38,"line":39},[36,10257,4486],{"class":114},[36,10259,4489],{"class":57},[36,10261,10262,10264,10266,10268],{"class":38,"line":46},[36,10263,4494],{"class":114},[36,10265,4497],{"class":114},[36,10267,4501],{"class":4500},[36,10269,3833],{"class":53},[36,10271,10272,10274],{"class":38,"line":82},[36,10273,4486],{"class":114},[36,10275,10276],{"class":57},"\u003Cstring>\n",[36,10278,10279],{"class":38,"line":88},[36,10280,10281],{"class":42},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,10283,10284,10287],{"class":38,"line":195},[36,10285,10286],{"class":114},"struct",[36,10288,10289],{"class":4500}," Student\n",[36,10291,10292],{"class":38,"line":1517},[36,10293,4084],{"class":53},[36,10295,10296],{"class":38,"line":2421},[36,10297,10298],{"class":42},"    \u002F\u002F成员列表\n",[36,10300,10301],{"class":38,"line":2446},[36,10302,546],{"emptyLinePlaceholder":545},[36,10304,10305],{"class":38,"line":2469},[36,10306,10307],{"class":42},"    \u002F\u002F姓名\n",[36,10309,10310],{"class":38,"line":2492},[36,10311,10312],{"class":53},"    string name;\n",[36,10314,10315],{"class":38,"line":4150},[36,10316,10317],{"class":42},"    \u002F\u002F年龄\n",[36,10319,10320,10322],{"class":38,"line":4155},[36,10321,4522],{"class":114},[36,10323,10324],{"class":53}," age;\n",[36,10326,10327],{"class":38,"line":4161},[36,10328,10329],{"class":42},"    \u002F\u002F分数\n",[36,10331,10332,10334],{"class":38,"line":4166},[36,10333,4522],{"class":114},[36,10335,10336],{"class":53}," score;\n",[36,10338,10339],{"class":38,"line":4180},[36,10340,6526],{"class":53},[36,10342,10343,10345],{"class":38,"line":4185},[36,10344,10286],{"class":114},[36,10346,10347],{"class":4500}," School\n",[36,10349,10350],{"class":38,"line":4191},[36,10351,4084],{"class":53},[36,10353,10354],{"class":38,"line":4212},[36,10355,10298],{"class":42},[36,10357,10358],{"class":38,"line":4217},[36,10359,546],{"emptyLinePlaceholder":545},[36,10361,10362],{"class":38,"line":4231},[36,10363,10307],{"class":42},[36,10365,10366],{"class":38,"line":4236},[36,10367,10312],{"class":53},[36,10369,10370],{"class":38,"line":4264},[36,10371,10317],{"class":42},[36,10373,10374,10376],{"class":38,"line":4269},[36,10375,4522],{"class":114},[36,10377,10324],{"class":53},[36,10379,10380],{"class":38,"line":4286},[36,10381,10329],{"class":42},[36,10383,10384,10386],{"class":38,"line":4291},[36,10385,4522],{"class":114},[36,10387,10336],{"class":53},[36,10389,10390,10393],{"class":38,"line":4296},[36,10391,10392],{"class":53},"} s3;",[36,10394,10395],{"class":42}," \u002F\u002F创建结构体时就创建了变量\n",[36,10397,10398,10400,10402],{"class":38,"line":4301},[36,10399,232],{"class":114},[36,10401,4510],{"class":4500},[36,10403,4513],{"class":53},[36,10405,10406],{"class":38,"line":4315},[36,10407,4084],{"class":53},[36,10409,10410],{"class":38,"line":4320},[36,10411,10412],{"class":42},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,10414,10415],{"class":38,"line":5109},[36,10416,10417],{"class":42},"    \u002F\u002F2.1 struct Student s1;\n",[36,10419,10420,10423,10426],{"class":38,"line":5123},[36,10421,10422],{"class":114},"    struct",[36,10424,10425],{"class":4500}," Student",[36,10427,10428],{"class":53}," s1;\n",[36,10430,10431],{"class":38,"line":5131},[36,10432,10433],{"class":42},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,10435,10436,10439,10441,10444],{"class":38,"line":5136},[36,10437,10438],{"class":53},"    s1.name",[36,10440,115],{"class":114},[36,10442,10443],{"class":57},"\"张三\"",[36,10445,3833],{"class":53},[36,10447,10448,10451,10453,10455],{"class":38,"line":5142},[36,10449,10450],{"class":53},"    s1.age",[36,10452,115],{"class":114},[36,10454,3326],{"class":49},[36,10456,3833],{"class":53},[36,10458,10459,10462,10464,10466],{"class":38,"line":5148},[36,10460,10461],{"class":53},"    s1.score",[36,10463,115],{"class":114},[36,10465,2938],{"class":49},[36,10467,3833],{"class":53},[36,10469,10470],{"class":38,"line":5153},[36,10471,10472],{"class":42},"    \u002F\u002F输出结果\n",[36,10474,10476,10478,10480,10483,10485,10488,10490,10493,10495],{"class":38,"line":10475},37,[36,10477,4089],{"class":53},[36,10479,3717],{"class":114},[36,10481,10482],{"class":53},"s1.name",[36,10484,3717],{"class":114},[36,10486,10487],{"class":53},"s1.age",[36,10489,3717],{"class":114},[36,10491,10492],{"class":53},"s1.score",[36,10494,3717],{"class":114},[36,10496,3739],{"class":53},[36,10498,10500],{"class":38,"line":10499},38,[36,10501,546],{"emptyLinePlaceholder":545},[36,10503,10505],{"class":38,"line":10504},39,[36,10506,10507],{"class":42},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,10509,10511,10513,10515,10518,10520,10522,10525,10527,10529,10531,10533],{"class":38,"line":10510},40,[36,10512,10422],{"class":114},[36,10514,10425],{"class":4500},[36,10516,10517],{"class":53}," s2",[36,10519,115],{"class":114},[36,10521,2065],{"class":53},[36,10523,10524],{"class":57},"\"王五\"",[36,10526,3059],{"class":53},[36,10528,3326],{"class":49},[36,10530,3059],{"class":53},[36,10532,2938],{"class":49},[36,10534,6526],{"class":53},[36,10536,10538],{"class":38,"line":10537},41,[36,10539,546],{"emptyLinePlaceholder":545},[36,10541,10543],{"class":38,"line":10542},42,[36,10544,10545],{"class":42},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,10547,10549,10552,10554,10556],{"class":38,"line":10548},43,[36,10550,10551],{"class":53},"    s3.name",[36,10553,115],{"class":114},[36,10555,6209],{"class":57},[36,10557,3833],{"class":53},[36,10559,10561,10564,10566,10568],{"class":38,"line":10560},44,[36,10562,10563],{"class":53},"    s3.age",[36,10565,115],{"class":114},[36,10567,3326],{"class":49},[36,10569,3833],{"class":53},[36,10571,10573,10576,10578,10580],{"class":38,"line":10572},45,[36,10574,10575],{"class":53},"    s3.score",[36,10577,115],{"class":114},[36,10579,3376],{"class":49},[36,10581,3833],{"class":53},[36,10583,10585],{"class":38,"line":10584},46,[36,10586,4103],{"class":53},[19,10588,10589],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10591,10593],{"id":10592},"_42结构体数组","4.2结构体数组",[19,10595,10596],{},"将自定义的结构体放入到数组中方便维护",[19,10598,10599,10600,10603],{},"语法：struct 结构体名 数组名",[36,10601,10602],{},"元素个数","={ {}，{},...{} };",[26,10605,10607],{"className":2693,"code":10606,"language":2695,"meta":31,"style":31},"#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",[33,10608,10609,10615,10625,10631,10636,10642,10646,10650,10656,10662,10666,10670,10678,10682,10687,10702,10706,10722,10738,10742,10747,10763,10778,10793,10798,10824,10828,10851,10855],{"__ignoreMap":31},[36,10610,10611,10613],{"class":38,"line":39},[36,10612,4486],{"class":114},[36,10614,4489],{"class":57},[36,10616,10617,10619,10621,10623],{"class":38,"line":46},[36,10618,4494],{"class":114},[36,10620,4497],{"class":114},[36,10622,4501],{"class":4500},[36,10624,3833],{"class":53},[36,10626,10627,10629],{"class":38,"line":82},[36,10628,4486],{"class":114},[36,10630,10276],{"class":57},[36,10632,10633],{"class":38,"line":88},[36,10634,10635],{"class":42},"\u002F\u002F1.定义结构体\n",[36,10637,10638,10640],{"class":38,"line":195},[36,10639,10286],{"class":114},[36,10641,10289],{"class":4500},[36,10643,10644],{"class":38,"line":1517},[36,10645,4084],{"class":53},[36,10647,10648],{"class":38,"line":2421},[36,10649,10312],{"class":53},[36,10651,10652,10654],{"class":38,"line":2446},[36,10653,4522],{"class":114},[36,10655,10324],{"class":53},[36,10657,10658,10660],{"class":38,"line":2469},[36,10659,4522],{"class":114},[36,10661,10336],{"class":53},[36,10663,10664],{"class":38,"line":2492},[36,10665,546],{"emptyLinePlaceholder":545},[36,10667,10668],{"class":38,"line":4150},[36,10669,6526],{"class":53},[36,10671,10672,10674,10676],{"class":38,"line":4155},[36,10673,232],{"class":114},[36,10675,4510],{"class":4500},[36,10677,4513],{"class":53},[36,10679,10680],{"class":38,"line":4161},[36,10681,4084],{"class":53},[36,10683,10684],{"class":38,"line":4166},[36,10685,10686],{"class":42},"    \u002F\u002F2.创建结构体数组\n",[36,10688,10689,10691,10693,10696,10698,10700],{"class":38,"line":4180},[36,10690,10422],{"class":114},[36,10692,10425],{"class":4500},[36,10694,10695],{"class":53}," stuArray[",[36,10697,1188],{"class":49},[36,10699,3614],{"class":53},[36,10701,7439],{"class":114},[36,10703,10704],{"class":38,"line":4185},[36,10705,4567],{"class":53},[36,10707,10708,10710,10712,10714,10716,10718,10720],{"class":38,"line":4191},[36,10709,7448],{"class":53},[36,10711,10443],{"class":57},[36,10713,3059],{"class":53},[36,10715,3326],{"class":49},[36,10717,3059],{"class":53},[36,10719,166],{"class":49},[36,10721,7461],{"class":53},[36,10723,10724,10726,10728,10730,10732,10734,10736],{"class":38,"line":4212},[36,10725,7448],{"class":53},[36,10727,6209],{"class":57},[36,10729,3059],{"class":53},[36,10731,3252],{"class":49},[36,10733,3059],{"class":53},[36,10735,3252],{"class":49},[36,10737,4103],{"class":53},[36,10739,10740],{"class":38,"line":4217},[36,10741,4721],{"class":53},[36,10743,10744],{"class":38,"line":4231},[36,10745,10746],{"class":42},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,10748,10749,10752,10754,10757,10759,10761],{"class":38,"line":4236},[36,10750,10751],{"class":53},"    stuArray[",[36,10753,707],{"class":49},[36,10755,10756],{"class":53},"].name",[36,10758,115],{"class":114},[36,10760,6232],{"class":57},[36,10762,3833],{"class":53},[36,10764,10765,10767,10769,10772,10774,10776],{"class":38,"line":4264},[36,10766,10751],{"class":53},[36,10768,707],{"class":49},[36,10770,10771],{"class":53},"].age",[36,10773,115],{"class":114},[36,10775,1188],{"class":49},[36,10777,3833],{"class":53},[36,10779,10780,10782,10784,10787,10789,10791],{"class":38,"line":4269},[36,10781,10751],{"class":53},[36,10783,707],{"class":49},[36,10785,10786],{"class":53},"].score",[36,10788,115],{"class":114},[36,10790,1188],{"class":49},[36,10792,3833],{"class":53},[36,10794,10795],{"class":38,"line":4286},[36,10796,10797],{"class":42},"    \u002F\u002F4.遍历结构体数组\n",[36,10799,10800,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822],{"class":38,"line":4291},[36,10801,5732],{"class":114},[36,10803,4196],{"class":53},[36,10805,232],{"class":114},[36,10807,5563],{"class":53},[36,10809,115],{"class":114},[36,10811,713],{"class":49},[36,10813,5570],{"class":53},[36,10815,1507],{"class":114},[36,10817,1188],{"class":49},[36,10819,5570],{"class":53},[36,10821,4826],{"class":114},[36,10823,61],{"class":53},[36,10825,10826],{"class":38,"line":4296},[36,10827,4567],{"class":53},[36,10829,10830,10832,10834,10837,10839,10842,10844,10847,10849],{"class":38,"line":4301},[36,10831,5982],{"class":53},[36,10833,3717],{"class":114},[36,10835,10836],{"class":53},"stuArray[i].name",[36,10838,3717],{"class":114},[36,10840,10841],{"class":53},"stuArray[i].age",[36,10843,3717],{"class":114},[36,10845,10846],{"class":53},"stuArray[i].score",[36,10848,3717],{"class":114},[36,10850,3739],{"class":53},[36,10852,10853],{"class":38,"line":4315},[36,10854,4721],{"class":53},[36,10856,10857],{"class":38,"line":4320},[36,10858,4103],{"class":53},[14,10860,10862],{"id":10861},"_43结构体指针","4.3结构体指针",[19,10864,10865],{},"作用：通过指针访问结构体中的成员",[19,10867,10868],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,10870,10872],{"className":2693,"code":10871,"language":2695,"meta":31,"style":31},"#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",[33,10873,10874,10880,10890,10896,10900,10906,10910,10914,10920,10926,10930,10938,10942,10947,10972,10977,10992,10997,11020],{"__ignoreMap":31},[36,10875,10876,10878],{"class":38,"line":39},[36,10877,4486],{"class":114},[36,10879,4489],{"class":57},[36,10881,10882,10884,10886,10888],{"class":38,"line":46},[36,10883,4494],{"class":114},[36,10885,4497],{"class":114},[36,10887,4501],{"class":4500},[36,10889,3833],{"class":53},[36,10891,10892,10894],{"class":38,"line":82},[36,10893,4486],{"class":114},[36,10895,10276],{"class":57},[36,10897,10898],{"class":38,"line":88},[36,10899,10635],{"class":42},[36,10901,10902,10904],{"class":38,"line":195},[36,10903,10286],{"class":114},[36,10905,10289],{"class":4500},[36,10907,10908],{"class":38,"line":1517},[36,10909,4084],{"class":53},[36,10911,10912],{"class":38,"line":2421},[36,10913,10312],{"class":53},[36,10915,10916,10918],{"class":38,"line":2446},[36,10917,4522],{"class":114},[36,10919,10324],{"class":53},[36,10921,10922,10924],{"class":38,"line":2469},[36,10923,4522],{"class":114},[36,10925,10336],{"class":53},[36,10927,10928],{"class":38,"line":2492},[36,10929,6526],{"class":53},[36,10931,10932,10934,10936],{"class":38,"line":4150},[36,10933,232],{"class":114},[36,10935,4510],{"class":4500},[36,10937,4513],{"class":53},[36,10939,10940],{"class":38,"line":4155},[36,10941,4084],{"class":53},[36,10943,10944],{"class":38,"line":4161},[36,10945,10946],{"class":42},"    \u002F\u002F创建学生结构体变量\n",[36,10948,10949,10951,10953,10956,10958,10960,10962,10964,10966,10968,10970],{"class":38,"line":4166},[36,10950,10422],{"class":114},[36,10952,10425],{"class":4500},[36,10954,10955],{"class":53}," s",[36,10957,115],{"class":114},[36,10959,2065],{"class":53},[36,10961,10443],{"class":57},[36,10963,3059],{"class":53},[36,10965,3326],{"class":49},[36,10967,3059],{"class":53},[36,10969,4259],{"class":49},[36,10971,6526],{"class":53},[36,10973,10974],{"class":38,"line":4180},[36,10975,10976],{"class":42},"    \u002F\u002F通过指针指向结构体变量\n",[36,10978,10979,10981,10983,10985,10987,10989],{"class":38,"line":4185},[36,10980,10422],{"class":114},[36,10982,10425],{"class":4500},[36,10984,9045],{"class":114},[36,10986,19],{"class":53},[36,10988,8866],{"class":114},[36,10990,10991],{"class":53},"s\n",[36,10993,10994],{"class":38,"line":4191},[36,10995,10996],{"class":42},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,10998,10999,11001,11003,11006,11008,11011,11013,11016,11018],{"class":38,"line":4212},[36,11000,4089],{"class":53},[36,11002,3717],{"class":114},[36,11004,11005],{"class":53},"p->name",[36,11007,3717],{"class":114},[36,11009,11010],{"class":53},"p->age",[36,11012,3717],{"class":114},[36,11014,11015],{"class":53},"p->score",[36,11017,3717],{"class":114},[36,11019,3739],{"class":53},[36,11021,11022],{"class":38,"line":4217},[36,11023,4103],{"class":53},[14,11025,11027],{"id":11026},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,11029,11030],{},"作用：结构体中的成员可以是另一个结构体",[19,11032,11033],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,11035,11037],{"className":2693,"code":11036,"language":2695,"meta":31,"style":31},"#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",[33,11038,11039,11045,11055,11061,11066,11074,11078,11082,11088,11094,11098,11103,11110,11114,11121,11125,11131,11136,11140,11148,11152,11157,11162,11167,11178,11190,11201,11214,11225,11236],{"__ignoreMap":31},[36,11040,11041,11043],{"class":38,"line":39},[36,11042,4486],{"class":114},[36,11044,4489],{"class":57},[36,11046,11047,11049,11051,11053],{"class":38,"line":46},[36,11048,4494],{"class":114},[36,11050,4497],{"class":114},[36,11052,4501],{"class":4500},[36,11054,3833],{"class":53},[36,11056,11057,11059],{"class":38,"line":82},[36,11058,4486],{"class":114},[36,11060,10276],{"class":57},[36,11062,11063],{"class":38,"line":88},[36,11064,11065],{"class":42},"\u002F\u002F定义学生结构体\n",[36,11067,11068,11070,11072],{"class":38,"line":195},[36,11069,10286],{"class":114},[36,11071,10425],{"class":4500},[36,11073,5206],{"class":53},[36,11075,11076],{"class":38,"line":1517},[36,11077,4084],{"class":53},[36,11079,11080],{"class":38,"line":2421},[36,11081,10312],{"class":53},[36,11083,11084,11086],{"class":38,"line":2446},[36,11085,4522],{"class":114},[36,11087,10324],{"class":53},[36,11089,11090,11092],{"class":38,"line":2469},[36,11091,4522],{"class":114},[36,11093,10336],{"class":53},[36,11095,11096],{"class":38,"line":2492},[36,11097,4103],{"class":53},[36,11099,11100],{"class":38,"line":4150},[36,11101,11102],{"class":42},"\u002F\u002F定义老师结构体\n",[36,11104,11105,11107],{"class":38,"line":4155},[36,11106,10286],{"class":114},[36,11108,11109],{"class":4500}," Teacher\n",[36,11111,11112],{"class":38,"line":4161},[36,11113,4084],{"class":53},[36,11115,11116,11118],{"class":38,"line":4166},[36,11117,4522],{"class":114},[36,11119,11120],{"class":53}," id;\n",[36,11122,11123],{"class":38,"line":4180},[36,11124,10312],{"class":53},[36,11126,11127,11129],{"class":38,"line":4185},[36,11128,4522],{"class":114},[36,11130,10324],{"class":53},[36,11132,11133],{"class":38,"line":4191},[36,11134,11135],{"class":53},"    Student stu;\n",[36,11137,11138],{"class":38,"line":4212},[36,11139,4103],{"class":53},[36,11141,11142,11144,11146],{"class":38,"line":4217},[36,11143,232],{"class":114},[36,11145,4510],{"class":4500},[36,11147,8505],{"class":53},[36,11149,11150],{"class":38,"line":4231},[36,11151,4084],{"class":53},[36,11153,11154],{"class":38,"line":4236},[36,11155,11156],{"class":42},"    \u002F\u002F结构体嵌套结构体\n",[36,11158,11159],{"class":38,"line":4264},[36,11160,11161],{"class":42},"    \u002F\u002F创建老师\n",[36,11163,11164],{"class":38,"line":4269},[36,11165,11166],{"class":53},"    Teacher t;\n",[36,11168,11169,11172,11174,11176],{"class":38,"line":4286},[36,11170,11171],{"class":53},"    t.id",[36,11173,115],{"class":114},[36,11175,166],{"class":49},[36,11177,3833],{"class":53},[36,11179,11180,11183,11185,11188],{"class":38,"line":4291},[36,11181,11182],{"class":53},"    t.name",[36,11184,115],{"class":114},[36,11186,11187],{"class":57},"\"老王\"",[36,11189,3833],{"class":53},[36,11191,11192,11195,11197,11199],{"class":38,"line":4296},[36,11193,11194],{"class":53},"    t.age",[36,11196,115],{"class":114},[36,11198,3326],{"class":49},[36,11200,3833],{"class":53},[36,11202,11203,11206,11208,11211],{"class":38,"line":4301},[36,11204,11205],{"class":53},"    t.stu.name",[36,11207,115],{"class":114},[36,11209,11210],{"class":57},"\"小王\"",[36,11212,11213],{"class":53},"；\n",[36,11215,11216,11219,11221,11223],{"class":38,"line":4315},[36,11217,11218],{"class":53},"    t.stu.age",[36,11220,115],{"class":114},[36,11222,3376],{"class":49},[36,11224,3833],{"class":53},[36,11226,11227,11230,11232,11234],{"class":38,"line":4320},[36,11228,11229],{"class":53},"    t.stu.score",[36,11231,115],{"class":114},[36,11233,3025],{"class":49},[36,11235,3833],{"class":53},[36,11237,11238],{"class":38,"line":5109},[36,11239,4103],{"class":53},[14,11241,11243],{"id":11242},"_45结构体做函数参数","4.5结构体做函数参数",[19,11245,11246],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,11248,11250],{"className":2693,"code":11249,"language":2695,"meta":31,"style":31},"#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",[33,11251,11252,11258,11268,11274,11280,11284,11288,11294,11300,11304,11309,11314,11331,11335,11368,11372,11377,11396,11400,11431,11435,11443,11447,11456,11468,11480,11492,11505,11513,11526,11538,11546],{"__ignoreMap":31},[36,11253,11254,11256],{"class":38,"line":39},[36,11255,4486],{"class":114},[36,11257,4489],{"class":57},[36,11259,11260,11262,11264,11266],{"class":38,"line":46},[36,11261,4494],{"class":114},[36,11263,4497],{"class":114},[36,11265,4501],{"class":4500},[36,11267,3833],{"class":53},[36,11269,11270,11272],{"class":38,"line":82},[36,11271,4486],{"class":114},[36,11273,10276],{"class":57},[36,11275,11276,11278],{"class":38,"line":88},[36,11277,10286],{"class":114},[36,11279,10289],{"class":4500},[36,11281,11282],{"class":38,"line":195},[36,11283,4084],{"class":53},[36,11285,11286],{"class":38,"line":1517},[36,11287,10312],{"class":53},[36,11289,11290,11292],{"class":38,"line":2421},[36,11291,4522],{"class":114},[36,11293,10324],{"class":53},[36,11295,11296,11298],{"class":38,"line":2446},[36,11297,4522],{"class":114},[36,11299,10336],{"class":53},[36,11301,11302],{"class":38,"line":2469},[36,11303,6526],{"class":53},[36,11305,11306],{"class":38,"line":2492},[36,11307,11308],{"class":42},"\u002F\u002F打印学生信息的函数\n",[36,11310,11311],{"class":38,"line":4150},[36,11312,11313],{"class":42},"\u002F\u002F值传递\n",[36,11315,11316,11318,11321,11323,11325,11327,11329],{"class":38,"line":4155},[36,11317,7892],{"class":114},[36,11319,11320],{"class":4500}," printStudent1",[36,11322,54],{"class":53},[36,11324,10286],{"class":114},[36,11326,10425],{"class":4500},[36,11328,10955],{"class":1997},[36,11330,61],{"class":53},[36,11332,11333],{"class":38,"line":4161},[36,11334,4084],{"class":53},[36,11336,11337,11339,11341,11344,11346,11349,11351,11354,11356,11358,11360,11363,11365],{"class":38,"line":4166},[36,11338,9056],{"class":53},[36,11340,3717],{"class":114},[36,11342,11343],{"class":53}," s.name ",[36,11345,3717],{"class":114},[36,11347,11348],{"class":57}," \" \"",[36,11350,3982],{"class":114},[36,11352,11353],{"class":53}," s.age ",[36,11355,3717],{"class":114},[36,11357,11348],{"class":57},[36,11359,3982],{"class":114},[36,11361,11362],{"class":53}," s.score ",[36,11364,3717],{"class":114},[36,11366,11367],{"class":53}," endl;\n",[36,11369,11370],{"class":38,"line":4180},[36,11371,4103],{"class":53},[36,11373,11374],{"class":38,"line":4185},[36,11375,11376],{"class":42},"\u002F\u002F地址传递\n",[36,11378,11379,11381,11384,11386,11388,11390,11392,11394],{"class":38,"line":4191},[36,11380,7892],{"class":114},[36,11382,11383],{"class":4500}," printStudent2",[36,11385,54],{"class":53},[36,11387,10286],{"class":114},[36,11389,10425],{"class":4500},[36,11391,9045],{"class":114},[36,11393,3371],{"class":1997},[36,11395,61],{"class":53},[36,11397,11398],{"class":38,"line":4212},[36,11399,4084],{"class":53},[36,11401,11402,11404,11406,11409,11411,11413,11415,11418,11420,11422,11424,11427,11429],{"class":38,"line":4217},[36,11403,9056],{"class":53},[36,11405,3717],{"class":114},[36,11407,11408],{"class":53}," s->name ",[36,11410,3717],{"class":114},[36,11412,11348],{"class":57},[36,11414,3982],{"class":114},[36,11416,11417],{"class":53}," s->age ",[36,11419,3717],{"class":114},[36,11421,11348],{"class":57},[36,11423,3982],{"class":114},[36,11425,11426],{"class":53}," s->score ",[36,11428,3717],{"class":114},[36,11430,11367],{"class":53},[36,11432,11433],{"class":38,"line":4231},[36,11434,4103],{"class":53},[36,11436,11437,11439,11441],{"class":38,"line":4236},[36,11438,232],{"class":114},[36,11440,4510],{"class":4500},[36,11442,4513],{"class":53},[36,11444,11445],{"class":38,"line":4264},[36,11446,4084],{"class":53},[36,11448,11449,11451,11453],{"class":38,"line":4269},[36,11450,10422],{"class":114},[36,11452,10425],{"class":4500},[36,11454,11455],{"class":53}," s;\n",[36,11457,11458,11461,11463,11466],{"class":38,"line":4286},[36,11459,11460],{"class":53},"    s.name ",[36,11462,115],{"class":114},[36,11464,11465],{"class":57}," \"张三\"",[36,11467,3833],{"class":53},[36,11469,11470,11473,11475,11478],{"class":38,"line":4291},[36,11471,11472],{"class":53},"    s.age ",[36,11474,115],{"class":114},[36,11476,11477],{"class":49}," 20",[36,11479,3833],{"class":53},[36,11481,11482,11485,11487,11490],{"class":38,"line":4296},[36,11483,11484],{"class":53},"    s.score ",[36,11486,115],{"class":114},[36,11488,11489],{"class":49}," 85",[36,11491,3833],{"class":53},[36,11493,11494,11496,11498,11501,11503],{"class":38,"line":4301},[36,11495,4089],{"class":53},[36,11497,3717],{"class":114},[36,11499,11500],{"class":57},"\"值传递:\"",[36,11502,3717],{"class":114},[36,11504,3739],{"class":53},[36,11506,11507,11510],{"class":38,"line":4315},[36,11508,11509],{"class":4500},"    printStudent1",[36,11511,11512],{"class":53},"(s);\n",[36,11514,11515,11517,11519,11522,11524],{"class":38,"line":4320},[36,11516,4089],{"class":53},[36,11518,3717],{"class":114},[36,11520,11521],{"class":57},"\"地址传递:\"",[36,11523,3717],{"class":114},[36,11525,3739],{"class":53},[36,11527,11528,11531,11533,11535],{"class":38,"line":5109},[36,11529,11530],{"class":4500},"    printStudent2",[36,11532,54],{"class":53},[36,11534,3034],{"class":114},[36,11536,11537],{"class":53},"s); \n",[36,11539,11540,11542,11544],{"class":38,"line":5123},[36,11541,6621],{"class":114},[36,11543,6624],{"class":49},[36,11545,3833],{"class":53},[36,11547,11548],{"class":38,"line":5131},[36,11549,4103],{"class":53},[19,11551,695],{},[3680,11553,11554,11557],{},[436,11555,11556],{},"1.先定义结构体，不要在函数中写结构体的定义",[436,11558,11559],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11561,11563],{"id":11562},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11565,11566],{},"用const防止误操作",[26,11568,11570],{"className":2693,"code":11569,"language":2695,"meta":31,"style":31},"#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",[33,11571,11572,11578,11588,11594,11599,11603,11607,11613,11619,11623,11639,11643,11666,11670,11678,11682,11703,11710,11714],{"__ignoreMap":31},[36,11573,11574,11576],{"class":38,"line":39},[36,11575,4486],{"class":114},[36,11577,4489],{"class":57},[36,11579,11580,11582,11584,11586],{"class":38,"line":46},[36,11581,4494],{"class":114},[36,11583,4497],{"class":114},[36,11585,4501],{"class":4500},[36,11587,3833],{"class":53},[36,11589,11590,11592],{"class":38,"line":82},[36,11591,4486],{"class":114},[36,11593,10276],{"class":57},[36,11595,11596],{"class":38,"line":88},[36,11597,11598],{"class":53},"sctuct Student\n",[36,11600,11601],{"class":38,"line":195},[36,11602,4084],{"class":53},[36,11604,11605],{"class":38,"line":1517},[36,11606,10312],{"class":53},[36,11608,11609,11611],{"class":38,"line":2421},[36,11610,4522],{"class":114},[36,11612,10324],{"class":53},[36,11614,11615,11617],{"class":38,"line":2446},[36,11616,4522],{"class":114},[36,11618,10336],{"class":53},[36,11620,11621],{"class":38,"line":2469},[36,11622,6526],{"class":53},[36,11624,11625,11627,11630,11632,11635,11637],{"class":38,"line":2492},[36,11626,7892],{"class":114},[36,11628,11629],{"class":4500}," printStudents",[36,11631,54],{"class":53},[36,11633,11634],{"class":4500},"student",[36,11636,10955],{"class":1997},[36,11638,61],{"class":53},[36,11640,11641],{"class":38,"line":4150},[36,11642,4084],{"class":53},[36,11644,11645,11647,11649,11652,11654,11657,11659,11662,11664],{"class":38,"line":4155},[36,11646,4089],{"class":53},[36,11648,3717],{"class":114},[36,11650,11651],{"class":53},"s.name",[36,11653,3717],{"class":114},[36,11655,11656],{"class":53},"s.age",[36,11658,3717],{"class":114},[36,11660,11661],{"class":53},"s.score",[36,11663,3717],{"class":114},[36,11665,3739],{"class":53},[36,11667,11668],{"class":38,"line":4161},[36,11669,4103],{"class":53},[36,11671,11672,11674,11676],{"class":38,"line":4166},[36,11673,232],{"class":114},[36,11675,4510],{"class":4500},[36,11677,8505],{"class":53},[36,11679,11680],{"class":38,"line":4180},[36,11681,4084],{"class":53},[36,11683,11684,11687,11689,11691,11693,11695,11697,11699,11701],{"class":38,"line":4185},[36,11685,11686],{"class":53},"    Student s",[36,11688,115],{"class":114},[36,11690,2065],{"class":53},[36,11692,10443],{"class":57},[36,11694,3059],{"class":53},[36,11696,3326],{"class":49},[36,11698,3059],{"class":53},[36,11700,3326],{"class":49},[36,11702,6526],{"class":53},[36,11704,11705,11708],{"class":38,"line":4191},[36,11706,11707],{"class":4500},"    printStudent",[36,11709,11512],{"class":53},[36,11711,11712],{"class":38,"line":4212},[36,11713,546],{"emptyLinePlaceholder":545},[36,11715,11716],{"class":38,"line":4217},[36,11717,4103],{"class":53},[19,11719,695],{},[3680,11721,11722,11725,11728],{},[436,11723,11724],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[436,11726,11727],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[436,11729,11730],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,11732,11734],{"className":2693,"code":11733,"language":2695,"meta":31,"style":31},"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",[33,11735,11736,11755,11759,11764,11784],{"__ignoreMap":31},[36,11737,11738,11740,11742,11744,11746,11749,11751,11753],{"class":38,"line":39},[36,11739,7892],{"class":114},[36,11741,11629],{"class":4500},[36,11743,54],{"class":53},[36,11745,9319],{"class":114},[36,11747,11748],{"class":4500}," student",[36,11750,9045],{"class":114},[36,11752,3371],{"class":1997},[36,11754,61],{"class":53},[36,11756,11757],{"class":38,"line":46},[36,11758,4084],{"class":53},[36,11760,11761],{"class":38,"line":82},[36,11762,11763],{"class":42},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,11765,11766,11768,11770,11772,11774,11776,11778,11780,11782],{"class":38,"line":88},[36,11767,4089],{"class":53},[36,11769,3717],{"class":114},[36,11771,11651],{"class":53},[36,11773,3717],{"class":114},[36,11775,11656],{"class":53},[36,11777,3717],{"class":114},[36,11779,11661],{"class":53},[36,11781,3717],{"class":114},[36,11783,3739],{"class":53},[36,11785,11786],{"class":38,"line":195},[36,11787,4103],{"class":53},[14,11789,11791],{"id":11790},"_47案例","4.7案例",[433,11793,11794],{},[436,11795,11796],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,11798,11800],{"className":2693,"code":11799,"language":2695,"meta":31,"style":31},"#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",[33,11801,11802,11808,11818,11824,11831,11835,11841,11845,11850,11856,11862,11866,11870,11876,11880,11885,11890,11903,11907,11912,11938,11942,11954,11981,11985,11997,12006,12010,12015,12044,12048,12060,12069,12096,12107,12117,12121,12125,12129,12134,12158,12162,12186,12190,12209,12235,12239,12264,12287,12311,12316,12321,12326,12335,12340,12346,12367,12373,12387,12393,12420,12429,12435,12443,12448],{"__ignoreMap":31},[36,11803,11804,11806],{"class":38,"line":39},[36,11805,4486],{"class":114},[36,11807,4489],{"class":57},[36,11809,11810,11812,11814,11816],{"class":38,"line":46},[36,11811,4494],{"class":114},[36,11813,4497],{"class":114},[36,11815,4501],{"class":4500},[36,11817,3833],{"class":53},[36,11819,11820,11822],{"class":38,"line":82},[36,11821,4486],{"class":114},[36,11823,10276],{"class":57},[36,11825,11826,11828],{"class":38,"line":88},[36,11827,4486],{"class":114},[36,11829,11830],{"class":57},"\u003Cctime>\n",[36,11832,11833],{"class":38,"line":195},[36,11834,11065],{"class":42},[36,11836,11837,11839],{"class":38,"line":1517},[36,11838,10286],{"class":114},[36,11840,10289],{"class":4500},[36,11842,11843],{"class":38,"line":2421},[36,11844,4084],{"class":53},[36,11846,11847],{"class":38,"line":2446},[36,11848,11849],{"class":53},"    string sName;\n",[36,11851,11852,11854],{"class":38,"line":2469},[36,11853,4522],{"class":114},[36,11855,10324],{"class":53},[36,11857,11858,11860],{"class":38,"line":2492},[36,11859,4522],{"class":114},[36,11861,10336],{"class":53},[36,11863,11864],{"class":38,"line":4150},[36,11865,6526],{"class":53},[36,11867,11868],{"class":38,"line":4155},[36,11869,11102],{"class":42},[36,11871,11872,11874],{"class":38,"line":4161},[36,11873,10286],{"class":114},[36,11875,11109],{"class":4500},[36,11877,11878],{"class":38,"line":4166},[36,11879,4084],{"class":53},[36,11881,11882],{"class":38,"line":4180},[36,11883,11884],{"class":53},"    string tName;\n",[36,11886,11887],{"class":38,"line":4185},[36,11888,11889],{"class":42},"    \u002F\u002F学生数组\n",[36,11891,11892,11894,11896,11899,11901],{"class":38,"line":4191},[36,11893,10422],{"class":114},[36,11895,10425],{"class":4500},[36,11897,11898],{"class":53}," sArray[",[36,11900,1134],{"class":49},[36,11902,7221],{"class":53},[36,11904,11905],{"class":38,"line":4212},[36,11906,6526],{"class":53},[36,11908,11909],{"class":38,"line":4217},[36,11910,11911],{"class":42},"\u002F\u002F给老师和学生赋值的函数\n",[36,11913,11914,11916,11919,11921,11923,11926,11929,11932,11934,11936],{"class":38,"line":4231},[36,11915,7892],{"class":114},[36,11917,11918],{"class":4500}," allocateSpace",[36,11920,54],{"class":53},[36,11922,10286],{"class":114},[36,11924,11925],{"class":4500}," Teacher",[36,11927,11928],{"class":1997}," tArray",[36,11930,11931],{"class":53},"[],",[36,11933,232],{"class":114},[36,11935,9858],{"class":1997},[36,11937,61],{"class":53},[36,11939,11940],{"class":38,"line":4236},[36,11941,4084],{"class":53},[36,11943,11944,11947,11949,11952],{"class":38,"line":4264},[36,11945,11946],{"class":53},"    string nameSeed",[36,11948,115],{"class":114},[36,11950,11951],{"class":57},"\"ABCDE\"",[36,11953,3833],{"class":53},[36,11955,11956,11958,11960,11962,11965,11967,11969,11972,11974,11977,11979],{"class":38,"line":4269},[36,11957,5732],{"class":114},[36,11959,4196],{"class":53},[36,11961,232],{"class":114},[36,11963,11964],{"class":53}," i ",[36,11966,115],{"class":114},[36,11968,6624],{"class":49},[36,11970,11971],{"class":53},"; i ",[36,11973,1507],{"class":114},[36,11975,11976],{"class":53}," len; i",[36,11978,4826],{"class":114},[36,11980,61],{"class":53},[36,11982,11983],{"class":38,"line":4286},[36,11984,4567],{"class":53},[36,11986,11987,11990,11992,11995],{"class":38,"line":4291},[36,11988,11989],{"class":53},"        tArray[i].tName ",[36,11991,115],{"class":114},[36,11993,11994],{"class":57}," \"Teacher_\"",[36,11996,3833],{"class":53},[36,11998,11999,12001,12003],{"class":38,"line":4296},[36,12000,11989],{"class":53},[36,12002,1224],{"class":114},[36,12004,12005],{"class":53},"nameSeed[i];\n",[36,12007,12008],{"class":38,"line":4301},[36,12009,546],{"emptyLinePlaceholder":545},[36,12011,12012],{"class":38,"line":4315},[36,12013,12014],{"class":42},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,12016,12017,12019,12021,12023,12026,12028,12030,12033,12035,12037,12040,12042],{"class":38,"line":4320},[36,12018,5934],{"class":114},[36,12020,4196],{"class":53},[36,12022,232],{"class":114},[36,12024,12025],{"class":53}," j ",[36,12027,115],{"class":114},[36,12029,6624],{"class":49},[36,12031,12032],{"class":53},"; j ",[36,12034,1507],{"class":114},[36,12036,1323],{"class":49},[36,12038,12039],{"class":53},"; j",[36,12041,4826],{"class":114},[36,12043,61],{"class":53},[36,12045,12046],{"class":38,"line":5109},[36,12047,5042],{"class":53},[36,12049,12050,12053,12055,12058],{"class":38,"line":5123},[36,12051,12052],{"class":53},"            tArray[i].sArray[j].sName ",[36,12054,115],{"class":114},[36,12056,12057],{"class":57}," \"Student_\"",[36,12059,3833],{"class":53},[36,12061,12062,12064,12066],{"class":38,"line":5131},[36,12063,12052],{"class":53},[36,12065,1224],{"class":114},[36,12067,12068],{"class":53}," nameSeed[j];\n",[36,12070,12071,12074,12077,12079,12081,12083,12085,12087,12089,12091,12093],{"class":38,"line":5136},[36,12072,12073],{"class":114},"            int",[36,12075,12076],{"class":53}," random",[36,12078,115],{"class":114},[36,12080,4956],{"class":4500},[36,12082,4959],{"class":53},[36,12084,1095],{"class":114},[36,12086,3582],{"class":49},[36,12088,121],{"class":114},[36,12090,3082],{"class":49},[36,12092,2752],{"class":53},[36,12094,12095],{"class":42},"\u002F\u002F40~99\n",[36,12097,12098,12101,12103,12105],{"class":38,"line":5142},[36,12099,12100],{"class":53},"            tArray[i].sArray[j].age ",[36,12102,115],{"class":114},[36,12104,11477],{"class":49},[36,12106,3833],{"class":53},[36,12108,12109,12112,12114],{"class":38,"line":5148},[36,12110,12111],{"class":53},"            tArray[i].sArray[j].score ",[36,12113,115],{"class":114},[36,12115,12116],{"class":53}," random;\n",[36,12118,12119],{"class":38,"line":5153},[36,12120,5061],{"class":53},[36,12122,12123],{"class":38,"line":10475},[36,12124,4721],{"class":53},[36,12126,12127],{"class":38,"line":10499},[36,12128,4103],{"class":53},[36,12130,12131],{"class":38,"line":10504},[36,12132,12133],{"class":42},"\u002F\u002F打印所有信息的函数\n",[36,12135,12136,12138,12141,12143,12145,12147,12149,12152,12154,12156],{"class":38,"line":10510},[36,12137,7892],{"class":114},[36,12139,12140],{"class":4500}," printInfo",[36,12142,54],{"class":53},[36,12144,10286],{"class":114},[36,12146,11925],{"class":4500},[36,12148,11928],{"class":1997},[36,12150,12151],{"class":53},"[], ",[36,12153,232],{"class":114},[36,12155,9858],{"class":1997},[36,12157,61],{"class":53},[36,12159,12160],{"class":38,"line":10537},[36,12161,4084],{"class":53},[36,12163,12164,12166,12168,12170,12172,12174,12176,12178,12180,12182,12184],{"class":38,"line":10542},[36,12165,5732],{"class":114},[36,12167,4196],{"class":53},[36,12169,232],{"class":114},[36,12171,11964],{"class":53},[36,12173,115],{"class":114},[36,12175,6624],{"class":49},[36,12177,11971],{"class":53},[36,12179,1507],{"class":114},[36,12181,11976],{"class":53},[36,12183,4826],{"class":114},[36,12185,61],{"class":53},[36,12187,12188],{"class":38,"line":10548},[36,12189,4567],{"class":53},[36,12191,12192,12195,12197,12200,12202,12205,12207],{"class":38,"line":10560},[36,12193,12194],{"class":53},"        cout ",[36,12196,3717],{"class":114},[36,12198,12199],{"class":57}," \"Teacher: \"",[36,12201,3982],{"class":114},[36,12203,12204],{"class":53}," tArray[i].tName ",[36,12206,3717],{"class":114},[36,12208,11367],{"class":53},[36,12210,12211,12213,12215,12217,12219,12221,12223,12225,12227,12229,12231,12233],{"class":38,"line":10572},[36,12212,5934],{"class":114},[36,12214,4196],{"class":53},[36,12216,232],{"class":114},[36,12218,12025],{"class":53},[36,12220,115],{"class":114},[36,12222,6624],{"class":49},[36,12224,12032],{"class":53},[36,12226,1507],{"class":114},[36,12228,1323],{"class":49},[36,12230,12039],{"class":53},[36,12232,4826],{"class":114},[36,12234,61],{"class":53},[36,12236,12237],{"class":38,"line":10584},[36,12238,5042],{"class":53},[36,12240,12242,12245,12247,12250,12252,12255,12257,12260,12262],{"class":38,"line":12241},47,[36,12243,12244],{"class":53},"            cout ",[36,12246,3717],{"class":114},[36,12248,12249],{"class":57}," \"",[36,12251,1654],{"class":49},[36,12253,12254],{"class":57},"Student: \"",[36,12256,3982],{"class":114},[36,12258,12259],{"class":53}," tArray[i].sArray[j].sName",[36,12261,3717],{"class":114},[36,12263,3739],{"class":53},[36,12265,12267,12269,12271,12273,12275,12278,12280,12283,12285],{"class":38,"line":12266},48,[36,12268,12244],{"class":53},[36,12270,3717],{"class":114},[36,12272,12249],{"class":57},[36,12274,1654],{"class":49},[36,12276,12277],{"class":57},"Age: \"",[36,12279,3982],{"class":114},[36,12281,12282],{"class":53}," tArray[i].sArray[j].age ",[36,12284,3717],{"class":114},[36,12286,11367],{"class":53},[36,12288,12290,12292,12294,12296,12298,12301,12303,12306,12308],{"class":38,"line":12289},49,[36,12291,12244],{"class":53},[36,12293,3717],{"class":114},[36,12295,12249],{"class":57},[36,12297,1654],{"class":49},[36,12299,12300],{"class":57},"Score: \"",[36,12302,3982],{"class":114},[36,12304,12305],{"class":53}," tArray[i].sArray[j].score ",[36,12307,3717],{"class":114},[36,12309,12310],{"class":53}," endl;   \n",[36,12312,12314],{"class":38,"line":12313},50,[36,12315,5061],{"class":53},[36,12317,12319],{"class":38,"line":12318},51,[36,12320,4721],{"class":53},[36,12322,12324],{"class":38,"line":12323},52,[36,12325,4103],{"class":53},[36,12327,12329,12331,12333],{"class":38,"line":12328},53,[36,12330,232],{"class":114},[36,12332,4510],{"class":4500},[36,12334,4513],{"class":53},[36,12336,12338],{"class":38,"line":12337},54,[36,12339,4084],{"class":53},[36,12341,12343],{"class":38,"line":12342},55,[36,12344,12345],{"class":42},"    \u002F\u002F随机数种子\n",[36,12347,12349,12351,12353,12355,12357,12359,12361,12363,12365],{"class":38,"line":12348},56,[36,12350,4907],{"class":4500},[36,12352,4910],{"class":53},[36,12354,4913],{"class":114},[36,12356,837],{"class":114},[36,12358,3110],{"class":53},[36,12360,4920],{"class":4500},[36,12362,54],{"class":53},[36,12364,4925],{"class":49},[36,12366,4928],{"class":53},[36,12368,12370],{"class":38,"line":12369},57,[36,12371,12372],{"class":42},"    \u002F\u002F1.创建3名老师的数组\n",[36,12374,12376,12378,12380,12383,12385],{"class":38,"line":12375},58,[36,12377,10422],{"class":114},[36,12379,11925],{"class":4500},[36,12381,12382],{"class":53}," tArray[",[36,12384,2767],{"class":49},[36,12386,7221],{"class":53},[36,12388,12390],{"class":38,"line":12389},59,[36,12391,12392],{"class":42},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,12394,12396,12398,12401,12403,12406,12409,12411,12413,12416,12418],{"class":38,"line":12395},60,[36,12397,4522],{"class":114},[36,12399,12400],{"class":53}," len ",[36,12402,115],{"class":114},[36,12404,12405],{"class":114}," sizeof",[36,12407,12408],{"class":53},"(tArray) ",[36,12410,1065],{"class":114},[36,12412,12405],{"class":114},[36,12414,12415],{"class":53},"(tArray[",[36,12417,713],{"class":49},[36,12419,6387],{"class":53},[36,12421,12423,12426],{"class":38,"line":12422},61,[36,12424,12425],{"class":4500},"    allocateSpace",[36,12427,12428],{"class":53},"(tArray, len);\n",[36,12430,12432],{"class":38,"line":12431},62,[36,12433,12434],{"class":42},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,12436,12438,12441],{"class":38,"line":12437},63,[36,12439,12440],{"class":4500},"    printInfo",[36,12442,12428],{"class":53},[36,12444,12446],{"class":38,"line":12445},64,[36,12447,546],{"emptyLinePlaceholder":545},[36,12449,12451],{"class":38,"line":12450},65,[36,12452,4103],{"class":53},[433,12454,12455],{"start":46},[436,12456,12457,12460],{},[2839,12458,12459],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12462,12463],{},"五名英雄信息如下：",[26,12465,12469],{"className":12466,"code":12467,"language":12468,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[33,12470,12471,12489,12506,12523,12540],{"__ignoreMap":31},[36,12472,12473,12475,12478,12480,12482,12484,12487],{"class":38,"line":39},[36,12474,7448],{"class":53},[36,12476,12477],{"class":57},"\"刘备\"",[36,12479,3059],{"class":53},[36,12481,3451],{"class":49},[36,12483,3059],{"class":53},[36,12485,12486],{"class":57},"\"男\"",[36,12488,7461],{"class":53},[36,12490,12491,12493,12496,12498,12500,12502,12504],{"class":38,"line":46},[36,12492,7448],{"class":53},[36,12494,12495],{"class":57},"\"关羽\"",[36,12497,3059],{"class":53},[36,12499,3426],{"class":49},[36,12501,3059],{"class":53},[36,12503,12486],{"class":57},[36,12505,7461],{"class":53},[36,12507,12508,12510,12513,12515,12517,12519,12521],{"class":38,"line":82},[36,12509,7448],{"class":53},[36,12511,12512],{"class":57},"\"张飞\"",[36,12514,3059],{"class":53},[36,12516,3376],{"class":49},[36,12518,3059],{"class":53},[36,12520,12486],{"class":57},[36,12522,7461],{"class":53},[36,12524,12525,12527,12530,12532,12534,12536,12538],{"class":38,"line":88},[36,12526,7448],{"class":53},[36,12528,12529],{"class":57},"\"赵云\"",[36,12531,3059],{"class":53},[36,12533,3401],{"class":49},[36,12535,3059],{"class":53},[36,12537,12486],{"class":57},[36,12539,7461],{"class":53},[36,12541,12542,12544,12547,12549,12551,12553,12556],{"class":38,"line":195},[36,12543,7448],{"class":53},[36,12545,12546],{"class":57},"\"貂蝉\"",[36,12548,3059],{"class":53},[36,12550,3351],{"class":49},[36,12552,3059],{"class":53},[36,12554,12555],{"class":57},"\"女\"",[36,12557,7461],{"class":53},[19,12559,2327],{},[26,12561,12563],{"className":2693,"code":12562,"language":2695,"meta":31,"style":31},"#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",[33,12564,12565,12571,12581,12587,12594,12598,12602,12608,12613,12617,12622,12645,12649,12674,12678,12711,12716,12745,12750,12765,12791,12811,12816,12821,12825,12829,12834,12856,12860,12884,12888,12950,12954,12958,12966,12970,12975,12986,12990,13006,13022,13038,13054,13070,13074,13094,13116,13121,13134,13141,13146,13152,13157,13170,13176],{"__ignoreMap":31},[36,12566,12567,12569],{"class":38,"line":39},[36,12568,4486],{"class":114},[36,12570,4489],{"class":57},[36,12572,12573,12575,12577,12579],{"class":38,"line":46},[36,12574,4494],{"class":114},[36,12576,4497],{"class":114},[36,12578,4501],{"class":4500},[36,12580,3833],{"class":53},[36,12582,12583,12585],{"class":38,"line":82},[36,12584,4486],{"class":114},[36,12586,10276],{"class":57},[36,12588,12589,12591],{"class":38,"line":88},[36,12590,10286],{"class":114},[36,12592,12593],{"class":4500}," Sanguo\n",[36,12595,12596],{"class":38,"line":195},[36,12597,4084],{"class":53},[36,12599,12600],{"class":38,"line":1517},[36,12601,10312],{"class":53},[36,12603,12604,12606],{"class":38,"line":2421},[36,12605,4522],{"class":114},[36,12607,10324],{"class":53},[36,12609,12610],{"class":38,"line":2446},[36,12611,12612],{"class":53},"    string gender;\n",[36,12614,12615],{"class":38,"line":2469},[36,12616,6526],{"class":53},[36,12618,12619],{"class":38,"line":2492},[36,12620,12621],{"class":42},"\u002F\u002F定义排序函数\n",[36,12623,12624,12626,12628,12630,12633,12635,12637,12639,12641,12643],{"class":38,"line":4150},[36,12625,7892],{"class":114},[36,12627,9843],{"class":4500},[36,12629,54],{"class":53},[36,12631,12632],{"class":4500},"Sanguo",[36,12634,9045],{"class":114},[36,12636,3371],{"class":1997},[36,12638,3059],{"class":53},[36,12640,232],{"class":114},[36,12642,9858],{"class":1997},[36,12644,61],{"class":53},[36,12646,12647],{"class":38,"line":4155},[36,12648,4084],{"class":53},[36,12650,12651,12653,12655,12657,12659,12661,12663,12665,12667,12670,12672],{"class":38,"line":4161},[36,12652,5732],{"class":114},[36,12654,54],{"class":53},[36,12656,232],{"class":114},[36,12658,5563],{"class":53},[36,12660,115],{"class":114},[36,12662,713],{"class":49},[36,12664,5570],{"class":53},[36,12666,1507],{"class":114},[36,12668,12669],{"class":53},"len;i",[36,12671,4826],{"class":114},[36,12673,61],{"class":53},[36,12675,12676],{"class":38,"line":4166},[36,12677,4567],{"class":53},[36,12679,12680,12683,12685,12687,12689,12691,12693,12695,12697,12699,12701,12703,12705,12707,12709],{"class":38,"line":4180},[36,12681,12682],{"class":114},"     for",[36,12684,4196],{"class":53},[36,12686,232],{"class":114},[36,12688,5941],{"class":53},[36,12690,115],{"class":114},[36,12692,713],{"class":49},[36,12694,5948],{"class":53},[36,12696,1507],{"class":114},[36,12698,9885],{"class":53},[36,12700,508],{"class":114},[36,12702,707],{"class":49},[36,12704,508],{"class":114},[36,12706,6081],{"class":53},[36,12708,4826],{"class":114},[36,12710,61],{"class":53},[36,12712,12713],{"class":38,"line":4185},[36,12714,12715],{"class":53},"     {\n",[36,12717,12718,12721,12724,12726,12729,12731,12734,12736,12738,12740,12742],{"class":38,"line":4191},[36,12719,12720],{"class":114},"         if",[36,12722,12723],{"class":53}," ((s",[36,12725,121],{"class":114},[36,12727,12728],{"class":53},"j)->age ",[36,12730,3633],{"class":114},[36,12732,12733],{"class":53}," (s",[36,12735,121],{"class":114},[36,12737,3146],{"class":53},[36,12739,121],{"class":114},[36,12741,707],{"class":49},[36,12743,12744],{"class":53},")->age)\n",[36,12746,12747],{"class":38,"line":4212},[36,12748,12749],{"class":53},"         {\n",[36,12751,12752,12755,12757,12760,12762],{"class":38,"line":4217},[36,12753,12754],{"class":53},"             Sanguo temp",[36,12756,9680],{"class":114},[36,12758,12759],{"class":53},"(s",[36,12761,121],{"class":114},[36,12763,12764],{"class":53},"j);\n",[36,12766,12767,12770,12772,12774,12777,12779,12781,12783,12785,12787,12789],{"class":38,"line":4231},[36,12768,12769],{"class":114},"             *",[36,12771,12759],{"class":53},[36,12773,121],{"class":114},[36,12775,12776],{"class":53},"j)",[36,12778,9680],{"class":114},[36,12780,12759],{"class":53},[36,12782,121],{"class":114},[36,12784,3146],{"class":53},[36,12786,121],{"class":114},[36,12788,707],{"class":49},[36,12790,5251],{"class":53},[36,12792,12793,12795,12797,12799,12801,12803,12805,12807,12809],{"class":38,"line":4236},[36,12794,12769],{"class":114},[36,12796,12759],{"class":53},[36,12798,121],{"class":114},[36,12800,3146],{"class":53},[36,12802,121],{"class":114},[36,12804,707],{"class":49},[36,12806,3110],{"class":53},[36,12808,115],{"class":114},[36,12810,6811],{"class":53},[36,12812,12813],{"class":38,"line":4264},[36,12814,12815],{"class":53},"         }\n",[36,12817,12818],{"class":38,"line":4269},[36,12819,12820],{"class":53},"     }\n",[36,12822,12823],{"class":38,"line":4286},[36,12824,4721],{"class":53},[36,12826,12827],{"class":38,"line":4291},[36,12828,4103],{"class":53},[36,12830,12831],{"class":38,"line":4296},[36,12832,12833],{"class":42},"\u002F\u002F定义打印函数\n",[36,12835,12836,12838,12840,12842,12844,12846,12848,12850,12852,12854],{"class":38,"line":4301},[36,12837,7892],{"class":114},[36,12839,12140],{"class":4500},[36,12841,54],{"class":53},[36,12843,12632],{"class":4500},[36,12845,9045],{"class":114},[36,12847,3371],{"class":1997},[36,12849,3059],{"class":53},[36,12851,232],{"class":114},[36,12853,9858],{"class":1997},[36,12855,61],{"class":53},[36,12857,12858],{"class":38,"line":4315},[36,12859,4084],{"class":53},[36,12861,12862,12864,12866,12868,12870,12872,12874,12876,12878,12880,12882],{"class":38,"line":4320},[36,12863,5732],{"class":114},[36,12865,4196],{"class":53},[36,12867,232],{"class":114},[36,12869,5563],{"class":53},[36,12871,115],{"class":114},[36,12873,713],{"class":49},[36,12875,5570],{"class":53},[36,12877,1507],{"class":114},[36,12879,12669],{"class":53},[36,12881,4826],{"class":114},[36,12883,61],{"class":53},[36,12885,12886],{"class":38,"line":5109},[36,12887,4567],{"class":53},[36,12889,12890,12892,12894,12896,12898,12901,12903,12905,12907,12910,12912,12914,12916,12919,12921,12923,12925,12928,12930,12932,12934,12937,12939,12941,12943,12946,12948],{"class":38,"line":5123},[36,12891,5982],{"class":53},[36,12893,3717],{"class":114},[36,12895,1822],{"class":57},[36,12897,1654],{"class":49},[36,12899,12900],{"class":57},"姓名：\"",[36,12902,3717],{"class":114},[36,12904,12759],{"class":53},[36,12906,121],{"class":114},[36,12908,12909],{"class":53},"i)->name",[36,12911,3717],{"class":114},[36,12913,1822],{"class":57},[36,12915,1654],{"class":49},[36,12917,12918],{"class":57},"年龄：\"",[36,12920,3717],{"class":114},[36,12922,12759],{"class":53},[36,12924,121],{"class":114},[36,12926,12927],{"class":53},"i)->age",[36,12929,3717],{"class":114},[36,12931,1822],{"class":57},[36,12933,1654],{"class":49},[36,12935,12936],{"class":57},"性别：\"",[36,12938,3717],{"class":114},[36,12940,12759],{"class":53},[36,12942,121],{"class":114},[36,12944,12945],{"class":53},"i)->gender",[36,12947,3717],{"class":114},[36,12949,3739],{"class":53},[36,12951,12952],{"class":38,"line":5131},[36,12953,4721],{"class":53},[36,12955,12956],{"class":38,"line":5136},[36,12957,4103],{"class":53},[36,12959,12960,12962,12964],{"class":38,"line":5142},[36,12961,232],{"class":114},[36,12963,4510],{"class":4500},[36,12965,4513],{"class":53},[36,12967,12968],{"class":38,"line":5148},[36,12969,4084],{"class":53},[36,12971,12972],{"class":38,"line":5153},[36,12973,12974],{"class":42},"    \u002F\u002F定义结构体变量\n",[36,12976,12977,12980,12982,12984],{"class":38,"line":10475},[36,12978,12979],{"class":53},"    Sanguo s1[",[36,12981,1134],{"class":49},[36,12983,3614],{"class":53},[36,12985,7439],{"class":114},[36,12987,12988],{"class":38,"line":10499},[36,12989,4567],{"class":53},[36,12991,12992,12994,12996,12998,13000,13002,13004],{"class":38,"line":10504},[36,12993,7448],{"class":53},[36,12995,12477],{"class":57},[36,12997,3059],{"class":53},[36,12999,3451],{"class":49},[36,13001,3059],{"class":53},[36,13003,12486],{"class":57},[36,13005,7461],{"class":53},[36,13007,13008,13010,13012,13014,13016,13018,13020],{"class":38,"line":10510},[36,13009,7448],{"class":53},[36,13011,12495],{"class":57},[36,13013,3059],{"class":53},[36,13015,3426],{"class":49},[36,13017,3059],{"class":53},[36,13019,12486],{"class":57},[36,13021,7461],{"class":53},[36,13023,13024,13026,13028,13030,13032,13034,13036],{"class":38,"line":10537},[36,13025,7448],{"class":53},[36,13027,12512],{"class":57},[36,13029,3059],{"class":53},[36,13031,3376],{"class":49},[36,13033,3059],{"class":53},[36,13035,12486],{"class":57},[36,13037,7461],{"class":53},[36,13039,13040,13042,13044,13046,13048,13050,13052],{"class":38,"line":10542},[36,13041,7448],{"class":53},[36,13043,12529],{"class":57},[36,13045,3059],{"class":53},[36,13047,3401],{"class":49},[36,13049,3059],{"class":53},[36,13051,12486],{"class":57},[36,13053,7461],{"class":53},[36,13055,13056,13058,13060,13062,13064,13066,13068],{"class":38,"line":10548},[36,13057,7448],{"class":53},[36,13059,12546],{"class":57},[36,13061,3059],{"class":53},[36,13063,3351],{"class":49},[36,13065,3059],{"class":53},[36,13067,12555],{"class":57},[36,13069,7461],{"class":53},[36,13071,13072],{"class":38,"line":10560},[36,13073,7482],{"class":53},[36,13075,13076,13078,13080,13082,13085,13087,13090,13092],{"class":38,"line":10572},[36,13077,4522],{"class":114},[36,13079,9858],{"class":53},[36,13081,6734],{"class":114},[36,13083,13084],{"class":53},"(s1)",[36,13086,6740],{"class":114},[36,13088,13089],{"class":53},"(s1[",[36,13091,713],{"class":49},[36,13093,6387],{"class":53},[36,13095,13096,13099,13101,13104,13106,13109,13112,13114],{"class":38,"line":10584},[36,13097,13098],{"class":53},"    Sanguo ",[36,13100,1050],{"class":114},[36,13102,13103],{"class":53},"s ",[36,13105,115],{"class":114},[36,13107,13108],{"class":114}," &",[36,13110,13111],{"class":53},"s1[",[36,13113,713],{"class":49},[36,13115,7221],{"class":53},[36,13117,13118],{"class":38,"line":12241},[36,13119,13120],{"class":42},"    \u002F\u002F排序前：\n",[36,13122,13123,13125,13127,13130,13132],{"class":38,"line":12266},[36,13124,9056],{"class":53},[36,13126,3717],{"class":114},[36,13128,13129],{"class":57}," \"排序前：\"",[36,13131,3982],{"class":114},[36,13133,11367],{"class":53},[36,13135,13136,13138],{"class":38,"line":12289},[36,13137,12440],{"class":4500},[36,13139,13140],{"class":53},"(s,len);\n",[36,13142,13143],{"class":38,"line":12313},[36,13144,13145],{"class":42},"    \u002F\u002F调用排序函数\n",[36,13147,13148,13150],{"class":38,"line":12318},[36,13149,10125],{"class":4500},[36,13151,13140],{"class":53},[36,13153,13154],{"class":38,"line":12323},[36,13155,13156],{"class":42},"    \u002F\u002F排序后\n",[36,13158,13159,13161,13163,13166,13168],{"class":38,"line":12328},[36,13160,9056],{"class":53},[36,13162,3717],{"class":114},[36,13164,13165],{"class":57}," \"排序后：\"",[36,13167,3982],{"class":114},[36,13169,11367],{"class":53},[36,13171,13172,13174],{"class":38,"line":12337},[36,13173,12440],{"class":4500},[36,13175,13140],{"class":53},[36,13177,13178],{"class":38,"line":12342},[36,13179,4103],{"class":53},[19,13181,13182,13183,1110],{},"注意：使用指针时直接用传首地址**&s",[36,13184,713],{},[2602,13186,13187],{},"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":31,"searchDepth":46,"depth":46,"links":13189},[13190,13191,13192,13193,13194,13195,13196],{"id":10230,"depth":46,"text":10231},{"id":10592,"depth":46,"text":10593},{"id":10861,"depth":46,"text":10862},{"id":11026,"depth":46,"text":11027},{"id":11242,"depth":46,"text":11243},{"id":11562,"depth":46,"text":11563},{"id":11790,"depth":46,"text":11791},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10219,"description":10227},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13203,"title":13204,"body":13205,"description":31,"extension":2631,"meta":14548,"navigation":545,"path":14549,"seo":14550,"stem":14551,"__hash__":14552},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13206,"toc":14542},[13207,13210,13214,13220,13234,13239,13242,13246,13253,13259,13262,13269,13275,13280,13283,13286,13289,13853,13856,13870,13874,13879,13895,14035,14038,14044,14047,14052,14060,14168,14171,14176,14179,14184,14187,14193,14196,14539],[10,13208,13204],{"id":13209},"_5程序内存模型",[14,13211,13213],{"id":13212},"_51内存分区模型","5.1内存分区模型",[19,13215,13216,13217],{},"C++程序在执行时，将内存大方向划分为",[2839,13218,13219],{},"4个区域",[3680,13221,13222,13225,13228,13231],{},[436,13223,13224],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[436,13226,13227],{},"全局区：存放全局变量和静态变量以及常量",[436,13229,13230],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[436,13232,13233],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,13235,13236],{},[2839,13237,13238],{},"内存四区意义：",[19,13240,13241],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[997,13243,13245],{"id":13244},"_511程序运行前","5.1.1程序运行前",[19,13247,13248,13249,13252],{},"​\t在程序编译后，生成了exe可执行程序，",[2839,13250,13251],{},"未执行该程序前","分为两个区域",[19,13254,13255,13256],{},"​\t",[2839,13257,13258],{},"代码区：",[19,13260,13261],{},"​\t\t存放 CPU 执行的机器指令",[19,13263,13264,13265,13268],{},"​\t\t代码区是",[2839,13266,13267],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13270,13264,13271,13274],{},[2839,13272,13273],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13276,13255,13277],{},[2839,13278,13279],{},"全局区：",[19,13281,13282],{},"​\t\t全局变量和静态变量存放在此.",[19,13284,13285],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13287,13288],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,13290,13292],{"className":2693,"code":13291,"language":2695,"meta":31,"style":31},"\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",[33,13293,13294,13299,13312,13325,13329,13334,13349,13364,13368,13377,13381,13386,13399,13412,13416,13421,13447,13473,13477,13504,13530,13534,13539,13555,13570,13574,13600,13626,13630,13655,13680,13684,13710,13736,13740,13756,13771,13797,13823,13827,13837,13841,13849],{"__ignoreMap":31},[36,13295,13296],{"class":38,"line":39},[36,13297,13298],{"class":42},"\u002F\u002F全局变量\n",[36,13300,13301,13303,13306,13308,13310],{"class":38,"line":46},[36,13302,232],{"class":114},[36,13304,13305],{"class":53}," g_a ",[36,13307,115],{"class":114},[36,13309,931],{"class":49},[36,13311,3833],{"class":53},[36,13313,13314,13316,13319,13321,13323],{"class":38,"line":82},[36,13315,232],{"class":114},[36,13317,13318],{"class":53}," g_b ",[36,13320,115],{"class":114},[36,13322,931],{"class":49},[36,13324,3833],{"class":53},[36,13326,13327],{"class":38,"line":88},[36,13328,546],{"emptyLinePlaceholder":545},[36,13330,13331],{"class":38,"line":195},[36,13332,13333],{"class":42},"\u002F\u002F全局常量\n",[36,13335,13336,13338,13340,13343,13345,13347],{"class":38,"line":1517},[36,13337,9319],{"class":114},[36,13339,837],{"class":114},[36,13341,13342],{"class":53}," c_g_a ",[36,13344,115],{"class":114},[36,13346,931],{"class":49},[36,13348,3833],{"class":53},[36,13350,13351,13353,13355,13358,13360,13362],{"class":38,"line":2421},[36,13352,9319],{"class":114},[36,13354,837],{"class":114},[36,13356,13357],{"class":53}," c_g_b ",[36,13359,115],{"class":114},[36,13361,931],{"class":49},[36,13363,3833],{"class":53},[36,13365,13366],{"class":38,"line":2446},[36,13367,546],{"emptyLinePlaceholder":545},[36,13369,13370,13372,13374],{"class":38,"line":2469},[36,13371,232],{"class":114},[36,13373,4510],{"class":4500},[36,13375,13376],{"class":53},"() {\n",[36,13378,13379],{"class":38,"line":2492},[36,13380,546],{"emptyLinePlaceholder":545},[36,13382,13383],{"class":38,"line":4150},[36,13384,13385],{"class":42},"    \u002F\u002F局部变量\n",[36,13387,13388,13390,13393,13395,13397],{"class":38,"line":4155},[36,13389,4522],{"class":114},[36,13391,13392],{"class":53}," a ",[36,13394,115],{"class":114},[36,13396,931],{"class":49},[36,13398,3833],{"class":53},[36,13400,13401,13403,13406,13408,13410],{"class":38,"line":4161},[36,13402,4522],{"class":114},[36,13404,13405],{"class":53}," b ",[36,13407,115],{"class":114},[36,13409,931],{"class":49},[36,13411,3833],{"class":53},[36,13413,13414],{"class":38,"line":4166},[36,13415,546],{"emptyLinePlaceholder":545},[36,13417,13418],{"class":38,"line":4180},[36,13419,13420],{"class":42},"    \u002F\u002F打印地址\n",[36,13422,13423,13425,13427,13430,13432,13434,13436,13438,13440,13443,13445],{"class":38,"line":4185},[36,13424,9056],{"class":53},[36,13426,3717],{"class":114},[36,13428,13429],{"class":57}," \"局部变量a地址为： \"",[36,13431,3982],{"class":114},[36,13433,4196],{"class":53},[36,13435,232],{"class":114},[36,13437,3110],{"class":53},[36,13439,3034],{"class":114},[36,13441,13442],{"class":53},"a ",[36,13444,3717],{"class":114},[36,13446,11367],{"class":53},[36,13448,13449,13451,13453,13456,13458,13460,13462,13464,13466,13469,13471],{"class":38,"line":4191},[36,13450,9056],{"class":53},[36,13452,3717],{"class":114},[36,13454,13455],{"class":57}," \"局部变量b地址为： \"",[36,13457,3982],{"class":114},[36,13459,4196],{"class":53},[36,13461,232],{"class":114},[36,13463,3110],{"class":53},[36,13465,3034],{"class":114},[36,13467,13468],{"class":53},"b ",[36,13470,3717],{"class":114},[36,13472,11367],{"class":53},[36,13474,13475],{"class":38,"line":4212},[36,13476,546],{"emptyLinePlaceholder":545},[36,13478,13479,13481,13483,13486,13488,13491,13493,13495,13497,13500,13502],{"class":38,"line":4217},[36,13480,9056],{"class":53},[36,13482,3717],{"class":114},[36,13484,13485],{"class":57}," \"全局变量g_a地址为： \"",[36,13487,3982],{"class":114},[36,13489,13490],{"class":53},"  (",[36,13492,232],{"class":114},[36,13494,3110],{"class":53},[36,13496,3034],{"class":114},[36,13498,13499],{"class":53},"g_a ",[36,13501,3717],{"class":114},[36,13503,11367],{"class":53},[36,13505,13506,13508,13510,13513,13515,13517,13519,13521,13523,13526,13528],{"class":38,"line":4231},[36,13507,9056],{"class":53},[36,13509,3717],{"class":114},[36,13511,13512],{"class":57}," \"全局变量g_b地址为： \"",[36,13514,3982],{"class":114},[36,13516,13490],{"class":53},[36,13518,232],{"class":114},[36,13520,3110],{"class":53},[36,13522,3034],{"class":114},[36,13524,13525],{"class":53},"g_b ",[36,13527,3717],{"class":114},[36,13529,11367],{"class":53},[36,13531,13532],{"class":38,"line":4236},[36,13533,546],{"emptyLinePlaceholder":545},[36,13535,13536],{"class":38,"line":4264},[36,13537,13538],{"class":42},"    \u002F\u002F静态变量\n",[36,13540,13541,13544,13546,13549,13551,13553],{"class":38,"line":4269},[36,13542,13543],{"class":114},"    static",[36,13545,837],{"class":114},[36,13547,13548],{"class":53}," s_a ",[36,13550,115],{"class":114},[36,13552,931],{"class":49},[36,13554,3833],{"class":53},[36,13556,13557,13559,13561,13564,13566,13568],{"class":38,"line":4286},[36,13558,13543],{"class":114},[36,13560,837],{"class":114},[36,13562,13563],{"class":53}," s_b ",[36,13565,115],{"class":114},[36,13567,931],{"class":49},[36,13569,3833],{"class":53},[36,13571,13572],{"class":38,"line":4291},[36,13573,546],{"emptyLinePlaceholder":545},[36,13575,13576,13578,13580,13583,13585,13587,13589,13591,13593,13596,13598],{"class":38,"line":4296},[36,13577,9056],{"class":53},[36,13579,3717],{"class":114},[36,13581,13582],{"class":57}," \"静态变量s_a地址为： \"",[36,13584,3982],{"class":114},[36,13586,4196],{"class":53},[36,13588,232],{"class":114},[36,13590,3110],{"class":53},[36,13592,3034],{"class":114},[36,13594,13595],{"class":53},"s_a ",[36,13597,3717],{"class":114},[36,13599,11367],{"class":53},[36,13601,13602,13604,13606,13609,13611,13613,13615,13617,13619,13622,13624],{"class":38,"line":4301},[36,13603,9056],{"class":53},[36,13605,3717],{"class":114},[36,13607,13608],{"class":57}," \"静态变量s_b地址为： \"",[36,13610,3982],{"class":114},[36,13612,4196],{"class":53},[36,13614,232],{"class":114},[36,13616,3110],{"class":53},[36,13618,3034],{"class":114},[36,13620,13621],{"class":53},"s_b ",[36,13623,3717],{"class":114},[36,13625,11367],{"class":53},[36,13627,13628],{"class":38,"line":4315},[36,13629,546],{"emptyLinePlaceholder":545},[36,13631,13632,13634,13636,13639,13641,13643,13645,13647,13649,13651,13653],{"class":38,"line":4320},[36,13633,9056],{"class":53},[36,13635,3717],{"class":114},[36,13637,13638],{"class":57}," \"字符串常量地址为： \"",[36,13640,3982],{"class":114},[36,13642,4196],{"class":53},[36,13644,232],{"class":114},[36,13646,3110],{"class":53},[36,13648,3034],{"class":114},[36,13650,3734],{"class":57},[36,13652,3982],{"class":114},[36,13654,11367],{"class":53},[36,13656,13657,13659,13661,13663,13665,13667,13669,13671,13673,13676,13678],{"class":38,"line":5109},[36,13658,9056],{"class":53},[36,13660,3717],{"class":114},[36,13662,13638],{"class":57},[36,13664,3982],{"class":114},[36,13666,4196],{"class":53},[36,13668,232],{"class":114},[36,13670,3110],{"class":53},[36,13672,3034],{"class":114},[36,13674,13675],{"class":57},"\"hello world1\"",[36,13677,3982],{"class":114},[36,13679,11367],{"class":53},[36,13681,13682],{"class":38,"line":5123},[36,13683,546],{"emptyLinePlaceholder":545},[36,13685,13686,13688,13690,13693,13695,13697,13699,13701,13703,13706,13708],{"class":38,"line":5131},[36,13687,9056],{"class":53},[36,13689,3717],{"class":114},[36,13691,13692],{"class":57}," \"全局常量c_g_a地址为： \"",[36,13694,3982],{"class":114},[36,13696,4196],{"class":53},[36,13698,232],{"class":114},[36,13700,3110],{"class":53},[36,13702,3034],{"class":114},[36,13704,13705],{"class":53},"c_g_a ",[36,13707,3717],{"class":114},[36,13709,11367],{"class":53},[36,13711,13712,13714,13716,13719,13721,13723,13725,13727,13729,13732,13734],{"class":38,"line":5136},[36,13713,9056],{"class":53},[36,13715,3717],{"class":114},[36,13717,13718],{"class":57}," \"全局常量c_g_b地址为： \"",[36,13720,3982],{"class":114},[36,13722,4196],{"class":53},[36,13724,232],{"class":114},[36,13726,3110],{"class":53},[36,13728,3034],{"class":114},[36,13730,13731],{"class":53},"c_g_b ",[36,13733,3717],{"class":114},[36,13735,11367],{"class":53},[36,13737,13738],{"class":38,"line":5142},[36,13739,546],{"emptyLinePlaceholder":545},[36,13741,13742,13745,13747,13750,13752,13754],{"class":38,"line":5148},[36,13743,13744],{"class":114},"    const",[36,13746,837],{"class":114},[36,13748,13749],{"class":53}," c_l_a ",[36,13751,115],{"class":114},[36,13753,931],{"class":49},[36,13755,3833],{"class":53},[36,13757,13758,13760,13762,13765,13767,13769],{"class":38,"line":5153},[36,13759,13744],{"class":114},[36,13761,837],{"class":114},[36,13763,13764],{"class":53}," c_l_b ",[36,13766,115],{"class":114},[36,13768,931],{"class":49},[36,13770,3833],{"class":53},[36,13772,13773,13775,13777,13780,13782,13784,13786,13788,13790,13793,13795],{"class":38,"line":10475},[36,13774,9056],{"class":53},[36,13776,3717],{"class":114},[36,13778,13779],{"class":57}," \"局部常量c_l_a地址为： \"",[36,13781,3982],{"class":114},[36,13783,4196],{"class":53},[36,13785,232],{"class":114},[36,13787,3110],{"class":53},[36,13789,3034],{"class":114},[36,13791,13792],{"class":53},"c_l_a ",[36,13794,3717],{"class":114},[36,13796,11367],{"class":53},[36,13798,13799,13801,13803,13806,13808,13810,13812,13814,13816,13819,13821],{"class":38,"line":10499},[36,13800,9056],{"class":53},[36,13802,3717],{"class":114},[36,13804,13805],{"class":57}," \"局部常量c_l_b地址为： \"",[36,13807,3982],{"class":114},[36,13809,4196],{"class":53},[36,13811,232],{"class":114},[36,13813,3110],{"class":53},[36,13815,3034],{"class":114},[36,13817,13818],{"class":53},"c_l_b ",[36,13820,3717],{"class":114},[36,13822,11367],{"class":53},[36,13824,13825],{"class":38,"line":10504},[36,13826,546],{"emptyLinePlaceholder":545},[36,13828,13829,13831,13833,13835],{"class":38,"line":10510},[36,13830,4837],{"class":4500},[36,13832,54],{"class":53},[36,13834,4842],{"class":57},[36,13836,5251],{"class":53},[36,13838,13839],{"class":38,"line":10537},[36,13840,546],{"emptyLinePlaceholder":545},[36,13842,13843,13845,13847],{"class":38,"line":10542},[36,13844,6621],{"class":114},[36,13846,6624],{"class":49},[36,13848,3833],{"class":53},[36,13850,13851],{"class":38,"line":10548},[36,13852,4103],{"class":53},[19,13854,13855],{},"总结：",[3680,13857,13858,13861,13864,13867],{},[436,13859,13860],{},"c++中程序运行前分为全局区和代码区",[436,13862,13863],{},"代码区特点是共享和只读",[436,13865,13866],{},"全局区中存放全局变量、静态变量、常量",[436,13868,13869],{},"常量区中存放const修饰的全局常量和字符串常量",[997,13871,13873],{"id":13872},"_512程序运行后","5.1.2程序运行后",[433,13875,13876],{},[436,13877,13878],{},"栈区：",[3680,13880,13881,13888],{},[436,13882,13883,13884,13887],{},"由编译器自动分配释放, 存放",[2839,13885,13886],{},"函数的参数值,局部变量","等",[436,13889,13890,13891,13894],{},"注意事项：",[2839,13892,13893],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,13896,13898],{"className":2693,"code":13897,"language":2695,"meta":31,"style":31},"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",[33,13899,13900,13911,13915,13930,13942,13946,13950,13958,13963,13978,13996,14013,14023,14031],{"__ignoreMap":31},[36,13901,13902,13904,13906,13909],{"class":38,"line":39},[36,13903,232],{"class":114},[36,13905,9045],{"class":114},[36,13907,13908],{"class":4500}," func",[36,13910,4513],{"class":53},[36,13912,13913],{"class":38,"line":46},[36,13914,4084],{"class":53},[36,13916,13917,13919,13921,13923,13925,13927],{"class":38,"line":82},[36,13918,4522],{"class":114},[36,13920,13392],{"class":53},[36,13922,115],{"class":114},[36,13924,931],{"class":49},[36,13926,2752],{"class":53},[36,13928,13929],{"class":42}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,13931,13932,13934,13936,13939],{"class":38,"line":88},[36,13933,6621],{"class":114},[36,13935,13108],{"class":114},[36,13937,13938],{"class":53},"a;",[36,13940,13941],{"class":42}," \u002F\u002F放回局部变量的地址\n",[36,13943,13944],{"class":38,"line":195},[36,13945,4103],{"class":53},[36,13947,13948],{"class":38,"line":1517},[36,13949,546],{"emptyLinePlaceholder":545},[36,13951,13952,13954,13956],{"class":38,"line":2421},[36,13953,232],{"class":114},[36,13955,4510],{"class":4500},[36,13957,13376],{"class":53},[36,13959,13960],{"class":38,"line":2446},[36,13961,13962],{"class":42},"    \u002F\u002F接受func的返回值\n",[36,13964,13965,13967,13969,13972,13974,13976],{"class":38,"line":2469},[36,13966,4522],{"class":114},[36,13968,9045],{"class":114},[36,13970,13971],{"class":53},"p ",[36,13973,115],{"class":114},[36,13975,13908],{"class":4500},[36,13977,8164],{"class":53},[36,13979,13980,13982,13984,13986,13988,13990,13993],{"class":38,"line":2492},[36,13981,9056],{"class":53},[36,13983,3717],{"class":114},[36,13985,9045],{"class":114},[36,13987,13971],{"class":53},[36,13989,3717],{"class":114},[36,13991,13992],{"class":53}," endl;",[36,13994,13995],{"class":42}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,13997,13998,14000,14002,14004,14006,14008,14010],{"class":38,"line":4150},[36,13999,9056],{"class":53},[36,14001,3717],{"class":114},[36,14003,9045],{"class":114},[36,14005,13971],{"class":53},[36,14007,3717],{"class":114},[36,14009,13992],{"class":53},[36,14011,14012],{"class":42}," \u002F\u002F第二次这个数据不再保留\n",[36,14014,14015,14017,14019,14021],{"class":38,"line":4155},[36,14016,4837],{"class":4500},[36,14018,54],{"class":53},[36,14020,4842],{"class":57},[36,14022,5251],{"class":53},[36,14024,14025,14027,14029],{"class":38,"line":4161},[36,14026,6621],{"class":114},[36,14028,6624],{"class":49},[36,14030,3833],{"class":53},[36,14032,14033],{"class":38,"line":4166},[36,14034,4103],{"class":53},[19,14036,14037],{},"输出结果：",[19,14039,14040],{},[4000,14041],{"alt":14042,"src":14043},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,14045,14046],{},"总结：不要返回局部变量的地址",[433,14048,14049],{"start":46},[436,14050,14051],{},"堆区",[3680,14053,14054,14057],{},[436,14055,14056],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[436,14058,14059],{},"在c++中主要利用new在堆区开辟内存",[26,14061,14063],{"className":2693,"code":14062,"language":2695,"meta":31,"style":31},"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",[33,14064,14065,14080,14084,14089,14110,14117,14121,14129,14133,14138,14152,14164],{"__ignoreMap":31},[36,14066,14067,14069,14072,14075,14077],{"class":38,"line":39},[36,14068,232],{"class":114},[36,14070,14071],{"class":114},"  *",[36,14073,14074],{"class":4500},"func",[36,14076,4959],{"class":53},[36,14078,14079],{"class":42},"  \u002F\u002F函数返回指针\n",[36,14081,14082],{"class":38,"line":46},[36,14083,4084],{"class":53},[36,14085,14086],{"class":38,"line":82},[36,14087,14088],{"class":42},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,14090,14091,14093,14095,14097,14099,14102,14104,14106,14108],{"class":38,"line":88},[36,14092,6678],{"class":114},[36,14094,9045],{"class":114},[36,14096,19],{"class":53},[36,14098,115],{"class":114},[36,14100,14101],{"class":114}," new",[36,14103,837],{"class":114},[36,14105,54],{"class":53},[36,14107,1317],{"class":49},[36,14109,5251],{"class":53},[36,14111,14112,14114],{"class":38,"line":195},[36,14113,6912],{"class":114},[36,14115,14116],{"class":53}," p;\n",[36,14118,14119],{"class":38,"line":1517},[36,14120,4103],{"class":53},[36,14122,14123,14125,14127],{"class":38,"line":2421},[36,14124,232],{"class":114},[36,14126,4510],{"class":4500},[36,14128,4513],{"class":53},[36,14130,14131],{"class":38,"line":2446},[36,14132,4084],{"class":53},[36,14134,14135],{"class":38,"line":2469},[36,14136,14137],{"class":42},"    \u002F\u002F在堆区开辟数据\n",[36,14139,14140,14142,14144,14146,14148,14150],{"class":38,"line":2492},[36,14141,4522],{"class":114},[36,14143,9045],{"class":114},[36,14145,19],{"class":53},[36,14147,115],{"class":114},[36,14149,14074],{"class":4500},[36,14151,8164],{"class":53},[36,14153,14154,14156,14158,14160,14162],{"class":38,"line":4150},[36,14155,4089],{"class":53},[36,14157,8946],{"class":114},[36,14159,19],{"class":53},[36,14161,3717],{"class":114},[36,14163,3739],{"class":53},[36,14165,14166],{"class":38,"line":4155},[36,14167,4103],{"class":53},[19,14169,14170],{},"图片展示：",[19,14172,14173],{},[4000,14174],{"alt":14042,"src":14175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14177,14178],{},"堆区内存由程序员管生死！！！",[433,14180,14181],{"start":82},[436,14182,14183],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14185,14186],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14188,14189,14190],{},"​语法：",[33,14191,14192],{}," new 数据类型",[19,14194,14195],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,14197,14199],{"className":2693,"code":14198,"language":2695,"meta":31,"style":31},"\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",[33,14200,14201,14206,14216,14220,14225,14230,14252,14256,14264,14268,14282,14294,14306,14318,14323,14328,14339,14343,14348,14356,14360,14365,14387,14413,14417,14435,14439,14465,14469,14481,14485,14490,14495,14503,14507,14511,14519,14523,14529,14535],{"__ignoreMap":31},[36,14202,14203],{"class":38,"line":39},[36,14204,14205],{"class":42},"\u002F\u002F1.new的基本语法\n",[36,14207,14208,14210,14212,14214],{"class":38,"line":46},[36,14209,232],{"class":114},[36,14211,9045],{"class":114},[36,14213,14074],{"class":4500},[36,14215,4513],{"class":53},[36,14217,14218],{"class":38,"line":82},[36,14219,4084],{"class":53},[36,14221,14222],{"class":38,"line":88},[36,14223,14224],{"class":42},"    \u002F\u002F在堆区创建整型数据\n",[36,14226,14227],{"class":38,"line":195},[36,14228,14229],{"class":42},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,14231,14232,14234,14236,14238,14241,14243,14245,14247,14249],{"class":38,"line":1517},[36,14233,4522],{"class":114},[36,14235,9045],{"class":114},[36,14237,19],{"class":53},[36,14239,14240],{"class":114},"=new",[36,14242,837],{"class":114},[36,14244,54],{"class":53},[36,14246,1317],{"class":49},[36,14248,8493],{"class":53},[36,14250,14251],{"class":42},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,14253,14254],{"class":38,"line":2421},[36,14255,4103],{"class":53},[36,14257,14258,14260,14262],{"class":38,"line":2446},[36,14259,7892],{"class":114},[36,14261,8116],{"class":4500},[36,14263,4513],{"class":53},[36,14265,14266],{"class":38,"line":2469},[36,14267,4084],{"class":53},[36,14269,14270,14272,14274,14276,14278,14280],{"class":38,"line":2492},[36,14271,4522],{"class":114},[36,14273,9045],{"class":114},[36,14275,19],{"class":53},[36,14277,115],{"class":114},[36,14279,14074],{"class":4500},[36,14281,8164],{"class":53},[36,14283,14284,14286,14288,14290,14292],{"class":38,"line":4150},[36,14285,4089],{"class":53},[36,14287,8946],{"class":114},[36,14289,19],{"class":53},[36,14291,3717],{"class":114},[36,14293,3739],{"class":53},[36,14295,14296,14298,14300,14302,14304],{"class":38,"line":4155},[36,14297,4089],{"class":53},[36,14299,8946],{"class":114},[36,14301,19],{"class":53},[36,14303,3717],{"class":114},[36,14305,3739],{"class":53},[36,14307,14308,14310,14312,14314,14316],{"class":38,"line":4161},[36,14309,4089],{"class":53},[36,14311,8946],{"class":114},[36,14313,19],{"class":53},[36,14315,3717],{"class":114},[36,14317,3739],{"class":53},[36,14319,14320],{"class":38,"line":4166},[36,14321,14322],{"class":42},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,14324,14325],{"class":38,"line":4180},[36,14326,14327],{"class":42},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,14329,14330,14333,14336],{"class":38,"line":4185},[36,14331,14332],{"class":114},"    delete",[36,14334,14335],{"class":53}," p;",[36,14337,14338],{"class":42},"\u002F\u002F删除这块地址\n",[36,14340,14341],{"class":38,"line":4191},[36,14342,4103],{"class":53},[36,14344,14345],{"class":38,"line":4212},[36,14346,14347],{"class":42},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,14349,14350,14352,14354],{"class":38,"line":4217},[36,14351,7892],{"class":114},[36,14353,8185],{"class":4500},[36,14355,4513],{"class":53},[36,14357,14358],{"class":38,"line":4231},[36,14359,4084],{"class":53},[36,14361,14362],{"class":38,"line":4236},[36,14363,14364],{"class":42},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,14366,14367,14369,14371,14373,14375,14377,14379,14381,14384],{"class":38,"line":4264},[36,14368,4522],{"class":114},[36,14370,9045],{"class":114},[36,14372,6411],{"class":53},[36,14374,14240],{"class":114},[36,14376,837],{"class":114},[36,14378,3566],{"class":53},[36,14380,1317],{"class":49},[36,14382,14383],{"class":53},"];",[36,14385,14386],{"class":42},"\u002F\u002F10代表数组有10个元素\n",[36,14388,14389,14391,14393,14395,14397,14399,14401,14403,14405,14407,14409,14411],{"class":38,"line":4269},[36,14390,5732],{"class":114},[36,14392,4196],{"class":53},[36,14394,232],{"class":114},[36,14396,5563],{"class":53},[36,14398,115],{"class":114},[36,14400,713],{"class":49},[36,14402,5570],{"class":53},[36,14404,1507],{"class":114},[36,14406,1317],{"class":49},[36,14408,5570],{"class":53},[36,14410,4826],{"class":114},[36,14412,61],{"class":53},[36,14414,14415],{"class":38,"line":4286},[36,14416,4567],{"class":53},[36,14418,14419,14422,14424,14426,14428,14430,14432],{"class":38,"line":4291},[36,14420,14421],{"class":53},"        arr[i]",[36,14423,115],{"class":114},[36,14425,3122],{"class":53},[36,14427,121],{"class":114},[36,14429,166],{"class":49},[36,14431,2752],{"class":53},[36,14433,14434],{"class":42},"\u002F\u002F给10个元素赋值100～109\n",[36,14436,14437],{"class":38,"line":4296},[36,14438,4721],{"class":53},[36,14440,14441,14443,14445,14447,14449,14451,14453,14455,14457,14459,14461,14463],{"class":38,"line":4301},[36,14442,5732],{"class":114},[36,14444,4196],{"class":53},[36,14446,232],{"class":114},[36,14448,5563],{"class":53},[36,14450,115],{"class":114},[36,14452,713],{"class":49},[36,14454,5570],{"class":53},[36,14456,1507],{"class":114},[36,14458,1317],{"class":49},[36,14460,5570],{"class":53},[36,14462,4826],{"class":114},[36,14464,61],{"class":53},[36,14466,14467],{"class":38,"line":4315},[36,14468,4567],{"class":53},[36,14470,14471,14473,14475,14477,14479],{"class":38,"line":4320},[36,14472,5982],{"class":53},[36,14474,3717],{"class":114},[36,14476,6885],{"class":53},[36,14478,3717],{"class":114},[36,14480,3739],{"class":53},[36,14482,14483],{"class":38,"line":5109},[36,14484,4721],{"class":53},[36,14486,14487],{"class":38,"line":5123},[36,14488,14489],{"class":42},"    \u002F\u002F释放堆区数组\n",[36,14491,14492],{"class":38,"line":5131},[36,14493,14494],{"class":42},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,14496,14497,14500],{"class":38,"line":5136},[36,14498,14499],{"class":114},"    delete[]",[36,14501,14502],{"class":53}," arr;\n",[36,14504,14505],{"class":38,"line":5142},[36,14506,4103],{"class":53},[36,14508,14509],{"class":38,"line":5148},[36,14510,546],{"emptyLinePlaceholder":545},[36,14512,14513,14515,14517],{"class":38,"line":5153},[36,14514,232],{"class":114},[36,14516,4510],{"class":4500},[36,14518,4513],{"class":53},[36,14520,14521],{"class":38,"line":10475},[36,14522,4084],{"class":53},[36,14524,14525,14527],{"class":38,"line":10499},[36,14526,8161],{"class":4500},[36,14528,8164],{"class":53},[36,14530,14531,14533],{"class":38,"line":10504},[36,14532,8230],{"class":4500},[36,14534,8164],{"class":53},[36,14536,14537],{"class":38,"line":10510},[36,14538,4103],{"class":53},[2602,14540,14541],{},"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":31,"searchDepth":46,"depth":46,"links":14543},[14544],{"id":13212,"depth":46,"text":13213,"children":14545},[14546,14547],{"id":13244,"depth":82,"text":13245},{"id":13872,"depth":82,"text":13873},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13204,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14554,"title":14555,"body":14556,"description":31,"extension":2631,"meta":16037,"navigation":545,"path":16038,"seo":16039,"stem":16040,"__hash__":16041},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14557,"toc":16029},[14558,14561,14565,14568,14571,14740,14744,14749,14766,14771,14923,14927,14930,14933,15327,15331,15334,15339,15342,15654,15658,15664,15824,15826,15834,15838,15841,15848,16026],[10,14559,14555],{"id":14560},"_6引用",[14,14562,14564],{"id":14563},"_61引用基本用法","6.1引用基本用法",[19,14566,14567],{},"引用的本质：给变量起别名",[19,14569,14570],{},"语法：数据类型 &别名=原名",[26,14572,14574],{"className":2693,"code":14573,"language":2695,"meta":31,"style":31},"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",[33,14575,14576,14584,14588,14600,14612,14616,14635,14654,14658,14669,14673,14692,14710,14714,14724,14728,14736],{"__ignoreMap":31},[36,14577,14578,14580,14582],{"class":38,"line":39},[36,14579,232],{"class":114},[36,14581,4510],{"class":4500},[36,14583,13376],{"class":53},[36,14585,14586],{"class":38,"line":46},[36,14587,546],{"emptyLinePlaceholder":545},[36,14589,14590,14592,14594,14596,14598],{"class":38,"line":82},[36,14591,4522],{"class":114},[36,14593,13392],{"class":53},[36,14595,115],{"class":114},[36,14597,931],{"class":49},[36,14599,3833],{"class":53},[36,14601,14602,14604,14606,14608,14610],{"class":38,"line":88},[36,14603,4522],{"class":114},[36,14605,13108],{"class":114},[36,14607,13468],{"class":53},[36,14609,115],{"class":114},[36,14611,3970],{"class":53},[36,14613,14614],{"class":38,"line":195},[36,14615,546],{"emptyLinePlaceholder":545},[36,14617,14618,14620,14622,14625,14627,14629,14631,14633],{"class":38,"line":1517},[36,14619,9056],{"class":53},[36,14621,3717],{"class":114},[36,14623,14624],{"class":57}," \"a = \"",[36,14626,3982],{"class":114},[36,14628,13392],{"class":53},[36,14630,3717],{"class":114},[36,14632,13992],{"class":53},[36,14634,9795],{"class":42},[36,14636,14637,14639,14641,14644,14646,14648,14650,14652],{"class":38,"line":2421},[36,14638,9056],{"class":53},[36,14640,3717],{"class":114},[36,14642,14643],{"class":57}," \"b = \"",[36,14645,3982],{"class":114},[36,14647,13405],{"class":53},[36,14649,3717],{"class":114},[36,14651,13992],{"class":53},[36,14653,9795],{"class":42},[36,14655,14656],{"class":38,"line":2446},[36,14657,546],{"emptyLinePlaceholder":545},[36,14659,14660,14663,14665,14667],{"class":38,"line":2469},[36,14661,14662],{"class":53},"    b ",[36,14664,115],{"class":114},[36,14666,8282],{"class":49},[36,14668,3833],{"class":53},[36,14670,14671],{"class":38,"line":2492},[36,14672,546],{"emptyLinePlaceholder":545},[36,14674,14675,14677,14679,14681,14683,14685,14687,14689],{"class":38,"line":4150},[36,14676,9056],{"class":53},[36,14678,3717],{"class":114},[36,14680,14624],{"class":57},[36,14682,3982],{"class":114},[36,14684,13392],{"class":53},[36,14686,3717],{"class":114},[36,14688,13992],{"class":53},[36,14690,14691],{"class":42},"\u002F\u002F100\n",[36,14693,14694,14696,14698,14700,14702,14704,14706,14708],{"class":38,"line":4155},[36,14695,9056],{"class":53},[36,14697,3717],{"class":114},[36,14699,14643],{"class":57},[36,14701,3982],{"class":114},[36,14703,13405],{"class":53},[36,14705,3717],{"class":114},[36,14707,13992],{"class":53},[36,14709,14691],{"class":42},[36,14711,14712],{"class":38,"line":4161},[36,14713,546],{"emptyLinePlaceholder":545},[36,14715,14716,14718,14720,14722],{"class":38,"line":4166},[36,14717,4837],{"class":4500},[36,14719,54],{"class":53},[36,14721,4842],{"class":57},[36,14723,5251],{"class":53},[36,14725,14726],{"class":38,"line":4180},[36,14727,546],{"emptyLinePlaceholder":545},[36,14729,14730,14732,14734],{"class":38,"line":4185},[36,14731,6621],{"class":114},[36,14733,6624],{"class":49},[36,14735,3833],{"class":53},[36,14737,14738],{"class":38,"line":4191},[36,14739,4103],{"class":53},[14,14741,14743],{"id":14742},"_62引用的注意事项","6.2引用的注意事项",[433,14745,14746],{},[436,14747,14748],{},"引用必须要初始化",[26,14750,14752],{"className":2693,"code":14751,"language":2695,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,14753,14754],{"__ignoreMap":31},[36,14755,14756,14758,14760,14763],{"class":38,"line":39},[36,14757,232],{"class":114},[36,14759,13108],{"class":114},[36,14761,14762],{"class":53},"b;",[36,14764,14765],{"class":42},"\u002F\u002F非常错误！\n",[433,14767,14768],{"start":46},[436,14769,14770],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,14772,14774],{"className":2693,"code":14773,"language":2695,"meta":31,"style":31},"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",[33,14775,14776,14784,14796,14808,14816,14832,14845,14863,14881,14901,14911,14919],{"__ignoreMap":31},[36,14777,14778,14780,14782],{"class":38,"line":39},[36,14779,232],{"class":114},[36,14781,4510],{"class":4500},[36,14783,13376],{"class":53},[36,14785,14786,14788,14790,14792,14794],{"class":38,"line":46},[36,14787,4522],{"class":114},[36,14789,13392],{"class":53},[36,14791,115],{"class":114},[36,14793,931],{"class":49},[36,14795,3833],{"class":53},[36,14797,14798,14800,14802,14804,14806],{"class":38,"line":82},[36,14799,4522],{"class":114},[36,14801,13405],{"class":53},[36,14803,115],{"class":114},[36,14805,11477],{"class":49},[36,14807,3833],{"class":53},[36,14809,14810,14813],{"class":38,"line":88},[36,14811,14812],{"class":42},"    \u002F\u002Fint &c;",[36,14814,14815],{"class":42}," \u002F\u002F错误，引用必须初始化\n",[36,14817,14818,14820,14822,14824,14826,14829],{"class":38,"line":195},[36,14819,4522],{"class":114},[36,14821,13108],{"class":114},[36,14823,5478],{"class":53},[36,14825,115],{"class":114},[36,14827,14828],{"class":53}," a;",[36,14830,14831],{"class":42}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,14833,14834,14837,14839,14842],{"class":38,"line":1517},[36,14835,14836],{"class":53},"    c ",[36,14838,115],{"class":114},[36,14840,14841],{"class":53}," b;",[36,14843,14844],{"class":42}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,14846,14847,14849,14851,14853,14855,14857,14859,14861],{"class":38,"line":2421},[36,14848,9056],{"class":53},[36,14850,3717],{"class":114},[36,14852,14624],{"class":57},[36,14854,3982],{"class":114},[36,14856,13392],{"class":53},[36,14858,3717],{"class":114},[36,14860,13992],{"class":53},[36,14862,9780],{"class":42},[36,14864,14865,14867,14869,14871,14873,14875,14877,14879],{"class":38,"line":2446},[36,14866,9056],{"class":53},[36,14868,3717],{"class":114},[36,14870,14643],{"class":57},[36,14872,3982],{"class":114},[36,14874,13405],{"class":53},[36,14876,3717],{"class":114},[36,14878,13992],{"class":53},[36,14880,9780],{"class":42},[36,14882,14883,14885,14887,14890,14892,14895,14897,14899],{"class":38,"line":2469},[36,14884,9056],{"class":53},[36,14886,3717],{"class":114},[36,14888,14889],{"class":57}," \"c = \"",[36,14891,3982],{"class":114},[36,14893,14894],{"class":53}," c ",[36,14896,3717],{"class":114},[36,14898,13992],{"class":53},[36,14900,9780],{"class":42},[36,14902,14903,14905,14907,14909],{"class":38,"line":2492},[36,14904,4837],{"class":4500},[36,14906,54],{"class":53},[36,14908,4842],{"class":57},[36,14910,5251],{"class":53},[36,14912,14913,14915,14917],{"class":38,"line":4150},[36,14914,6621],{"class":114},[36,14916,6624],{"class":49},[36,14918,3833],{"class":53},[36,14920,14921],{"class":38,"line":4155},[36,14922,4103],{"class":53},[14,14924,14926],{"id":14925},"_63引用做函数参数","6.3引用做函数参数",[19,14928,14929],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14931,14932],{},"优点：可以简化指针修改实参",[26,14934,14936],{"className":2693,"code":14935,"language":2695,"meta":31,"style":31},"\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",[33,14937,14938,14943,14966,14977,14987,14996,15000,15004,15009,15031,15043,15055,15065,15069,15073,15078,15100,15110,15118,15126,15130,15134,15142,15146,15158,15170,15174,15185,15211,15215,15235,15259,15263,15273,15297,15301,15311,15315,15323],{"__ignoreMap":31},[36,14939,14940],{"class":38,"line":39},[36,14941,14942],{"class":42},"\u002F\u002F1. 值传递\n",[36,14944,14945,14947,14950,14952,14954,14956,14959,14961,14963],{"class":38,"line":46},[36,14946,7892],{"class":114},[36,14948,14949],{"class":4500}," mySwap01",[36,14951,54],{"class":53},[36,14953,232],{"class":114},[36,14955,3936],{"class":1997},[36,14957,14958],{"class":53},", ",[36,14960,232],{"class":114},[36,14962,5365],{"class":1997},[36,14964,14965],{"class":53},") {\n",[36,14967,14968,14970,14973,14975],{"class":38,"line":82},[36,14969,4522],{"class":114},[36,14971,14972],{"class":53}," temp ",[36,14974,115],{"class":114},[36,14976,3970],{"class":53},[36,14978,14979,14982,14984],{"class":38,"line":88},[36,14980,14981],{"class":53},"    a ",[36,14983,115],{"class":114},[36,14985,14986],{"class":53}," b;\n",[36,14988,14989,14991,14993],{"class":38,"line":195},[36,14990,14662],{"class":53},[36,14992,115],{"class":114},[36,14994,14995],{"class":53}," temp;\n",[36,14997,14998],{"class":38,"line":1517},[36,14999,4103],{"class":53},[36,15001,15002],{"class":38,"line":2421},[36,15003,546],{"emptyLinePlaceholder":545},[36,15005,15006],{"class":38,"line":2446},[36,15007,15008],{"class":42},"\u002F\u002F2. 地址传递\n",[36,15010,15011,15013,15016,15018,15021,15023,15025,15027,15029],{"class":38,"line":2469},[36,15012,7892],{"class":114},[36,15014,15015],{"class":4500}," mySwap02",[36,15017,54],{"class":53},[36,15019,15020],{"class":114},"int*",[36,15022,3936],{"class":1997},[36,15024,14958],{"class":53},[36,15026,15020],{"class":114},[36,15028,5365],{"class":1997},[36,15030,14965],{"class":53},[36,15032,15033,15035,15037,15039,15041],{"class":38,"line":2492},[36,15034,4522],{"class":114},[36,15036,14972],{"class":53},[36,15038,115],{"class":114},[36,15040,9045],{"class":114},[36,15042,8724],{"class":53},[36,15044,15045,15047,15049,15051,15053],{"class":38,"line":4150},[36,15046,8930],{"class":114},[36,15048,13442],{"class":53},[36,15050,115],{"class":114},[36,15052,9045],{"class":114},[36,15054,8596],{"class":53},[36,15056,15057,15059,15061,15063],{"class":38,"line":4155},[36,15058,8930],{"class":114},[36,15060,13468],{"class":53},[36,15062,115],{"class":114},[36,15064,14995],{"class":53},[36,15066,15067],{"class":38,"line":4161},[36,15068,4103],{"class":53},[36,15070,15071],{"class":38,"line":4166},[36,15072,546],{"emptyLinePlaceholder":545},[36,15074,15075],{"class":38,"line":4180},[36,15076,15077],{"class":42},"\u002F\u002F3. 引用传递\n",[36,15079,15080,15082,15085,15087,15090,15092,15094,15096,15098],{"class":38,"line":4185},[36,15081,7892],{"class":114},[36,15083,15084],{"class":4500}," mySwap03",[36,15086,54],{"class":53},[36,15088,15089],{"class":114},"int&",[36,15091,3936],{"class":1997},[36,15093,14958],{"class":53},[36,15095,15089],{"class":114},[36,15097,5365],{"class":1997},[36,15099,14965],{"class":53},[36,15101,15102,15104,15106,15108],{"class":38,"line":4191},[36,15103,4522],{"class":114},[36,15105,14972],{"class":53},[36,15107,115],{"class":114},[36,15109,3970],{"class":53},[36,15111,15112,15114,15116],{"class":38,"line":4212},[36,15113,14981],{"class":53},[36,15115,115],{"class":114},[36,15117,14986],{"class":53},[36,15119,15120,15122,15124],{"class":38,"line":4217},[36,15121,14662],{"class":53},[36,15123,115],{"class":114},[36,15125,14995],{"class":53},[36,15127,15128],{"class":38,"line":4231},[36,15129,4103],{"class":53},[36,15131,15132],{"class":38,"line":4236},[36,15133,546],{"emptyLinePlaceholder":545},[36,15135,15136,15138,15140],{"class":38,"line":4264},[36,15137,232],{"class":114},[36,15139,4510],{"class":4500},[36,15141,13376],{"class":53},[36,15143,15144],{"class":38,"line":4269},[36,15145,546],{"emptyLinePlaceholder":545},[36,15147,15148,15150,15152,15154,15156],{"class":38,"line":4286},[36,15149,4522],{"class":114},[36,15151,13392],{"class":53},[36,15153,115],{"class":114},[36,15155,931],{"class":49},[36,15157,3833],{"class":53},[36,15159,15160,15162,15164,15166,15168],{"class":38,"line":4291},[36,15161,4522],{"class":114},[36,15163,13405],{"class":53},[36,15165,115],{"class":114},[36,15167,11477],{"class":49},[36,15169,3833],{"class":53},[36,15171,15172],{"class":38,"line":4296},[36,15173,546],{"emptyLinePlaceholder":545},[36,15175,15176,15179,15182],{"class":38,"line":4301},[36,15177,15178],{"class":4500},"    mySwap01",[36,15180,15181],{"class":53},"(a, b);",[36,15183,15184],{"class":42},"\u002F\u002F值传递，形参不会修饰实参\n",[36,15186,15187,15189,15191,15194,15196,15198,15200,15203,15205,15207,15209],{"class":38,"line":4315},[36,15188,9056],{"class":53},[36,15190,3717],{"class":114},[36,15192,15193],{"class":57}," \"a:\"",[36,15195,3982],{"class":114},[36,15197,13392],{"class":53},[36,15199,3717],{"class":114},[36,15201,15202],{"class":57}," \" b:\"",[36,15204,3982],{"class":114},[36,15206,13405],{"class":53},[36,15208,3717],{"class":114},[36,15210,11367],{"class":53},[36,15212,15213],{"class":38,"line":4320},[36,15214,546],{"emptyLinePlaceholder":545},[36,15216,15217,15220,15222,15224,15227,15229,15232],{"class":38,"line":5109},[36,15218,15219],{"class":4500},"    mySwap02",[36,15221,54],{"class":53},[36,15223,3034],{"class":114},[36,15225,15226],{"class":53},"a, ",[36,15228,3034],{"class":114},[36,15230,15231],{"class":53},"b);",[36,15233,15234],{"class":42},"\u002F\u002F地址传递，形参会修饰实参\n",[36,15236,15237,15239,15241,15243,15245,15247,15249,15251,15253,15255,15257],{"class":38,"line":5123},[36,15238,9056],{"class":53},[36,15240,3717],{"class":114},[36,15242,15193],{"class":57},[36,15244,3982],{"class":114},[36,15246,13392],{"class":53},[36,15248,3717],{"class":114},[36,15250,15202],{"class":57},[36,15252,3982],{"class":114},[36,15254,13405],{"class":53},[36,15256,3717],{"class":114},[36,15258,11367],{"class":53},[36,15260,15261],{"class":38,"line":5131},[36,15262,546],{"emptyLinePlaceholder":545},[36,15264,15265,15268,15270],{"class":38,"line":5136},[36,15266,15267],{"class":4500},"    mySwap03",[36,15269,15181],{"class":53},[36,15271,15272],{"class":42},"\u002F\u002F引用传递，形参会修饰实参\n",[36,15274,15275,15277,15279,15281,15283,15285,15287,15289,15291,15293,15295],{"class":38,"line":5142},[36,15276,9056],{"class":53},[36,15278,3717],{"class":114},[36,15280,15193],{"class":57},[36,15282,3982],{"class":114},[36,15284,13392],{"class":53},[36,15286,3717],{"class":114},[36,15288,15202],{"class":57},[36,15290,3982],{"class":114},[36,15292,13405],{"class":53},[36,15294,3717],{"class":114},[36,15296,11367],{"class":53},[36,15298,15299],{"class":38,"line":5148},[36,15300,546],{"emptyLinePlaceholder":545},[36,15302,15303,15305,15307,15309],{"class":38,"line":5153},[36,15304,4837],{"class":4500},[36,15306,54],{"class":53},[36,15308,4842],{"class":57},[36,15310,5251],{"class":53},[36,15312,15313],{"class":38,"line":10475},[36,15314,546],{"emptyLinePlaceholder":545},[36,15316,15317,15319,15321],{"class":38,"line":10499},[36,15318,6621],{"class":114},[36,15320,6624],{"class":49},[36,15322,3833],{"class":53},[36,15324,15325],{"class":38,"line":10504},[36,15326,4103],{"class":53},[14,15328,15330],{"id":15329},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15332,15333],{},"作用：引用是可以作为函数的返回值存在的",[19,15335,695,15336],{},[2839,15337,15338],{},"不要返回局部变量引用",[19,15340,15341],{},"用法：函数调用作为左值",[26,15343,15345],{"className":12466,"code":15344,"language":12468,"meta":31,"style":31},"\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",[33,15346,15347,15352,15360,15375,15381,15385,15389,15394,15402,15419,15425,15429,15433,15441,15445,15450,15464,15484,15503,15507,15512,15525,15545,15563,15567,15583,15587,15606,15624,15628,15638,15642,15650],{"__ignoreMap":31},[36,15348,15349],{"class":38,"line":39},[36,15350,15351],{"class":42},"\u002F\u002F返回局部变量引用\n",[36,15353,15354,15356,15358],{"class":38,"line":46},[36,15355,15089],{"class":114},[36,15357,8116],{"class":4500},[36,15359,13376],{"class":53},[36,15361,15362,15364,15366,15368,15370,15372],{"class":38,"line":82},[36,15363,4522],{"class":114},[36,15365,13392],{"class":53},[36,15367,115],{"class":114},[36,15369,931],{"class":49},[36,15371,2752],{"class":53},[36,15373,15374],{"class":42}," \u002F\u002F局部变量\n",[36,15376,15377,15379],{"class":38,"line":88},[36,15378,6621],{"class":114},[36,15380,3970],{"class":53},[36,15382,15383],{"class":38,"line":195},[36,15384,4103],{"class":53},[36,15386,15387],{"class":38,"line":1517},[36,15388,546],{"emptyLinePlaceholder":545},[36,15390,15391],{"class":38,"line":2421},[36,15392,15393],{"class":42},"\u002F\u002F返回静态变量引用\n",[36,15395,15396,15398,15400],{"class":38,"line":2446},[36,15397,15089],{"class":114},[36,15399,8185],{"class":4500},[36,15401,13376],{"class":53},[36,15403,15404,15406,15408,15410,15412,15414,15416],{"class":38,"line":2469},[36,15405,13543],{"class":114},[36,15407,837],{"class":114},[36,15409,13392],{"class":53},[36,15411,115],{"class":114},[36,15413,11477],{"class":49},[36,15415,2752],{"class":53},[36,15417,15418],{"class":42},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,15420,15421,15423],{"class":38,"line":2492},[36,15422,6621],{"class":114},[36,15424,3970],{"class":53},[36,15426,15427],{"class":38,"line":4150},[36,15428,4103],{"class":53},[36,15430,15431],{"class":38,"line":4155},[36,15432,546],{"emptyLinePlaceholder":545},[36,15434,15435,15437,15439],{"class":38,"line":4161},[36,15436,232],{"class":114},[36,15438,4510],{"class":4500},[36,15440,13376],{"class":53},[36,15442,15443],{"class":38,"line":4166},[36,15444,546],{"emptyLinePlaceholder":545},[36,15446,15447],{"class":38,"line":4180},[36,15448,15449],{"class":42},"    \u002F\u002F不能返回局部变量的引用\n",[36,15451,15452,15455,15458,15460,15462],{"class":38,"line":4185},[36,15453,15454],{"class":114},"    int&",[36,15456,15457],{"class":53}," ref ",[36,15459,115],{"class":114},[36,15461,8116],{"class":4500},[36,15463,8164],{"class":53},[36,15465,15466,15468,15470,15473,15475,15477,15479,15481],{"class":38,"line":4191},[36,15467,9056],{"class":53},[36,15469,3717],{"class":114},[36,15471,15472],{"class":57}," \"ref = \"",[36,15474,3982],{"class":114},[36,15476,15457],{"class":53},[36,15478,3717],{"class":114},[36,15480,13992],{"class":53},[36,15482,15483],{"class":42},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,15485,15486,15488,15490,15492,15494,15496,15498,15500],{"class":38,"line":4212},[36,15487,9056],{"class":53},[36,15489,3717],{"class":114},[36,15491,15472],{"class":57},[36,15493,3982],{"class":114},[36,15495,15457],{"class":53},[36,15497,3717],{"class":114},[36,15499,13992],{"class":53},[36,15501,15502],{"class":42},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,15504,15505],{"class":38,"line":4217},[36,15506,546],{"emptyLinePlaceholder":545},[36,15508,15509],{"class":38,"line":4231},[36,15510,15511],{"class":42},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,15513,15514,15516,15519,15521,15523],{"class":38,"line":4236},[36,15515,15454],{"class":114},[36,15517,15518],{"class":53}," ref2 ",[36,15520,115],{"class":114},[36,15522,8185],{"class":4500},[36,15524,8164],{"class":53},[36,15526,15527,15529,15531,15534,15536,15538,15540,15542],{"class":38,"line":4264},[36,15528,9056],{"class":53},[36,15530,3717],{"class":114},[36,15532,15533],{"class":57}," \"ref2 = \"",[36,15535,3982],{"class":114},[36,15537,15518],{"class":53},[36,15539,3717],{"class":114},[36,15541,13992],{"class":53},[36,15543,15544],{"class":42}," \u002F\u002F20\n",[36,15546,15547,15549,15551,15553,15555,15557,15559,15561],{"class":38,"line":4269},[36,15548,9056],{"class":53},[36,15550,3717],{"class":114},[36,15552,15533],{"class":57},[36,15554,3982],{"class":114},[36,15556,15518],{"class":53},[36,15558,3717],{"class":114},[36,15560,13992],{"class":53},[36,15562,15544],{"class":42},[36,15564,15565],{"class":38,"line":4286},[36,15566,546],{"emptyLinePlaceholder":545},[36,15568,15569,15571,15574,15576,15578,15580],{"class":38,"line":4291},[36,15570,8230],{"class":4500},[36,15572,15573],{"class":53},"() ",[36,15575,115],{"class":114},[36,15577,5530],{"class":49},[36,15579,2752],{"class":53},[36,15581,15582],{"class":42},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,15584,15585],{"class":38,"line":4296},[36,15586,546],{"emptyLinePlaceholder":545},[36,15588,15589,15591,15593,15595,15597,15599,15601,15603],{"class":38,"line":4301},[36,15590,9056],{"class":53},[36,15592,3717],{"class":114},[36,15594,15533],{"class":57},[36,15596,3982],{"class":114},[36,15598,15518],{"class":53},[36,15600,3717],{"class":114},[36,15602,13992],{"class":53},[36,15604,15605],{"class":42}," \u002F\u002F1000\n",[36,15607,15608,15610,15612,15614,15616,15618,15620,15622],{"class":38,"line":4315},[36,15609,9056],{"class":53},[36,15611,3717],{"class":114},[36,15613,15533],{"class":57},[36,15615,3982],{"class":114},[36,15617,15518],{"class":53},[36,15619,3717],{"class":114},[36,15621,13992],{"class":53},[36,15623,15605],{"class":42},[36,15625,15626],{"class":38,"line":4320},[36,15627,546],{"emptyLinePlaceholder":545},[36,15629,15630,15632,15634,15636],{"class":38,"line":5109},[36,15631,4837],{"class":4500},[36,15633,54],{"class":53},[36,15635,4842],{"class":57},[36,15637,5251],{"class":53},[36,15639,15640],{"class":38,"line":5123},[36,15641,546],{"emptyLinePlaceholder":545},[36,15643,15644,15646,15648],{"class":38,"line":5131},[36,15645,6621],{"class":114},[36,15647,6624],{"class":49},[36,15649,3833],{"class":53},[36,15651,15652],{"class":38,"line":5136},[36,15653,4103],{"class":53},[14,15655,15657],{"id":15656},"_65引用的本质","6.5引用的本质",[19,15659,15660,15661],{},"本质：",[2839,15662,15663],{},"引用的本质在c++内部实现是一个指针常量.",[26,15665,15667],{"className":2693,"code":15666,"language":2695,"meta":31,"style":31},"\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",[33,15668,15669,15674,15690,15704,15708,15717,15729,15734,15739,15750,15763,15767,15783,15800,15804,15812,15820],{"__ignoreMap":31},[36,15670,15671],{"class":38,"line":39},[36,15672,15673],{"class":42},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,15675,15676,15678,15680,15682,15684,15687],{"class":38,"line":46},[36,15677,7892],{"class":114},[36,15679,13908],{"class":4500},[36,15681,54],{"class":53},[36,15683,15089],{"class":114},[36,15685,15686],{"class":1997}," ref",[36,15688,15689],{"class":53},"){\n",[36,15691,15692,15695,15697,15699,15701],{"class":38,"line":82},[36,15693,15694],{"class":53},"    ref ",[36,15696,115],{"class":114},[36,15698,8282],{"class":49},[36,15700,2752],{"class":53},[36,15702,15703],{"class":42}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,15705,15706],{"class":38,"line":88},[36,15707,4103],{"class":53},[36,15709,15710,15712,15714],{"class":38,"line":195},[36,15711,232],{"class":114},[36,15713,4510],{"class":4500},[36,15715,15716],{"class":53},"(){\n",[36,15718,15719,15721,15723,15725,15727],{"class":38,"line":1517},[36,15720,4522],{"class":114},[36,15722,13392],{"class":53},[36,15724,115],{"class":114},[36,15726,931],{"class":49},[36,15728,3833],{"class":53},[36,15730,15731],{"class":38,"line":2421},[36,15732,15733],{"class":53},"    \n",[36,15735,15736],{"class":38,"line":2446},[36,15737,15738],{"class":42},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,15740,15741,15743,15745,15747],{"class":38,"line":2469},[36,15742,15454],{"class":114},[36,15744,15457],{"class":53},[36,15746,115],{"class":114},[36,15748,15749],{"class":53}," a; \n",[36,15751,15752,15754,15756,15758,15760],{"class":38,"line":2492},[36,15753,15694],{"class":53},[36,15755,115],{"class":114},[36,15757,11477],{"class":49},[36,15759,2752],{"class":53},[36,15761,15762],{"class":42}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,15764,15765],{"class":38,"line":4150},[36,15766,15733],{"class":53},[36,15768,15769,15771,15773,15775,15777,15779,15781],{"class":38,"line":4155},[36,15770,9056],{"class":53},[36,15772,3717],{"class":114},[36,15774,15193],{"class":57},[36,15776,3982],{"class":114},[36,15778,13392],{"class":53},[36,15780,3717],{"class":114},[36,15782,11367],{"class":53},[36,15784,15785,15787,15789,15792,15794,15796,15798],{"class":38,"line":4161},[36,15786,9056],{"class":53},[36,15788,3717],{"class":114},[36,15790,15791],{"class":57}," \"ref:\"",[36,15793,3982],{"class":114},[36,15795,15457],{"class":53},[36,15797,3717],{"class":114},[36,15799,11367],{"class":53},[36,15801,15802],{"class":38,"line":4166},[36,15803,15733],{"class":53},[36,15805,15806,15809],{"class":38,"line":4180},[36,15807,15808],{"class":4500},"    func",[36,15810,15811],{"class":53},"(a);\n",[36,15813,15814,15816,15818],{"class":38,"line":4185},[36,15815,6621],{"class":114},[36,15817,6624],{"class":49},[36,15819,3833],{"class":53},[36,15821,15822],{"class":38,"line":4191},[36,15823,4103],{"class":53},[19,15825,13855],{},[433,15827,15828,15831],{},[436,15829,15830],{},"引用的本质，就是一个指针常量",[436,15832,15833],{},"引用一旦初始化，就不可以发生改变",[14,15835,15837],{"id":15836},"_66常量引用","6.6常量引用",[19,15839,15840],{},"作用：常量引用主要用来修饰形参",[19,15842,15843,15844,15847],{},"在函数形参列表中，可以加",[2839,15845,15846],{},"const修饰形参","，防止形参改变实参",[26,15849,15851],{"className":2693,"code":15850,"language":2695,"meta":31,"style":31},"\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",[33,15852,15853,15858,15863,15882,15887,15900,15904,15908,15916,15920,15925,15930,15944,15948,15956,15968,15972,15977,15989,15996,16000,16010,16014,16022],{"__ignoreMap":31},[36,15854,15855],{"class":38,"line":39},[36,15856,15857],{"class":42},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,15859,15860],{"class":38,"line":46},[36,15861,15862],{"class":42},"\u002F\u002F加上const就不能修改实参的\n",[36,15864,15865,15867,15870,15872,15874,15877,15880],{"class":38,"line":82},[36,15866,7892],{"class":114},[36,15868,15869],{"class":4500}," showValue",[36,15871,54],{"class":53},[36,15873,9319],{"class":114},[36,15875,15876],{"class":114}," int&",[36,15878,15879],{"class":1997}," v",[36,15881,14965],{"class":53},[36,15883,15884],{"class":38,"line":88},[36,15885,15886],{"class":42},"    \u002F\u002Fv += 100;\n",[36,15888,15889,15891,15893,15896,15898],{"class":38,"line":195},[36,15890,9056],{"class":53},[36,15892,3717],{"class":114},[36,15894,15895],{"class":53}," v ",[36,15897,3717],{"class":114},[36,15899,11367],{"class":53},[36,15901,15902],{"class":38,"line":1517},[36,15903,4103],{"class":53},[36,15905,15906],{"class":38,"line":2421},[36,15907,546],{"emptyLinePlaceholder":545},[36,15909,15910,15912,15914],{"class":38,"line":2446},[36,15911,232],{"class":114},[36,15913,4510],{"class":4500},[36,15915,13376],{"class":53},[36,15917,15918],{"class":38,"line":2469},[36,15919,546],{"emptyLinePlaceholder":545},[36,15921,15922],{"class":38,"line":2492},[36,15923,15924],{"class":42},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,15926,15927],{"class":38,"line":4150},[36,15928,15929],{"class":42},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,15931,15932,15934,15936,15938,15940,15942],{"class":38,"line":4155},[36,15933,13744],{"class":114},[36,15935,15876],{"class":114},[36,15937,15457],{"class":53},[36,15939,115],{"class":114},[36,15941,931],{"class":49},[36,15943,3833],{"class":53},[36,15945,15946],{"class":38,"line":4161},[36,15947,546],{"emptyLinePlaceholder":545},[36,15949,15950,15953],{"class":38,"line":4166},[36,15951,15952],{"class":42},"    \u002F\u002Fref = 100;",[36,15954,15955],{"class":42},"  \u002F\u002F加入const后不可以修改变量\n",[36,15957,15958,15960,15962,15964,15966],{"class":38,"line":4180},[36,15959,9056],{"class":53},[36,15961,3717],{"class":114},[36,15963,15457],{"class":53},[36,15965,3717],{"class":114},[36,15967,11367],{"class":53},[36,15969,15970],{"class":38,"line":4185},[36,15971,546],{"emptyLinePlaceholder":545},[36,15973,15974],{"class":38,"line":4191},[36,15975,15976],{"class":42},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,15978,15979,15981,15983,15985,15987],{"class":38,"line":4212},[36,15980,4522],{"class":114},[36,15982,13392],{"class":53},[36,15984,115],{"class":114},[36,15986,931],{"class":49},[36,15988,3833],{"class":53},[36,15990,15991,15994],{"class":38,"line":4217},[36,15992,15993],{"class":4500},"    showValue",[36,15995,15811],{"class":53},[36,15997,15998],{"class":38,"line":4231},[36,15999,546],{"emptyLinePlaceholder":545},[36,16001,16002,16004,16006,16008],{"class":38,"line":4236},[36,16003,4837],{"class":4500},[36,16005,54],{"class":53},[36,16007,4842],{"class":57},[36,16009,5251],{"class":53},[36,16011,16012],{"class":38,"line":4264},[36,16013,546],{"emptyLinePlaceholder":545},[36,16015,16016,16018,16020],{"class":38,"line":4269},[36,16017,6621],{"class":114},[36,16019,6624],{"class":49},[36,16021,3833],{"class":53},[36,16023,16024],{"class":38,"line":4286},[36,16025,4103],{"class":53},[2602,16027,16028],{},"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":31,"searchDepth":46,"depth":46,"links":16030},[16031,16032,16033,16034,16035,16036],{"id":14563,"depth":46,"text":14564},{"id":14742,"depth":46,"text":14743},{"id":14925,"depth":46,"text":14926},{"id":15329,"depth":46,"text":15330},{"id":15656,"depth":46,"text":15657},{"id":15836,"depth":46,"text":15837},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14555,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16043,"title":16044,"body":16045,"description":31,"extension":2631,"meta":17125,"navigation":545,"path":17126,"seo":17127,"stem":17128,"__hash__":17129},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16046,"toc":17117},[16047,16050,16054,16057,16062,16293,16295,16306,16310,16313,16321,16425,16428,16432,16435,16439,16442,16447,16469,16475,16802,16805,16809,16817,17114],[10,16048,16044],{"id":16049},"_7函数高级部分",[14,16051,16053],{"id":16052},"_71函数默认参数","7.1函数默认参数",[19,16055,16056],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,16058,7712,16059],{},[33,16060,16061],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,16063,16065],{"className":2693,"code":16064,"language":2695,"meta":31,"style":31},"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",[33,16066,16067,16101,16116,16120,16124,16129,16134,16163,16183,16193,16197,16201,16209,16213,16241,16263,16267,16277,16281,16289],{"__ignoreMap":31},[36,16068,16069,16071,16073,16075,16077,16079,16081,16083,16085,16087,16089,16091,16093,16095,16097,16099],{"class":38,"line":39},[36,16070,232],{"class":114},[36,16072,13908],{"class":4500},[36,16074,54],{"class":53},[36,16076,232],{"class":114},[36,16078,3936],{"class":1997},[36,16080,14958],{"class":53},[36,16082,232],{"class":114},[36,16084,5365],{"class":1997},[36,16086,498],{"class":114},[36,16088,931],{"class":49},[36,16090,14958],{"class":53},[36,16092,232],{"class":114},[36,16094,5381],{"class":1997},[36,16096,498],{"class":114},[36,16098,931],{"class":49},[36,16100,14965],{"class":53},[36,16102,16103,16105,16107,16109,16111,16113],{"class":38,"line":46},[36,16104,6621],{"class":114},[36,16106,13392],{"class":53},[36,16108,121],{"class":114},[36,16110,13405],{"class":53},[36,16112,121],{"class":114},[36,16114,16115],{"class":53}," c;\n",[36,16117,16118],{"class":38,"line":82},[36,16119,4103],{"class":53},[36,16121,16122],{"class":38,"line":88},[36,16123,546],{"emptyLinePlaceholder":545},[36,16125,16126],{"class":38,"line":195},[36,16127,16128],{"class":42},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,16130,16131],{"class":38,"line":1517},[36,16132,16133],{"class":42},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,16135,16136,16138,16141,16143,16145,16147,16149,16151,16153,16155,16157,16159,16161],{"class":38,"line":2421},[36,16137,232],{"class":114},[36,16139,16140],{"class":4500}," func2",[36,16142,54],{"class":53},[36,16144,232],{"class":114},[36,16146,3936],{"class":1997},[36,16148,498],{"class":114},[36,16150,931],{"class":49},[36,16152,14958],{"class":53},[36,16154,232],{"class":114},[36,16156,5365],{"class":1997},[36,16158,498],{"class":114},[36,16160,931],{"class":49},[36,16162,5251],{"class":53},[36,16164,16165,16167,16169,16171,16173,16175,16177,16179,16181],{"class":38,"line":2446},[36,16166,232],{"class":114},[36,16168,16140],{"class":4500},[36,16170,54],{"class":53},[36,16172,232],{"class":114},[36,16174,3936],{"class":1997},[36,16176,14958],{"class":53},[36,16178,232],{"class":114},[36,16180,5365],{"class":1997},[36,16182,14965],{"class":53},[36,16184,16185,16187,16189,16191],{"class":38,"line":2469},[36,16186,6621],{"class":114},[36,16188,13392],{"class":53},[36,16190,121],{"class":114},[36,16192,14986],{"class":53},[36,16194,16195],{"class":38,"line":2492},[36,16196,4103],{"class":53},[36,16198,16199],{"class":38,"line":4150},[36,16200,546],{"emptyLinePlaceholder":545},[36,16202,16203,16205,16207],{"class":38,"line":4155},[36,16204,232],{"class":114},[36,16206,4510],{"class":4500},[36,16208,13376],{"class":53},[36,16210,16211],{"class":38,"line":4161},[36,16212,546],{"emptyLinePlaceholder":545},[36,16214,16215,16217,16219,16222,16224,16226,16228,16230,16232,16234,16237,16239],{"class":38,"line":4166},[36,16216,9056],{"class":53},[36,16218,3717],{"class":114},[36,16220,16221],{"class":57}," \"ret = \"",[36,16223,3982],{"class":114},[36,16225,13908],{"class":4500},[36,16227,54],{"class":53},[36,16229,3376],{"class":49},[36,16231,14958],{"class":53},[36,16233,3376],{"class":49},[36,16235,16236],{"class":53},") ",[36,16238,3717],{"class":114},[36,16240,11367],{"class":53},[36,16242,16243,16245,16247,16249,16251,16253,16255,16257,16259,16261],{"class":38,"line":4180},[36,16244,9056],{"class":53},[36,16246,3717],{"class":114},[36,16248,16221],{"class":57},[36,16250,3982],{"class":114},[36,16252,13908],{"class":4500},[36,16254,54],{"class":53},[36,16256,166],{"class":49},[36,16258,16236],{"class":53},[36,16260,3717],{"class":114},[36,16262,11367],{"class":53},[36,16264,16265],{"class":38,"line":4185},[36,16266,546],{"emptyLinePlaceholder":545},[36,16268,16269,16271,16273,16275],{"class":38,"line":4191},[36,16270,4837],{"class":4500},[36,16272,54],{"class":53},[36,16274,4842],{"class":57},[36,16276,5251],{"class":53},[36,16278,16279],{"class":38,"line":4212},[36,16280,546],{"emptyLinePlaceholder":545},[36,16282,16283,16285,16287],{"class":38,"line":4217},[36,16284,6621],{"class":114},[36,16286,6624],{"class":49},[36,16288,3833],{"class":53},[36,16290,16291],{"class":38,"line":4231},[36,16292,4103],{"class":53},[19,16294,13855],{},[433,16296,16297,16300,16303],{},[436,16298,16299],{},"我传就用我；没传就用你",[436,16301,16302],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[436,16304,16305],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16307,16309],{"id":16308},"_72函数的占位参数","7.2函数的占位参数",[19,16311,16312],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16314,16315,16317,16318],{},[2839,16316,7712],{}," ",[33,16319,16320],{},"返回值类型 函数名 (数据类型){}",[26,16322,16324],{"className":2693,"code":16323,"language":2695,"meta":31,"style":31},"\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",[33,16325,16326,16331,16349,16362,16366,16374,16378,16395,16399,16409,16413,16421],{"__ignoreMap":31},[36,16327,16328],{"class":38,"line":39},[36,16329,16330],{"class":42},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,16332,16333,16335,16337,16339,16341,16343,16345,16347],{"class":38,"line":46},[36,16334,7892],{"class":114},[36,16336,13908],{"class":4500},[36,16338,54],{"class":53},[36,16340,232],{"class":114},[36,16342,3936],{"class":1997},[36,16344,14958],{"class":53},[36,16346,232],{"class":114},[36,16348,14965],{"class":53},[36,16350,16351,16353,16355,16358,16360],{"class":38,"line":82},[36,16352,9056],{"class":53},[36,16354,3717],{"class":114},[36,16356,16357],{"class":57}," \"this is func\"",[36,16359,3982],{"class":114},[36,16361,11367],{"class":53},[36,16363,16364],{"class":38,"line":88},[36,16365,4103],{"class":53},[36,16367,16368,16370,16372],{"class":38,"line":195},[36,16369,232],{"class":114},[36,16371,4510],{"class":4500},[36,16373,13376],{"class":53},[36,16375,16376],{"class":38,"line":1517},[36,16377,546],{"emptyLinePlaceholder":545},[36,16379,16380,16382,16384,16386,16388,16390,16392],{"class":38,"line":2421},[36,16381,15808],{"class":4500},[36,16383,54],{"class":53},[36,16385,1317],{"class":49},[36,16387,3059],{"class":53},[36,16389,1317],{"class":49},[36,16391,8493],{"class":53},[36,16393,16394],{"class":42}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,16396,16397],{"class":38,"line":2446},[36,16398,546],{"emptyLinePlaceholder":545},[36,16400,16401,16403,16405,16407],{"class":38,"line":2469},[36,16402,4837],{"class":4500},[36,16404,54],{"class":53},[36,16406,4842],{"class":57},[36,16408,5251],{"class":53},[36,16410,16411],{"class":38,"line":2492},[36,16412,546],{"emptyLinePlaceholder":545},[36,16414,16415,16417,16419],{"class":38,"line":4150},[36,16416,6621],{"class":114},[36,16418,6624],{"class":49},[36,16420,3833],{"class":53},[36,16422,16423],{"class":38,"line":4155},[36,16424,4103],{"class":53},[19,16426,16427],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16429,16431],{"id":16430},"_73函数重载","7.3函数重载",[19,16433,16434],{},"意思是函数名是可以相同的",[997,16436,16438],{"id":16437},"_731基本语法","7.3.1基本语法",[19,16440,16441],{},"作用：函数名可以相同，提高复用性",[19,16443,16444],{},[2839,16445,16446],{},"函数重载满足条件：",[3680,16448,16449,16452,16455],{},[436,16450,16451],{},"同一个作用域下",[436,16453,16454],{},"函数名称相同",[436,16456,16457,16458,16461,16462,16465,16466],{},"函数参数",[2839,16459,16460],{},"类型不同","  或者 ",[2839,16463,16464],{},"个数不同"," 或者 ",[2839,16467,16468],{},"顺序不同",[19,16470,16471,16474],{},[2839,16472,16473],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,16476,16478],{"className":12466,"code":16477,"language":12468,"meta":31,"style":31},"\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",[33,16479,16480,16485,16493,16497,16510,16514,16528,16532,16545,16549,16564,16568,16581,16585,16606,16610,16623,16627,16647,16651,16664,16668,16672,16677,16682,16687,16692,16697,16701,16705,16713,16717,16723,16733,16743,16757,16772,16776,16786,16790,16798],{"__ignoreMap":31},[36,16481,16482],{"class":38,"line":39},[36,16483,16484],{"class":42},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,16486,16487,16489,16491],{"class":38,"line":46},[36,16488,7892],{"class":114},[36,16490,13908],{"class":4500},[36,16492,4513],{"class":53},[36,16494,16495],{"class":38,"line":82},[36,16496,4084],{"class":53},[36,16498,16499,16501,16503,16506,16508],{"class":38,"line":88},[36,16500,9056],{"class":53},[36,16502,3717],{"class":114},[36,16504,16505],{"class":57}," \"func 的调用！\"",[36,16507,3982],{"class":114},[36,16509,11367],{"class":53},[36,16511,16512],{"class":38,"line":195},[36,16513,4103],{"class":53},[36,16515,16516,16518,16520,16522,16524,16526],{"class":38,"line":1517},[36,16517,7892],{"class":114},[36,16519,13908],{"class":4500},[36,16521,54],{"class":53},[36,16523,232],{"class":114},[36,16525,3936],{"class":1997},[36,16527,61],{"class":53},[36,16529,16530],{"class":38,"line":2421},[36,16531,4084],{"class":53},[36,16533,16534,16536,16538,16541,16543],{"class":38,"line":2446},[36,16535,9056],{"class":53},[36,16537,3717],{"class":114},[36,16539,16540],{"class":57}," \"func (int a) 的调用！\"",[36,16542,3982],{"class":114},[36,16544,11367],{"class":53},[36,16546,16547],{"class":38,"line":2469},[36,16548,4103],{"class":53},[36,16550,16551,16553,16555,16557,16560,16562],{"class":38,"line":2492},[36,16552,7892],{"class":114},[36,16554,13908],{"class":4500},[36,16556,54],{"class":53},[36,16558,16559],{"class":114},"double",[36,16561,3936],{"class":1997},[36,16563,61],{"class":53},[36,16565,16566],{"class":38,"line":4150},[36,16567,4084],{"class":53},[36,16569,16570,16572,16574,16577,16579],{"class":38,"line":4155},[36,16571,9056],{"class":53},[36,16573,3717],{"class":114},[36,16575,16576],{"class":57}," \"func (double a)的调用！\"",[36,16578,3982],{"class":114},[36,16580,11367],{"class":53},[36,16582,16583],{"class":38,"line":4161},[36,16584,4103],{"class":53},[36,16586,16587,16589,16591,16593,16595,16597,16600,16602,16604],{"class":38,"line":4166},[36,16588,7892],{"class":114},[36,16590,13908],{"class":4500},[36,16592,54],{"class":53},[36,16594,232],{"class":114},[36,16596,3936],{"class":1997},[36,16598,16599],{"class":53}," ,",[36,16601,16559],{"class":114},[36,16603,5365],{"class":1997},[36,16605,61],{"class":53},[36,16607,16608],{"class":38,"line":4180},[36,16609,4084],{"class":53},[36,16611,16612,16614,16616,16619,16621],{"class":38,"line":4185},[36,16613,9056],{"class":53},[36,16615,3717],{"class":114},[36,16617,16618],{"class":57}," \"func (int a ,double b) 的调用！\"",[36,16620,3982],{"class":114},[36,16622,11367],{"class":53},[36,16624,16625],{"class":38,"line":4191},[36,16626,4103],{"class":53},[36,16628,16629,16631,16633,16635,16637,16639,16641,16643,16645],{"class":38,"line":4212},[36,16630,7892],{"class":114},[36,16632,13908],{"class":4500},[36,16634,54],{"class":53},[36,16636,16559],{"class":114},[36,16638,3936],{"class":1997},[36,16640,16599],{"class":53},[36,16642,232],{"class":114},[36,16644,5365],{"class":1997},[36,16646,61],{"class":53},[36,16648,16649],{"class":38,"line":4217},[36,16650,4084],{"class":53},[36,16652,16653,16655,16657,16660,16662],{"class":38,"line":4231},[36,16654,9056],{"class":53},[36,16656,3717],{"class":114},[36,16658,16659],{"class":57}," \"func (double a ,int b)的调用！\"",[36,16661,3982],{"class":114},[36,16663,11367],{"class":53},[36,16665,16666],{"class":38,"line":4236},[36,16667,4103],{"class":53},[36,16669,16670],{"class":38,"line":4264},[36,16671,546],{"emptyLinePlaceholder":545},[36,16673,16674],{"class":38,"line":4269},[36,16675,16676],{"class":42},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,16678,16679],{"class":38,"line":4286},[36,16680,16681],{"class":42},"\u002F\u002Fint func(double a, int b)\n",[36,16683,16684],{"class":38,"line":4291},[36,16685,16686],{"class":42},"\u002F\u002F{\n",[36,16688,16689],{"class":38,"line":4296},[36,16690,16691],{"class":42},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,16693,16694],{"class":38,"line":4301},[36,16695,16696],{"class":42},"\u002F\u002F}\n",[36,16698,16699],{"class":38,"line":4315},[36,16700,546],{"emptyLinePlaceholder":545},[36,16702,16703],{"class":38,"line":4320},[36,16704,546],{"emptyLinePlaceholder":545},[36,16706,16707,16709,16711],{"class":38,"line":5109},[36,16708,232],{"class":114},[36,16710,4510],{"class":4500},[36,16712,13376],{"class":53},[36,16714,16715],{"class":38,"line":5123},[36,16716,546],{"emptyLinePlaceholder":545},[36,16718,16719,16721],{"class":38,"line":5131},[36,16720,15808],{"class":4500},[36,16722,8164],{"class":53},[36,16724,16725,16727,16729,16731],{"class":38,"line":5136},[36,16726,15808],{"class":4500},[36,16728,54],{"class":53},[36,16730,1317],{"class":49},[36,16732,5251],{"class":53},[36,16734,16735,16737,16739,16741],{"class":38,"line":5142},[36,16736,15808],{"class":4500},[36,16738,54],{"class":53},[36,16740,174],{"class":49},[36,16742,5251],{"class":53},[36,16744,16745,16747,16749,16751,16753,16755],{"class":38,"line":5148},[36,16746,15808],{"class":4500},[36,16748,54],{"class":53},[36,16750,1317],{"class":49},[36,16752,3059],{"class":53},[36,16754,174],{"class":49},[36,16756,5251],{"class":53},[36,16758,16759,16761,16763,16765,16768,16770],{"class":38,"line":5153},[36,16760,15808],{"class":4500},[36,16762,54],{"class":53},[36,16764,174],{"class":49},[36,16766,16767],{"class":53}," , ",[36,16769,1317],{"class":49},[36,16771,5251],{"class":53},[36,16773,16774],{"class":38,"line":10475},[36,16775,15733],{"class":53},[36,16777,16778,16780,16782,16784],{"class":38,"line":10499},[36,16779,4837],{"class":4500},[36,16781,54],{"class":53},[36,16783,4842],{"class":57},[36,16785,5251],{"class":53},[36,16787,16788],{"class":38,"line":10504},[36,16789,546],{"emptyLinePlaceholder":545},[36,16791,16792,16794,16796],{"class":38,"line":10510},[36,16793,6621],{"class":114},[36,16795,6624],{"class":49},[36,16797,3833],{"class":53},[36,16799,16800],{"class":38,"line":10537},[36,16801,4103],{"class":53},[19,16803,16804],{},"重点：函数返回值不可以作为函数重载条件！",[997,16806,16808],{"id":16807},"_732注意事项","7.3.2注意事项",[3680,16810,16811,16814],{},[436,16812,16813],{},"引用作为重载条件!!!",[436,16815,16816],{},"函数重载碰到函数默认参数",[26,16818,16820],{"className":2693,"code":16819,"language":2695,"meta":31,"style":31},"\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",[33,16821,16822,16827,16832,16836,16852,16856,16869,16873,16877,16895,16899,16912,16916,16920,16924,16929,16933,16957,16961,16974,16978,16982,16996,17000,17013,17017,17021,17029,17033,17045,17055,17068,17072,17076,17084,17088,17098,17102,17110],{"__ignoreMap":31},[36,16823,16824],{"class":38,"line":39},[36,16825,16826],{"class":42},"\u002F\u002F函数重载注意事项\n",[36,16828,16829],{"class":38,"line":46},[36,16830,16831],{"class":42},"\u002F\u002F1、引用作为重载条件\n",[36,16833,16834],{"class":38,"line":82},[36,16835,546],{"emptyLinePlaceholder":545},[36,16837,16838,16840,16842,16844,16846,16848,16850],{"class":38,"line":88},[36,16839,7892],{"class":114},[36,16841,13908],{"class":4500},[36,16843,54],{"class":53},[36,16845,232],{"class":114},[36,16847,13108],{"class":114},[36,16849,2923],{"class":1997},[36,16851,61],{"class":53},[36,16853,16854],{"class":38,"line":195},[36,16855,4084],{"class":53},[36,16857,16858,16860,16862,16865,16867],{"class":38,"line":1517},[36,16859,9056],{"class":53},[36,16861,3717],{"class":114},[36,16863,16864],{"class":57}," \"func (int &a) 调用 \"",[36,16866,3982],{"class":114},[36,16868,11367],{"class":53},[36,16870,16871],{"class":38,"line":2421},[36,16872,4103],{"class":53},[36,16874,16875],{"class":38,"line":2446},[36,16876,546],{"emptyLinePlaceholder":545},[36,16878,16879,16881,16883,16885,16887,16889,16891,16893],{"class":38,"line":2469},[36,16880,7892],{"class":114},[36,16882,13908],{"class":4500},[36,16884,54],{"class":53},[36,16886,9319],{"class":114},[36,16888,837],{"class":114},[36,16890,13108],{"class":114},[36,16892,2923],{"class":1997},[36,16894,61],{"class":53},[36,16896,16897],{"class":38,"line":2492},[36,16898,4084],{"class":53},[36,16900,16901,16903,16905,16908,16910],{"class":38,"line":4150},[36,16902,9056],{"class":53},[36,16904,3717],{"class":114},[36,16906,16907],{"class":57}," \"func (const int &a) 调用 \"",[36,16909,3982],{"class":114},[36,16911,11367],{"class":53},[36,16913,16914],{"class":38,"line":4155},[36,16915,4103],{"class":53},[36,16917,16918],{"class":38,"line":4161},[36,16919,546],{"emptyLinePlaceholder":545},[36,16921,16922],{"class":38,"line":4166},[36,16923,546],{"emptyLinePlaceholder":545},[36,16925,16926],{"class":38,"line":4180},[36,16927,16928],{"class":42},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,16930,16931],{"class":38,"line":4185},[36,16932,546],{"emptyLinePlaceholder":545},[36,16934,16935,16937,16939,16941,16943,16945,16947,16949,16951,16953,16955],{"class":38,"line":4191},[36,16936,7892],{"class":114},[36,16938,16140],{"class":4500},[36,16940,54],{"class":53},[36,16942,232],{"class":114},[36,16944,3936],{"class":1997},[36,16946,14958],{"class":53},[36,16948,232],{"class":114},[36,16950,5365],{"class":1997},[36,16952,498],{"class":114},[36,16954,931],{"class":49},[36,16956,61],{"class":53},[36,16958,16959],{"class":38,"line":4212},[36,16960,4084],{"class":53},[36,16962,16963,16965,16967,16970,16972],{"class":38,"line":4217},[36,16964,9056],{"class":53},[36,16966,3717],{"class":114},[36,16968,16969],{"class":57}," \"func2(int a, int b = 10) 调用\"",[36,16971,3982],{"class":114},[36,16973,11367],{"class":53},[36,16975,16976],{"class":38,"line":4231},[36,16977,4103],{"class":53},[36,16979,16980],{"class":38,"line":4236},[36,16981,546],{"emptyLinePlaceholder":545},[36,16983,16984,16986,16988,16990,16992,16994],{"class":38,"line":4264},[36,16985,7892],{"class":114},[36,16987,16140],{"class":4500},[36,16989,54],{"class":53},[36,16991,232],{"class":114},[36,16993,3936],{"class":1997},[36,16995,61],{"class":53},[36,16997,16998],{"class":38,"line":4269},[36,16999,4084],{"class":53},[36,17001,17002,17004,17006,17009,17011],{"class":38,"line":4286},[36,17003,9056],{"class":53},[36,17005,3717],{"class":114},[36,17007,17008],{"class":57}," \"func2(int a) 调用\"",[36,17010,3982],{"class":114},[36,17012,11367],{"class":53},[36,17014,17015],{"class":38,"line":4291},[36,17016,4103],{"class":53},[36,17018,17019],{"class":38,"line":4296},[36,17020,546],{"emptyLinePlaceholder":545},[36,17022,17023,17025,17027],{"class":38,"line":4301},[36,17024,232],{"class":114},[36,17026,4510],{"class":4500},[36,17028,13376],{"class":53},[36,17030,17031],{"class":38,"line":4315},[36,17032,15733],{"class":53},[36,17034,17035,17037,17039,17041,17043],{"class":38,"line":4320},[36,17036,4522],{"class":114},[36,17038,13392],{"class":53},[36,17040,115],{"class":114},[36,17042,931],{"class":49},[36,17044,3833],{"class":53},[36,17046,17047,17049,17052],{"class":38,"line":5109},[36,17048,15808],{"class":4500},[36,17050,17051],{"class":53},"(a);",[36,17053,17054],{"class":42}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,17056,17057,17059,17061,17063,17065],{"class":38,"line":5123},[36,17058,15808],{"class":4500},[36,17060,54],{"class":53},[36,17062,1317],{"class":49},[36,17064,8493],{"class":53},[36,17066,17067],{"class":42},"\u002F\u002F调用有const   10是个常量\n",[36,17069,17070],{"class":38,"line":5131},[36,17071,546],{"emptyLinePlaceholder":545},[36,17073,17074],{"class":38,"line":5136},[36,17075,546],{"emptyLinePlaceholder":545},[36,17077,17078,17081],{"class":38,"line":5142},[36,17079,17080],{"class":42},"    \u002F\u002Ffunc2(10);",[36,17082,17083],{"class":42}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,17085,17086],{"class":38,"line":5148},[36,17087,546],{"emptyLinePlaceholder":545},[36,17089,17090,17092,17094,17096],{"class":38,"line":5153},[36,17091,4837],{"class":4500},[36,17093,54],{"class":53},[36,17095,4842],{"class":57},[36,17097,5251],{"class":53},[36,17099,17100],{"class":38,"line":10475},[36,17101,546],{"emptyLinePlaceholder":545},[36,17103,17104,17106,17108],{"class":38,"line":10499},[36,17105,6621],{"class":114},[36,17107,6624],{"class":49},[36,17109,3833],{"class":53},[36,17111,17112],{"class":38,"line":10504},[36,17113,4103],{"class":53},[2602,17115,17116],{},"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":31,"searchDepth":46,"depth":46,"links":17118},[17119,17120,17121],{"id":16052,"depth":46,"text":16053},{"id":16308,"depth":46,"text":16309},{"id":16430,"depth":46,"text":16431,"children":17122},[17123,17124],{"id":16437,"depth":82,"text":16438},{"id":16807,"depth":82,"text":16808},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16044,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17131,"title":17132,"body":17133,"description":25882,"extension":2631,"meta":25883,"navigation":545,"path":25884,"seo":25885,"stem":25886,"__hash__":25887},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17134,"toc":25863},[17135,17138,17144,17151,17156,17159,17162,17165,17169,17173,17176,17179,17187,17192,17195,17202,17207,17364,17367,17620,17623,17626,17629,17634,17637,17640,17651,17655,17891,17895,17905,17908,17916,18063,18067,18070,18073,18077,18521,18525,18533,18541,19453,19460,19465,20093,20096,20099,20102,20221,20224,20311,20314,20440,20443,20537,20540,20893,20897,20905,20909,20916,20919,20922,20933,20939,20944,20956,20964,20984,20992,21009,21195,21198,21202,21205,21208,21211,21214,21217,21220,21223,21683,21689,21693,21696,21707,22294,22297,22786,22790,22793,22796,22799,22802,22805,22813,23209,23213,23216,23219,23666,23669,23672,23677,23680,23685,23688,23692,23695,23697,23703,23706,24012,24021,24062,24066,24069,24071,24104,24107,24414,24416,24431,24434,24457,24466,24472,24475,24479,24482,24485,24490,24501,24506,24514,24519,24649,24652,24655,24830,24835,25047,25051,25054,25168,25173,25412,25416,25420,25423,25426,25431,25536,25539,25542,25545,25549,25660,25663,25666,25671,25723,25726,25729,25734,25780,25783,25788,25856,25858,25861],[10,17136,17132],{"id":17137},"_8类和对象",[19,17139,17140,17141],{},"C++面向对象的三大特性为",[2839,17142,17143],{},"封装、继承、多态",[19,17145,17146,17147,17150],{},"C++认为",[2839,17148,17149],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17152,17153],{},[2839,17154,17155],{},"例如：",[19,17157,17158],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17160,17161],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17163,17164],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17166,17168],{"id":17167},"_81封装","8.1封装",[997,17170,17172],{"id":17171},"_811封装的意义","8.1.1封装的意义",[19,17174,17175],{},"封装是C++面向对象三大特性之一",[19,17177,17178],{},"封装的意义：",[3680,17180,17181,17184],{},[436,17182,17183],{},"将属性和行为作为一个整体，表现生活中的事物",[436,17185,17186],{},"将属性和行为加以权限控制",[19,17188,17189],{},[2839,17190,17191],{},"封装意义一：",[19,17193,17194],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17196,17197,16317,17199],{},[2839,17198,7712],{},[33,17200,17201],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[433,17203,17204],{},[436,17205,17206],{},"**示例1：**设计一个圆类，求圆的周长",[26,17208,17210],{"className":2693,"code":17209,"language":2695,"meta":31,"style":31},"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",[33,17211,17212,17219,17223,17228,17233,17238,17243,17250,17255,17265,17269,17286,17290,17294,17302,17306,17311,17316,17321,17326,17337,17360],{"__ignoreMap":31},[36,17213,17214,17216],{"class":38,"line":39},[36,17215,519],{"class":114},[36,17217,17218],{"class":4500}," Circle\n",[36,17220,17221],{"class":38,"line":46},[36,17222,4084],{"class":53},[36,17224,17225],{"class":38,"line":82},[36,17226,17227],{"class":42},"    \u002F\u002F访问权限\n",[36,17229,17230],{"class":38,"line":88},[36,17231,17232],{"class":42},"    \u002F\u002F公共权限\n",[36,17234,17235],{"class":38,"line":195},[36,17236,17237],{"class":114},"public:\n",[36,17239,17240],{"class":38,"line":1517},[36,17241,17242],{"class":42},"    \u002F\u002F属性\n",[36,17244,17245,17247],{"class":38,"line":2421},[36,17246,4522],{"class":114},[36,17248,17249],{"class":53}," m_r;\n",[36,17251,17252],{"class":38,"line":2446},[36,17253,17254],{"class":42},"    \u002F\u002F行为\n",[36,17256,17257,17260,17263],{"class":38,"line":2469},[36,17258,17259],{"class":114},"    double",[36,17261,17262],{"class":4500}," calculateZC",[36,17264,4513],{"class":53},[36,17266,17267],{"class":38,"line":2492},[36,17268,4567],{"class":53},[36,17270,17271,17274,17276,17278,17281,17283],{"class":38,"line":4150},[36,17272,17273],{"class":114},"        return",[36,17275,1140],{"class":49},[36,17277,1050],{"class":114},[36,17279,17280],{"class":53},"PI",[36,17282,1050],{"class":114},[36,17284,17285],{"class":53},"m_r;\n",[36,17287,17288],{"class":38,"line":4155},[36,17289,4721],{"class":53},[36,17291,17292],{"class":38,"line":4161},[36,17293,6526],{"class":53},[36,17295,17296,17298,17300],{"class":38,"line":4166},[36,17297,232],{"class":114},[36,17299,4510],{"class":4500},[36,17301,4513],{"class":53},[36,17303,17304],{"class":38,"line":4180},[36,17305,4084],{"class":53},[36,17307,17308],{"class":38,"line":4185},[36,17309,17310],{"class":42},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,17312,17313],{"class":38,"line":4191},[36,17314,17315],{"class":42},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,17317,17318],{"class":38,"line":4212},[36,17319,17320],{"class":53},"    Circle c1;\n",[36,17322,17323],{"class":38,"line":4217},[36,17324,17325],{"class":42},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,17327,17328,17331,17333,17335],{"class":38,"line":4231},[36,17329,17330],{"class":53},"    c1.m_r",[36,17332,115],{"class":114},[36,17334,1317],{"class":49},[36,17336,3833],{"class":53},[36,17338,17339,17341,17343,17346,17348,17351,17354,17356,17358],{"class":38,"line":4236},[36,17340,4089],{"class":53},[36,17342,3717],{"class":114},[36,17344,17345],{"class":57},"\"圆的周长\"",[36,17347,3717],{"class":114},[36,17349,17350],{"class":53},"c1.",[36,17352,17353],{"class":4500},"calculateZC",[36,17355,4959],{"class":53},[36,17357,3717],{"class":114},[36,17359,3739],{"class":53},[36,17361,17362],{"class":38,"line":4264},[36,17363,4103],{"class":53},[19,17365,17366],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,17368,17370],{"className":2693,"code":17369,"language":2695,"meta":31,"style":31},"#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",[33,17371,17372,17378,17388,17394,17400,17404,17408,17413,17420,17425,17443,17447,17457,17461,17466,17482,17486,17496,17500,17505,17513,17517,17549,17553,17557,17565,17569,17574,17579,17593,17607,17616],{"__ignoreMap":31},[36,17373,17374,17376],{"class":38,"line":39},[36,17375,4486],{"class":114},[36,17377,4489],{"class":57},[36,17379,17380,17382,17384,17386],{"class":38,"line":46},[36,17381,4494],{"class":114},[36,17383,4497],{"class":114},[36,17385,4501],{"class":4500},[36,17387,3833],{"class":53},[36,17389,17390,17392],{"class":38,"line":82},[36,17391,4486],{"class":114},[36,17393,10276],{"class":57},[36,17395,17396,17398],{"class":38,"line":88},[36,17397,519],{"class":114},[36,17399,10289],{"class":4500},[36,17401,17402],{"class":38,"line":195},[36,17403,4084],{"class":53},[36,17405,17406],{"class":38,"line":1517},[36,17407,17237],{"class":114},[36,17409,17410],{"class":38,"line":2421},[36,17411,17412],{"class":53},"    string m_name;\n",[36,17414,17415,17417],{"class":38,"line":2446},[36,17416,4522],{"class":114},[36,17418,17419],{"class":53}," m_id;\n",[36,17421,17422],{"class":38,"line":2469},[36,17423,17424],{"class":42},"    \u002F\u002F赋值姓名\n",[36,17426,17427,17430,17433,17435,17438,17441],{"class":38,"line":2492},[36,17428,17429],{"class":114},"    void",[36,17431,17432],{"class":4500}," setName",[36,17434,54],{"class":53},[36,17436,17437],{"class":4500},"string",[36,17439,17440],{"class":1997}," name",[36,17442,61],{"class":53},[36,17444,17445],{"class":38,"line":4150},[36,17446,4567],{"class":53},[36,17448,17449,17452,17454],{"class":38,"line":4155},[36,17450,17451],{"class":53},"        m_name",[36,17453,115],{"class":114},[36,17455,17456],{"class":53},"name;\n",[36,17458,17459],{"class":38,"line":4161},[36,17460,4721],{"class":53},[36,17462,17463],{"class":38,"line":4166},[36,17464,17465],{"class":42},"    \u002F\u002F赋值学号\n",[36,17467,17468,17470,17473,17475,17477,17480],{"class":38,"line":4180},[36,17469,17429],{"class":114},[36,17471,17472],{"class":4500}," setId",[36,17474,54],{"class":53},[36,17476,232],{"class":114},[36,17478,17479],{"class":1997}," id",[36,17481,61],{"class":53},[36,17483,17484],{"class":38,"line":4185},[36,17485,4567],{"class":53},[36,17487,17488,17491,17493],{"class":38,"line":4191},[36,17489,17490],{"class":53},"        m_id",[36,17492,115],{"class":114},[36,17494,17495],{"class":53},"id;\n",[36,17497,17498],{"class":38,"line":4212},[36,17499,4721],{"class":53},[36,17501,17502],{"class":38,"line":4217},[36,17503,17504],{"class":42},"    \u002F\u002F打印学生信息\n",[36,17506,17507,17509,17511],{"class":38,"line":4231},[36,17508,17429],{"class":114},[36,17510,12140],{"class":4500},[36,17512,4513],{"class":53},[36,17514,17515],{"class":38,"line":4236},[36,17516,4567],{"class":53},[36,17518,17519,17521,17523,17526,17528,17531,17533,17535,17537,17540,17542,17545,17547],{"class":38,"line":4264},[36,17520,5982],{"class":53},[36,17522,3717],{"class":114},[36,17524,17525],{"class":57},"\"姓名：\"",[36,17527,3717],{"class":114},[36,17529,17530],{"class":53},"m_name",[36,17532,3717],{"class":114},[36,17534,6890],{"class":57},[36,17536,3717],{"class":114},[36,17538,17539],{"class":57},"\"学号：\"",[36,17541,3717],{"class":114},[36,17543,17544],{"class":53},"m_id",[36,17546,3717],{"class":114},[36,17548,3739],{"class":53},[36,17550,17551],{"class":38,"line":4269},[36,17552,4721],{"class":53},[36,17554,17555],{"class":38,"line":4286},[36,17556,6526],{"class":53},[36,17558,17559,17561,17563],{"class":38,"line":4291},[36,17560,232],{"class":114},[36,17562,4510],{"class":4500},[36,17564,4513],{"class":53},[36,17566,17567],{"class":38,"line":4296},[36,17568,4084],{"class":53},[36,17570,17571],{"class":38,"line":4301},[36,17572,17573],{"class":42},"    \u002F\u002F实例化\n",[36,17575,17576],{"class":38,"line":4315},[36,17577,17578],{"class":53},"    Student s1;\n",[36,17580,17581,17584,17587,17589,17591],{"class":38,"line":4320},[36,17582,17583],{"class":53},"    s1.",[36,17585,17586],{"class":4500},"setName",[36,17588,54],{"class":53},[36,17590,10443],{"class":57},[36,17592,5251],{"class":53},[36,17594,17595,17597,17600,17602,17605],{"class":38,"line":5109},[36,17596,17583],{"class":53},[36,17598,17599],{"class":4500},"setId",[36,17601,54],{"class":53},[36,17603,17604],{"class":49},"123456",[36,17606,5251],{"class":53},[36,17608,17609,17611,17614],{"class":38,"line":5123},[36,17610,17583],{"class":53},[36,17612,17613],{"class":4500},"printInfo",[36,17615,8164],{"class":53},[36,17617,17618],{"class":38,"line":5131},[36,17619,4103],{"class":53},[19,17621,17622],{},"类中的属性和行为统称为成员",[19,17624,17625],{},"属性：成员属性(成员变量)",[19,17627,17628],{},"方法：成员函数(成员方法)",[19,17630,17631],{},[2839,17632,17633],{},"封装意义二：",[19,17635,17636],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17638,17639],{},"访问权限有三种：",[433,17641,17642,17645,17648],{},[436,17643,17644],{},"public        公共权限",[436,17646,17647],{},"protected 保护权限",[436,17649,17650],{},"private      私有权限",[19,17652,17653],{},[2839,17654,814],{},[26,17656,17658],{"className":12466,"code":17657,"language":12468,"meta":31,"style":31},"\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",[33,17659,17660,17665,17670,17675,17680,17684,17691,17695,17700,17704,17709,17713,17718,17723,17728,17732,17737,17742,17749,17753,17757,17765,17769,17780,17792,17804,17808,17812,17816,17824,17828,17833,17845,17853,17861,17865,17875,17879,17887],{"__ignoreMap":31},[36,17661,17662],{"class":38,"line":39},[36,17663,17664],{"class":42},"\u002F\u002F三种权限\n",[36,17666,17667],{"class":38,"line":46},[36,17668,17669],{"class":42},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,17671,17672],{"class":38,"line":82},[36,17673,17674],{"class":42},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,17676,17677],{"class":38,"line":88},[36,17678,17679],{"class":42},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,17681,17682],{"class":38,"line":195},[36,17683,546],{"emptyLinePlaceholder":545},[36,17685,17686,17688],{"class":38,"line":1517},[36,17687,519],{"class":114},[36,17689,17690],{"class":4500}," Person\n",[36,17692,17693],{"class":38,"line":2421},[36,17694,4084],{"class":53},[36,17696,17697],{"class":38,"line":2446},[36,17698,17699],{"class":42},"    \u002F\u002F姓名  公共权限\n",[36,17701,17702],{"class":38,"line":2469},[36,17703,17237],{"class":114},[36,17705,17706],{"class":38,"line":2492},[36,17707,17708],{"class":53},"    string m_Name;\n",[36,17710,17711],{"class":38,"line":4150},[36,17712,546],{"emptyLinePlaceholder":545},[36,17714,17715],{"class":38,"line":4155},[36,17716,17717],{"class":42},"    \u002F\u002F汽车  保护权限\n",[36,17719,17720],{"class":38,"line":4161},[36,17721,17722],{"class":114},"protected:\n",[36,17724,17725],{"class":38,"line":4166},[36,17726,17727],{"class":53},"    string m_Car;\n",[36,17729,17730],{"class":38,"line":4180},[36,17731,546],{"emptyLinePlaceholder":545},[36,17733,17734],{"class":38,"line":4185},[36,17735,17736],{"class":42},"    \u002F\u002F银行卡密码  私有权限\n",[36,17738,17739],{"class":38,"line":4191},[36,17740,17741],{"class":114},"private:\n",[36,17743,17744,17746],{"class":38,"line":4212},[36,17745,4522],{"class":114},[36,17747,17748],{"class":53}," m_Password;\n",[36,17750,17751],{"class":38,"line":4217},[36,17752,546],{"emptyLinePlaceholder":545},[36,17754,17755],{"class":38,"line":4231},[36,17756,17237],{"class":114},[36,17758,17759,17761,17763],{"class":38,"line":4236},[36,17760,17429],{"class":114},[36,17762,13908],{"class":4500},[36,17764,4513],{"class":53},[36,17766,17767],{"class":38,"line":4264},[36,17768,4567],{"class":53},[36,17770,17771,17774,17776,17778],{"class":38,"line":4269},[36,17772,17773],{"class":53},"        m_Name ",[36,17775,115],{"class":114},[36,17777,11465],{"class":57},[36,17779,3833],{"class":53},[36,17781,17782,17785,17787,17790],{"class":38,"line":4286},[36,17783,17784],{"class":53},"        m_Car ",[36,17786,115],{"class":114},[36,17788,17789],{"class":57}," \"拖拉机\"",[36,17791,3833],{"class":53},[36,17793,17794,17797,17799,17802],{"class":38,"line":4291},[36,17795,17796],{"class":53},"        m_Password ",[36,17798,115],{"class":114},[36,17800,17801],{"class":49}," 123456",[36,17803,3833],{"class":53},[36,17805,17806],{"class":38,"line":4296},[36,17807,4721],{"class":53},[36,17809,17810],{"class":38,"line":4301},[36,17811,6526],{"class":53},[36,17813,17814],{"class":38,"line":4315},[36,17815,546],{"emptyLinePlaceholder":545},[36,17817,17818,17820,17822],{"class":38,"line":4320},[36,17819,232],{"class":114},[36,17821,4510],{"class":4500},[36,17823,13376],{"class":53},[36,17825,17826],{"class":38,"line":5109},[36,17827,546],{"emptyLinePlaceholder":545},[36,17829,17830],{"class":38,"line":5123},[36,17831,17832],{"class":53},"    Person p;\n",[36,17834,17835,17838,17840,17843],{"class":38,"line":5131},[36,17836,17837],{"class":53},"    p.m_Name ",[36,17839,115],{"class":114},[36,17841,17842],{"class":57}," \"李四\"",[36,17844,3833],{"class":53},[36,17846,17847,17850],{"class":38,"line":5136},[36,17848,17849],{"class":42},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,17851,17852],{"class":42},"  \u002F\u002F保护权限类外访问不到\n",[36,17854,17855,17858],{"class":38,"line":5142},[36,17856,17857],{"class":42},"    \u002F\u002Fp.m_Password = 123;",[36,17859,17860],{"class":42}," \u002F\u002F私有权限类外访问不到\n",[36,17862,17863],{"class":38,"line":5148},[36,17864,546],{"emptyLinePlaceholder":545},[36,17866,17867,17869,17871,17873],{"class":38,"line":5153},[36,17868,4837],{"class":4500},[36,17870,54],{"class":53},[36,17872,4842],{"class":57},[36,17874,5251],{"class":53},[36,17876,17877],{"class":38,"line":10475},[36,17878,546],{"emptyLinePlaceholder":545},[36,17880,17881,17883,17885],{"class":38,"line":10499},[36,17882,6621],{"class":114},[36,17884,6624],{"class":49},[36,17886,3833],{"class":53},[36,17888,17889],{"class":38,"line":10504},[36,17890,4103],{"class":53},[997,17892,17894],{"id":17893},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17896,17897,17898,17901,17902],{},"在C++中 struct和class唯一的",[2839,17899,17900],{},"区别","就在于 ",[2839,17903,17904],{},"默认的访问权限不同",[19,17906,17907],{},"区别：",[3680,17909,17910,17913],{},[436,17911,17912],{},"struct 默认权限为公共",[436,17914,17915],{},"class   默认权限为私有",[26,17917,17919],{"className":12466,"code":17918,"language":12468,"meta":31,"style":31},"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",[33,17920,17921,17928,17932,17942,17946,17950,17957,17961,17971,17975,17979,17987,17991,17996,18010,18014,18019,18033,18037,18047,18051,18059],{"__ignoreMap":31},[36,17922,17923,17925],{"class":38,"line":39},[36,17924,519],{"class":114},[36,17926,17927],{"class":4500}," C1\n",[36,17929,17930],{"class":38,"line":46},[36,17931,4084],{"class":53},[36,17933,17934,17936,17939],{"class":38,"line":82},[36,17935,4522],{"class":114},[36,17937,17938],{"class":53},"  m_A;",[36,17940,17941],{"class":42}," \u002F\u002F默认是私有权限\n",[36,17943,17944],{"class":38,"line":88},[36,17945,6526],{"class":53},[36,17947,17948],{"class":38,"line":195},[36,17949,546],{"emptyLinePlaceholder":545},[36,17951,17952,17954],{"class":38,"line":1517},[36,17953,10286],{"class":114},[36,17955,17956],{"class":4500}," C2\n",[36,17958,17959],{"class":38,"line":2421},[36,17960,4084],{"class":53},[36,17962,17963,17965,17968],{"class":38,"line":2446},[36,17964,4522],{"class":114},[36,17966,17967],{"class":53}," m_A;",[36,17969,17970],{"class":42},"  \u002F\u002F默认是公共权限\n",[36,17972,17973],{"class":38,"line":2469},[36,17974,6526],{"class":53},[36,17976,17977],{"class":38,"line":2492},[36,17978,546],{"emptyLinePlaceholder":545},[36,17980,17981,17983,17985],{"class":38,"line":4150},[36,17982,232],{"class":114},[36,17984,4510],{"class":4500},[36,17986,13376],{"class":53},[36,17988,17989],{"class":38,"line":4155},[36,17990,546],{"emptyLinePlaceholder":545},[36,17992,17993],{"class":38,"line":4161},[36,17994,17995],{"class":53},"    C1 c1;\n",[36,17997,17998,18001,18003,18005,18007],{"class":38,"line":4166},[36,17999,18000],{"class":53},"    c1.m_A ",[36,18002,115],{"class":114},[36,18004,931],{"class":49},[36,18006,2752],{"class":53},[36,18008,18009],{"class":42}," \u002F\u002F错误，访问权限是私有\n",[36,18011,18012],{"class":38,"line":4180},[36,18013,546],{"emptyLinePlaceholder":545},[36,18015,18016],{"class":38,"line":4185},[36,18017,18018],{"class":53},"    C2 c2;\n",[36,18020,18021,18024,18026,18028,18030],{"class":38,"line":4191},[36,18022,18023],{"class":53},"    c2.m_A ",[36,18025,115],{"class":114},[36,18027,931],{"class":49},[36,18029,2752],{"class":53},[36,18031,18032],{"class":42}," \u002F\u002F正确，访问权限是公共\n",[36,18034,18035],{"class":38,"line":4212},[36,18036,546],{"emptyLinePlaceholder":545},[36,18038,18039,18041,18043,18045],{"class":38,"line":4217},[36,18040,4837],{"class":4500},[36,18042,54],{"class":53},[36,18044,4842],{"class":57},[36,18046,5251],{"class":53},[36,18048,18049],{"class":38,"line":4231},[36,18050,546],{"emptyLinePlaceholder":545},[36,18052,18053,18055,18057],{"class":38,"line":4236},[36,18054,6621],{"class":114},[36,18056,6624],{"class":49},[36,18058,3833],{"class":53},[36,18060,18061],{"class":38,"line":4264},[36,18062,4103],{"class":53},[997,18064,18066],{"id":18065},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,18068,18069],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,18071,18072],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,18074,18075],{},[2839,18076,814],{},[26,18078,18080],{"className":12466,"code":18079,"language":12468,"meta":31,"style":31},"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",[33,18081,18082,18092,18096,18100,18105,18119,18128,18132,18142,18146,18153,18157,18161,18165,18170,18179,18186,18190,18195,18211,18233,18246,18253,18257,18266,18270,18274,18279,18295,18305,18309,18313,18317,18325,18329,18339,18343,18351,18355,18359,18367,18371,18375,18380,18393,18416,18420,18425,18438,18460,18464,18469,18483,18491,18495,18505,18509,18517],{"__ignoreMap":31},[36,18083,18084,18086,18089],{"class":38,"line":39},[36,18085,519],{"class":114},[36,18087,18088],{"class":4500}," Person",[36,18090,18091],{"class":53}," {\n",[36,18093,18094],{"class":38,"line":46},[36,18095,17237],{"class":114},[36,18097,18098],{"class":38,"line":82},[36,18099,546],{"emptyLinePlaceholder":545},[36,18101,18102],{"class":38,"line":88},[36,18103,18104],{"class":42},"    \u002F\u002F姓名设置可读可写\n",[36,18106,18107,18109,18111,18113,18115,18117],{"class":38,"line":195},[36,18108,17429],{"class":114},[36,18110,17432],{"class":4500},[36,18112,54],{"class":53},[36,18114,17437],{"class":4500},[36,18116,17440],{"class":1997},[36,18118,14965],{"class":53},[36,18120,18121,18123,18125],{"class":38,"line":1517},[36,18122,17773],{"class":53},[36,18124,115],{"class":114},[36,18126,18127],{"class":53}," name;\n",[36,18129,18130],{"class":38,"line":2421},[36,18131,4721],{"class":53},[36,18133,18134,18137,18140],{"class":38,"line":2446},[36,18135,18136],{"class":4500},"    string",[36,18138,18139],{"class":4500}," getName",[36,18141,4513],{"class":53},[36,18143,18144],{"class":38,"line":2469},[36,18145,4567],{"class":53},[36,18147,18148,18150],{"class":38,"line":2492},[36,18149,17273],{"class":114},[36,18151,18152],{"class":53}," m_Name;\n",[36,18154,18155],{"class":38,"line":4150},[36,18156,4721],{"class":53},[36,18158,18159],{"class":38,"line":4155},[36,18160,546],{"emptyLinePlaceholder":545},[36,18162,18163],{"class":38,"line":4161},[36,18164,546],{"emptyLinePlaceholder":545},[36,18166,18167],{"class":38,"line":4166},[36,18168,18169],{"class":42},"    \u002F\u002F获取年龄 \n",[36,18171,18172,18174,18177],{"class":38,"line":4180},[36,18173,4522],{"class":114},[36,18175,18176],{"class":4500}," getAge",[36,18178,13376],{"class":53},[36,18180,18181,18183],{"class":38,"line":4185},[36,18182,17273],{"class":114},[36,18184,18185],{"class":53}," m_Age;\n",[36,18187,18188],{"class":38,"line":4191},[36,18189,4721],{"class":53},[36,18191,18192],{"class":38,"line":4212},[36,18193,18194],{"class":42},"    \u002F\u002F设置年龄\n",[36,18196,18197,18199,18202,18204,18206,18209],{"class":38,"line":4217},[36,18198,17429],{"class":114},[36,18200,18201],{"class":4500}," setAge",[36,18203,54],{"class":53},[36,18205,232],{"class":114},[36,18207,18208],{"class":1997}," age",[36,18210,14965],{"class":53},[36,18212,18213,18215,18218,18220,18222,18224,18226,18228,18231],{"class":38,"line":4231},[36,18214,5029],{"class":114},[36,18216,18217],{"class":53}," (age ",[36,18219,1507],{"class":114},[36,18221,6624],{"class":49},[36,18223,5786],{"class":114},[36,18225,118],{"class":53},[36,18227,3633],{"class":114},[36,18229,18230],{"class":49}," 150",[36,18232,14965],{"class":53},[36,18234,18235,18237,18239,18242,18244],{"class":38,"line":4236},[36,18236,12244],{"class":53},[36,18238,3717],{"class":114},[36,18240,18241],{"class":57}," \"你个老妖精!\"",[36,18243,3982],{"class":114},[36,18245,11367],{"class":53},[36,18247,18248,18251],{"class":38,"line":4264},[36,18249,18250],{"class":114},"            return",[36,18252,3833],{"class":53},[36,18254,18255],{"class":38,"line":4269},[36,18256,5061],{"class":53},[36,18258,18259,18262,18264],{"class":38,"line":4286},[36,18260,18261],{"class":53},"        m_Age ",[36,18263,115],{"class":114},[36,18265,10324],{"class":53},[36,18267,18268],{"class":38,"line":4291},[36,18269,4721],{"class":53},[36,18271,18272],{"class":38,"line":4296},[36,18273,546],{"emptyLinePlaceholder":545},[36,18275,18276],{"class":38,"line":4301},[36,18277,18278],{"class":42},"    \u002F\u002F情人设置为只写\n",[36,18280,18281,18283,18286,18288,18290,18293],{"class":38,"line":4315},[36,18282,17429],{"class":114},[36,18284,18285],{"class":4500}," setLover",[36,18287,54],{"class":53},[36,18289,17437],{"class":4500},[36,18291,18292],{"class":1997}," lover",[36,18294,14965],{"class":53},[36,18296,18297,18300,18302],{"class":38,"line":4320},[36,18298,18299],{"class":53},"        m_Lover ",[36,18301,115],{"class":114},[36,18303,18304],{"class":53}," lover;\n",[36,18306,18307],{"class":38,"line":5109},[36,18308,4721],{"class":53},[36,18310,18311],{"class":38,"line":5123},[36,18312,546],{"emptyLinePlaceholder":545},[36,18314,18315],{"class":38,"line":5131},[36,18316,17741],{"class":114},[36,18318,18319,18322],{"class":38,"line":5136},[36,18320,18321],{"class":53},"    string m_Name;",[36,18323,18324],{"class":42}," \u002F\u002F可读可写  姓名\n",[36,18326,18327],{"class":38,"line":5142},[36,18328,15733],{"class":53},[36,18330,18331,18333,18336],{"class":38,"line":5148},[36,18332,4522],{"class":114},[36,18334,18335],{"class":53}," m_Age;",[36,18337,18338],{"class":42}," \u002F\u002F只读  年龄\n",[36,18340,18341],{"class":38,"line":5153},[36,18342,546],{"emptyLinePlaceholder":545},[36,18344,18345,18348],{"class":38,"line":10475},[36,18346,18347],{"class":53},"    string m_Lover;",[36,18349,18350],{"class":42}," \u002F\u002F只写  情人\n",[36,18352,18353],{"class":38,"line":10499},[36,18354,6526],{"class":53},[36,18356,18357],{"class":38,"line":10504},[36,18358,546],{"emptyLinePlaceholder":545},[36,18360,18361,18363,18365],{"class":38,"line":10510},[36,18362,232],{"class":114},[36,18364,4510],{"class":4500},[36,18366,13376],{"class":53},[36,18368,18369],{"class":38,"line":10537},[36,18370,546],{"emptyLinePlaceholder":545},[36,18372,18373],{"class":38,"line":10542},[36,18374,17832],{"class":53},[36,18376,18377],{"class":38,"line":10548},[36,18378,18379],{"class":42},"    \u002F\u002F姓名设置\n",[36,18381,18382,18385,18387,18389,18391],{"class":38,"line":10560},[36,18383,18384],{"class":53},"    p.",[36,18386,17586],{"class":4500},[36,18388,54],{"class":53},[36,18390,10443],{"class":57},[36,18392,5251],{"class":53},[36,18394,18395,18397,18399,18402,18404,18407,18410,18412,18414],{"class":38,"line":10572},[36,18396,9056],{"class":53},[36,18398,3717],{"class":114},[36,18400,18401],{"class":57}," \"姓名： \"",[36,18403,3982],{"class":114},[36,18405,18406],{"class":53}," p.",[36,18408,18409],{"class":4500},"getName",[36,18411,15573],{"class":53},[36,18413,3717],{"class":114},[36,18415,11367],{"class":53},[36,18417,18418],{"class":38,"line":10584},[36,18419,546],{"emptyLinePlaceholder":545},[36,18421,18422],{"class":38,"line":12241},[36,18423,18424],{"class":42},"    \u002F\u002F年龄设置\n",[36,18426,18427,18429,18432,18434,18436],{"class":38,"line":12266},[36,18428,18384],{"class":53},[36,18430,18431],{"class":4500},"setAge",[36,18433,54],{"class":53},[36,18435,3332],{"class":49},[36,18437,5251],{"class":53},[36,18439,18440,18442,18444,18447,18449,18451,18454,18456,18458],{"class":38,"line":12289},[36,18441,9056],{"class":53},[36,18443,3717],{"class":114},[36,18445,18446],{"class":57}," \"年龄： \"",[36,18448,3982],{"class":114},[36,18450,18406],{"class":53},[36,18452,18453],{"class":4500},"getAge",[36,18455,15573],{"class":53},[36,18457,3717],{"class":114},[36,18459,11367],{"class":53},[36,18461,18462],{"class":38,"line":12313},[36,18463,546],{"emptyLinePlaceholder":545},[36,18465,18466],{"class":38,"line":12318},[36,18467,18468],{"class":42},"    \u002F\u002F情人设置\n",[36,18470,18471,18473,18476,18478,18481],{"class":38,"line":12323},[36,18472,18384],{"class":53},[36,18474,18475],{"class":4500},"setLover",[36,18477,54],{"class":53},[36,18479,18480],{"class":57},"\"苍井\"",[36,18482,5251],{"class":53},[36,18484,18485,18488],{"class":38,"line":12328},[36,18486,18487],{"class":42},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,18489,18490],{"class":42},"  \u002F\u002F只写属性，不可以读取\n",[36,18492,18493],{"class":38,"line":12337},[36,18494,546],{"emptyLinePlaceholder":545},[36,18496,18497,18499,18501,18503],{"class":38,"line":12342},[36,18498,4837],{"class":4500},[36,18500,54],{"class":53},[36,18502,4842],{"class":57},[36,18504,5251],{"class":53},[36,18506,18507],{"class":38,"line":12348},[36,18508,546],{"emptyLinePlaceholder":545},[36,18510,18511,18513,18515],{"class":38,"line":12369},[36,18512,6621],{"class":114},[36,18514,6624],{"class":49},[36,18516,3833],{"class":53},[36,18518,18519],{"class":38,"line":12375},[36,18520,4103],{"class":53},[997,18522,18524],{"id":18523},"_814封装案例","8.1.4封装案例",[433,18526,18527],{},[436,18528,18529,18532],{},[2839,18530,18531],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3680,18534,18535,18538],{},[436,18536,18537],{},"求出立方体的面积和体积",[436,18539,18540],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,18542,18544],{"className":2693,"code":18543,"language":2695,"meta":31,"style":31},"#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",[33,18545,18546,18552,18562,18569,18573,18577,18582,18612,18616,18626,18636,18646,18650,18659,18663,18699,18703,18712,18716,18732,18736,18741,18750,18754,18761,18765,18774,18778,18785,18789,18798,18802,18809,18813,18818,18835,18839,18885,18889,18898,18902,18906,18910,18919,18923,18927,18932,18936,18942,18948,18954,18958,18962,18967,18989,18993,19047,19051,19059,19063,19068,19073,19086,19093,19109,19120,19126,19149,19155,19178,19192,19212,19218,19229,19252,19274,19279,19285,19299,19312,19317,19331,19336,19342,19347,19361,19366,19371,19385,19397,19402,19415,19420,19425,19430,19443,19448],{"__ignoreMap":31},[36,18547,18548,18550],{"class":38,"line":39},[36,18549,4486],{"class":114},[36,18551,4489],{"class":57},[36,18553,18554,18556,18558,18560],{"class":38,"line":46},[36,18555,4494],{"class":114},[36,18557,4497],{"class":114},[36,18559,4501],{"class":4500},[36,18561,3833],{"class":53},[36,18563,18564,18566],{"class":38,"line":82},[36,18565,519],{"class":114},[36,18567,18568],{"class":4500}," Cube\n",[36,18570,18571],{"class":38,"line":88},[36,18572,4084],{"class":53},[36,18574,18575],{"class":38,"line":195},[36,18576,17237],{"class":114},[36,18578,18579],{"class":38,"line":1517},[36,18580,18581],{"class":42},"    \u002F\u002F输入长宽高\n",[36,18583,18584,18586,18589,18591,18593,18596,18598,18600,18603,18605,18607,18610],{"class":38,"line":2421},[36,18585,17429],{"class":114},[36,18587,18588],{"class":4500}," setLwh",[36,18590,54],{"class":53},[36,18592,232],{"class":114},[36,18594,18595],{"class":1997}," l",[36,18597,3059],{"class":53},[36,18599,232],{"class":114},[36,18601,18602],{"class":1997}," w",[36,18604,3059],{"class":53},[36,18606,232],{"class":114},[36,18608,18609],{"class":1997}," h",[36,18611,61],{"class":53},[36,18613,18614],{"class":38,"line":2446},[36,18615,4567],{"class":53},[36,18617,18618,18621,18623],{"class":38,"line":2469},[36,18619,18620],{"class":53},"        m_L",[36,18622,115],{"class":114},[36,18624,18625],{"class":53},"l;\n",[36,18627,18628,18631,18633],{"class":38,"line":2492},[36,18629,18630],{"class":53},"        m_W",[36,18632,115],{"class":114},[36,18634,18635],{"class":53},"w;\n",[36,18637,18638,18641,18643],{"class":38,"line":4150},[36,18639,18640],{"class":53},"        m_H",[36,18642,115],{"class":114},[36,18644,18645],{"class":53},"h;\n",[36,18647,18648],{"class":38,"line":4155},[36,18649,4721],{"class":53},[36,18651,18652,18654,18657],{"class":38,"line":4161},[36,18653,4522],{"class":114},[36,18655,18656],{"class":4500}," mianji",[36,18658,4513],{"class":53},[36,18660,18661],{"class":38,"line":4166},[36,18662,4567],{"class":53},[36,18664,18665,18667,18669,18671,18674,18676,18679,18681,18684,18686,18689,18691,18694,18696],{"class":38,"line":4180},[36,18666,17273],{"class":114},[36,18668,1140],{"class":49},[36,18670,1050],{"class":114},[36,18672,18673],{"class":53},"(m_L",[36,18675,1050],{"class":114},[36,18677,18678],{"class":53},"m_W ",[36,18680,121],{"class":114},[36,18682,18683],{"class":53}," m_L",[36,18685,1050],{"class":114},[36,18687,18688],{"class":53},"m_H ",[36,18690,121],{"class":114},[36,18692,18693],{"class":53}," m_W",[36,18695,1050],{"class":114},[36,18697,18698],{"class":53},"m_H);\n",[36,18700,18701],{"class":38,"line":4185},[36,18702,4721],{"class":53},[36,18704,18705,18707,18710],{"class":38,"line":4191},[36,18706,4522],{"class":114},[36,18708,18709],{"class":4500}," tiji",[36,18711,4513],{"class":53},[36,18713,18714],{"class":38,"line":4212},[36,18715,4567],{"class":53},[36,18717,18718,18720,18722,18724,18727,18729],{"class":38,"line":4217},[36,18719,17273],{"class":114},[36,18721,18683],{"class":53},[36,18723,1050],{"class":114},[36,18725,18726],{"class":53},"m_W",[36,18728,1050],{"class":114},[36,18730,18731],{"class":53},"m_H;\n",[36,18733,18734],{"class":38,"line":4231},[36,18735,4721],{"class":53},[36,18737,18738],{"class":38,"line":4236},[36,18739,18740],{"class":42},"    \u002F\u002F获取长宽高\n",[36,18742,18743,18745,18748],{"class":38,"line":4264},[36,18744,4522],{"class":114},[36,18746,18747],{"class":4500}," getLength",[36,18749,4513],{"class":53},[36,18751,18752],{"class":38,"line":4269},[36,18753,4567],{"class":53},[36,18755,18756,18758],{"class":38,"line":4286},[36,18757,17273],{"class":114},[36,18759,18760],{"class":53}," m_L;\n",[36,18762,18763],{"class":38,"line":4291},[36,18764,4721],{"class":53},[36,18766,18767,18769,18772],{"class":38,"line":4296},[36,18768,4522],{"class":114},[36,18770,18771],{"class":4500}," getWidth",[36,18773,4513],{"class":53},[36,18775,18776],{"class":38,"line":4301},[36,18777,4567],{"class":53},[36,18779,18780,18782],{"class":38,"line":4315},[36,18781,17273],{"class":114},[36,18783,18784],{"class":53}," m_W;\n",[36,18786,18787],{"class":38,"line":4320},[36,18788,4721],{"class":53},[36,18790,18791,18793,18796],{"class":38,"line":5109},[36,18792,4522],{"class":114},[36,18794,18795],{"class":4500}," getHeight",[36,18797,4513],{"class":53},[36,18799,18800],{"class":38,"line":5123},[36,18801,4567],{"class":53},[36,18803,18804,18806],{"class":38,"line":5131},[36,18805,17273],{"class":114},[36,18807,18808],{"class":53}," m_H;\n",[36,18810,18811],{"class":38,"line":5136},[36,18812,4721],{"class":53},[36,18814,18815],{"class":38,"line":5142},[36,18816,18817],{"class":42},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,18819,18820,18823,18826,18828,18831,18833],{"class":38,"line":5148},[36,18821,18822],{"class":114},"    bool",[36,18824,18825],{"class":4500}," isEqual",[36,18827,54],{"class":53},[36,18829,18830],{"class":4500},"Cube",[36,18832,5381],{"class":1997},[36,18834,61],{"class":53},[36,18836,18837],{"class":38,"line":5153},[36,18838,4567],{"class":53},[36,18840,18841,18843,18846,18849,18851,18853,18856,18858,18861,18864,18866,18868,18871,18873,18875,18878,18880,18882],{"class":38,"line":10475},[36,18842,5029],{"class":114},[36,18844,18845],{"class":53}," (c.",[36,18847,18848],{"class":4500},"getLength",[36,18850,15573],{"class":53},[36,18852,1377],{"class":114},[36,18854,18855],{"class":53}," m_L ",[36,18857,4252],{"class":114},[36,18859,18860],{"class":53}," c.",[36,18862,18863],{"class":4500},"getWidth",[36,18865,15573],{"class":53},[36,18867,1377],{"class":114},[36,18869,18870],{"class":53}," m_W ",[36,18872,4252],{"class":114},[36,18874,18860],{"class":53},[36,18876,18877],{"class":4500},"getHeight",[36,18879,15573],{"class":53},[36,18881,1377],{"class":114},[36,18883,18884],{"class":53}," m_H)\n",[36,18886,18887],{"class":38,"line":10499},[36,18888,5042],{"class":53},[36,18890,18891,18893,18896],{"class":38,"line":10504},[36,18892,18250],{"class":114},[36,18894,18895],{"class":49}," true",[36,18897,3833],{"class":53},[36,18899,18900],{"class":38,"line":10510},[36,18901,5061],{"class":53},[36,18903,18904],{"class":38,"line":10537},[36,18905,5102],{"class":114},[36,18907,18908],{"class":38,"line":10542},[36,18909,5042],{"class":53},[36,18911,18912,18914,18917],{"class":38,"line":10548},[36,18913,18250],{"class":114},[36,18915,18916],{"class":49}," false",[36,18918,3833],{"class":53},[36,18920,18921],{"class":38,"line":10560},[36,18922,5061],{"class":53},[36,18924,18925],{"class":38,"line":10572},[36,18926,4721],{"class":53},[36,18928,18929],{"class":38,"line":10584},[36,18930,18931],{"class":42},"    \u002F\u002F私有属性\n",[36,18933,18934],{"class":38,"line":12241},[36,18935,17741],{"class":114},[36,18937,18938,18940],{"class":38,"line":12266},[36,18939,4522],{"class":114},[36,18941,18760],{"class":53},[36,18943,18944,18946],{"class":38,"line":12289},[36,18945,4522],{"class":114},[36,18947,18784],{"class":53},[36,18949,18950,18952],{"class":38,"line":12313},[36,18951,4522],{"class":114},[36,18953,18808],{"class":53},[36,18955,18956],{"class":38,"line":12318},[36,18957,546],{"emptyLinePlaceholder":545},[36,18959,18960],{"class":38,"line":12323},[36,18961,6526],{"class":53},[36,18963,18964],{"class":38,"line":12328},[36,18965,18966],{"class":42},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,18968,18969,18971,18973,18975,18977,18980,18982,18984,18987],{"class":38,"line":12337},[36,18970,268],{"class":114},[36,18972,18825],{"class":4500},[36,18974,54],{"class":53},[36,18976,18830],{"class":4500},[36,18978,18979],{"class":1997}," c1",[36,18981,3059],{"class":53},[36,18983,18830],{"class":4500},[36,18985,18986],{"class":1997}," c2",[36,18988,61],{"class":53},[36,18990,18991],{"class":38,"line":12342},[36,18992,4084],{"class":53},[36,18994,18995,18997,19000,19002,19004,19006,19009,19011,19014,19016,19018,19020,19022,19024,19026,19028,19030,19032,19034,19036,19038,19040,19042,19044],{"class":38,"line":12348},[36,18996,6621],{"class":114},[36,18998,18999],{"class":53}," (c1.",[36,19001,18848],{"class":4500},[36,19003,15573],{"class":53},[36,19005,1377],{"class":114},[36,19007,19008],{"class":53}," c2.",[36,19010,18848],{"class":4500},[36,19012,19013],{"class":53},"()) ",[36,19015,4252],{"class":114},[36,19017,18999],{"class":53},[36,19019,18863],{"class":4500},[36,19021,15573],{"class":53},[36,19023,1377],{"class":114},[36,19025,19008],{"class":53},[36,19027,18863],{"class":4500},[36,19029,19013],{"class":53},[36,19031,4252],{"class":114},[36,19033,18999],{"class":53},[36,19035,18877],{"class":4500},[36,19037,15573],{"class":53},[36,19039,1377],{"class":114},[36,19041,19008],{"class":53},[36,19043,18877],{"class":4500},[36,19045,19046],{"class":53},"());\n",[36,19048,19049],{"class":38,"line":12369},[36,19050,4103],{"class":53},[36,19052,19053,19055,19057],{"class":38,"line":12375},[36,19054,232],{"class":114},[36,19056,4510],{"class":4500},[36,19058,4513],{"class":53},[36,19060,19061],{"class":38,"line":12389},[36,19062,4084],{"class":53},[36,19064,19065],{"class":38,"line":12395},[36,19066,19067],{"class":53},"    Cube c1;\n",[36,19069,19070],{"class":38,"line":12422},[36,19071,19072],{"class":42},"    \u002F\u002F输入立方体的长宽高\n",[36,19074,19075,19077,19079,19082,19084],{"class":38,"line":12431},[36,19076,4089],{"class":53},[36,19078,3717],{"class":114},[36,19080,19081],{"class":57},"\"请输入第一个立方体的长、宽、高：\"",[36,19083,3717],{"class":114},[36,19085,3739],{"class":53},[36,19087,19088,19090],{"class":38,"line":12437},[36,19089,4522],{"class":114},[36,19091,19092],{"class":53}," l,w,h,l1,w1,h1;\n",[36,19094,19095,19097,19099,19101,19103,19105,19107],{"class":38,"line":12445},[36,19096,4549],{"class":53},[36,19098,3967],{"class":114},[36,19100,3196],{"class":53},[36,19102,3967],{"class":114},[36,19104,3471],{"class":53},[36,19106,3967],{"class":114},[36,19108,18645],{"class":53},[36,19110,19111,19114,19117],{"class":38,"line":12450},[36,19112,19113],{"class":53},"    c1.",[36,19115,19116],{"class":4500},"setLwh",[36,19118,19119],{"class":53},"(l,w,h);\n",[36,19121,19123],{"class":38,"line":19122},66,[36,19124,19125],{"class":42},"    \u002F\u002F面积\n",[36,19127,19129,19131,19133,19136,19138,19140,19143,19145,19147],{"class":38,"line":19128},67,[36,19130,4089],{"class":53},[36,19132,3717],{"class":114},[36,19134,19135],{"class":57},"\"立方体的表面积为：\"",[36,19137,3717],{"class":114},[36,19139,17350],{"class":53},[36,19141,19142],{"class":4500},"mianji",[36,19144,4959],{"class":53},[36,19146,3717],{"class":114},[36,19148,3739],{"class":53},[36,19150,19152],{"class":38,"line":19151},68,[36,19153,19154],{"class":42},"    \u002F\u002F体积\n",[36,19156,19158,19160,19162,19165,19167,19169,19172,19174,19176],{"class":38,"line":19157},69,[36,19159,4089],{"class":53},[36,19161,3717],{"class":114},[36,19163,19164],{"class":57},"\"立方体的体积为：\"",[36,19166,3717],{"class":114},[36,19168,17350],{"class":53},[36,19170,19171],{"class":4500},"tiji",[36,19173,4959],{"class":53},[36,19175,3717],{"class":114},[36,19177,3739],{"class":53},[36,19179,19181,19183,19185,19188,19190],{"class":38,"line":19180},70,[36,19182,4089],{"class":53},[36,19184,3717],{"class":114},[36,19186,19187],{"class":57},"\"请输入第二个立方体的长、宽、高：\"",[36,19189,3717],{"class":114},[36,19191,3739],{"class":53},[36,19193,19195,19197,19199,19202,19204,19207,19209],{"class":38,"line":19194},71,[36,19196,4549],{"class":53},[36,19198,3967],{"class":114},[36,19200,19201],{"class":53},"l1",[36,19203,3967],{"class":114},[36,19205,19206],{"class":53},"w1",[36,19208,3967],{"class":114},[36,19210,19211],{"class":53},"h1;\n",[36,19213,19215],{"class":38,"line":19214},72,[36,19216,19217],{"class":53},"    Cube c2;\n",[36,19219,19221,19224,19226],{"class":38,"line":19220},73,[36,19222,19223],{"class":53},"    c2.",[36,19225,19116],{"class":4500},[36,19227,19228],{"class":53},"(l1,w1,h1);\n",[36,19230,19232,19234,19236,19239,19241,19244,19246,19248,19250],{"class":38,"line":19231},74,[36,19233,4089],{"class":53},[36,19235,3717],{"class":114},[36,19237,19238],{"class":57},"\"第二个立方体的表面积为：\"",[36,19240,3717],{"class":114},[36,19242,19243],{"class":53},"c2.",[36,19245,19142],{"class":4500},[36,19247,4959],{"class":53},[36,19249,3717],{"class":114},[36,19251,3739],{"class":53},[36,19253,19255,19257,19259,19262,19264,19266,19268,19270,19272],{"class":38,"line":19254},75,[36,19256,4089],{"class":53},[36,19258,3717],{"class":114},[36,19260,19261],{"class":57},"\"第二个立方体的体积为：\"",[36,19263,3717],{"class":114},[36,19265,19243],{"class":53},[36,19267,19171],{"class":4500},[36,19269,4959],{"class":53},[36,19271,3717],{"class":114},[36,19273,3739],{"class":53},[36,19275,19277],{"class":38,"line":19276},76,[36,19278,546],{"emptyLinePlaceholder":545},[36,19280,19282],{"class":38,"line":19281},77,[36,19283,19284],{"class":42},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,19286,19288,19290,19292,19295,19297],{"class":38,"line":19287},78,[36,19289,4089],{"class":53},[36,19291,3717],{"class":114},[36,19293,19294],{"class":57},"\"内部函数判断结果：\"",[36,19296,3717],{"class":114},[36,19298,3739],{"class":53},[36,19300,19302,19304,19306,19309],{"class":38,"line":19301},79,[36,19303,5632],{"class":114},[36,19305,18999],{"class":53},[36,19307,19308],{"class":4500},"isEqual",[36,19310,19311],{"class":53},"(c2))\n",[36,19313,19315],{"class":38,"line":19314},80,[36,19316,4567],{"class":53},[36,19318,19320,19322,19324,19327,19329],{"class":38,"line":19319},81,[36,19321,5982],{"class":53},[36,19323,3717],{"class":114},[36,19325,19326],{"class":57},"\"两个立方体相等\"",[36,19328,3717],{"class":114},[36,19330,3739],{"class":53},[36,19332,19334],{"class":38,"line":19333},82,[36,19335,4721],{"class":53},[36,19337,19339],{"class":38,"line":19338},83,[36,19340,19341],{"class":114},"    else\n",[36,19343,19345],{"class":38,"line":19344},84,[36,19346,4567],{"class":53},[36,19348,19350,19352,19354,19357,19359],{"class":38,"line":19349},85,[36,19351,5982],{"class":53},[36,19353,3717],{"class":114},[36,19355,19356],{"class":57},"\"两个立方体不相等\"",[36,19358,3717],{"class":114},[36,19360,3739],{"class":53},[36,19362,19364],{"class":38,"line":19363},86,[36,19365,4721],{"class":53},[36,19367,19369],{"class":38,"line":19368},87,[36,19370,546],{"emptyLinePlaceholder":545},[36,19372,19374,19376,19378,19381,19383],{"class":38,"line":19373},88,[36,19375,4089],{"class":53},[36,19377,3717],{"class":114},[36,19379,19380],{"class":57},"\"全局函数判断结果：\"",[36,19382,3717],{"class":114},[36,19384,3739],{"class":53},[36,19386,19388,19390,19392,19394],{"class":38,"line":19387},89,[36,19389,5632],{"class":114},[36,19391,4196],{"class":53},[36,19393,19308],{"class":4500},[36,19395,19396],{"class":53},"(c1, c2))\n",[36,19398,19400],{"class":38,"line":19399},90,[36,19401,4567],{"class":53},[36,19403,19405,19407,19409,19411,19413],{"class":38,"line":19404},91,[36,19406,5982],{"class":53},[36,19408,3717],{"class":114},[36,19410,19326],{"class":57},[36,19412,3717],{"class":114},[36,19414,3739],{"class":53},[36,19416,19418],{"class":38,"line":19417},92,[36,19419,4721],{"class":53},[36,19421,19423],{"class":38,"line":19422},93,[36,19424,19341],{"class":114},[36,19426,19428],{"class":38,"line":19427},94,[36,19429,4567],{"class":53},[36,19431,19433,19435,19437,19439,19441],{"class":38,"line":19432},95,[36,19434,5982],{"class":53},[36,19436,3717],{"class":114},[36,19438,19356],{"class":57},[36,19440,3717],{"class":114},[36,19442,3739],{"class":53},[36,19444,19446],{"class":38,"line":19445},96,[36,19447,4721],{"class":53},[36,19449,19451],{"class":38,"line":19450},97,[36,19452,4103],{"class":53},[433,19454,19455],{"start":46},[436,19456,19457],{},[2839,19458,19459],{},"练习案例2：点和圆的关系",[3680,19461,19462],{},[436,19463,19464],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,19466,19468],{"className":2693,"code":19467,"language":2695,"meta":31,"style":31},"#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",[33,19469,19470,19476,19486,19493,19500,19504,19508,19513,19547,19552,19568,19582,19586,19590,19597,19604,19608,19614,19618,19622,19626,19648,19671,19676,19690,19705,19709,19713,19719,19724,19729,19733,19759,19763,19793,19821,19849,19866,19870,19883,19887,19891,19895,19908,19912,19916,19924,19928,19932,19936,19941,19945,19956,19963,19972,19982,19993,20000,20013,20024,20034,20045,20052,20066,20071,20081,20089],{"__ignoreMap":31},[36,19471,19472,19474],{"class":38,"line":39},[36,19473,4486],{"class":114},[36,19475,4489],{"class":57},[36,19477,19478,19480,19482,19484],{"class":38,"line":46},[36,19479,4494],{"class":114},[36,19481,4497],{"class":114},[36,19483,4501],{"class":4500},[36,19485,3833],{"class":53},[36,19487,19488,19490],{"class":38,"line":82},[36,19489,4486],{"class":114},[36,19491,19492],{"class":57},"\u003Ccmath>\n",[36,19494,19495,19497],{"class":38,"line":88},[36,19496,519],{"class":114},[36,19498,19499],{"class":4500}," Point\n",[36,19501,19502],{"class":38,"line":195},[36,19503,4084],{"class":53},[36,19505,19506],{"class":38,"line":1517},[36,19507,17237],{"class":114},[36,19509,19510],{"class":38,"line":2421},[36,19511,19512],{"class":42},"    \u002F\u002F赋值\n",[36,19514,19515,19517,19520,19522,19524,19527,19529,19531,19534,19537,19539,19542,19544],{"class":38,"line":2446},[36,19516,17429],{"class":114},[36,19518,19519],{"class":4500}," setPoint",[36,19521,54],{"class":53},[36,19523,16559],{"class":114},[36,19525,19526],{"class":1997}," x",[36,19528,14958],{"class":53},[36,19530,16559],{"class":114},[36,19532,19533],{"class":1997}," y",[36,19535,19536],{"class":53},") { m_x ",[36,19538,115],{"class":114},[36,19540,19541],{"class":53}," x; m_y ",[36,19543,115],{"class":114},[36,19545,19546],{"class":53}," y; }\n",[36,19548,19549],{"class":38,"line":2469},[36,19550,19551],{"class":42},"    \u002F\u002F获取坐标\n",[36,19553,19554,19556,19559,19562,19565],{"class":38,"line":2492},[36,19555,17259],{"class":114},[36,19557,19558],{"class":4500}," getX",[36,19560,19561],{"class":53},"() { ",[36,19563,19564],{"class":114},"return",[36,19566,19567],{"class":53}," m_x; }\n",[36,19569,19570,19572,19575,19577,19579],{"class":38,"line":4150},[36,19571,17259],{"class":114},[36,19573,19574],{"class":4500}," getY",[36,19576,19561],{"class":53},[36,19578,19564],{"class":114},[36,19580,19581],{"class":53}," m_y; }\n",[36,19583,19584],{"class":38,"line":4155},[36,19585,546],{"emptyLinePlaceholder":545},[36,19587,19588],{"class":38,"line":4161},[36,19589,17741],{"class":114},[36,19591,19592,19594],{"class":38,"line":4166},[36,19593,17259],{"class":114},[36,19595,19596],{"class":53}," m_x;\n",[36,19598,19599,19601],{"class":38,"line":4180},[36,19600,17259],{"class":114},[36,19602,19603],{"class":53}," m_y;\n",[36,19605,19606],{"class":38,"line":4185},[36,19607,6526],{"class":53},[36,19609,19610,19612],{"class":38,"line":4191},[36,19611,519],{"class":114},[36,19613,17218],{"class":4500},[36,19615,19616],{"class":38,"line":4212},[36,19617,4084],{"class":53},[36,19619,19620],{"class":38,"line":4217},[36,19621,17237],{"class":114},[36,19623,19624],{"class":38,"line":4231},[36,19625,19512],{"class":42},[36,19627,19628,19630,19633,19635,19637,19640,19643,19645],{"class":38,"line":4236},[36,19629,17429],{"class":114},[36,19631,19632],{"class":4500}," setRadius",[36,19634,54],{"class":53},[36,19636,16559],{"class":114},[36,19638,19639],{"class":1997}," r",[36,19641,19642],{"class":53},") { m_r ",[36,19644,115],{"class":114},[36,19646,19647],{"class":53}," r; }\n",[36,19649,19650,19652,19655,19657,19660,19663,19666,19668],{"class":38,"line":4264},[36,19651,17429],{"class":114},[36,19653,19654],{"class":4500}," setCenter",[36,19656,54],{"class":53},[36,19658,19659],{"class":4500},"Point",[36,19661,19662],{"class":1997}," center",[36,19664,19665],{"class":53},") { m_center ",[36,19667,115],{"class":114},[36,19669,19670],{"class":53}," center; }\n",[36,19672,19673],{"class":38,"line":4269},[36,19674,19675],{"class":42},"    \u002F\u002F获取属性\n",[36,19677,19678,19680,19683,19685,19687],{"class":38,"line":4286},[36,19679,17259],{"class":114},[36,19681,19682],{"class":4500}," getRadius",[36,19684,19561],{"class":53},[36,19686,19564],{"class":114},[36,19688,19689],{"class":53}," m_r; }\n",[36,19691,19692,19695,19698,19700,19702],{"class":38,"line":4291},[36,19693,19694],{"class":4500},"    Point",[36,19696,19697],{"class":4500}," getCenter",[36,19699,19561],{"class":53},[36,19701,19564],{"class":114},[36,19703,19704],{"class":53}," m_center; }\n",[36,19706,19707],{"class":38,"line":4296},[36,19708,546],{"emptyLinePlaceholder":545},[36,19710,19711],{"class":38,"line":4301},[36,19712,17741],{"class":114},[36,19714,19715,19717],{"class":38,"line":4315},[36,19716,17259],{"class":114},[36,19718,17249],{"class":53},[36,19720,19721],{"class":38,"line":4320},[36,19722,19723],{"class":42},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,19725,19726],{"class":38,"line":5109},[36,19727,19728],{"class":53},"    Point m_center;\n",[36,19730,19731],{"class":38,"line":5123},[36,19732,6526],{"class":53},[36,19734,19735,19737,19740,19742,19745,19747,19749,19751,19753,19755,19757],{"class":38,"line":5131},[36,19736,7892],{"class":114},[36,19738,19739],{"class":4500}," isInCircle",[36,19741,54],{"class":53},[36,19743,19744],{"class":4500},"Circle",[36,19746,13108],{"class":114},[36,19748,2972],{"class":1997},[36,19750,3059],{"class":53},[36,19752,19659],{"class":4500},[36,19754,13108],{"class":114},[36,19756,19],{"class":1997},[36,19758,61],{"class":53},[36,19760,19761],{"class":38,"line":5136},[36,19762,4084],{"class":53},[36,19764,19765,19767,19770,19772,19774,19777,19780,19783,19785,19787,19789,19791],{"class":38,"line":5142},[36,19766,17259],{"class":114},[36,19768,19769],{"class":53}," dx ",[36,19771,115],{"class":114},[36,19773,18860],{"class":53},[36,19775,19776],{"class":4500},"getCenter",[36,19778,19779],{"class":53},"().",[36,19781,19782],{"class":4500},"getX",[36,19784,15573],{"class":53},[36,19786,508],{"class":114},[36,19788,18406],{"class":53},[36,19790,19782],{"class":4500},[36,19792,8164],{"class":53},[36,19794,19795,19797,19800,19802,19804,19806,19808,19811,19813,19815,19817,19819],{"class":38,"line":5148},[36,19796,17259],{"class":114},[36,19798,19799],{"class":53}," dy ",[36,19801,115],{"class":114},[36,19803,18860],{"class":53},[36,19805,19776],{"class":4500},[36,19807,19779],{"class":53},[36,19809,19810],{"class":4500},"getY",[36,19812,15573],{"class":53},[36,19814,508],{"class":114},[36,19816,18406],{"class":53},[36,19818,19810],{"class":4500},[36,19820,8164],{"class":53},[36,19822,19823,19825,19828,19830,19833,19836,19838,19840,19842,19844,19846],{"class":38,"line":5153},[36,19824,17259],{"class":114},[36,19826,19827],{"class":53}," distance ",[36,19829,115],{"class":114},[36,19831,19832],{"class":4500}," sqrt",[36,19834,19835],{"class":53},"(dx ",[36,19837,1050],{"class":114},[36,19839,19769],{"class":53},[36,19841,121],{"class":114},[36,19843,19799],{"class":53},[36,19845,1050],{"class":114},[36,19847,19848],{"class":53}," dy);\n",[36,19850,19851,19853,19856,19858,19860,19863],{"class":38,"line":10475},[36,19852,5632],{"class":114},[36,19854,19855],{"class":53}," (distance ",[36,19857,1507],{"class":114},[36,19859,18860],{"class":53},[36,19861,19862],{"class":4500},"getRadius",[36,19864,19865],{"class":53},"())\n",[36,19867,19868],{"class":38,"line":10499},[36,19869,4567],{"class":53},[36,19871,19872,19874,19876,19879,19881],{"class":38,"line":10504},[36,19873,12194],{"class":53},[36,19875,3717],{"class":114},[36,19877,19878],{"class":57}," \"点在圆内\"",[36,19880,3982],{"class":114},[36,19882,11367],{"class":53},[36,19884,19885],{"class":38,"line":10510},[36,19886,4721],{"class":53},[36,19888,19889],{"class":38,"line":10537},[36,19890,19341],{"class":114},[36,19892,19893],{"class":38,"line":10542},[36,19894,4567],{"class":53},[36,19896,19897,19899,19901,19904,19906],{"class":38,"line":10548},[36,19898,12194],{"class":53},[36,19900,3717],{"class":114},[36,19902,19903],{"class":57}," \"点在圆外\"",[36,19905,3982],{"class":114},[36,19907,11367],{"class":53},[36,19909,19910],{"class":38,"line":10560},[36,19911,4721],{"class":53},[36,19913,19914],{"class":38,"line":10572},[36,19915,4103],{"class":53},[36,19917,19918,19920,19922],{"class":38,"line":10584},[36,19919,232],{"class":114},[36,19921,4510],{"class":4500},[36,19923,4513],{"class":53},[36,19925,19926],{"class":38,"line":12241},[36,19927,4084],{"class":53},[36,19929,19930],{"class":38,"line":12266},[36,19931,17573],{"class":42},[36,19933,19934],{"class":38,"line":12289},[36,19935,17320],{"class":53},[36,19937,19938],{"class":38,"line":12313},[36,19939,19940],{"class":53},"    Point p1;\n",[36,19942,19943],{"class":38,"line":12318},[36,19944,19512],{"class":42},[36,19946,19947,19949,19951,19954],{"class":38,"line":12323},[36,19948,4089],{"class":53},[36,19950,3717],{"class":114},[36,19952,19953],{"class":57},"\"请输入圆的半径：\"",[36,19955,3833],{"class":53},[36,19957,19958,19960],{"class":38,"line":12328},[36,19959,17259],{"class":114},[36,19961,19962],{"class":53}," r;\n",[36,19964,19965,19967,19969],{"class":38,"line":12337},[36,19966,4549],{"class":53},[36,19968,3967],{"class":114},[36,19970,19971],{"class":53},"r;\n",[36,19973,19974,19976,19979],{"class":38,"line":12342},[36,19975,19113],{"class":53},[36,19977,19978],{"class":4500},"setRadius",[36,19980,19981],{"class":53},"(r);\n",[36,19983,19984,19986,19988,19991],{"class":38,"line":12348},[36,19985,4089],{"class":53},[36,19987,3717],{"class":114},[36,19989,19990],{"class":57},"\"请输入圆心坐标：\"",[36,19992,3833],{"class":53},[36,19994,19995,19997],{"class":38,"line":12369},[36,19996,17259],{"class":114},[36,19998,19999],{"class":53}," x, y;\n",[36,20001,20002,20004,20006,20008,20010],{"class":38,"line":12375},[36,20003,4549],{"class":53},[36,20005,3967],{"class":114},[36,20007,3496],{"class":53},[36,20009,3967],{"class":114},[36,20011,20012],{"class":53},"y;\n",[36,20014,20015,20018,20021],{"class":38,"line":12389},[36,20016,20017],{"class":53},"    p1.",[36,20019,20020],{"class":4500},"setPoint",[36,20022,20023],{"class":53},"(x, y);\n",[36,20025,20026,20028,20031],{"class":38,"line":12395},[36,20027,19113],{"class":53},[36,20029,20030],{"class":4500},"setCenter",[36,20032,20033],{"class":53},"(p1);\n",[36,20035,20036,20038,20040,20043],{"class":38,"line":12422},[36,20037,4089],{"class":53},[36,20039,3717],{"class":114},[36,20041,20042],{"class":57},"\"请输入测试点坐标：\"",[36,20044,3833],{"class":53},[36,20046,20047,20049],{"class":38,"line":12431},[36,20048,17259],{"class":114},[36,20050,20051],{"class":53}," x1, y1;\n",[36,20053,20054,20056,20058,20061,20063],{"class":38,"line":12437},[36,20055,4549],{"class":53},[36,20057,3967],{"class":114},[36,20059,20060],{"class":53},"x1",[36,20062,3967],{"class":114},[36,20064,20065],{"class":53},"y1;\n",[36,20067,20068],{"class":38,"line":12445},[36,20069,20070],{"class":53},"    Point p2;\n",[36,20072,20073,20076,20078],{"class":38,"line":12450},[36,20074,20075],{"class":53},"    p2.",[36,20077,20020],{"class":4500},[36,20079,20080],{"class":53},"(x1, y1);\n",[36,20082,20083,20086],{"class":38,"line":19122},[36,20084,20085],{"class":4500},"    isInCircle",[36,20087,20088],{"class":53},"(c1, p2);\n",[36,20090,20091],{"class":38,"line":19128},[36,20092,4103],{"class":53},[19,20094,20095],{},"在类中可以让另一个类作为本来的成员",[19,20097,20098],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,20100,20101],{},"创建point.h",[26,20103,20105],{"className":2693,"code":20104,"language":2695,"meta":31,"style":31},"#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",[33,20106,20107,20118,20124,20134,20140,20144,20149,20153,20157,20177,20181,20189,20197,20201,20205,20211,20217],{"__ignoreMap":31},[36,20108,20109,20112,20115],{"class":38,"line":39},[36,20110,20111],{"class":114},"#pragma",[36,20113,20114],{"class":4500}," once",[36,20116,20117],{"class":42}," \u002F\u002F防止头文件重复包含\n",[36,20119,20120,20122],{"class":38,"line":46},[36,20121,4486],{"class":114},[36,20123,4489],{"class":57},[36,20125,20126,20128,20130,20132],{"class":38,"line":82},[36,20127,4494],{"class":114},[36,20129,4497],{"class":114},[36,20131,4501],{"class":4500},[36,20133,3833],{"class":53},[36,20135,20136,20138],{"class":38,"line":88},[36,20137,519],{"class":114},[36,20139,19499],{"class":4500},[36,20141,20142],{"class":38,"line":195},[36,20143,4084],{"class":53},[36,20145,20146],{"class":38,"line":1517},[36,20147,20148],{"class":42},"\u002F\u002F做好声明与变量定义就可以\n",[36,20150,20151],{"class":38,"line":2421},[36,20152,17237],{"class":114},[36,20154,20155],{"class":38,"line":2446},[36,20156,19512],{"class":42},[36,20158,20159,20161,20163,20165,20167,20169,20171,20173,20175],{"class":38,"line":2469},[36,20160,17429],{"class":114},[36,20162,19519],{"class":4500},[36,20164,54],{"class":53},[36,20166,16559],{"class":114},[36,20168,19526],{"class":1997},[36,20170,14958],{"class":53},[36,20172,16559],{"class":114},[36,20174,19533],{"class":1997},[36,20176,5251],{"class":53},[36,20178,20179],{"class":38,"line":2492},[36,20180,19551],{"class":42},[36,20182,20183,20185,20187],{"class":38,"line":4150},[36,20184,17259],{"class":114},[36,20186,19558],{"class":4500},[36,20188,8164],{"class":53},[36,20190,20191,20193,20195],{"class":38,"line":4155},[36,20192,17259],{"class":114},[36,20194,19574],{"class":4500},[36,20196,8164],{"class":53},[36,20198,20199],{"class":38,"line":4161},[36,20200,546],{"emptyLinePlaceholder":545},[36,20202,20203],{"class":38,"line":4166},[36,20204,17741],{"class":114},[36,20206,20207,20209],{"class":38,"line":4180},[36,20208,17259],{"class":114},[36,20210,19596],{"class":53},[36,20212,20213,20215],{"class":38,"line":4185},[36,20214,17259],{"class":114},[36,20216,19603],{"class":53},[36,20218,20219],{"class":38,"line":4191},[36,20220,6526],{"class":53},[19,20222,20223],{},"创建point.cpp",[26,20225,20227],{"className":2693,"code":20226,"language":2695,"meta":31,"style":31},"#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",[33,20228,20229,20236,20241,20275,20279,20295],{"__ignoreMap":31},[36,20230,20231,20233],{"class":38,"line":39},[36,20232,4486],{"class":114},[36,20234,20235],{"class":57},"\u003Cpoint.h>\n",[36,20237,20238],{"class":38,"line":46},[36,20239,20240],{"class":42},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,20242,20243,20245,20248,20251,20253,20255,20257,20259,20261,20263,20265,20267,20269,20271,20273],{"class":38,"line":82},[36,20244,17429],{"class":114},[36,20246,20247],{"class":4500}," Point",[36,20249,20250],{"class":53},"::",[36,20252,20020],{"class":4500},[36,20254,54],{"class":53},[36,20256,16559],{"class":114},[36,20258,19526],{"class":1997},[36,20260,14958],{"class":53},[36,20262,16559],{"class":114},[36,20264,19533],{"class":1997},[36,20266,19536],{"class":53},[36,20268,115],{"class":114},[36,20270,19541],{"class":53},[36,20272,115],{"class":114},[36,20274,19546],{"class":53},[36,20276,20277],{"class":38,"line":88},[36,20278,19551],{"class":42},[36,20280,20281,20283,20285,20287,20289,20291,20293],{"class":38,"line":195},[36,20282,17259],{"class":114},[36,20284,20247],{"class":4500},[36,20286,20250],{"class":53},[36,20288,19782],{"class":4500},[36,20290,19561],{"class":53},[36,20292,19564],{"class":114},[36,20294,19567],{"class":53},[36,20296,20297,20299,20301,20303,20305,20307,20309],{"class":38,"line":1517},[36,20298,17259],{"class":114},[36,20300,20247],{"class":4500},[36,20302,20250],{"class":53},[36,20304,19810],{"class":4500},[36,20306,19561],{"class":53},[36,20308,19564],{"class":114},[36,20310,19581],{"class":53},[19,20312,20313],{},"创建circle.h",[26,20315,20317],{"className":2693,"code":20316,"language":2695,"meta":31,"style":31},"#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",[33,20318,20319,20326,20332,20342,20348,20354,20358,20362,20366,20380,20394,20398,20406,20414,20418,20422,20428,20432,20436],{"__ignoreMap":31},[36,20320,20321,20323],{"class":38,"line":39},[36,20322,20111],{"class":114},[36,20324,20325],{"class":4500}," once\n",[36,20327,20328,20330],{"class":38,"line":46},[36,20329,4486],{"class":114},[36,20331,4489],{"class":57},[36,20333,20334,20336,20338,20340],{"class":38,"line":82},[36,20335,4494],{"class":114},[36,20337,4497],{"class":114},[36,20339,4501],{"class":4500},[36,20341,3833],{"class":53},[36,20343,20344,20346],{"class":38,"line":88},[36,20345,4486],{"class":114},[36,20347,20235],{"class":57},[36,20349,20350,20352],{"class":38,"line":195},[36,20351,519],{"class":114},[36,20353,17218],{"class":4500},[36,20355,20356],{"class":38,"line":1517},[36,20357,4084],{"class":53},[36,20359,20360],{"class":38,"line":2421},[36,20361,17237],{"class":114},[36,20363,20364],{"class":38,"line":2446},[36,20365,19512],{"class":42},[36,20367,20368,20370,20372,20374,20376,20378],{"class":38,"line":2469},[36,20369,17429],{"class":114},[36,20371,19632],{"class":4500},[36,20373,54],{"class":53},[36,20375,16559],{"class":114},[36,20377,19639],{"class":1997},[36,20379,5251],{"class":53},[36,20381,20382,20384,20386,20388,20390,20392],{"class":38,"line":2492},[36,20383,17429],{"class":114},[36,20385,19654],{"class":4500},[36,20387,54],{"class":53},[36,20389,19659],{"class":4500},[36,20391,19662],{"class":1997},[36,20393,5251],{"class":53},[36,20395,20396],{"class":38,"line":4150},[36,20397,19675],{"class":42},[36,20399,20400,20402,20404],{"class":38,"line":4155},[36,20401,17259],{"class":114},[36,20403,19682],{"class":4500},[36,20405,8164],{"class":53},[36,20407,20408,20410,20412],{"class":38,"line":4161},[36,20409,19694],{"class":4500},[36,20411,19697],{"class":4500},[36,20413,8164],{"class":53},[36,20415,20416],{"class":38,"line":4166},[36,20417,546],{"emptyLinePlaceholder":545},[36,20419,20420],{"class":38,"line":4180},[36,20421,17741],{"class":114},[36,20423,20424,20426],{"class":38,"line":4185},[36,20425,17259],{"class":114},[36,20427,17249],{"class":53},[36,20429,20430],{"class":38,"line":4191},[36,20431,19723],{"class":42},[36,20433,20434],{"class":38,"line":4212},[36,20435,19728],{"class":53},[36,20437,20438],{"class":38,"line":4217},[36,20439,6526],{"class":53},[19,20441,20442],{},"创建circle.cpp",[26,20444,20446],{"className":2693,"code":20445,"language":2695,"meta":31,"style":31},"#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",[33,20447,20448,20455,20478,20500,20505,20521],{"__ignoreMap":31},[36,20449,20450,20452],{"class":38,"line":39},[36,20451,4486],{"class":114},[36,20453,20454],{"class":57},"\u003Ccircle.h>\n",[36,20456,20457,20459,20462,20464,20466,20468,20470,20472,20474,20476],{"class":38,"line":46},[36,20458,7892],{"class":114},[36,20460,20461],{"class":4500}," Circle",[36,20463,20250],{"class":53},[36,20465,19978],{"class":4500},[36,20467,54],{"class":53},[36,20469,16559],{"class":114},[36,20471,19639],{"class":1997},[36,20473,19642],{"class":53},[36,20475,115],{"class":114},[36,20477,19647],{"class":53},[36,20479,20480,20482,20484,20486,20488,20490,20492,20494,20496,20498],{"class":38,"line":82},[36,20481,7892],{"class":114},[36,20483,20461],{"class":4500},[36,20485,20250],{"class":53},[36,20487,20030],{"class":4500},[36,20489,54],{"class":53},[36,20491,19659],{"class":4500},[36,20493,19662],{"class":1997},[36,20495,19665],{"class":53},[36,20497,115],{"class":114},[36,20499,19670],{"class":53},[36,20501,20502],{"class":38,"line":88},[36,20503,20504],{"class":42},"\u002F\u002F获取属性\n",[36,20506,20507,20509,20511,20513,20515,20517,20519],{"class":38,"line":195},[36,20508,16559],{"class":114},[36,20510,20461],{"class":4500},[36,20512,20250],{"class":53},[36,20514,19862],{"class":4500},[36,20516,19561],{"class":53},[36,20518,19564],{"class":114},[36,20520,19689],{"class":53},[36,20522,20523,20525,20527,20529,20531,20533,20535],{"class":38,"line":1517},[36,20524,19659],{"class":4500},[36,20526,20461],{"class":4500},[36,20528,20250],{"class":53},[36,20530,19776],{"class":4500},[36,20532,19561],{"class":53},[36,20534,19564],{"class":114},[36,20536,19704],{"class":53},[19,20538,20539],{},"使用封装的类",[26,20541,20543],{"className":2693,"code":20542,"language":2695,"meta":31,"style":31},"#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",[33,20544,20545,20551,20561,20567,20573,20597,20601,20627,20653,20677,20691,20695,20707,20711,20715,20719,20731,20735,20739,20747,20751,20755,20759,20763,20767,20777,20783,20791,20799,20809,20815,20827,20835,20843,20853,20859,20871,20875,20883,20889],{"__ignoreMap":31},[36,20546,20547,20549],{"class":38,"line":39},[36,20548,4486],{"class":114},[36,20550,4489],{"class":57},[36,20552,20553,20555,20557,20559],{"class":38,"line":46},[36,20554,4494],{"class":114},[36,20556,4497],{"class":114},[36,20558,4501],{"class":4500},[36,20560,3833],{"class":53},[36,20562,20563,20565],{"class":38,"line":82},[36,20564,4486],{"class":114},[36,20566,20454],{"class":57},[36,20568,20569,20571],{"class":38,"line":88},[36,20570,4486],{"class":114},[36,20572,20235],{"class":57},[36,20574,20575,20577,20579,20581,20583,20585,20587,20589,20591,20593,20595],{"class":38,"line":195},[36,20576,7892],{"class":114},[36,20578,19739],{"class":4500},[36,20580,54],{"class":53},[36,20582,19744],{"class":4500},[36,20584,13108],{"class":114},[36,20586,2972],{"class":1997},[36,20588,3059],{"class":53},[36,20590,19659],{"class":4500},[36,20592,13108],{"class":114},[36,20594,19],{"class":1997},[36,20596,61],{"class":53},[36,20598,20599],{"class":38,"line":1517},[36,20600,4084],{"class":53},[36,20602,20603,20605,20607,20609,20611,20613,20615,20617,20619,20621,20623,20625],{"class":38,"line":2421},[36,20604,17259],{"class":114},[36,20606,19769],{"class":53},[36,20608,115],{"class":114},[36,20610,18860],{"class":53},[36,20612,19776],{"class":4500},[36,20614,19779],{"class":53},[36,20616,19782],{"class":4500},[36,20618,15573],{"class":53},[36,20620,508],{"class":114},[36,20622,18406],{"class":53},[36,20624,19782],{"class":4500},[36,20626,8164],{"class":53},[36,20628,20629,20631,20633,20635,20637,20639,20641,20643,20645,20647,20649,20651],{"class":38,"line":2446},[36,20630,17259],{"class":114},[36,20632,19799],{"class":53},[36,20634,115],{"class":114},[36,20636,18860],{"class":53},[36,20638,19776],{"class":4500},[36,20640,19779],{"class":53},[36,20642,19810],{"class":4500},[36,20644,15573],{"class":53},[36,20646,508],{"class":114},[36,20648,18406],{"class":53},[36,20650,19810],{"class":4500},[36,20652,8164],{"class":53},[36,20654,20655,20657,20659,20661,20663,20665,20667,20669,20671,20673,20675],{"class":38,"line":2469},[36,20656,17259],{"class":114},[36,20658,19827],{"class":53},[36,20660,115],{"class":114},[36,20662,19832],{"class":4500},[36,20664,19835],{"class":53},[36,20666,1050],{"class":114},[36,20668,19769],{"class":53},[36,20670,121],{"class":114},[36,20672,19799],{"class":53},[36,20674,1050],{"class":114},[36,20676,19848],{"class":53},[36,20678,20679,20681,20683,20685,20687,20689],{"class":38,"line":2492},[36,20680,5632],{"class":114},[36,20682,19855],{"class":53},[36,20684,1507],{"class":114},[36,20686,18860],{"class":53},[36,20688,19862],{"class":4500},[36,20690,19865],{"class":53},[36,20692,20693],{"class":38,"line":4150},[36,20694,4567],{"class":53},[36,20696,20697,20699,20701,20703,20705],{"class":38,"line":4155},[36,20698,12194],{"class":53},[36,20700,3717],{"class":114},[36,20702,19878],{"class":57},[36,20704,3982],{"class":114},[36,20706,11367],{"class":53},[36,20708,20709],{"class":38,"line":4161},[36,20710,4721],{"class":53},[36,20712,20713],{"class":38,"line":4166},[36,20714,19341],{"class":114},[36,20716,20717],{"class":38,"line":4180},[36,20718,4567],{"class":53},[36,20720,20721,20723,20725,20727,20729],{"class":38,"line":4185},[36,20722,12194],{"class":53},[36,20724,3717],{"class":114},[36,20726,19903],{"class":57},[36,20728,3982],{"class":114},[36,20730,11367],{"class":53},[36,20732,20733],{"class":38,"line":4191},[36,20734,4721],{"class":53},[36,20736,20737],{"class":38,"line":4212},[36,20738,4103],{"class":53},[36,20740,20741,20743,20745],{"class":38,"line":4217},[36,20742,232],{"class":114},[36,20744,4510],{"class":4500},[36,20746,4513],{"class":53},[36,20748,20749],{"class":38,"line":4231},[36,20750,4084],{"class":53},[36,20752,20753],{"class":38,"line":4236},[36,20754,17573],{"class":42},[36,20756,20757],{"class":38,"line":4264},[36,20758,17320],{"class":53},[36,20760,20761],{"class":38,"line":4269},[36,20762,19940],{"class":53},[36,20764,20765],{"class":38,"line":4286},[36,20766,19512],{"class":42},[36,20768,20769,20771,20773,20775],{"class":38,"line":4291},[36,20770,4089],{"class":53},[36,20772,3717],{"class":114},[36,20774,19953],{"class":57},[36,20776,3833],{"class":53},[36,20778,20779,20781],{"class":38,"line":4296},[36,20780,17259],{"class":114},[36,20782,19962],{"class":53},[36,20784,20785,20787,20789],{"class":38,"line":4301},[36,20786,4549],{"class":53},[36,20788,3967],{"class":114},[36,20790,19971],{"class":53},[36,20792,20793,20795,20797],{"class":38,"line":4315},[36,20794,19113],{"class":53},[36,20796,19978],{"class":4500},[36,20798,19981],{"class":53},[36,20800,20801,20803,20805,20807],{"class":38,"line":4320},[36,20802,4089],{"class":53},[36,20804,3717],{"class":114},[36,20806,19990],{"class":57},[36,20808,3833],{"class":53},[36,20810,20811,20813],{"class":38,"line":5109},[36,20812,17259],{"class":114},[36,20814,19999],{"class":53},[36,20816,20817,20819,20821,20823,20825],{"class":38,"line":5123},[36,20818,4549],{"class":53},[36,20820,3967],{"class":114},[36,20822,3496],{"class":53},[36,20824,3967],{"class":114},[36,20826,20012],{"class":53},[36,20828,20829,20831,20833],{"class":38,"line":5131},[36,20830,20017],{"class":53},[36,20832,20020],{"class":4500},[36,20834,20023],{"class":53},[36,20836,20837,20839,20841],{"class":38,"line":5136},[36,20838,19113],{"class":53},[36,20840,20030],{"class":4500},[36,20842,20033],{"class":53},[36,20844,20845,20847,20849,20851],{"class":38,"line":5142},[36,20846,4089],{"class":53},[36,20848,3717],{"class":114},[36,20850,20042],{"class":57},[36,20852,3833],{"class":53},[36,20854,20855,20857],{"class":38,"line":5148},[36,20856,17259],{"class":114},[36,20858,20051],{"class":53},[36,20860,20861,20863,20865,20867,20869],{"class":38,"line":5153},[36,20862,4549],{"class":53},[36,20864,3967],{"class":114},[36,20866,20060],{"class":53},[36,20868,3967],{"class":114},[36,20870,20065],{"class":53},[36,20872,20873],{"class":38,"line":10475},[36,20874,20070],{"class":53},[36,20876,20877,20879,20881],{"class":38,"line":10499},[36,20878,20075],{"class":53},[36,20880,20020],{"class":4500},[36,20882,20080],{"class":53},[36,20884,20885,20887],{"class":38,"line":10504},[36,20886,20085],{"class":4500},[36,20888,20088],{"class":53},[36,20890,20891],{"class":38,"line":10510},[36,20892,4103],{"class":53},[14,20894,20896],{"id":20895},"_82对象的初始化清理","8.2对象的初始化清理",[3680,20898,20899,20902],{},[436,20900,20901],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[436,20903,20904],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[997,20906,20908],{"id":20907},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20910,20911,20912,20915],{},"对象的",[2839,20913,20914],{},"初始化和清理","也是两个非常重要的安全问题",[19,20917,20918],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20920,20921],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20923,20924,20925,20928,20929,20932],{},"c++利用了",[2839,20926,20927],{},"构造函数","和",[2839,20930,20931],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20934,20935,20936],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2839,20937,20938],{},"我们不提供构造和析构，编译器会提供",[19,20940,20941],{},[2839,20942,20943],{},"编译器提供的构造函数和析构函数是空实现。",[3680,20945,20946,20949],{},[436,20947,20948],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[436,20950,20951,20952,20955],{},"析构函数：主要作用在于对象",[2839,20953,20954],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20957,20958,20961],{},[2839,20959,20960],{},"构造函数语法：",[33,20962,20963],{},"类名(){}",[433,20965,20966,20969,20972,20975,20978],{},[436,20967,20968],{},"构造函数，没有返回值也不写void",[436,20970,20971],{},"函数名称与类名相同",[436,20973,20974],{},"构造函数可以有参数，因此可以发生重载",[436,20976,20977],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[436,20979,20980,20981,3110],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,20982,20983],{},"Person(){}",[19,20985,20986,16317,20989],{},[2839,20987,20988],{},"析构函数语法：",[33,20990,20991],{},"~类名(){}",[433,20993,20994,20997,21000,21006],{},[436,20995,20996],{},"析构函数，没有返回值也不写void",[436,20998,20999],{},"函数名称与类名相同,在名称前加上符号  ~",[436,21001,21002,21003],{},"析构函数不可以有参数，因此",[2839,21004,21005],{},"不可以发生重载",[436,21007,21008],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,21010,21012],{"className":2693,"code":21011,"language":2695,"meta":31,"style":31},"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",[33,21013,21014,21020,21024,21028,21033,21040,21044,21057,21061,21066,21073,21077,21090,21094,21098,21102,21106,21114,21118,21126,21130,21134,21142,21146,21151,21155,21162,21166,21179,21183,21191],{"__ignoreMap":31},[36,21015,21016,21018],{"class":38,"line":39},[36,21017,519],{"class":114},[36,21019,17690],{"class":4500},[36,21021,21022],{"class":38,"line":46},[36,21023,4084],{"class":53},[36,21025,21026],{"class":38,"line":82},[36,21027,17237],{"class":114},[36,21029,21030],{"class":38,"line":88},[36,21031,21032],{"class":42},"    \u002F\u002F构造函数\n",[36,21034,21035,21038],{"class":38,"line":195},[36,21036,21037],{"class":4500},"    Person",[36,21039,4513],{"class":53},[36,21041,21042],{"class":38,"line":1517},[36,21043,4567],{"class":53},[36,21045,21046,21048,21050,21053,21055],{"class":38,"line":2421},[36,21047,12194],{"class":53},[36,21049,3717],{"class":114},[36,21051,21052],{"class":57}," \"Person的构造函数调用\"",[36,21054,3982],{"class":114},[36,21056,11367],{"class":53},[36,21058,21059],{"class":38,"line":2446},[36,21060,4721],{"class":53},[36,21062,21063],{"class":38,"line":2469},[36,21064,21065],{"class":42},"    \u002F\u002F析构函数\n",[36,21067,21068,21071],{"class":38,"line":2492},[36,21069,21070],{"class":4500},"    ~Person",[36,21072,4513],{"class":53},[36,21074,21075],{"class":38,"line":4150},[36,21076,4567],{"class":53},[36,21078,21079,21081,21083,21086,21088],{"class":38,"line":4155},[36,21080,12194],{"class":53},[36,21082,3717],{"class":114},[36,21084,21085],{"class":57}," \"Person的析构函数调用\"",[36,21087,3982],{"class":114},[36,21089,11367],{"class":53},[36,21091,21092],{"class":38,"line":4161},[36,21093,4721],{"class":53},[36,21095,21096],{"class":38,"line":4166},[36,21097,546],{"emptyLinePlaceholder":545},[36,21099,21100],{"class":38,"line":4180},[36,21101,6526],{"class":53},[36,21103,21104],{"class":38,"line":4185},[36,21105,546],{"emptyLinePlaceholder":545},[36,21107,21108,21110,21112],{"class":38,"line":4191},[36,21109,7892],{"class":114},[36,21111,8116],{"class":4500},[36,21113,4513],{"class":53},[36,21115,21116],{"class":38,"line":4212},[36,21117,4084],{"class":53},[36,21119,21120,21123],{"class":38,"line":4217},[36,21121,21122],{"class":53},"    Person p;",[36,21124,21125],{"class":42},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,21127,21128],{"class":38,"line":4231},[36,21129,4103],{"class":53},[36,21131,21132],{"class":38,"line":4236},[36,21133,546],{"emptyLinePlaceholder":545},[36,21135,21136,21138,21140],{"class":38,"line":4264},[36,21137,232],{"class":114},[36,21139,4510],{"class":4500},[36,21141,13376],{"class":53},[36,21143,21144],{"class":38,"line":4269},[36,21145,15733],{"class":53},[36,21147,21148],{"class":38,"line":4286},[36,21149,21150],{"class":42},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,21152,21153],{"class":38,"line":4291},[36,21154,546],{"emptyLinePlaceholder":545},[36,21156,21157,21159],{"class":38,"line":4296},[36,21158,21122],{"class":53},[36,21160,21161],{"class":42},"\u002F\u002F只有构造函数\n",[36,21163,21164],{"class":38,"line":4301},[36,21165,546],{"emptyLinePlaceholder":545},[36,21167,21168,21170,21172,21174,21176],{"class":38,"line":4315},[36,21169,4837],{"class":4500},[36,21171,54],{"class":53},[36,21173,4842],{"class":57},[36,21175,8493],{"class":53},[36,21177,21178],{"class":42},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,21180,21181],{"class":38,"line":4320},[36,21182,546],{"emptyLinePlaceholder":545},[36,21184,21185,21187,21189],{"class":38,"line":5109},[36,21186,6621],{"class":114},[36,21188,6624],{"class":49},[36,21190,3833],{"class":53},[36,21192,21193],{"class":38,"line":5123},[36,21194,4103],{"class":53},[19,21196,21197],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[997,21199,21201],{"id":21200},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,21203,21204],{},"两种分类方式：",[19,21206,21207],{},"​\t按参数分为： 有参构造和无参构造",[19,21209,21210],{},"​\t按类型分为： 普通构造和拷贝构造",[19,21212,21213],{},"三种调用方式：",[19,21215,21216],{},"​\t括号法",[19,21218,21219],{},"​\t显示法",[19,21221,21222],{},"​\t隐式转换法",[26,21224,21226],{"className":2693,"code":21225,"language":2695,"meta":31,"style":31},"#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",[33,21227,21228,21234,21244,21249,21254,21259,21264,21268,21276,21280,21284,21288,21294,21298,21311,21315,21327,21331,21340,21353,21357,21361,21367,21371,21384,21388,21393,21409,21413,21418,21427,21440,21444,21450,21454,21459,21467,21471,21476,21480,21488,21492,21497,21502,21507,21512,21517,21521,21526,21531,21536,21541,21545,21550,21555,21571,21583,21588,21592,21597,21602,21607,21611,21616,21630,21643,21647,21655,21659,21665,21671,21679],{"__ignoreMap":31},[36,21229,21230,21232],{"class":38,"line":39},[36,21231,4486],{"class":114},[36,21233,4489],{"class":57},[36,21235,21236,21238,21240,21242],{"class":38,"line":46},[36,21237,4494],{"class":114},[36,21239,4497],{"class":114},[36,21241,4501],{"class":4500},[36,21243,3833],{"class":53},[36,21245,21246],{"class":38,"line":82},[36,21247,21248],{"class":42},"\u002F\u002F1.构造函数的分类及调用\n",[36,21250,21251],{"class":38,"line":88},[36,21252,21253],{"class":42},"\u002F\u002F分类\n",[36,21255,21256],{"class":38,"line":195},[36,21257,21258],{"class":42},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,21260,21261],{"class":38,"line":1517},[36,21262,21263],{"class":42},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,21265,21266],{"class":38,"line":2421},[36,21267,546],{"emptyLinePlaceholder":545},[36,21269,21270,21272,21274],{"class":38,"line":2446},[36,21271,519],{"class":114},[36,21273,18088],{"class":4500},[36,21275,5206],{"class":53},[36,21277,21278],{"class":38,"line":2469},[36,21279,4084],{"class":53},[36,21281,21282],{"class":38,"line":2492},[36,21283,17237],{"class":114},[36,21285,21286],{"class":38,"line":4150},[36,21287,21032],{"class":42},[36,21289,21290,21292],{"class":38,"line":4155},[36,21291,21037],{"class":4500},[36,21293,4513],{"class":53},[36,21295,21296],{"class":38,"line":4161},[36,21297,4567],{"class":53},[36,21299,21300,21302,21304,21307,21309],{"class":38,"line":4166},[36,21301,5982],{"class":53},[36,21303,3717],{"class":114},[36,21305,21306],{"class":57},"\"Person构造函数无参构造\"",[36,21308,3717],{"class":114},[36,21310,3739],{"class":53},[36,21312,21313],{"class":38,"line":4180},[36,21314,4721],{"class":53},[36,21316,21317,21319,21321,21323,21325],{"class":38,"line":4185},[36,21318,21037],{"class":4500},[36,21320,54],{"class":53},[36,21322,232],{"class":114},[36,21324,3936],{"class":1997},[36,21326,61],{"class":53},[36,21328,21329],{"class":38,"line":4191},[36,21330,4567],{"class":53},[36,21332,21333,21336,21338],{"class":38,"line":4212},[36,21334,21335],{"class":53},"        age",[36,21337,115],{"class":114},[36,21339,8724],{"class":53},[36,21341,21342,21344,21346,21349,21351],{"class":38,"line":4217},[36,21343,5982],{"class":53},[36,21345,3717],{"class":114},[36,21347,21348],{"class":57},"\"Person构造函数有参构造\"",[36,21350,3717],{"class":114},[36,21352,3739],{"class":53},[36,21354,21355],{"class":38,"line":4231},[36,21356,4721],{"class":53},[36,21358,21359],{"class":38,"line":4236},[36,21360,21065],{"class":42},[36,21362,21363,21365],{"class":38,"line":4264},[36,21364,21070],{"class":4500},[36,21366,4513],{"class":53},[36,21368,21369],{"class":38,"line":4269},[36,21370,4567],{"class":53},[36,21372,21373,21375,21377,21380,21382],{"class":38,"line":4286},[36,21374,5982],{"class":53},[36,21376,3717],{"class":114},[36,21378,21379],{"class":57},"\"Person析构函数被调用\"",[36,21381,3717],{"class":114},[36,21383,3739],{"class":53},[36,21385,21386],{"class":38,"line":4291},[36,21387,4721],{"class":53},[36,21389,21390],{"class":38,"line":4296},[36,21391,21392],{"class":42},"    \u002F\u002F拷贝构造函数\n",[36,21394,21395,21397,21399,21401,21403,21405,21407],{"class":38,"line":4301},[36,21396,21037],{"class":4500},[36,21398,54],{"class":53},[36,21400,9319],{"class":114},[36,21402,18088],{"class":4500},[36,21404,13108],{"class":114},[36,21406,19],{"class":1997},[36,21408,61],{"class":53},[36,21410,21411],{"class":38,"line":4315},[36,21412,4567],{"class":53},[36,21414,21415],{"class":38,"line":4320},[36,21416,21417],{"class":42},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,21419,21420,21422,21424],{"class":38,"line":5109},[36,21421,21335],{"class":53},[36,21423,115],{"class":114},[36,21425,21426],{"class":53},"p.age;\n",[36,21428,21429,21431,21433,21436,21438],{"class":38,"line":5123},[36,21430,5982],{"class":53},[36,21432,3717],{"class":114},[36,21434,21435],{"class":57},"\"Person拷贝构造函数被调用\"",[36,21437,3717],{"class":114},[36,21439,3739],{"class":53},[36,21441,21442],{"class":38,"line":5131},[36,21443,4721],{"class":53},[36,21445,21446,21448],{"class":38,"line":5136},[36,21447,4522],{"class":114},[36,21449,10324],{"class":53},[36,21451,21452],{"class":38,"line":5142},[36,21453,6526],{"class":53},[36,21455,21456],{"class":38,"line":5148},[36,21457,21458],{"class":42},"\u002F\u002F调用\n",[36,21460,21461,21463,21465],{"class":38,"line":5153},[36,21462,7892],{"class":114},[36,21464,8116],{"class":4500},[36,21466,4513],{"class":53},[36,21468,21469],{"class":38,"line":10475},[36,21470,4084],{"class":53},[36,21472,21473],{"class":38,"line":10499},[36,21474,21475],{"class":42},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,21477,21478],{"class":38,"line":10504},[36,21479,4103],{"class":53},[36,21481,21482,21484,21486],{"class":38,"line":10510},[36,21483,7892],{"class":114},[36,21485,8185],{"class":4500},[36,21487,4513],{"class":53},[36,21489,21490],{"class":38,"line":10537},[36,21491,4084],{"class":53},[36,21493,21494],{"class":38,"line":10542},[36,21495,21496],{"class":42},"    \u002F\u002F1.括号法\n",[36,21498,21499],{"class":38,"line":10548},[36,21500,21501],{"class":42},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,21503,21504],{"class":38,"line":10560},[36,21505,21506],{"class":42},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,21508,21509],{"class":38,"line":10572},[36,21510,21511],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,21513,21514],{"class":38,"line":10584},[36,21515,21516],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,21518,21519],{"class":38,"line":12241},[36,21520,546],{"emptyLinePlaceholder":545},[36,21522,21523],{"class":38,"line":12266},[36,21524,21525],{"class":42},"    \u002F\u002F注意事项\n",[36,21527,21528],{"class":38,"line":12289},[36,21529,21530],{"class":42},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,21532,21533],{"class":38,"line":12313},[36,21534,21535],{"class":42},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,21537,21538],{"class":38,"line":12318},[36,21539,21540],{"class":42},"    \u002F\u002F Person p4();\n",[36,21542,21543],{"class":38,"line":12323},[36,21544,546],{"emptyLinePlaceholder":545},[36,21546,21547],{"class":38,"line":12328},[36,21548,21549],{"class":42},"    \u002F\u002F2.显示法\n",[36,21551,21552],{"class":38,"line":12337},[36,21553,21554],{"class":53},"    Person p1;\n",[36,21556,21557,21560,21562,21565,21567,21569],{"class":38,"line":12342},[36,21558,21559],{"class":53},"    Person p2",[36,21561,115],{"class":114},[36,21563,21564],{"class":4500},"Person",[36,21566,54],{"class":53},[36,21568,1317],{"class":49},[36,21570,5251],{"class":53},[36,21572,21573,21576,21578,21580],{"class":38,"line":12348},[36,21574,21575],{"class":53},"    Person p3",[36,21577,115],{"class":114},[36,21579,21564],{"class":4500},[36,21581,21582],{"class":53},"(p2);\n",[36,21584,21585],{"class":38,"line":12369},[36,21586,21587],{"class":42},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,21589,21590],{"class":38,"line":12375},[36,21591,546],{"emptyLinePlaceholder":545},[36,21593,21594],{"class":38,"line":12389},[36,21595,21596],{"class":42},"    \u002F\u002F 注意事项2\n",[36,21598,21599],{"class":38,"line":12395},[36,21600,21601],{"class":42},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,21603,21604],{"class":38,"line":12422},[36,21605,21606],{"class":42},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,21608,21609],{"class":38,"line":12431},[36,21610,546],{"emptyLinePlaceholder":545},[36,21612,21613],{"class":38,"line":12437},[36,21614,21615],{"class":42},"    \u002F\u002F3.隐士转换法\n",[36,21617,21618,21621,21623,21625,21627],{"class":38,"line":12445},[36,21619,21620],{"class":53},"    Person p4",[36,21622,115],{"class":114},[36,21624,1317],{"class":49},[36,21626,2752],{"class":53},[36,21628,21629],{"class":42},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,21631,21632,21635,21637,21640],{"class":38,"line":12450},[36,21633,21634],{"class":53},"    Person p5",[36,21636,115],{"class":114},[36,21638,21639],{"class":53},"p4;",[36,21641,21642],{"class":42}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,21644,21645],{"class":38,"line":19122},[36,21646,4103],{"class":53},[36,21648,21649,21651,21653],{"class":38,"line":19128},[36,21650,232],{"class":114},[36,21652,4510],{"class":4500},[36,21654,4513],{"class":53},[36,21656,21657],{"class":38,"line":19151},[36,21658,4084],{"class":53},[36,21660,21661,21663],{"class":38,"line":19157},[36,21662,8161],{"class":4500},[36,21664,8164],{"class":53},[36,21666,21667,21669],{"class":38,"line":19180},[36,21668,8230],{"class":4500},[36,21670,8164],{"class":53},[36,21672,21673,21675,21677],{"class":38,"line":19194},[36,21674,6621],{"class":114},[36,21676,6624],{"class":49},[36,21678,3833],{"class":53},[36,21680,21681],{"class":38,"line":19214},[36,21682,4103],{"class":53},[19,21684,21685,21688],{},[2839,21686,21687],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[997,21690,21692],{"id":21691},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21694,21695],{},"C++中拷贝构造函数调用时机通常有三种情况",[3680,21697,21698,21701,21704],{},[436,21699,21700],{},"使用一个已经创建完毕的对象来初始化一个新对象",[436,21702,21703],{},"值传递的方式给函数参数传值",[436,21705,21706],{},"以值方式返回局部对象",[26,21708,21710],{"className":2693,"code":21709,"language":2695,"meta":31,"style":31},"#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",[33,21711,21712,21718,21728,21732,21737,21741,21746,21751,21756,21762,21766,21770,21776,21780,21793,21797,21802,21814,21818,21826,21839,21843,21847,21863,21867,21876,21889,21893,21899,21903,21915,21919,21925,21929,21933,21941,21945,21958,21966,21984,21988,21993,21998,22013,22017,22030,22034,22042,22046,22050,22058,22062,22067,22076,22080,22084,22109,22119,22123,22131,22135,22146,22171,22175,22179,22183,22191,22195,22200,22205,22212,22217,22222,22227,22232,22236,22241,22245,22250,22254,22259,22264,22268,22272,22277,22282,22290],{"__ignoreMap":31},[36,21713,21714,21716],{"class":38,"line":39},[36,21715,4486],{"class":114},[36,21717,4489],{"class":57},[36,21719,21720,21722,21724,21726],{"class":38,"line":46},[36,21721,4494],{"class":114},[36,21723,4497],{"class":114},[36,21725,4501],{"class":4500},[36,21727,3833],{"class":53},[36,21729,21730],{"class":38,"line":82},[36,21731,546],{"emptyLinePlaceholder":545},[36,21733,21734],{"class":38,"line":88},[36,21735,21736],{"class":42},"\u002F\u002F拷贝构造函数调用时机\n",[36,21738,21739],{"class":38,"line":195},[36,21740,546],{"emptyLinePlaceholder":545},[36,21742,21743],{"class":38,"line":1517},[36,21744,21745],{"class":42},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,21747,21748],{"class":38,"line":2421},[36,21749,21750],{"class":42},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,21752,21753],{"class":38,"line":2446},[36,21754,21755],{"class":42},"\u002F\u002F3.以值方式返回局部对象\n",[36,21757,21758,21760],{"class":38,"line":2469},[36,21759,519],{"class":114},[36,21761,17690],{"class":4500},[36,21763,21764],{"class":38,"line":2492},[36,21765,4084],{"class":53},[36,21767,21768],{"class":38,"line":4150},[36,21769,17237],{"class":114},[36,21771,21772,21774],{"class":38,"line":4155},[36,21773,21037],{"class":4500},[36,21775,4513],{"class":53},[36,21777,21778],{"class":38,"line":4161},[36,21779,4567],{"class":53},[36,21781,21782,21784,21786,21789,21791],{"class":38,"line":4166},[36,21783,12194],{"class":53},[36,21785,3717],{"class":114},[36,21787,21788],{"class":57}," \"Person的默认构造函数调用\"",[36,21790,3982],{"class":114},[36,21792,11367],{"class":53},[36,21794,21795],{"class":38,"line":4180},[36,21796,4721],{"class":53},[36,21798,21799],{"class":38,"line":4185},[36,21800,21801],{"class":42},"    \u002F\u002F有参构造\n",[36,21803,21804,21806,21808,21810,21812],{"class":38,"line":4191},[36,21805,21037],{"class":4500},[36,21807,54],{"class":53},[36,21809,232],{"class":114},[36,21811,18208],{"class":1997},[36,21813,61],{"class":53},[36,21815,21816],{"class":38,"line":4212},[36,21817,4567],{"class":53},[36,21819,21820,21822,21824],{"class":38,"line":4217},[36,21821,18261],{"class":53},[36,21823,115],{"class":114},[36,21825,10324],{"class":53},[36,21827,21828,21830,21832,21835,21837],{"class":38,"line":4231},[36,21829,12194],{"class":53},[36,21831,3717],{"class":114},[36,21833,21834],{"class":57}," \"Person的有参构造函数调用\"",[36,21836,3982],{"class":114},[36,21838,11367],{"class":53},[36,21840,21841],{"class":38,"line":4236},[36,21842,4721],{"class":53},[36,21844,21845],{"class":38,"line":4264},[36,21846,21392],{"class":42},[36,21848,21849,21851,21853,21855,21857,21859,21861],{"class":38,"line":4269},[36,21850,21037],{"class":4500},[36,21852,54],{"class":53},[36,21854,9319],{"class":114},[36,21856,18088],{"class":4500},[36,21858,13108],{"class":114},[36,21860,19],{"class":1997},[36,21862,61],{"class":53},[36,21864,21865],{"class":38,"line":4286},[36,21866,4567],{"class":53},[36,21868,21869,21871,21873],{"class":38,"line":4291},[36,21870,18261],{"class":53},[36,21872,115],{"class":114},[36,21874,21875],{"class":53}," p.m_Age;\n",[36,21877,21878,21880,21882,21885,21887],{"class":38,"line":4296},[36,21879,12194],{"class":53},[36,21881,3717],{"class":114},[36,21883,21884],{"class":57}," \"Person的拷贝构造函数调用\"",[36,21886,3982],{"class":114},[36,21888,11367],{"class":53},[36,21890,21891],{"class":38,"line":4301},[36,21892,4721],{"class":53},[36,21894,21895,21897],{"class":38,"line":4315},[36,21896,21070],{"class":4500},[36,21898,4513],{"class":53},[36,21900,21901],{"class":38,"line":4320},[36,21902,4567],{"class":53},[36,21904,21905,21907,21909,21911,21913],{"class":38,"line":5109},[36,21906,12194],{"class":53},[36,21908,3717],{"class":114},[36,21910,21085],{"class":57},[36,21912,3982],{"class":114},[36,21914,11367],{"class":53},[36,21916,21917],{"class":38,"line":5123},[36,21918,4721],{"class":53},[36,21920,21921,21923],{"class":38,"line":5131},[36,21922,4522],{"class":114},[36,21924,18185],{"class":53},[36,21926,21927],{"class":38,"line":5136},[36,21928,6526],{"class":53},[36,21930,21931],{"class":38,"line":5142},[36,21932,21745],{"class":42},[36,21934,21935,21937,21939],{"class":38,"line":5148},[36,21936,7892],{"class":114},[36,21938,8116],{"class":4500},[36,21940,4513],{"class":53},[36,21942,21943],{"class":38,"line":5153},[36,21944,4084],{"class":53},[36,21946,21947,21950,21952,21954,21956],{"class":38,"line":10475},[36,21948,21949],{"class":53},"    Person ",[36,21951,9657],{"class":4500},[36,21953,54],{"class":53},[36,21955,3376],{"class":49},[36,21957,5251],{"class":53},[36,21959,21960,21962,21964],{"class":38,"line":10499},[36,21961,21949],{"class":53},[36,21963,9560],{"class":4500},[36,21965,20033],{"class":53},[36,21967,21968,21970,21972,21975,21977,21980,21982],{"class":38,"line":10504},[36,21969,4089],{"class":53},[36,21971,3717],{"class":114},[36,21973,21974],{"class":57},"\"P2的年龄为：\"",[36,21976,3717],{"class":114},[36,21978,21979],{"class":53},"p2.m_Age",[36,21981,3717],{"class":114},[36,21983,3739],{"class":53},[36,21985,21986],{"class":38,"line":10510},[36,21987,4103],{"class":53},[36,21989,21990],{"class":38,"line":10537},[36,21991,21992],{"class":42},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,21994,21995],{"class":38,"line":10542},[36,21996,21997],{"class":42},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,21999,22000,22002,22005,22007,22009,22011],{"class":38,"line":10548},[36,22001,7892],{"class":114},[36,22003,22004],{"class":4500}," doWork",[36,22006,54],{"class":53},[36,22008,21564],{"class":4500},[36,22010,9352],{"class":1997},[36,22012,61],{"class":53},[36,22014,22015],{"class":38,"line":10560},[36,22016,4084],{"class":53},[36,22018,22019,22021,22023,22026,22028],{"class":38,"line":10572},[36,22020,9056],{"class":53},[36,22022,3717],{"class":114},[36,22024,22025],{"class":57}," \"doWork函数调用\"",[36,22027,3982],{"class":114},[36,22029,11367],{"class":53},[36,22031,22032],{"class":38,"line":10584},[36,22033,4103],{"class":53},[36,22035,22036,22038,22040],{"class":38,"line":12241},[36,22037,7892],{"class":114},[36,22039,8185],{"class":4500},[36,22041,4513],{"class":53},[36,22043,22044],{"class":38,"line":12266},[36,22045,4084],{"class":53},[36,22047,22048],{"class":38,"line":12289},[36,22049,17832],{"class":53},[36,22051,22052,22055],{"class":38,"line":12313},[36,22053,22054],{"class":4500},"    doWork",[36,22056,22057],{"class":53},"(p);\n",[36,22059,22060],{"class":38,"line":12318},[36,22061,4103],{"class":53},[36,22063,22064],{"class":38,"line":12323},[36,22065,22066],{"class":42},"\u002F\u002F 3.以值方式返回局部对象\n",[36,22068,22069,22071,22074],{"class":38,"line":12328},[36,22070,21564],{"class":4500},[36,22072,22073],{"class":4500}," doWork2",[36,22075,4513],{"class":53},[36,22077,22078],{"class":38,"line":12337},[36,22079,4084],{"class":53},[36,22081,22082],{"class":38,"line":12342},[36,22083,21554],{"class":53},[36,22085,22086,22088,22090,22092,22094,22096,22098,22100,22102,22104,22106],{"class":38,"line":12348},[36,22087,4089],{"class":53},[36,22089,3717],{"class":114},[36,22091,54],{"class":53},[36,22093,232],{"class":114},[36,22095,9045],{"class":114},[36,22097,3110],{"class":53},[36,22099,3034],{"class":114},[36,22101,9657],{"class":53},[36,22103,3717],{"class":114},[36,22105,3781],{"class":53},[36,22107,22108],{"class":42},"\u002F\u002F打印p1的地址\n",[36,22110,22111,22113,22116],{"class":38,"line":12369},[36,22112,6621],{"class":114},[36,22114,22115],{"class":53}," p1;",[36,22117,22118],{"class":42},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,22120,22121],{"class":38,"line":12375},[36,22122,4103],{"class":53},[36,22124,22125,22127,22129],{"class":38,"line":12389},[36,22126,7892],{"class":114},[36,22128,8257],{"class":4500},[36,22130,4513],{"class":53},[36,22132,22133],{"class":38,"line":12395},[36,22134,4084],{"class":53},[36,22136,22137,22140,22142,22144],{"class":38,"line":12422},[36,22138,22139],{"class":53},"    Person p ",[36,22141,115],{"class":114},[36,22143,22073],{"class":4500},[36,22145,8164],{"class":53},[36,22147,22148,22150,22152,22154,22156,22158,22160,22162,22164,22166,22168],{"class":38,"line":12431},[36,22149,4089],{"class":53},[36,22151,3717],{"class":114},[36,22153,54],{"class":53},[36,22155,232],{"class":114},[36,22157,9045],{"class":114},[36,22159,3110],{"class":53},[36,22161,3034],{"class":114},[36,22163,19],{"class":53},[36,22165,3717],{"class":114},[36,22167,3781],{"class":53},[36,22169,22170],{"class":42},"\u002F\u002F打印p的地址\n",[36,22172,22173],{"class":38,"line":12437},[36,22174,4103],{"class":53},[36,22176,22177],{"class":38,"line":12445},[36,22178,546],{"emptyLinePlaceholder":545},[36,22180,22181],{"class":38,"line":12450},[36,22182,546],{"emptyLinePlaceholder":545},[36,22184,22185,22187,22189],{"class":38,"line":19122},[36,22186,232],{"class":114},[36,22188,4510],{"class":4500},[36,22190,4513],{"class":53},[36,22192,22193],{"class":38,"line":19128},[36,22194,4084],{"class":53},[36,22196,22197],{"class":38,"line":19151},[36,22198,22199],{"class":42},"    \u002F\u002F test01();\n",[36,22201,22202],{"class":38,"line":19157},[36,22203,22204],{"class":42},"    \u002F\u002F test02();\n",[36,22206,22207,22210],{"class":38,"line":19180},[36,22208,22209],{"class":4500},"    test03",[36,22211,8164],{"class":53},[36,22213,22214],{"class":38,"line":19194},[36,22215,22216],{"class":42},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,22218,22219],{"class":38,"line":19214},[36,22220,22221],{"class":42},"\u002F\u002F 输出结果如下：\n",[36,22223,22224],{"class":38,"line":19220},[36,22225,22226],{"class":42},"\u002F\u002F Person的默认构造函数调用\n",[36,22228,22229],{"class":38,"line":19231},[36,22230,22231],{"class":42},"\u002F\u002F 0x7fffffffceec\n",[36,22233,22234],{"class":38,"line":19254},[36,22235,22231],{"class":42},[36,22237,22238],{"class":38,"line":19276},[36,22239,22240],{"class":42},"\u002F\u002F Person的析构函数调用\n",[36,22242,22243],{"class":38,"line":19281},[36,22244,546],{"emptyLinePlaceholder":545},[36,22246,22247],{"class":38,"line":19287},[36,22248,22249],{"class":42},"\u002F\u002F 之前的输出结果如下：\n",[36,22251,22252],{"class":38,"line":19301},[36,22253,22226],{"class":42},[36,22255,22256],{"class":38,"line":19314},[36,22257,22258],{"class":42},"\u002F\u002F 地址\n",[36,22260,22261],{"class":38,"line":19319},[36,22262,22263],{"class":42},"\u002F\u002F Person的拷贝构造函数调用\n",[36,22265,22266],{"class":38,"line":19333},[36,22267,22240],{"class":42},[36,22269,22270],{"class":38,"line":19338},[36,22271,22258],{"class":42},[36,22273,22274],{"class":38,"line":19344},[36,22275,22276],{"class":42},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,22278,22279],{"class":38,"line":19349},[36,22280,22281],{"class":42},"\u002F\u002F Person的析构函数调用     \n",[36,22283,22284,22286,22288],{"class":38,"line":19363},[36,22285,6621],{"class":114},[36,22287,6624],{"class":49},[36,22289,3833],{"class":53},[36,22291,22292],{"class":38,"line":19368},[36,22293,4103],{"class":53},[19,22295,22296],{},"简化版理解",[26,22298,22300],{"className":2693,"code":22299,"language":2695,"meta":31,"style":31},"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",[33,22301,22302,22310,22314,22320,22333,22344,22348,22360,22373,22381,22385,22401,22414,22423,22427,22432,22438,22451,22455,22459,22466,22470,22474,22479,22487,22491,22507,22520,22533,22537,22542,22550,22554,22558,22563,22568,22584,22592,22599,22605,22609,22613,22618,22626,22630,22634,22657,22664,22668,22672,22680,22684,22694,22716,22720,22724,22728,22736,22740,22745,22750,22756,22760,22770,22774,22782],{"__ignoreMap":31},[36,22303,22304,22306,22308],{"class":38,"line":39},[36,22305,519],{"class":114},[36,22307,18088],{"class":4500},[36,22309,18091],{"class":53},[36,22311,22312],{"class":38,"line":46},[36,22313,17237],{"class":114},[36,22315,22316,22318],{"class":38,"line":82},[36,22317,21037],{"class":4500},[36,22319,13376],{"class":53},[36,22321,22322,22324,22326,22329,22331],{"class":38,"line":88},[36,22323,12194],{"class":53},[36,22325,3717],{"class":114},[36,22327,22328],{"class":57}," \"无参构造函数!\"",[36,22330,3982],{"class":114},[36,22332,11367],{"class":53},[36,22334,22335,22338,22340,22342],{"class":38,"line":195},[36,22336,22337],{"class":53},"        mAge ",[36,22339,115],{"class":114},[36,22341,6624],{"class":49},[36,22343,3833],{"class":53},[36,22345,22346],{"class":38,"line":1517},[36,22347,4721],{"class":53},[36,22349,22350,22352,22354,22356,22358],{"class":38,"line":2421},[36,22351,21037],{"class":4500},[36,22353,54],{"class":53},[36,22355,232],{"class":114},[36,22357,18208],{"class":1997},[36,22359,14965],{"class":53},[36,22361,22362,22364,22366,22369,22371],{"class":38,"line":2446},[36,22363,12194],{"class":53},[36,22365,3717],{"class":114},[36,22367,22368],{"class":57}," \"有参构造函数!\"",[36,22370,3982],{"class":114},[36,22372,11367],{"class":53},[36,22374,22375,22377,22379],{"class":38,"line":2469},[36,22376,22337],{"class":53},[36,22378,115],{"class":114},[36,22380,10324],{"class":53},[36,22382,22383],{"class":38,"line":2492},[36,22384,4721],{"class":53},[36,22386,22387,22389,22391,22393,22395,22397,22399],{"class":38,"line":4150},[36,22388,21037],{"class":4500},[36,22390,54],{"class":53},[36,22392,9319],{"class":114},[36,22394,18088],{"class":4500},[36,22396,3034],{"class":114},[36,22398,9352],{"class":1997},[36,22400,14965],{"class":53},[36,22402,22403,22405,22407,22410,22412],{"class":38,"line":4155},[36,22404,12194],{"class":53},[36,22406,3717],{"class":114},[36,22408,22409],{"class":57}," \"拷贝构造函数!\"",[36,22411,3982],{"class":114},[36,22413,11367],{"class":53},[36,22415,22416,22418,22420],{"class":38,"line":4161},[36,22417,22337],{"class":53},[36,22419,115],{"class":114},[36,22421,22422],{"class":53}," p.mAge;\n",[36,22424,22425],{"class":38,"line":4166},[36,22426,4721],{"class":53},[36,22428,22429],{"class":38,"line":4180},[36,22430,22431],{"class":42},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,22433,22434,22436],{"class":38,"line":4185},[36,22435,21070],{"class":4500},[36,22437,13376],{"class":53},[36,22439,22440,22442,22444,22447,22449],{"class":38,"line":4191},[36,22441,12194],{"class":53},[36,22443,3717],{"class":114},[36,22445,22446],{"class":57}," \"析构函数!\"",[36,22448,3982],{"class":114},[36,22450,11367],{"class":53},[36,22452,22453],{"class":38,"line":4212},[36,22454,4721],{"class":53},[36,22456,22457],{"class":38,"line":4217},[36,22458,17237],{"class":114},[36,22460,22461,22463],{"class":38,"line":4231},[36,22462,4522],{"class":114},[36,22464,22465],{"class":53}," mAge;\n",[36,22467,22468],{"class":38,"line":4236},[36,22469,6526],{"class":53},[36,22471,22472],{"class":38,"line":4264},[36,22473,546],{"emptyLinePlaceholder":545},[36,22475,22476],{"class":38,"line":4269},[36,22477,22478],{"class":42},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,22480,22481,22483,22485],{"class":38,"line":4286},[36,22482,7892],{"class":114},[36,22484,8116],{"class":4500},[36,22486,13376],{"class":53},[36,22488,22489],{"class":38,"line":4291},[36,22490,546],{"emptyLinePlaceholder":545},[36,22492,22493,22495,22498,22500,22502,22504],{"class":38,"line":4296},[36,22494,21949],{"class":53},[36,22496,22497],{"class":4500},"man",[36,22499,54],{"class":53},[36,22501,166],{"class":49},[36,22503,8493],{"class":53},[36,22505,22506],{"class":42}," \u002F\u002Fp对象已经创建完毕\n",[36,22508,22509,22511,22514,22517],{"class":38,"line":4301},[36,22510,21949],{"class":53},[36,22512,22513],{"class":4500},"newman",[36,22515,22516],{"class":53},"(man);",[36,22518,22519],{"class":42}," \u002F\u002F调用拷贝构造函数\n",[36,22521,22522,22525,22527,22530],{"class":38,"line":4315},[36,22523,22524],{"class":53},"    Person newman2 ",[36,22526,115],{"class":114},[36,22528,22529],{"class":53}," man;",[36,22531,22532],{"class":42}," \u002F\u002F拷贝构造\n",[36,22534,22535],{"class":38,"line":4320},[36,22536,546],{"emptyLinePlaceholder":545},[36,22538,22539],{"class":38,"line":5109},[36,22540,22541],{"class":42},"    \u002F\u002FPerson newman3;\n",[36,22543,22544,22547],{"class":38,"line":5123},[36,22545,22546],{"class":42},"    \u002F\u002Fnewman3 = man;",[36,22548,22549],{"class":42}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,22551,22552],{"class":38,"line":5131},[36,22553,4103],{"class":53},[36,22555,22556],{"class":38,"line":5136},[36,22557,546],{"emptyLinePlaceholder":545},[36,22559,22560],{"class":38,"line":5142},[36,22561,22562],{"class":42},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,22564,22565],{"class":38,"line":5148},[36,22566,22567],{"class":42},"\u002F\u002F相当于Person p1 = p;\n",[36,22569,22570,22572,22574,22576,22578,22581],{"class":38,"line":5153},[36,22571,7892],{"class":114},[36,22573,22004],{"class":4500},[36,22575,54],{"class":53},[36,22577,21564],{"class":4500},[36,22579,22580],{"class":1997}," p1",[36,22582,22583],{"class":53},") {}\n",[36,22585,22586,22588,22590],{"class":38,"line":10475},[36,22587,7892],{"class":114},[36,22589,8185],{"class":4500},[36,22591,13376],{"class":53},[36,22593,22594,22596],{"class":38,"line":10499},[36,22595,21122],{"class":53},[36,22597,22598],{"class":42}," \u002F\u002F无参构造函数\n",[36,22600,22601,22603],{"class":38,"line":10504},[36,22602,22054],{"class":4500},[36,22604,22057],{"class":53},[36,22606,22607],{"class":38,"line":10510},[36,22608,4103],{"class":53},[36,22610,22611],{"class":38,"line":10537},[36,22612,546],{"emptyLinePlaceholder":545},[36,22614,22615],{"class":38,"line":10542},[36,22616,22617],{"class":42},"\u002F\u002F3. 以值方式返回局部对象\n",[36,22619,22620,22622,22624],{"class":38,"line":10548},[36,22621,21564],{"class":4500},[36,22623,22073],{"class":4500},[36,22625,4513],{"class":53},[36,22627,22628],{"class":38,"line":10560},[36,22629,4084],{"class":53},[36,22631,22632],{"class":38,"line":10572},[36,22633,21554],{"class":53},[36,22635,22636,22638,22640,22642,22644,22646,22648,22650,22653,22655],{"class":38,"line":10584},[36,22637,9056],{"class":53},[36,22639,3717],{"class":114},[36,22641,4196],{"class":53},[36,22643,232],{"class":114},[36,22645,9045],{"class":114},[36,22647,3110],{"class":53},[36,22649,3034],{"class":114},[36,22651,22652],{"class":53},"p1 ",[36,22654,3717],{"class":114},[36,22656,11367],{"class":53},[36,22658,22659,22661],{"class":38,"line":12241},[36,22660,6621],{"class":114},[36,22662,22663],{"class":53}," p1;\n",[36,22665,22666],{"class":38,"line":12266},[36,22667,4103],{"class":53},[36,22669,22670],{"class":38,"line":12289},[36,22671,546],{"emptyLinePlaceholder":545},[36,22673,22674,22676,22678],{"class":38,"line":12313},[36,22675,7892],{"class":114},[36,22677,8257],{"class":4500},[36,22679,4513],{"class":53},[36,22681,22682],{"class":38,"line":12318},[36,22683,4084],{"class":53},[36,22685,22686,22688,22690,22692],{"class":38,"line":12323},[36,22687,22139],{"class":53},[36,22689,115],{"class":114},[36,22691,22073],{"class":4500},[36,22693,8164],{"class":53},[36,22695,22696,22698,22700,22702,22704,22706,22708,22710,22712,22714],{"class":38,"line":12328},[36,22697,9056],{"class":53},[36,22699,3717],{"class":114},[36,22701,4196],{"class":53},[36,22703,232],{"class":114},[36,22705,9045],{"class":114},[36,22707,3110],{"class":53},[36,22709,3034],{"class":114},[36,22711,13971],{"class":53},[36,22713,3717],{"class":114},[36,22715,11367],{"class":53},[36,22717,22718],{"class":38,"line":12337},[36,22719,4103],{"class":53},[36,22721,22722],{"class":38,"line":12342},[36,22723,546],{"emptyLinePlaceholder":545},[36,22725,22726],{"class":38,"line":12348},[36,22727,546],{"emptyLinePlaceholder":545},[36,22729,22730,22732,22734],{"class":38,"line":12369},[36,22731,232],{"class":114},[36,22733,4510],{"class":4500},[36,22735,13376],{"class":53},[36,22737,22738],{"class":38,"line":12375},[36,22739,546],{"emptyLinePlaceholder":545},[36,22741,22742],{"class":38,"line":12389},[36,22743,22744],{"class":42},"    \u002F\u002Ftest01();\n",[36,22746,22747],{"class":38,"line":12395},[36,22748,22749],{"class":42},"    \u002F\u002Ftest02();\n",[36,22751,22752,22754],{"class":38,"line":12422},[36,22753,22209],{"class":4500},[36,22755,8164],{"class":53},[36,22757,22758],{"class":38,"line":12431},[36,22759,546],{"emptyLinePlaceholder":545},[36,22761,22762,22764,22766,22768],{"class":38,"line":12437},[36,22763,4837],{"class":4500},[36,22765,54],{"class":53},[36,22767,4842],{"class":57},[36,22769,5251],{"class":53},[36,22771,22772],{"class":38,"line":12445},[36,22773,546],{"emptyLinePlaceholder":545},[36,22775,22776,22778,22780],{"class":38,"line":12450},[36,22777,6621],{"class":114},[36,22779,6624],{"class":49},[36,22781,3833],{"class":53},[36,22783,22784],{"class":38,"line":19122},[36,22785,4103],{"class":53},[997,22787,22789],{"id":22788},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22791,22792],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22794,22795],{},"1．默认构造函数(无参，函数体为空)",[19,22797,22798],{},"2．默认析构函数(无参，函数体为空)",[19,22800,22801],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22803,22804],{},"构造函数调用规则如下：",[3680,22806,22807,22810],{},[436,22808,22809],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[436,22811,22812],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,22814,22816],{"className":2693,"code":22815,"language":2695,"meta":31,"style":31},"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",[33,22817,22818,22826,22830,22835,22841,22853,22857,22862,22874,22883,22895,22899,22903,22919,22928,22940,22944,22948,22954,22966,22970,22974,22980,22984,22988,22996,23000,23012,23017,23025,23029,23047,23051,23055,23063,23067,23072,23080,23095,23108,23112,23117,23124,23140,23153,23157,23161,23169,23173,23179,23183,23193,23197,23205],{"__ignoreMap":31},[36,22819,22820,22822,22824],{"class":38,"line":39},[36,22821,519],{"class":114},[36,22823,18088],{"class":4500},[36,22825,18091],{"class":53},[36,22827,22828],{"class":38,"line":46},[36,22829,17237],{"class":114},[36,22831,22832],{"class":38,"line":82},[36,22833,22834],{"class":42},"    \u002F\u002F无参（默认）构造函数\n",[36,22836,22837,22839],{"class":38,"line":88},[36,22838,21037],{"class":4500},[36,22840,13376],{"class":53},[36,22842,22843,22845,22847,22849,22851],{"class":38,"line":195},[36,22844,12194],{"class":53},[36,22846,3717],{"class":114},[36,22848,22328],{"class":57},[36,22850,3982],{"class":114},[36,22852,11367],{"class":53},[36,22854,22855],{"class":38,"line":1517},[36,22856,4721],{"class":53},[36,22858,22859],{"class":38,"line":2421},[36,22860,22861],{"class":42},"    \u002F\u002F有参构造函数\n",[36,22863,22864,22866,22868,22870,22872],{"class":38,"line":2446},[36,22865,21037],{"class":4500},[36,22867,54],{"class":53},[36,22869,232],{"class":114},[36,22871,3936],{"class":1997},[36,22873,14965],{"class":53},[36,22875,22876,22879,22881],{"class":38,"line":2469},[36,22877,22878],{"class":53},"        age ",[36,22880,115],{"class":114},[36,22882,3970],{"class":53},[36,22884,22885,22887,22889,22891,22893],{"class":38,"line":2492},[36,22886,12194],{"class":53},[36,22888,3717],{"class":114},[36,22890,22368],{"class":57},[36,22892,3982],{"class":114},[36,22894,11367],{"class":53},[36,22896,22897],{"class":38,"line":4150},[36,22898,4721],{"class":53},[36,22900,22901],{"class":38,"line":4155},[36,22902,21392],{"class":42},[36,22904,22905,22907,22909,22911,22913,22915,22917],{"class":38,"line":4161},[36,22906,21037],{"class":4500},[36,22908,54],{"class":53},[36,22910,9319],{"class":114},[36,22912,18088],{"class":4500},[36,22914,3034],{"class":114},[36,22916,9352],{"class":1997},[36,22918,14965],{"class":53},[36,22920,22921,22923,22925],{"class":38,"line":4166},[36,22922,22878],{"class":53},[36,22924,115],{"class":114},[36,22926,22927],{"class":53}," p.age;\n",[36,22929,22930,22932,22934,22936,22938],{"class":38,"line":4180},[36,22931,12194],{"class":53},[36,22933,3717],{"class":114},[36,22935,22409],{"class":57},[36,22937,3982],{"class":114},[36,22939,11367],{"class":53},[36,22941,22942],{"class":38,"line":4185},[36,22943,4721],{"class":53},[36,22945,22946],{"class":38,"line":4191},[36,22947,21065],{"class":42},[36,22949,22950,22952],{"class":38,"line":4212},[36,22951,21070],{"class":4500},[36,22953,13376],{"class":53},[36,22955,22956,22958,22960,22962,22964],{"class":38,"line":4217},[36,22957,12194],{"class":53},[36,22959,3717],{"class":114},[36,22961,22446],{"class":57},[36,22963,3982],{"class":114},[36,22965,11367],{"class":53},[36,22967,22968],{"class":38,"line":4231},[36,22969,4721],{"class":53},[36,22971,22972],{"class":38,"line":4236},[36,22973,17237],{"class":114},[36,22975,22976,22978],{"class":38,"line":4264},[36,22977,4522],{"class":114},[36,22979,10324],{"class":53},[36,22981,22982],{"class":38,"line":4269},[36,22983,6526],{"class":53},[36,22985,22986],{"class":38,"line":4286},[36,22987,546],{"emptyLinePlaceholder":545},[36,22989,22990,22992,22994],{"class":38,"line":4291},[36,22991,7892],{"class":114},[36,22993,8116],{"class":4500},[36,22995,4513],{"class":53},[36,22997,22998],{"class":38,"line":4296},[36,22999,4084],{"class":53},[36,23001,23002,23004,23006,23008,23010],{"class":38,"line":4301},[36,23003,21949],{"class":53},[36,23005,9657],{"class":4500},[36,23007,54],{"class":53},[36,23009,3326],{"class":49},[36,23011,5251],{"class":53},[36,23013,23014],{"class":38,"line":4315},[36,23015,23016],{"class":42},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,23018,23019,23021,23023],{"class":38,"line":4320},[36,23020,21949],{"class":53},[36,23022,9560],{"class":4500},[36,23024,20033],{"class":53},[36,23026,23027],{"class":38,"line":5109},[36,23028,546],{"emptyLinePlaceholder":545},[36,23030,23031,23033,23035,23038,23040,23043,23045],{"class":38,"line":5123},[36,23032,9056],{"class":53},[36,23034,3717],{"class":114},[36,23036,23037],{"class":57}," \"p2的年龄为： \"",[36,23039,3982],{"class":114},[36,23041,23042],{"class":53}," p2.age ",[36,23044,3717],{"class":114},[36,23046,11367],{"class":53},[36,23048,23049],{"class":38,"line":5131},[36,23050,4103],{"class":53},[36,23052,23053],{"class":38,"line":5136},[36,23054,546],{"emptyLinePlaceholder":545},[36,23056,23057,23059,23061],{"class":38,"line":5142},[36,23058,7892],{"class":114},[36,23060,8185],{"class":4500},[36,23062,4513],{"class":53},[36,23064,23065],{"class":38,"line":5148},[36,23066,4084],{"class":53},[36,23068,23069],{"class":38,"line":5153},[36,23070,23071],{"class":42},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,23073,23074,23077],{"class":38,"line":10475},[36,23075,23076],{"class":53},"    Person p1;",[36,23078,23079],{"class":42}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,23081,23082,23084,23086,23088,23090,23092],{"class":38,"line":10499},[36,23083,21949],{"class":53},[36,23085,9560],{"class":4500},[36,23087,54],{"class":53},[36,23089,1317],{"class":49},[36,23091,8493],{"class":53},[36,23093,23094],{"class":42}," \u002F\u002F用户提供的有参\n",[36,23096,23097,23099,23102,23105],{"class":38,"line":10504},[36,23098,21949],{"class":53},[36,23100,23101],{"class":4500},"p3",[36,23103,23104],{"class":53},"(p2);",[36,23106,23107],{"class":42}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,23109,23110],{"class":38,"line":10510},[36,23111,546],{"emptyLinePlaceholder":545},[36,23113,23114],{"class":38,"line":10537},[36,23115,23116],{"class":42},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,23118,23119,23122],{"class":38,"line":10542},[36,23120,23121],{"class":53},"    Person p4;",[36,23123,23079],{"class":42},[36,23125,23126,23128,23131,23133,23135,23137],{"class":38,"line":10548},[36,23127,21949],{"class":53},[36,23129,23130],{"class":4500},"p5",[36,23132,54],{"class":53},[36,23134,1317],{"class":49},[36,23136,8493],{"class":53},[36,23138,23139],{"class":42}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,23141,23142,23144,23147,23150],{"class":38,"line":10560},[36,23143,21949],{"class":53},[36,23145,23146],{"class":4500},"p6",[36,23148,23149],{"class":53},"(p5);",[36,23151,23152],{"class":42}," \u002F\u002F用户自己提供拷贝构造\n",[36,23154,23155],{"class":38,"line":10572},[36,23156,4103],{"class":53},[36,23158,23159],{"class":38,"line":10584},[36,23160,546],{"emptyLinePlaceholder":545},[36,23162,23163,23165,23167],{"class":38,"line":12241},[36,23164,232],{"class":114},[36,23166,4510],{"class":4500},[36,23168,13376],{"class":53},[36,23170,23171],{"class":38,"line":12266},[36,23172,546],{"emptyLinePlaceholder":545},[36,23174,23175,23177],{"class":38,"line":12289},[36,23176,8161],{"class":4500},[36,23178,8164],{"class":53},[36,23180,23181],{"class":38,"line":12313},[36,23182,546],{"emptyLinePlaceholder":545},[36,23184,23185,23187,23189,23191],{"class":38,"line":12318},[36,23186,4837],{"class":4500},[36,23188,54],{"class":53},[36,23190,4842],{"class":57},[36,23192,5251],{"class":53},[36,23194,23195],{"class":38,"line":12323},[36,23196,546],{"emptyLinePlaceholder":545},[36,23198,23199,23201,23203],{"class":38,"line":12328},[36,23200,6621],{"class":114},[36,23202,6624],{"class":49},[36,23204,3833],{"class":53},[36,23206,23207],{"class":38,"line":12337},[36,23208,4103],{"class":53},[997,23210,23212],{"id":23211},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,23214,23215],{},"浅拷贝：简单的赋值拷贝操作",[19,23217,23218],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,23220,23222],{"className":2693,"code":23221,"language":2695,"meta":31,"style":31},"#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",[33,23223,23224,23230,23240,23246,23250,23254,23259,23265,23269,23282,23286,23290,23297,23301,23311,23326,23339,23343,23348,23353,23369,23373,23386,23391,23396,23401,23410,23415,23430,23434,23438,23442,23448,23452,23457,23472,23476,23487,23501,23505,23514,23518,23524,23536,23540,23548,23552,23569,23600,23608,23636,23640,23644,23652,23656,23662],{"__ignoreMap":31},[36,23225,23226,23228],{"class":38,"line":39},[36,23227,4486],{"class":114},[36,23229,4489],{"class":57},[36,23231,23232,23234,23236,23238],{"class":38,"line":46},[36,23233,4494],{"class":114},[36,23235,4497],{"class":114},[36,23237,4501],{"class":4500},[36,23239,3833],{"class":53},[36,23241,23242,23244],{"class":38,"line":82},[36,23243,519],{"class":114},[36,23245,17690],{"class":4500},[36,23247,23248],{"class":38,"line":88},[36,23249,4084],{"class":53},[36,23251,23252],{"class":38,"line":195},[36,23253,17237],{"class":114},[36,23255,23256],{"class":38,"line":1517},[36,23257,23258],{"class":42},"    \u002F\u002F默认构造函数\n",[36,23260,23261,23263],{"class":38,"line":2421},[36,23262,21037],{"class":4500},[36,23264,4513],{"class":53},[36,23266,23267],{"class":38,"line":2446},[36,23268,4567],{"class":53},[36,23270,23271,23273,23275,23278,23280],{"class":38,"line":2469},[36,23272,5982],{"class":53},[36,23274,3717],{"class":114},[36,23276,23277],{"class":57},"\"默认构造函数\"",[36,23279,3717],{"class":114},[36,23281,3739],{"class":53},[36,23283,23284],{"class":38,"line":2492},[36,23285,4721],{"class":53},[36,23287,23288],{"class":38,"line":4150},[36,23289,22861],{"class":42},[36,23291,23292,23294],{"class":38,"line":4155},[36,23293,21070],{"class":4500},[36,23295,23296],{"class":53},"(int age,int height)\n",[36,23298,23299],{"class":38,"line":4161},[36,23300,4567],{"class":53},[36,23302,23303,23306,23308],{"class":38,"line":4166},[36,23304,23305],{"class":53},"        m_Age",[36,23307,115],{"class":114},[36,23309,23310],{"class":53},"age;\n",[36,23312,23313,23316,23318,23320,23323],{"class":38,"line":4180},[36,23314,23315],{"class":53},"        m_Height",[36,23317,14240],{"class":114},[36,23319,837],{"class":114},[36,23321,23322],{"class":53},"(height);",[36,23324,23325],{"class":42},"\u002F\u002F放到堆区\n",[36,23327,23328,23330,23332,23335,23337],{"class":38,"line":4185},[36,23329,5982],{"class":53},[36,23331,3717],{"class":114},[36,23333,23334],{"class":57},"\"有参构造函数\"",[36,23336,3717],{"class":114},[36,23338,3739],{"class":53},[36,23340,23341],{"class":38,"line":4191},[36,23342,4721],{"class":53},[36,23344,23345],{"class":38,"line":4212},[36,23346,23347],{"class":42},"    \u002F\u002F深拷贝解决上述问题\n",[36,23349,23350],{"class":38,"line":4217},[36,23351,23352],{"class":42},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,23354,23355,23357,23359,23361,23363,23365,23367],{"class":38,"line":4231},[36,23356,21037],{"class":4500},[36,23358,54],{"class":53},[36,23360,9319],{"class":114},[36,23362,18088],{"class":4500},[36,23364,13108],{"class":114},[36,23366,19],{"class":1997},[36,23368,61],{"class":53},[36,23370,23371],{"class":38,"line":4236},[36,23372,4567],{"class":53},[36,23374,23375,23377,23379,23382,23384],{"class":38,"line":4264},[36,23376,5982],{"class":53},[36,23378,3717],{"class":114},[36,23380,23381],{"class":57},"\"拷贝构造函数\"",[36,23383,3717],{"class":114},[36,23385,3739],{"class":53},[36,23387,23388],{"class":38,"line":4269},[36,23389,23390],{"class":42},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,23392,23393],{"class":38,"line":4286},[36,23394,23395],{"class":42},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,23397,23398],{"class":38,"line":4291},[36,23399,23400],{"class":42},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,23402,23403,23405,23407],{"class":38,"line":4296},[36,23404,23305],{"class":53},[36,23406,115],{"class":114},[36,23408,23409],{"class":53},"p.m_Age;\n",[36,23411,23412],{"class":38,"line":4301},[36,23413,23414],{"class":42},"        \u002F\u002F深拷贝操作\n",[36,23416,23417,23419,23421,23423,23425,23427],{"class":38,"line":4315},[36,23418,23315],{"class":53},[36,23420,14240],{"class":114},[36,23422,837],{"class":114},[36,23424,54],{"class":53},[36,23426,1050],{"class":114},[36,23428,23429],{"class":53},"p.m_Height);\n",[36,23431,23432],{"class":38,"line":4320},[36,23433,4721],{"class":53},[36,23435,23436],{"class":38,"line":5109},[36,23437,546],{"emptyLinePlaceholder":545},[36,23439,23440],{"class":38,"line":5123},[36,23441,21065],{"class":42},[36,23443,23444,23446],{"class":38,"line":5131},[36,23445,21070],{"class":4500},[36,23447,4513],{"class":53},[36,23449,23450],{"class":38,"line":5136},[36,23451,4567],{"class":53},[36,23453,23454],{"class":38,"line":5142},[36,23455,23456],{"class":42},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,23458,23459,23461,23464,23467,23470],{"class":38,"line":5148},[36,23460,5029],{"class":114},[36,23462,23463],{"class":53},"(m_Height ",[36,23465,23466],{"class":114},"!=",[36,23468,23469],{"class":49}," NULL",[36,23471,61],{"class":53},[36,23473,23474],{"class":38,"line":5153},[36,23475,5042],{"class":53},[36,23477,23478,23481,23484],{"class":38,"line":10475},[36,23479,23480],{"class":114},"            delete",[36,23482,23483],{"class":53}," m_Height;",[36,23485,23486],{"class":42}," \u002F\u002F释放堆区内存\n",[36,23488,23489,23492,23494,23496,23498],{"class":38,"line":10499},[36,23490,23491],{"class":53},"            m_Height",[36,23493,115],{"class":114},[36,23495,4925],{"class":49},[36,23497,2752],{"class":53},[36,23499,23500],{"class":42}," \u002F\u002F防止野指针\n",[36,23502,23503],{"class":38,"line":10504},[36,23504,5061],{"class":53},[36,23506,23507,23509,23511],{"class":38,"line":10510},[36,23508,5982],{"class":53},[36,23510,3717],{"class":114},[36,23512,23513],{"class":57},"\"Person的析构函数调用\"\n",[36,23515,23516],{"class":38,"line":10537},[36,23517,4721],{"class":53},[36,23519,23520,23522],{"class":38,"line":10542},[36,23521,4522],{"class":114},[36,23523,18185],{"class":53},[36,23525,23526,23528,23530,23533],{"class":38,"line":10548},[36,23527,4522],{"class":114},[36,23529,9045],{"class":114},[36,23531,23532],{"class":53},"m_Height;",[36,23534,23535],{"class":42}," \u002F\u002F定义一个指针，指向身高\n",[36,23537,23538],{"class":38,"line":10560},[36,23539,6526],{"class":53},[36,23541,23542,23544,23546],{"class":38,"line":10572},[36,23543,7892],{"class":114},[36,23545,8116],{"class":4500},[36,23547,4513],{"class":53},[36,23549,23550],{"class":38,"line":10584},[36,23551,4084],{"class":53},[36,23553,23554,23556,23558,23560,23562,23564,23567],{"class":38,"line":12241},[36,23555,21949],{"class":53},[36,23557,9657],{"class":4500},[36,23559,54],{"class":53},[36,23561,3326],{"class":49},[36,23563,3059],{"class":53},[36,23565,23566],{"class":49},"160",[36,23568,5251],{"class":53},[36,23570,23571,23573,23575,23578,23580,23583,23585,23588,23590,23593,23595,23597],{"class":38,"line":12266},[36,23572,4089],{"class":53},[36,23574,3717],{"class":114},[36,23576,23577],{"class":57},"\"p1的年龄为:\"",[36,23579,3717],{"class":114},[36,23581,23582],{"class":53},"p1.m_Age",[36,23584,3717],{"class":114},[36,23586,23587],{"class":57},"\"身高为：\"",[36,23589,8946],{"class":114},[36,23591,23592],{"class":53},"p1.m_Height",[36,23594,3717],{"class":114},[36,23596,3781],{"class":53},[36,23598,23599],{"class":42},"  \u002F\u002F18\n",[36,23601,23602,23604,23606],{"class":38,"line":12289},[36,23603,21949],{"class":53},[36,23605,9560],{"class":4500},[36,23607,20033],{"class":53},[36,23609,23610,23612,23614,23617,23619,23621,23623,23625,23627,23630,23632,23634],{"class":38,"line":12313},[36,23611,4089],{"class":53},[36,23613,3717],{"class":114},[36,23615,23616],{"class":57},"\"p2的年龄为：\"",[36,23618,3717],{"class":114},[36,23620,21979],{"class":53},[36,23622,3717],{"class":114},[36,23624,23587],{"class":57},[36,23626,8946],{"class":114},[36,23628,23629],{"class":53},"p2.m_Height",[36,23631,3717],{"class":114},[36,23633,3781],{"class":53},[36,23635,23599],{"class":42},[36,23637,23638],{"class":38,"line":12318},[36,23639,15733],{"class":53},[36,23641,23642],{"class":38,"line":12323},[36,23643,4103],{"class":53},[36,23645,23646,23648,23650],{"class":38,"line":12328},[36,23647,232],{"class":114},[36,23649,4510],{"class":4500},[36,23651,4513],{"class":53},[36,23653,23654],{"class":38,"line":12337},[36,23655,4084],{"class":53},[36,23657,23658,23660],{"class":38,"line":12342},[36,23659,8161],{"class":4500},[36,23661,8164],{"class":53},[36,23663,23664],{"class":38,"line":12348},[36,23665,4103],{"class":53},[19,23667,23668],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23670,23671],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23673,23674],{},[4000,23675],{"alt":31,"src":23676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23678,23679],{},"浅拷贝问题要使用深拷贝来解决",[19,23681,23682],{},[4000,23683],{"alt":31,"src":23684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23686,23687],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[997,23689,23691],{"id":23690},"_826初始化列表","8.2.6初始化列表",[19,23693,23694],{},"作用：初始化属性",[19,23696,7712],{},[26,23698,23701],{"className":23699,"code":23700,"language":690},[688],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,23702,23700],{"__ignoreMap":31},[19,23704,23705],{},"例子",[26,23707,23709],{"className":2693,"code":23708,"language":2695,"meta":31,"style":31},"#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",[33,23710,23711,23717,23727,23733,23737,23742,23746,23751,23756,23761,23766,23771,23776,23780,23785,23790,23833,23842,23860,23878,23896,23900,23904,23911,23918,23925,23929,23933,23941,23945,23949,23969,23978,23982,23986,23996,24000,24008],{"__ignoreMap":31},[36,23712,23713,23715],{"class":38,"line":39},[36,23714,4486],{"class":114},[36,23716,4489],{"class":57},[36,23718,23719,23721,23723,23725],{"class":38,"line":46},[36,23720,4494],{"class":114},[36,23722,4497],{"class":114},[36,23724,4501],{"class":4500},[36,23726,3833],{"class":53},[36,23728,23729,23731],{"class":38,"line":82},[36,23730,519],{"class":114},[36,23732,17690],{"class":4500},[36,23734,23735],{"class":38,"line":88},[36,23736,4084],{"class":53},[36,23738,23739],{"class":38,"line":195},[36,23740,23741],{"class":114},"    public:\n",[36,23743,23744],{"class":38,"line":1517},[36,23745,546],{"emptyLinePlaceholder":545},[36,23747,23748],{"class":38,"line":2421},[36,23749,23750],{"class":42},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,23752,23753],{"class":38,"line":2446},[36,23754,23755],{"class":42},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,23757,23758],{"class":38,"line":2469},[36,23759,23760],{"class":42},"    \u002F\u002F  m_A = a;\n",[36,23762,23763],{"class":38,"line":2492},[36,23764,23765],{"class":42},"    \u002F\u002F  m_B = b;\n",[36,23767,23768],{"class":38,"line":4150},[36,23769,23770],{"class":42},"    \u002F\u002F  m_C = c;\n",[36,23772,23773],{"class":38,"line":4155},[36,23774,23775],{"class":42},"    \u002F\u002F}\n",[36,23777,23778],{"class":38,"line":4161},[36,23779,546],{"emptyLinePlaceholder":545},[36,23781,23782],{"class":38,"line":4166},[36,23783,23784],{"class":42},"    \u002F\u002F初始化列表方式初始化\n",[36,23786,23787],{"class":38,"line":4180},[36,23788,23789],{"class":42},"    \u002F\u002F使用有参构造函数\n",[36,23791,23792,23794,23796,23798,23800,23802,23804,23806,23808,23810,23812,23815,23818,23821,23824,23827,23830],{"class":38,"line":4185},[36,23793,21037],{"class":4500},[36,23795,54],{"class":53},[36,23797,232],{"class":114},[36,23799,3936],{"class":1997},[36,23801,14958],{"class":53},[36,23803,232],{"class":114},[36,23805,5365],{"class":1997},[36,23807,14958],{"class":53},[36,23809,232],{"class":114},[36,23811,5381],{"class":1997},[36,23813,23814],{"class":53},") :",[36,23816,23817],{"class":4500},"m_A",[36,23819,23820],{"class":53},"(a), ",[36,23822,23823],{"class":4500},"m_B",[36,23825,23826],{"class":53},"(b), ",[36,23828,23829],{"class":4500},"m_C",[36,23831,23832],{"class":53},"(c) {}\n",[36,23834,23835,23837,23840],{"class":38,"line":4191},[36,23836,17429],{"class":114},[36,23838,23839],{"class":4500}," PrintPerson",[36,23841,13376],{"class":53},[36,23843,23844,23846,23848,23851,23853,23856,23858],{"class":38,"line":4212},[36,23845,12194],{"class":53},[36,23847,3717],{"class":114},[36,23849,23850],{"class":57}," \"mA:\"",[36,23852,3982],{"class":114},[36,23854,23855],{"class":53}," m_A ",[36,23857,3717],{"class":114},[36,23859,11367],{"class":53},[36,23861,23862,23864,23866,23869,23871,23874,23876],{"class":38,"line":4217},[36,23863,12194],{"class":53},[36,23865,3717],{"class":114},[36,23867,23868],{"class":57}," \"mB:\"",[36,23870,3982],{"class":114},[36,23872,23873],{"class":53}," m_B ",[36,23875,3717],{"class":114},[36,23877,11367],{"class":53},[36,23879,23880,23882,23884,23887,23889,23892,23894],{"class":38,"line":4231},[36,23881,12194],{"class":53},[36,23883,3717],{"class":114},[36,23885,23886],{"class":57}," \"mC:\"",[36,23888,3982],{"class":114},[36,23890,23891],{"class":53}," m_C ",[36,23893,3717],{"class":114},[36,23895,11367],{"class":53},[36,23897,23898],{"class":38,"line":4236},[36,23899,4721],{"class":53},[36,23901,23902],{"class":38,"line":4264},[36,23903,17741],{"class":114},[36,23905,23906,23908],{"class":38,"line":4269},[36,23907,4522],{"class":114},[36,23909,23910],{"class":53}," m_A;\n",[36,23912,23913,23915],{"class":38,"line":4286},[36,23914,4522],{"class":114},[36,23916,23917],{"class":53}," m_B;\n",[36,23919,23920,23922],{"class":38,"line":4291},[36,23921,4522],{"class":114},[36,23923,23924],{"class":53}," m_C;\n",[36,23926,23927],{"class":38,"line":4296},[36,23928,6526],{"class":53},[36,23930,23931],{"class":38,"line":4301},[36,23932,546],{"emptyLinePlaceholder":545},[36,23934,23935,23937,23939],{"class":38,"line":4315},[36,23936,232],{"class":114},[36,23938,4510],{"class":4500},[36,23940,8505],{"class":53},[36,23942,23943],{"class":38,"line":4320},[36,23944,4084],{"class":53},[36,23946,23947],{"class":38,"line":5109},[36,23948,546],{"emptyLinePlaceholder":545},[36,23950,23951,23953,23955,23957,23959,23961,23963,23965,23967],{"class":38,"line":5123},[36,23952,21949],{"class":53},[36,23954,19],{"class":4500},[36,23956,54],{"class":53},[36,23958,707],{"class":49},[36,23960,14958],{"class":53},[36,23962,1188],{"class":49},[36,23964,14958],{"class":53},[36,23966,2767],{"class":49},[36,23968,5251],{"class":53},[36,23970,23971,23973,23976],{"class":38,"line":5131},[36,23972,18384],{"class":53},[36,23974,23975],{"class":4500},"PrintPerson",[36,23977,8164],{"class":53},[36,23979,23980],{"class":38,"line":5136},[36,23981,546],{"emptyLinePlaceholder":545},[36,23983,23984],{"class":38,"line":5142},[36,23985,546],{"emptyLinePlaceholder":545},[36,23987,23988,23990,23992,23994],{"class":38,"line":5148},[36,23989,4837],{"class":4500},[36,23991,54],{"class":53},[36,23993,4842],{"class":57},[36,23995,5251],{"class":53},[36,23997,23998],{"class":38,"line":5153},[36,23999,546],{"emptyLinePlaceholder":545},[36,24001,24002,24004,24006],{"class":38,"line":10475},[36,24003,6621],{"class":114},[36,24005,6624],{"class":49},[36,24007,3833],{"class":53},[36,24009,24010],{"class":38,"line":10499},[36,24011,4103],{"class":53},[19,24013,24014,24015,708,24018],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2839,24016,24017],{},"参数名就是定义的对象属性",[2839,24019,24020],{},"属性后面的值为有参构造函数的形参",[26,24022,24024],{"className":2693,"code":24023,"language":2695,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,24025,24026],{"__ignoreMap":31},[36,24027,24028,24030,24032,24034,24037,24039,24042,24044,24047,24049,24052,24054,24057,24059],{"class":38,"line":39},[36,24029,21564],{"class":4500},[36,24031,54],{"class":53},[36,24033,232],{"class":114},[36,24035,24036],{"class":53}," a.",[36,24038,232],{"class":114},[36,24040,24041],{"class":53}," b,",[36,24043,232],{"class":114},[36,24045,24046],{"class":53}," b):",[36,24048,23817],{"class":4500},[36,24050,24051],{"class":53},"(a),",[36,24053,23823],{"class":4500},[36,24055,24056],{"class":53},"(c),",[36,24058,23829],{"class":4500},[36,24060,24061],{"class":53},"(b) {}\n",[997,24063,24065],{"id":24064},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,24067,24068],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,24070,17155],{},[26,24072,24074],{"className":2693,"code":24073,"language":2695,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,24075,24076,24081,24086,24090,24095,24099],{"__ignoreMap":31},[36,24077,24078],{"class":38,"line":39},[36,24079,24080],{"class":53},"A{};\n",[36,24082,24083],{"class":38,"line":46},[36,24084,24085],{"class":53},"B\n",[36,24087,24088],{"class":38,"line":82},[36,24089,4084],{"class":53},[36,24091,24092],{"class":38,"line":88},[36,24093,24094],{"class":53},"    A a;\n",[36,24096,24097],{"class":38,"line":195},[36,24098,4103],{"class":53},[36,24100,24101],{"class":38,"line":1517},[36,24102,24103],{"class":42},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,24105,24106],{},"案例",[26,24108,24110],{"className":2693,"code":24109,"language":2695,"meta":31,"style":31},"\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",[33,24111,24112,24117,24124,24128,24133,24138,24152,24156,24166,24177,24181,24188,24192,24205,24209,24214,24219,24223,24229,24233,24237,24241,24272,24276,24287,24291,24297,24301,24314,24318,24322,24326,24331,24336,24340,24348,24352,24369,24388,24392,24400,24404,24410],{"__ignoreMap":31},[36,24113,24114],{"class":38,"line":39},[36,24115,24116],{"class":42},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,24118,24119,24121],{"class":38,"line":46},[36,24120,519],{"class":114},[36,24122,24123],{"class":4500}," Phone\n",[36,24125,24126],{"class":38,"line":82},[36,24127,4084],{"class":53},[36,24129,24130],{"class":38,"line":88},[36,24131,24132],{"class":53},"public：\n",[36,24134,24135],{"class":38,"line":195},[36,24136,24137],{"class":42},"    \u002F\u002F 赋值(构造函数)\n",[36,24139,24140,24143,24145,24147,24150],{"class":38,"line":1517},[36,24141,24142],{"class":4500},"    Phone",[36,24144,54],{"class":53},[36,24146,17437],{"class":4500},[36,24148,24149],{"class":1997}," pName",[36,24151,61],{"class":53},[36,24153,24154],{"class":38,"line":2421},[36,24155,4567],{"class":53},[36,24157,24158,24161,24163],{"class":38,"line":2446},[36,24159,24160],{"class":53},"        m_pName",[36,24162,115],{"class":114},[36,24164,24165],{"class":53},"pName;\n",[36,24167,24168,24170,24172,24175],{"class":38,"line":2469},[36,24169,5982],{"class":53},[36,24171,3717],{"class":114},[36,24173,24174],{"class":57},"\"Phone的构造函数调用\"",[36,24176,3833],{"class":53},[36,24178,24179],{"class":38,"line":2492},[36,24180,4721],{"class":53},[36,24182,24183,24186],{"class":38,"line":4150},[36,24184,24185],{"class":4500},"    ~Phone",[36,24187,4513],{"class":53},[36,24189,24190],{"class":38,"line":4155},[36,24191,4567],{"class":53},[36,24193,24194,24196,24198,24201,24203],{"class":38,"line":4161},[36,24195,5982],{"class":53},[36,24197,3717],{"class":114},[36,24199,24200],{"class":57},"\"Phone析构函数调用\"",[36,24202,3717],{"class":114},[36,24204,3739],{"class":53},[36,24206,24207],{"class":38,"line":4166},[36,24208,4721],{"class":53},[36,24210,24211],{"class":38,"line":4180},[36,24212,24213],{"class":42},"    \u002F\u002F\n",[36,24215,24216],{"class":38,"line":4185},[36,24217,24218],{"class":53},"    string m_PName;\n",[36,24220,24221],{"class":38,"line":4191},[36,24222,6526],{"class":53},[36,24224,24225,24227],{"class":38,"line":4212},[36,24226,519],{"class":114},[36,24228,17690],{"class":4500},[36,24230,24231],{"class":38,"line":4217},[36,24232,4084],{"class":53},[36,24234,24235],{"class":38,"line":4231},[36,24236,17237],{"class":114},[36,24238,24239],{"class":38,"line":4236},[36,24240,19512],{"class":42},[36,24242,24243,24245,24247,24249,24251,24253,24255,24258,24261,24263,24266,24269],{"class":38,"line":4264},[36,24244,21037],{"class":4500},[36,24246,54],{"class":53},[36,24248,17437],{"class":4500},[36,24250,17440],{"class":1997},[36,24252,3059],{"class":53},[36,24254,17437],{"class":4500},[36,24256,24257],{"class":1997}," pname",[36,24259,24260],{"class":53},"):",[36,24262,17530],{"class":4500},[36,24264,24265],{"class":53},"(name),m_phone.",[36,24267,24268],{"class":4500},"m_PName",[36,24270,24271],{"class":53},"(pname) \n",[36,24273,24274],{"class":38,"line":4269},[36,24275,4567],{"class":53},[36,24277,24278,24280,24282,24285],{"class":38,"line":4286},[36,24279,5982],{"class":53},[36,24281,3717],{"class":114},[36,24283,24284],{"class":57},"\"Person的构造函数调用\"",[36,24286,3833],{"class":53},[36,24288,24289],{"class":38,"line":4291},[36,24290,4721],{"class":53},[36,24292,24293,24295],{"class":38,"line":4296},[36,24294,21070],{"class":4500},[36,24296,4513],{"class":53},[36,24298,24299],{"class":38,"line":4301},[36,24300,4567],{"class":53},[36,24302,24303,24305,24307,24310,24312],{"class":38,"line":4315},[36,24304,5982],{"class":53},[36,24306,3717],{"class":114},[36,24308,24309],{"class":57},"\"Person析构函数调用\"",[36,24311,3717],{"class":114},[36,24313,3739],{"class":53},[36,24315,24316],{"class":38,"line":4320},[36,24317,4721],{"class":53},[36,24319,24320],{"class":38,"line":5109},[36,24321,10307],{"class":42},[36,24323,24324],{"class":38,"line":5123},[36,24325,17412],{"class":53},[36,24327,24328],{"class":38,"line":5131},[36,24329,24330],{"class":42},"    \u002F\u002F手机\n",[36,24332,24333],{"class":38,"line":5136},[36,24334,24335],{"class":53},"    Phone m_Phone;\n",[36,24337,24338],{"class":38,"line":5142},[36,24339,6526],{"class":53},[36,24341,24342,24344,24346],{"class":38,"line":5148},[36,24343,7892],{"class":114},[36,24345,8116],{"class":4500},[36,24347,4513],{"class":53},[36,24349,24350],{"class":38,"line":5153},[36,24351,4084],{"class":53},[36,24353,24354,24356,24358,24360,24362,24364,24367],{"class":38,"line":10475},[36,24355,21949],{"class":53},[36,24357,19],{"class":4500},[36,24359,54],{"class":53},[36,24361,10443],{"class":57},[36,24363,3059],{"class":53},[36,24365,24366],{"class":57},"\"安卓\"",[36,24368,5251],{"class":53},[36,24370,24371,24373,24375,24378,24380,24383,24385],{"class":38,"line":10499},[36,24372,4089],{"class":53},[36,24374,3717],{"class":114},[36,24376,24377],{"class":53},"p.Name",[36,24379,3717],{"class":114},[36,24381,24382],{"class":57},"\"拿着：\"",[36,24384,3717],{"class":114},[36,24386,24387],{"class":53},"p.m_phone.m_PName;\n",[36,24389,24390],{"class":38,"line":10504},[36,24391,4103],{"class":53},[36,24393,24394,24396,24398],{"class":38,"line":10510},[36,24395,232],{"class":114},[36,24397,4510],{"class":4500},[36,24399,4513],{"class":53},[36,24401,24402],{"class":38,"line":10537},[36,24403,4084],{"class":53},[36,24405,24406,24408],{"class":38,"line":10542},[36,24407,8161],{"class":4500},[36,24409,8164],{"class":53},[36,24411,24412],{"class":38,"line":10548},[36,24413,4103],{"class":53},[19,24415,695],{},[26,24417,24419],{"className":2693,"code":24418,"language":2695,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,24420,24421,24426],{"__ignoreMap":31},[36,24422,24423],{"class":38,"line":39},[36,24424,24425],{"class":42},"    \u002F\u002F不需要写这个：\n",[36,24427,24428],{"class":38,"line":46},[36,24429,24430],{"class":42},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24432,24433],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,24435,24437],{"className":2693,"code":24436,"language":2695,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,24438,24439],{"__ignoreMap":31},[36,24440,24441,24443,24446,24448,24451,24454],{"class":38,"line":39},[36,24442,21564],{"class":4500},[36,24444,24445],{"class":53},"(string name.string pname):",[36,24447,17530],{"class":4500},[36,24449,24450],{"class":53},"(name),",[36,24452,24453],{"class":4500},"m_phone",[36,24455,24456],{"class":53},"(pname) {}\n",[19,24458,24459,24460,115,24463],{},"采用的是隐式转换法，实际为如下：\n",[33,24461,24462],{},"m_phone(pname)",[33,24464,24465],{},"Phone m_phone=pname",[19,24467,24468,24471],{},[2839,24469,24470],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24473,24474],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[997,24476,24478],{"id":24477},"_828静态对象","8.2.8静态对象",[19,24480,24481],{},"静态对象在成员对象前static，称为静态对象",[19,24483,24484],{},"静态对象分为两类：",[433,24486,24487],{},[436,24488,24489],{},"静态成员变量",[3680,24491,24492,24495,24498],{},[436,24493,24494],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[436,24496,24497],{},"②在编译阶段分配内存",[436,24499,24500],{},"③类内声明，类外初始化",[433,24502,24503],{"start":46},[436,24504,24505],{},"静态成员函数",[3680,24507,24508,24511],{},[436,24509,24510],{},"①所有对象共享同一个函数",[436,24512,24513],{},"②静态成员函数只能访问静态成员变量",[24515,24516,24518],"h4",{"id":24517},"_8281静态成员变量","8.2.8.1静态成员变量",[26,24520,24522],{"className":2693,"code":24521,"language":2695,"meta":31,"style":31},"#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",[33,24523,24524,24530,24540,24546,24550,24554,24559,24564,24569,24577,24581,24585,24589,24597,24601,24605,24610,24623,24627,24635,24639,24645],{"__ignoreMap":31},[36,24525,24526,24528],{"class":38,"line":39},[36,24527,4486],{"class":114},[36,24529,4489],{"class":57},[36,24531,24532,24534,24536,24538],{"class":38,"line":46},[36,24533,4494],{"class":114},[36,24535,4497],{"class":114},[36,24537,4501],{"class":4500},[36,24539,3833],{"class":53},[36,24541,24542,24544],{"class":38,"line":82},[36,24543,519],{"class":114},[36,24545,17690],{"class":4500},[36,24547,24548],{"class":38,"line":88},[36,24549,4084],{"class":53},[36,24551,24552],{"class":38,"line":195},[36,24553,17237],{"class":114},[36,24555,24556],{"class":38,"line":1517},[36,24557,24558],{"class":42},"    \u002F\u002F非静态成员变量\n",[36,24560,24561],{"class":38,"line":2421},[36,24562,24563],{"class":42},"    \u002F\u002F int m_A;\n",[36,24565,24566],{"class":38,"line":2446},[36,24567,24568],{"class":42},"    \u002F\u002F定义静态成员变量\n",[36,24570,24571,24573,24575],{"class":38,"line":2469},[36,24572,13543],{"class":114},[36,24574,837],{"class":114},[36,24576,23910],{"class":53},[36,24578,24579],{"class":38,"line":2492},[36,24580,546],{"emptyLinePlaceholder":545},[36,24582,24583],{"class":38,"line":4150},[36,24584,546],{"emptyLinePlaceholder":545},[36,24586,24587],{"class":38,"line":4155},[36,24588,6526],{"class":53},[36,24590,24591,24593,24595],{"class":38,"line":4161},[36,24592,7892],{"class":114},[36,24594,8116],{"class":4500},[36,24596,4513],{"class":53},[36,24598,24599],{"class":38,"line":4166},[36,24600,4084],{"class":53},[36,24602,24603],{"class":38,"line":4180},[36,24604,17832],{"class":53},[36,24606,24607],{"class":38,"line":4185},[36,24608,24609],{"class":42},"    \u002F\u002F输出类成员变量这块内存\n",[36,24611,24612,24614,24616,24619,24621],{"class":38,"line":4191},[36,24613,4089],{"class":53},[36,24615,3717],{"class":114},[36,24617,24618],{"class":53},"p.m_A",[36,24620,3717],{"class":114},[36,24622,3739],{"class":53},[36,24624,24625],{"class":38,"line":4212},[36,24626,4103],{"class":53},[36,24628,24629,24631,24633],{"class":38,"line":4217},[36,24630,232],{"class":114},[36,24632,4510],{"class":4500},[36,24634,4513],{"class":53},[36,24636,24637],{"class":38,"line":4231},[36,24638,4084],{"class":53},[36,24640,24641,24643],{"class":38,"line":4236},[36,24642,8161],{"class":4500},[36,24644,4513],{"class":53},[36,24646,24647],{"class":38,"line":4264},[36,24648,4103],{"class":53},[19,24650,24651],{},"此时输出是报错的：无法解析外部命令",[19,24653,24654],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,24656,24658],{"className":2693,"code":24657,"language":2695,"meta":31,"style":31},"#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",[33,24659,24660,24666,24676,24682,24686,24690,24695,24703,24707,24712,24727,24735,24739,24743,24748,24753,24765,24770,24781,24786,24791,24804,24808,24816,24820,24826],{"__ignoreMap":31},[36,24661,24662,24664],{"class":38,"line":39},[36,24663,4486],{"class":114},[36,24665,4489],{"class":57},[36,24667,24668,24670,24672,24674],{"class":38,"line":46},[36,24669,4494],{"class":114},[36,24671,4497],{"class":114},[36,24673,4501],{"class":4500},[36,24675,3833],{"class":53},[36,24677,24678,24680],{"class":38,"line":82},[36,24679,519],{"class":114},[36,24681,17690],{"class":4500},[36,24683,24684],{"class":38,"line":88},[36,24685,4084],{"class":53},[36,24687,24688],{"class":38,"line":195},[36,24689,17237],{"class":114},[36,24691,24692],{"class":38,"line":1517},[36,24693,24694],{"class":42},"    \u002F\u002F类内声明\n",[36,24696,24697,24699,24701],{"class":38,"line":2421},[36,24698,13543],{"class":114},[36,24700,837],{"class":114},[36,24702,23910],{"class":53},[36,24704,24705],{"class":38,"line":2446},[36,24706,6526],{"class":53},[36,24708,24709],{"class":38,"line":2469},[36,24710,24711],{"class":42},"\u002F\u002F类外初始化\n",[36,24713,24714,24716,24718,24721,24723,24725],{"class":38,"line":2492},[36,24715,232],{"class":114},[36,24717,18088],{"class":4500},[36,24719,24720],{"class":53},"::m_A",[36,24722,115],{"class":114},[36,24724,1317],{"class":49},[36,24726,3833],{"class":53},[36,24728,24729,24731,24733],{"class":38,"line":4150},[36,24730,7892],{"class":114},[36,24732,8116],{"class":4500},[36,24734,4513],{"class":53},[36,24736,24737],{"class":38,"line":4155},[36,24738,4084],{"class":53},[36,24740,24741],{"class":38,"line":4161},[36,24742,17832],{"class":53},[36,24744,24745],{"class":38,"line":4166},[36,24746,24747],{"class":42},"    \u002F\u002F访问变量的原内存空间\n",[36,24749,24750],{"class":38,"line":4180},[36,24751,24752],{"class":42},"    \u002F\u002F100\n",[36,24754,24755,24757,24759,24761,24763],{"class":38,"line":4185},[36,24756,4089],{"class":53},[36,24758,3717],{"class":114},[36,24760,24618],{"class":53},[36,24762,3717],{"class":114},[36,24764,3739],{"class":53},[36,24766,24767],{"class":38,"line":4191},[36,24768,24769],{"class":53},"    Person p2;\n",[36,24771,24772,24775,24777,24779],{"class":38,"line":4212},[36,24773,24774],{"class":53},"    p2.m_A",[36,24776,115],{"class":114},[36,24778,4259],{"class":49},[36,24780,3833],{"class":53},[36,24782,24783],{"class":38,"line":4217},[36,24784,24785],{"class":42},"    \u002F\u002F继续访问这片空间\n",[36,24787,24788],{"class":38,"line":4231},[36,24789,24790],{"class":42},"    \u002F\u002F200\n",[36,24792,24793,24795,24797,24800,24802],{"class":38,"line":4236},[36,24794,4089],{"class":53},[36,24796,3717],{"class":114},[36,24798,24799],{"class":53},"p2.m_A",[36,24801,3717],{"class":114},[36,24803,3739],{"class":53},[36,24805,24806],{"class":38,"line":4264},[36,24807,4103],{"class":53},[36,24809,24810,24812,24814],{"class":38,"line":4269},[36,24811,232],{"class":114},[36,24813,4510],{"class":4500},[36,24815,4513],{"class":53},[36,24817,24818],{"class":38,"line":4286},[36,24819,4084],{"class":53},[36,24821,24822,24824],{"class":38,"line":4291},[36,24823,8161],{"class":4500},[36,24825,8164],{"class":53},[36,24827,24828],{"class":38,"line":4296},[36,24829,4103],{"class":53},[19,24831,24832],{},[2839,24833,24834],{},"静态变量的访问",[26,24836,24838],{"className":2693,"code":24837,"language":2695,"meta":31,"style":31},"#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",[33,24839,24840,24846,24856,24862,24866,24870,24874,24882,24886,24891,24899,24903,24907,24921,24936,24944,24948,24953,24958,24963,24968,24980,24985,24990,25004,25021,25025,25033,25037,25043],{"__ignoreMap":31},[36,24841,24842,24844],{"class":38,"line":39},[36,24843,4486],{"class":114},[36,24845,4489],{"class":57},[36,24847,24848,24850,24852,24854],{"class":38,"line":46},[36,24849,4494],{"class":114},[36,24851,4497],{"class":114},[36,24853,4501],{"class":4500},[36,24855,3833],{"class":53},[36,24857,24858,24860],{"class":38,"line":82},[36,24859,519],{"class":114},[36,24861,17690],{"class":4500},[36,24863,24864],{"class":38,"line":88},[36,24865,4084],{"class":53},[36,24867,24868],{"class":38,"line":195},[36,24869,17237],{"class":114},[36,24871,24872],{"class":38,"line":1517},[36,24873,24694],{"class":42},[36,24875,24876,24878,24880],{"class":38,"line":2421},[36,24877,13543],{"class":114},[36,24879,837],{"class":114},[36,24881,23910],{"class":53},[36,24883,24884],{"class":38,"line":2446},[36,24885,17741],{"class":114},[36,24887,24888],{"class":38,"line":2469},[36,24889,24890],{"class":42},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,24892,24893,24895,24897],{"class":38,"line":2492},[36,24894,13543],{"class":114},[36,24896,837],{"class":114},[36,24898,23917],{"class":53},[36,24900,24901],{"class":38,"line":4150},[36,24902,6526],{"class":53},[36,24904,24905],{"class":38,"line":4155},[36,24906,24711],{"class":42},[36,24908,24909,24911,24913,24915,24917,24919],{"class":38,"line":4161},[36,24910,232],{"class":114},[36,24912,18088],{"class":4500},[36,24914,24720],{"class":53},[36,24916,115],{"class":114},[36,24918,1317],{"class":49},[36,24920,3833],{"class":53},[36,24922,24923,24925,24927,24930,24932,24934],{"class":38,"line":4166},[36,24924,232],{"class":114},[36,24926,18088],{"class":4500},[36,24928,24929],{"class":53},"::m_B",[36,24931,115],{"class":114},[36,24933,3376],{"class":49},[36,24935,3833],{"class":53},[36,24937,24938,24940,24942],{"class":38,"line":4180},[36,24939,7892],{"class":114},[36,24941,8185],{"class":4500},[36,24943,4513],{"class":53},[36,24945,24946],{"class":38,"line":4185},[36,24947,4084],{"class":53},[36,24949,24950],{"class":38,"line":4191},[36,24951,24952],{"class":42},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,24954,24955],{"class":38,"line":4212},[36,24956,24957],{"class":42},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,24959,24960],{"class":38,"line":4217},[36,24961,24962],{"class":42},"    \u002F\u002F1.通过对象进行访问\n",[36,24964,24965],{"class":38,"line":4231},[36,24966,24967],{"class":53},"    Person p;  \n",[36,24969,24970,24972,24974,24976,24978],{"class":38,"line":4236},[36,24971,4089],{"class":53},[36,24973,3717],{"class":114},[36,24975,24618],{"class":53},[36,24977,3717],{"class":114},[36,24979,3739],{"class":53},[36,24981,24982],{"class":38,"line":4264},[36,24983,24984],{"class":42},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,24986,24987],{"class":38,"line":4269},[36,24988,24989],{"class":42},"    \u002F\u002F2.通过类名进行访问\n",[36,24991,24992,24994,24996,24998,25000,25002],{"class":38,"line":4286},[36,24993,4089],{"class":53},[36,24995,3717],{"class":114},[36,24997,21564],{"class":4500},[36,24999,24720],{"class":53},[36,25001,3717],{"class":114},[36,25003,3739],{"class":53},[36,25005,25006,25008,25010,25012,25014,25016,25018],{"class":38,"line":4291},[36,25007,4089],{"class":53},[36,25009,3717],{"class":114},[36,25011,21564],{"class":4500},[36,25013,24929],{"class":53},[36,25015,3717],{"class":114},[36,25017,3781],{"class":53},[36,25019,25020],{"class":42}," \u002F\u002F没有访问权限，报错\n",[36,25022,25023],{"class":38,"line":4296},[36,25024,4103],{"class":53},[36,25026,25027,25029,25031],{"class":38,"line":4301},[36,25028,232],{"class":114},[36,25030,4510],{"class":4500},[36,25032,4513],{"class":53},[36,25034,25035],{"class":38,"line":4315},[36,25036,4084],{"class":53},[36,25038,25039,25041],{"class":38,"line":4320},[36,25040,8230],{"class":4500},[36,25042,8164],{"class":53},[36,25044,25045],{"class":38,"line":5109},[36,25046,4103],{"class":53},[24515,25048,25050],{"id":25049},"_8282静态成员函数","8.2.8.2静态成员函数",[19,25052,25053],{},"1.静态成员函数定义与访问",[26,25055,25057],{"className":2693,"code":25056,"language":2695,"meta":31,"style":31},"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",[33,25058,25059,25065,25069,25073,25078,25089,25093,25107,25111,25115,25123,25127,25132,25137,25141,25149,25154,25164],{"__ignoreMap":31},[36,25060,25061,25063],{"class":38,"line":39},[36,25062,519],{"class":114},[36,25064,17690],{"class":4500},[36,25066,25067],{"class":38,"line":46},[36,25068,4084],{"class":53},[36,25070,25071],{"class":38,"line":82},[36,25072,17237],{"class":114},[36,25074,25075],{"class":38,"line":88},[36,25076,25077],{"class":42},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,25079,25080,25082,25085,25087],{"class":38,"line":195},[36,25081,13543],{"class":114},[36,25083,25084],{"class":114}," void",[36,25086,13908],{"class":4500},[36,25088,4513],{"class":53},[36,25090,25091],{"class":38,"line":1517},[36,25092,4567],{"class":53},[36,25094,25095,25098,25100,25103,25105],{"class":38,"line":2421},[36,25096,25097],{"class":53},"        coout",[36,25099,3717],{"class":114},[36,25101,25102],{"class":57},"\"静态成员函数的调用\"",[36,25104,3717],{"class":114},[36,25106,3739],{"class":53},[36,25108,25109],{"class":38,"line":2446},[36,25110,4721],{"class":53},[36,25112,25113],{"class":38,"line":2469},[36,25114,6526],{"class":53},[36,25116,25117,25119,25121],{"class":38,"line":2492},[36,25118,7892],{"class":114},[36,25120,8116],{"class":4500},[36,25122,4513],{"class":53},[36,25124,25125],{"class":38,"line":4150},[36,25126,4084],{"class":53},[36,25128,25129],{"class":38,"line":4155},[36,25130,25131],{"class":42},"    \u002F\u002F静态成员函数的调用方式:\n",[36,25133,25134],{"class":38,"line":4161},[36,25135,25136],{"class":42},"    \u002F\u002F1.通过对象访问\n",[36,25138,25139],{"class":38,"line":4166},[36,25140,17832],{"class":53},[36,25142,25143,25145,25147],{"class":38,"line":4180},[36,25144,18384],{"class":53},[36,25146,14074],{"class":4500},[36,25148,8164],{"class":53},[36,25150,25151],{"class":38,"line":4185},[36,25152,25153],{"class":42},"    \u002F\u002F2.通过类名访问\n",[36,25155,25156,25158,25160,25162],{"class":38,"line":4191},[36,25157,21037],{"class":4500},[36,25159,20250],{"class":53},[36,25161,14074],{"class":4500},[36,25163,8164],{"class":53},[36,25165,25166],{"class":38,"line":4212},[36,25167,4103],{"class":53},[433,25169,25170],{"start":46},[436,25171,25172],{},"静态成员函数只能访问静态成员变量",[26,25174,25176],{"className":2693,"code":25175,"language":2695,"meta":31,"style":31},"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",[33,25177,25178,25184,25188,25192,25196,25206,25210,25224,25229,25241,25245,25256,25266,25270,25274,25278,25288,25292,25305,25309,25313,25317,25321,25335,25343,25347,25351,25355,25359,25367,25371,25381,25386,25390,25398,25402,25408],{"__ignoreMap":31},[36,25179,25180,25182],{"class":38,"line":39},[36,25181,519],{"class":114},[36,25183,17690],{"class":4500},[36,25185,25186],{"class":38,"line":46},[36,25187,4084],{"class":53},[36,25189,25190],{"class":38,"line":82},[36,25191,17237],{"class":114},[36,25193,25194],{"class":38,"line":88},[36,25195,25077],{"class":42},[36,25197,25198,25200,25202,25204],{"class":38,"line":195},[36,25199,13543],{"class":114},[36,25201,25084],{"class":114},[36,25203,13908],{"class":4500},[36,25205,4513],{"class":53},[36,25207,25208],{"class":38,"line":1517},[36,25209,4567],{"class":53},[36,25211,25212,25215,25217,25219,25221],{"class":38,"line":2421},[36,25213,25214],{"class":53},"        m_A",[36,25216,115],{"class":114},[36,25218,166],{"class":49},[36,25220,2752],{"class":53},[36,25222,25223],{"class":42}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,25225,25226],{"class":38,"line":2446},[36,25227,25228],{"class":42},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,25230,25231,25233,25235,25237,25239],{"class":38,"line":2469},[36,25232,25097],{"class":53},[36,25234,3717],{"class":114},[36,25236,25102],{"class":57},[36,25238,3717],{"class":114},[36,25240,3739],{"class":53},[36,25242,25243],{"class":38,"line":2492},[36,25244,4721],{"class":53},[36,25246,25247,25249,25251,25253],{"class":38,"line":4150},[36,25248,13543],{"class":114},[36,25250,837],{"class":114},[36,25252,17967],{"class":53},[36,25254,25255],{"class":42}," \u002F\u002F静态成员变量\n",[36,25257,25258,25260,25263],{"class":38,"line":4155},[36,25259,4522],{"class":114},[36,25261,25262],{"class":53}," m_B;",[36,25264,25265],{"class":42}," \u002F\u002F非静态成员变量\n",[36,25267,25268],{"class":38,"line":4161},[36,25269,546],{"emptyLinePlaceholder":545},[36,25271,25272],{"class":38,"line":4166},[36,25273,17741],{"class":114},[36,25275,25276],{"class":38,"line":4180},[36,25277,24890],{"class":42},[36,25279,25280,25282,25284,25286],{"class":38,"line":4185},[36,25281,13543],{"class":114},[36,25283,25084],{"class":114},[36,25285,16140],{"class":4500},[36,25287,4513],{"class":53},[36,25289,25290],{"class":38,"line":4191},[36,25291,4567],{"class":53},[36,25293,25294,25296,25298,25301,25303],{"class":38,"line":4212},[36,25295,5982],{"class":53},[36,25297,3717],{"class":114},[36,25299,25300],{"class":57},"\"这是私有权限下的静态函数调用\"",[36,25302,3717],{"class":114},[36,25304,3739],{"class":53},[36,25306,25307],{"class":38,"line":4217},[36,25308,4721],{"class":53},[36,25310,25311],{"class":38,"line":4231},[36,25312,546],{"emptyLinePlaceholder":545},[36,25314,25315],{"class":38,"line":4236},[36,25316,546],{"emptyLinePlaceholder":545},[36,25318,25319],{"class":38,"line":4264},[36,25320,6526],{"class":53},[36,25322,25323,25325,25327,25329,25331,25333],{"class":38,"line":4269},[36,25324,232],{"class":114},[36,25326,18088],{"class":4500},[36,25328,24720],{"class":53},[36,25330,115],{"class":114},[36,25332,713],{"class":49},[36,25334,3833],{"class":53},[36,25336,25337,25339,25341],{"class":38,"line":4286},[36,25338,7892],{"class":114},[36,25340,8116],{"class":4500},[36,25342,4513],{"class":53},[36,25344,25345],{"class":38,"line":4291},[36,25346,4084],{"class":53},[36,25348,25349],{"class":38,"line":4296},[36,25350,25131],{"class":42},[36,25352,25353],{"class":38,"line":4301},[36,25354,25136],{"class":42},[36,25356,25357],{"class":38,"line":4315},[36,25358,17832],{"class":53},[36,25360,25361,25363,25365],{"class":38,"line":4320},[36,25362,18384],{"class":53},[36,25364,14074],{"class":4500},[36,25366,8164],{"class":53},[36,25368,25369],{"class":38,"line":5109},[36,25370,25153],{"class":42},[36,25372,25373,25375,25377,25379],{"class":38,"line":5123},[36,25374,21037],{"class":4500},[36,25376,20250],{"class":53},[36,25378,14074],{"class":4500},[36,25380,8164],{"class":53},[36,25382,25383],{"class":38,"line":5131},[36,25384,25385],{"class":42},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,25387,25388],{"class":38,"line":5136},[36,25389,4103],{"class":53},[36,25391,25392,25394,25396],{"class":38,"line":5142},[36,25393,232],{"class":114},[36,25395,4510],{"class":4500},[36,25397,4513],{"class":53},[36,25399,25400],{"class":38,"line":5148},[36,25401,4084],{"class":53},[36,25403,25404,25406],{"class":38,"line":5153},[36,25405,8161],{"class":4500},[36,25407,8164],{"class":53},[36,25409,25410],{"class":38,"line":10475},[36,25411,4103],{"class":53},[997,25413,25415],{"id":25414},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24515,25417,25419],{"id":25418},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25421,25422],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25424,25425],{},"只有非静态成员变量才属于类的对象上",[25427,25428,25430],"h5",{"id":25429},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,25432,25434],{"className":2693,"code":25433,"language":2695,"meta":31,"style":31},"#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",[33,25435,25436,25443,25453,25459,25463,25467,25471,25479,25483,25487,25510,25514,25522,25526,25532],{"__ignoreMap":31},[36,25437,25438,25440],{"class":38,"line":39},[36,25439,4486],{"class":114},[36,25441,25442],{"class":57},"\u003Ciostraem>\n",[36,25444,25445,25447,25449,25451],{"class":38,"line":46},[36,25446,4494],{"class":114},[36,25448,4497],{"class":114},[36,25450,4501],{"class":4500},[36,25452,3833],{"class":53},[36,25454,25455,25457],{"class":38,"line":82},[36,25456,519],{"class":114},[36,25458,17690],{"class":4500},[36,25460,25461],{"class":38,"line":88},[36,25462,4084],{"class":53},[36,25464,25465],{"class":38,"line":195},[36,25466,546],{"emptyLinePlaceholder":545},[36,25468,25469],{"class":38,"line":1517},[36,25470,6526],{"class":53},[36,25472,25473,25475,25477],{"class":38,"line":2421},[36,25474,7892],{"class":114},[36,25476,8116],{"class":4500},[36,25478,4513],{"class":53},[36,25480,25481],{"class":38,"line":2446},[36,25482,4084],{"class":53},[36,25484,25485],{"class":38,"line":2469},[36,25486,17832],{"class":53},[36,25488,25489,25491,25493,25496,25498,25501,25503,25505,25507],{"class":38,"line":2492},[36,25490,4089],{"class":53},[36,25492,3717],{"class":114},[36,25494,25495],{"class":57},"\"size of p=\"",[36,25497,3717],{"class":114},[36,25499,25500],{"class":4500},"sizeoif",[36,25502,9066],{"class":53},[36,25504,3717],{"class":114},[36,25506,3781],{"class":53},[36,25508,25509],{"class":42}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,25511,25512],{"class":38,"line":4150},[36,25513,4103],{"class":53},[36,25515,25516,25518,25520],{"class":38,"line":4155},[36,25517,232],{"class":114},[36,25519,4510],{"class":4500},[36,25521,4513],{"class":53},[36,25523,25524],{"class":38,"line":4161},[36,25525,4084],{"class":53},[36,25527,25528,25530],{"class":38,"line":4166},[36,25529,8161],{"class":4500},[36,25531,8164],{"class":53},[36,25533,25534],{"class":38,"line":4180},[36,25535,4103],{"class":53},[19,25537,25538],{},"输出结果为：size of p=1",[19,25540,25541],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25543,25544],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25427,25546,25548],{"id":25547},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,25550,25552],{"className":2693,"code":25551,"language":2695,"meta":31,"style":31},"#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",[33,25553,25554,25560,25570,25578,25582,25591,25595,25603,25607,25611,25630,25634,25638,25646,25650,25656],{"__ignoreMap":31},[36,25555,25556,25558],{"class":38,"line":39},[36,25557,4486],{"class":114},[36,25559,4489],{"class":57},[36,25561,25562,25564,25566,25568],{"class":38,"line":46},[36,25563,4494],{"class":114},[36,25565,4497],{"class":114},[36,25567,4501],{"class":4500},[36,25569,3833],{"class":53},[36,25571,25572,25574,25576],{"class":38,"line":82},[36,25573,519],{"class":114},[36,25575,18088],{"class":4500},[36,25577,5206],{"class":53},[36,25579,25580],{"class":38,"line":88},[36,25581,4084],{"class":53},[36,25583,25584,25586,25588],{"class":38,"line":195},[36,25585,4522],{"class":114},[36,25587,17967],{"class":53},[36,25589,25590],{"class":42},"\u002F\u002F非静态成员变量\n",[36,25592,25593],{"class":38,"line":1517},[36,25594,6526],{"class":53},[36,25596,25597,25599,25601],{"class":38,"line":2421},[36,25598,7892],{"class":114},[36,25600,8116],{"class":4500},[36,25602,4513],{"class":53},[36,25604,25605],{"class":38,"line":2446},[36,25606,4084],{"class":53},[36,25608,25609],{"class":38,"line":2469},[36,25610,17832],{"class":53},[36,25612,25613,25615,25617,25619,25621,25623,25625,25627],{"class":38,"line":2492},[36,25614,4089],{"class":53},[36,25616,3717],{"class":114},[36,25618,25495],{"class":57},[36,25620,3910],{"class":114},[36,25622,9066],{"class":53},[36,25624,3717],{"class":114},[36,25626,3781],{"class":53},[36,25628,25629],{"class":42}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,25631,25632],{"class":38,"line":4150},[36,25633,546],{"emptyLinePlaceholder":545},[36,25635,25636],{"class":38,"line":4155},[36,25637,4103],{"class":53},[36,25639,25640,25642,25644],{"class":38,"line":4161},[36,25641,232],{"class":114},[36,25643,4510],{"class":4500},[36,25645,4513],{"class":53},[36,25647,25648],{"class":38,"line":4166},[36,25649,4084],{"class":53},[36,25651,25652,25654],{"class":38,"line":4180},[36,25653,8161],{"class":4500},[36,25655,8164],{"class":53},[36,25657,25658],{"class":38,"line":4185},[36,25659,4103],{"class":53},[19,25661,25662],{},"输出结果：size of p=4",[19,25664,25665],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[433,25667,25668],{},[436,25669,25670],{},"如果加上非静态成员变量，Person类修改如下",[26,25672,25674],{"className":2693,"code":25673,"language":2695,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,25675,25676,25682,25686,25692,25700,25704,25709],{"__ignoreMap":31},[36,25677,25678,25680],{"class":38,"line":39},[36,25679,519],{"class":114},[36,25681,17690],{"class":4500},[36,25683,25684],{"class":38,"line":46},[36,25685,4084],{"class":53},[36,25687,25688,25690],{"class":38,"line":82},[36,25689,4522],{"class":114},[36,25691,23910],{"class":53},[36,25693,25694,25696,25698],{"class":38,"line":88},[36,25695,13543],{"class":114},[36,25697,837],{"class":114},[36,25699,23917],{"class":53},[36,25701,25702],{"class":38,"line":195},[36,25703,6526],{"class":53},[36,25705,25706],{"class":38,"line":1517},[36,25707,25708],{"class":42},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,25710,25711,25713,25715,25717,25719,25721],{"class":38,"line":2421},[36,25712,232],{"class":114},[36,25714,18088],{"class":4500},[36,25716,24929],{"class":53},[36,25718,115],{"class":114},[36,25720,713],{"class":49},[36,25722,3833],{"class":53},[19,25724,25725],{},"输出结果：4",[19,25727,25728],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[433,25730,25731],{"start":46},[436,25732,25733],{},"加上非静态成员函数",[26,25735,25737],{"className":2693,"code":25736,"language":2695,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,25738,25739,25746,25750,25756,25764,25768,25772,25776],{"__ignoreMap":31},[36,25740,25741,25743],{"class":38,"line":39},[36,25742,519],{"class":114},[36,25744,25745],{"class":4500},"  Person\n",[36,25747,25748],{"class":38,"line":46},[36,25749,4084],{"class":53},[36,25751,25752,25754],{"class":38,"line":82},[36,25753,4522],{"class":114},[36,25755,23910],{"class":53},[36,25757,25758,25760,25762],{"class":38,"line":88},[36,25759,17429],{"class":114},[36,25761,13908],{"class":4500},[36,25763,4513],{"class":53},[36,25765,25766],{"class":38,"line":195},[36,25767,4567],{"class":53},[36,25769,25770],{"class":38,"line":1517},[36,25771,546],{"emptyLinePlaceholder":545},[36,25773,25774],{"class":38,"line":2421},[36,25775,4721],{"class":53},[36,25777,25778],{"class":38,"line":2446},[36,25779,6526],{"class":53},[19,25781,25782],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[433,25784,25785],{"start":82},[436,25786,25787],{},"加上静态成员函数",[26,25789,25791],{"className":2693,"code":25790,"language":2695,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,25792,25793,25799,25803,25809,25817,25821,25825,25829,25840,25844,25848,25852],{"__ignoreMap":31},[36,25794,25795,25797],{"class":38,"line":39},[36,25796,519],{"class":114},[36,25798,25745],{"class":4500},[36,25800,25801],{"class":38,"line":46},[36,25802,4084],{"class":53},[36,25804,25805,25807],{"class":38,"line":82},[36,25806,4522],{"class":114},[36,25808,23910],{"class":53},[36,25810,25811,25813,25815],{"class":38,"line":88},[36,25812,17429],{"class":114},[36,25814,13908],{"class":4500},[36,25816,4513],{"class":53},[36,25818,25819],{"class":38,"line":195},[36,25820,4567],{"class":53},[36,25822,25823],{"class":38,"line":1517},[36,25824,546],{"emptyLinePlaceholder":545},[36,25826,25827],{"class":38,"line":2421},[36,25828,4721],{"class":53},[36,25830,25831,25833,25835,25838],{"class":38,"line":2446},[36,25832,13543],{"class":114},[36,25834,25084],{"class":114},[36,25836,25837],{"class":4500}," func1",[36,25839,4513],{"class":53},[36,25841,25842],{"class":38,"line":2469},[36,25843,4567],{"class":53},[36,25845,25846],{"class":38,"line":2492},[36,25847,546],{"emptyLinePlaceholder":545},[36,25849,25850],{"class":38,"line":4150},[36,25851,4721],{"class":53},[36,25853,25854],{"class":38,"line":4155},[36,25855,6526],{"class":53},[19,25857,25725],{},[19,25859,25860],{},"解释：静态成员函数也不属于类上",[2602,25862,10201],{},{"title":31,"searchDepth":46,"depth":46,"links":25864},[25865,25871],{"id":17167,"depth":46,"text":17168,"children":25866},[25867,25868,25869,25870],{"id":17171,"depth":82,"text":17172},{"id":17893,"depth":82,"text":17894},{"id":18065,"depth":82,"text":18066},{"id":18523,"depth":82,"text":18524},{"id":20895,"depth":46,"text":20896,"children":25872},[25873,25874,25875,25876,25877,25878,25879,25880,25881],{"id":20907,"depth":82,"text":20908},{"id":21200,"depth":82,"text":21201},{"id":21691,"depth":82,"text":21692},{"id":22788,"depth":82,"text":22789},{"id":23211,"depth":82,"text":23212},{"id":23690,"depth":82,"text":23691},{"id":24064,"depth":82,"text":24065},{"id":24477,"depth":82,"text":24478},{"id":25414,"depth":82,"text":25415},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17132,"description":25882},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25889,"title":2695,"body":25890,"description":2630,"extension":2631,"meta":25894,"navigation":545,"path":25896,"seo":25897,"stem":25898,"__hash__":25899},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25891,"toc":25892},[],{"title":31,"searchDepth":46,"depth":46,"links":25893},[],{"category":25895},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2695,"description":2630},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25901,"title":25902,"body":25903,"description":31,"extension":2631,"meta":26493,"navigation":545,"path":26494,"seo":26495,"stem":26496,"__hash__":26497},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25904,"toc":26475},[25905,25908,25912,25915,25918,25921,25939,25944,25947,25950,25953,25956,25961,25964,25969,25972,25975,25979,25982,25985,25991,25994,26012,26016,26020,26023,26028,26031,26035,26038,26051,26054,26058,26061,26064,26067,26092,26095,26104,26115,26130,26162,26166,26173,26181,26185,26188,26191,26196,26200,26203,26206,26211,26214,26218,26221,26224,26229,26232,26236,26241,26245,26311,26315,26318,26321,26324,26327,26330,26336,26357,26360,26374,26383,26387,26390,26393,26398,26401,26406,26411,26414,26417,26422,26427,26430,26435,26440,26443,26448,26453,26456,26459,26464,26467,26472],[10,25906,25902],{"id":25907},"_1强化学习基本认识",[14,25909,25911],{"id":25910},"_11什么是强化学习","1.1.什么是强化学习",[19,25913,25914],{},"强化学习有两部分组成：智能体和环境；",[19,25916,25917],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25919,25920],{},"强化学习与监督学习的区别:",[433,25922,25923,25926,25929,25932],{},[436,25924,25925],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[436,25927,25928],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[436,25930,25931],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[436,25933,25934,25935,25938],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2839,25936,25937],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25940,25941],{},[4000,25942],{"alt":31,"src":25943},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25945,25946],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25948,25949],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25951,25952],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25954,25955],{},"获取奖励",[19,25957,25958],{},[4000,25959],{"alt":31,"src":25960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25962,25963],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25965,25966],{},[4000,25967],{"alt":31,"src":25968},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25970,25971],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25973,25974],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25976,25978],{"id":25977},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25980,25981],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25983,25984],{},"具身智能中的应用",[19,25986,25987,25990],{},[2839,25988,25989],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25992,25993],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25995,25996,25997,26000,26001,26004,26005,26008,26009],{},"机器人是",[2839,25998,25999],{},"躯体","，深度学习是",[2839,26002,26003],{},"神经元****网络","，VLA是",[2839,26006,26007],{},"通用的行为逻辑","，而强化学习是",[2839,26010,26011],{},"教练",[14,26013,26015],{"id":26014},"_13序列决策","1.3.序列决策",[997,26017,26019],{"id":26018},"_131智能体与环境","1.3.1.智能体与环境",[19,26021,26022],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,26024,26025],{},[4000,26026],{"alt":31,"src":26027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,26029,26030],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[997,26032,26034],{"id":26033},"_132奖励","1.3.2.奖励",[19,26036,26037],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,26039,26040,26041,26050],{},"取某个策略的表现如何。强化学习的目的就是",[2839,26042,26043,26044,26049],{},"最大化",[2839,26045,26046],{},[2839,26047,26048],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,26052,26053],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[997,26055,26057],{"id":26056},"_133序列决策","1.3.3.序列决策",[19,26059,26060],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,26062,26063],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,26065,26066],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,26068,26069,26073,26074,26076,26077,26079,26080,26082,26083,16317,26086,16317,26089],{},[26070,26071,26072],"em",{},"Ht"," = ",[26070,26075,3272],{},"1*, a",[26070,26078,707],{},", r",[26070,26081,707],{},", . . . ,* ",[26070,26084,26085],{},"ot",[26070,26087,26088],{},", at ,",[26070,26090,26091],{},"rt",[19,26093,26094],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,26096,26097,26073,26100,4196,26102,3110],{},[26070,26098,26099],{},"st",[26070,26101,2060],{},[26070,26103,26072],{},[19,26105,26106,26107,26110,26111,26114],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2839,26108,26109],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2839,26112,26113],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,26116,26117,26118,26121,26122,26125,26126,26129],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2839,26119,26120],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2839,26123,26124],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[26070,26127,26128],{},"S, A, T, R, Ω, O, γ",")。",[19,26131,26132,26133,26135,26136,26138,26139,54,26141,26144,26145,26147,26148,54,26151,26154,26155,26157,26158,26161],{},"其中 ",[26070,26134,3365],{}," 表示状态空间，为隐变量，",[26070,26137,2917],{}," 为动作空间，",[26070,26140,3390],{},[26070,26142,26143],{},"s ′ |s, a",") 为状态转移概率，",[26070,26146,3340],{}," 为奖励函数，",[26070,26149,26150],{},"Ω",[26070,26152,26153],{},"o|s, a",") 为观测概率，",[26070,26156,3266],{}," 为观测空间，",[26070,26159,26160],{},"γ"," 为折扣因子。",[14,26163,26165],{"id":26164},"_14动作空间","1.4.动作空间",[19,26167,26168,26169,26172],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2839,26170,26171],{},"动作空间"," ，动作空间分为:",[433,26174,26175,26178],{},[436,26176,26177],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[436,26179,26180],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26182,26184],{"id":26183},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26186,26187],{},"由策略、价值函数、模型三部分组成",[19,26189,26190],{},"这三者组成马尔可夫决策过程",[19,26192,26193],{},[4000,26194],{"alt":31,"src":26195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[997,26197,26199],{"id":26198},"_151策略","1.5.1.策略",[19,26201,26202],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,26204,26205],{},"策略可分为两种：",[19,26207,26208],{},[4000,26209],{"alt":31,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,26212,26213],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[997,26215,26217],{"id":26216},"_152价值函数","1.5.2.价值函数",[19,26219,26220],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,26222,26223],{},"价值函数中有一个折扣因子，类似于存款利息",[19,26225,26226],{},[4000,26227],{"alt":31,"src":26228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,26230,26231],{},"进入某个状态采取的最优动作可以通过Q函数得到",[997,26233,26235],{"id":26234},"_153模型","1.5.3.模型",[19,26237,26238],{},[4000,26239],{"alt":31,"src":26240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26242,26244],{"id":26243},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[206,26246,26247,26257],{},[209,26248,26249],{},[212,26250,26251,26254],{},[215,26252,217],{"align":26253},"left",[215,26255,26256],{"align":26253},"特点",[225,26258,26259,26269,26279,26289,26301],{},[212,26260,26261,26266],{},[230,26262,26263],{"align":26253},[2839,26264,26265],{},"基于价值的智能体",[230,26267,26268],{"align":26253},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[212,26270,26271,26276],{},[230,26272,26273],{"align":26253},[2839,26274,26275],{},"基于策略的智能体",[230,26277,26278],{"align":26253},"直接学习策略，没有学习价值函数",[212,26280,26281,26286],{},[230,26282,26283],{"align":26253},[2839,26284,26285],{},"演员-评论员智能体",[230,26287,26288],{"align":26253},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[212,26290,26291,26296],{},[230,26292,26293],{"align":26253},[2839,26294,26295],{},"有模型强化学习智能体",[230,26297,26298],{"align":26253},[4000,26299],{"alt":31,"src":26300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[212,26302,26303,26308],{},[230,26304,26305],{"align":26253},[2839,26306,26307],{},"免模型强化学习智能体",[230,26309,26310],{"align":26253},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26312,26314],{"id":26313},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26316,26317],{},"学习和规划是序列决策的两个基本问题",[19,26319,26320],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26322,26323],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26325,26326],{},"强化学习用到的库：Gym",[19,26328,26329],{},"Gym可以检验强化学习算法的优劣",[19,26331,26332,26335],{},[2839,26333,26334],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,26337,26341],{"className":26338,"code":26339,"language":26340,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,26342,26343],{"__ignoreMap":31},[36,26344,26345,26348,26351,26354],{"class":38,"line":39},[36,26346,26347],{"class":4500},"pip",[36,26349,26350],{"class":57}," install",[36,26352,26353],{"class":57}," gym==",[36,26355,26356],{"class":49},"0.25.2\n",[19,26358,26359],{},"显示图形界面需要",[26,26361,26363],{"className":26338,"code":26362,"language":26340,"meta":31,"style":31},"pip install pygame\n",[33,26364,26365],{"__ignoreMap":31},[36,26366,26367,26369,26371],{"class":38,"line":39},[36,26368,26347],{"class":4500},[36,26370,26350],{"class":57},[36,26372,26373],{"class":57}," pygame\n",[19,26375,26376,26377],{},"有关Gym库的相关文档介绍：",[2923,26378,26382],{"href":26379,"rel":26380},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26381],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26384,26386],{"id":26385},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26388,26389],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26391,26392],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26394,26395],{},[4000,26396],{"alt":31,"src":26397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26399,26400],{},"折扣率需要自己来设定",[19,26402,26403],{},[4000,26404],{"alt":31,"src":26405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[433,26407,26408],{},[436,26409,26410],{},"状态转移函数：",[19,26412,26413],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26415,26416],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26418,26419],{},[4000,26420],{"alt":31,"src":26421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[433,26423,26424],{"start":46},[436,26425,26426],{},"动作价值函数：",[19,26428,26429],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26431,26432],{},[4000,26433],{"alt":31,"src":26434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[433,26436,26437],{"start":82},[436,26438,26439],{},"最优动作价值函数：",[19,26441,26442],{},"这个函数是对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,26444,26445],{},[4000,26446],{"alt":31,"src":26447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[433,26449,26450],{"start":88},[436,26451,26452],{},"状态价值函数:",[19,26454,26455],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26457,26458],{},"它衡量的是“一个具体动作”的长期价值",[19,26460,26461],{},[4000,26462],{"alt":31,"src":26463},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26465,26466],{},"几个价值函数之间的比较：",[19,26468,26469],{},[4000,26470],{"alt":31,"src":26471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2602,26473,26474],{},"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":31,"searchDepth":46,"depth":46,"links":26476},[26477,26478,26479,26484,26485,26490,26491,26492],{"id":25910,"depth":46,"text":25911},{"id":25977,"depth":46,"text":25978},{"id":26014,"depth":46,"text":26015,"children":26480},[26481,26482,26483],{"id":26018,"depth":82,"text":26019},{"id":26033,"depth":82,"text":26034},{"id":26056,"depth":82,"text":26057},{"id":26164,"depth":46,"text":26165},{"id":26183,"depth":46,"text":26184,"children":26486},[26487,26488,26489],{"id":26198,"depth":82,"text":26199},{"id":26216,"depth":82,"text":26217},{"id":26234,"depth":82,"text":26235},{"id":26243,"depth":46,"text":26244},{"id":26313,"depth":46,"text":26314},{"id":26385,"depth":46,"text":26386},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25902,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26499,"title":26500,"body":26501,"description":26508,"extension":2631,"meta":26519,"navigation":545,"path":26520,"seo":26521,"stem":26522,"__hash__":26523},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26502,"toc":26517},[26503,26506,26509,26514],[10,26504,26500],{"id":26505},"_2马尔可夫决策过程",[19,26507,26508],{},"这是强化学习的基本框架",[19,26510,26511],{},[4000,26512],{"alt":31,"src":26513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26515,26516],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":46,"depth":46,"links":26518},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26500,"description":26508},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26525,"title":26526,"body":26527,"description":31,"extension":2631,"meta":26643,"navigation":545,"path":26644,"seo":26645,"stem":26646,"__hash__":26647},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26528,"toc":26638},[26529,26532,26536,26539,26544,26549,26552,26557,26560,26565,26568,26572,26577,26580,26585,26590,26595,26598,26602,26607,26610,26615,26620,26625,26630,26633],[10,26530,26526],{"id":26531},"_3动作价值函数",[14,26533,26535],{"id":26534},"_31dqn","3.1.DQN",[19,26537,26538],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26540,26541],{},[4000,26542],{"alt":31,"src":26543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26545,26546],{},[4000,26547],{"alt":31,"src":26548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26550,26551],{},"DQN算法的描述：",[19,26553,26554],{},[4000,26555],{"alt":31,"src":26556},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26558,26559],{},"这里的Dense指的是全连接层",[19,26561,26562],{},[4000,26563],{"alt":31,"src":26564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26566,26567],{},"当前观测的状态为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,26569,26571],{"id":26570},"_32dqn的举例","3.2.DQN的举例",[19,26573,26574],{},[4000,26575],{"alt":31,"src":26576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26578,26579],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26581,26582],{},[4000,26583],{"alt":31,"src":26584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26586,26587],{},[4000,26588],{"alt":31,"src":26589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26591,26592],{},[4000,26593],{"alt":31,"src":26594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26596,26597],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26599,26601],{"id":26600},"_33td算法","3.3.TD算法",[19,26603,26604],{},[4000,26605],{"alt":31,"src":26606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26608,26609],{},"强化学习TD算法公式的粗略解释：",[19,26611,26612],{},[4000,26613],{"alt":31,"src":26614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26616,26617],{},[4000,26618],{"alt":31,"src":26619},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26621,26622],{},[4000,26623],{"alt":31,"src":26624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26626,26627],{},[4000,26628],{"alt":31,"src":26629},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26631,26632],{},"TD算法总结：",[19,26634,26635],{},[4000,26636],{"alt":31,"src":26637},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":46,"depth":46,"links":26639},[26640,26641,26642],{"id":26534,"depth":46,"text":26535},{"id":26570,"depth":46,"text":26571},{"id":26600,"depth":46,"text":26601},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26526,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26649,"title":26650,"body":26651,"description":31,"extension":2631,"meta":26884,"navigation":545,"path":26885,"seo":26886,"stem":26887,"__hash__":26888},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26652,"toc":26880},[26653,26656,26660,26663,26666,26671,26676,26679,26684,26689,26692,26697,26700,26705,26708,26713,26716,26721,26724,26729,26734,26737,26742,26745,26748,26753,26756,26761,26766,26770,26773,26776,26781,26786,26789,26794,26799,26802,26807,26810,26813,26818,26821,26826,26829,26834,26839,26842,26847,26852,26855,26860,26863,26868,26871],[10,26654,26650],{"id":26655},"_4策略学习",[14,26657,26659],{"id":26658},"_41概念描述","4.1.概念描述",[19,26661,26662],{},"用神经网络（策略网络）近似策略函数",[19,26664,26665],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26667,26668],{},[4000,26669],{"alt":31,"src":26670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26672,26673],{},[4000,26674],{"alt":31,"src":26675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26677,26678],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26680,26681],{},[4000,26682],{"alt":31,"src":26683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26685,26686],{},[4000,26687],{"alt":31,"src":26688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26690,26691],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26693,26694],{},[4000,26695],{"alt":31,"src":26696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26698,26699],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26701,26702],{},[4000,26703],{"alt":31,"src":26704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26706,26707],{},"改进theta要用到策略梯度算法",[19,26709,26710],{},[4000,26711],{"alt":31,"src":26712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26714,26715],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26717,26718],{},[4000,26719],{"alt":31,"src":26720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26722,26723],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26725,26726],{},[4000,26727],{"alt":31,"src":26728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26730,26731],{},[4000,26732],{"alt":31,"src":26733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26735,26736],{},"梯度公式总结：",[19,26738,26739],{},[4000,26740],{"alt":31,"src":26741},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26743,26744],{},"两个公式的分别应用场景：",[19,26746,26747],{},"对于离散的动作：",[19,26749,26750],{},[4000,26751],{"alt":31,"src":26752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26754,26755],{},"对于连续的动作：",[19,26757,26758],{},[4000,26759],{"alt":31,"src":26760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26762,26763],{},[4000,26764],{"alt":31,"src":26765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26767,26769],{"id":26768},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26771,26772],{},"使用蒙特卡洛来近似计算策略梯度",[19,26774,26775],{},"蒙特卡洛法的解释如下：",[19,26777,26778],{},[4000,26779],{"alt":31,"src":26780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26782,26783],{},[4000,26784],{"alt":31,"src":26785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26787,26788],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[433,26790,26791],{},[436,26792,26793],{},"方法一：reinforce算法",[19,26795,26796],{},[4000,26797],{"alt":31,"src":26798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26800,26801],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[433,26803,26804],{"start":46},[436,26805,26806],{},"方法二：actor-critic算法",[19,26808,26809],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26811,26812],{},"两个网络的构建：",[19,26814,26815],{},[4000,26816],{"alt":31,"src":26817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26819,26820],{},"actor网路：",[19,26822,26823],{},[4000,26824],{"alt":31,"src":26825},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26827,26828],{},"critic网络",[19,26830,26831],{},[4000,26832],{"alt":31,"src":26833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[433,26835,26836],{"start":82},[436,26837,26838],{},"网络的训练",[19,26840,26841],{},"网络描述",[19,26843,26844],{},[4000,26845],{"alt":31,"src":26846},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26848,26849],{},[4000,26850],{"alt":31,"src":26851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26853,26854],{},"TD算法更新梯度：",[19,26856,26857],{},[4000,26858],{"alt":31,"src":26859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26861,26862],{},"策略网络更新梯度：",[19,26864,26865],{},[4000,26866],{"alt":31,"src":26867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26869,26870],{},"训练整个流程的具体描述：",[19,26872,26873,26876,26877],{},[4000,26874],{"alt":31,"src":26875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[4000,26878],{"alt":31,"src":26879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":46,"depth":46,"links":26881},[26882,26883],{"id":26658,"depth":46,"text":26659},{"id":26768,"depth":46,"text":26769},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26650,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26890,"title":26891,"body":26892,"description":26899,"extension":2631,"meta":26949,"navigation":545,"path":26950,"seo":26951,"stem":26952,"__hash__":26953},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26893,"toc":26945},[26894,26897,26900,26904,26907,26912,26916,26919,26924,26927,26932,26937,26940],[10,26895,26891],{"id":26896},"_5alphago算法",[19,26898,26899],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26901,26903],{"id":26902},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26905,26906],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26908,26909],{},[4000,26910],{"alt":31,"src":26911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26913,26915],{"id":26914},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26917,26918],{},"采用强化学习的方式训练策略网络",[19,26920,26921],{},[4000,26922],{"alt":31,"src":26923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26925,26926],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26928,26929],{},[4000,26930],{"alt":31,"src":26931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26933,26934],{},[4000,26935],{"alt":31,"src":26936},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26938,26939],{},"强化学习训练策略网络的总结：",[19,26941,26942],{},[4000,26943],{"alt":31,"src":26944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":46,"depth":46,"links":26946},[26947,26948],{"id":26902,"depth":46,"text":26903},{"id":26914,"depth":46,"text":26915},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26891,"description":26899},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26955,"title":26956,"body":26957,"description":26964,"extension":2631,"meta":26967,"navigation":545,"path":26968,"seo":26969,"stem":26970,"__hash__":26971},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26958,"toc":26965},[26959,26962],[10,26960,26956],{"id":26961},"_6价值网络",[19,26963,26964],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":46,"depth":46,"links":26966},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26956,"description":26964},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26973,"title":26974,"body":26975,"description":26979,"extension":2631,"meta":26980,"navigation":545,"path":26981,"seo":26982,"stem":26983,"__hash__":26984},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26976,"toc":26977},[],{"title":31,"searchDepth":46,"depth":46,"links":26978},[],"记录自己的强化学习笔记。",{"category":25895},"\u002Fwiki\u002F2025-12-04",{"title":26974,"description":26979},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26986,"title":26987,"body":26988,"description":2630,"extension":2631,"meta":27027,"navigation":545,"path":27028,"seo":27029,"stem":27030,"__hash__":27031},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26989,"toc":27025},[26990,26993,26996,27002,27005,27011,27014,27019,27022],[10,26991,26987],{"id":26992},"_1-项目概览与官方资源",[19,26994,26995],{},"官方文档：",[19,26997,26998],{},[2923,26999,27000],{"href":27000,"rel":27001},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26381],[19,27003,27004],{},"官方代码仓库：",[19,27006,27007],{},[2923,27008,27009],{"href":27009,"rel":27010},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26381],[19,27012,27013],{},"复现大体流程：",[19,27015,27016],{},[4000,27017],{"alt":31,"src":27018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,27020,27021],{},"本教程的目标是打通这条链路：",[19,27023,27024],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":46,"depth":46,"links":27026},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26987,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27033,"title":27034,"body":27035,"description":2630,"extension":2631,"meta":27151,"navigation":545,"path":27152,"seo":27153,"stem":27154,"__hash__":27155},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27036,"toc":27146},[27037,27040,27044,27047,27054,27058,27061,27070,27080,27084,27114,27117,27143],[10,27038,27034],{"id":27039},"_2-环境准备与设备连接",[14,27041,27043],{"id":27042},"_21-系统与环境","2.1 系统与环境",[19,27045,27046],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,27048,27049,27050,27053],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,27051,27052],{},"lerobot"," 依赖。",[14,27055,27057],{"id":27056},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,27059,27060],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,27062,27064],{"className":26338,"code":27063,"language":26340,"meta":31,"style":31},"lerobot-find-out\n",[33,27065,27066],{"__ignoreMap":31},[36,27067,27068],{"class":38,"line":39},[36,27069,27063],{"class":4500},[19,27071,27072,27073,273,27076,27079],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,27074,27075],{},"\u002Fdev\u002FttyACM0",[33,27077,27078],{},"\u002Fdev\u002FttyACM1","）。",[14,27081,27083],{"id":27082},"_23-串口授权","2.3 串口授权",[26,27085,27087],{"className":26338,"code":27086,"language":26340,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,27088,27089,27103],{"__ignoreMap":31},[36,27090,27091,27094,27097,27100],{"class":38,"line":39},[36,27092,27093],{"class":4500},"sudo",[36,27095,27096],{"class":57}," chmod",[36,27098,27099],{"class":49}," 666",[36,27101,27102],{"class":57}," \u002Fdev\u002FttyACM0\n",[36,27104,27105,27107,27109,27111],{"class":38,"line":46},[36,27106,27093],{"class":4500},[36,27108,27096],{"class":57},[36,27110,27099],{"class":49},[36,27112,27113],{"class":57}," \u002Fdev\u002FttyACM1\n",[19,27115,27116],{},"说明：",[3680,27118,27119,27124,27130,27140],{},[436,27120,27121,27123],{},[33,27122,27093],{},"：以 root 权限执行命令。",[436,27125,27126,27129],{},[33,27127,27128],{},"chmod","：修改设备节点权限。",[436,27131,27132,27135,27136,27139],{},[33,27133,27134],{},"666","：",[33,27137,27138],{},"rw-rw-rw-","，所有用户可读写。",[436,27141,27142],{},"串口号必须替换为你机器上的真实端口。",[2602,27144,27145],{},"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":31,"searchDepth":46,"depth":46,"links":27147},[27148,27149,27150],{"id":27042,"depth":46,"text":27043},{"id":27056,"depth":46,"text":27057},{"id":27082,"depth":46,"text":27083},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27034,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27157,"title":27158,"body":27159,"description":2630,"extension":2631,"meta":27320,"navigation":545,"path":27321,"seo":27322,"stem":27323,"__hash__":27324},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27160,"toc":27316},[27161,27165,27169,27175,27178,27235,27238,27242,27245,27313],[10,27162,27164],{"id":27163},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27166,27168],{"id":27167},"_31-配置电机-id","3.1 配置电机 ID",[19,27170,27171,27172,27174],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,27173,707],{},"，需要改成机械臂链路里不冲突的编号。",[19,27176,27177],{},"方式一：用 LeRobot 命令逐步写入。",[26,27179,27181],{"className":26338,"code":27180,"language":26340,"meta":31,"style":31},"# 主臂舵机配置 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",[33,27182,27183,27188,27196,27203,27208,27212,27217,27223,27230],{"__ignoreMap":31},[36,27184,27185],{"class":38,"line":39},[36,27186,27187],{"class":42},"# 主臂舵机配置 ID\n",[36,27189,27190,27193],{"class":38,"line":46},[36,27191,27192],{"class":4500},"lerobot-setup-motors",[36,27194,27195],{"class":49}," \\\n",[36,27197,27198,27201],{"class":38,"line":82},[36,27199,27200],{"class":49},"  --teleop.type=so101_leader",[36,27202,27195],{"class":49},[36,27204,27205],{"class":38,"line":88},[36,27206,27207],{"class":49},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,27209,27210],{"class":38,"line":195},[36,27211,546],{"emptyLinePlaceholder":545},[36,27213,27214],{"class":38,"line":1517},[36,27215,27216],{"class":42},"# 从臂舵机配置 ID\n",[36,27218,27219,27221],{"class":38,"line":2421},[36,27220,27192],{"class":4500},[36,27222,27195],{"class":49},[36,27224,27225,27228],{"class":38,"line":2446},[36,27226,27227],{"class":49},"  --robot.type=so101_follower",[36,27229,27195],{"class":49},[36,27231,27232],{"class":38,"line":2469},[36,27233,27234],{"class":49},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,27236,27237],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27239,27241],{"id":27240},"_32-机械臂校准","3.2 机械臂校准",[19,27243,27244],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,27246,27248],{"className":26338,"code":27247,"language":26340,"meta":31,"style":31},"# 主臂校准\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",[33,27249,27250,27255,27262,27268,27275,27280,27284,27289,27295,27301,27308],{"__ignoreMap":31},[36,27251,27252],{"class":38,"line":39},[36,27253,27254],{"class":42},"# 主臂校准\n",[36,27256,27257,27260],{"class":38,"line":46},[36,27258,27259],{"class":4500},"lerobot-calibrate",[36,27261,27195],{"class":49},[36,27263,27264,27266],{"class":38,"line":82},[36,27265,27200],{"class":49},[36,27267,27195],{"class":49},[36,27269,27270,27273],{"class":38,"line":88},[36,27271,27272],{"class":49},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,27274,27195],{"class":49},[36,27276,27277],{"class":38,"line":195},[36,27278,27279],{"class":49},"  --teleop.id=my_awesome_leader_arm\n",[36,27281,27282],{"class":38,"line":1517},[36,27283,546],{"emptyLinePlaceholder":545},[36,27285,27286],{"class":38,"line":2421},[36,27287,27288],{"class":42},"# 从臂校准\n",[36,27290,27291,27293],{"class":38,"line":2446},[36,27292,27259],{"class":4500},[36,27294,27195],{"class":49},[36,27296,27297,27299],{"class":38,"line":2469},[36,27298,27227],{"class":49},[36,27300,27195],{"class":49},[36,27302,27303,27306],{"class":38,"line":2492},[36,27304,27305],{"class":49},"  --robot.port=\u002Fdev\u002FttyACM1",[36,27307,27195],{"class":49},[36,27309,27310],{"class":38,"line":4150},[36,27311,27312],{"class":49},"  --robot.id=my_awesome_follower_arm\n",[2602,27314,27315],{},"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":31,"searchDepth":46,"depth":46,"links":27317},[27318,27319],{"id":27167,"depth":46,"text":27168},{"id":27240,"depth":46,"text":27241},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27158,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27326,"title":27327,"body":27328,"description":2630,"extension":2631,"meta":27518,"navigation":545,"path":27519,"seo":27520,"stem":27521,"__hash__":27522},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27329,"toc":27514},[27330,27333,27337,27384,27388,27401,27464,27467,27511],[10,27331,27327],{"id":27332},"_4-遥操与相机接入",[14,27334,27336],{"id":27335},"_41-不带相机遥操","4.1 不带相机遥操",[26,27338,27340],{"className":26338,"code":27339,"language":26340,"meta":31,"style":31},"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",[33,27341,27342,27349,27355,27361,27368,27374,27380],{"__ignoreMap":31},[36,27343,27344,27347],{"class":38,"line":39},[36,27345,27346],{"class":4500},"lerobot-teleoperate",[36,27348,27195],{"class":49},[36,27350,27351,27353],{"class":38,"line":46},[36,27352,27227],{"class":49},[36,27354,27195],{"class":49},[36,27356,27357,27359],{"class":38,"line":82},[36,27358,27305],{"class":49},[36,27360,27195],{"class":49},[36,27362,27363,27366],{"class":38,"line":88},[36,27364,27365],{"class":49},"  --robot.id=my_awesome_follower_arm",[36,27367,27195],{"class":49},[36,27369,27370,27372],{"class":38,"line":195},[36,27371,27200],{"class":49},[36,27373,27195],{"class":49},[36,27375,27376,27378],{"class":38,"line":1517},[36,27377,27272],{"class":49},[36,27379,27195],{"class":49},[36,27381,27382],{"class":38,"line":2421},[36,27383,27279],{"class":49},[14,27385,27387],{"id":27386},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,27389,27391],{"className":26338,"code":27390,"language":26340,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,27392,27393],{"__ignoreMap":31},[36,27394,27395,27398],{"class":38,"line":39},[36,27396,27397],{"class":4500},"lerobot-find-cameras",[36,27399,27400],{"class":57}," opencv\n",[26,27402,27404],{"className":26338,"code":27403,"language":26340,"meta":31,"style":31},"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",[33,27405,27406,27412,27418,27424,27430,27440,27446,27452,27459],{"__ignoreMap":31},[36,27407,27408,27410],{"class":38,"line":39},[36,27409,27346],{"class":4500},[36,27411,27195],{"class":49},[36,27413,27414,27416],{"class":38,"line":46},[36,27415,27227],{"class":49},[36,27417,27195],{"class":49},[36,27419,27420,27422],{"class":38,"line":82},[36,27421,27305],{"class":49},[36,27423,27195],{"class":49},[36,27425,27426,27428],{"class":38,"line":88},[36,27427,27365],{"class":49},[36,27429,27195],{"class":49},[36,27431,27432,27435,27438],{"class":38,"line":195},[36,27433,27434],{"class":49},"  --robot.cameras=",[36,27436,27437],{"class":57},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,27439,27195],{"class":49},[36,27441,27442,27444],{"class":38,"line":1517},[36,27443,27200],{"class":49},[36,27445,27195],{"class":49},[36,27447,27448,27450],{"class":38,"line":2421},[36,27449,27272],{"class":49},[36,27451,27195],{"class":49},[36,27453,27454,27457],{"class":38,"line":2446},[36,27455,27456],{"class":49},"  --teleop.id=my_awesome_leader_arm",[36,27458,27195],{"class":49},[36,27460,27461],{"class":38,"line":2469},[36,27462,27463],{"class":49},"  --display_data=true\n",[19,27465,27466],{},"相机参数说明：",[3680,27468,27469,27475,27481,27490,27499,27505],{},[436,27470,27471,27474],{},[33,27472,27473],{},"front","：相机名称。",[436,27476,27477,27480],{},[33,27478,27479],{},"type: opencv","：相机驱动类型。",[436,27482,27483,27486,27487,27079],{},[33,27484,27485],{},"index_or_path","：设备编号或设备路径（如 ",[33,27488,27489],{},"\u002Fdev\u002Fvideo4",[436,27491,27492,27495,27496,27498],{},[33,27493,27494],{},"width"," \u002F ",[33,27497,2293],{},"：图像分辨率。",[436,27500,27501,27504],{},[33,27502,27503],{},"fps","：采样帧率。",[436,27506,27507,27510],{},[33,27508,27509],{},"--display_data=true","：启用实时可视化。",[2602,27512,27513],{},"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":31,"searchDepth":46,"depth":46,"links":27515},[27516,27517],{"id":27335,"depth":46,"text":27336},{"id":27386,"depth":46,"text":27387},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27327,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27524,"title":27525,"body":27526,"description":2630,"extension":2631,"meta":27696,"navigation":545,"path":27697,"seo":27698,"stem":27699,"__hash__":27700},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27527,"toc":27691},[27528,27532,27536,27541,27546,27549,27591,27597,27601,27648,27653,27657,27660,27668,27673,27678,27683,27688],[10,27529,27531],{"id":27530},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27533,27535],{"id":27534},"_51-生成访问令牌","5.1 生成访问令牌",[19,27537,27538],{},[4000,27539],{"alt":31,"src":27540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27542,27543],{},[4000,27544],{"alt":31,"src":27545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27547,27548],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,27550,27552],{"className":26338,"code":27551,"language":26340,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,27553,27554,27567],{"__ignoreMap":31},[36,27555,27556,27559,27562,27564],{"class":38,"line":39},[36,27557,27558],{"class":114},"export",[36,27560,27561],{"class":53}," HF_TOKEN",[36,27563,115],{"class":114},[36,27565,27566],{"class":57},"\"your_huggingface_token\"\n",[36,27568,27569,27572,27575,27578,27581,27583,27586,27588],{"class":38,"line":46},[36,27570,27571],{"class":4500},"hf",[36,27573,27574],{"class":57}," auth",[36,27576,27577],{"class":57}," login",[36,27579,27580],{"class":49}," --token",[36,27582,12249],{"class":57},[36,27584,27585],{"class":53},"$HF_TOKEN",[36,27587,1822],{"class":57},[36,27589,27590],{"class":49}," --add-to-git-credential\n",[19,27592,27593,27596],{},[33,27594,27595],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27598,27600],{"id":27599},"_52-验证登录","5.2 验证登录",[26,27602,27604],{"className":26338,"code":27603,"language":26340,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,27605,27606,27636],{"__ignoreMap":31},[36,27607,27608,27611,27613,27616,27618,27620,27623,27626,27629,27632,27634],{"class":38,"line":39},[36,27609,27610],{"class":53},"HF_USER",[36,27612,115],{"class":114},[36,27614,27615],{"class":53},"$(",[36,27617,27571],{"class":4500},[36,27619,27574],{"class":57},[36,27621,27622],{"class":57}," whoami",[36,27624,27625],{"class":114}," |",[36,27627,27628],{"class":4500}," head",[36,27630,27631],{"class":49}," -n",[36,27633,733],{"class":49},[36,27635,61],{"class":53},[36,27637,27638,27641,27643,27646],{"class":38,"line":46},[36,27639,27640],{"class":49},"echo",[36,27642,12249],{"class":57},[36,27644,27645],{"class":53},"$HF_USER",[36,27647,1620],{"class":57},[19,27649,27650],{},[4000,27651],{"alt":31,"src":27652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27654,27656],{"id":27655},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27658,27659],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3680,27661,27662,27665],{},[436,27663,27664],{},"Dataset Repo（用于上传演示数据）",[436,27666,27667],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27669,27670],{},[4000,27671],{"alt":31,"src":27672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27674,27675],{},[4000,27676],{"alt":31,"src":27677},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27679,27680],{},[4000,27681],{"alt":31,"src":27682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27684,27685],{},[4000,27686],{"alt":31,"src":27687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2602,27689,27690],{},"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":31,"searchDepth":46,"depth":46,"links":27692},[27693,27694,27695],{"id":27534,"depth":46,"text":27535},{"id":27599,"depth":46,"text":27600},{"id":27655,"depth":46,"text":27656},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27525,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27702,"title":27703,"body":27704,"description":2630,"extension":2631,"meta":27901,"navigation":545,"path":27902,"seo":27903,"stem":27904,"__hash__":27905},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27705,"toc":27896},[27706,27710,27714,27810,27818,27823,27827,27843,27846,27850,27893],[10,27707,27709],{"id":27708},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27711,27713],{"id":27712},"_61-录制示教数据","6.1 录制示教数据",[26,27715,27717],{"className":26338,"code":27716,"language":26340,"meta":31,"style":31},"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",[33,27718,27719,27726,27732,27738,27744,27753,27759,27765,27771,27778,27788,27795,27805],{"__ignoreMap":31},[36,27720,27721,27724],{"class":38,"line":39},[36,27722,27723],{"class":4500},"lerobot-record",[36,27725,27195],{"class":49},[36,27727,27728,27730],{"class":38,"line":46},[36,27729,27227],{"class":49},[36,27731,27195],{"class":49},[36,27733,27734,27736],{"class":38,"line":82},[36,27735,27305],{"class":49},[36,27737,27195],{"class":49},[36,27739,27740,27742],{"class":38,"line":88},[36,27741,27365],{"class":49},[36,27743,27195],{"class":49},[36,27745,27746,27748,27751],{"class":38,"line":195},[36,27747,27434],{"class":49},[36,27749,27750],{"class":57},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,27752,27195],{"class":49},[36,27754,27755,27757],{"class":38,"line":1517},[36,27756,27200],{"class":49},[36,27758,27195],{"class":49},[36,27760,27761,27763],{"class":38,"line":2421},[36,27762,27272],{"class":49},[36,27764,27195],{"class":49},[36,27766,27767,27769],{"class":38,"line":2446},[36,27768,27456],{"class":49},[36,27770,27195],{"class":49},[36,27772,27773,27776],{"class":38,"line":2469},[36,27774,27775],{"class":49},"  --display_data=true",[36,27777,27195],{"class":49},[36,27779,27780,27783,27786],{"class":38,"line":2492},[36,27781,27782],{"class":49},"  --dataset.repo_id=",[36,27784,27785],{"class":57},"\"Embodied-AI-6\u002Fso101_test\"",[36,27787,27195],{"class":49},[36,27789,27790,27793],{"class":38,"line":4150},[36,27791,27792],{"class":49},"  --dataset.num_episodes=10",[36,27794,27195],{"class":49},[36,27796,27797,27800,27803],{"class":38,"line":4155},[36,27798,27799],{"class":49},"  --dataset.single_task=",[36,27801,27802],{"class":57},"\"Grab the green cube\"",[36,27804,27195],{"class":49},[36,27806,27807],{"class":38,"line":4161},[36,27808,27809],{"class":49},"  --resume=true\n",[3680,27811,27812],{},[436,27813,27814,27817],{},[33,27815,27816],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27819,27820],{},[4000,27821],{"alt":31,"src":27822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27824,27826],{"id":27825},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,27828,27830],{"className":26338,"code":27829,"language":26340,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,27831,27832],{"__ignoreMap":31},[36,27833,27834,27837,27840],{"class":38,"line":39},[36,27835,27836],{"class":4500},"rm",[36,27838,27839],{"class":49}," -rf",[36,27841,27842],{"class":57}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27844,27845],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27847,27849],{"id":27848},"_63-回放指定-episode","6.3 回放指定 episode",[26,27851,27853],{"className":26338,"code":27852,"language":26340,"meta":31,"style":31},"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",[33,27854,27855,27862,27868,27874,27880,27888],{"__ignoreMap":31},[36,27856,27857,27860],{"class":38,"line":39},[36,27858,27859],{"class":4500},"lerobot-replay",[36,27861,27195],{"class":49},[36,27863,27864,27866],{"class":38,"line":46},[36,27865,27227],{"class":49},[36,27867,27195],{"class":49},[36,27869,27870,27872],{"class":38,"line":82},[36,27871,27305],{"class":49},[36,27873,27195],{"class":49},[36,27875,27876,27878],{"class":38,"line":88},[36,27877,27365],{"class":49},[36,27879,27195],{"class":49},[36,27881,27882,27884,27886],{"class":38,"line":195},[36,27883,27782],{"class":49},[36,27885,27785],{"class":57},[36,27887,27195],{"class":49},[36,27889,27890],{"class":38,"line":1517},[36,27891,27892],{"class":49},"  --dataset.episode=0\n",[2602,27894,27895],{},"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":31,"searchDepth":46,"depth":46,"links":27897},[27898,27899,27900],{"id":27712,"depth":46,"text":27713},{"id":27825,"depth":46,"text":27826},{"id":27848,"depth":46,"text":27849},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27703,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27907,"title":27908,"body":27909,"description":2630,"extension":2631,"meta":28037,"navigation":545,"path":28038,"seo":28039,"stem":28040,"__hash__":28041},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27910,"toc":28035},[27911,27915,27978,27981,28028,28033],[10,27912,27914],{"id":27913},"_7-act-模型训练","7. ACT 模型训练",[26,27916,27918],{"className":26338,"code":27917,"language":26340,"meta":31,"style":31},"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",[33,27919,27920,27927,27935,27942,27949,27956,27963,27970],{"__ignoreMap":31},[36,27921,27922,27925],{"class":38,"line":39},[36,27923,27924],{"class":4500},"lerobot-train",[36,27926,27195],{"class":49},[36,27928,27929,27931,27933],{"class":38,"line":46},[36,27930,27782],{"class":49},[36,27932,27785],{"class":57},[36,27934,27195],{"class":49},[36,27936,27937,27940],{"class":38,"line":82},[36,27938,27939],{"class":49},"  --policy.type=act",[36,27941,27195],{"class":49},[36,27943,27944,27947],{"class":38,"line":88},[36,27945,27946],{"class":49},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,27948,27195],{"class":49},[36,27950,27951,27954],{"class":38,"line":195},[36,27952,27953],{"class":49},"  --job_name=act_so101_test",[36,27955,27195],{"class":49},[36,27957,27958,27961],{"class":38,"line":1517},[36,27959,27960],{"class":49},"  --policy.device=cuda",[36,27962,27195],{"class":49},[36,27964,27965,27968],{"class":38,"line":2421},[36,27966,27967],{"class":49},"  --wandb.enable=false",[36,27969,27195],{"class":49},[36,27971,27972,27975],{"class":38,"line":2446},[36,27973,27974],{"class":49},"  --policy.repo_id=",[36,27976,27977],{"class":57},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27979,27980],{},"参数说明：",[3680,27982,27983,27989,27995,28001,28007,28016,28022],{},[436,27984,27985,27988],{},[33,27986,27987],{},"--dataset.repo_id","：训练数据集仓库。",[436,27990,27991,27994],{},[33,27992,27993],{},"--policy.type=act","：策略模型类型为 ACT。",[436,27996,27997,28000],{},[33,27998,27999],{},"--output_dir","：本地训练输出目录。",[436,28002,28003,28006],{},[33,28004,28005],{},"--job_name","：训练任务名称。",[436,28008,28009,28012,28013,27079],{},[33,28010,28011],{},"--policy.device","：训练设备（如 ",[33,28014,28015],{},"cuda",[436,28017,28018,28021],{},[33,28019,28020],{},"--wandb.enable","：是否启用 WandB 可视化。",[436,28023,28024,28027],{},[33,28025,28026],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,28029,28030],{},[4000,28031],{"alt":31,"src":28032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2602,28034,27895],{},{"title":31,"searchDepth":46,"depth":46,"links":28036},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27908,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28043,"title":28044,"body":28045,"description":2630,"extension":2631,"meta":28132,"navigation":545,"path":28133,"seo":28134,"stem":28135,"__hash__":28136},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28046,"toc":28130},[28047,28050,28053,28120,28128],[10,28048,28044],{"id":28049},"_8-策略部署与自动采集",[19,28051,28052],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,28054,28056],{"className":26338,"code":28055,"language":26340,"meta":31,"style":31},"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",[33,28057,28058,28064,28070,28076,28084,28090,28097,28105,28113],{"__ignoreMap":31},[36,28059,28060,28062],{"class":38,"line":39},[36,28061,27723],{"class":4500},[36,28063,27195],{"class":49},[36,28065,28066,28068],{"class":38,"line":46},[36,28067,27227],{"class":49},[36,28069,27195],{"class":49},[36,28071,28072,28074],{"class":38,"line":82},[36,28073,27305],{"class":49},[36,28075,27195],{"class":49},[36,28077,28078,28080,28082],{"class":38,"line":88},[36,28079,27434],{"class":49},[36,28081,27750],{"class":57},[36,28083,27195],{"class":49},[36,28085,28086,28088],{"class":38,"line":195},[36,28087,27365],{"class":49},[36,28089,27195],{"class":49},[36,28091,28092,28095],{"class":38,"line":1517},[36,28093,28094],{"class":49},"  --display_data=false",[36,28096,27195],{"class":49},[36,28098,28099,28101,28103],{"class":38,"line":2421},[36,28100,27782],{"class":49},[36,28102,27785],{"class":57},[36,28104,27195],{"class":49},[36,28106,28107,28109,28111],{"class":38,"line":2446},[36,28108,27799],{"class":49},[36,28110,27802],{"class":57},[36,28112,27195],{"class":49},[36,28114,28115,28118],{"class":38,"line":2469},[36,28116,28117],{"class":49},"  --policy.path=",[36,28119,27977],{"class":57},[3680,28121,28122],{},[436,28123,28124,28127],{},[33,28125,28126],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2602,28129,27895],{},{"title":31,"searchDepth":46,"depth":46,"links":28131},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28044,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28138,"title":28139,"body":28140,"description":2630,"extension":2631,"meta":28169,"navigation":545,"path":28170,"seo":28171,"stem":28172,"__hash__":28173},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28141,"toc":28167},[28142,28146,28149,28155,28158,28164],[10,28143,28145],{"id":28144},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28147,28148],{},"项目地址：",[19,28150,28151],{},[2923,28152,28153],{"href":28153,"rel":28154},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26381],[19,28156,28157],{},"参考教程：",[19,28159,28160],{},[2923,28161,28162],{"href":28162,"rel":28163},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26381],[19,28165,28166],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":46,"depth":46,"links":28168},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28139,"description":2630},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28175,"title":28176,"body":28177,"description":28181,"extension":2631,"meta":28182,"navigation":545,"path":28183,"seo":28184,"stem":28185,"__hash__":28186},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28178,"toc":28179},[],{"title":31,"searchDepth":46,"depth":46,"links":28180},[],"act复现",{"category":25895},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28176,"description":28181},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28188,"title":28189,"body":28190,"description":31,"extension":2631,"meta":28491,"navigation":545,"path":28492,"seo":28493,"stem":28494,"__hash__":28495},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28191,"toc":28483},[28192,28195,28199,28209,28216,28223,28226,28233,28236,28239,28243,28255,28259,28305,28308,28311,28314,28317,28320,28324,28362,28368,28372,28425,28430,28433,28436,28441,28444,28449,28452,28455,28459,28462,28465,28469],[10,28193,28189],{"id":28194},"_1简介",[997,28196,28198],{"id":28197},"_11什么是-docker","1.1什么是 Docker？",[19,28200,28201,28202,28205,28206],{},"Docker 是一个开源的 ",[2839,28203,28204],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2839,28207,28208],{},"一次构建，到处运行。",[19,28210,28211,28212,28215],{},"“ ",[2839,28213,28214],{},"一次构建，到处运行"," ”也就是说：",[433,28217,28218],{},[436,28219,28220],{},[2839,28221,28222],{},"之前：",[19,28224,28225],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[433,28227,28228],{},[436,28229,28230],{},[2839,28231,28232],{},"使用docker后：",[19,28234,28235],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,28237,28238],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[997,28240,28242],{"id":28241},"_12它是怎么工作的","1.2.它是怎么工作的？",[3680,28244,28245,28248],{},[436,28246,28247],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[436,28249,28250,28251,28254],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2839,28252,28253],{},"无论在哪运行都一样稳定"," 。",[997,28256,28258],{"id":28257},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[206,28260,28261,28271],{},[209,28262,28263],{},[212,28264,28265,28268],{},[215,28266,28267],{"align":26253},"概念",[215,28269,28270],{"align":26253},"解释",[225,28272,28273,28281,28289,28297],{},[212,28274,28275,28278],{},[230,28276,28277],{"align":26253},"镜像",[230,28279,28280],{"align":26253},"Image，运行容器的模板，像是一个应用快照",[212,28282,28283,28286],{},[230,28284,28285],{"align":26253},"容器",[230,28287,28288],{"align":26253},"Container，运行中的镜像实例，有自己的文件系统、网络等",[212,28290,28291,28294],{},[230,28292,28293],{"align":26253},"Dockerfile",[230,28295,28296],{"align":26253},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[212,28298,28299,28302],{},[230,28300,28301],{"align":26253},"仓库",[230,28303,28304],{"align":26253},"Registry，存放镜像的地方，比如 Docker Hub",[19,28306,28307],{},"抽象化理解:",[19,28309,28310],{},"Docker镜像≈C++类",[19,28312,28313],{},"Docker容器≈C++类实例(即对象)",[19,28315,28316],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28318,28319],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[997,28321,28323],{"id":28322},"_14类比理解","1.4.类比理解",[206,28325,28326,28336],{},[209,28327,28328],{},[212,28329,28330,28333],{},[215,28331,28332],{"align":26253},"传统部署",[215,28334,28335],{"align":26253},"Docker部署",[225,28337,28338,28346,28354],{},[212,28339,28340,28343],{},[230,28341,28342],{"align":26253},"手动安装依赖、调试版本不一致问题",[230,28344,28345],{"align":26253},"一次打包环境和代码",[212,28347,28348,28351],{},[230,28349,28350],{"align":26253},"程序“裸奔”跑在系统上",[230,28352,28353],{"align":26253},"程序“穿着容器”隔离运行",[212,28355,28356,28359],{},[230,28357,28358],{"align":26253},"容易“在我电脑上能跑”",[230,28360,28361],{"align":26253},"保证“无论在哪都能跑”",[19,28363,28364,28365],{},"就像快递包裹： ",[2839,28366,28367],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[997,28369,28371],{"id":28370},"_15docker-的核心优势","1.5.Docker 的核心优势",[206,28373,28374,28383],{},[209,28375,28376],{},[212,28377,28378,28381],{},[215,28379,28380],{"align":26253},"优势",[215,28382,223],{"align":26253},[225,28384,28385,28393,28401,28409,28417],{},[212,28386,28387,28390],{},[230,28388,28389],{"align":26253},"轻量级",[230,28391,28392],{"align":26253},"基于系统内核共享，启动速度快，占资源少",[212,28394,28395,28398],{},[230,28396,28397],{"align":26253},"跨平台",[230,28399,28400],{"align":26253},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[212,28402,28403,28406],{},[230,28404,28405],{"align":26253},"易于迁移部署",[230,28407,28408],{"align":26253},"应用和环境一起封装，不怕依赖不一致",[212,28410,28411,28414],{},[230,28412,28413],{"align":26253},"易于版本控制",[230,28415,28416],{"align":26253},"镜像版本可控，支持回滚",[212,28418,28419,28422],{},[230,28420,28421],{"align":26253},"生态丰富",[230,28423,28424],{"align":26253},"Docker Hub 上有成千上万的现成镜像可用",[433,28426,28427],{},[436,28428,28429],{},"在Linux上可以几乎实现无性能损失。",[19,28431,28432],{},"docker里的发行版和本机共用Linux内核。",[19,28434,28435],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[433,28437,28438],{},[436,28439,28440],{},"可以快速部署在绝大多数Linux发行版",[19,28442,28443],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[433,28445,28446],{},[436,28447,28448],{},"配置环境简单",[19,28450,28451],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28453,28454],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[433,28456,28457],{},[436,28458,28421],{},[19,28460,28461],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28463,28464],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[997,28466,28468],{"id":28467},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3680,28470,28471,28474,28477,28480],{},[436,28472,28473],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[436,28475,28476],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[436,28478,28479],{},"微服务架构：每个服务一个容器，灵活组合",[436,28481,28482],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":46,"depth":46,"links":28484},[28485,28486,28487,28488,28489,28490],{"id":28197,"depth":82,"text":28198},{"id":28241,"depth":82,"text":28242},{"id":28257,"depth":82,"text":28258},{"id":28322,"depth":82,"text":28323},{"id":28370,"depth":82,"text":28371},{"id":28467,"depth":82,"text":28468},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28189,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28497,"title":28498,"body":28499,"description":31,"extension":2631,"meta":29231,"navigation":545,"path":29232,"seo":29233,"stem":29234,"__hash__":29235},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28500,"toc":29226},[28501,28504,28508,28511,28514,28520,28526,28530,28539,28542,28599,28602,28653,28656,28738,28741,28778,28782,28793,28806,28813,28816,28896,28899,28949,28952,28975,28979,28986,28989,29005,29011,29014,29030,29036,29039,29055,29069,29075,29095,29101,29104,29116,29122,29125,29139,29145,29148,29168,29173,29176,29179,29183,29186,29189,29192,29199,29202,29205,29208,29213,29218,29223],[10,28502,28498],{"id":28503},"_2安装docker",[997,28505,28507],{"id":28506},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28509,28510],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28512,28513],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28515,28516],{},[2923,28517,28518],{"href":28518,"rel":28519},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26381],[19,28521,28522],{},[2923,28523,28524],{"href":28524,"rel":28525},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26381],[24515,28527,28529],{"id":28528},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28531,28532,28533,28538],{},"以下内容根据 ",[2923,28534,28537],{"href":28535,"rel":28536},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26381],"官方文档"," 修改而来。",[19,28540,28541],{},"如果你过去安装过 docker，先删掉：",[26,28543,28545],{"className":26338,"code":28544,"language":26340,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,28546,28547],{"__ignoreMap":31},[36,28548,28549,28551,28554,28557,28560,28563,28566,28569,28572,28575,28578,28581,28584,28587,28590,28593,28596],{"class":38,"line":39},[36,28550,5556],{"class":114},[36,28552,28553],{"class":53}," pkg ",[36,28555,28556],{"class":114},"in",[36,28558,28559],{"class":57}," docker.io",[36,28561,28562],{"class":57}," docker-doc",[36,28564,28565],{"class":57}," docker-compose",[36,28567,28568],{"class":57}," docker-compose-v2",[36,28570,28571],{"class":57}," podman-docker",[36,28573,28574],{"class":57}," containerd",[36,28576,28577],{"class":57}," runc",[36,28579,28580],{"class":53},"; ",[36,28582,28583],{"class":114},"do",[36,28585,28586],{"class":4500}," sudo",[36,28588,28589],{"class":57}," apt-get",[36,28591,28592],{"class":57}," remove",[36,28594,28595],{"class":53}," $pkg; ",[36,28597,28598],{"class":114},"done\n",[19,28600,28601],{},"首先安装依赖和GPG：",[26,28603,28607],{"className":28604,"code":28605,"language":28606,"meta":31,"style":31},"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",[33,28608,28609,28614,28619,28624,28629,28634,28639,28643,28648],{"__ignoreMap":31},[36,28610,28611],{"class":38,"line":39},[36,28612,28613],{},"# Add Docker's official GPG key:\n",[36,28615,28616],{"class":38,"line":46},[36,28617,28618],{},"sudo apt-get update\n",[36,28620,28621],{"class":38,"line":82},[36,28622,28623],{},"sudo apt-get install ca-certificates curl\n",[36,28625,28626],{"class":38,"line":88},[36,28627,28628],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,28630,28631],{"class":38,"line":195},[36,28632,28633],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,28635,28636],{"class":38,"line":1517},[36,28637,28638],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,28640,28641],{"class":38,"line":2421},[36,28642,546],{"emptyLinePlaceholder":545},[36,28644,28645],{"class":38,"line":2446},[36,28646,28647],{},"# 如果上面这行报错就弄下面这行\n",[36,28649,28650],{"class":38,"line":2469},[36,28651,28652],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28654,28655],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,28657,28659],{"className":26338,"code":28658,"language":26340,"meta":31,"style":31},"# 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",[33,28660,28661,28666,28672,28689,28722],{"__ignoreMap":31},[36,28662,28663],{"class":38,"line":39},[36,28664,28665],{"class":42},"# Add the repository to Apt sources:\n",[36,28667,28668,28670],{"class":38,"line":46},[36,28669,27640],{"class":49},[36,28671,27195],{"class":49},[36,28673,28674,28677,28680,28683,28686],{"class":38,"line":82},[36,28675,28676],{"class":57},"  \"deb [arch=$(",[36,28678,28679],{"class":4500},"dpkg",[36,28681,28682],{"class":49}," --print-architecture",[36,28684,28685],{"class":57},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,28687,28688],{"class":49},"\\\n",[36,28690,28691,28694,28696,28698,28701,28704,28706,28708,28711,28713,28715,28718,28720],{"class":38,"line":88},[36,28692,28693],{"class":57},"  \"",[36,28695,27615],{"class":53},[36,28697,3235],{"class":49},[36,28699,28700],{"class":57}," \u002Fetc\u002Fos-release",[36,28702,28703],{"class":53}," && ",[36,28705,27640],{"class":49},[36,28707,12249],{"class":57},[36,28709,28710],{"class":53},"$VERSION_CODENAME",[36,28712,1822],{"class":57},[36,28714,3110],{"class":53},[36,28716,28717],{"class":57},"\" stable\"",[36,28719,27625],{"class":114},[36,28721,27195],{"class":49},[36,28723,28724,28727,28730,28733,28735],{"class":38,"line":195},[36,28725,28726],{"class":4500},"  sudo",[36,28728,28729],{"class":57}," tee",[36,28731,28732],{"class":57}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,28734,1320],{"class":114},[36,28736,28737],{"class":57}," \u002Fdev\u002Fnull\n",[19,28739,28740],{},"最后安装",[26,28742,28744],{"className":26338,"code":28743,"language":26340,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,28745,28746,28755],{"__ignoreMap":31},[36,28747,28748,28750,28752],{"class":38,"line":39},[36,28749,27093],{"class":4500},[36,28751,28589],{"class":57},[36,28753,28754],{"class":57}," update\n",[36,28756,28757,28759,28761,28763,28766,28769,28772,28775],{"class":38,"line":46},[36,28758,27093],{"class":4500},[36,28760,28589],{"class":57},[36,28762,26350],{"class":57},[36,28764,28765],{"class":57}," docker-ce",[36,28767,28768],{"class":57}," docker-ce-cli",[36,28770,28771],{"class":57}," containerd.io",[36,28773,28774],{"class":57}," docker-buildx-plugin",[36,28776,28777],{"class":57}," docker-compose-plugin\n",[24515,28779,28781],{"id":28780},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28783,28784,28785,28788,28789,28792],{},"查看自己自己包管理工具版本（dnf是 ",[2839,28786,28787],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2839,28790,28791],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,28794,28796],{"className":26338,"code":28795,"language":26340,"meta":31,"style":31},"dnf --version\n",[33,28797,28798],{"__ignoreMap":31},[36,28799,28800,28803],{"class":38,"line":39},[36,28801,28802],{"class":4500},"dnf",[36,28804,28805],{"class":49}," --version\n",[19,28807,28532,28808,28812],{},[2923,28809,28537],{"href":28810,"rel":28811},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26381]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28814,28815],{},"如果你之前安装过 docker，请先删掉",[26,28817,28819],{"className":26338,"code":28818,"language":26340,"meta":31,"style":31},"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",[33,28820,28821,28835,28842,28849,28856,28863,28870,28877,28884,28891],{"__ignoreMap":31},[36,28822,28823,28825,28828,28830,28833],{"class":38,"line":39},[36,28824,27093],{"class":4500},[36,28826,28827],{"class":57}," dnf",[36,28829,28592],{"class":57},[36,28831,28832],{"class":57}," docker",[36,28834,27195],{"class":49},[36,28836,28837,28840],{"class":38,"line":46},[36,28838,28839],{"class":57},"                  docker-client",[36,28841,27195],{"class":49},[36,28843,28844,28847],{"class":38,"line":82},[36,28845,28846],{"class":57},"                  docker-client-latest",[36,28848,27195],{"class":49},[36,28850,28851,28854],{"class":38,"line":88},[36,28852,28853],{"class":57},"                  docker-common",[36,28855,27195],{"class":49},[36,28857,28858,28861],{"class":38,"line":195},[36,28859,28860],{"class":57},"                  docker-latest",[36,28862,27195],{"class":49},[36,28864,28865,28868],{"class":38,"line":1517},[36,28866,28867],{"class":57},"                  docker-latest-logrotate",[36,28869,27195],{"class":49},[36,28871,28872,28875],{"class":38,"line":2421},[36,28873,28874],{"class":57},"                  docker-logrotate",[36,28876,27195],{"class":49},[36,28878,28879,28882],{"class":38,"line":2446},[36,28880,28881],{"class":57},"                  docker-selinux",[36,28883,27195],{"class":49},[36,28885,28886,28889],{"class":38,"line":2469},[36,28887,28888],{"class":57},"                  docker-engine-selinux",[36,28890,27195],{"class":49},[36,28892,28893],{"class":38,"line":2492},[36,28894,28895],{"class":57},"                  docker-engine\n",[19,28897,28898],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,28900,28902],{"className":26338,"code":28901,"language":26340,"meta":31,"style":31},"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",[33,28903,28904,28918,28933],{"__ignoreMap":31},[36,28905,28906,28908,28910,28913,28915],{"class":38,"line":39},[36,28907,27093],{"class":4500},[36,28909,28827],{"class":57},[36,28911,28912],{"class":49}," -y",[36,28914,26350],{"class":57},[36,28916,28917],{"class":57}," dnf-plugins-core\n",[36,28919,28920,28922,28924,28927,28930],{"class":38,"line":46},[36,28921,27093],{"class":4500},[36,28923,28827],{"class":57},[36,28925,28926],{"class":57}," config-manager",[36,28928,28929],{"class":57}," addrepo",[36,28931,28932],{"class":49}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,28934,28935,28937,28940,28943,28946],{"class":38,"line":82},[36,28936,27093],{"class":4500},[36,28938,28939],{"class":57}," sed",[36,28941,28942],{"class":49}," -i",[36,28944,28945],{"class":57}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,28947,28948],{"class":57}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28950,28951],{},"最后安装：",[26,28953,28955],{"className":26338,"code":28954,"language":26340,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,28956,28957],{"__ignoreMap":31},[36,28958,28959,28961,28963,28965,28967,28969,28971,28973],{"class":38,"line":39},[36,28960,27093],{"class":4500},[36,28962,28827],{"class":57},[36,28964,26350],{"class":57},[36,28966,28765],{"class":57},[36,28968,28768],{"class":57},[36,28970,28771],{"class":57},[36,28972,28774],{"class":57},[36,28974,28777],{"class":57},[997,28976,28978],{"id":28977},"_22配置环境","2.2.配置环境",[24515,28980,28982,28985],{"id":28981},"_221检查-docker-服务状态",[2839,28983,28984],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28987,28988],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,28990,28992],{"className":26338,"code":28991,"language":26340,"meta":31,"style":31},"systemctl status docker\n",[33,28993,28994],{"__ignoreMap":31},[36,28995,28996,28999,29002],{"class":38,"line":39},[36,28997,28998],{"class":4500},"systemctl",[36,29000,29001],{"class":57}," status",[36,29003,29004],{"class":57}," docker\n",[24515,29006,29008,28985],{"id":29007},"_222启动-docker-服务",[2839,29009,29010],{},"2.2.2.启动 Docker 服务",[19,29012,29013],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,29015,29017],{"className":26338,"code":29016,"language":26340,"meta":31,"style":31},"sudo systemctl start docker\n",[33,29018,29019],{"__ignoreMap":31},[36,29020,29021,29023,29026,29028],{"class":38,"line":39},[36,29022,27093],{"class":4500},[36,29024,29025],{"class":57}," systemctl",[36,29027,6715],{"class":57},[36,29029,29004],{"class":57},[24515,29031,29033,28985],{"id":29032},"_223设置-docker-开机自启",[2839,29034,29035],{},"2.2.3.设置 Docker 开机自启",[19,29037,29038],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,29040,29042],{"className":26338,"code":29041,"language":26340,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,29043,29044],{"__ignoreMap":31},[36,29045,29046,29048,29050,29053],{"class":38,"line":39},[36,29047,27093],{"class":4500},[36,29049,29025],{"class":57},[36,29051,29052],{"class":57}," enable",[36,29054,29004],{"class":57},[24515,29056,29058,16317,29061,16317,29066,28985],{"id":29057},"_224将用户添加到-docker-组",[2839,29059,29060],{},"2.2.4.将用户添加到",[2839,29062,29063],{},[33,29064,29065],{},"docker",[2839,29067,29068],{},"组",[19,29070,29071,29072,29074],{},"使用以下命令将当前用户添加到 ",[33,29073,29065],{}," 组：",[26,29076,29078],{"className":26338,"code":29077,"language":26340,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,29079,29080],{"__ignoreMap":31},[36,29081,29082,29084,29087,29090,29092],{"class":38,"line":39},[36,29083,27093],{"class":4500},[36,29085,29086],{"class":57}," usermod",[36,29088,29089],{"class":49}," -aG",[36,29091,28832],{"class":57},[36,29093,29094],{"class":53}," $USER\n",[24515,29096,29098,28985],{"id":29097},"_225退出并重新登录",[2839,29099,29100],{},"2.2.5.退出并重新登录",[19,29102,29103],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,29105,29107],{"className":26338,"code":29106,"language":26340,"meta":31,"style":31},"newgrp docker\n",[33,29108,29109],{"__ignoreMap":31},[36,29110,29111,29114],{"class":38,"line":39},[36,29112,29113],{"class":4500},"newgrp",[36,29115,29004],{"class":57},[24515,29117,29119,28985],{"id":29118},"_226重新启动-docker-服务如果需要",[2839,29120,29121],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,29123,29124],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,29126,29127],{"className":26338,"code":29016,"language":26340,"meta":31,"style":31},[33,29128,29129],{"__ignoreMap":31},[36,29130,29131,29133,29135,29137],{"class":38,"line":39},[36,29132,27093],{"class":4500},[36,29134,29025],{"class":57},[36,29136,6715],{"class":57},[36,29138,29004],{"class":57},[24515,29140,29142,28985],{"id":29141},"_227重启电脑后检查-docker-服务状态",[2839,29143,29144],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29146,29147],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,29149,29151],{"className":26338,"code":29150,"language":26340,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,29152,29153,29160],{"__ignoreMap":31},[36,29154,29155,29157],{"class":38,"line":39},[36,29156,27093],{"class":4500},[36,29158,29159],{"class":57}," reboot\n",[36,29161,29162,29164,29166],{"class":38,"line":46},[36,29163,28998],{"class":4500},[36,29165,29001],{"class":57},[36,29167,29004],{"class":57},[19,29169,29170],{},[4000,29171],{"alt":31,"src":29172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29174,29175],{},"第三行显示enabled说明开机自启动成功",[19,29177,29178],{},"按q退出",[997,29180,29182],{"id":29181},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29184,29185],{},"优先使用linux来使用docker是比较好的",[19,29187,29188],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29190,29191],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29193,29194,29195],{},"官方下载安装:",[2923,29196,29197],{"href":29197,"rel":29198},"https:\u002F\u002Fwww.docker.com\u002F",[26381],[19,29200,29201],{},"Windows的Docker显卡直通与USB直通:",[19,29203,29204],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29206,29207],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,29209,29210],{},[4000,29211],{"alt":31,"src":29212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,29214,29215],{},[4000,29216],{"alt":31,"src":29217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,29219,29220],{},[4000,29221],{"alt":31,"src":29222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2602,29224,29225],{},"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":31,"searchDepth":46,"depth":46,"links":29227},[29228,29229,29230],{"id":28506,"depth":82,"text":28507},{"id":28977,"depth":82,"text":28978},{"id":29181,"depth":82,"text":29182},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28498,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29237,"title":29238,"body":29239,"description":29246,"extension":2631,"meta":29939,"navigation":545,"path":29940,"seo":29941,"stem":29942,"__hash__":29943},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29240,"toc":29933},[29241,29244,29247,29251,29256,29261,29264,29292,29297,29306,29309,29314,29318,29325,29330,29336,29340,29343,29347,29352,29444,29449,29467,29472,29493,29498,29514,29518,29523,29552,29557,29603,29608,29652,29660,29677,29682,29698,29703,29717,29720,29723,29726,29729,29758,29761,29766,29770,29773,29776,29782,29785,29788,29791,29853,29860,29865,29868,29886,29890,29893,29910,29913,29916,29930],[10,29242,29238],{"id":29243},"_3docker直通",[19,29245,29246],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[997,29248,29250],{"id":29249},"_31usb直通","3.1.USB直通",[19,29252,29253],{},[4000,29254],{"alt":31,"src":29255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[433,29257,29258],{},[436,29259,29260],{},"方法一(不是很推荐新手)：",[19,29262,29263],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,29265,29267],{"className":26338,"code":29266,"language":26340,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,29268,29269,29277,29282],{"__ignoreMap":31},[36,29270,29271,29274],{"class":38,"line":39},[36,29272,29273],{"class":4500},"ls",[36,29275,29276],{"class":57}," \u002Fdev\n",[36,29278,29279],{"class":38,"line":46},[36,29280,29281],{"class":42},"#例如\n",[36,29283,29284,29287,29289],{"class":38,"line":82},[36,29285,29286],{"class":53},"--device",[36,29288,115],{"class":114},[36,29290,29291],{"class":57},"\u002Fdev\u002Ftty_USB0\n",[433,29293,29294],{"start":46},[436,29295,29296],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,29298,29300],{"className":26338,"code":29299,"language":26340,"meta":31,"style":31},"--privileged\n",[33,29301,29302],{"__ignoreMap":31},[36,29303,29304],{"class":38,"line":39},[36,29305,29299],{"class":4500},[19,29307,29308],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29310,29311],{},[4000,29312],{"alt":31,"src":29313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[997,29315,29317],{"id":29316},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29319,29320,29321,29324],{},"NVIDIA Container Toolkit使用户 ",[2839,29322,29323],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29326,29327],{},[4000,29328],{"alt":31,"src":29329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29331,29332],{},[2923,29333,29334],{"href":29334,"rel":29335},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26381],[24515,29337,29339],{"id":29338},"_321安装","3.2.1.安装",[19,29341,29342],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25427,29344,29346],{"id":29345},"_3211ubuntu","3.2.1.1.Ubuntu",[433,29348,29349],{},[436,29350,29351],{},"配置存储库 并更新",[26,29353,29355],{"className":26338,"code":29354,"language":26340,"meta":31,"style":31},"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",[33,29356,29357,29386,29406,29418,29430,29436],{"__ignoreMap":31},[36,29358,29359,29362,29365,29368,29370,29372,29375,29378,29381,29384],{"class":38,"line":39},[36,29360,29361],{"class":4500},"curl",[36,29363,29364],{"class":49}," -fsSL",[36,29366,29367],{"class":57}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,29369,27625],{"class":114},[36,29371,28586],{"class":4500},[36,29373,29374],{"class":57}," gpg",[36,29376,29377],{"class":49}," --dearmor",[36,29379,29380],{"class":49}," -o",[36,29382,29383],{"class":57}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,29385,27195],{"class":49},[36,29387,29388,29391,29393,29396,29399,29402,29404],{"class":38,"line":46},[36,29389,29390],{"class":53},"  && ",[36,29392,29361],{"class":4500},[36,29394,29395],{"class":49}," -s",[36,29397,29398],{"class":49}," -L",[36,29400,29401],{"class":57}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,29403,27625],{"class":114},[36,29405,27195],{"class":49},[36,29407,29408,29411,29414,29416],{"class":38,"line":82},[36,29409,29410],{"class":4500},"    sed",[36,29412,29413],{"class":57}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,29415,27625],{"class":114},[36,29417,27195],{"class":49},[36,29419,29420,29423,29425,29428],{"class":38,"line":88},[36,29421,29422],{"class":4500},"    sudo",[36,29424,28729],{"class":57},[36,29426,29427],{"class":57}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,29429,27195],{"class":49},[36,29431,29432,29434],{"class":38,"line":195},[36,29433,29390],{"class":53},[36,29435,28688],{"class":49},[36,29437,29438,29440,29442],{"class":38,"line":1517},[36,29439,29422],{"class":4500},[36,29441,28589],{"class":57},[36,29443,28754],{"class":57},[433,29445,29446],{"start":46},[436,29447,29448],{},"安装nvidia-docker2",[26,29450,29452],{"className":26338,"code":29451,"language":26340,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,29453,29454],{"__ignoreMap":31},[36,29455,29456,29458,29460,29462,29464],{"class":38,"line":39},[36,29457,27093],{"class":4500},[36,29459,28589],{"class":57},[36,29461,26350],{"class":57},[36,29463,28912],{"class":49},[36,29465,29466],{"class":57}," nvidia-docker2\n",[433,29468,29469],{"start":82},[436,29470,29471],{},"使用nvidia-ctk命令配置container runtime",[26,29473,29475],{"className":26338,"code":29474,"language":26340,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,29476,29477],{"__ignoreMap":31},[36,29478,29479,29481,29484,29487,29490],{"class":38,"line":39},[36,29480,27093],{"class":4500},[36,29482,29483],{"class":57}," nvidia-ctk",[36,29485,29486],{"class":57}," runtime",[36,29488,29489],{"class":57}," configure",[36,29491,29492],{"class":49}," --runtime=docker\n",[433,29494,29495],{"start":88},[436,29496,29497],{},"重启docker服务:",[26,29499,29501],{"className":26338,"code":29500,"language":26340,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,29502,29503],{"__ignoreMap":31},[36,29504,29505,29507,29509,29512],{"class":38,"line":39},[36,29506,27093],{"class":4500},[36,29508,29025],{"class":57},[36,29510,29511],{"class":57}," restart",[36,29513,29004],{"class":57},[25427,29515,29517],{"id":29516},"_3212fedora","3.2.1.2.Fedora",[433,29519,29520],{},[436,29521,29522],{},"配置存储库",[26,29524,29526],{"className":26338,"code":29525,"language":26340,"meta":31,"style":31},"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",[33,29527,29528,29543],{"__ignoreMap":31},[36,29529,29530,29532,29534,29536,29539,29541],{"class":38,"line":39},[36,29531,29361],{"class":4500},[36,29533,29395],{"class":49},[36,29535,29398],{"class":49},[36,29537,29538],{"class":57}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,29540,27625],{"class":114},[36,29542,27195],{"class":49},[36,29544,29545,29547,29549],{"class":38,"line":46},[36,29546,27093],{"class":4500},[36,29548,28729],{"class":57},[36,29550,29551],{"class":57}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[433,29553,29554],{"start":46},[436,29555,29556],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,29558,29560],{"className":26338,"code":29559,"language":26340,"meta":31,"style":31},"# 如果是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",[33,29561,29562,29567,29581,29585,29590],{"__ignoreMap":31},[36,29563,29564],{"class":38,"line":39},[36,29565,29566],{"class":42},"# 如果是RHEL或者Rocky（DNF4）\n",[36,29568,29569,29571,29573,29575,29578],{"class":38,"line":46},[36,29570,27093],{"class":4500},[36,29572,28827],{"class":57},[36,29574,28926],{"class":57},[36,29576,29577],{"class":49}," --add-repo",[36,29579,29580],{"class":57}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,29582,29583],{"class":38,"line":82},[36,29584,546],{"emptyLinePlaceholder":545},[36,29586,29587],{"class":38,"line":88},[36,29588,29589],{"class":42},"# 如果是Feodra41+（DNF5）\n",[36,29591,29592,29594,29596,29598,29600],{"class":38,"line":195},[36,29593,27093],{"class":4500},[36,29595,28827],{"class":57},[36,29597,28926],{"class":57},[36,29599,28929],{"class":57},[36,29601,29602],{"class":49}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[433,29604,29605],{"start":82},[436,29606,29607],{},"安装NVIDIA Container Toolki包",[26,29609,29611],{"className":26338,"code":29610,"language":26340,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,29612,29613,29618,29631,29635,29640],{"__ignoreMap":31},[36,29614,29615],{"class":38,"line":39},[36,29616,29617],{"class":42},"# 如果是RHEL或者Rocky\n",[36,29619,29620,29622,29624,29626,29628],{"class":38,"line":46},[36,29621,27093],{"class":4500},[36,29623,28827],{"class":57},[36,29625,26350],{"class":57},[36,29627,28912],{"class":49},[36,29629,29630],{"class":57}," nvidia-container-toolkit\n",[36,29632,29633],{"class":38,"line":82},[36,29634,546],{"emptyLinePlaceholder":545},[36,29636,29637],{"class":38,"line":88},[36,29638,29639],{"class":42},"# 如果是Fedora\n",[36,29641,29642,29644,29646,29648,29650],{"class":38,"line":195},[36,29643,27093],{"class":4500},[36,29645,28827],{"class":57},[36,29647,26350],{"class":57},[36,29649,28912],{"class":49},[36,29651,29630],{"class":57},[433,29653,29654],{"start":88},[436,29655,29656,29657,29659],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,29658,28802],{},"进行安装",[26,29661,29663],{"className":26338,"code":29662,"language":26340,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,29664,29665],{"__ignoreMap":31},[36,29666,29667,29669,29671,29673,29675],{"class":38,"line":39},[36,29668,27093],{"class":4500},[36,29670,28827],{"class":57},[36,29672,26350],{"class":57},[36,29674,28912],{"class":49},[36,29676,29466],{"class":57},[433,29678,29679],{"start":195},[436,29680,29681],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,29683,29684],{"className":26338,"code":29474,"language":26340,"meta":31,"style":31},[33,29685,29686],{"__ignoreMap":31},[36,29687,29688,29690,29692,29694,29696],{"class":38,"line":39},[36,29689,27093],{"class":4500},[36,29691,29483],{"class":57},[36,29693,29486],{"class":57},[36,29695,29489],{"class":57},[36,29697,29492],{"class":49},[433,29699,29700],{"start":1517},[436,29701,29702],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,29704,29705],{"className":26338,"code":29500,"language":26340,"meta":31,"style":31},[33,29706,29707],{"__ignoreMap":31},[36,29708,29709,29711,29713,29715],{"class":38,"line":39},[36,29710,27093],{"class":4500},[36,29712,29025],{"class":57},[36,29714,29511],{"class":57},[36,29716,29004],{"class":57},[19,29718,29719],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29721,29722],{},"方法：",[19,29724,29725],{},"1️⃣nvidia-smi",[19,29727,29728],{},"2️⃣运行nvidia cuda 容器进行测试",[26,29730,29732],{"className":26338,"code":29731,"language":26340,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,29733,29734],{"__ignoreMap":31},[36,29735,29736,29738,29740,29743,29746,29749,29752,29755],{"class":38,"line":39},[36,29737,27093],{"class":4500},[36,29739,28832],{"class":57},[36,29741,29742],{"class":57}," run",[36,29744,29745],{"class":49}," --rm",[36,29747,29748],{"class":49}," --gpus",[36,29750,29751],{"class":57}," all",[36,29753,29754],{"class":57}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,29756,29757],{"class":57}," nvidia-smi\n",[19,29759,29760],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29762,29763],{},[4000,29764],{"alt":31,"src":29765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[997,29767,29769],{"id":29768},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29771,29772],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29774,29775],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29777,29778],{},[2923,29779,29780],{"href":29780,"rel":29781},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26381],[19,29783,29784],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29786,29787],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29789,29790],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[206,29792,29793,29809],{},[209,29794,29795],{},[212,29796,29797,29800,29803,29806],{},[215,29798,29799],{"align":26253},"镜像类型",[215,29801,29802],{"align":26253},"适用场景",[215,29804,29805],{"align":26253},"示例标签",[215,29807,29808],{"align":26253},"大小",[225,29810,29811,29825,29839],{},[212,29812,29813,29816,29819,29822],{},[230,29814,29815],{"align":26253},"base",[230,29817,29818],{"align":26253},"仅需 CUDA 运行时库",[230,29820,29821],{"align":26253},"12.4.0-base-ubuntu22.04",[230,29823,29824],{"align":26253},"~240MB",[212,29826,29827,29830,29833,29836],{},[230,29828,29829],{"align":26253},"runtime",[230,29831,29832],{"align":26253},"部署编译后的应用（含数学库）",[230,29834,29835],{"align":26253},"12.4.0-runtime-ubuntu22.04",[230,29837,29838],{"align":26253},"~2GB",[212,29840,29841,29844,29847,29850],{},[230,29842,29843],{"align":26253},"devel",[230,29845,29846],{"align":26253},"开发环境（含编译工具）",[230,29848,29849],{"align":26253},"12.4.0-devel-ubuntu22.04",[230,29851,29852],{"align":26253},"~3GB",[19,29854,29855,29856,29859],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,29857,29858],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29861,29862],{},[4000,29863],{"alt":31,"src":29864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29866,29867],{},"在dockerfile里就可以开头这么写：",[26,29869,29871],{"className":26338,"code":29870,"language":26340,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,29872,29873,29878],{"__ignoreMap":31},[36,29874,29875],{"class":38,"line":39},[36,29876,29877],{"class":42},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,29879,29880,29883],{"class":38,"line":46},[36,29881,29882],{"class":4500},"FROM",[36,29884,29885],{"class":57}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[997,29887,29889],{"id":29888},"_34配置以太网","3.4.配置以太网",[19,29891,29892],{},"指定网络模式",[26,29894,29896],{"className":26338,"code":29895,"language":26340,"meta":31,"style":31},"--net=host \\\n",[33,29897,29898],{"__ignoreMap":31},[36,29899,29900,29903,29905,29908],{"class":38,"line":39},[36,29901,29902],{"class":53},"--net",[36,29904,115],{"class":114},[36,29906,29907],{"class":57},"host",[36,29909,27195],{"class":4500},[19,29911,29912],{},"启动参数里加上这行即可。具体在下方",[19,29914,29915],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3680,29917,29918,29921,29924,29927],{},[436,29919,29920],{},"--net=bridge:默认选项，表示连接到默认的网桥",[436,29922,29923],{},"--net=host:容器使用宿主机的网络",[436,29925,29926],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[436,29928,29929],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2602,29931,29932],{},"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":31,"searchDepth":46,"depth":46,"links":29934},[29935,29936,29937,29938],{"id":29249,"depth":82,"text":29250},{"id":29316,"depth":82,"text":29317},{"id":29768,"depth":82,"text":29769},{"id":29888,"depth":82,"text":29889},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29238,"description":29246},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29945,"title":29946,"body":29947,"description":29954,"extension":2631,"meta":29960,"navigation":545,"path":29961,"seo":29962,"stem":29963,"__hash__":29964},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29948,"toc":29958},[29949,29952,29955],[10,29950,29946],{"id":29951},"_4dockerhub换源",[19,29953,29954],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29956,29957],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":46,"depth":46,"links":29959},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29946,"description":29954},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29966,"title":29967,"body":29968,"description":31,"extension":2631,"meta":30978,"navigation":545,"path":30979,"seo":30980,"stem":30981,"__hash__":30982},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29969,"toc":30973},[29970,29973,29977,29983,29987,29990,30329,30332,30335,30338,30343,30348,30351,30354,30357,30360,30379,30382,30393,30399,30581,30591,30607,30870,30872,30896,30911,30920,30970],[10,29971,29967],{"id":29972},"_5docker命令学习",[997,29974,29976],{"id":29975},"_51参考文档","5.1.参考文档",[19,29978,29979],{},[2923,29980,29981],{"href":29981,"rel":29982},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26381],[997,29984,29986],{"id":29985},"_52常用命令","5.2.常用命令",[19,29988,29989],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[206,29991,29992,30004],{},[209,29993,29994],{},[212,29995,29996,29999,30002],{},[215,29997,29998],{"align":26253},"命令",[215,30000,30001],{"align":26253},"描述",[215,30003,220],{"align":26253},[225,30005,30006,30017,30028,30039,30050,30061,30072,30083,30093,30104,30115,30126,30136,30147,30158,30169,30179,30189,30199,30209,30220,30231,30242,30253,30264,30275,30285,30296,30307,30318],{},[212,30007,30008,30011,30014],{},[230,30009,30010],{"align":26253},"docker run",[230,30012,30013],{"align":26253},"创建并启动一个新的容器。",[230,30015,30016],{"align":26253},"docker run -it ubuntu bash",[212,30018,30019,30022,30025],{},[230,30020,30021],{"align":26253},"docker build",[230,30023,30024],{"align":26253},"通过指定的 Dockerfile 创建一个新的镜像。",[230,30026,30027],{"align":26253},"docker build -t myimage .",[212,30029,30030,30033,30036],{},[230,30031,30032],{"align":26253},"docker pull",[230,30034,30035],{"align":26253},"从 Docker 仓库拉取镜像。",[230,30037,30038],{"align":26253},"docker pull ubuntu",[212,30040,30041,30044,30047],{},[230,30042,30043],{"align":26253},"docker push",[230,30045,30046],{"align":26253},"将本地镜像推送到 Docker 仓库。",[230,30048,30049],{"align":26253},"docker push myimage",[212,30051,30052,30055,30058],{},[230,30053,30054],{"align":26253},"docker stop",[230,30056,30057],{"align":26253},"停止一个正在运行的容器。",[230,30059,30060],{"align":26253},"docker stop container_id",[212,30062,30063,30066,30069],{},[230,30064,30065],{"align":26253},"docker start",[230,30067,30068],{"align":26253},"启动一个已经存在的容器。",[230,30070,30071],{"align":26253},"docker start container_id",[212,30073,30074,30077,30080],{},[230,30075,30076],{"align":26253},"docker restart",[230,30078,30079],{"align":26253},"重新启动容器。",[230,30081,30082],{"align":26253},"docker restart container_id",[212,30084,30085,30088,30091],{},[230,30086,30087],{"align":26253},"docker ps",[230,30089,30090],{"align":26253},"列出当前正在运行的容器。",[230,30092,30087],{"align":26253},[212,30094,30095,30098,30101],{},[230,30096,30097],{"align":26253},"docker rm",[230,30099,30100],{"align":26253},"删除一个或多个停止的容器。",[230,30102,30103],{"align":26253},"docker rm container_id",[212,30105,30106,30109,30112],{},[230,30107,30108],{"align":26253},"docker exec",[230,30110,30111],{"align":26253},"在一个正在运行的容器中执行命令。",[230,30113,30114],{"align":26253},"docker exec -it container_id bash",[212,30116,30117,30120,30123],{},[230,30118,30119],{"align":26253},"docker logs",[230,30121,30122],{"align":26253},"查看容器的日志输出。",[230,30124,30125],{"align":26253},"docker logs container_id",[212,30127,30128,30131,30134],{},[230,30129,30130],{"align":26253},"docker images",[230,30132,30133],{"align":26253},"列出本地所有镜像。",[230,30135,30130],{"align":26253},[212,30137,30138,30141,30144],{},[230,30139,30140],{"align":26253},"docker rmi",[230,30142,30143],{"align":26253},"删除一个或多个镜像。",[230,30145,30146],{"align":26253},"docker rmi myimage",[212,30148,30149,30152,30155],{},[230,30150,30151],{"align":26253},"docker network",[230,30153,30154],{"align":26253},"管理 Docker 网络。",[230,30156,30157],{"align":26253},"docker network ls",[212,30159,30160,30163,30166],{},[230,30161,30162],{"align":26253},"docker volume",[230,30164,30165],{"align":26253},"管理 Docker 数据卷。",[230,30167,30168],{"align":26253},"docker volume ls",[212,30170,30171,30174,30177],{},[230,30172,30173],{"align":26253},"docker-compose up",[230,30175,30176],{"align":26253},"启动 docker-compose.yml 中定义的所有服务。",[230,30178,30173],{"align":26253},[212,30180,30181,30184,30187],{},[230,30182,30183],{"align":26253},"docker-compose down",[230,30185,30186],{"align":26253},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[230,30188,30183],{"align":26253},[212,30190,30191,30194,30197],{},[230,30192,30193],{"align":26253},"docker info",[230,30195,30196],{"align":26253},"显示 Docker 系统的详细信息。",[230,30198,30193],{"align":26253},[212,30200,30201,30204,30207],{},[230,30202,30203],{"align":26253},"docker stats",[230,30205,30206],{"align":26253},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[230,30208,30203],{"align":26253},[212,30210,30211,30214,30217],{},[230,30212,30213],{"align":26253},"docker inspect",[230,30215,30216],{"align":26253},"查看容器或镜像的详细信息（JSON 格式）。",[230,30218,30219],{"align":26253},"docker inspect container_id",[212,30221,30222,30225,30228],{},[230,30223,30224],{"align":26253},"docker save",[230,30226,30227],{"align":26253},"将一个镜像保存为 tar 文件。",[230,30229,30230],{"align":26253},"docker save -o myimage.tar myimage",[212,30232,30233,30236,30239],{},[230,30234,30235],{"align":26253},"docker load",[230,30237,30238],{"align":26253},"从 tar 文件中加载镜像。",[230,30240,30241],{"align":26253},"docker load -i myimage.tar",[212,30243,30244,30247,30250],{},[230,30245,30246],{"align":26253},"docker tag",[230,30248,30249],{"align":26253},"为镜像添加标签（tag）。",[230,30251,30252],{"align":26253},"docker tag myimage myimage:v1",[212,30254,30255,30258,30261],{},[230,30256,30257],{"align":26253},"docker buildx build",[230,30259,30260],{"align":26253},"使用 Buildx 构建多架构镜像。",[230,30262,30263],{"align":26253},"docker buildx build -t myimage .",[212,30265,30266,30269,30272],{},[230,30267,30268],{"align":26253},"docker buildx create",[230,30270,30271],{"align":26253},"创建一个新的 Buildx 构建实例。",[230,30273,30274],{"align":26253},"docker buildx create –use",[212,30276,30277,30280,30283],{},[230,30278,30279],{"align":26253},"docker buildx ls",[230,30281,30282],{"align":26253},"列出所有可用的 Buildx 构建实例。",[230,30284,30279],{"align":26253},[212,30286,30287,30290,30293],{},[230,30288,30289],{"align":26253},"docker buildx use",[230,30291,30292],{"align":26253},"设置当前的 Buildx 构建实例。",[230,30294,30295],{"align":26253},"docker buildx use mybuilder",[212,30297,30298,30301,30304],{},[230,30299,30300],{"align":26253},"docker buildx bake",[230,30302,30303],{"align":26253},"使用 Bake 文件批量构建镜像。",[230,30305,30306],{"align":26253},"docker buildx bake -f bake.hcl",[212,30308,30309,30312,30315],{},[230,30310,30311],{"align":26253},"docker buildx build –push",[230,30313,30314],{"align":26253},"构建镜像并推送到镜像仓库。",[230,30316,30317],{"align":26253},"docker buildx build –push -t myimage .",[212,30319,30320,30323,30326],{},[230,30321,30322],{"align":26253},"docker buildx build –platform",[230,30324,30325],{"align":26253},"构建镜像并为多个平台生成支持。",[230,30327,30328],{"align":26253},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30330,30331],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30333,30334],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30336,30337],{},"docker images 可以查看已经下载的镜像",[19,30339,30340],{},[4000,30341],{"alt":31,"src":30342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30344,30345],{},[2839,30346,30347],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30349,30350],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30352,30353],{},"docker container logs 查看容器日志",[19,30355,30356],{},"docker top 查看容器里的进程",[19,30358,30359],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,30361,30363],{"className":26338,"code":30362,"language":26340,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,30364,30365],{"__ignoreMap":31},[36,30366,30367,30370,30373,30376],{"class":38,"line":39},[36,30368,30369],{"class":4500},"如：docker",[36,30371,30372],{"class":57}," cp",[36,30374,30375],{"class":57}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,30377,30378],{"class":57}," \u002Fmydata\u002Fnginx\n",[19,30380,30381],{},"docker run时在启动容器的时候会有几个常用的选项：",[3680,30383,30384,30387,30390],{},[436,30385,30386],{},"-d选项：表示后台运行",[436,30388,30389],{},"-P选项：随机端口映射",[436,30391,30392],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[997,30394,30396],{"id":30395},"_53run命令的参数非常重要",[2839,30397,30398],{},"5.3.run命令的参数（非常重要）",[206,30400,30401,30414],{},[209,30402,30403],{},[212,30404,30405,30408,30411],{},[215,30406,30407],{"align":26253},"参数\u002F配置",[215,30409,30410],{"align":26253},"功能说明",[215,30412,30413],{"align":26253},"重要性与参考依据",[225,30415,30416,30427,30438,30449,30460,30471,30482,30493,30504,30515,30526,30537,30548,30559,30570],{},[212,30417,30418,30421,30424],{},[230,30419,30420],{"align":26253},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[230,30422,30423],{"align":26253},"指定容器名称，便于后续管理",[230,30425,30426],{"align":26253},"替代随机生成的容器名。",[212,30428,30429,30432,30435],{},[230,30430,30431],{"align":26253},"–gpus all",[230,30433,30434],{"align":26253},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[230,30436,30437],{"align":26253},"用于CUDA加速等GPU依赖任务。",[212,30439,30440,30443,30446],{},[230,30441,30442],{"align":26253},"-e NVIDIA_DRIVER_CAPABILITIES=all",[230,30444,30445],{"align":26253},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[230,30447,30448],{"align":26253},"确保容器内GPU功能完整67。",[212,30450,30451,30454,30457],{},[230,30452,30453],{"align":26253},"-dit",[230,30455,30456],{"align":26253},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[230,30458,30459],{"align":26253},"允许容器在后台运行并支持交互操作。",[212,30461,30462,30465,30468],{},[230,30463,30464],{"align":26253},"–privileged",[230,30466,30467],{"align":26253},"赋予容器完全主机权限（可访问设备、内核模块等）",[230,30469,30470],{"align":26253},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[212,30472,30473,30476,30479],{},[230,30474,30475],{"align":26253},"–net=host",[230,30477,30478],{"align":26253},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[230,30480,30481],{"align":26253},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[212,30483,30484,30487,30490],{},[230,30485,30486],{"align":26253},"–group-add audio–group-add video–group-add dialout",[230,30488,30489],{"align":26253},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[230,30491,30492],{"align":26253},"避免权限问题（如避免无法调用摄像头、麦克风）。",[212,30494,30495,30498,30501],{},[230,30496,30497],{"align":26253},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[230,30499,30500],{"align":26253},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[230,30502,30503],{"align":26253},"支持容器内运行图形界面应用（如OpenCV可视化）。",[212,30505,30506,30509,30512],{},[230,30507,30508],{"align":26253},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[230,30510,30511],{"align":26253},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[230,30513,30514],{"align":26253},"实现容器内图形显示。",[212,30516,30517,30520,30523],{},[230,30518,30519],{"align":26253},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[230,30521,30522],{"align":26253},"挂载X11认证文件（只读）",[230,30524,30525],{"align":26253},"确保容器有权连接宿主机显示服务。",[212,30527,30528,30531,30534],{},[230,30529,30530],{"align":26253},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[230,30532,30533],{"align":26253},"挂载Wayland显示协议相关目录",[230,30535,30536],{"align":26253},"支持Wayland协议的图形显示。",[212,30538,30539,30542,30545],{},[230,30540,30541],{"align":26253},"–ulimit nofile=1024:524288",[230,30543,30544],{"align":26253},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[230,30546,30547],{"align":26253},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[212,30549,30550,30553,30556],{},[230,30551,30552],{"align":26253},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[230,30554,30555],{"align":26253},"挂载宿主机用户目录到容器内同名路径",[230,30557,30558],{"align":26253},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[212,30560,30561,30564,30567],{},[230,30562,30563],{"align":26253},"-w \u002Fhome\u002Ftungchiahui",[230,30565,30566],{"align":26253},"设置容器启动后的默认工作目录",[230,30568,30569],{"align":26253},"直接进入项目路径，方便执行命令2324。",[212,30571,30572,30575,30578],{},[230,30573,30574],{"align":26253},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[230,30576,30577],{"align":26253},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[230,30579,30580],{"align":26253},"提供预配置的深度学习与机器人开发环境。",[19,30582,30583,30584,30586,30587,30590],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,30585,27093],{},"加不加",[33,30588,30589],{},"sudo -E","都无所谓。",[19,30592,30593,30594,30596,30597,30599,30600,30603,30604,30606],{},"用户已经被加到docker组了，不用",[33,30595,27093],{},"也行跑，其次，",[33,30598,27093],{},"运行的话，你的",[33,30601,30602],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,30605,30602],{},"更不可能变了。",[26,30608,30610],{"className":26338,"code":30609,"language":26340,"meta":31,"style":31},"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",[33,30611,30612,30625,30635,30645,30657,30664,30671,30678,30688,30697,30706,30720,30732,30744,30753,30763,30772,30787,30820,30847,30858,30865],{"__ignoreMap":31},[36,30613,30614,30616,30618,30620,30623],{"class":38,"line":39},[36,30615,27093],{"class":4500},[36,30617,28832],{"class":57},[36,30619,29742],{"class":57},[36,30621,30622],{"class":49}," --name=ros_opencv_cuda",[36,30624,27195],{"class":49},[36,30626,30627,30630,30633],{"class":38,"line":46},[36,30628,30629],{"class":53},"--gpus ",[36,30631,30632],{"class":57},"all",[36,30634,27195],{"class":49},[36,30636,30637,30640,30643],{"class":38,"line":82},[36,30638,30639],{"class":53},"-e ",[36,30641,30642],{"class":57},"NVIDIA_DRIVER_CAPABILITIES=all",[36,30644,27195],{"class":49},[36,30646,30647,30649,30652,30655],{"class":38,"line":88},[36,30648,30639],{"class":53},[36,30650,30651],{"class":57},"DISPLAY=",[36,30653,30654],{"class":53},"$DISPLAY ",[36,30656,28688],{"class":49},[36,30658,30659,30662],{"class":38,"line":195},[36,30660,30661],{"class":53},"-dit ",[36,30663,28688],{"class":49},[36,30665,30666,30669],{"class":38,"line":1517},[36,30667,30668],{"class":53},"--privileged ",[36,30670,28688],{"class":49},[36,30672,30673,30676],{"class":38,"line":2421},[36,30674,30675],{"class":53},"--net=host ",[36,30677,28688],{"class":49},[36,30679,30680,30683,30686],{"class":38,"line":2446},[36,30681,30682],{"class":53},"--group-add ",[36,30684,30685],{"class":57},"audio",[36,30687,27195],{"class":49},[36,30689,30690,30692,30695],{"class":38,"line":2469},[36,30691,30682],{"class":53},[36,30693,30694],{"class":57},"video",[36,30696,27195],{"class":49},[36,30698,30699,30701,30704],{"class":38,"line":2492},[36,30700,30682],{"class":53},[36,30702,30703],{"class":57},"dialout",[36,30705,27195],{"class":49},[36,30707,30708,30710,30713,30715,30718],{"class":38,"line":4150},[36,30709,30639],{"class":53},[36,30711,30712],{"class":57},"XAUTHORITY=",[36,30714,30602],{"class":53},[36,30716,30717],{"class":57},"\u002F.Xauthority",[36,30719,27195],{"class":49},[36,30721,30722,30724,30727,30730],{"class":38,"line":4155},[36,30723,30639],{"class":53},[36,30725,30726],{"class":57},"WAYLAND_DISPLAY=",[36,30728,30729],{"class":53},"$WAYLAND_DISPLAY ",[36,30731,28688],{"class":49},[36,30733,30734,30736,30739,30742],{"class":38,"line":4161},[36,30735,30639],{"class":53},[36,30737,30738],{"class":57},"XDG_RUNTIME_DIR=",[36,30740,30741],{"class":53},"$XDG_RUNTIME_DIR ",[36,30743,28688],{"class":49},[36,30745,30746,30748,30751],{"class":38,"line":4166},[36,30747,30639],{"class":53},[36,30749,30750],{"class":57},"QT_QPA_PLATFORM=xcb",[36,30752,27195],{"class":49},[36,30754,30755,30758,30761],{"class":38,"line":4180},[36,30756,30757],{"class":53},"-v ",[36,30759,30760],{"class":57},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,30762,27195],{"class":49},[36,30764,30765,30767,30770],{"class":38,"line":4185},[36,30766,30757],{"class":53},[36,30768,30769],{"class":57},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,30771,27195],{"class":49},[36,30773,30774,30777,30780,30782,30785],{"class":38,"line":4191},[36,30775,30776],{"class":53},"-v $HOME",[36,30778,30779],{"class":57},"\u002F.Xauthority:",[36,30781,30602],{"class":53},[36,30783,30784],{"class":57},"\u002F.Xauthority:ro",[36,30786,27195],{"class":49},[36,30788,30789,30791,30794,30796,30799,30802,30804,30807,30809,30811,30813,30815,30818],{"class":38,"line":4212},[36,30790,30757],{"class":53},[36,30792,30793],{"class":57},"\u002Frun\u002Fuser\u002F",[36,30795,27615],{"class":53},[36,30797,30798],{"class":4500},"id",[36,30800,30801],{"class":49}," -u",[36,30803,3110],{"class":53},[36,30805,30806],{"class":57},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,30808,27615],{"class":53},[36,30810,30798],{"class":4500},[36,30812,30801],{"class":49},[36,30814,3110],{"class":53},[36,30816,30817],{"class":57},"\u002Fwayland-0",[36,30819,27195],{"class":49},[36,30821,30822,30824,30826,30828,30830,30832,30834,30837,30839,30841,30843,30845],{"class":38,"line":4217},[36,30823,30757],{"class":53},[36,30825,30793],{"class":57},[36,30827,27615],{"class":53},[36,30829,30798],{"class":4500},[36,30831,30801],{"class":49},[36,30833,3110],{"class":53},[36,30835,30836],{"class":57},":\u002Frun\u002Fuser\u002F",[36,30838,27615],{"class":53},[36,30840,30798],{"class":4500},[36,30842,30801],{"class":49},[36,30844,16236],{"class":53},[36,30846,28688],{"class":49},[36,30848,30849,30851,30853,30856],{"class":38,"line":4231},[36,30850,30776],{"class":53},[36,30852,3535],{"class":57},[36,30854,30855],{"class":53},"$HOME ",[36,30857,28688],{"class":49},[36,30859,30860,30863],{"class":38,"line":4236},[36,30861,30862],{"class":53},"-w $HOME ",[36,30864,28688],{"class":49},[36,30866,30867],{"class":38,"line":4264},[36,30868,30869],{"class":53},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30871,695],{},[433,30873,30874,30882,30885,30888],{},[436,30875,30876,16317,30878,30881],{},[33,30877,30642],{},[33,30879,30880],{},"--gpus all","没有英伟达显卡请注释。",[436,30883,30884],{},"--name后面请自己为容器起名。",[436,30886,30887],{},"最后一行仓库名称请你自己找对应的镜像填上。",[436,30889,30890,30891,1296],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[26070,30892,30893],{},[2839,30894,30895],{},"请不要加",[26,30897,30899],{"className":26338,"code":30898,"language":26340,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,30900,30901],{"__ignoreMap":31},[36,30902,30903,30906,30909],{"class":38,"line":39},[36,30904,30905],{"class":4500},"--ulimit",[36,30907,30908],{"class":57}," nofile=1024:524288",[36,30910,27195],{"class":49},[19,30912,30913,30914,30919],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[26070,30915,30916],{},[2839,30917,30918],{},"不建议","**.**",[26,30921,30923],{"className":26338,"code":30922,"language":26340,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,30924,30925,30952,30961],{"__ignoreMap":31},[36,30926,30927,30930,30933,30935,30937,30939,30941,30943,30945,30948,30950],{"class":38,"line":39},[36,30928,30929],{"class":4500},"--user",[36,30931,30932],{"class":53}," $(",[36,30934,30798],{"class":4500},[36,30936,30801],{"class":49},[36,30938,3110],{"class":53},[36,30940,3535],{"class":57},[36,30942,27615],{"class":53},[36,30944,30798],{"class":4500},[36,30946,30947],{"class":49}," -g",[36,30949,16236],{"class":53},[36,30951,28688],{"class":49},[36,30953,30954,30956,30959],{"class":38,"line":46},[36,30955,30757],{"class":53},[36,30957,30958],{"class":57},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,30960,27195],{"class":49},[36,30962,30963,30965,30968],{"class":38,"line":82},[36,30964,30757],{"class":53},[36,30966,30967],{"class":57},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,30969,27195],{"class":49},[2602,30971,30972],{},"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":31,"searchDepth":46,"depth":46,"links":30974},[30975,30976,30977],{"id":29975,"depth":82,"text":29976},{"id":29985,"depth":82,"text":29986},{"id":30395,"depth":82,"text":30398},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29967,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30984,"title":30985,"body":30986,"description":31,"extension":2631,"meta":32609,"navigation":545,"path":32610,"seo":32611,"stem":32612,"__hash__":32613},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30987,"toc":32604},[30988,30991,30995,30998,31220,31224,31228,31231,31337,31342,31345,31350,31353,31358,31361,31366,31369,31381,31384,31389,31396,31424,31431,31507,31512,31515,31538,31540,31615,31620,31623,31627,31635,31640,31645,31649,31660,31666,31669,31672,31696,31699,31702,31730,31733,31736,32201,32204,32209,32214,32218,32241,32246,32250,32254,32257,32260,32263,32290,32293,32296,32314,32317,32320,32342,32350,32355,32360,32364,32367,32370,32373,32376,32421,32424,32442,32445,32450,32453,32474,32477,32533,32536,32541,32545,32548,32555,32558,32561,32566,32569,32585,32588,32601],[10,30989,30985],{"id":30990},"_6手动创建docker镜像",[997,30992,30994],{"id":30993},"_61dockerfile","6.1.DockerFile",[19,30996,30997],{},"常用命令：",[206,30999,31000,31011],{},[209,31001,31002],{},[212,31003,31004,31007,31009],{},[215,31005,31006],{"align":26253},"指令",[215,31008,223],{"align":26253},[215,31010,220],{"align":26253},[225,31012,31013,31023,31039,31050,31061,31072,31083,31094,31105,31119,31133,31144,31158,31169,31180,31194,31209],{},[212,31014,31015,31017,31020],{},[230,31016,29882],{"align":26253},[230,31018,31019],{"align":26253},"指定基础镜像，是 Dockerfile 的起点",[230,31021,31022],{"align":26253},"FROM ubuntu:22.04",[212,31024,31025,31028,31031],{},[230,31026,31027],{"align":26253},"LABEL",[230,31029,31030],{"align":26253},"添加元数据（如作者、版本等）",[230,31032,31033,31034,31038],{"align":26253},"LABEL maintainer=”",[2923,31035,31037],{"href":31036},"mailto:you@example.com","you@example.com","”",[212,31040,31041,31044,31047],{},[230,31042,31043],{"align":26253},"ENV",[230,31045,31046],{"align":26253},"设置环境变量",[230,31048,31049],{"align":26253},"ENV PORT=8080",[212,31051,31052,31055,31058],{},[230,31053,31054],{"align":26253},"ARG",[230,31056,31057],{"align":26253},"构建参数，只在构建期间可用",[230,31059,31060],{"align":26253},"ARG VERSION=1.0",[212,31062,31063,31066,31069],{},[230,31064,31065],{"align":26253},"RUN",[230,31067,31068],{"align":26253},"构建镜像时运行命令",[230,31070,31071],{"align":26253},"RUN apt-get update && apt-get install -y curl",[212,31073,31074,31077,31080],{},[230,31075,31076],{"align":26253},"COPY",[230,31078,31079],{"align":26253},"复制文件到镜像中",[230,31081,31082],{"align":26253},"COPY . \u002Fapp",[212,31084,31085,31088,31091],{},[230,31086,31087],{"align":26253},"ADD",[230,31089,31090],{"align":26253},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[230,31092,31093],{"align":26253},"ADD archive.tar.gz \u002Fdata\u002F",[212,31095,31096,31099,31102],{},[230,31097,31098],{"align":26253},"WORKDIR",[230,31100,31101],{"align":26253},"设置工作目录",[230,31103,31104],{"align":26253},"WORKDIR \u002Fopt",[212,31106,31107,31110,31113],{},[230,31108,31109],{"align":26253},"CMD",[230,31111,31112],{"align":26253},"设置容器启动时默认命令（可被 docker run 覆盖）",[230,31114,31115,31116],{"align":26253},"CMD ",[36,31117,31118],{},"“node”, “index.js”",[212,31120,31121,31124,31127],{},[230,31122,31123],{"align":26253},"ENTRYPOINT",[230,31125,31126],{"align":26253},"设置容器启动时固定命令（通常用于 CLI 工具等）",[230,31128,31129,31130],{"align":26253},"ENTRYPOINT ",[36,31131,31132],{},"“python3”",[212,31134,31135,31138,31141],{},[230,31136,31137],{"align":26253},"EXPOSE",[230,31139,31140],{"align":26253},"声明镜像内服务监听的端口（不会自动映射）",[230,31142,31143],{"align":26253},"EXPOSE 80",[212,31145,31146,31149,31152],{},[230,31147,31148],{"align":26253},"VOLUME",[230,31150,31151],{"align":26253},"声明数据卷挂载点",[230,31153,31154,31155],{"align":26253},"VOLUME ",[36,31156,31157],{},"“\u002Fdata”",[212,31159,31160,31163,31166],{},[230,31161,31162],{"align":26253},"USER",[230,31164,31165],{"align":26253},"设置后续命令执行的用户",[230,31167,31168],{"align":26253},"USER appuser",[212,31170,31171,31174,31177],{},[230,31172,31173],{"align":26253},"ONBUILD",[230,31175,31176],{"align":26253},"当镜像作为其他镜像基础镜像时触发的构建指令",[230,31178,31179],{"align":26253},"ONBUILD COPY . \u002Fsrc",[212,31181,31182,31185,31188],{},[230,31183,31184],{"align":26253},"SHELL",[230,31186,31187],{"align":26253},"更改默认 shell，比如将 sh -c 改为 bash -c",[230,31189,31190,31191],{"align":26253},"SHELL ",[36,31192,31193],{},"“\u002Fbin\u002Fbash”, “-c”",[212,31195,31196,31199,31202],{},[230,31197,31198],{"align":26253},"HEALTHCHECK",[230,31200,31201],{"align":26253},"定义容器运行时的健康检查命令",[230,31203,31204,31205],{"align":26253},"`HEALTHCHECK CMD curl –fail ",[2923,31206,31207],{"href":31207,"rel":31208},"http:\u002F\u002Flocalhost:8080",[26381],[212,31210,31211,31214,31217],{},[230,31212,31213],{"align":26253},"STOPSIGNAL",[230,31215,31216],{"align":26253},"容器停止时发送的信号",[230,31218,31219],{"align":26253},"STOPSIGNAL SIGKILL",[997,31221,31223],{"id":31222},"_62自己创建容器","6.2.自己创建容器",[24515,31225,31227],{"id":31226},"_621手动创建","6.2.1.手动创建",[19,31229,31230],{},"在x86电脑上编译x86的：",[26,31232,31234],{"className":26338,"code":31233,"language":26340,"meta":31,"style":31},"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",[33,31235,31236,31252,31256,31269,31273,31286,31290,31303,31307,31320,31324],{"__ignoreMap":31},[36,31237,31238,31240,31243,31246,31249],{"class":38,"line":39},[36,31239,29065],{"class":4500},[36,31241,31242],{"class":57}," build",[36,31244,31245],{"class":49}," -t",[36,31247,31248],{"class":57}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,31250,31251],{"class":57}," .\n",[36,31253,31254],{"class":38,"line":46},[36,31255,546],{"emptyLinePlaceholder":545},[36,31257,31258,31260,31262,31264,31267],{"class":38,"line":82},[36,31259,29065],{"class":4500},[36,31261,31242],{"class":57},[36,31263,31245],{"class":49},[36,31265,31266],{"class":57}," ros-noetic-focal:latest",[36,31268,31251],{"class":57},[36,31270,31271],{"class":38,"line":88},[36,31272,546],{"emptyLinePlaceholder":545},[36,31274,31275,31277,31279,31281,31284],{"class":38,"line":195},[36,31276,29065],{"class":4500},[36,31278,31242],{"class":57},[36,31280,31245],{"class":49},[36,31282,31283],{"class":57}," ros-humble-jammy:latest",[36,31285,31251],{"class":57},[36,31287,31288],{"class":38,"line":1517},[36,31289,546],{"emptyLinePlaceholder":545},[36,31291,31292,31294,31296,31298,31301],{"class":38,"line":2421},[36,31293,29065],{"class":4500},[36,31295,31242],{"class":57},[36,31297,31245],{"class":49},[36,31299,31300],{"class":57}," ros-jazzy-noble:latest",[36,31302,31251],{"class":57},[36,31304,31305],{"class":38,"line":2446},[36,31306,546],{"emptyLinePlaceholder":545},[36,31308,31309,31311,31313,31315,31318],{"class":38,"line":2469},[36,31310,29065],{"class":4500},[36,31312,31242],{"class":57},[36,31314,31245],{"class":49},[36,31316,31317],{"class":57}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,31319,31251],{"class":57},[36,31321,31322],{"class":38,"line":2492},[36,31323,546],{"emptyLinePlaceholder":545},[36,31325,31326,31328,31330,31332,31335],{"class":38,"line":4150},[36,31327,29065],{"class":4500},[36,31329,31242],{"class":57},[36,31331,31245],{"class":49},[36,31333,31334],{"class":57}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,31336,31251],{"class":57},[19,31338,31339],{},[4000,31340],{"alt":31,"src":31341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31343,31344],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31346,31347],{},[4000,31348],{"alt":31,"src":31349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31351,31352],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[433,31354,31355],{},[436,31356,31357],{},"创建 Docker Hub 账户",[19,31359,31360],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[433,31362,31363],{"start":46},[436,31364,31365],{},"登录 Docker Hub",[19,31367,31368],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,31370,31372],{"className":26338,"code":31371,"language":26340,"meta":31,"style":31},"docker login\n",[33,31373,31374],{"__ignoreMap":31},[36,31375,31376,31378],{"class":38,"line":39},[36,31377,29065],{"class":4500},[36,31379,31380],{"class":57}," login\n",[19,31382,31383],{},"输入你的 Docker Hub 用户名和密码进行验证。",[433,31385,31386],{},[436,31387,31388],{},"为你的镜像打标签",[19,31390,31391,31392,31395],{},"Docker Hub 使用 ",[33,31393,31394],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,31397,31399],{"className":26338,"code":31398,"language":26340,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,31400,31401],{"__ignoreMap":31},[36,31402,31403,31405,31408,31410,31413,31416,31419,31421],{"class":38,"line":39},[36,31404,29065],{"class":4500},[36,31406,31407],{"class":57}," tag",[36,31409,31300],{"class":57},[36,31411,31412],{"class":114}," \u003C",[36,31414,31415],{"class":57},"你的用户",[36,31417,31418],{"class":53},"名",[36,31420,3633],{"class":114},[36,31422,31423],{"class":57},"\u002Fros-jazzy-noble:latest\n",[19,31425,31426,31427,31430],{},"例如，如果你的 Docker Hub 用户名是 ",[33,31428,31429],{},"tungchiahui","，你应该执行：",[26,31432,31434],{"className":26338,"code":31433,"language":26340,"meta":31,"style":31},"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",[33,31435,31436,31447,31451,31462,31466,31477,31481,31492,31496],{"__ignoreMap":31},[36,31437,31438,31440,31442,31444],{"class":38,"line":39},[36,31439,29065],{"class":4500},[36,31441,31407],{"class":57},[36,31443,31266],{"class":57},[36,31445,31446],{"class":57}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,31448,31449],{"class":38,"line":46},[36,31450,546],{"emptyLinePlaceholder":545},[36,31452,31453,31455,31457,31459],{"class":38,"line":82},[36,31454,29065],{"class":4500},[36,31456,31407],{"class":57},[36,31458,31283],{"class":57},[36,31460,31461],{"class":57}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,31463,31464],{"class":38,"line":88},[36,31465,546],{"emptyLinePlaceholder":545},[36,31467,31468,31470,31472,31474],{"class":38,"line":195},[36,31469,29065],{"class":4500},[36,31471,31407],{"class":57},[36,31473,31300],{"class":57},[36,31475,31476],{"class":57}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,31478,31479],{"class":38,"line":1517},[36,31480,546],{"emptyLinePlaceholder":545},[36,31482,31483,31485,31487,31489],{"class":38,"line":2421},[36,31484,29065],{"class":4500},[36,31486,31407],{"class":57},[36,31488,31317],{"class":57},[36,31490,31491],{"class":57}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,31493,31494],{"class":38,"line":2446},[36,31495,546],{"emptyLinePlaceholder":545},[36,31497,31498,31500,31502,31504],{"class":38,"line":2469},[36,31499,29065],{"class":4500},[36,31501,31407],{"class":57},[36,31503,31334],{"class":57},[36,31505,31506],{"class":57}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[433,31508,31509],{"start":46},[436,31510,31511],{},"推送镜像到 Docker Hub",[19,31513,31514],{},"使用以下命令将镜像推送到 Docker Hub：",[26,31516,31518],{"className":26338,"code":31517,"language":26340,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,31519,31520],{"__ignoreMap":31},[36,31521,31522,31524,31527,31529,31531,31533,31535],{"class":38,"line":39},[36,31523,29065],{"class":4500},[36,31525,31526],{"class":57}," push",[36,31528,31412],{"class":114},[36,31530,31415],{"class":57},[36,31532,31418],{"class":53},[36,31534,3633],{"class":114},[36,31536,31537],{"class":57},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31539,17155],{},[26,31541,31543],{"className":26338,"code":31542,"language":26340,"meta":31,"style":31},"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",[33,31544,31545,31553,31557,31565,31569,31577,31581,31590,31594,31602,31606],{"__ignoreMap":31},[36,31546,31547,31549,31551],{"class":38,"line":39},[36,31548,29065],{"class":4500},[36,31550,31526],{"class":57},[36,31552,31446],{"class":57},[36,31554,31555],{"class":38,"line":46},[36,31556,546],{"emptyLinePlaceholder":545},[36,31558,31559,31561,31563],{"class":38,"line":82},[36,31560,29065],{"class":4500},[36,31562,31526],{"class":57},[36,31564,31461],{"class":57},[36,31566,31567],{"class":38,"line":88},[36,31568,546],{"emptyLinePlaceholder":545},[36,31570,31571,31573,31575],{"class":38,"line":195},[36,31572,29065],{"class":4500},[36,31574,31526],{"class":57},[36,31576,31476],{"class":57},[36,31578,31579],{"class":38,"line":1517},[36,31580,546],{"emptyLinePlaceholder":545},[36,31582,31583,31585,31587],{"class":38,"line":2421},[36,31584,29065],{"class":4500},[36,31586,31526],{"class":57},[36,31588,31589],{"class":57}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,31591,31592],{"class":38,"line":2446},[36,31593,546],{"emptyLinePlaceholder":545},[36,31595,31596,31598,31600],{"class":38,"line":2469},[36,31597,29065],{"class":4500},[36,31599,31526],{"class":57},[36,31601,31506],{"class":57},[36,31603,31604],{"class":38,"line":2492},[36,31605,546],{"emptyLinePlaceholder":545},[36,31607,31608,31610,31612],{"class":38,"line":4150},[36,31609,29065],{"class":4500},[36,31611,31526],{"class":57},[36,31613,31614],{"class":57}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[433,31616,31617],{"start":82},[436,31618,31619],{},"验证推送成功",[19,31621,31622],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31624,31625],{},[2839,31626,6315],{},[3680,31628,31629,31632],{},[436,31630,31631],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[436,31633,31634],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31636,31637],{},[4000,31638],{"alt":31,"src":31639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31641,31642],{},[4000,31643],{"alt":31,"src":31644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24515,31646,31648],{"id":31647},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31650,31651,31652,31655,31656,31659],{},"如果您想在 ",[2839,31653,31654],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2839,31657,31658],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31661,31662,31663],{},"1. ",[2839,31664,31665],{},"启用 Docker 跨平台构建",[19,31667,31668],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31670,31671],{},"第一步：启用 buildx（只需执行一次）",[26,31673,31675],{"className":26338,"code":31674,"language":26340,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,31676,31677],{"__ignoreMap":31},[36,31678,31679,31681,31684,31687,31690,31693],{"class":38,"line":39},[36,31680,29065],{"class":4500},[36,31682,31683],{"class":57}," buildx",[36,31685,31686],{"class":57}," create",[36,31688,31689],{"class":49}," --name",[36,31691,31692],{"class":57}," multiarch_builder",[36,31694,31695],{"class":49}," --use\n",[19,31697,31698],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31700,31701],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,31703,31705],{"className":26338,"code":31704,"language":26340,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,31706,31707],{"__ignoreMap":31},[36,31708,31709,31711,31713,31715,31718,31721,31724,31727],{"class":38,"line":39},[36,31710,29065],{"class":4500},[36,31712,29742],{"class":57},[36,31714,29745],{"class":49},[36,31716,31717],{"class":49}," --privileged",[36,31719,31720],{"class":57}," multiarch\u002Fqemu-user-static",[36,31722,31723],{"class":49}," --reset",[36,31725,31726],{"class":49}," -p",[36,31728,31729],{"class":57}," yes\n",[19,31731,31732],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31734,31735],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,31737,31739],{"className":26338,"code":31738,"language":26340,"meta":31,"style":31},"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",[33,31740,31741,31783,31787,31792,31802,31812,31821,31827,31831,31835,31845,31853,31862,31868,31872,31876,31886,31894,31903,31909,31913,31917,31927,31935,31944,31950,31954,31958,31968,31976,31985,31991,31995,31999,32009,32017,32026,32032,32036,32040,32050,32058,32067,32073,32077,32081,32091,32099,32108,32114,32118,32122,32132,32140,32149,32155,32159,32163,32174,32182,32191,32197],{"__ignoreMap":31},[36,31742,31743,31745,31747,31749,31752,31755,31757,31759,31762,31764,31766,31768,31770,31773,31776,31778,31781],{"class":38,"line":39},[36,31744,29065],{"class":4500},[36,31746,31683],{"class":57},[36,31748,31242],{"class":57},[36,31750,31751],{"class":49}," --platform",[36,31753,31754],{"class":57}," linux\u002Famd64,linux\u002Farm64",[36,31756,31245],{"class":49},[36,31758,31412],{"class":114},[36,31760,31761],{"class":57},"你的镜像",[36,31763,31418],{"class":53},[36,31765,3633],{"class":114},[36,31767,3535],{"class":57},[36,31769,1507],{"class":114},[36,31771,31772],{"class":57},"标",[36,31774,31775],{"class":53},"签",[36,31777,3633],{"class":114},[36,31779,31780],{"class":49}," --push",[36,31782,31251],{"class":57},[36,31784,31785],{"class":38,"line":46},[36,31786,546],{"emptyLinePlaceholder":545},[36,31788,31789],{"class":38,"line":82},[36,31790,31791],{"class":42},"# 例子：\n",[36,31793,31794,31796,31798,31800],{"class":38,"line":88},[36,31795,29065],{"class":4500},[36,31797,31683],{"class":57},[36,31799,31242],{"class":57},[36,31801,27195],{"class":49},[36,31803,31804,31807,31810],{"class":38,"line":195},[36,31805,31806],{"class":53},"--platform ",[36,31808,31809],{"class":57},"linux\u002Famd64,linux\u002Farm64",[36,31811,27195],{"class":49},[36,31813,31814,31816,31819],{"class":38,"line":1517},[36,31815,31245],{"class":49},[36,31817,31818],{"class":57}," tungchiahui\u002Fros:noetic-focal",[36,31820,27195],{"class":49},[36,31822,31823,31825],{"class":38,"line":2421},[36,31824,31780],{"class":49},[36,31826,27195],{"class":49},[36,31828,31829],{"class":38,"line":2446},[36,31830,31251],{"class":57},[36,31832,31833],{"class":38,"line":2469},[36,31834,546],{"emptyLinePlaceholder":545},[36,31836,31837,31839,31841,31843],{"class":38,"line":2492},[36,31838,29065],{"class":4500},[36,31840,31683],{"class":57},[36,31842,31242],{"class":57},[36,31844,27195],{"class":49},[36,31846,31847,31849,31851],{"class":38,"line":4150},[36,31848,31806],{"class":53},[36,31850,31809],{"class":57},[36,31852,27195],{"class":49},[36,31854,31855,31857,31860],{"class":38,"line":4155},[36,31856,31245],{"class":49},[36,31858,31859],{"class":57}," tungchiahui\u002Fros:humble-jammy",[36,31861,27195],{"class":49},[36,31863,31864,31866],{"class":38,"line":4161},[36,31865,31780],{"class":49},[36,31867,27195],{"class":49},[36,31869,31870],{"class":38,"line":4166},[36,31871,31251],{"class":57},[36,31873,31874],{"class":38,"line":4180},[36,31875,546],{"emptyLinePlaceholder":545},[36,31877,31878,31880,31882,31884],{"class":38,"line":4185},[36,31879,29065],{"class":4500},[36,31881,31683],{"class":57},[36,31883,31242],{"class":57},[36,31885,27195],{"class":49},[36,31887,31888,31890,31892],{"class":38,"line":4191},[36,31889,31806],{"class":53},[36,31891,31809],{"class":57},[36,31893,27195],{"class":49},[36,31895,31896,31898,31901],{"class":38,"line":4212},[36,31897,31245],{"class":49},[36,31899,31900],{"class":57}," tungchiahui\u002Fros:jazzy-noble",[36,31902,27195],{"class":49},[36,31904,31905,31907],{"class":38,"line":4217},[36,31906,31780],{"class":49},[36,31908,27195],{"class":49},[36,31910,31911],{"class":38,"line":4231},[36,31912,31251],{"class":57},[36,31914,31915],{"class":38,"line":4236},[36,31916,546],{"emptyLinePlaceholder":545},[36,31918,31919,31921,31923,31925],{"class":38,"line":4264},[36,31920,28832],{"class":4500},[36,31922,31683],{"class":57},[36,31924,31242],{"class":57},[36,31926,27195],{"class":49},[36,31928,31929,31931,31933],{"class":38,"line":4269},[36,31930,31806],{"class":53},[36,31932,31809],{"class":57},[36,31934,27195],{"class":49},[36,31936,31937,31939,31942],{"class":38,"line":4286},[36,31938,31245],{"class":49},[36,31940,31941],{"class":57}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,31943,27195],{"class":49},[36,31945,31946,31948],{"class":38,"line":4291},[36,31947,31780],{"class":49},[36,31949,27195],{"class":49},[36,31951,31952],{"class":38,"line":4296},[36,31953,31251],{"class":57},[36,31955,31956],{"class":38,"line":4301},[36,31957,546],{"emptyLinePlaceholder":545},[36,31959,31960,31962,31964,31966],{"class":38,"line":4315},[36,31961,29065],{"class":4500},[36,31963,31683],{"class":57},[36,31965,31242],{"class":57},[36,31967,27195],{"class":49},[36,31969,31970,31972,31974],{"class":38,"line":4320},[36,31971,31806],{"class":53},[36,31973,31809],{"class":57},[36,31975,27195],{"class":49},[36,31977,31978,31980,31983],{"class":38,"line":5109},[36,31979,31245],{"class":49},[36,31981,31982],{"class":57}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,31984,27195],{"class":49},[36,31986,31987,31989],{"class":38,"line":5123},[36,31988,31780],{"class":49},[36,31990,27195],{"class":49},[36,31992,31993],{"class":38,"line":5131},[36,31994,31251],{"class":57},[36,31996,31997],{"class":38,"line":5136},[36,31998,546],{"emptyLinePlaceholder":545},[36,32000,32001,32003,32005,32007],{"class":38,"line":5142},[36,32002,28832],{"class":4500},[36,32004,31683],{"class":57},[36,32006,31242],{"class":57},[36,32008,27195],{"class":49},[36,32010,32011,32013,32015],{"class":38,"line":5148},[36,32012,31806],{"class":53},[36,32014,31809],{"class":57},[36,32016,27195],{"class":49},[36,32018,32019,32021,32024],{"class":38,"line":5153},[36,32020,31245],{"class":49},[36,32022,32023],{"class":57}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,32025,27195],{"class":49},[36,32027,32028,32030],{"class":38,"line":10475},[36,32029,31780],{"class":49},[36,32031,27195],{"class":49},[36,32033,32034],{"class":38,"line":10499},[36,32035,31251],{"class":57},[36,32037,32038],{"class":38,"line":10504},[36,32039,546],{"emptyLinePlaceholder":545},[36,32041,32042,32044,32046,32048],{"class":38,"line":10510},[36,32043,29065],{"class":4500},[36,32045,31683],{"class":57},[36,32047,31242],{"class":57},[36,32049,27195],{"class":49},[36,32051,32052,32054,32056],{"class":38,"line":10537},[36,32053,31806],{"class":53},[36,32055,31809],{"class":57},[36,32057,27195],{"class":49},[36,32059,32060,32062,32065],{"class":38,"line":10542},[36,32061,31245],{"class":49},[36,32063,32064],{"class":57}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,32066,27195],{"class":49},[36,32068,32069,32071],{"class":38,"line":10548},[36,32070,31780],{"class":49},[36,32072,27195],{"class":49},[36,32074,32075],{"class":38,"line":10560},[36,32076,31251],{"class":57},[36,32078,32079],{"class":38,"line":10572},[36,32080,546],{"emptyLinePlaceholder":545},[36,32082,32083,32085,32087,32089],{"class":38,"line":10584},[36,32084,29065],{"class":4500},[36,32086,31683],{"class":57},[36,32088,31242],{"class":57},[36,32090,27195],{"class":49},[36,32092,32093,32095,32097],{"class":38,"line":12241},[36,32094,31806],{"class":53},[36,32096,31809],{"class":57},[36,32098,27195],{"class":49},[36,32100,32101,32103,32106],{"class":38,"line":12266},[36,32102,31245],{"class":49},[36,32104,32105],{"class":57}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,32107,27195],{"class":49},[36,32109,32110,32112],{"class":38,"line":12289},[36,32111,31780],{"class":49},[36,32113,27195],{"class":49},[36,32115,32116],{"class":38,"line":12313},[36,32117,31251],{"class":57},[36,32119,32120],{"class":38,"line":12318},[36,32121,546],{"emptyLinePlaceholder":545},[36,32123,32124,32126,32128,32130],{"class":38,"line":12323},[36,32125,28832],{"class":4500},[36,32127,31683],{"class":57},[36,32129,31242],{"class":57},[36,32131,27195],{"class":49},[36,32133,32134,32136,32138],{"class":38,"line":12328},[36,32135,31806],{"class":53},[36,32137,31809],{"class":57},[36,32139,27195],{"class":49},[36,32141,32142,32144,32147],{"class":38,"line":12337},[36,32143,31245],{"class":49},[36,32145,32146],{"class":57}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,32148,27195],{"class":49},[36,32150,32151,32153],{"class":38,"line":12342},[36,32152,31780],{"class":49},[36,32154,27195],{"class":49},[36,32156,32157],{"class":38,"line":12348},[36,32158,31251],{"class":57},[36,32160,32161],{"class":38,"line":12369},[36,32162,546],{"emptyLinePlaceholder":545},[36,32164,32165,32168,32170,32172],{"class":38,"line":12375},[36,32166,32167],{"class":4500},"  docker",[36,32169,31683],{"class":57},[36,32171,31242],{"class":57},[36,32173,27195],{"class":49},[36,32175,32176,32178,32180],{"class":38,"line":12389},[36,32177,31806],{"class":53},[36,32179,31809],{"class":57},[36,32181,27195],{"class":49},[36,32183,32184,32186,32189],{"class":38,"line":12395},[36,32185,31245],{"class":49},[36,32187,32188],{"class":57}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,32190,27195],{"class":49},[36,32192,32193,32195],{"class":38,"line":12422},[36,32194,31780],{"class":49},[36,32196,27195],{"class":49},[36,32198,32199],{"class":38,"line":12431},[36,32200,31251],{"class":57},[19,32202,32203],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32205,32206],{},[4000,32207],{"alt":31,"src":32208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,32210,32211],{},[4000,32212],{"alt":31,"src":32213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24515,32215,32217],{"id":32216},"_623清除构建缓存","6.2.3.清除构建缓存",[26,32219,32221],{"className":26338,"code":32220,"language":26340,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,32222,32223,32228],{"__ignoreMap":31},[36,32224,32225],{"class":38,"line":39},[36,32226,32227],{"class":42},"# 清理BuildKit构建缓存\n",[36,32229,32230,32232,32235,32238],{"class":38,"line":46},[36,32231,29065],{"class":4500},[36,32233,32234],{"class":57}," builder",[36,32236,32237],{"class":57}," prune",[36,32239,32240],{"class":49}," -f\n",[19,32242,32243],{},[4000,32244],{"alt":31,"src":32245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[997,32247,32249],{"id":32248},"_63补充","6.3.补充",[24515,32251,32253],{"id":32252},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32255,32256],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32258,32259],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32261,32262],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,32264,32266],{"className":26338,"code":32265,"language":26340,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,32267,32268,32275],{"__ignoreMap":31},[36,32269,32270,32272],{"class":38,"line":39},[36,32271,29882],{"class":4500},[36,32273,32274],{"class":57}," nginx\n",[36,32276,32277,32279,32282,32285,32287],{"class":38,"line":46},[36,32278,31065],{"class":4500},[36,32280,32281],{"class":57}," echo",[36,32283,32284],{"class":57}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,32286,1320],{"class":114},[36,32288,32289],{"class":57}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32291,32292],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32294,32295],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,32297,32299],{"className":26338,"code":32298,"language":26340,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,32300,32301],{"__ignoreMap":31},[36,32302,32303,32305,32307,32309,32312],{"class":38,"line":39},[36,32304,29065],{"class":4500},[36,32306,31242],{"class":57},[36,32308,31245],{"class":49},[36,32310,32311],{"class":57}," nginx:tuling",[36,32313,31251],{"class":57},[19,32315,32316],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32318,32319],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,32321,32323],{"className":26338,"code":32322,"language":26340,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,32324,32325],{"__ignoreMap":31},[36,32326,32327,32329,32331,32334,32336,32339],{"class":38,"line":39},[36,32328,29065],{"class":4500},[36,32330,29742],{"class":57},[36,32332,32333],{"class":49}," -d",[36,32335,31726],{"class":49},[36,32337,32338],{"class":57}," 92:80",[36,32340,32341],{"class":57}," nginx:tuling\n",[19,32343,32344,32345],{},"4、访问 ",[2923,32346,32349],{"href":32347,"rel":32348},"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",[26381],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32351,32352],{},[4000,32353],{"alt":31,"src":32354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32356,32357],{},[4000,32358],{"alt":31,"src":32359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24515,32361,32363],{"id":32362},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32365,32366],{},"只需要知道大体流程即可",[19,32368,32369],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32371,32372],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32374,32375],{},"2、在Dockerfile中添加以下内容",[26,32377,32379],{"className":28604,"code":32378,"language":28606,"meta":31,"style":31},"# 基于哪个镜像\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",[33,32380,32381,32386,32391,32396,32401,32406,32411,32416],{"__ignoreMap":31},[36,32382,32383],{"class":38,"line":39},[36,32384,32385],{},"# 基于哪个镜像\n",[36,32387,32388],{"class":38,"line":46},[36,32389,32390],{},"From java:8\n",[36,32392,32393],{"class":38,"line":82},[36,32394,32395],{},"# 复制文件到容器\n",[36,32397,32398],{"class":38,"line":88},[36,32399,32400],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,32402,32403],{"class":38,"line":195},[36,32404,32405],{},"# 声明需要暴露的端口\n",[36,32407,32408],{"class":38,"line":1517},[36,32409,32410],{},"EXPOSE 8877\n",[36,32412,32413],{"class":38,"line":2421},[36,32414,32415],{},"# 配置容器启动后执行的命令\n",[36,32417,32418],{"class":38,"line":2446},[36,32419,32420],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32422,32423],{},"3、使用docker build命令构建镜像",[26,32425,32427],{"className":26338,"code":32426,"language":26340,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,32428,32429],{"__ignoreMap":31},[36,32430,32431,32433,32435,32437,32440],{"class":38,"line":39},[36,32432,29065],{"class":4500},[36,32434,31242],{"class":57},[36,32436,31245],{"class":49},[36,32438,32439],{"class":57}," tulingmall-member:0.0.5",[36,32441,31251],{"class":57},[19,32443,32444],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32446,32447],{},[4000,32448],{"alt":31,"src":32449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32451,32452],{},"4、启动镜像，加-d可在后台启动",[26,32454,32456],{"className":26338,"code":32455,"language":26340,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,32457,32458],{"__ignoreMap":31},[36,32459,32460,32462,32464,32466,32468,32471],{"class":38,"line":39},[36,32461,29065],{"class":4500},[36,32463,29742],{"class":57},[36,32465,32333],{"class":49},[36,32467,31726],{"class":49},[36,32469,32470],{"class":57}," 8877:8877",[36,32472,32473],{"class":57}," tulingmall-member:0.0.5\n",[19,32475,32476],{},"加上JVM参数：",[26,32478,32480],{"className":26338,"code":32479,"language":26340,"meta":31,"style":31},"# --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",[33,32481,32482,32487,32502,32512,32521,32528],{"__ignoreMap":31},[36,32483,32484],{"class":38,"line":39},[36,32485,32486],{"class":42},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,32488,32489,32491,32493,32496,32498,32500],{"class":38,"line":46},[36,32490,29065],{"class":4500},[36,32492,29742],{"class":57},[36,32494,32495],{"class":49},"  -d",[36,32497,31726],{"class":49},[36,32499,32470],{"class":57},[36,32501,27195],{"class":49},[36,32503,32504,32506,32509],{"class":38,"line":82},[36,32505,30639],{"class":53},[36,32507,32508],{"class":57},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,32510,32511],{"class":49},"  \\\n",[36,32513,32514,32516,32519],{"class":38,"line":88},[36,32515,30639],{"class":53},[36,32517,32518],{"class":57},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,32520,32511],{"class":49},[36,32522,32523,32526],{"class":38,"line":195},[36,32524,32525],{"class":53},"--cap-add=SYS_PTRACE  ",[36,32527,28688],{"class":49},[36,32529,32530],{"class":38,"line":1517},[36,32531,32532],{"class":53},"tulingmall-member:0.0.5\n",[19,32534,32535],{},"5、访问会员服务接口",[19,32537,32538],{},[4000,32539],{"alt":31,"src":32540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24515,32542,32544],{"id":32543},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32546,32547],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32549,32550,32551],{},"阿里云docker镜像仓库：",[2923,32552,32553],{"href":32553,"rel":32554},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26381],[19,32556,32557],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32559,32560],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32562,32563],{},[4000,32564],{"alt":31,"src":32565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32567,32568],{},"要把镜像推送到镜像仓库",[26,32570,32572],{"className":26338,"code":32571,"language":26340,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,32573,32574],{"__ignoreMap":31},[36,32575,32576,32578,32580,32582],{"class":38,"line":39},[36,32577,29065],{"class":4500},[36,32579,31407],{"class":57},[36,32581,32439],{"class":57},[36,32583,32584],{"class":57}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32586,32587],{},"最后将镜像推送到远程仓库",[26,32589,32591],{"className":26338,"code":32590,"language":26340,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,32592,32593],{"__ignoreMap":31},[36,32594,32595,32597,32599],{"class":38,"line":39},[36,32596,29065],{"class":4500},[36,32598,31526],{"class":57},[36,32600,32584],{"class":57},[2602,32602,32603],{},"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":31,"searchDepth":46,"depth":46,"links":32605},[32606,32607,32608],{"id":30993,"depth":82,"text":30994},{"id":31222,"depth":82,"text":31223},{"id":32248,"depth":82,"text":32249},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30985,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32615,"title":32616,"body":32617,"description":31,"extension":2631,"meta":32760,"navigation":545,"path":32761,"seo":32762,"stem":32763,"__hash__":32764},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32618,"toc":32758},[32619,32622,32627,32632,32635,32640,32645,32648,32653,32658,32661,32666,32669,32672,32675,32678,32681,32684,32704,32726,32729,32732,32752,32755],[10,32620,32616],{"id":32621},"_7vscode远程开发",[433,32623,32624],{},[436,32625,32626],{},"插件1：微软Docker工具",[19,32628,32629],{},[4000,32630],{"alt":31,"src":32631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32633,32634],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32636,32637],{},[4000,32638],{"alt":31,"src":32639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[433,32641,32642],{"start":46},[436,32643,32644],{},"插件2：微软Docker远程开发工具",[19,32646,32647],{},"下面这是远程开发的插件。",[19,32649,32650],{},[4000,32651],{"alt":31,"src":32652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32654,32655],{},[4000,32656],{"alt":31,"src":32657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32659,32660],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32662,32663],{},[4000,32664],{"alt":31,"src":32665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32667,32668],{},"安装完拓展之后，vscode进行链接：",[19,32670,32671],{},"1.按ctrl+shift+p",[19,32673,32674],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32676,32677],{},"3.选择目前运行的容器",[19,32679,32680],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32682,32683],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,32685,32687],{"className":26338,"code":32686,"language":26340,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,32688,32689],{"__ignoreMap":31},[36,32690,32691,32693,32695,32698,32701],{"class":38,"line":39},[36,32692,29065],{"class":4500},[36,32694,29742],{"class":57},[36,32696,32697],{"class":49}," -v",[36,32699,32700],{"class":57}," 主机目录:容器目录",[36,32702,32703],{"class":57}," image-name\n",[26,32705,32707],{"className":26338,"code":32706,"language":26340,"meta":31,"style":31},"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",[33,32708,32709],{"__ignoreMap":31},[36,32710,32711,32713,32715,32718,32720,32723],{"class":38,"line":39},[36,32712,29065],{"class":4500},[36,32714,29742],{"class":57},[36,32716,32717],{"class":49}," -it",[36,32719,32697],{"class":49},[36,32721,32722],{"class":57}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,32724,32725],{"class":57}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32727,32728],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32730,32731],{},"查看挂载情况：",[26,32733,32735],{"className":26338,"code":32734,"language":26340,"meta":31,"style":31},"mount | grep -i project\n",[33,32736,32737],{"__ignoreMap":31},[36,32738,32739,32742,32744,32747,32749],{"class":38,"line":39},[36,32740,32741],{"class":4500},"mount",[36,32743,27625],{"class":114},[36,32745,32746],{"class":4500}," grep",[36,32748,28942],{"class":49},[36,32750,32751],{"class":57}," project\n",[19,32753,32754],{},"也可以通过ls来进行查看",[2602,32756,32757],{},"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":31,"searchDepth":46,"depth":46,"links":32759},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32616,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32766,"title":32767,"body":32768,"description":2630,"extension":2631,"meta":32772,"navigation":545,"path":32774,"seo":32775,"stem":32776,"__hash__":32777},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32769,"toc":32770},[],{"title":31,"searchDepth":46,"depth":46,"links":32771},[],{"category":32773},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32767,"description":2630},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32779,"title":32780,"body":32781,"description":2630,"extension":2631,"meta":32785,"navigation":545,"path":32786,"seo":32787,"stem":32788,"__hash__":32789},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32782,"toc":32783},[],{"title":31,"searchDepth":46,"depth":46,"links":32784},[],{"category":32773},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32780,"description":2630},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32791,"title":32792,"body":32793,"description":2630,"extension":2631,"meta":33080,"navigation":545,"path":33081,"seo":33082,"stem":33083,"__hash__":33084},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32794,"toc":33078},[32795,32798,32806,32821,32826,32877,32880,32886,33067,33072,33075],[10,32796,32792],{"id":32797},"_1验证深度学习环境",[19,32799,32800,32801],{},"关于环境的安装，看",[2923,32802,32805],{"href":32803,"rel":32804},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26381],"Pytorch-->深度学习",[19,32807,32808,32809,32812,32813,32816,32817,32820],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,32810,32811],{},"pytorch-cuda=12.4"," 是一个“ ",[2839,32814,32815],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2839,32818,32819],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32822,32823],{},[4000,32824],{"alt":31,"src":32825},"\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",[26,32827,32829],{"className":26338,"code":32828,"language":26340,"meta":31,"style":31},"# 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",[33,32830,32831,32836],{"__ignoreMap":31},[36,32832,32833],{"class":38,"line":39},[36,32834,32835],{"class":42},"# CUDA 12.4\n",[36,32837,32838,32841,32843,32846,32849,32852,32855,32858,32860,32863,32866,32869,32872,32874],{"class":38,"line":46},[36,32839,32840],{"class":4500},"conda",[36,32842,26350],{"class":57},[36,32844,32845],{"class":57}," pytorch==",[36,32847,32848],{"class":49},"2.5.1",[36,32850,32851],{"class":57}," torchvision==",[36,32853,32854],{"class":49},"0.20.1",[36,32856,32857],{"class":57}," torchaudio==",[36,32859,32848],{"class":49},[36,32861,32862],{"class":57}," pytorch-cuda=",[36,32864,32865],{"class":49},"12.4",[36,32867,32868],{"class":49}," -c",[36,32870,32871],{"class":57}," pytorch",[36,32873,32868],{"class":49},[36,32875,32876],{"class":57}," nvidia\n",[19,32878,32879],{},"）：",[19,32881,32882],{},[2923,32883,32884],{"href":32884,"rel":32885},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26381],[26,32887,32889],{"className":28,"code":32888,"language":30,"meta":31,"style":31},"# 对深度学习环境进行测试\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",[33,32890,32891,32896,32903,32908,32918,32933,32938,32948,32984,32991,33002,33018,33023,33033,33045,33055],{"__ignoreMap":31},[36,32892,32893],{"class":38,"line":39},[36,32894,32895],{"class":42},"# 对深度学习环境进行测试\n",[36,32897,32898,32900],{"class":38,"line":46},[36,32899,537],{"class":114},[36,32901,32902],{"class":53}," torch\n",[36,32904,32905],{"class":38,"line":82},[36,32906,32907],{"class":42},"# 查看cuda是否被激活\n",[36,32909,32910,32913,32915],{"class":38,"line":88},[36,32911,32912],{"class":53},"flag",[36,32914,115],{"class":114},[36,32916,32917],{"class":53},"torch.cuda.is_available()\n",[36,32919,32920,32922,32924,32927,32930],{"class":38,"line":195},[36,32921,50],{"class":49},[36,32923,54],{"class":53},[36,32925,32926],{"class":57},"\"cuda:\"",[36,32928,32929],{"class":53},", flag)   ",[36,32931,32932],{"class":42},"#返回true的话说明被激活\n",[36,32934,32935],{"class":38,"line":1517},[36,32936,32937],{"class":42},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,32939,32940,32943,32945],{"class":38,"line":2421},[36,32941,32942],{"class":53},"ngpu",[36,32944,115],{"class":114},[36,32946,32947],{"class":49},"1\n",[36,32949,32950,32953,32955,32958,32961,32963,32966,32968,32971,32973,32975,32977,32979,32982],{"class":38,"line":2446},[36,32951,32952],{"class":53},"device",[36,32954,115],{"class":114},[36,32956,32957],{"class":53},"torch.device(",[36,32959,32960],{"class":57},"\"cuda:0\"",[36,32962,4242],{"class":114},[36,32964,32965],{"class":53},"(torch.cuda.is_available() ",[36,32967,1431],{"class":114},[36,32969,32970],{"class":53}," ngpu",[36,32972,3633],{"class":114},[36,32974,713],{"class":49},[36,32976,16236],{"class":53},[36,32978,4239],{"class":114},[36,32980,32981],{"class":57}," \"cpu\"",[36,32983,61],{"class":53},[36,32985,32986,32988],{"class":38,"line":2469},[36,32987,50],{"class":49},[36,32989,32990],{"class":53},"(device)\n",[36,32992,32993,32995,32998,33000],{"class":38,"line":2492},[36,32994,50],{"class":49},[36,32996,32997],{"class":53},"(torch.cuda.get_device_name(",[36,32999,713],{"class":49},[36,33001,625],{"class":53},[36,33003,33004,33006,33009,33011,33013,33015],{"class":38,"line":4150},[36,33005,50],{"class":49},[36,33007,33008],{"class":53},"(torch.rand(",[36,33010,2767],{"class":49},[36,33012,3059],{"class":53},[36,33014,2767],{"class":49},[36,33016,33017],{"class":53},").cuda())\n",[36,33019,33020],{"class":38,"line":4155},[36,33021,33022],{"class":42},"# 查看cuda和cudnn的版本\n",[36,33024,33025,33028,33030],{"class":38,"line":4161},[36,33026,33027],{"class":53},"cuda_version",[36,33029,115],{"class":114},[36,33031,33032],{"class":53},"torch.version.cuda\n",[36,33034,33035,33037,33039,33042],{"class":38,"line":4166},[36,33036,50],{"class":49},[36,33038,54],{"class":53},[36,33040,33041],{"class":57},"\"cuda version\"",[36,33043,33044],{"class":53},",cuda_version)\n",[36,33046,33047,33050,33052],{"class":38,"line":4180},[36,33048,33049],{"class":53},"cudnn_version",[36,33051,115],{"class":114},[36,33053,33054],{"class":53},"torch.backends.cudnn.version()\n",[36,33056,33057,33059,33061,33064],{"class":38,"line":4185},[36,33058,50],{"class":49},[36,33060,54],{"class":53},[36,33062,33063],{"class":57},"\"cudnn version\"",[36,33065,33066],{"class":53},",cudnn_version)\n",[19,33068,33069],{},[4000,33070],{"alt":31,"src":33071},"\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,33073,33074],{},"cuda:0 指的是一块显卡",[2602,33076,33077],{},"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":31,"searchDepth":46,"depth":46,"links":33079},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32792,"description":2630},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33086,"title":33087,"body":33088,"description":2630,"extension":2631,"meta":52884,"navigation":545,"path":52885,"seo":52886,"stem":52887,"__hash__":52888},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33089,"toc":52878},[33090,33093,33097,33101,33104,33109,33114,33117,33122,33127,33132,33135,33139,33144,33148,33153,33156,33161,33164,33167,33170,33173,33178,33181,33186,33191,33196,33201,33204,33208,33211,33216,33820,33825,33828,33833,33836,33839,34302,34305,34308,34311,34314,36363,36366,36371,36376,37170,37173,37178,37956,37960,39619,39623,40337,40341,40345,40350,40355,40360,40363,40368,40373,40378,40383,40388,40392,40397,41679,41684,41687,41690,41693,41848,41851,41854,43070,43075,43770,43774,43778,43783,43788,43791,43796,43801,43806,43811,43816,43821,43826,43831,43836,43841,43846,43851,43856,43861,43866,43871,43876,43881,43886,43891,43896,43901,43906,43911,43916,43921,43926,43931,43936,43941,43945,43949,43952,45430,45434,47081,47085,47779,47783,47786,47789,48330,48333,48337,48340,49737,49741,49744,50321,52108,52112,52115,52875],[10,33091,33087],{"id":33092},"_2经典神经网络",[997,33094,33096],{"id":33095},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24515,33098,33100],{"id":33099},"_211原理介绍","2.1.1.原理介绍",[19,33102,33103],{},"LeNet-5",[433,33105,33106],{},[436,33107,33108],{},"原理",[19,33110,33111],{},[4000,33112],{"alt":31,"src":33113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,33115,33116],{},"B是batch批次；C是channel通道",[433,33118,33119],{"start":46},[436,33120,33121],{},"网络参数详细",[19,33123,33124],{},[4000,33125],{"alt":31,"src":33126},"\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,33128,33129],{},[4000,33130],{"alt":31,"src":33131},"\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,33133,33134],{},"AlexNet",[433,33136,33137],{},[436,33138,33108],{},[19,33140,33141],{},[4000,33142],{"alt":31,"src":33143},"\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",[433,33145,33146],{"start":46},[436,33147,33121],{},[19,33149,33150],{},[4000,33151],{"alt":31,"src":33152},"\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,33154,33155],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33157,33158],{},[4000,33159],{"alt":31,"src":33160},"\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,33162,33163],{},"数据处理中的图像增强操作:",[19,33165,33166],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33168,33169],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33171,33172],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33174,33175],{},[4000,33176],{"alt":31,"src":33177},"\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,33179,33180],{},"提升网络精确度的方法：LRN正则化",[19,33182,33183],{},[4000,33184],{"alt":31,"src":33185},"\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,33187,33188],{},[4000,33189],{"alt":31,"src":33190},"\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",[433,33192,33193],{"start":82},[436,33194,33195],{},"AlexNet的总结",[19,33197,33198],{},[4000,33199],{"alt":31,"src":33200},"\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,33202,33203],{},"比LeNet模型要深一丢丢",[24515,33205,33207],{"id":33206},"_212代码实现","2.1.2.代码实现",[19,33209,33210],{},"（1）LeNet",[433,33212,33213],{},[436,33214,33215],{},"模型搭建",[26,33217,33219],{"className":28,"code":33218,"language":30,"meta":31,"style":31},"# 导入库\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",[33,33220,33221,33226,33232,33237,33250,33255,33267,33271,33291,33296,33301,33312,33317,33336,33340,33345,33394,33406,33411,33440,33475,33502,33507,33519,33524,33544,33563,33582,33586,33591,33601,33618,33629,33644,33655,33666,33681,33696,33707,33714,33718,33732,33737,33760,33765,33770,33775,33779,33784,33789,33799],{"__ignoreMap":31},[36,33222,33223],{"class":38,"line":39},[36,33224,33225],{"class":42},"# 导入库\n",[36,33227,33228,33230],{"class":38,"line":46},[36,33229,537],{"class":114},[36,33231,32902],{"class":53},[36,33233,33234],{"class":38,"line":82},[36,33235,33236],{"class":42},"# 导入神经网络层\n",[36,33238,33239,33242,33245,33247],{"class":38,"line":88},[36,33240,33241],{"class":114},"from",[36,33243,33244],{"class":53}," torch ",[36,33246,537],{"class":114},[36,33248,33249],{"class":53}," nn\n",[36,33251,33252],{"class":38,"line":195},[36,33253,33254],{"class":42},"# 导入展示神经网络参数的包\n",[36,33256,33257,33259,33262,33264],{"class":38,"line":1517},[36,33258,33241],{"class":114},[36,33260,33261],{"class":53}," torchsummary ",[36,33263,537],{"class":114},[36,33265,33266],{"class":53}," summary\n",[36,33268,33269],{"class":38,"line":2421},[36,33270,546],{"emptyLinePlaceholder":545},[36,33272,33273,33275,33278,33280,33283,33285,33288],{"class":38,"line":2446},[36,33274,519],{"class":114},[36,33276,33277],{"class":4500}," LeNet",[36,33279,54],{"class":53},[36,33281,33282],{"class":4500},"nn",[36,33284,3235],{"class":53},[36,33286,33287],{"class":4500},"Module",[36,33289,33290],{"class":53},"):\n",[36,33292,33293],{"class":38,"line":2469},[36,33294,33295],{"class":42},"    # 模型初始化:\n",[36,33297,33298],{"class":38,"line":2492},[36,33299,33300],{"class":42},"    # 定义一些网络层和激活函数\n",[36,33302,33303,33306,33309],{"class":38,"line":4150},[36,33304,33305],{"class":114},"    def",[36,33307,33308],{"class":49}," __init__",[36,33310,33311],{"class":53},"(self):\n",[36,33313,33314],{"class":38,"line":4155},[36,33315,33316],{"class":42},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,33318,33319,33322,33325,33328,33331,33334],{"class":38,"line":4161},[36,33320,33321],{"class":49},"        super",[36,33323,33324],{"class":53},"(LeNet,",[36,33326,33327],{"class":49},"self",[36,33329,33330],{"class":53},").",[36,33332,33333],{"class":49},"__init__",[36,33335,4513],{"class":53},[36,33337,33338],{"class":38,"line":4166},[36,33339,546],{"emptyLinePlaceholder":545},[36,33341,33342],{"class":38,"line":4180},[36,33343,33344],{"class":42},"        # 定义网络层\n",[36,33346,33347,33350,33353,33355,33358,33361,33363,33365,33367,33370,33372,33374,33376,33379,33381,33383,33385,33388,33390,33392],{"class":38,"line":4185},[36,33348,33349],{"class":49},"        self",[36,33351,33352],{"class":53},".c1",[36,33354,115],{"class":114},[36,33356,33357],{"class":53},"nn.Conv2d(",[36,33359,33360],{"class":1997},"in_channels",[36,33362,115],{"class":114},[36,33364,707],{"class":49},[36,33366,3059],{"class":53},[36,33368,33369],{"class":1997},"out_channels",[36,33371,115],{"class":114},[36,33373,3025],{"class":49},[36,33375,3059],{"class":53},[36,33377,33378],{"class":1997},"kernel_size",[36,33380,115],{"class":114},[36,33382,1134],{"class":49},[36,33384,3059],{"class":53},[36,33386,33387],{"class":1997},"padding",[36,33389,115],{"class":114},[36,33391,1188],{"class":49},[36,33393,61],{"class":53},[36,33395,33396,33398,33401,33403],{"class":38,"line":4191},[36,33397,33349],{"class":49},[36,33399,33400],{"class":53},".sig",[36,33402,115],{"class":114},[36,33404,33405],{"class":53},"nn.Sigmoid()\n",[36,33407,33408],{"class":38,"line":4212},[36,33409,33410],{"class":42},"        # 定义池化\n",[36,33412,33413,33415,33418,33420,33423,33425,33427,33429,33431,33434,33436,33438],{"class":38,"line":4217},[36,33414,33349],{"class":49},[36,33416,33417],{"class":53},".s2",[36,33419,115],{"class":114},[36,33421,33422],{"class":53},"nn.AvgPool2d(",[36,33424,33378],{"class":1997},[36,33426,115],{"class":114},[36,33428,1188],{"class":49},[36,33430,3059],{"class":53},[36,33432,33433],{"class":1997},"stride",[36,33435,115],{"class":114},[36,33437,1188],{"class":49},[36,33439,61],{"class":53},[36,33441,33442,33444,33447,33449,33451,33453,33455,33457,33459,33461,33463,33465,33467,33469,33471,33473],{"class":38,"line":4231},[36,33443,33349],{"class":49},[36,33445,33446],{"class":53},".c3",[36,33448,115],{"class":114},[36,33450,33357],{"class":53},[36,33452,33360],{"class":1997},[36,33454,115],{"class":114},[36,33456,3025],{"class":49},[36,33458,3059],{"class":53},[36,33460,33369],{"class":1997},[36,33462,115],{"class":114},[36,33464,3277],{"class":49},[36,33466,3059],{"class":53},[36,33468,33378],{"class":1997},[36,33470,115],{"class":114},[36,33472,1134],{"class":49},[36,33474,61],{"class":53},[36,33476,33477,33479,33482,33484,33486,33488,33490,33492,33494,33496,33498,33500],{"class":38,"line":4236},[36,33478,33349],{"class":49},[36,33480,33481],{"class":53},".s4",[36,33483,115],{"class":114},[36,33485,33422],{"class":53},[36,33487,33378],{"class":1997},[36,33489,115],{"class":114},[36,33491,1188],{"class":49},[36,33493,3059],{"class":53},[36,33495,33433],{"class":1997},[36,33497,115],{"class":114},[36,33499,1188],{"class":49},[36,33501,61],{"class":53},[36,33503,33504],{"class":38,"line":4264},[36,33505,33506],{"class":42},"        # 定义平展层\n",[36,33508,33509,33511,33514,33516],{"class":38,"line":4269},[36,33510,33349],{"class":49},[36,33512,33513],{"class":53},".flatten",[36,33515,115],{"class":114},[36,33517,33518],{"class":53},"nn.Flatten()\n",[36,33520,33521],{"class":38,"line":4286},[36,33522,33523],{"class":42},"        # 定义全连接层\n",[36,33525,33526,33528,33531,33533,33536,33538,33540,33542],{"class":38,"line":4291},[36,33527,33349],{"class":49},[36,33529,33530],{"class":53},".f5",[36,33532,115],{"class":114},[36,33534,33535],{"class":53},"nn.Linear(",[36,33537,6518],{"class":49},[36,33539,3059],{"class":53},[36,33541,3493],{"class":49},[36,33543,61],{"class":53},[36,33545,33546,33548,33551,33553,33555,33557,33559,33561],{"class":38,"line":4296},[36,33547,33349],{"class":49},[36,33549,33550],{"class":53},".f6",[36,33552,115],{"class":114},[36,33554,33535],{"class":53},[36,33556,3493],{"class":49},[36,33558,3059],{"class":53},[36,33560,3387],{"class":49},[36,33562,61],{"class":53},[36,33564,33565,33567,33570,33572,33574,33576,33578,33580],{"class":38,"line":4301},[36,33566,33349],{"class":49},[36,33568,33569],{"class":53},".f7",[36,33571,115],{"class":114},[36,33573,33535],{"class":53},[36,33575,3387],{"class":49},[36,33577,3059],{"class":53},[36,33579,1317],{"class":49},[36,33581,61],{"class":53},[36,33583,33584],{"class":38,"line":4315},[36,33585,546],{"emptyLinePlaceholder":545},[36,33587,33588],{"class":38,"line":4320},[36,33589,33590],{"class":42},"    # 写工具->写前向传播\n",[36,33592,33593,33595,33598],{"class":38,"line":5109},[36,33594,33305],{"class":114},[36,33596,33597],{"class":4500}," forward",[36,33599,33600],{"class":53},"(self,x):\n",[36,33602,33603,33606,33608,33610,33613,33615],{"class":38,"line":5123},[36,33604,33605],{"class":53},"        x",[36,33607,115],{"class":114},[36,33609,33327],{"class":49},[36,33611,33612],{"class":53},".sig(",[36,33614,33327],{"class":49},[36,33616,33617],{"class":53},".c1(x))\n",[36,33619,33620,33622,33624,33626],{"class":38,"line":5131},[36,33621,33605],{"class":53},[36,33623,115],{"class":114},[36,33625,33327],{"class":49},[36,33627,33628],{"class":53},".s2(x)\n",[36,33630,33631,33633,33635,33637,33639,33641],{"class":38,"line":5136},[36,33632,33605],{"class":53},[36,33634,115],{"class":114},[36,33636,33327],{"class":49},[36,33638,33612],{"class":53},[36,33640,33327],{"class":49},[36,33642,33643],{"class":53},".c3(x))\n",[36,33645,33646,33648,33650,33652],{"class":38,"line":5142},[36,33647,33605],{"class":53},[36,33649,115],{"class":114},[36,33651,33327],{"class":49},[36,33653,33654],{"class":53},".s4(x)\n",[36,33656,33657,33659,33661,33663],{"class":38,"line":5148},[36,33658,33605],{"class":53},[36,33660,115],{"class":114},[36,33662,33327],{"class":49},[36,33664,33665],{"class":53},".flatten(x)\n",[36,33667,33668,33670,33672,33674,33676,33678],{"class":38,"line":5153},[36,33669,33605],{"class":53},[36,33671,115],{"class":114},[36,33673,33327],{"class":49},[36,33675,33612],{"class":53},[36,33677,33327],{"class":49},[36,33679,33680],{"class":53},".f5(x))\n",[36,33682,33683,33685,33687,33689,33691,33693],{"class":38,"line":10475},[36,33684,33605],{"class":53},[36,33686,115],{"class":114},[36,33688,33327],{"class":49},[36,33690,33612],{"class":53},[36,33692,33327],{"class":49},[36,33694,33695],{"class":53},".f6(x))\n",[36,33697,33698,33700,33702,33704],{"class":38,"line":10499},[36,33699,33605],{"class":53},[36,33701,115],{"class":114},[36,33703,33327],{"class":49},[36,33705,33706],{"class":53},".f7(x)\n",[36,33708,33709,33711],{"class":38,"line":10504},[36,33710,17273],{"class":114},[36,33712,33713],{"class":53}," x\n",[36,33715,33716],{"class":38,"line":10510},[36,33717,546],{"emptyLinePlaceholder":545},[36,33719,33720,33722,33725,33727,33730],{"class":38,"line":10537},[36,33721,4069],{"class":114},[36,33723,33724],{"class":49}," __name__",[36,33726,1377],{"class":114},[36,33728,33729],{"class":57},"\"__main__\"",[36,33731,6270],{"class":53},[36,33733,33734],{"class":38,"line":10542},[36,33735,33736],{"class":42},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,33738,33739,33742,33744,33746,33749,33751,33754,33756,33758],{"class":38,"line":10548},[36,33740,33741],{"class":53},"    device",[36,33743,115],{"class":114},[36,33745,32957],{"class":53},[36,33747,33748],{"class":57},"\"cuda\"",[36,33750,4242],{"class":114},[36,33752,33753],{"class":53}," torch.cuda.is_available() ",[36,33755,4239],{"class":114},[36,33757,32981],{"class":57},[36,33759,61],{"class":53},[36,33761,33762],{"class":38,"line":10560},[36,33763,33764],{"class":42},"    # 如果就是想指定用cpu用下方代码:\n",[36,33766,33767],{"class":38,"line":10572},[36,33768,33769],{"class":42},"    # device=\"cpu\"\n",[36,33771,33772],{"class":38,"line":10584},[36,33773,33774],{"class":42},"    # print(device)\n",[36,33776,33777],{"class":38,"line":12241},[36,33778,546],{"emptyLinePlaceholder":545},[36,33780,33781],{"class":38,"line":12266},[36,33782,33783],{"class":42},"    # 实例化模型\n",[36,33785,33786],{"class":38,"line":12289},[36,33787,33788],{"class":42},"    # 将模型放到设备中去运行\n",[36,33790,33791,33794,33796],{"class":38,"line":12313},[36,33792,33793],{"class":53},"    model",[36,33795,115],{"class":114},[36,33797,33798],{"class":53},"LeNet().to(device)\n",[36,33800,33801,33804,33807,33809,33811,33813,33815,33817],{"class":38,"line":12318},[36,33802,33803],{"class":49},"    print",[36,33805,33806],{"class":53},"(summary(model,(",[36,33808,707],{"class":49},[36,33810,3059],{"class":53},[36,33812,3576],{"class":49},[36,33814,3059],{"class":53},[36,33816,3576],{"class":49},[36,33818,33819],{"class":53},")))\n",[19,33821,33822],{},[4000,33823],{"alt":31,"src":33824},"\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,33826,33827],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[433,33829,33830],{"start":46},[436,33831,33832],{},"训练",[19,33834,33835],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33837,33838],{},"在训练之前可以将数据展示看一下",[26,33840,33842],{"className":28,"code":33841,"language":30,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\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",[33,33843,33844,33849,33854,33866,33878,33891,33896,33908,33913,33925,33930,33942,33946,33950,33971,33982,33987,34008,34019,34023,34028,34046,34057,34062,34073,34078,34089,34093,34098,34113,34126,34131,34136,34149,34162,34175,34180,34184,34189,34209,34226,34246,34259,34272,34282,34297],{"__ignoreMap":31},[36,33845,33846],{"class":38,"line":39},[36,33847,33848],{"class":42},"# 建立画图的函数，用于展示数据\n",[36,33850,33851],{"class":38,"line":46},[36,33852,33853],{"class":42},"# torchvision中包含很多内置的数据集\n",[36,33855,33856,33858,33861,33863],{"class":38,"line":82},[36,33857,33241],{"class":114},[36,33859,33860],{"class":53}," sklearn.externals.array_api_compat.torch ",[36,33862,537],{"class":114},[36,33864,33865],{"class":53}," squeeze\n",[36,33867,33868,33870,33873,33875],{"class":38,"line":88},[36,33869,33241],{"class":114},[36,33871,33872],{"class":53}," torchvision.datasets ",[36,33874,537],{"class":114},[36,33876,33877],{"class":53}," FashionMNIST\n",[36,33879,33880,33882,33885,33888],{"class":38,"line":195},[36,33881,537],{"class":114},[36,33883,33884],{"class":53}," numpy ",[36,33886,33887],{"class":114},"as",[36,33889,33890],{"class":53}," np\n",[36,33892,33893],{"class":38,"line":1517},[36,33894,33895],{"class":42},"# 引入处理数据集的包\n",[36,33897,33898,33900,33903,33905],{"class":38,"line":2421},[36,33899,33241],{"class":114},[36,33901,33902],{"class":53}," torchvision ",[36,33904,537],{"class":114},[36,33906,33907],{"class":53}," transforms\n",[36,33909,33910],{"class":38,"line":2446},[36,33911,33912],{"class":42},"# 从torch库中引入数据处理的包\n",[36,33914,33915,33917,33920,33922],{"class":38,"line":2469},[36,33916,537],{"class":114},[36,33918,33919],{"class":53}," torch.utils.data ",[36,33921,33887],{"class":114},[36,33923,33924],{"class":53}," Data\n",[36,33926,33927],{"class":38,"line":2492},[36,33928,33929],{"class":42},"# 导入画图的库\n",[36,33931,33932,33934,33937,33939],{"class":38,"line":4150},[36,33933,537],{"class":114},[36,33935,33936],{"class":53}," matplotlib.pyplot ",[36,33938,33887],{"class":114},[36,33940,33941],{"class":53}," plt\n",[36,33943,33944],{"class":38,"line":4155},[36,33945,546],{"emptyLinePlaceholder":545},[36,33947,33948],{"class":38,"line":4161},[36,33949,546],{"emptyLinePlaceholder":545},[36,33951,33952,33955,33957,33960,33963,33965,33968],{"class":38,"line":4166},[36,33953,33954],{"class":53},"train_data",[36,33956,115],{"class":114},[36,33958,33959],{"class":53},"FashionMNIST(",[36,33961,33962],{"class":1997},"root",[36,33964,115],{"class":114},[36,33966,33967],{"class":57},"'.\u002Fdata'",[36,33969,33970],{"class":53},",\n",[36,33972,33973,33976,33978,33980],{"class":38,"line":4180},[36,33974,33975],{"class":1997},"                        train",[36,33977,115],{"class":114},[36,33979,189],{"class":49},[36,33981,33970],{"class":53},[36,33983,33984],{"class":38,"line":4185},[36,33985,33986],{"class":42},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,33988,33989,33992,33994,33997,34000,34002,34005],{"class":38,"line":4191},[36,33990,33991],{"class":1997},"                        transform",[36,33993,115],{"class":114},[36,33995,33996],{"class":53},"transforms.Compose([transforms.Resize(",[36,33998,33999],{"class":1997},"size",[36,34001,115],{"class":114},[36,34003,34004],{"class":49},"224",[36,34006,34007],{"class":53},"),transforms.ToTensor()]),\n",[36,34009,34010,34013,34015,34017],{"class":38,"line":4212},[36,34011,34012],{"class":1997},"                        download",[36,34014,115],{"class":114},[36,34016,189],{"class":49},[36,34018,61],{"class":53},[36,34020,34021],{"class":38,"line":4217},[36,34022,546],{"emptyLinePlaceholder":545},[36,34024,34025],{"class":38,"line":4231},[36,34026,34027],{"class":42},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,34029,34030,34033,34035,34038,34041,34043],{"class":38,"line":4236},[36,34031,34032],{"class":53},"train_loader",[36,34034,115],{"class":114},[36,34036,34037],{"class":53},"Data.DataLoader(",[36,34039,34040],{"class":1997},"dataset",[36,34042,115],{"class":114},[36,34044,34045],{"class":53},"train_data,\n",[36,34047,34048,34051,34053,34055],{"class":38,"line":4264},[36,34049,34050],{"class":1997},"                             batch_size",[36,34052,115],{"class":114},[36,34054,2890],{"class":49},[36,34056,33970],{"class":53},[36,34058,34059],{"class":38,"line":4269},[36,34060,34061],{"class":42},"                             # 数据是否打乱\n",[36,34063,34064,34067,34069,34071],{"class":38,"line":4286},[36,34065,34066],{"class":1997},"                             shuffle",[36,34068,115],{"class":114},[36,34070,189],{"class":49},[36,34072,33970],{"class":53},[36,34074,34075],{"class":38,"line":4291},[36,34076,34077],{"class":42},"                             # 规定加载数据的进程\n",[36,34079,34080,34083,34085,34087],{"class":38,"line":4296},[36,34081,34082],{"class":1997},"                             num_workers",[36,34084,115],{"class":114},[36,34086,713],{"class":49},[36,34088,61],{"class":53},[36,34090,34091],{"class":38,"line":4301},[36,34092,546],{"emptyLinePlaceholder":545},[36,34094,34095],{"class":38,"line":4315},[36,34096,34097],{"class":42},"# 获得一个batch的数据\n",[36,34099,34100,34102,34105,34107,34110],{"class":38,"line":4320},[36,34101,5556],{"class":114},[36,34103,34104],{"class":53}," step,(b_x,b_y) ",[36,34106,28556],{"class":114},[36,34108,34109],{"class":49}," enumerate",[36,34111,34112],{"class":53},"(train_loader):\n",[36,34114,34115,34117,34120,34122,34124],{"class":38,"line":5109},[36,34116,5632],{"class":114},[36,34118,34119],{"class":53}," step ",[36,34121,3633],{"class":114},[36,34123,6624],{"class":49},[36,34125,6270],{"class":53},[36,34127,34128],{"class":38,"line":5123},[36,34129,34130],{"class":114},"        break\n",[36,34132,34133],{"class":38,"line":5131},[36,34134,34135],{"class":42},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,34137,34138,34141,34143,34146],{"class":38,"line":5136},[36,34139,34140],{"class":53},"batch_x",[36,34142,115],{"class":114},[36,34144,34145],{"class":53},"b_x.squeeze().numpy()  ",[36,34147,34148],{"class":42},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,34150,34151,34154,34156,34159],{"class":38,"line":5142},[36,34152,34153],{"class":53},"batch_y",[36,34155,115],{"class":114},[36,34157,34158],{"class":53},"b_y.numpy()   ",[36,34160,34161],{"class":42},"#将张量转换成功numpy数组\n",[36,34163,34164,34167,34169,34172],{"class":38,"line":5148},[36,34165,34166],{"class":53},"class_label",[36,34168,115],{"class":114},[36,34170,34171],{"class":53},"train_data.classes  ",[36,34173,34174],{"class":42},"#训练集标签\n",[36,34176,34177],{"class":38,"line":5153},[36,34178,34179],{"class":42},"# print(class_label)\n",[36,34181,34182],{"class":38,"line":10475},[36,34183,546],{"emptyLinePlaceholder":545},[36,34185,34186],{"class":38,"line":10499},[36,34187,34188],{"class":42},"# 可视化一个batch的图像\n",[36,34190,34191,34194,34197,34199,34201,34203,34205,34207],{"class":38,"line":10504},[36,34192,34193],{"class":53},"plt.figure(",[36,34195,34196],{"class":1997},"figsize",[36,34198,115],{"class":114},[36,34200,54],{"class":53},[36,34202,3176],{"class":49},[36,34204,3059],{"class":53},[36,34206,1134],{"class":49},[36,34208,625],{"class":53},[36,34210,34211,34213,34216,34218,34221,34223],{"class":38,"line":10510},[36,34212,5556],{"class":114},[36,34214,34215],{"class":53}," ii ",[36,34217,28556],{"class":114},[36,34219,34220],{"class":53}," np.arange(",[36,34222,9885],{"class":49},[36,34224,34225],{"class":53},"(batch_y)):\n",[36,34227,34228,34231,34233,34235,34237,34240,34242,34244],{"class":38,"line":10537},[36,34229,34230],{"class":53},"    plt.subplot(",[36,34232,2977],{"class":49},[36,34234,3059],{"class":53},[36,34236,3277],{"class":49},[36,34238,34239],{"class":53},",ii ",[36,34241,121],{"class":114},[36,34243,733],{"class":49},[36,34245,61],{"class":53},[36,34247,34248,34251,34254,34256],{"class":38,"line":10542},[36,34249,34250],{"class":53},"    plt.imshow(batch_x[ii,:,:],",[36,34252,34253],{"class":1997},"cmap",[36,34255,115],{"class":114},[36,34257,34258],{"class":53},"plt.cm.gray)\n",[36,34260,34261,34264,34266,34268,34270],{"class":38,"line":10548},[36,34262,34263],{"class":53},"    plt.title(class_label[batch_y[ii]],",[36,34265,33999],{"class":1997},[36,34267,115],{"class":114},[36,34269,1317],{"class":49},[36,34271,61],{"class":53},[36,34273,34274,34277,34280],{"class":38,"line":10560},[36,34275,34276],{"class":53},"    plt.axis(",[36,34278,34279],{"class":57},"\"off\"",[36,34281,61],{"class":53},[36,34283,34284,34287,34290,34292,34295],{"class":38,"line":10572},[36,34285,34286],{"class":53},"    plt.subplots_adjust(",[36,34288,34289],{"class":1997},"wspace",[36,34291,115],{"class":114},[36,34293,34294],{"class":49},"0.05",[36,34296,61],{"class":53},[36,34298,34299],{"class":38,"line":10584},[36,34300,34301],{"class":53},"plt.show()\n",[19,34303,34304],{},"用matplotlib进行展示的过程可以后续再补",[19,34306,34307],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34309,34310],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34312,34313],{},"模型训练：",[26,34315,34317],{"className":28,"code":34316,"language":30,"meta":31,"style":31},"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",[33,34318,34319,34326,34333,34337,34349,34355,34366,34376,34386,34396,34406,34411,34423,34433,34437,34441,34446,34457,34470,34481,34498,34509,34548,34564,34576,34587,34592,34603,34619,34630,34641,34652,34659,34663,34668,34673,34677,34682,34692,34713,34717,34721,34726,34731,34736,34756,34760,34765,34775,34779,34784,34793,34798,34803,34808,34818,34822,34826,34831,34836,34846,34851,34861,34866,34875,34880,34889,34894,34903,34907,34912,34922,34926,34930,34935,34950,34977,34992,34996,35001,35006,35015,35020,35029,35034,35043,35048,35057,35062,35071,35076,35085,35090,35103,35108,35118,35123,35133,35139,35145,35151,35157,35168,35174,35194,35200,35211,35217,35223,35229,35235,35241,35247,35253,35273,35279,35295,35301,35315,35321,35336,35342,35351,35357,35366,35372,35378,35387,35393,35404,35410,35429,35435,35446,35452,35472,35488,35494,35508,35514,35520,35531,35537,35543,35553,35559,35570,35576,35586,35591,35597,35646,35693,35698,35704,35723,35729,35749,35755,35761,35771,35776,35782,35798,35842,35848,35854,35860,35871,35877,35883,35889,35907,35921,35930,35939,35948,35957,35963,35969,35977,35982,35988,35999,36005,36025,36031,36037,36043,36060,36066,36072,36078,36084,36090,36117,36141,36147,36153,36159,36170,36181,36187,36204,36227,36250,36256,36261,36270,36280,36286,36291,36297,36310,36316,36327,36338,36357],{"__ignoreMap":31},[36,34320,34321,34323],{"class":38,"line":39},[36,34322,537],{"class":114},[36,34324,34325],{"class":53}," copy\n",[36,34327,34328,34330],{"class":38,"line":46},[36,34329,537],{"class":114},[36,34331,34332],{"class":53}," time\n",[36,34334,34335],{"class":38,"line":82},[36,34336,546],{"emptyLinePlaceholder":545},[36,34338,34339,34341,34344,34346],{"class":38,"line":88},[36,34340,537],{"class":114},[36,34342,34343],{"class":53}," pandas ",[36,34345,33887],{"class":114},[36,34347,34348],{"class":53}," pd\n",[36,34350,34351,34353],{"class":38,"line":195},[36,34352,537],{"class":114},[36,34354,32902],{"class":53},[36,34356,34357,34359,34361,34363],{"class":38,"line":1517},[36,34358,33241],{"class":114},[36,34360,33919],{"class":53},[36,34362,537],{"class":114},[36,34364,34365],{"class":53}," Dataset\n",[36,34367,34368,34370,34372,34374],{"class":38,"line":2421},[36,34369,33241],{"class":114},[36,34371,33872],{"class":53},[36,34373,537],{"class":114},[36,34375,33877],{"class":53},[36,34377,34378,34380,34382,34384],{"class":38,"line":2446},[36,34379,33241],{"class":114},[36,34381,33902],{"class":53},[36,34383,537],{"class":114},[36,34385,33907],{"class":53},[36,34387,34388,34390,34392,34394],{"class":38,"line":2469},[36,34389,537],{"class":114},[36,34391,33919],{"class":53},[36,34393,33887],{"class":114},[36,34395,33924],{"class":53},[36,34397,34398,34400,34402,34404],{"class":38,"line":2492},[36,34399,537],{"class":114},[36,34401,33936],{"class":53},[36,34403,33887],{"class":114},[36,34405,33941],{"class":53},[36,34407,34408],{"class":38,"line":4150},[36,34409,34410],{"class":42},"# 导入模型\n",[36,34412,34413,34415,34418,34420],{"class":38,"line":4155},[36,34414,33241],{"class":114},[36,34416,34417],{"class":53}," model ",[36,34419,537],{"class":114},[36,34421,34422],{"class":53}," LeNet\n",[36,34424,34425,34427,34429,34431],{"class":38,"line":4161},[36,34426,33241],{"class":114},[36,34428,33244],{"class":53},[36,34430,537],{"class":114},[36,34432,33249],{"class":53},[36,34434,34435],{"class":38,"line":4166},[36,34436,546],{"emptyLinePlaceholder":545},[36,34438,34439],{"class":38,"line":4180},[36,34440,546],{"emptyLinePlaceholder":545},[36,34442,34443],{"class":38,"line":4185},[36,34444,34445],{"class":42},"# 处理训练集与验证集函数--->划分数据集\n",[36,34447,34448,34451,34454],{"class":38,"line":4191},[36,34449,34450],{"class":114},"def",[36,34452,34453],{"class":4500}," train_val_data_process",[36,34455,34456],{"class":53},"():\n",[36,34458,34459,34462,34464,34466,34468],{"class":38,"line":4212},[36,34460,34461],{"class":53},"    train_data",[36,34463,115],{"class":114},[36,34465,33959],{"class":53},[36,34467,33967],{"class":57},[36,34469,33970],{"class":53},[36,34471,34472,34475,34477,34479],{"class":38,"line":4217},[36,34473,34474],{"class":1997},"                            train",[36,34476,115],{"class":114},[36,34478,189],{"class":49},[36,34480,33970],{"class":53},[36,34482,34483,34486,34488,34490,34492,34494,34496],{"class":38,"line":4231},[36,34484,34485],{"class":1997},"                            transform",[36,34487,115],{"class":114},[36,34489,33996],{"class":53},[36,34491,33999],{"class":1997},[36,34493,115],{"class":114},[36,34495,3576],{"class":49},[36,34497,34007],{"class":53},[36,34499,34500,34503,34505,34507],{"class":38,"line":4236},[36,34501,34502],{"class":1997},"                            download",[36,34504,115],{"class":114},[36,34506,189],{"class":49},[36,34508,61],{"class":53},[36,34510,34511,34514,34516,34519,34522,34524,34527,34529,34531,34534,34536,34538,34541,34543,34545],{"class":38,"line":4264},[36,34512,34513],{"class":53},"    train_data,val_data",[36,34515,115],{"class":114},[36,34517,34518],{"class":53},"Data.random_split(train_data,[",[36,34520,34521],{"class":49},"round",[36,34523,54],{"class":53},[36,34525,34526],{"class":49},"0.8",[36,34528,1050],{"class":114},[36,34530,9885],{"class":49},[36,34532,34533],{"class":53},"(train_data)),",[36,34535,34521],{"class":49},[36,34537,54],{"class":53},[36,34539,34540],{"class":49},"0.2",[36,34542,1050],{"class":114},[36,34544,9885],{"class":49},[36,34546,34547],{"class":53},"(train_data))])\n",[36,34549,34550,34553,34555,34558,34560,34562],{"class":38,"line":4269},[36,34551,34552],{"class":53},"    train_dataloader ",[36,34554,115],{"class":114},[36,34556,34557],{"class":53}," Data.DataLoader(",[36,34559,34040],{"class":1997},[36,34561,115],{"class":114},[36,34563,34045],{"class":53},[36,34565,34566,34569,34571,34574],{"class":38,"line":4286},[36,34567,34568],{"class":1997},"                                       batch_size",[36,34570,115],{"class":114},[36,34572,34573],{"class":49},"128",[36,34575,33970],{"class":53},[36,34577,34578,34581,34583,34585],{"class":38,"line":4291},[36,34579,34580],{"class":1997},"                                       shuffle",[36,34582,115],{"class":114},[36,34584,189],{"class":49},[36,34586,33970],{"class":53},[36,34588,34589],{"class":38,"line":4296},[36,34590,34591],{"class":42},"                                       # 规定8个进程\n",[36,34593,34594,34597,34599,34601],{"class":38,"line":4301},[36,34595,34596],{"class":1997},"                                       num_workers",[36,34598,115],{"class":114},[36,34600,3076],{"class":49},[36,34602,61],{"class":53},[36,34604,34605,34608,34610,34612,34614,34616],{"class":38,"line":4315},[36,34606,34607],{"class":53},"    val_dataloader",[36,34609,115],{"class":114},[36,34611,34037],{"class":53},[36,34613,34040],{"class":1997},[36,34615,115],{"class":114},[36,34617,34618],{"class":53},"val_data,\n",[36,34620,34621,34624,34626,34628],{"class":38,"line":4320},[36,34622,34623],{"class":1997},"                                   batch_size",[36,34625,115],{"class":114},[36,34627,34573],{"class":49},[36,34629,33970],{"class":53},[36,34631,34632,34635,34637,34639],{"class":38,"line":5109},[36,34633,34634],{"class":1997},"                                   shuffle",[36,34636,115],{"class":114},[36,34638,189],{"class":49},[36,34640,33970],{"class":53},[36,34642,34643,34646,34648,34650],{"class":38,"line":5123},[36,34644,34645],{"class":1997},"                                   num_workers",[36,34647,115],{"class":114},[36,34649,3076],{"class":49},[36,34651,61],{"class":53},[36,34653,34654,34656],{"class":38,"line":5131},[36,34655,6621],{"class":114},[36,34657,34658],{"class":53}," train_dataloader,val_dataloader\n",[36,34660,34661],{"class":38,"line":5136},[36,34662,546],{"emptyLinePlaceholder":545},[36,34664,34665],{"class":38,"line":5142},[36,34666,34667],{"class":42},"# 验证是否出错\n",[36,34669,34670],{"class":38,"line":5148},[36,34671,34672],{"class":42},"# train_val_data_process()\n",[36,34674,34675],{"class":38,"line":5153},[36,34676,546],{"emptyLinePlaceholder":545},[36,34678,34679],{"class":38,"line":10475},[36,34680,34681],{"class":42},"# 定义模型训练函数\n",[36,34683,34684,34686,34689],{"class":38,"line":10499},[36,34685,34450],{"class":114},[36,34687,34688],{"class":4500}," train_model_process",[36,34690,34691],{"class":53},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,34693,34694,34696,34698,34700,34702,34704,34706,34708,34711],{"class":38,"line":10504},[36,34695,33741],{"class":53},[36,34697,115],{"class":114},[36,34699,32957],{"class":53},[36,34701,33748],{"class":57},[36,34703,4242],{"class":114},[36,34705,33753],{"class":53},[36,34707,4239],{"class":114},[36,34709,34710],{"class":57}," 'cpu'",[36,34712,61],{"class":53},[36,34714,34715],{"class":38,"line":10510},[36,34716,546],{"emptyLinePlaceholder":545},[36,34718,34719],{"class":38,"line":10537},[36,34720,546],{"emptyLinePlaceholder":545},[36,34722,34723],{"class":38,"line":10542},[36,34724,34725],{"class":42},"    # 定义优化器\n",[36,34727,34728],{"class":38,"line":10548},[36,34729,34730],{"class":42},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,34732,34733],{"class":38,"line":10560},[36,34734,34735],{"class":42},"    # lr为学习率\n",[36,34737,34738,34741,34743,34746,34749,34751,34754],{"class":38,"line":10572},[36,34739,34740],{"class":53},"    optimizer",[36,34742,115],{"class":114},[36,34744,34745],{"class":53},"torch.optim.Adam(model.parameters(),",[36,34747,34748],{"class":1997},"lr",[36,34750,115],{"class":114},[36,34752,34753],{"class":49},"0.001",[36,34755,61],{"class":53},[36,34757,34758],{"class":38,"line":10584},[36,34759,546],{"emptyLinePlaceholder":545},[36,34761,34762],{"class":38,"line":12241},[36,34763,34764],{"class":42},"    # 定义损失函数使用交叉熵损失函数\n",[36,34766,34767,34770,34772],{"class":38,"line":12266},[36,34768,34769],{"class":53},"    criterion",[36,34771,115],{"class":114},[36,34773,34774],{"class":53},"nn.CrossEntropyLoss()\n",[36,34776,34777],{"class":38,"line":12289},[36,34778,546],{"emptyLinePlaceholder":545},[36,34780,34781],{"class":38,"line":12313},[36,34782,34783],{"class":42},"    # 将模型放到GPU中进行训练\n",[36,34785,34786,34788,34790],{"class":38,"line":12318},[36,34787,33793],{"class":53},[36,34789,115],{"class":114},[36,34791,34792],{"class":53},"model.to(device)\n",[36,34794,34795],{"class":38,"line":12323},[36,34796,34797],{"class":42},"    # 复制当前模型的参数\n",[36,34799,34800],{"class":38,"line":12328},[36,34801,34802],{"class":42},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,34804,34805],{"class":38,"line":12337},[36,34806,34807],{"class":42},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,34809,34810,34813,34815],{"class":38,"line":12342},[36,34811,34812],{"class":53},"    best_model_wts",[36,34814,115],{"class":114},[36,34816,34817],{"class":53},"copy.deepcopy(model.state_dict())\n",[36,34819,34820],{"class":38,"line":12348},[36,34821,546],{"emptyLinePlaceholder":545},[36,34823,34824],{"class":38,"line":12369},[36,34825,546],{"emptyLinePlaceholder":545},[36,34827,34828],{"class":38,"line":12375},[36,34829,34830],{"class":42},"    # 初始化参数\n",[36,34832,34833],{"class":38,"line":12389},[36,34834,34835],{"class":42},"    # 最高准确度\n",[36,34837,34838,34841,34843],{"class":38,"line":12395},[36,34839,34840],{"class":53},"    best_acc",[36,34842,115],{"class":114},[36,34844,34845],{"class":49},"0.0\n",[36,34847,34848],{"class":38,"line":12422},[36,34849,34850],{"class":42},"    # 训练集损失列表\n",[36,34852,34853,34856,34858],{"class":38,"line":12431},[36,34854,34855],{"class":53},"    train_loss_all",[36,34857,115],{"class":114},[36,34859,34860],{"class":53},"[]\n",[36,34862,34863],{"class":38,"line":12437},[36,34864,34865],{"class":42},"    # 验证集函数列表\n",[36,34867,34868,34871,34873],{"class":38,"line":12445},[36,34869,34870],{"class":53},"    val_loss_all",[36,34872,115],{"class":114},[36,34874,34860],{"class":53},[36,34876,34877],{"class":38,"line":12450},[36,34878,34879],{"class":42},"    # 训练集准确度列表\n",[36,34881,34882,34885,34887],{"class":38,"line":19122},[36,34883,34884],{"class":53},"    train_acc_all",[36,34886,115],{"class":114},[36,34888,34860],{"class":53},[36,34890,34891],{"class":38,"line":19128},[36,34892,34893],{"class":42},"    # 验证集准确度列表\n",[36,34895,34896,34899,34901],{"class":38,"line":19151},[36,34897,34898],{"class":53},"    val_acc_all",[36,34900,115],{"class":114},[36,34902,34860],{"class":53},[36,34904,34905],{"class":38,"line":19157},[36,34906,546],{"emptyLinePlaceholder":545},[36,34908,34909],{"class":38,"line":19180},[36,34910,34911],{"class":42},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,34913,34914,34917,34919],{"class":38,"line":19194},[36,34915,34916],{"class":53},"    since",[36,34918,115],{"class":114},[36,34920,34921],{"class":53},"time.time()\n",[36,34923,34924],{"class":38,"line":19214},[36,34925,546],{"emptyLinePlaceholder":545},[36,34927,34928],{"class":38,"line":19220},[36,34929,546],{"emptyLinePlaceholder":545},[36,34931,34932],{"class":38,"line":19231},[36,34933,34934],{"class":42},"    # 准备工作完成--->开始训练模型\n",[36,34936,34937,34939,34942,34944,34947],{"class":38,"line":19254},[36,34938,5732],{"class":114},[36,34940,34941],{"class":53}," epoch ",[36,34943,28556],{"class":114},[36,34945,34946],{"class":49}," range",[36,34948,34949],{"class":53},"(num_epochs):\n",[36,34951,34952,34955,34957,34960,34962,34964,34966,34968,34971,34973,34975],{"class":38,"line":19276},[36,34953,34954],{"class":49},"        print",[36,34956,54],{"class":53},[36,34958,34959],{"class":57},"\"Epoch ",[36,34961,1944],{"class":49},[36,34963,1065],{"class":57},[36,34965,1944],{"class":49},[36,34967,1822],{"class":57},[36,34969,34970],{"class":53},".format(epoch,num_epochs",[36,34972,508],{"class":114},[36,34974,707],{"class":49},[36,34976,625],{"class":53},[36,34978,34979,34981,34983,34986,34988,34990],{"class":38,"line":19281},[36,34980,34954],{"class":49},[36,34982,54],{"class":53},[36,34984,34985],{"class":57},"\"-\"",[36,34987,1050],{"class":114},[36,34989,1317],{"class":49},[36,34991,61],{"class":53},[36,34993,34994],{"class":38,"line":19287},[36,34995,546],{"emptyLinePlaceholder":545},[36,34997,34998],{"class":38,"line":19301},[36,34999,35000],{"class":42},"        # 初始化参数\n",[36,35002,35003],{"class":38,"line":19314},[36,35004,35005],{"class":42},"        # 训练集损失函数\n",[36,35007,35008,35011,35013],{"class":38,"line":19319},[36,35009,35010],{"class":53},"        train_loss",[36,35012,115],{"class":114},[36,35014,34845],{"class":49},[36,35016,35017],{"class":38,"line":19333},[36,35018,35019],{"class":42},"        # 训练集准确度\n",[36,35021,35022,35025,35027],{"class":38,"line":19338},[36,35023,35024],{"class":53},"        train_corrects",[36,35026,115],{"class":114},[36,35028,5616],{"class":49},[36,35030,35031],{"class":38,"line":19344},[36,35032,35033],{"class":42},"        # 验证集损失函数\n",[36,35035,35036,35039,35041],{"class":38,"line":19349},[36,35037,35038],{"class":53},"        val_loss",[36,35040,115],{"class":114},[36,35042,34845],{"class":49},[36,35044,35045],{"class":38,"line":19363},[36,35046,35047],{"class":42},"        # 验证集准确度\n",[36,35049,35050,35053,35055],{"class":38,"line":19368},[36,35051,35052],{"class":53},"        val_corrects",[36,35054,115],{"class":114},[36,35056,5616],{"class":49},[36,35058,35059],{"class":38,"line":19373},[36,35060,35061],{"class":42},"        # 训练集样本数量\n",[36,35063,35064,35067,35069],{"class":38,"line":19387},[36,35065,35066],{"class":53},"        train_num",[36,35068,115],{"class":114},[36,35070,5616],{"class":49},[36,35072,35073],{"class":38,"line":19399},[36,35074,35075],{"class":42},"        # 验证集样本数量\n",[36,35077,35078,35081,35083],{"class":38,"line":19404},[36,35079,35080],{"class":53},"        val_num",[36,35082,115],{"class":114},[36,35084,5616],{"class":49},[36,35086,35087],{"class":38,"line":19417},[36,35088,35089],{"class":42},"        # 将数据放到设备,并开始训练\n",[36,35091,35092,35094,35096,35098,35100],{"class":38,"line":19422},[36,35093,5934],{"class":114},[36,35095,34104],{"class":53},[36,35097,28556],{"class":114},[36,35099,34109],{"class":49},[36,35101,35102],{"class":53},"(train_dataloader):\n",[36,35104,35105],{"class":38,"line":19427},[36,35106,35107],{"class":42},"            # 将特征放入到训练设备\n",[36,35109,35110,35113,35115],{"class":38,"line":19432},[36,35111,35112],{"class":53},"            b_x",[36,35114,115],{"class":114},[36,35116,35117],{"class":53},"b_x.to(device)\n",[36,35119,35120],{"class":38,"line":19445},[36,35121,35122],{"class":42},"            # 将标签放入到训练设备当中\n",[36,35124,35125,35128,35130],{"class":38,"line":19450},[36,35126,35127],{"class":53},"            b_y",[36,35129,115],{"class":114},[36,35131,35132],{"class":53},"b_y.to(device)\n",[36,35134,35136],{"class":38,"line":35135},98,[36,35137,35138],{"class":42},"            # 设置模型为训练模式\n",[36,35140,35142],{"class":38,"line":35141},99,[36,35143,35144],{"class":53},"            model.train()\n",[36,35146,35148],{"class":38,"line":35147},100,[36,35149,35150],{"class":42},"            # 将数据放到模型当中,开始前向传播\n",[36,35152,35154],{"class":38,"line":35153},101,[36,35155,35156],{"class":42},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,35158,35160,35163,35165],{"class":38,"line":35159},102,[36,35161,35162],{"class":53},"            output",[36,35164,115],{"class":114},[36,35166,35167],{"class":53},"model(b_x)\n",[36,35169,35171],{"class":38,"line":35170},103,[36,35172,35173],{"class":42},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,35175,35177,35180,35182,35185,35188,35190,35192],{"class":38,"line":35176},104,[36,35178,35179],{"class":53},"            pre_lab",[36,35181,115],{"class":114},[36,35183,35184],{"class":53},"torch.argmax(output,",[36,35186,35187],{"class":1997},"dim",[36,35189,115],{"class":114},[36,35191,707],{"class":49},[36,35193,61],{"class":53},[36,35195,35197],{"class":38,"line":35196},105,[36,35198,35199],{"class":42},"            # 计算每一个batch的损失函数\n",[36,35201,35203,35206,35208],{"class":38,"line":35202},106,[36,35204,35205],{"class":53},"            loss",[36,35207,115],{"class":114},[36,35209,35210],{"class":53},"criterion(output,b_y)\n",[36,35212,35214],{"class":38,"line":35213},107,[36,35215,35216],{"class":42},"            # 将梯度初始化为0\n",[36,35218,35220],{"class":38,"line":35219},108,[36,35221,35222],{"class":53},"            optimizer.zero_grad()\n",[36,35224,35226],{"class":38,"line":35225},109,[36,35227,35228],{"class":42},"            # 梯度置为0后再进行反向传播\n",[36,35230,35232],{"class":38,"line":35231},110,[36,35233,35234],{"class":53},"            loss.backward()\n",[36,35236,35238],{"class":38,"line":35237},111,[36,35239,35240],{"class":42},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,35242,35244],{"class":38,"line":35243},112,[36,35245,35246],{"class":53},"            optimizer.step()\n",[36,35248,35250],{"class":38,"line":35249},113,[36,35251,35252],{"class":42},"            # loss.item()指的是batch的平均损失\n",[36,35254,35256,35259,35261,35264,35266,35269,35271],{"class":38,"line":35255},114,[36,35257,35258],{"class":53},"            train_loss",[36,35260,1224],{"class":114},[36,35262,35263],{"class":53},"loss.item()",[36,35265,1050],{"class":114},[36,35267,35268],{"class":53},"b_x.size(",[36,35270,713],{"class":49},[36,35272,61],{"class":53},[36,35274,35276],{"class":38,"line":35275},115,[36,35277,35278],{"class":42},"            # 计算每个批次中正确预测的数量\n",[36,35280,35282,35285,35287,35290,35292],{"class":38,"line":35281},116,[36,35283,35284],{"class":53},"            train_corrects",[36,35286,1224],{"class":114},[36,35288,35289],{"class":53},"torch.sum(pre_lab",[36,35291,1377],{"class":114},[36,35293,35294],{"class":53},"b_y.data)\n",[36,35296,35298],{"class":38,"line":35297},117,[36,35299,35300],{"class":42},"            # 计算目前为止一共处理了多少样本\n",[36,35302,35304,35307,35309,35311,35313],{"class":38,"line":35303},118,[36,35305,35306],{"class":53},"            train_num",[36,35308,1224],{"class":114},[36,35310,35268],{"class":53},[36,35312,713],{"class":49},[36,35314,61],{"class":53},[36,35316,35318],{"class":38,"line":35317},119,[36,35319,35320],{"class":42},"        # 验证数据\n",[36,35322,35324,35326,35329,35331,35333],{"class":38,"line":35323},120,[36,35325,5934],{"class":114},[36,35327,35328],{"class":53}," step ,(b_x,b_y) ",[36,35330,28556],{"class":114},[36,35332,34109],{"class":49},[36,35334,35335],{"class":53},"(val_dataloader):\n",[36,35337,35339],{"class":38,"line":35338},121,[36,35340,35341],{"class":42},"            # 将特征放到验证设备当中\n",[36,35343,35345,35347,35349],{"class":38,"line":35344},122,[36,35346,35112],{"class":53},[36,35348,115],{"class":114},[36,35350,35117],{"class":53},[36,35352,35354],{"class":38,"line":35353},123,[36,35355,35356],{"class":42},"            # 将标签放到放到训练设备当中\n",[36,35358,35360,35362,35364],{"class":38,"line":35359},124,[36,35361,35127],{"class":53},[36,35363,115],{"class":114},[36,35365,35132],{"class":53},[36,35367,35369],{"class":38,"line":35368},125,[36,35370,35371],{"class":42},"            # 开启验证模式，设置模型为评估模式\n",[36,35373,35375],{"class":38,"line":35374},126,[36,35376,35377],{"class":53},"            model.eval()\n",[36,35379,35381,35384],{"class":38,"line":35380},127,[36,35382,35383],{"class":114},"            with",[36,35385,35386],{"class":53}," torch.no_grad():\n",[36,35388,35390],{"class":38,"line":35389},128,[36,35391,35392],{"class":42},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,35394,35396,35399,35401],{"class":38,"line":35395},129,[36,35397,35398],{"class":53},"                output ",[36,35400,115],{"class":114},[36,35402,35403],{"class":53}," model(b_x)\n",[36,35405,35407],{"class":38,"line":35406},130,[36,35408,35409],{"class":42},"                # 查找每一行中最大值对应的下标\n",[36,35411,35413,35416,35418,35421,35423,35425,35427],{"class":38,"line":35412},131,[36,35414,35415],{"class":53},"                pre_lab ",[36,35417,115],{"class":114},[36,35419,35420],{"class":53}," torch.argmax(output, ",[36,35422,35187],{"class":1997},[36,35424,115],{"class":114},[36,35426,707],{"class":49},[36,35428,61],{"class":53},[36,35430,35432],{"class":38,"line":35431},132,[36,35433,35434],{"class":42},"                # 计算验证集上的当前 batch 损失\n",[36,35436,35438,35441,35443],{"class":38,"line":35437},133,[36,35439,35440],{"class":53},"                val_batch_loss ",[36,35442,115],{"class":114},[36,35444,35445],{"class":53}," criterion(output, b_y)\n",[36,35447,35449],{"class":38,"line":35448},134,[36,35450,35451],{"class":42},"                # 对损失函数进行累加（按样本数加权）\n",[36,35453,35455,35458,35460,35463,35465,35468,35470],{"class":38,"line":35454},135,[36,35456,35457],{"class":53},"                val_loss ",[36,35459,1224],{"class":114},[36,35461,35462],{"class":53}," val_batch_loss.item() ",[36,35464,1050],{"class":114},[36,35466,35467],{"class":53}," b_x.size(",[36,35469,713],{"class":49},[36,35471,61],{"class":53},[36,35473,35475,35478,35480,35483,35485],{"class":38,"line":35474},136,[36,35476,35477],{"class":53},"                val_corrects ",[36,35479,1224],{"class":114},[36,35481,35482],{"class":53}," torch.sum(pre_lab ",[36,35484,1377],{"class":114},[36,35486,35487],{"class":53}," b_y.data)\n",[36,35489,35491],{"class":38,"line":35490},137,[36,35492,35493],{"class":42},"                # 当前用于验证的样本数量\n",[36,35495,35497,35500,35502,35504,35506],{"class":38,"line":35496},138,[36,35498,35499],{"class":53},"            val_num ",[36,35501,1224],{"class":114},[36,35503,35467],{"class":53},[36,35505,713],{"class":49},[36,35507,61],{"class":53},[36,35509,35511],{"class":38,"line":35510},139,[36,35512,35513],{"class":42},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,35515,35517],{"class":38,"line":35516},140,[36,35518,35519],{"class":42},"        # 计算并保存训练集的loss值\n",[36,35521,35523,35526,35528],{"class":38,"line":35522},141,[36,35524,35525],{"class":53},"        train_loss_all.append(train_loss",[36,35527,1065],{"class":114},[36,35529,35530],{"class":53},"train_num)\n",[36,35532,35534],{"class":38,"line":35533},142,[36,35535,35536],{"class":42},"        # 取双精度\n",[36,35538,35540],{"class":38,"line":35539},143,[36,35541,35542],{"class":42},"        # 计算并保存训练集的准确率\n",[36,35544,35546,35549,35551],{"class":38,"line":35545},144,[36,35547,35548],{"class":53},"        train_acc_all.append(train_corrects.double().item()",[36,35550,1065],{"class":114},[36,35552,35530],{"class":53},[36,35554,35556],{"class":38,"line":35555},145,[36,35557,35558],{"class":42},"        # 计算并保存验证集的loss值\n",[36,35560,35562,35565,35567],{"class":38,"line":35561},146,[36,35563,35564],{"class":53},"        val_loss_all.append(val_loss",[36,35566,1065],{"class":114},[36,35568,35569],{"class":53},"val_num)\n",[36,35571,35573],{"class":38,"line":35572},147,[36,35574,35575],{"class":42},"        # 计算并保存验证集的准确率\n",[36,35577,35579,35582,35584],{"class":38,"line":35578},148,[36,35580,35581],{"class":53},"        val_acc_all.append(val_corrects.double().item()",[36,35583,1065],{"class":114},[36,35585,35569],{"class":53},[36,35587,35589],{"class":38,"line":35588},149,[36,35590,546],{"emptyLinePlaceholder":545},[36,35592,35594],{"class":38,"line":35593},150,[36,35595,35596],{"class":42},"        # 打印训练一轮的loss值和准确率\n",[36,35598,35600,35602,35604,35606,35608,35611,35613,35616,35618,35621,35623,35625,35627,35629,35632,35634,35636,35639,35641,35643],{"class":38,"line":35599},151,[36,35601,34954],{"class":49},[36,35603,54],{"class":53},[36,35605,6123],{"class":57},[36,35607,1944],{"class":49},[36,35609,35610],{"class":57},"train loss:",[36,35612,2065],{"class":49},[36,35614,35615],{"class":114},":.4f",[36,35617,2070],{"class":49},[36,35619,35620],{"class":57}," train acc:",[36,35622,2065],{"class":49},[36,35624,35615],{"class":114},[36,35626,2070],{"class":49},[36,35628,6123],{"class":57},[36,35630,35631],{"class":53},".format(epoch,train_loss_all[",[36,35633,508],{"class":114},[36,35635,707],{"class":49},[36,35637,35638],{"class":53},"],train_acc_all[",[36,35640,508],{"class":114},[36,35642,707],{"class":49},[36,35644,35645],{"class":53},"]))\n",[36,35647,35649,35651,35653,35655,35657,35660,35662,35664,35666,35669,35671,35673,35675,35677,35680,35682,35684,35687,35689,35691],{"class":38,"line":35648},152,[36,35650,34954],{"class":49},[36,35652,54],{"class":53},[36,35654,6123],{"class":57},[36,35656,1944],{"class":49},[36,35658,35659],{"class":57},"val loss:",[36,35661,2065],{"class":49},[36,35663,35615],{"class":114},[36,35665,2070],{"class":49},[36,35667,35668],{"class":57}," val acc:",[36,35670,2065],{"class":49},[36,35672,35615],{"class":114},[36,35674,2070],{"class":49},[36,35676,6123],{"class":57},[36,35678,35679],{"class":53},".format(epoch,val_loss_all[",[36,35681,508],{"class":114},[36,35683,707],{"class":49},[36,35685,35686],{"class":53},"],val_acc_all[",[36,35688,508],{"class":114},[36,35690,707],{"class":49},[36,35692,35645],{"class":53},[36,35694,35696],{"class":38,"line":35695},153,[36,35697,546],{"emptyLinePlaceholder":545},[36,35699,35701],{"class":38,"line":35700},154,[36,35702,35703],{"class":42},"        # 判断准确度--->保存最优模型\n",[36,35705,35707,35709,35712,35714,35716,35718,35720],{"class":38,"line":35706},155,[36,35708,5029],{"class":114},[36,35710,35711],{"class":53}," val_acc_all[",[36,35713,508],{"class":114},[36,35715,707],{"class":49},[36,35717,3614],{"class":53},[36,35719,3633],{"class":114},[36,35721,35722],{"class":53},"best_acc:\n",[36,35724,35726],{"class":38,"line":35725},156,[36,35727,35728],{"class":42},"            # 保存当前模型准确度\n",[36,35730,35732,35735,35737,35739,35742,35744,35746],{"class":38,"line":35731},157,[36,35733,35734],{"class":53},"            best_acc:",[36,35736,244],{"class":49},[36,35738,115],{"class":114},[36,35740,35741],{"class":53},"val_acc_all[",[36,35743,508],{"class":114},[36,35745,707],{"class":49},[36,35747,35748],{"class":53},"]\n",[36,35750,35752],{"class":38,"line":35751},158,[36,35753,35754],{"class":42},"            # 保存当前的准确度\n",[36,35756,35758],{"class":38,"line":35757},159,[36,35759,35760],{"class":42},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,35762,35764,35767,35769],{"class":38,"line":35763},160,[36,35765,35766],{"class":53},"            best_model_wts",[36,35768,115],{"class":114},[36,35770,34817],{"class":53},[36,35772,35774],{"class":38,"line":35773},161,[36,35775,546],{"emptyLinePlaceholder":545},[36,35777,35779],{"class":38,"line":35778},162,[36,35780,35781],{"class":42},"        # 计算耗时\n",[36,35783,35785,35788,35790,35793,35795],{"class":38,"line":35784},163,[36,35786,35787],{"class":53},"        time_use",[36,35789,115],{"class":114},[36,35791,35792],{"class":53},"time.time()",[36,35794,508],{"class":114},[36,35796,35797],{"class":53},"since\n",[36,35799,35801,35803,35805,35808,35810,35813,35815,35817,35819,35821,35823,35826,35829,35831,35833,35836,35838,35840],{"class":38,"line":35800},164,[36,35802,34954],{"class":49},[36,35804,54],{"class":53},[36,35806,35807],{"class":57},"'训练和验证耗费的时间",[36,35809,2065],{"class":49},[36,35811,35812],{"class":114},":.0f",[36,35814,2070],{"class":49},[36,35816,3221],{"class":57},[36,35818,2065],{"class":49},[36,35820,35812],{"class":114},[36,35822,2070],{"class":49},[36,35824,35825],{"class":57},"s'",[36,35827,35828],{"class":53},".format(time_use",[36,35830,1080],{"class":114},[36,35832,3582],{"class":49},[36,35834,35835],{"class":53},",time_use",[36,35837,1095],{"class":114},[36,35839,3582],{"class":49},[36,35841,625],{"class":53},[36,35843,35845],{"class":38,"line":35844},165,[36,35846,35847],{"class":42},"    # 选择最优参数\n",[36,35849,35851],{"class":38,"line":35850},166,[36,35852,35853],{"class":42},"    # 加载最高准确率下的模型参数\n",[36,35855,35857],{"class":38,"line":35856},167,[36,35858,35859],{"class":42},"    # model.load_state_dict(best_model_wts)\n",[36,35861,35863,35866,35869],{"class":38,"line":35862},168,[36,35864,35865],{"class":53},"    torch.save(model.state_dict(best_model_wts), ",[36,35867,35868],{"class":57},"'.\u002Fbest_model.pth'",[36,35870,61],{"class":53},[36,35872,35874],{"class":38,"line":35873},169,[36,35875,35876],{"class":42},"    # 或者写成\n",[36,35878,35880],{"class":38,"line":35879},170,[36,35881,35882],{"class":42},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,35884,35886],{"class":38,"line":35885},171,[36,35887,35888],{"class":42},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,35890,35892,35895,35897,35900,35903,35905],{"class":38,"line":35891},172,[36,35893,35894],{"class":53},"    train_process",[36,35896,115],{"class":114},[36,35898,35899],{"class":53},"pd.DataFrame(",[36,35901,35902],{"class":1997},"data",[36,35904,115],{"class":114},[36,35906,4084],{"class":53},[36,35908,35910,35913,35915,35918],{"class":38,"line":35909},173,[36,35911,35912],{"class":57},"        \"epoch\"",[36,35914,3535],{"class":53},[36,35916,35917],{"class":49},"range",[36,35919,35920],{"class":53},"(num_epochs),\n",[36,35922,35924,35927],{"class":38,"line":35923},174,[36,35925,35926],{"class":57},"        \"train_loss_all\"",[36,35928,35929],{"class":53},":train_loss_all,\n",[36,35931,35933,35936],{"class":38,"line":35932},175,[36,35934,35935],{"class":57},"        \"val_loss_all\"",[36,35937,35938],{"class":53},":val_loss_all,\n",[36,35940,35942,35945],{"class":38,"line":35941},176,[36,35943,35944],{"class":57},"        \"train_acc_all\"",[36,35946,35947],{"class":53},":train_acc_all,\n",[36,35949,35951,35954],{"class":38,"line":35950},177,[36,35952,35953],{"class":57},"        \"val_acc_all\"",[36,35955,35956],{"class":53},":val_acc_all\n",[36,35958,35960],{"class":38,"line":35959},178,[36,35961,35962],{"class":53},"    })\n",[36,35964,35966],{"class":38,"line":35965},179,[36,35967,35968],{"class":42},"    # 返回训练保存的过程\n",[36,35970,35972,35974],{"class":38,"line":35971},180,[36,35973,6621],{"class":114},[36,35975,35976],{"class":53}," train_process\n",[36,35978,35980],{"class":38,"line":35979},181,[36,35981,546],{"emptyLinePlaceholder":545},[36,35983,35985],{"class":38,"line":35984},182,[36,35986,35987],{"class":42},"# 将loss值和精度按照图片的形式展示出来\n",[36,35989,35991,35993,35996],{"class":38,"line":35990},183,[36,35992,34450],{"class":114},[36,35994,35995],{"class":4500}," matplot_acc_loss",[36,35997,35998],{"class":53},"(train_process):\n",[36,36000,36002],{"class":38,"line":36001},184,[36,36003,36004],{"class":42},"    # 设置图的大小\n",[36,36006,36008,36011,36013,36015,36017,36019,36021,36023],{"class":38,"line":36007},185,[36,36009,36010],{"class":53},"    plt.figure(",[36,36012,34196],{"class":1997},[36,36014,115],{"class":114},[36,36016,54],{"class":53},[36,36018,3176],{"class":49},[36,36020,3059],{"class":53},[36,36022,2977],{"class":49},[36,36024,625],{"class":53},[36,36026,36028],{"class":38,"line":36027},186,[36,36029,36030],{"class":42},"    # 设置图中有几张图\n",[36,36032,36034],{"class":38,"line":36033},187,[36,36035,36036],{"class":42},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,36038,36040],{"class":38,"line":36039},188,[36,36041,36042],{"class":42},"    # ①loss图\n",[36,36044,36046,36048,36050,36052,36054,36056,36058],{"class":38,"line":36045},189,[36,36047,34230],{"class":53},[36,36049,707],{"class":49},[36,36051,3059],{"class":53},[36,36053,1188],{"class":49},[36,36055,3059],{"class":53},[36,36057,707],{"class":49},[36,36059,61],{"class":53},[36,36061,36063],{"class":38,"line":36062},190,[36,36064,36065],{"class":42},"    # 补充:\n",[36,36067,36069],{"class":38,"line":36068},191,[36,36070,36071],{"class":42},"    # plt.subplot(nrows, ncols, index)\n",[36,36073,36075],{"class":38,"line":36074},192,[36,36076,36077],{"class":42},"    # nrows：行数\n",[36,36079,36081],{"class":38,"line":36080},193,[36,36082,36083],{"class":42},"    # ncols：列数\n",[36,36085,36087],{"class":38,"line":36086},194,[36,36088,36089],{"class":42},"    # index：目前选中第几个子图（从1开始）\n",[36,36091,36093,36096,36099,36102,36105,36107,36110,36112,36115],{"class":38,"line":36092},195,[36,36094,36095],{"class":53},"    plt.plot(train_process[",[36,36097,36098],{"class":57},"\"epoch\"",[36,36100,36101],{"class":53},"],train_process.train_loss_all,",[36,36103,36104],{"class":57},"'ro-'",[36,36106,3059],{"class":53},[36,36108,36109],{"class":1997},"label",[36,36111,115],{"class":114},[36,36113,36114],{"class":57},"'train loss'",[36,36116,61],{"class":53},[36,36118,36120,36122,36124,36127,36130,36132,36134,36136,36139],{"class":38,"line":36119},196,[36,36121,36095],{"class":53},[36,36123,36098],{"class":57},[36,36125,36126],{"class":53},"],train_process.val_loss_all,",[36,36128,36129],{"class":57},"'bs--'",[36,36131,3059],{"class":53},[36,36133,36109],{"class":1997},[36,36135,115],{"class":114},[36,36137,36138],{"class":57},"'val loss'",[36,36140,61],{"class":53},[36,36142,36144],{"class":38,"line":36143},197,[36,36145,36146],{"class":42},"    # 添加一个图例\n",[36,36148,36150],{"class":38,"line":36149},198,[36,36151,36152],{"class":53},"    plt.legend()\n",[36,36154,36156],{"class":38,"line":36155},199,[36,36157,36158],{"class":42},"    # 给轴添加标签\n",[36,36160,36162,36165,36168],{"class":38,"line":36161},200,[36,36163,36164],{"class":53},"    plt.xlabel(",[36,36166,36167],{"class":57},"'epoch'",[36,36169,61],{"class":53},[36,36171,36173,36176,36179],{"class":38,"line":36172},201,[36,36174,36175],{"class":53},"    plt.ylabel(",[36,36177,36178],{"class":57},"'loss'",[36,36180,61],{"class":53},[36,36182,36184],{"class":38,"line":36183},202,[36,36185,36186],{"class":42},"    # ②准确度图\n",[36,36188,36190,36192,36194,36196,36198,36200,36202],{"class":38,"line":36189},203,[36,36191,34230],{"class":53},[36,36193,707],{"class":49},[36,36195,3059],{"class":53},[36,36197,1188],{"class":49},[36,36199,3059],{"class":53},[36,36201,1188],{"class":49},[36,36203,61],{"class":53},[36,36205,36207,36209,36211,36214,36216,36218,36220,36222,36225],{"class":38,"line":36206},204,[36,36208,36095],{"class":53},[36,36210,36098],{"class":57},[36,36212,36213],{"class":53},"],train_process.train_acc_all,",[36,36215,36104],{"class":57},[36,36217,3059],{"class":53},[36,36219,36109],{"class":1997},[36,36221,115],{"class":114},[36,36223,36224],{"class":57},"'train acc'",[36,36226,61],{"class":53},[36,36228,36230,36232,36234,36237,36239,36241,36243,36245,36248],{"class":38,"line":36229},205,[36,36231,36095],{"class":53},[36,36233,36098],{"class":57},[36,36235,36236],{"class":53},"],train_process.val_acc_all,",[36,36238,36129],{"class":57},[36,36240,3059],{"class":53},[36,36242,36109],{"class":1997},[36,36244,115],{"class":114},[36,36246,36247],{"class":57},"'val acc'",[36,36249,61],{"class":53},[36,36251,36253],{"class":38,"line":36252},206,[36,36254,36255],{"class":42},"    # 添加图例\n",[36,36257,36259],{"class":38,"line":36258},207,[36,36260,36152],{"class":53},[36,36262,36264,36266,36268],{"class":38,"line":36263},208,[36,36265,36164],{"class":53},[36,36267,36098],{"class":57},[36,36269,61],{"class":53},[36,36271,36273,36275,36278],{"class":38,"line":36272},209,[36,36274,36175],{"class":53},[36,36276,36277],{"class":57},"\"acc\"",[36,36279,61],{"class":53},[36,36281,36283],{"class":38,"line":36282},210,[36,36284,36285],{"class":53},"    plt.show()\n",[36,36287,36289],{"class":38,"line":36288},211,[36,36290,546],{"emptyLinePlaceholder":545},[36,36292,36294],{"class":38,"line":36293},212,[36,36295,36296],{"class":42},"# 正式开始训练:\n",[36,36298,36300,36302,36304,36306,36308],{"class":38,"line":36299},213,[36,36301,4069],{"class":114},[36,36303,33724],{"class":49},[36,36305,1377],{"class":114},[36,36307,33729],{"class":57},[36,36309,6270],{"class":53},[36,36311,36313],{"class":38,"line":36312},214,[36,36314,36315],{"class":42},"    # 将模型实例化\n",[36,36317,36319,36322,36324],{"class":38,"line":36318},215,[36,36320,36321],{"class":53},"    LeNet",[36,36323,115],{"class":114},[36,36325,36326],{"class":53},"LeNet()\n",[36,36328,36330,36333,36335],{"class":38,"line":36329},216,[36,36331,36332],{"class":53},"    train_dataloader,val_dataloader",[36,36334,115],{"class":114},[36,36336,36337],{"class":53},"train_val_data_process()\n",[36,36339,36341,36343,36345,36348,36351,36353,36355],{"class":38,"line":36340},217,[36,36342,35894],{"class":53},[36,36344,115],{"class":114},[36,36346,36347],{"class":53},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,36349,36350],{"class":1997},"num_epochs",[36,36352,115],{"class":114},[36,36354,3376],{"class":49},[36,36356,61],{"class":53},[36,36358,36360],{"class":38,"line":36359},218,[36,36361,36362],{"class":53},"    matplot_acc_loss(train_process)\n",[19,36364,36365],{},"画图的补充点学习：",[19,36367,36368],{},[4000,36369],{"alt":31,"src":36370},"\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",[433,36372,36373],{"start":82},[436,36374,36375],{},"测试",[26,36377,36379],{"className":28,"code":36378,"language":30,"meta":31,"style":31},"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",[33,36380,36381,36387,36397,36409,36419,36424,36434,36444,36448,36453,36462,36479,36490,36507,36518,36534,36539,36550,36561,36572,36579,36583,36588,36598,36603,36620,36628,36632,36637,36646,36655,36659,36664,36669,36674,36681,36686,36698,36708,36718,36723,36727,36732,36741,36746,36762,36767,36772,36777,36791,36796,36810,36814,36819,36834,36839,36851,36855,36860,36872,36877,36885,36890,36895,36905,36910,36919,36924,36929,36933,36938,36943,36959,36967,36972,36977,37036,37042,37047,37058,37066,37074,37078,37083,37087,37092,37100,37105,37121,37126,37136,37146],{"__ignoreMap":31},[36,36382,36383,36385],{"class":38,"line":39},[36,36384,537],{"class":114},[36,36386,32902],{"class":53},[36,36388,36389,36391,36393,36395],{"class":38,"line":46},[36,36390,537],{"class":114},[36,36392,33919],{"class":53},[36,36394,33887],{"class":114},[36,36396,33924],{"class":53},[36,36398,36399,36401,36404,36406],{"class":38,"line":82},[36,36400,33241],{"class":114},[36,36402,36403],{"class":53}," jupyter_client.consoleapp ",[36,36405,537],{"class":114},[36,36407,36408],{"class":53}," classes\n",[36,36410,36411,36413,36415,36417],{"class":38,"line":88},[36,36412,33241],{"class":114},[36,36414,33902],{"class":53},[36,36416,537],{"class":114},[36,36418,33907],{"class":53},[36,36420,36421],{"class":38,"line":195},[36,36422,36423],{"class":42},"# 导入数据集\n",[36,36425,36426,36428,36430,36432],{"class":38,"line":1517},[36,36427,33241],{"class":114},[36,36429,33872],{"class":53},[36,36431,537],{"class":114},[36,36433,33877],{"class":53},[36,36435,36436,36438,36440,36442],{"class":38,"line":2421},[36,36437,33241],{"class":114},[36,36439,34417],{"class":53},[36,36441,537],{"class":114},[36,36443,34422],{"class":53},[36,36445,36446],{"class":38,"line":2446},[36,36447,546],{"emptyLinePlaceholder":545},[36,36449,36450],{"class":38,"line":2469},[36,36451,36452],{"class":42},"# 测试数据处理\n",[36,36454,36455,36457,36460],{"class":38,"line":2492},[36,36456,34450],{"class":114},[36,36458,36459],{"class":4500}," test_data_process",[36,36461,34456],{"class":53},[36,36463,36464,36467,36469,36471,36473,36475,36477],{"class":38,"line":4150},[36,36465,36466],{"class":53},"    test_data",[36,36468,115],{"class":114},[36,36470,33959],{"class":53},[36,36472,33962],{"class":1997},[36,36474,115],{"class":114},[36,36476,33967],{"class":57},[36,36478,33970],{"class":53},[36,36480,36481,36484,36486,36488],{"class":38,"line":4155},[36,36482,36483],{"class":1997},"                           train",[36,36485,115],{"class":114},[36,36487,276],{"class":49},[36,36489,33970],{"class":53},[36,36491,36492,36495,36497,36499,36501,36503,36505],{"class":38,"line":4161},[36,36493,36494],{"class":1997},"                           transform",[36,36496,115],{"class":114},[36,36498,33996],{"class":53},[36,36500,33999],{"class":1997},[36,36502,115],{"class":114},[36,36504,3576],{"class":49},[36,36506,34007],{"class":53},[36,36508,36509,36512,36514,36516],{"class":38,"line":4166},[36,36510,36511],{"class":1997},"                           download",[36,36513,115],{"class":114},[36,36515,189],{"class":49},[36,36517,61],{"class":53},[36,36519,36520,36523,36525,36527,36529,36531],{"class":38,"line":4180},[36,36521,36522],{"class":53},"    test_dataloader",[36,36524,115],{"class":114},[36,36526,34037],{"class":53},[36,36528,34040],{"class":1997},[36,36530,115],{"class":114},[36,36532,36533],{"class":53},"test_data,\n",[36,36535,36536],{"class":38,"line":4185},[36,36537,36538],{"class":42},"                                    # 这里是一张一张进行测试\n",[36,36540,36541,36544,36546,36548],{"class":38,"line":4191},[36,36542,36543],{"class":1997},"                                    batch_size",[36,36545,115],{"class":114},[36,36547,707],{"class":49},[36,36549,33970],{"class":53},[36,36551,36552,36555,36557,36559],{"class":38,"line":4212},[36,36553,36554],{"class":1997},"                                    shuffle",[36,36556,115],{"class":114},[36,36558,189],{"class":49},[36,36560,33970],{"class":53},[36,36562,36563,36566,36568,36570],{"class":38,"line":4217},[36,36564,36565],{"class":1997},"                                    num_workers",[36,36567,115],{"class":114},[36,36569,713],{"class":49},[36,36571,61],{"class":53},[36,36573,36574,36576],{"class":38,"line":4231},[36,36575,6621],{"class":114},[36,36577,36578],{"class":53}," test_dataloader\n",[36,36580,36581],{"class":38,"line":4236},[36,36582,546],{"emptyLinePlaceholder":545},[36,36584,36585],{"class":38,"line":4264},[36,36586,36587],{"class":42},"# 定义模型测试函数\n",[36,36589,36590,36592,36595],{"class":38,"line":4269},[36,36591,34450],{"class":114},[36,36593,36594],{"class":4500}," test_model_process",[36,36596,36597],{"class":53},"(model,test_dataloader):\n",[36,36599,36600],{"class":38,"line":4286},[36,36601,36602],{"class":42},"    # 将模型放到设备当中，先进行判断\n",[36,36604,36605,36607,36609,36611,36613,36615,36617],{"class":38,"line":4291},[36,36606,33741],{"class":53},[36,36608,115],{"class":114},[36,36610,33748],{"class":57},[36,36612,4242],{"class":114},[36,36614,33753],{"class":53},[36,36616,4239],{"class":114},[36,36618,36619],{"class":57}," \"cpu\"\n",[36,36621,36622,36624,36626],{"class":38,"line":4296},[36,36623,33793],{"class":53},[36,36625,115],{"class":114},[36,36627,34792],{"class":53},[36,36629,36630],{"class":38,"line":4301},[36,36631,546],{"emptyLinePlaceholder":545},[36,36633,36634],{"class":38,"line":4315},[36,36635,36636],{"class":42},"    # 设置初始化参数\n",[36,36638,36639,36642,36644],{"class":38,"line":4320},[36,36640,36641],{"class":53},"    test_corrects",[36,36643,115],{"class":114},[36,36645,34845],{"class":49},[36,36647,36648,36651,36653],{"class":38,"line":5109},[36,36649,36650],{"class":53},"    test_num",[36,36652,115],{"class":114},[36,36654,5616],{"class":49},[36,36656,36657],{"class":38,"line":5123},[36,36658,546],{"emptyLinePlaceholder":545},[36,36660,36661],{"class":38,"line":5131},[36,36662,36663],{"class":42},"    # 进行模型测试\n",[36,36665,36666],{"class":38,"line":5136},[36,36667,36668],{"class":42},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,36670,36671],{"class":38,"line":5142},[36,36672,36673],{"class":42},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,36675,36676,36679],{"class":38,"line":5148},[36,36677,36678],{"class":114},"    with",[36,36680,35386],{"class":53},[36,36682,36683],{"class":38,"line":5153},[36,36684,36685],{"class":42},"        # 从数据中进行\n",[36,36687,36688,36690,36693,36695],{"class":38,"line":10475},[36,36689,5934],{"class":114},[36,36691,36692],{"class":53}," test_data_x,test_data_y ",[36,36694,28556],{"class":114},[36,36696,36697],{"class":53}," test_dataloader:\n",[36,36699,36700,36703,36705],{"class":38,"line":10499},[36,36701,36702],{"class":53},"            test_data_x",[36,36704,115],{"class":114},[36,36706,36707],{"class":53},"test_data_x.to(device)\n",[36,36709,36710,36713,36715],{"class":38,"line":10504},[36,36711,36712],{"class":53},"            test_data_y",[36,36714,115],{"class":114},[36,36716,36717],{"class":53},"test_data_y.to(device)\n",[36,36719,36720],{"class":38,"line":10510},[36,36721,36722],{"class":42},"            # 设置为验证模式\n",[36,36724,36725],{"class":38,"line":10537},[36,36726,35377],{"class":53},[36,36728,36729],{"class":38,"line":10542},[36,36730,36731],{"class":42},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,36733,36734,36736,36738],{"class":38,"line":10548},[36,36735,35162],{"class":53},[36,36737,115],{"class":114},[36,36739,36740],{"class":53},"model(test_data_x)\n",[36,36742,36743],{"class":38,"line":10560},[36,36744,36745],{"class":42},"            # 查找每一行中最大值对应的下标\n",[36,36747,36748,36750,36752,36754,36756,36758,36760],{"class":38,"line":10572},[36,36749,35179],{"class":53},[36,36751,115],{"class":114},[36,36753,35184],{"class":53},[36,36755,35187],{"class":1997},[36,36757,115],{"class":114},[36,36759,707],{"class":49},[36,36761,61],{"class":53},[36,36763,36764],{"class":38,"line":10584},[36,36765,36766],{"class":42},"            # 计算正确率\n",[36,36768,36769],{"class":38,"line":12241},[36,36770,36771],{"class":42},"            # .data表示是一个不带梯度信息的tensor\n",[36,36773,36774],{"class":38,"line":12266},[36,36775,36776],{"class":42},"            # 如果预测正确，则准确度test_corrects加1\n",[36,36778,36779,36782,36784,36786,36788],{"class":38,"line":12289},[36,36780,36781],{"class":53},"            test_corrects",[36,36783,1224],{"class":114},[36,36785,35289],{"class":53},[36,36787,1377],{"class":114},[36,36789,36790],{"class":53},"test_data_y.data)\n",[36,36792,36793],{"class":38,"line":12313},[36,36794,36795],{"class":42},"            # 将所有的测试样本进行累计\n",[36,36797,36798,36801,36803,36806,36808],{"class":38,"line":12318},[36,36799,36800],{"class":53},"            test_num",[36,36802,1224],{"class":114},[36,36804,36805],{"class":53},"test_data_x.size(",[36,36807,713],{"class":49},[36,36809,61],{"class":53},[36,36811,36812],{"class":38,"line":12323},[36,36813,546],{"emptyLinePlaceholder":545},[36,36815,36816],{"class":38,"line":12328},[36,36817,36818],{"class":42},"        # 计算准确度\n",[36,36820,36821,36824,36826,36829,36831],{"class":38,"line":12337},[36,36822,36823],{"class":53},"        test_acc",[36,36825,115],{"class":114},[36,36827,36828],{"class":53},"test_corrects.double().item()",[36,36830,1065],{"class":114},[36,36832,36833],{"class":53},"test_num\n",[36,36835,36836],{"class":38,"line":12342},[36,36837,36838],{"class":42},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,36840,36841,36843,36845,36848],{"class":38,"line":12348},[36,36842,34954],{"class":49},[36,36844,54],{"class":53},[36,36846,36847],{"class":57},"\"测试的准确率：\"",[36,36849,36850],{"class":53},",test_acc)\n",[36,36852,36853],{"class":38,"line":12369},[36,36854,546],{"emptyLinePlaceholder":545},[36,36856,36857],{"class":38,"line":12375},[36,36858,36859],{"class":42},"# 实现模型的测试功能\n",[36,36861,36862,36864,36866,36868,36870],{"class":38,"line":12389},[36,36863,4069],{"class":114},[36,36865,33724],{"class":49},[36,36867,1377],{"class":114},[36,36869,33729],{"class":57},[36,36871,6270],{"class":53},[36,36873,36874],{"class":38,"line":12395},[36,36875,36876],{"class":42},"    # 加载模型\n",[36,36878,36879,36881,36883],{"class":38,"line":12422},[36,36880,33793],{"class":53},[36,36882,115],{"class":114},[36,36884,36326],{"class":53},[36,36886,36887],{"class":38,"line":12431},[36,36888,36889],{"class":42},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,36891,36892],{"class":38,"line":12437},[36,36893,36894],{"class":42},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,36896,36897,36900,36903],{"class":38,"line":12445},[36,36898,36899],{"class":53},"    model.load_state_dict(torch.load(",[36,36901,36902],{"class":57},"'best_model.pth'",[36,36904,625],{"class":53},[36,36906,36907],{"class":38,"line":12450},[36,36908,36909],{"class":42},"    # 数据加载\n",[36,36911,36912,36914,36916],{"class":38,"line":19122},[36,36913,36522],{"class":53},[36,36915,115],{"class":114},[36,36917,36918],{"class":53},"test_data_process()\n",[36,36920,36921],{"class":38,"line":19128},[36,36922,36923],{"class":42},"    # 加载模型测试的函数\n",[36,36925,36926],{"class":38,"line":19151},[36,36927,36928],{"class":53},"    test_model_process(model,test_dataloader)\n",[36,36930,36931],{"class":38,"line":19157},[36,36932,546],{"emptyLinePlaceholder":545},[36,36934,36935],{"class":38,"line":19180},[36,36936,36937],{"class":42},"    # 验证集推理实现：\n",[36,36939,36940],{"class":38,"line":19194},[36,36941,36942],{"class":42},"    # 加载数据加载的更详细一些\n",[36,36944,36945,36947,36949,36951,36953,36955,36957],{"class":38,"line":19214},[36,36946,33741],{"class":53},[36,36948,115],{"class":114},[36,36950,33748],{"class":57},[36,36952,4242],{"class":114},[36,36954,33753],{"class":53},[36,36956,4239],{"class":114},[36,36958,36619],{"class":57},[36,36960,36961,36963,36965],{"class":38,"line":19220},[36,36962,33793],{"class":53},[36,36964,115],{"class":114},[36,36966,34792],{"class":53},[36,36968,36969],{"class":38,"line":19231},[36,36970,36971],{"class":42},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,36973,36974],{"class":38,"line":19254},[36,36975,36976],{"class":42},"    # 顺序不可改变\n",[36,36978,36979,36982,36984,36986,36989,36991,36994,36996,36999,37001,37004,37006,37009,37011,37014,37016,37019,37021,37024,37026,37029,37031,37034],{"class":38,"line":19276},[36,36980,36981],{"class":53},"    classes",[36,36983,115],{"class":114},[36,36985,3566],{"class":53},[36,36987,36988],{"class":57},"'T-shirt\u002Ftop'",[36,36990,3059],{"class":53},[36,36992,36993],{"class":57},"'Trouser'",[36,36995,3059],{"class":53},[36,36997,36998],{"class":57},"'Pullover'",[36,37000,3059],{"class":53},[36,37002,37003],{"class":57},"'Dress'",[36,37005,3059],{"class":53},[36,37007,37008],{"class":57},"'Coat'",[36,37010,3059],{"class":53},[36,37012,37013],{"class":57},"'Sandal'",[36,37015,3059],{"class":53},[36,37017,37018],{"class":57},"'Shirt'",[36,37020,3059],{"class":53},[36,37022,37023],{"class":57},"'Sneaker'",[36,37025,3059],{"class":53},[36,37027,37028],{"class":57},"'Bag'",[36,37030,3059],{"class":53},[36,37032,37033],{"class":57},"'Ankle boot'",[36,37035,35748],{"class":53},[36,37037,37038,37040],{"class":38,"line":19281},[36,37039,36678],{"class":114},[36,37041,35386],{"class":53},[36,37043,37044],{"class":38,"line":19287},[36,37045,37046],{"class":42},"        # 将数据和标签都放到设备当中\n",[36,37048,37049,37051,37054,37056],{"class":38,"line":19301},[36,37050,5934],{"class":114},[36,37052,37053],{"class":53}," b_x,b_y ",[36,37055,28556],{"class":114},[36,37057,36697],{"class":53},[36,37059,37060,37062,37064],{"class":38,"line":19314},[36,37061,35112],{"class":53},[36,37063,115],{"class":114},[36,37065,35117],{"class":53},[36,37067,37068,37070,37072],{"class":38,"line":19319},[36,37069,35127],{"class":53},[36,37071,115],{"class":114},[36,37073,35132],{"class":53},[36,37075,37076],{"class":38,"line":19333},[36,37077,546],{"emptyLinePlaceholder":545},[36,37079,37080],{"class":38,"line":19338},[36,37081,37082],{"class":42},"            # 设置模型为验证模式\n",[36,37084,37085],{"class":38,"line":19344},[36,37086,35377],{"class":53},[36,37088,37089],{"class":38,"line":19349},[36,37090,37091],{"class":42},"            # 模型推理结果\n",[36,37093,37094,37096,37098],{"class":38,"line":19363},[36,37095,35162],{"class":53},[36,37097,115],{"class":114},[36,37099,35167],{"class":53},[36,37101,37102],{"class":38,"line":19368},[36,37103,37104],{"class":42},"            # 获取最大下标，最大下标就是类别号\n",[36,37106,37107,37109,37111,37113,37115,37117,37119],{"class":38,"line":19373},[36,37108,35179],{"class":53},[36,37110,115],{"class":114},[36,37112,35184],{"class":53},[36,37114,35187],{"class":1997},[36,37116,115],{"class":114},[36,37118,707],{"class":49},[36,37120,61],{"class":53},[36,37122,37123],{"class":38,"line":19387},[36,37124,37125],{"class":42},"            # 取出张量中的数值\n",[36,37127,37128,37131,37133],{"class":38,"line":19399},[36,37129,37130],{"class":53},"            result",[36,37132,115],{"class":114},[36,37134,37135],{"class":53},"pre_lab.item()\n",[36,37137,37138,37141,37143],{"class":38,"line":19404},[36,37139,37140],{"class":53},"            label",[36,37142,115],{"class":114},[36,37144,37145],{"class":53},"b_y.item()\n",[36,37147,37148,37151,37153,37156,37159,37162,37164,37167],{"class":38,"line":19417},[36,37149,37150],{"class":49},"            print",[36,37152,54],{"class":53},[36,37154,37155],{"class":57},"\"预测值：\"",[36,37157,37158],{"class":53},",classes[result],",[36,37160,37161],{"class":57},"\"------\"",[36,37163,3059],{"class":53},[36,37165,37166],{"class":57},"\"真实值：\"",[36,37168,37169],{"class":53},",classes[label])\n",[19,37171,37172],{},"（2）AlexNet",[433,37174,37175],{},[436,37176,37177],{},"神经网络构建",[26,37179,37181],{"className":28,"code":37180,"language":30,"meta":31,"style":31},"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",[33,37182,37183,37189,37199,37209,37221,37225,37242,37250,37265,37277,37319,37346,37389,37415,37459,37502,37545,37572,37576,37586,37591,37619,37638,37657,37661,37666,37674,37689,37699,37713,37723,37738,37753,37768,37779,37783,37788,37798,37813,37818,37832,37847,37859,37864,37875,37880,37886,37891,37903,37923,37928,37937],{"__ignoreMap":31},[36,37184,37185,37187],{"class":38,"line":39},[36,37186,537],{"class":114},[36,37188,32902],{"class":53},[36,37190,37191,37193,37195,37197],{"class":38,"line":46},[36,37192,33241],{"class":114},[36,37194,33244],{"class":53},[36,37196,537],{"class":114},[36,37198,33249],{"class":53},[36,37200,37201,37203,37205,37207],{"class":38,"line":82},[36,37202,33241],{"class":114},[36,37204,33261],{"class":53},[36,37206,537],{"class":114},[36,37208,33266],{"class":53},[36,37210,37211,37213,37216,37218],{"class":38,"line":88},[36,37212,537],{"class":114},[36,37214,37215],{"class":53}," torch.nn.functional ",[36,37217,33887],{"class":114},[36,37219,37220],{"class":53}," F\n",[36,37222,37223],{"class":38,"line":195},[36,37224,546],{"emptyLinePlaceholder":545},[36,37226,37227,37229,37232,37234,37236,37238,37240],{"class":38,"line":1517},[36,37228,519],{"class":114},[36,37230,37231],{"class":4500}," AlexNet",[36,37233,54],{"class":53},[36,37235,33282],{"class":4500},[36,37237,3235],{"class":53},[36,37239,33287],{"class":4500},[36,37241,33290],{"class":53},[36,37243,37244,37246,37248],{"class":38,"line":2421},[36,37245,33305],{"class":114},[36,37247,33308],{"class":49},[36,37249,33311],{"class":53},[36,37251,37252,37254,37257,37259,37261,37263],{"class":38,"line":2446},[36,37253,33321],{"class":49},[36,37255,37256],{"class":53},"(AlexNet,",[36,37258,33327],{"class":49},[36,37260,33330],{"class":53},[36,37262,33333],{"class":49},[36,37264,4513],{"class":53},[36,37266,37267,37269,37272,37274],{"class":38,"line":2469},[36,37268,33349],{"class":49},[36,37270,37271],{"class":53},".ReLu",[36,37273,115],{"class":114},[36,37275,37276],{"class":53},"nn.ReLU()\n",[36,37278,37279,37281,37283,37285,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313,37315,37317],{"class":38,"line":2492},[36,37280,33349],{"class":49},[36,37282,33352],{"class":53},[36,37284,115],{"class":114},[36,37286,33357],{"class":53},[36,37288,33360],{"class":1997},[36,37290,115],{"class":114},[36,37292,707],{"class":49},[36,37294,3059],{"class":53},[36,37296,33369],{"class":1997},[36,37298,115],{"class":114},[36,37300,2896],{"class":49},[36,37302,3059],{"class":53},[36,37304,33378],{"class":1997},[36,37306,115],{"class":114},[36,37308,3151],{"class":49},[36,37310,3059],{"class":53},[36,37312,33433],{"class":1997},[36,37314,115],{"class":114},[36,37316,2977],{"class":49},[36,37318,61],{"class":53},[36,37320,37321,37323,37325,37327,37330,37332,37334,37336,37338,37340,37342,37344],{"class":38,"line":4150},[36,37322,33349],{"class":49},[36,37324,33417],{"class":53},[36,37326,115],{"class":114},[36,37328,37329],{"class":53},"nn.MaxPool2d(",[36,37331,33378],{"class":1997},[36,37333,115],{"class":114},[36,37335,2767],{"class":49},[36,37337,3059],{"class":53},[36,37339,33433],{"class":1997},[36,37341,115],{"class":114},[36,37343,1188],{"class":49},[36,37345,61],{"class":53},[36,37347,37348,37350,37352,37354,37356,37358,37360,37362,37364,37366,37368,37371,37373,37375,37377,37379,37381,37383,37385,37387],{"class":38,"line":4155},[36,37349,33349],{"class":49},[36,37351,33446],{"class":53},[36,37353,115],{"class":114},[36,37355,33357],{"class":53},[36,37357,33360],{"class":1997},[36,37359,115],{"class":114},[36,37361,2896],{"class":49},[36,37363,3059],{"class":53},[36,37365,33369],{"class":1997},[36,37367,115],{"class":114},[36,37369,37370],{"class":49},"256",[36,37372,3059],{"class":53},[36,37374,33378],{"class":1997},[36,37376,115],{"class":114},[36,37378,1134],{"class":49},[36,37380,3059],{"class":53},[36,37382,33387],{"class":1997},[36,37384,115],{"class":114},[36,37386,1188],{"class":49},[36,37388,61],{"class":53},[36,37390,37391,37393,37395,37397,37399,37401,37403,37405,37407,37409,37411,37413],{"class":38,"line":4161},[36,37392,33349],{"class":49},[36,37394,33481],{"class":53},[36,37396,115],{"class":114},[36,37398,37329],{"class":53},[36,37400,33378],{"class":1997},[36,37402,115],{"class":114},[36,37404,2767],{"class":49},[36,37406,3059],{"class":53},[36,37408,33433],{"class":1997},[36,37410,115],{"class":114},[36,37412,1188],{"class":49},[36,37414,61],{"class":53},[36,37416,37417,37419,37422,37424,37426,37428,37430,37432,37434,37436,37438,37441,37443,37445,37447,37449,37451,37453,37455,37457],{"class":38,"line":4166},[36,37418,33349],{"class":49},[36,37420,37421],{"class":53},".c5",[36,37423,115],{"class":114},[36,37425,33357],{"class":53},[36,37427,33360],{"class":1997},[36,37429,115],{"class":114},[36,37431,37370],{"class":49},[36,37433,3059],{"class":53},[36,37435,33369],{"class":1997},[36,37437,115],{"class":114},[36,37439,37440],{"class":49},"384",[36,37442,3059],{"class":53},[36,37444,33378],{"class":1997},[36,37446,115],{"class":114},[36,37448,2767],{"class":49},[36,37450,3059],{"class":53},[36,37452,33387],{"class":1997},[36,37454,115],{"class":114},[36,37456,707],{"class":49},[36,37458,61],{"class":53},[36,37460,37461,37463,37466,37468,37470,37472,37474,37476,37478,37480,37482,37484,37486,37488,37490,37492,37494,37496,37498,37500],{"class":38,"line":4180},[36,37462,33349],{"class":49},[36,37464,37465],{"class":53},".c6",[36,37467,115],{"class":114},[36,37469,33357],{"class":53},[36,37471,33360],{"class":1997},[36,37473,115],{"class":114},[36,37475,37440],{"class":49},[36,37477,3059],{"class":53},[36,37479,33369],{"class":1997},[36,37481,115],{"class":114},[36,37483,37440],{"class":49},[36,37485,3059],{"class":53},[36,37487,33378],{"class":1997},[36,37489,115],{"class":114},[36,37491,2767],{"class":49},[36,37493,3059],{"class":53},[36,37495,33387],{"class":1997},[36,37497,115],{"class":114},[36,37499,707],{"class":49},[36,37501,61],{"class":53},[36,37503,37504,37506,37509,37511,37513,37515,37517,37519,37521,37523,37525,37527,37529,37531,37533,37535,37537,37539,37541,37543],{"class":38,"line":4185},[36,37505,33349],{"class":49},[36,37507,37508],{"class":53},".c7",[36,37510,115],{"class":114},[36,37512,33357],{"class":53},[36,37514,33360],{"class":1997},[36,37516,115],{"class":114},[36,37518,37440],{"class":49},[36,37520,3059],{"class":53},[36,37522,33369],{"class":1997},[36,37524,115],{"class":114},[36,37526,37370],{"class":49},[36,37528,3059],{"class":53},[36,37530,33378],{"class":1997},[36,37532,115],{"class":114},[36,37534,2767],{"class":49},[36,37536,3059],{"class":53},[36,37538,33387],{"class":1997},[36,37540,115],{"class":114},[36,37542,707],{"class":49},[36,37544,61],{"class":53},[36,37546,37547,37549,37552,37554,37556,37558,37560,37562,37564,37566,37568,37570],{"class":38,"line":4191},[36,37548,33349],{"class":49},[36,37550,37551],{"class":53},".s8",[36,37553,115],{"class":114},[36,37555,37329],{"class":53},[36,37557,33378],{"class":1997},[36,37559,115],{"class":114},[36,37561,2767],{"class":49},[36,37563,3059],{"class":53},[36,37565,33433],{"class":1997},[36,37567,115],{"class":114},[36,37569,1188],{"class":49},[36,37571,61],{"class":53},[36,37573,37574],{"class":38,"line":4212},[36,37575,33506],{"class":42},[36,37577,37578,37580,37582,37584],{"class":38,"line":4217},[36,37579,33349],{"class":49},[36,37581,33513],{"class":53},[36,37583,115],{"class":114},[36,37585,33518],{"class":53},[36,37587,37588],{"class":38,"line":4231},[36,37589,37590],{"class":42},"       # 定义全连接层\n",[36,37592,37593,37595,37598,37600,37602,37604,37606,37608,37610,37612,37614,37617],{"class":38,"line":4236},[36,37594,33349],{"class":49},[36,37596,37597],{"class":53},".f1",[36,37599,115],{"class":114},[36,37601,33535],{"class":53},[36,37603,3025],{"class":49},[36,37605,1050],{"class":114},[36,37607,3025],{"class":49},[36,37609,1050],{"class":114},[36,37611,37370],{"class":49},[36,37613,3059],{"class":53},[36,37615,37616],{"class":49},"4096",[36,37618,61],{"class":53},[36,37620,37621,37623,37626,37628,37630,37632,37634,37636],{"class":38,"line":4264},[36,37622,33349],{"class":49},[36,37624,37625],{"class":53},".f2",[36,37627,115],{"class":114},[36,37629,33535],{"class":53},[36,37631,37616],{"class":49},[36,37633,3059],{"class":53},[36,37635,37616],{"class":49},[36,37637,61],{"class":53},[36,37639,37640,37642,37645,37647,37649,37651,37653,37655],{"class":38,"line":4269},[36,37641,33349],{"class":49},[36,37643,37644],{"class":53},".f3",[36,37646,115],{"class":114},[36,37648,33535],{"class":53},[36,37650,37616],{"class":49},[36,37652,3059],{"class":53},[36,37654,1317],{"class":49},[36,37656,61],{"class":53},[36,37658,37659],{"class":38,"line":4286},[36,37660,546],{"emptyLinePlaceholder":545},[36,37662,37663],{"class":38,"line":4291},[36,37664,37665],{"class":42},"    # 定义前向传播\n",[36,37667,37668,37670,37672],{"class":38,"line":4296},[36,37669,33305],{"class":114},[36,37671,33597],{"class":4500},[36,37673,33600],{"class":53},[36,37675,37676,37678,37680,37682,37685,37687],{"class":38,"line":4301},[36,37677,33605],{"class":53},[36,37679,115],{"class":114},[36,37681,33327],{"class":49},[36,37683,37684],{"class":53},".ReLu(",[36,37686,33327],{"class":49},[36,37688,33617],{"class":53},[36,37690,37691,37693,37695,37697],{"class":38,"line":4315},[36,37692,33605],{"class":53},[36,37694,115],{"class":114},[36,37696,33327],{"class":49},[36,37698,33628],{"class":53},[36,37700,37701,37703,37705,37707,37709,37711],{"class":38,"line":4320},[36,37702,33605],{"class":53},[36,37704,115],{"class":114},[36,37706,33327],{"class":49},[36,37708,37684],{"class":53},[36,37710,33327],{"class":49},[36,37712,33643],{"class":53},[36,37714,37715,37717,37719,37721],{"class":38,"line":5109},[36,37716,33605],{"class":53},[36,37718,115],{"class":114},[36,37720,33327],{"class":49},[36,37722,33654],{"class":53},[36,37724,37725,37727,37729,37731,37733,37735],{"class":38,"line":5123},[36,37726,33605],{"class":53},[36,37728,115],{"class":114},[36,37730,33327],{"class":49},[36,37732,37684],{"class":53},[36,37734,33327],{"class":49},[36,37736,37737],{"class":53},".c5(x))\n",[36,37739,37740,37742,37744,37746,37748,37750],{"class":38,"line":5131},[36,37741,33605],{"class":53},[36,37743,115],{"class":114},[36,37745,33327],{"class":49},[36,37747,37684],{"class":53},[36,37749,33327],{"class":49},[36,37751,37752],{"class":53},".c6(x))\n",[36,37754,37755,37757,37759,37761,37763,37765],{"class":38,"line":5136},[36,37756,33605],{"class":53},[36,37758,115],{"class":114},[36,37760,33327],{"class":49},[36,37762,37684],{"class":53},[36,37764,33327],{"class":49},[36,37766,37767],{"class":53},".c7(x))\n",[36,37769,37770,37772,37774,37776],{"class":38,"line":5142},[36,37771,33605],{"class":53},[36,37773,115],{"class":114},[36,37775,33327],{"class":49},[36,37777,37778],{"class":53},".s8(x)\n",[36,37780,37781],{"class":38,"line":5148},[36,37782,546],{"emptyLinePlaceholder":545},[36,37784,37785],{"class":38,"line":5153},[36,37786,37787],{"class":42},"        # 展平加线性全连接层\n",[36,37789,37790,37792,37794,37796],{"class":38,"line":10475},[36,37791,33605],{"class":53},[36,37793,115],{"class":114},[36,37795,33327],{"class":49},[36,37797,33665],{"class":53},[36,37799,37800,37802,37804,37806,37808,37810],{"class":38,"line":10499},[36,37801,33605],{"class":53},[36,37803,115],{"class":114},[36,37805,33327],{"class":49},[36,37807,37684],{"class":53},[36,37809,33327],{"class":49},[36,37811,37812],{"class":53},".f1(x))\n",[36,37814,37815],{"class":38,"line":10504},[36,37816,37817],{"class":42},"        # 还需要dropout对神经元随机进行失活\n",[36,37819,37820,37822,37824,37827,37830],{"class":38,"line":10510},[36,37821,33605],{"class":53},[36,37823,115],{"class":114},[36,37825,37826],{"class":53},"F.dropout(x,",[36,37828,37829],{"class":49},"0.5",[36,37831,61],{"class":53},[36,37833,37834,37836,37838,37840,37842,37844],{"class":38,"line":10537},[36,37835,33605],{"class":53},[36,37837,115],{"class":114},[36,37839,33327],{"class":49},[36,37841,37684],{"class":53},[36,37843,33327],{"class":49},[36,37845,37846],{"class":53},".f2(x))\n",[36,37848,37849,37851,37853,37855,37857],{"class":38,"line":10542},[36,37850,33605],{"class":53},[36,37852,115],{"class":114},[36,37854,37826],{"class":53},[36,37856,37829],{"class":49},[36,37858,61],{"class":53},[36,37860,37861],{"class":38,"line":10548},[36,37862,37863],{"class":42},"        # 直接输出\n",[36,37865,37866,37868,37870,37872],{"class":38,"line":10560},[36,37867,33605],{"class":53},[36,37869,115],{"class":114},[36,37871,33327],{"class":49},[36,37873,37874],{"class":53},".f3(x)\n",[36,37876,37877],{"class":38,"line":10572},[36,37878,37879],{"class":42},"        # 前向传播输出\n",[36,37881,37882,37884],{"class":38,"line":10584},[36,37883,17273],{"class":114},[36,37885,33713],{"class":53},[36,37887,37888],{"class":38,"line":12241},[36,37889,37890],{"class":42},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,37892,37893,37895,37897,37899,37901],{"class":38,"line":12266},[36,37894,4069],{"class":114},[36,37896,33724],{"class":49},[36,37898,1377],{"class":114},[36,37900,33729],{"class":57},[36,37902,6270],{"class":53},[36,37904,37905,37907,37909,37911,37913,37915,37917,37919,37921],{"class":38,"line":12289},[36,37906,33741],{"class":53},[36,37908,115],{"class":114},[36,37910,32957],{"class":53},[36,37912,33748],{"class":57},[36,37914,4242],{"class":114},[36,37916,33753],{"class":53},[36,37918,4239],{"class":114},[36,37920,32981],{"class":57},[36,37922,61],{"class":53},[36,37924,37925],{"class":38,"line":12313},[36,37926,37927],{"class":42},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,37929,37930,37932,37934],{"class":38,"line":12318},[36,37931,33793],{"class":53},[36,37933,115],{"class":114},[36,37935,37936],{"class":53},"AlexNet().to(device)\n",[36,37938,37939,37941,37943,37945,37947,37950,37952,37954],{"class":38,"line":12323},[36,37940,33803],{"class":49},[36,37942,33806],{"class":53},[36,37944,707],{"class":49},[36,37946,3059],{"class":53},[36,37948,37949],{"class":49},"227",[36,37951,3059],{"class":53},[36,37953,37949],{"class":49},[36,37955,33819],{"class":53},[433,37957,37958],{"start":46},[436,37959,33832],{},[26,37961,37963],{"className":28,"code":37962,"language":30,"meta":31,"style":31},"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",[33,37964,37965,37971,37977,37987,37993,38003,38013,38023,38033,38043,38047,38058,38068,38072,38076,38080,38088,38100,38110,38126,38136,38168,38182,38192,38202,38206,38216,38230,38240,38250,38260,38266,38270,38274,38278,38282,38286,38294,38314,38318,38322,38326,38330,38334,38350,38354,38358,38366,38370,38374,38382,38386,38390,38394,38402,38406,38410,38414,38418,38426,38430,38438,38442,38450,38454,38462,38466,38474,38478,38482,38490,38494,38498,38502,38514,38538,38552,38556,38560,38564,38572,38576,38584,38588,38596,38600,38608,38612,38620,38624,38632,38636,38648,38652,38660,38664,38672,38676,38680,38684,38688,38696,38700,38716,38720,38728,38732,38736,38740,38744,38748,38752,38756,38772,38776,38788,38792,38804,38808,38820,38824,38832,38836,38844,38848,38852,38857,38863,38867,38876,38880,38897,38901,38910,38914,38932,38945,38950,38963,38967,38971,38979,38983,38987,38995,38999,39007,39011,39019,39023,39027,39069,39111,39115,39119,39135,39139,39155,39159,39163,39171,39175,39179,39191,39229,39234,39239,39248,39252,39266,39276,39282,39288,39294,39300,39304,39308,39314,39318,39322,39330,39334,39352,39356,39360,39364,39380,39384,39388,39392,39396,39400,39420,39440,39444,39448,39452,39460,39468,39472,39488,39508,39528,39532,39536,39544,39552,39556,39560,39564,39576,39580,39590,39598,39615],{"__ignoreMap":31},[36,37966,37967,37969],{"class":38,"line":39},[36,37968,537],{"class":114},[36,37970,34325],{"class":53},[36,37972,37973,37975],{"class":38,"line":46},[36,37974,537],{"class":114},[36,37976,34332],{"class":53},[36,37978,37979,37981,37983,37985],{"class":38,"line":82},[36,37980,537],{"class":114},[36,37982,34343],{"class":53},[36,37984,33887],{"class":114},[36,37986,34348],{"class":53},[36,37988,37989,37991],{"class":38,"line":88},[36,37990,537],{"class":114},[36,37992,32902],{"class":53},[36,37994,37995,37997,37999,38001],{"class":38,"line":195},[36,37996,33241],{"class":114},[36,37998,33919],{"class":53},[36,38000,537],{"class":114},[36,38002,34365],{"class":53},[36,38004,38005,38007,38009,38011],{"class":38,"line":1517},[36,38006,33241],{"class":114},[36,38008,33872],{"class":53},[36,38010,537],{"class":114},[36,38012,33877],{"class":53},[36,38014,38015,38017,38019,38021],{"class":38,"line":2421},[36,38016,33241],{"class":114},[36,38018,33902],{"class":53},[36,38020,537],{"class":114},[36,38022,33907],{"class":53},[36,38024,38025,38027,38029,38031],{"class":38,"line":2446},[36,38026,537],{"class":114},[36,38028,33919],{"class":53},[36,38030,33887],{"class":114},[36,38032,33924],{"class":53},[36,38034,38035,38037,38039,38041],{"class":38,"line":2469},[36,38036,537],{"class":114},[36,38038,33936],{"class":53},[36,38040,33887],{"class":114},[36,38042,33941],{"class":53},[36,38044,38045],{"class":38,"line":2492},[36,38046,34410],{"class":42},[36,38048,38049,38051,38053,38055],{"class":38,"line":4150},[36,38050,33241],{"class":114},[36,38052,34417],{"class":53},[36,38054,537],{"class":114},[36,38056,38057],{"class":53}," AlexNet\n",[36,38059,38060,38062,38064,38066],{"class":38,"line":4155},[36,38061,33241],{"class":114},[36,38063,33244],{"class":53},[36,38065,537],{"class":114},[36,38067,33249],{"class":53},[36,38069,38070],{"class":38,"line":4161},[36,38071,546],{"emptyLinePlaceholder":545},[36,38073,38074],{"class":38,"line":4166},[36,38075,546],{"emptyLinePlaceholder":545},[36,38077,38078],{"class":38,"line":4180},[36,38079,34445],{"class":42},[36,38081,38082,38084,38086],{"class":38,"line":4185},[36,38083,34450],{"class":114},[36,38085,34453],{"class":4500},[36,38087,34456],{"class":53},[36,38089,38090,38092,38094,38096,38098],{"class":38,"line":4191},[36,38091,34461],{"class":53},[36,38093,115],{"class":114},[36,38095,33959],{"class":53},[36,38097,33967],{"class":57},[36,38099,33970],{"class":53},[36,38101,38102,38104,38106,38108],{"class":38,"line":4212},[36,38103,34474],{"class":1997},[36,38105,115],{"class":114},[36,38107,189],{"class":49},[36,38109,33970],{"class":53},[36,38111,38112,38114,38116,38118,38120,38122,38124],{"class":38,"line":4217},[36,38113,34485],{"class":1997},[36,38115,115],{"class":114},[36,38117,33996],{"class":53},[36,38119,33999],{"class":1997},[36,38121,115],{"class":114},[36,38123,37949],{"class":49},[36,38125,34007],{"class":53},[36,38127,38128,38130,38132,38134],{"class":38,"line":4231},[36,38129,34502],{"class":1997},[36,38131,115],{"class":114},[36,38133,189],{"class":49},[36,38135,61],{"class":53},[36,38137,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166],{"class":38,"line":4236},[36,38139,34513],{"class":53},[36,38141,115],{"class":114},[36,38143,34518],{"class":53},[36,38145,34521],{"class":49},[36,38147,54],{"class":53},[36,38149,34526],{"class":49},[36,38151,1050],{"class":114},[36,38153,9885],{"class":49},[36,38155,34533],{"class":53},[36,38157,34521],{"class":49},[36,38159,54],{"class":53},[36,38161,34540],{"class":49},[36,38163,1050],{"class":114},[36,38165,9885],{"class":49},[36,38167,34547],{"class":53},[36,38169,38170,38172,38174,38176,38178,38180],{"class":38,"line":4264},[36,38171,34552],{"class":53},[36,38173,115],{"class":114},[36,38175,34557],{"class":53},[36,38177,34040],{"class":1997},[36,38179,115],{"class":114},[36,38181,34045],{"class":53},[36,38183,38184,38186,38188,38190],{"class":38,"line":4269},[36,38185,34568],{"class":1997},[36,38187,115],{"class":114},[36,38189,34573],{"class":49},[36,38191,33970],{"class":53},[36,38193,38194,38196,38198,38200],{"class":38,"line":4286},[36,38195,34580],{"class":1997},[36,38197,115],{"class":114},[36,38199,189],{"class":49},[36,38201,33970],{"class":53},[36,38203,38204],{"class":38,"line":4291},[36,38205,34591],{"class":42},[36,38207,38208,38210,38212,38214],{"class":38,"line":4296},[36,38209,34596],{"class":1997},[36,38211,115],{"class":114},[36,38213,3076],{"class":49},[36,38215,61],{"class":53},[36,38217,38218,38220,38222,38224,38226,38228],{"class":38,"line":4301},[36,38219,34607],{"class":53},[36,38221,115],{"class":114},[36,38223,34037],{"class":53},[36,38225,34040],{"class":1997},[36,38227,115],{"class":114},[36,38229,34618],{"class":53},[36,38231,38232,38234,38236,38238],{"class":38,"line":4315},[36,38233,34623],{"class":1997},[36,38235,115],{"class":114},[36,38237,34573],{"class":49},[36,38239,33970],{"class":53},[36,38241,38242,38244,38246,38248],{"class":38,"line":4320},[36,38243,34634],{"class":1997},[36,38245,115],{"class":114},[36,38247,189],{"class":49},[36,38249,33970],{"class":53},[36,38251,38252,38254,38256,38258],{"class":38,"line":5109},[36,38253,34645],{"class":1997},[36,38255,115],{"class":114},[36,38257,3076],{"class":49},[36,38259,61],{"class":53},[36,38261,38262,38264],{"class":38,"line":5123},[36,38263,6621],{"class":114},[36,38265,34658],{"class":53},[36,38267,38268],{"class":38,"line":5131},[36,38269,546],{"emptyLinePlaceholder":545},[36,38271,38272],{"class":38,"line":5136},[36,38273,34667],{"class":42},[36,38275,38276],{"class":38,"line":5142},[36,38277,34672],{"class":42},[36,38279,38280],{"class":38,"line":5148},[36,38281,546],{"emptyLinePlaceholder":545},[36,38283,38284],{"class":38,"line":5153},[36,38285,34681],{"class":42},[36,38287,38288,38290,38292],{"class":38,"line":10475},[36,38289,34450],{"class":114},[36,38291,34688],{"class":4500},[36,38293,34691],{"class":53},[36,38295,38296,38298,38300,38302,38304,38306,38308,38310,38312],{"class":38,"line":10499},[36,38297,33741],{"class":53},[36,38299,115],{"class":114},[36,38301,32957],{"class":53},[36,38303,33748],{"class":57},[36,38305,4242],{"class":114},[36,38307,33753],{"class":53},[36,38309,4239],{"class":114},[36,38311,34710],{"class":57},[36,38313,61],{"class":53},[36,38315,38316],{"class":38,"line":10504},[36,38317,546],{"emptyLinePlaceholder":545},[36,38319,38320],{"class":38,"line":10510},[36,38321,546],{"emptyLinePlaceholder":545},[36,38323,38324],{"class":38,"line":10537},[36,38325,34725],{"class":42},[36,38327,38328],{"class":38,"line":10542},[36,38329,34730],{"class":42},[36,38331,38332],{"class":38,"line":10548},[36,38333,34735],{"class":42},[36,38335,38336,38338,38340,38342,38344,38346,38348],{"class":38,"line":10560},[36,38337,34740],{"class":53},[36,38339,115],{"class":114},[36,38341,34745],{"class":53},[36,38343,34748],{"class":1997},[36,38345,115],{"class":114},[36,38347,34753],{"class":49},[36,38349,61],{"class":53},[36,38351,38352],{"class":38,"line":10572},[36,38353,546],{"emptyLinePlaceholder":545},[36,38355,38356],{"class":38,"line":10584},[36,38357,34764],{"class":42},[36,38359,38360,38362,38364],{"class":38,"line":12241},[36,38361,34769],{"class":53},[36,38363,115],{"class":114},[36,38365,34774],{"class":53},[36,38367,38368],{"class":38,"line":12266},[36,38369,546],{"emptyLinePlaceholder":545},[36,38371,38372],{"class":38,"line":12289},[36,38373,34783],{"class":42},[36,38375,38376,38378,38380],{"class":38,"line":12313},[36,38377,33793],{"class":53},[36,38379,115],{"class":114},[36,38381,34792],{"class":53},[36,38383,38384],{"class":38,"line":12318},[36,38385,34797],{"class":42},[36,38387,38388],{"class":38,"line":12323},[36,38389,34802],{"class":42},[36,38391,38392],{"class":38,"line":12328},[36,38393,34807],{"class":42},[36,38395,38396,38398,38400],{"class":38,"line":12337},[36,38397,34812],{"class":53},[36,38399,115],{"class":114},[36,38401,34817],{"class":53},[36,38403,38404],{"class":38,"line":12342},[36,38405,546],{"emptyLinePlaceholder":545},[36,38407,38408],{"class":38,"line":12348},[36,38409,546],{"emptyLinePlaceholder":545},[36,38411,38412],{"class":38,"line":12369},[36,38413,34830],{"class":42},[36,38415,38416],{"class":38,"line":12375},[36,38417,34835],{"class":42},[36,38419,38420,38422,38424],{"class":38,"line":12389},[36,38421,34840],{"class":53},[36,38423,115],{"class":114},[36,38425,34845],{"class":49},[36,38427,38428],{"class":38,"line":12395},[36,38429,34850],{"class":42},[36,38431,38432,38434,38436],{"class":38,"line":12422},[36,38433,34855],{"class":53},[36,38435,115],{"class":114},[36,38437,34860],{"class":53},[36,38439,38440],{"class":38,"line":12431},[36,38441,34865],{"class":42},[36,38443,38444,38446,38448],{"class":38,"line":12437},[36,38445,34870],{"class":53},[36,38447,115],{"class":114},[36,38449,34860],{"class":53},[36,38451,38452],{"class":38,"line":12445},[36,38453,34879],{"class":42},[36,38455,38456,38458,38460],{"class":38,"line":12450},[36,38457,34884],{"class":53},[36,38459,115],{"class":114},[36,38461,34860],{"class":53},[36,38463,38464],{"class":38,"line":19122},[36,38465,34893],{"class":42},[36,38467,38468,38470,38472],{"class":38,"line":19128},[36,38469,34898],{"class":53},[36,38471,115],{"class":114},[36,38473,34860],{"class":53},[36,38475,38476],{"class":38,"line":19151},[36,38477,546],{"emptyLinePlaceholder":545},[36,38479,38480],{"class":38,"line":19157},[36,38481,34911],{"class":42},[36,38483,38484,38486,38488],{"class":38,"line":19180},[36,38485,34916],{"class":53},[36,38487,115],{"class":114},[36,38489,34921],{"class":53},[36,38491,38492],{"class":38,"line":19194},[36,38493,546],{"emptyLinePlaceholder":545},[36,38495,38496],{"class":38,"line":19214},[36,38497,546],{"emptyLinePlaceholder":545},[36,38499,38500],{"class":38,"line":19220},[36,38501,34934],{"class":42},[36,38503,38504,38506,38508,38510,38512],{"class":38,"line":19231},[36,38505,5732],{"class":114},[36,38507,34941],{"class":53},[36,38509,28556],{"class":114},[36,38511,34946],{"class":49},[36,38513,34949],{"class":53},[36,38515,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536],{"class":38,"line":19254},[36,38517,34954],{"class":49},[36,38519,54],{"class":53},[36,38521,34959],{"class":57},[36,38523,1944],{"class":49},[36,38525,1065],{"class":57},[36,38527,1944],{"class":49},[36,38529,1822],{"class":57},[36,38531,34970],{"class":53},[36,38533,508],{"class":114},[36,38535,707],{"class":49},[36,38537,625],{"class":53},[36,38539,38540,38542,38544,38546,38548,38550],{"class":38,"line":19276},[36,38541,34954],{"class":49},[36,38543,54],{"class":53},[36,38545,34985],{"class":57},[36,38547,1050],{"class":114},[36,38549,1317],{"class":49},[36,38551,61],{"class":53},[36,38553,38554],{"class":38,"line":19281},[36,38555,546],{"emptyLinePlaceholder":545},[36,38557,38558],{"class":38,"line":19287},[36,38559,35000],{"class":42},[36,38561,38562],{"class":38,"line":19301},[36,38563,35005],{"class":42},[36,38565,38566,38568,38570],{"class":38,"line":19314},[36,38567,35010],{"class":53},[36,38569,115],{"class":114},[36,38571,34845],{"class":49},[36,38573,38574],{"class":38,"line":19319},[36,38575,35019],{"class":42},[36,38577,38578,38580,38582],{"class":38,"line":19333},[36,38579,35024],{"class":53},[36,38581,115],{"class":114},[36,38583,5616],{"class":49},[36,38585,38586],{"class":38,"line":19338},[36,38587,35033],{"class":42},[36,38589,38590,38592,38594],{"class":38,"line":19344},[36,38591,35038],{"class":53},[36,38593,115],{"class":114},[36,38595,34845],{"class":49},[36,38597,38598],{"class":38,"line":19349},[36,38599,35047],{"class":42},[36,38601,38602,38604,38606],{"class":38,"line":19363},[36,38603,35052],{"class":53},[36,38605,115],{"class":114},[36,38607,5616],{"class":49},[36,38609,38610],{"class":38,"line":19368},[36,38611,35061],{"class":42},[36,38613,38614,38616,38618],{"class":38,"line":19373},[36,38615,35066],{"class":53},[36,38617,115],{"class":114},[36,38619,5616],{"class":49},[36,38621,38622],{"class":38,"line":19387},[36,38623,35075],{"class":42},[36,38625,38626,38628,38630],{"class":38,"line":19399},[36,38627,35080],{"class":53},[36,38629,115],{"class":114},[36,38631,5616],{"class":49},[36,38633,38634],{"class":38,"line":19404},[36,38635,35089],{"class":42},[36,38637,38638,38640,38642,38644,38646],{"class":38,"line":19417},[36,38639,5934],{"class":114},[36,38641,34104],{"class":53},[36,38643,28556],{"class":114},[36,38645,34109],{"class":49},[36,38647,35102],{"class":53},[36,38649,38650],{"class":38,"line":19422},[36,38651,35107],{"class":42},[36,38653,38654,38656,38658],{"class":38,"line":19427},[36,38655,35112],{"class":53},[36,38657,115],{"class":114},[36,38659,35117],{"class":53},[36,38661,38662],{"class":38,"line":19432},[36,38663,35122],{"class":42},[36,38665,38666,38668,38670],{"class":38,"line":19445},[36,38667,35127],{"class":53},[36,38669,115],{"class":114},[36,38671,35132],{"class":53},[36,38673,38674],{"class":38,"line":19450},[36,38675,35138],{"class":42},[36,38677,38678],{"class":38,"line":35135},[36,38679,35144],{"class":53},[36,38681,38682],{"class":38,"line":35141},[36,38683,35150],{"class":42},[36,38685,38686],{"class":38,"line":35147},[36,38687,35156],{"class":42},[36,38689,38690,38692,38694],{"class":38,"line":35153},[36,38691,35162],{"class":53},[36,38693,115],{"class":114},[36,38695,35167],{"class":53},[36,38697,38698],{"class":38,"line":35159},[36,38699,35173],{"class":42},[36,38701,38702,38704,38706,38708,38710,38712,38714],{"class":38,"line":35170},[36,38703,35179],{"class":53},[36,38705,115],{"class":114},[36,38707,35184],{"class":53},[36,38709,35187],{"class":1997},[36,38711,115],{"class":114},[36,38713,707],{"class":49},[36,38715,61],{"class":53},[36,38717,38718],{"class":38,"line":35176},[36,38719,35199],{"class":42},[36,38721,38722,38724,38726],{"class":38,"line":35196},[36,38723,35205],{"class":53},[36,38725,115],{"class":114},[36,38727,35210],{"class":53},[36,38729,38730],{"class":38,"line":35202},[36,38731,35216],{"class":42},[36,38733,38734],{"class":38,"line":35213},[36,38735,35222],{"class":53},[36,38737,38738],{"class":38,"line":35219},[36,38739,35228],{"class":42},[36,38741,38742],{"class":38,"line":35225},[36,38743,35234],{"class":53},[36,38745,38746],{"class":38,"line":35231},[36,38747,35240],{"class":42},[36,38749,38750],{"class":38,"line":35237},[36,38751,35246],{"class":53},[36,38753,38754],{"class":38,"line":35243},[36,38755,35252],{"class":42},[36,38757,38758,38760,38762,38764,38766,38768,38770],{"class":38,"line":35249},[36,38759,35258],{"class":53},[36,38761,1224],{"class":114},[36,38763,35263],{"class":53},[36,38765,1050],{"class":114},[36,38767,35268],{"class":53},[36,38769,713],{"class":49},[36,38771,61],{"class":53},[36,38773,38774],{"class":38,"line":35255},[36,38775,35278],{"class":42},[36,38777,38778,38780,38782,38784,38786],{"class":38,"line":35275},[36,38779,35284],{"class":53},[36,38781,1224],{"class":114},[36,38783,35289],{"class":53},[36,38785,1377],{"class":114},[36,38787,35294],{"class":53},[36,38789,38790],{"class":38,"line":35281},[36,38791,35300],{"class":42},[36,38793,38794,38796,38798,38800,38802],{"class":38,"line":35297},[36,38795,35306],{"class":53},[36,38797,1224],{"class":114},[36,38799,35268],{"class":53},[36,38801,713],{"class":49},[36,38803,61],{"class":53},[36,38805,38806],{"class":38,"line":35303},[36,38807,35320],{"class":42},[36,38809,38810,38812,38814,38816,38818],{"class":38,"line":35317},[36,38811,5934],{"class":114},[36,38813,35328],{"class":53},[36,38815,28556],{"class":114},[36,38817,34109],{"class":49},[36,38819,35335],{"class":53},[36,38821,38822],{"class":38,"line":35323},[36,38823,35341],{"class":42},[36,38825,38826,38828,38830],{"class":38,"line":35338},[36,38827,35112],{"class":53},[36,38829,115],{"class":114},[36,38831,35117],{"class":53},[36,38833,38834],{"class":38,"line":35344},[36,38835,35356],{"class":42},[36,38837,38838,38840,38842],{"class":38,"line":35353},[36,38839,35127],{"class":53},[36,38841,115],{"class":114},[36,38843,35132],{"class":53},[36,38845,38846],{"class":38,"line":35359},[36,38847,35371],{"class":42},[36,38849,38850],{"class":38,"line":35368},[36,38851,35377],{"class":53},[36,38853,38854],{"class":38,"line":35374},[36,38855,38856],{"class":42},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,38858,38859,38861],{"class":38,"line":35380},[36,38860,35383],{"class":114},[36,38862,35386],{"class":53},[36,38864,38865],{"class":38,"line":35389},[36,38866,35392],{"class":42},[36,38868,38869,38872,38874],{"class":38,"line":35395},[36,38870,38871],{"class":53},"                output",[36,38873,115],{"class":114},[36,38875,35167],{"class":53},[36,38877,38878],{"class":38,"line":35406},[36,38879,35409],{"class":42},[36,38881,38882,38885,38887,38889,38891,38893,38895],{"class":38,"line":35412},[36,38883,38884],{"class":53},"                pre_lab",[36,38886,115],{"class":114},[36,38888,35184],{"class":53},[36,38890,35187],{"class":1997},[36,38892,115],{"class":114},[36,38894,707],{"class":49},[36,38896,61],{"class":53},[36,38898,38899],{"class":38,"line":35431},[36,38900,35434],{"class":42},[36,38902,38903,38906,38908],{"class":38,"line":35437},[36,38904,38905],{"class":53},"                val_batch_loss",[36,38907,115],{"class":114},[36,38909,35210],{"class":53},[36,38911,38912],{"class":38,"line":35448},[36,38913,35451],{"class":42},[36,38915,38916,38919,38921,38924,38926,38928,38930],{"class":38,"line":35454},[36,38917,38918],{"class":53},"                val_loss",[36,38920,1224],{"class":114},[36,38922,38923],{"class":53},"val_batch_loss.item()",[36,38925,1050],{"class":114},[36,38927,35268],{"class":53},[36,38929,713],{"class":49},[36,38931,61],{"class":53},[36,38933,38934,38937,38939,38941,38943],{"class":38,"line":35474},[36,38935,38936],{"class":53},"                val_corrects",[36,38938,1224],{"class":114},[36,38940,35289],{"class":53},[36,38942,1377],{"class":114},[36,38944,35294],{"class":53},[36,38946,38947],{"class":38,"line":35490},[36,38948,38949],{"class":42},"            # 当前用于验证的样本数量\n",[36,38951,38952,38955,38957,38959,38961],{"class":38,"line":35496},[36,38953,38954],{"class":53},"            val_num",[36,38956,1224],{"class":114},[36,38958,35268],{"class":53},[36,38960,713],{"class":49},[36,38962,61],{"class":53},[36,38964,38965],{"class":38,"line":35510},[36,38966,35513],{"class":42},[36,38968,38969],{"class":38,"line":35516},[36,38970,35519],{"class":42},[36,38972,38973,38975,38977],{"class":38,"line":35522},[36,38974,35525],{"class":53},[36,38976,1065],{"class":114},[36,38978,35530],{"class":53},[36,38980,38981],{"class":38,"line":35533},[36,38982,35536],{"class":42},[36,38984,38985],{"class":38,"line":35539},[36,38986,35542],{"class":42},[36,38988,38989,38991,38993],{"class":38,"line":35545},[36,38990,35548],{"class":53},[36,38992,1065],{"class":114},[36,38994,35530],{"class":53},[36,38996,38997],{"class":38,"line":35555},[36,38998,35558],{"class":42},[36,39000,39001,39003,39005],{"class":38,"line":35561},[36,39002,35564],{"class":53},[36,39004,1065],{"class":114},[36,39006,35569],{"class":53},[36,39008,39009],{"class":38,"line":35572},[36,39010,35575],{"class":42},[36,39012,39013,39015,39017],{"class":38,"line":35578},[36,39014,35581],{"class":53},[36,39016,1065],{"class":114},[36,39018,35569],{"class":53},[36,39020,39021],{"class":38,"line":35588},[36,39022,546],{"emptyLinePlaceholder":545},[36,39024,39025],{"class":38,"line":35593},[36,39026,35596],{"class":42},[36,39028,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067],{"class":38,"line":35599},[36,39030,34954],{"class":49},[36,39032,54],{"class":53},[36,39034,6123],{"class":57},[36,39036,1944],{"class":49},[36,39038,35610],{"class":57},[36,39040,2065],{"class":49},[36,39042,35615],{"class":114},[36,39044,2070],{"class":49},[36,39046,35620],{"class":57},[36,39048,2065],{"class":49},[36,39050,35615],{"class":114},[36,39052,2070],{"class":49},[36,39054,6123],{"class":57},[36,39056,35631],{"class":53},[36,39058,508],{"class":114},[36,39060,707],{"class":49},[36,39062,35638],{"class":53},[36,39064,508],{"class":114},[36,39066,707],{"class":49},[36,39068,35645],{"class":53},[36,39070,39071,39073,39075,39077,39079,39081,39083,39085,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109],{"class":38,"line":35648},[36,39072,34954],{"class":49},[36,39074,54],{"class":53},[36,39076,6123],{"class":57},[36,39078,1944],{"class":49},[36,39080,35659],{"class":57},[36,39082,2065],{"class":49},[36,39084,35615],{"class":114},[36,39086,2070],{"class":49},[36,39088,35668],{"class":57},[36,39090,2065],{"class":49},[36,39092,35615],{"class":114},[36,39094,2070],{"class":49},[36,39096,6123],{"class":57},[36,39098,35679],{"class":53},[36,39100,508],{"class":114},[36,39102,707],{"class":49},[36,39104,35686],{"class":53},[36,39106,508],{"class":114},[36,39108,707],{"class":49},[36,39110,35645],{"class":53},[36,39112,39113],{"class":38,"line":35695},[36,39114,546],{"emptyLinePlaceholder":545},[36,39116,39117],{"class":38,"line":35700},[36,39118,35703],{"class":42},[36,39120,39121,39123,39125,39127,39129,39131,39133],{"class":38,"line":35706},[36,39122,5029],{"class":114},[36,39124,35711],{"class":53},[36,39126,508],{"class":114},[36,39128,707],{"class":49},[36,39130,3614],{"class":53},[36,39132,3633],{"class":114},[36,39134,35722],{"class":53},[36,39136,39137],{"class":38,"line":35725},[36,39138,35728],{"class":42},[36,39140,39141,39143,39145,39147,39149,39151,39153],{"class":38,"line":35731},[36,39142,35734],{"class":53},[36,39144,244],{"class":49},[36,39146,115],{"class":114},[36,39148,35741],{"class":53},[36,39150,508],{"class":114},[36,39152,707],{"class":49},[36,39154,35748],{"class":53},[36,39156,39157],{"class":38,"line":35751},[36,39158,35754],{"class":42},[36,39160,39161],{"class":38,"line":35757},[36,39162,35760],{"class":42},[36,39164,39165,39167,39169],{"class":38,"line":35763},[36,39166,35766],{"class":53},[36,39168,115],{"class":114},[36,39170,34817],{"class":53},[36,39172,39173],{"class":38,"line":35773},[36,39174,546],{"emptyLinePlaceholder":545},[36,39176,39177],{"class":38,"line":35778},[36,39178,35781],{"class":42},[36,39180,39181,39183,39185,39187,39189],{"class":38,"line":35784},[36,39182,35787],{"class":53},[36,39184,115],{"class":114},[36,39186,35792],{"class":53},[36,39188,508],{"class":114},[36,39190,35797],{"class":53},[36,39192,39193,39195,39197,39199,39201,39203,39205,39207,39209,39211,39213,39215,39217,39219,39221,39223,39225,39227],{"class":38,"line":35800},[36,39194,34954],{"class":49},[36,39196,54],{"class":53},[36,39198,35807],{"class":57},[36,39200,2065],{"class":49},[36,39202,35812],{"class":114},[36,39204,2070],{"class":49},[36,39206,3221],{"class":57},[36,39208,2065],{"class":49},[36,39210,35812],{"class":114},[36,39212,2070],{"class":49},[36,39214,35825],{"class":57},[36,39216,35828],{"class":53},[36,39218,1080],{"class":114},[36,39220,3582],{"class":49},[36,39222,35835],{"class":53},[36,39224,1095],{"class":114},[36,39226,3582],{"class":49},[36,39228,625],{"class":53},[36,39230,39231],{"class":38,"line":35844},[36,39232,39233],{"class":42},"    # 选择最优参数并保存\n",[36,39235,39236],{"class":38,"line":35850},[36,39237,39238],{"class":42},"    # 保存最佳模型权重字典\n",[36,39240,39241,39244,39246],{"class":38,"line":35856},[36,39242,39243],{"class":53},"    torch.save(best_model_wts,",[36,39245,35868],{"class":57},[36,39247,61],{"class":53},[36,39249,39250],{"class":38,"line":35862},[36,39251,35888],{"class":42},[36,39253,39254,39256,39258,39260,39262,39264],{"class":38,"line":35873},[36,39255,35894],{"class":53},[36,39257,115],{"class":114},[36,39259,35899],{"class":53},[36,39261,35902],{"class":1997},[36,39263,115],{"class":114},[36,39265,4084],{"class":53},[36,39267,39268,39270,39272,39274],{"class":38,"line":35879},[36,39269,35912],{"class":57},[36,39271,3535],{"class":53},[36,39273,35917],{"class":49},[36,39275,35920],{"class":53},[36,39277,39278,39280],{"class":38,"line":35885},[36,39279,35926],{"class":57},[36,39281,35929],{"class":53},[36,39283,39284,39286],{"class":38,"line":35891},[36,39285,35935],{"class":57},[36,39287,35938],{"class":53},[36,39289,39290,39292],{"class":38,"line":35909},[36,39291,35944],{"class":57},[36,39293,35947],{"class":53},[36,39295,39296,39298],{"class":38,"line":35923},[36,39297,35953],{"class":57},[36,39299,35956],{"class":53},[36,39301,39302],{"class":38,"line":35932},[36,39303,35962],{"class":53},[36,39305,39306],{"class":38,"line":35941},[36,39307,35968],{"class":42},[36,39309,39310,39312],{"class":38,"line":35950},[36,39311,6621],{"class":114},[36,39313,35976],{"class":53},[36,39315,39316],{"class":38,"line":35959},[36,39317,546],{"emptyLinePlaceholder":545},[36,39319,39320],{"class":38,"line":35965},[36,39321,35987],{"class":42},[36,39323,39324,39326,39328],{"class":38,"line":35971},[36,39325,34450],{"class":114},[36,39327,35995],{"class":4500},[36,39329,35998],{"class":53},[36,39331,39332],{"class":38,"line":35979},[36,39333,36004],{"class":42},[36,39335,39336,39338,39340,39342,39344,39346,39348,39350],{"class":38,"line":35984},[36,39337,36010],{"class":53},[36,39339,34196],{"class":1997},[36,39341,115],{"class":114},[36,39343,54],{"class":53},[36,39345,3176],{"class":49},[36,39347,3059],{"class":53},[36,39349,2977],{"class":49},[36,39351,625],{"class":53},[36,39353,39354],{"class":38,"line":35990},[36,39355,36030],{"class":42},[36,39357,39358],{"class":38,"line":36001},[36,39359,36036],{"class":42},[36,39361,39362],{"class":38,"line":36007},[36,39363,36042],{"class":42},[36,39365,39366,39368,39370,39372,39374,39376,39378],{"class":38,"line":36027},[36,39367,34230],{"class":53},[36,39369,707],{"class":49},[36,39371,3059],{"class":53},[36,39373,1188],{"class":49},[36,39375,3059],{"class":53},[36,39377,707],{"class":49},[36,39379,61],{"class":53},[36,39381,39382],{"class":38,"line":36033},[36,39383,36065],{"class":42},[36,39385,39386],{"class":38,"line":36039},[36,39387,36071],{"class":42},[36,39389,39390],{"class":38,"line":36045},[36,39391,36077],{"class":42},[36,39393,39394],{"class":38,"line":36062},[36,39395,36083],{"class":42},[36,39397,39398],{"class":38,"line":36068},[36,39399,36089],{"class":42},[36,39401,39402,39404,39406,39408,39410,39412,39414,39416,39418],{"class":38,"line":36074},[36,39403,36095],{"class":53},[36,39405,36098],{"class":57},[36,39407,36101],{"class":53},[36,39409,36104],{"class":57},[36,39411,3059],{"class":53},[36,39413,36109],{"class":1997},[36,39415,115],{"class":114},[36,39417,36114],{"class":57},[36,39419,61],{"class":53},[36,39421,39422,39424,39426,39428,39430,39432,39434,39436,39438],{"class":38,"line":36080},[36,39423,36095],{"class":53},[36,39425,36098],{"class":57},[36,39427,36126],{"class":53},[36,39429,36129],{"class":57},[36,39431,3059],{"class":53},[36,39433,36109],{"class":1997},[36,39435,115],{"class":114},[36,39437,36138],{"class":57},[36,39439,61],{"class":53},[36,39441,39442],{"class":38,"line":36086},[36,39443,36146],{"class":42},[36,39445,39446],{"class":38,"line":36092},[36,39447,36152],{"class":53},[36,39449,39450],{"class":38,"line":36119},[36,39451,36158],{"class":42},[36,39453,39454,39456,39458],{"class":38,"line":36143},[36,39455,36164],{"class":53},[36,39457,36167],{"class":57},[36,39459,61],{"class":53},[36,39461,39462,39464,39466],{"class":38,"line":36149},[36,39463,36175],{"class":53},[36,39465,36178],{"class":57},[36,39467,61],{"class":53},[36,39469,39470],{"class":38,"line":36155},[36,39471,36186],{"class":42},[36,39473,39474,39476,39478,39480,39482,39484,39486],{"class":38,"line":36161},[36,39475,34230],{"class":53},[36,39477,707],{"class":49},[36,39479,3059],{"class":53},[36,39481,1188],{"class":49},[36,39483,3059],{"class":53},[36,39485,1188],{"class":49},[36,39487,61],{"class":53},[36,39489,39490,39492,39494,39496,39498,39500,39502,39504,39506],{"class":38,"line":36172},[36,39491,36095],{"class":53},[36,39493,36098],{"class":57},[36,39495,36213],{"class":53},[36,39497,36104],{"class":57},[36,39499,3059],{"class":53},[36,39501,36109],{"class":1997},[36,39503,115],{"class":114},[36,39505,36224],{"class":57},[36,39507,61],{"class":53},[36,39509,39510,39512,39514,39516,39518,39520,39522,39524,39526],{"class":38,"line":36183},[36,39511,36095],{"class":53},[36,39513,36098],{"class":57},[36,39515,36236],{"class":53},[36,39517,36129],{"class":57},[36,39519,3059],{"class":53},[36,39521,36109],{"class":1997},[36,39523,115],{"class":114},[36,39525,36247],{"class":57},[36,39527,61],{"class":53},[36,39529,39530],{"class":38,"line":36189},[36,39531,36255],{"class":42},[36,39533,39534],{"class":38,"line":36206},[36,39535,36152],{"class":53},[36,39537,39538,39540,39542],{"class":38,"line":36229},[36,39539,36164],{"class":53},[36,39541,36098],{"class":57},[36,39543,61],{"class":53},[36,39545,39546,39548,39550],{"class":38,"line":36252},[36,39547,36175],{"class":53},[36,39549,36277],{"class":57},[36,39551,61],{"class":53},[36,39553,39554],{"class":38,"line":36258},[36,39555,36285],{"class":53},[36,39557,39558],{"class":38,"line":36263},[36,39559,546],{"emptyLinePlaceholder":545},[36,39561,39562],{"class":38,"line":36272},[36,39563,36296],{"class":42},[36,39565,39566,39568,39570,39572,39574],{"class":38,"line":36282},[36,39567,4069],{"class":114},[36,39569,33724],{"class":49},[36,39571,1377],{"class":114},[36,39573,33729],{"class":57},[36,39575,6270],{"class":53},[36,39577,39578],{"class":38,"line":36288},[36,39579,36315],{"class":42},[36,39581,39582,39585,39587],{"class":38,"line":36293},[36,39583,39584],{"class":53},"    AlexNet",[36,39586,115],{"class":114},[36,39588,39589],{"class":53},"AlexNet()\n",[36,39591,39592,39594,39596],{"class":38,"line":36299},[36,39593,36332],{"class":53},[36,39595,115],{"class":114},[36,39597,36337],{"class":53},[36,39599,39600,39602,39604,39607,39609,39611,39613],{"class":38,"line":36312},[36,39601,35894],{"class":53},[36,39603,115],{"class":114},[36,39605,39606],{"class":53},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,39608,36350],{"class":1997},[36,39610,115],{"class":114},[36,39612,3376],{"class":49},[36,39614,61],{"class":53},[36,39616,39617],{"class":38,"line":36318},[36,39618,36362],{"class":53},[433,39620,39621],{"start":82},[436,39622,36375],{},[26,39624,39626],{"className":28,"code":39625,"language":30,"meta":31,"style":31},"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",[33,39627,39628,39634,39644,39654,39664,39668,39678,39688,39699,39703,39707,39711,39719,39735,39745,39761,39771,39785,39789,39799,39809,39819,39825,39829,39833,39841,39845,39861,39869,39873,39877,39885,39893,39897,39901,39905,39909,39915,39919,39929,39937,39945,39949,39953,39957,39965,39969,39985,39989,39993,39997,40009,40013,40025,40029,40033,40045,40049,40059,40063,40067,40079,40083,40091,40095,40099,40107,40111,40119,40123,40127,40131,40135,40139,40155,40163,40167,40171,40219,40225,40229,40239,40247,40255,40259,40263,40267,40271,40279,40283,40299,40303,40311,40319],{"__ignoreMap":31},[36,39629,39630,39632],{"class":38,"line":39},[36,39631,537],{"class":114},[36,39633,32902],{"class":53},[36,39635,39636,39638,39640,39642],{"class":38,"line":46},[36,39637,537],{"class":114},[36,39639,33919],{"class":53},[36,39641,33887],{"class":114},[36,39643,33924],{"class":53},[36,39645,39646,39648,39650,39652],{"class":38,"line":82},[36,39647,33241],{"class":114},[36,39649,36403],{"class":53},[36,39651,537],{"class":114},[36,39653,36408],{"class":53},[36,39655,39656,39658,39660,39662],{"class":38,"line":88},[36,39657,33241],{"class":114},[36,39659,33902],{"class":53},[36,39661,537],{"class":114},[36,39663,33907],{"class":53},[36,39665,39666],{"class":38,"line":195},[36,39667,36423],{"class":42},[36,39669,39670,39672,39674,39676],{"class":38,"line":1517},[36,39671,33241],{"class":114},[36,39673,33872],{"class":53},[36,39675,537],{"class":114},[36,39677,33877],{"class":53},[36,39679,39680,39682,39684,39686],{"class":38,"line":2421},[36,39681,33241],{"class":114},[36,39683,34417],{"class":53},[36,39685,537],{"class":114},[36,39687,38057],{"class":53},[36,39689,39690,39692,39695,39697],{"class":38,"line":2446},[36,39691,33241],{"class":114},[36,39693,39694],{"class":53}," 练习.AlexNet.model ",[36,39696,537],{"class":114},[36,39698,38057],{"class":53},[36,39700,39701],{"class":38,"line":2469},[36,39702,546],{"emptyLinePlaceholder":545},[36,39704,39705],{"class":38,"line":2492},[36,39706,546],{"emptyLinePlaceholder":545},[36,39708,39709],{"class":38,"line":4150},[36,39710,36452],{"class":42},[36,39712,39713,39715,39717],{"class":38,"line":4155},[36,39714,34450],{"class":114},[36,39716,36459],{"class":4500},[36,39718,34456],{"class":53},[36,39720,39721,39723,39725,39727,39729,39731,39733],{"class":38,"line":4161},[36,39722,36466],{"class":53},[36,39724,115],{"class":114},[36,39726,33959],{"class":53},[36,39728,33962],{"class":1997},[36,39730,115],{"class":114},[36,39732,33967],{"class":57},[36,39734,33970],{"class":53},[36,39736,39737,39739,39741,39743],{"class":38,"line":4166},[36,39738,36483],{"class":1997},[36,39740,115],{"class":114},[36,39742,276],{"class":49},[36,39744,33970],{"class":53},[36,39746,39747,39749,39751,39753,39755,39757,39759],{"class":38,"line":4180},[36,39748,36494],{"class":1997},[36,39750,115],{"class":114},[36,39752,33996],{"class":53},[36,39754,33999],{"class":1997},[36,39756,115],{"class":114},[36,39758,37949],{"class":49},[36,39760,34007],{"class":53},[36,39762,39763,39765,39767,39769],{"class":38,"line":4185},[36,39764,36511],{"class":1997},[36,39766,115],{"class":114},[36,39768,189],{"class":49},[36,39770,61],{"class":53},[36,39772,39773,39775,39777,39779,39781,39783],{"class":38,"line":4191},[36,39774,36522],{"class":53},[36,39776,115],{"class":114},[36,39778,34037],{"class":53},[36,39780,34040],{"class":1997},[36,39782,115],{"class":114},[36,39784,36533],{"class":53},[36,39786,39787],{"class":38,"line":4212},[36,39788,36538],{"class":42},[36,39790,39791,39793,39795,39797],{"class":38,"line":4217},[36,39792,36543],{"class":1997},[36,39794,115],{"class":114},[36,39796,707],{"class":49},[36,39798,33970],{"class":53},[36,39800,39801,39803,39805,39807],{"class":38,"line":4231},[36,39802,36554],{"class":1997},[36,39804,115],{"class":114},[36,39806,189],{"class":49},[36,39808,33970],{"class":53},[36,39810,39811,39813,39815,39817],{"class":38,"line":4236},[36,39812,36565],{"class":1997},[36,39814,115],{"class":114},[36,39816,713],{"class":49},[36,39818,61],{"class":53},[36,39820,39821,39823],{"class":38,"line":4264},[36,39822,6621],{"class":114},[36,39824,36578],{"class":53},[36,39826,39827],{"class":38,"line":4269},[36,39828,546],{"emptyLinePlaceholder":545},[36,39830,39831],{"class":38,"line":4286},[36,39832,36587],{"class":42},[36,39834,39835,39837,39839],{"class":38,"line":4291},[36,39836,34450],{"class":114},[36,39838,36594],{"class":4500},[36,39840,36597],{"class":53},[36,39842,39843],{"class":38,"line":4296},[36,39844,36602],{"class":42},[36,39846,39847,39849,39851,39853,39855,39857,39859],{"class":38,"line":4301},[36,39848,33741],{"class":53},[36,39850,115],{"class":114},[36,39852,33748],{"class":57},[36,39854,4242],{"class":114},[36,39856,33753],{"class":53},[36,39858,4239],{"class":114},[36,39860,36619],{"class":57},[36,39862,39863,39865,39867],{"class":38,"line":4315},[36,39864,33793],{"class":53},[36,39866,115],{"class":114},[36,39868,34792],{"class":53},[36,39870,39871],{"class":38,"line":4320},[36,39872,546],{"emptyLinePlaceholder":545},[36,39874,39875],{"class":38,"line":5109},[36,39876,36636],{"class":42},[36,39878,39879,39881,39883],{"class":38,"line":5123},[36,39880,36641],{"class":53},[36,39882,115],{"class":114},[36,39884,34845],{"class":49},[36,39886,39887,39889,39891],{"class":38,"line":5131},[36,39888,36650],{"class":53},[36,39890,115],{"class":114},[36,39892,5616],{"class":49},[36,39894,39895],{"class":38,"line":5136},[36,39896,546],{"emptyLinePlaceholder":545},[36,39898,39899],{"class":38,"line":5142},[36,39900,36663],{"class":42},[36,39902,39903],{"class":38,"line":5148},[36,39904,36668],{"class":42},[36,39906,39907],{"class":38,"line":5153},[36,39908,36673],{"class":42},[36,39910,39911,39913],{"class":38,"line":10475},[36,39912,36678],{"class":114},[36,39914,35386],{"class":53},[36,39916,39917],{"class":38,"line":10499},[36,39918,36685],{"class":42},[36,39920,39921,39923,39925,39927],{"class":38,"line":10504},[36,39922,5934],{"class":114},[36,39924,36692],{"class":53},[36,39926,28556],{"class":114},[36,39928,36697],{"class":53},[36,39930,39931,39933,39935],{"class":38,"line":10510},[36,39932,36702],{"class":53},[36,39934,115],{"class":114},[36,39936,36707],{"class":53},[36,39938,39939,39941,39943],{"class":38,"line":10537},[36,39940,36712],{"class":53},[36,39942,115],{"class":114},[36,39944,36717],{"class":53},[36,39946,39947],{"class":38,"line":10542},[36,39948,36722],{"class":42},[36,39950,39951],{"class":38,"line":10548},[36,39952,35377],{"class":53},[36,39954,39955],{"class":38,"line":10560},[36,39956,36731],{"class":42},[36,39958,39959,39961,39963],{"class":38,"line":10572},[36,39960,35162],{"class":53},[36,39962,115],{"class":114},[36,39964,36740],{"class":53},[36,39966,39967],{"class":38,"line":10584},[36,39968,36745],{"class":42},[36,39970,39971,39973,39975,39977,39979,39981,39983],{"class":38,"line":12241},[36,39972,35179],{"class":53},[36,39974,115],{"class":114},[36,39976,35184],{"class":53},[36,39978,35187],{"class":1997},[36,39980,115],{"class":114},[36,39982,707],{"class":49},[36,39984,61],{"class":53},[36,39986,39987],{"class":38,"line":12266},[36,39988,36766],{"class":42},[36,39990,39991],{"class":38,"line":12289},[36,39992,36771],{"class":42},[36,39994,39995],{"class":38,"line":12313},[36,39996,36776],{"class":42},[36,39998,39999,40001,40003,40005,40007],{"class":38,"line":12318},[36,40000,36781],{"class":53},[36,40002,1224],{"class":114},[36,40004,35289],{"class":53},[36,40006,1377],{"class":114},[36,40008,36790],{"class":53},[36,40010,40011],{"class":38,"line":12323},[36,40012,36795],{"class":42},[36,40014,40015,40017,40019,40021,40023],{"class":38,"line":12328},[36,40016,36800],{"class":53},[36,40018,1224],{"class":114},[36,40020,36805],{"class":53},[36,40022,713],{"class":49},[36,40024,61],{"class":53},[36,40026,40027],{"class":38,"line":12337},[36,40028,546],{"emptyLinePlaceholder":545},[36,40030,40031],{"class":38,"line":12342},[36,40032,36818],{"class":42},[36,40034,40035,40037,40039,40041,40043],{"class":38,"line":12348},[36,40036,36823],{"class":53},[36,40038,115],{"class":114},[36,40040,36828],{"class":53},[36,40042,1065],{"class":114},[36,40044,36833],{"class":53},[36,40046,40047],{"class":38,"line":12369},[36,40048,36838],{"class":42},[36,40050,40051,40053,40055,40057],{"class":38,"line":12375},[36,40052,34954],{"class":49},[36,40054,54],{"class":53},[36,40056,36847],{"class":57},[36,40058,36850],{"class":53},[36,40060,40061],{"class":38,"line":12389},[36,40062,546],{"emptyLinePlaceholder":545},[36,40064,40065],{"class":38,"line":12395},[36,40066,36859],{"class":42},[36,40068,40069,40071,40073,40075,40077],{"class":38,"line":12422},[36,40070,4069],{"class":114},[36,40072,33724],{"class":49},[36,40074,1377],{"class":114},[36,40076,33729],{"class":57},[36,40078,6270],{"class":53},[36,40080,40081],{"class":38,"line":12431},[36,40082,36876],{"class":42},[36,40084,40085,40087,40089],{"class":38,"line":12437},[36,40086,33793],{"class":53},[36,40088,115],{"class":114},[36,40090,39589],{"class":53},[36,40092,40093],{"class":38,"line":12445},[36,40094,36889],{"class":42},[36,40096,40097],{"class":38,"line":12450},[36,40098,36894],{"class":42},[36,40100,40101,40103,40105],{"class":38,"line":19122},[36,40102,36899],{"class":53},[36,40104,36902],{"class":57},[36,40106,625],{"class":53},[36,40108,40109],{"class":38,"line":19128},[36,40110,36909],{"class":42},[36,40112,40113,40115,40117],{"class":38,"line":19151},[36,40114,36522],{"class":53},[36,40116,115],{"class":114},[36,40118,36918],{"class":53},[36,40120,40121],{"class":38,"line":19157},[36,40122,36923],{"class":42},[36,40124,40125],{"class":38,"line":19180},[36,40126,36928],{"class":53},[36,40128,40129],{"class":38,"line":19194},[36,40130,546],{"emptyLinePlaceholder":545},[36,40132,40133],{"class":38,"line":19214},[36,40134,36937],{"class":42},[36,40136,40137],{"class":38,"line":19220},[36,40138,36942],{"class":42},[36,40140,40141,40143,40145,40147,40149,40151,40153],{"class":38,"line":19231},[36,40142,33741],{"class":53},[36,40144,115],{"class":114},[36,40146,33748],{"class":57},[36,40148,4242],{"class":114},[36,40150,33753],{"class":53},[36,40152,4239],{"class":114},[36,40154,36619],{"class":57},[36,40156,40157,40159,40161],{"class":38,"line":19254},[36,40158,33793],{"class":53},[36,40160,115],{"class":114},[36,40162,34792],{"class":53},[36,40164,40165],{"class":38,"line":19276},[36,40166,36971],{"class":42},[36,40168,40169],{"class":38,"line":19281},[36,40170,36976],{"class":42},[36,40172,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217],{"class":38,"line":19287},[36,40174,36981],{"class":53},[36,40176,115],{"class":114},[36,40178,3566],{"class":53},[36,40180,36988],{"class":57},[36,40182,3059],{"class":53},[36,40184,36993],{"class":57},[36,40186,3059],{"class":53},[36,40188,36998],{"class":57},[36,40190,3059],{"class":53},[36,40192,37003],{"class":57},[36,40194,3059],{"class":53},[36,40196,37008],{"class":57},[36,40198,3059],{"class":53},[36,40200,37013],{"class":57},[36,40202,3059],{"class":53},[36,40204,37018],{"class":57},[36,40206,3059],{"class":53},[36,40208,37023],{"class":57},[36,40210,3059],{"class":53},[36,40212,37028],{"class":57},[36,40214,3059],{"class":53},[36,40216,37033],{"class":57},[36,40218,35748],{"class":53},[36,40220,40221,40223],{"class":38,"line":19301},[36,40222,36678],{"class":114},[36,40224,35386],{"class":53},[36,40226,40227],{"class":38,"line":19314},[36,40228,37046],{"class":42},[36,40230,40231,40233,40235,40237],{"class":38,"line":19319},[36,40232,5934],{"class":114},[36,40234,37053],{"class":53},[36,40236,28556],{"class":114},[36,40238,36697],{"class":53},[36,40240,40241,40243,40245],{"class":38,"line":19333},[36,40242,35112],{"class":53},[36,40244,115],{"class":114},[36,40246,35117],{"class":53},[36,40248,40249,40251,40253],{"class":38,"line":19338},[36,40250,35127],{"class":53},[36,40252,115],{"class":114},[36,40254,35132],{"class":53},[36,40256,40257],{"class":38,"line":19344},[36,40258,546],{"emptyLinePlaceholder":545},[36,40260,40261],{"class":38,"line":19349},[36,40262,37082],{"class":42},[36,40264,40265],{"class":38,"line":19363},[36,40266,35377],{"class":53},[36,40268,40269],{"class":38,"line":19368},[36,40270,37091],{"class":42},[36,40272,40273,40275,40277],{"class":38,"line":19373},[36,40274,35162],{"class":53},[36,40276,115],{"class":114},[36,40278,35167],{"class":53},[36,40280,40281],{"class":38,"line":19387},[36,40282,37104],{"class":42},[36,40284,40285,40287,40289,40291,40293,40295,40297],{"class":38,"line":19399},[36,40286,35179],{"class":53},[36,40288,115],{"class":114},[36,40290,35184],{"class":53},[36,40292,35187],{"class":1997},[36,40294,115],{"class":114},[36,40296,707],{"class":49},[36,40298,61],{"class":53},[36,40300,40301],{"class":38,"line":19404},[36,40302,37125],{"class":42},[36,40304,40305,40307,40309],{"class":38,"line":19417},[36,40306,37130],{"class":53},[36,40308,115],{"class":114},[36,40310,37135],{"class":53},[36,40312,40313,40315,40317],{"class":38,"line":19422},[36,40314,37140],{"class":53},[36,40316,115],{"class":114},[36,40318,37145],{"class":53},[36,40320,40321,40323,40325,40327,40329,40331,40333,40335],{"class":38,"line":19427},[36,40322,37150],{"class":49},[36,40324,54],{"class":53},[36,40326,37155],{"class":57},[36,40328,37158],{"class":53},[36,40330,37161],{"class":57},[36,40332,3059],{"class":53},[36,40334,37166],{"class":57},[36,40336,37169],{"class":53},[997,40338,40340],{"id":40339},"_22vgg","2.2.VGG",[24515,40342,40344],{"id":40343},"_221原理","2.2.1.原理",[19,40346,40347],{},[4000,40348],{"alt":31,"src":40349},"\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,40351,40352],{},[4000,40353],{"alt":31,"src":40354},"\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,40356,40357],{},[4000,40358],{"alt":31,"src":40359},"\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,40361,40362],{},"参数详细描述：",[19,40364,40365],{},[4000,40366],{"alt":31,"src":40367},"\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,40369,40370],{},[4000,40371],{"alt":31,"src":40372},"\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,40374,40375],{},[4000,40376],{"alt":31,"src":40377},"\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,40379,40380],{},[4000,40381],{"alt":31,"src":40382},"\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,40384,40385],{},[4000,40386],{"alt":31,"src":40387},"\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",[24515,40389,40391],{"id":40390},"_222代码实现","2.2.2.代码实现",[433,40393,40394],{},[436,40395,40396],{},"网络搭建",[26,40398,40400],{"className":28,"code":40399,"language":30,"meta":31,"style":31},"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",[33,40401,40402,40408,40420,40430,40440,40444,40461,40469,40488,40493,40498,40510,40548,40553,40589,40593,40622,40627,40632,40643,40679,40683,40719,40723,40751,40755,40760,40771,40807,40811,40847,40851,40887,40891,40919,40923,40928,40939,40976,40980,41016,41020,41056,41060,41088,41092,41097,41108,41144,41148,41184,41188,41224,41228,41256,41260,41265,41276,41281,41286,41291,41312,41316,41328,41332,41344,41348,41352,41357,41362,41377,41382,41392,41397,41412,41417,41436,41441,41450,41455,41465,41470,41475,41489,41494,41508,41516,41520,41524,41532,41543,41554,41565,41576,41587,41598,41604,41608,41613,41626,41646,41652,41661],{"__ignoreMap":31},[36,40403,40404,40406],{"class":38,"line":39},[36,40405,537],{"class":114},[36,40407,32902],{"class":53},[36,40409,40410,40412,40415,40417],{"class":38,"line":46},[36,40411,33241],{"class":114},[36,40413,40414],{"class":53}," sympy.core.sympify ",[36,40416,537],{"class":114},[36,40418,40419],{"class":53}," kernS\n",[36,40421,40422,40424,40426,40428],{"class":38,"line":82},[36,40423,33241],{"class":114},[36,40425,33244],{"class":53},[36,40427,537],{"class":114},[36,40429,33249],{"class":53},[36,40431,40432,40434,40436,40438],{"class":38,"line":88},[36,40433,33241],{"class":114},[36,40435,33261],{"class":53},[36,40437,537],{"class":114},[36,40439,33266],{"class":53},[36,40441,40442],{"class":38,"line":195},[36,40443,546],{"emptyLinePlaceholder":545},[36,40445,40446,40448,40451,40453,40455,40457,40459],{"class":38,"line":1517},[36,40447,519],{"class":114},[36,40449,40450],{"class":4500}," VGG16",[36,40452,54],{"class":53},[36,40454,33282],{"class":4500},[36,40456,3235],{"class":53},[36,40458,33287],{"class":4500},[36,40460,33290],{"class":53},[36,40462,40463,40465,40467],{"class":38,"line":2421},[36,40464,33305],{"class":114},[36,40466,33308],{"class":49},[36,40468,33311],{"class":53},[36,40470,40471,40473,40475,40478,40480,40482,40484,40486],{"class":38,"line":2446},[36,40472,33321],{"class":49},[36,40474,54],{"class":53},[36,40476,40477],{"class":49},"VGG16",[36,40479,14958],{"class":53},[36,40481,33327],{"class":49},[36,40483,33330],{"class":53},[36,40485,33333],{"class":49},[36,40487,4513],{"class":53},[36,40489,40490],{"class":38,"line":2469},[36,40491,40492],{"class":42},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,40494,40495],{"class":38,"line":2492},[36,40496,40497],{"class":42},"        # 这里用的是灰度图\n",[36,40499,40500,40502,40505,40507],{"class":38,"line":4150},[36,40501,33349],{"class":49},[36,40503,40504],{"class":53},".block1",[36,40506,115],{"class":114},[36,40508,40509],{"class":53},"nn.Sequential(\n",[36,40511,40512,40515,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545],{"class":38,"line":4155},[36,40513,40514],{"class":53},"            nn.Conv2d(",[36,40516,33360],{"class":1997},[36,40518,115],{"class":114},[36,40520,707],{"class":49},[36,40522,3059],{"class":53},[36,40524,33369],{"class":1997},[36,40526,115],{"class":114},[36,40528,2890],{"class":49},[36,40530,3059],{"class":53},[36,40532,33378],{"class":1997},[36,40534,115],{"class":114},[36,40536,2767],{"class":49},[36,40538,3059],{"class":53},[36,40540,33387],{"class":1997},[36,40542,115],{"class":114},[36,40544,707],{"class":49},[36,40546,40547],{"class":53},"),\n",[36,40549,40550],{"class":38,"line":4161},[36,40551,40552],{"class":53},"            nn.ReLU(),\n",[36,40554,40555,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587],{"class":38,"line":4166},[36,40556,40514],{"class":53},[36,40558,33360],{"class":1997},[36,40560,115],{"class":114},[36,40562,2890],{"class":49},[36,40564,3059],{"class":53},[36,40566,33369],{"class":1997},[36,40568,115],{"class":114},[36,40570,2890],{"class":49},[36,40572,3059],{"class":53},[36,40574,33378],{"class":1997},[36,40576,115],{"class":114},[36,40578,2767],{"class":49},[36,40580,3059],{"class":53},[36,40582,33387],{"class":1997},[36,40584,115],{"class":114},[36,40586,707],{"class":49},[36,40588,40547],{"class":53},[36,40590,40591],{"class":38,"line":4180},[36,40592,40552],{"class":53},[36,40594,40595,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620],{"class":38,"line":4185},[36,40596,40597],{"class":53},"            nn.MaxPool2d(",[36,40599,33378],{"class":1997},[36,40601,115],{"class":114},[36,40603,1188],{"class":49},[36,40605,3059],{"class":53},[36,40607,33433],{"class":1997},[36,40609,115],{"class":114},[36,40611,1188],{"class":49},[36,40613,3059],{"class":53},[36,40615,33387],{"class":1997},[36,40617,115],{"class":114},[36,40619,713],{"class":49},[36,40621,61],{"class":53},[36,40623,40624],{"class":38,"line":4191},[36,40625,40626],{"class":53},"        )\n",[36,40628,40629],{"class":38,"line":4212},[36,40630,40631],{"class":42},"        # 第二层\n",[36,40633,40634,40636,40639,40641],{"class":38,"line":4217},[36,40635,33349],{"class":49},[36,40637,40638],{"class":53},".block2",[36,40640,115],{"class":114},[36,40642,40509],{"class":53},[36,40644,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677],{"class":38,"line":4231},[36,40646,40514],{"class":53},[36,40648,33360],{"class":1997},[36,40650,115],{"class":114},[36,40652,2890],{"class":49},[36,40654,3059],{"class":53},[36,40656,33369],{"class":1997},[36,40658,115],{"class":114},[36,40660,34573],{"class":49},[36,40662,3059],{"class":53},[36,40664,33378],{"class":1997},[36,40666,115],{"class":114},[36,40668,2767],{"class":49},[36,40670,3059],{"class":53},[36,40672,33387],{"class":1997},[36,40674,115],{"class":114},[36,40676,707],{"class":49},[36,40678,40547],{"class":53},[36,40680,40681],{"class":38,"line":4236},[36,40682,40552],{"class":53},[36,40684,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717],{"class":38,"line":4264},[36,40686,40514],{"class":53},[36,40688,33360],{"class":1997},[36,40690,115],{"class":114},[36,40692,34573],{"class":49},[36,40694,3059],{"class":53},[36,40696,33369],{"class":1997},[36,40698,115],{"class":114},[36,40700,34573],{"class":49},[36,40702,3059],{"class":53},[36,40704,33378],{"class":1997},[36,40706,115],{"class":114},[36,40708,2767],{"class":49},[36,40710,3059],{"class":53},[36,40712,33387],{"class":1997},[36,40714,115],{"class":114},[36,40716,707],{"class":49},[36,40718,40547],{"class":53},[36,40720,40721],{"class":38,"line":4269},[36,40722,40552],{"class":53},[36,40724,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749],{"class":38,"line":4286},[36,40726,40597],{"class":53},[36,40728,33378],{"class":1997},[36,40730,115],{"class":114},[36,40732,1188],{"class":49},[36,40734,3059],{"class":53},[36,40736,33433],{"class":1997},[36,40738,115],{"class":114},[36,40740,1188],{"class":49},[36,40742,3059],{"class":53},[36,40744,33387],{"class":1997},[36,40746,115],{"class":114},[36,40748,713],{"class":49},[36,40750,61],{"class":53},[36,40752,40753],{"class":38,"line":4291},[36,40754,40626],{"class":53},[36,40756,40757],{"class":38,"line":4296},[36,40758,40759],{"class":42},"        # 第三层\n",[36,40761,40762,40764,40767,40769],{"class":38,"line":4301},[36,40763,33349],{"class":49},[36,40765,40766],{"class":53},".block3",[36,40768,115],{"class":114},[36,40770,40509],{"class":53},[36,40772,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799,40801,40803,40805],{"class":38,"line":4315},[36,40774,40514],{"class":53},[36,40776,33360],{"class":1997},[36,40778,115],{"class":114},[36,40780,34573],{"class":49},[36,40782,3059],{"class":53},[36,40784,33369],{"class":1997},[36,40786,115],{"class":114},[36,40788,37370],{"class":49},[36,40790,3059],{"class":53},[36,40792,33378],{"class":1997},[36,40794,115],{"class":114},[36,40796,2767],{"class":49},[36,40798,3059],{"class":53},[36,40800,33387],{"class":1997},[36,40802,115],{"class":114},[36,40804,707],{"class":49},[36,40806,40547],{"class":53},[36,40808,40809],{"class":38,"line":4320},[36,40810,40552],{"class":53},[36,40812,40813,40815,40817,40819,40821,40823,40825,40827,40829,40831,40833,40835,40837,40839,40841,40843,40845],{"class":38,"line":5109},[36,40814,40514],{"class":53},[36,40816,33360],{"class":1997},[36,40818,115],{"class":114},[36,40820,37370],{"class":49},[36,40822,3059],{"class":53},[36,40824,33369],{"class":1997},[36,40826,115],{"class":114},[36,40828,37370],{"class":49},[36,40830,3059],{"class":53},[36,40832,33378],{"class":1997},[36,40834,115],{"class":114},[36,40836,2767],{"class":49},[36,40838,3059],{"class":53},[36,40840,33387],{"class":1997},[36,40842,115],{"class":114},[36,40844,707],{"class":49},[36,40846,40547],{"class":53},[36,40848,40849],{"class":38,"line":5123},[36,40850,40552],{"class":53},[36,40852,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871,40873,40875,40877,40879,40881,40883,40885],{"class":38,"line":5131},[36,40854,40514],{"class":53},[36,40856,33360],{"class":1997},[36,40858,115],{"class":114},[36,40860,37370],{"class":49},[36,40862,3059],{"class":53},[36,40864,33369],{"class":1997},[36,40866,115],{"class":114},[36,40868,37370],{"class":49},[36,40870,3059],{"class":53},[36,40872,33378],{"class":1997},[36,40874,115],{"class":114},[36,40876,2767],{"class":49},[36,40878,3059],{"class":53},[36,40880,33387],{"class":1997},[36,40882,115],{"class":114},[36,40884,707],{"class":49},[36,40886,40547],{"class":53},[36,40888,40889],{"class":38,"line":5136},[36,40890,40552],{"class":53},[36,40892,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911,40913,40915,40917],{"class":38,"line":5142},[36,40894,40597],{"class":53},[36,40896,33378],{"class":1997},[36,40898,115],{"class":114},[36,40900,1188],{"class":49},[36,40902,3059],{"class":53},[36,40904,33433],{"class":1997},[36,40906,115],{"class":114},[36,40908,1188],{"class":49},[36,40910,3059],{"class":53},[36,40912,33387],{"class":1997},[36,40914,115],{"class":114},[36,40916,713],{"class":49},[36,40918,61],{"class":53},[36,40920,40921],{"class":38,"line":5148},[36,40922,40626],{"class":53},[36,40924,40925],{"class":38,"line":5153},[36,40926,40927],{"class":42},"        # 第四层\n",[36,40929,40930,40932,40935,40937],{"class":38,"line":10475},[36,40931,33349],{"class":49},[36,40933,40934],{"class":53},".block4",[36,40936,115],{"class":114},[36,40938,40509],{"class":53},[36,40940,40941,40943,40945,40947,40949,40951,40953,40955,40958,40960,40962,40964,40966,40968,40970,40972,40974],{"class":38,"line":10499},[36,40942,40514],{"class":53},[36,40944,33360],{"class":1997},[36,40946,115],{"class":114},[36,40948,37370],{"class":49},[36,40950,3059],{"class":53},[36,40952,33369],{"class":1997},[36,40954,115],{"class":114},[36,40956,40957],{"class":49},"512",[36,40959,3059],{"class":53},[36,40961,33378],{"class":1997},[36,40963,115],{"class":114},[36,40965,2767],{"class":49},[36,40967,3059],{"class":53},[36,40969,33387],{"class":1997},[36,40971,115],{"class":114},[36,40973,707],{"class":49},[36,40975,40547],{"class":53},[36,40977,40978],{"class":38,"line":10504},[36,40979,40552],{"class":53},[36,40981,40982,40984,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014],{"class":38,"line":10510},[36,40983,40514],{"class":53},[36,40985,33360],{"class":1997},[36,40987,115],{"class":114},[36,40989,40957],{"class":49},[36,40991,3059],{"class":53},[36,40993,33369],{"class":1997},[36,40995,115],{"class":114},[36,40997,40957],{"class":49},[36,40999,3059],{"class":53},[36,41001,33378],{"class":1997},[36,41003,115],{"class":114},[36,41005,2767],{"class":49},[36,41007,3059],{"class":53},[36,41009,33387],{"class":1997},[36,41011,115],{"class":114},[36,41013,707],{"class":49},[36,41015,40547],{"class":53},[36,41017,41018],{"class":38,"line":10537},[36,41019,40552],{"class":53},[36,41021,41022,41024,41026,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054],{"class":38,"line":10542},[36,41023,40514],{"class":53},[36,41025,33360],{"class":1997},[36,41027,115],{"class":114},[36,41029,40957],{"class":49},[36,41031,3059],{"class":53},[36,41033,33369],{"class":1997},[36,41035,115],{"class":114},[36,41037,40957],{"class":49},[36,41039,3059],{"class":53},[36,41041,33378],{"class":1997},[36,41043,115],{"class":114},[36,41045,2767],{"class":49},[36,41047,3059],{"class":53},[36,41049,33387],{"class":1997},[36,41051,115],{"class":114},[36,41053,707],{"class":49},[36,41055,40547],{"class":53},[36,41057,41058],{"class":38,"line":10548},[36,41059,40552],{"class":53},[36,41061,41062,41064,41066,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086],{"class":38,"line":10560},[36,41063,40597],{"class":53},[36,41065,33378],{"class":1997},[36,41067,115],{"class":114},[36,41069,1188],{"class":49},[36,41071,3059],{"class":53},[36,41073,33433],{"class":1997},[36,41075,115],{"class":114},[36,41077,1188],{"class":49},[36,41079,3059],{"class":53},[36,41081,33387],{"class":1997},[36,41083,115],{"class":114},[36,41085,713],{"class":49},[36,41087,61],{"class":53},[36,41089,41090],{"class":38,"line":10572},[36,41091,40626],{"class":53},[36,41093,41094],{"class":38,"line":10584},[36,41095,41096],{"class":42},"        # 第五层\n",[36,41098,41099,41101,41104,41106],{"class":38,"line":12241},[36,41100,33349],{"class":49},[36,41102,41103],{"class":53},".block5",[36,41105,115],{"class":114},[36,41107,40509],{"class":53},[36,41109,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142],{"class":38,"line":12266},[36,41111,40514],{"class":53},[36,41113,33360],{"class":1997},[36,41115,115],{"class":114},[36,41117,40957],{"class":49},[36,41119,3059],{"class":53},[36,41121,33369],{"class":1997},[36,41123,115],{"class":114},[36,41125,40957],{"class":49},[36,41127,3059],{"class":53},[36,41129,33378],{"class":1997},[36,41131,115],{"class":114},[36,41133,2767],{"class":49},[36,41135,3059],{"class":53},[36,41137,33387],{"class":1997},[36,41139,115],{"class":114},[36,41141,707],{"class":49},[36,41143,40547],{"class":53},[36,41145,41146],{"class":38,"line":12289},[36,41147,40552],{"class":53},[36,41149,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182],{"class":38,"line":12313},[36,41151,40514],{"class":53},[36,41153,33360],{"class":1997},[36,41155,115],{"class":114},[36,41157,40957],{"class":49},[36,41159,3059],{"class":53},[36,41161,33369],{"class":1997},[36,41163,115],{"class":114},[36,41165,40957],{"class":49},[36,41167,3059],{"class":53},[36,41169,33378],{"class":1997},[36,41171,115],{"class":114},[36,41173,2767],{"class":49},[36,41175,3059],{"class":53},[36,41177,33387],{"class":1997},[36,41179,115],{"class":114},[36,41181,707],{"class":49},[36,41183,40547],{"class":53},[36,41185,41186],{"class":38,"line":12318},[36,41187,40552],{"class":53},[36,41189,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222],{"class":38,"line":12323},[36,41191,40514],{"class":53},[36,41193,33360],{"class":1997},[36,41195,115],{"class":114},[36,41197,40957],{"class":49},[36,41199,3059],{"class":53},[36,41201,33369],{"class":1997},[36,41203,115],{"class":114},[36,41205,40957],{"class":49},[36,41207,3059],{"class":53},[36,41209,33378],{"class":1997},[36,41211,115],{"class":114},[36,41213,2767],{"class":49},[36,41215,3059],{"class":53},[36,41217,33387],{"class":1997},[36,41219,115],{"class":114},[36,41221,707],{"class":49},[36,41223,40547],{"class":53},[36,41225,41226],{"class":38,"line":12328},[36,41227,40552],{"class":53},[36,41229,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254],{"class":38,"line":12337},[36,41231,40597],{"class":53},[36,41233,33378],{"class":1997},[36,41235,115],{"class":114},[36,41237,1188],{"class":49},[36,41239,3059],{"class":53},[36,41241,33433],{"class":1997},[36,41243,115],{"class":114},[36,41245,1188],{"class":49},[36,41247,3059],{"class":53},[36,41249,33387],{"class":1997},[36,41251,115],{"class":114},[36,41253,713],{"class":49},[36,41255,61],{"class":53},[36,41257,41258],{"class":38,"line":12342},[36,41259,40626],{"class":53},[36,41261,41262],{"class":38,"line":12348},[36,41263,41264],{"class":42},"        # 全连接层\n",[36,41266,41267,41269,41272,41274],{"class":38,"line":12369},[36,41268,33349],{"class":49},[36,41270,41271],{"class":53},".block6",[36,41273,115],{"class":114},[36,41275,40509],{"class":53},[36,41277,41278],{"class":38,"line":12375},[36,41279,41280],{"class":42},"            # 平展操作\n",[36,41282,41283],{"class":38,"line":12389},[36,41284,41285],{"class":42},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,41287,41288],{"class":38,"line":12395},[36,41289,41290],{"class":53},"            nn.Flatten(),\n",[36,41292,41293,41296,41298,41300,41302,41304,41306,41308,41310],{"class":38,"line":12422},[36,41294,41295],{"class":53},"            nn.Linear(",[36,41297,3050],{"class":49},[36,41299,1050],{"class":114},[36,41301,3050],{"class":49},[36,41303,1050],{"class":114},[36,41305,40957],{"class":49},[36,41307,3059],{"class":53},[36,41309,37370],{"class":49},[36,41311,40547],{"class":53},[36,41313,41314],{"class":38,"line":12431},[36,41315,40552],{"class":53},[36,41317,41318,41320,41322,41324,41326],{"class":38,"line":12437},[36,41319,41295],{"class":53},[36,41321,37370],{"class":49},[36,41323,3059],{"class":53},[36,41325,34573],{"class":49},[36,41327,40547],{"class":53},[36,41329,41330],{"class":38,"line":12445},[36,41331,40552],{"class":53},[36,41333,41334,41336,41338,41340,41342],{"class":38,"line":12450},[36,41335,41295],{"class":53},[36,41337,34573],{"class":49},[36,41339,3059],{"class":53},[36,41341,1317],{"class":49},[36,41343,61],{"class":53},[36,41345,41346],{"class":38,"line":19122},[36,41347,40626],{"class":53},[36,41349,41350],{"class":38,"line":19128},[36,41351,546],{"emptyLinePlaceholder":545},[36,41353,41354],{"class":38,"line":19151},[36,41355,41356],{"class":42},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,41358,41359],{"class":38,"line":19157},[36,41360,41361],{"class":42},"        # 循环遍历模型\n",[36,41363,41364,41366,41369,41371,41374],{"class":38,"line":19180},[36,41365,5934],{"class":114},[36,41367,41368],{"class":53}," m ",[36,41370,28556],{"class":114},[36,41372,41373],{"class":49}," self",[36,41375,41376],{"class":53},".modules():\n",[36,41378,41379],{"class":38,"line":19194},[36,41380,41381],{"class":42},"            # print(m)\n",[36,41383,41384,41386,41389],{"class":38,"line":19214},[36,41385,7173],{"class":114},[36,41387,41388],{"class":49}," isinstance",[36,41390,41391],{"class":53},"(m,nn.Conv2d):\n",[36,41393,41394],{"class":38,"line":19220},[36,41395,41396],{"class":42},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,41398,41399,41402,41405,41407,41410],{"class":38,"line":19231},[36,41400,41401],{"class":53},"                nn.init.kaiming_normal_(m.weight,",[36,41403,41404],{"class":1997},"nonlinearity",[36,41406,115],{"class":114},[36,41408,41409],{"class":57},"'relu'",[36,41411,61],{"class":53},[36,41413,41414],{"class":38,"line":19254},[36,41415,41416],{"class":42},"                # 判断b参数是否存在\n",[36,41418,41419,41422,41425,41428,41431,41434],{"class":38,"line":19276},[36,41420,41421],{"class":114},"                if",[36,41423,41424],{"class":53}," m.bias ",[36,41426,41427],{"class":114},"is",[36,41429,41430],{"class":114}," not",[36,41432,41433],{"class":49}," None",[36,41435,6270],{"class":53},[36,41437,41438],{"class":38,"line":19281},[36,41439,41440],{"class":42},"                    # 如果参数不存在的化初始化b=0\n",[36,41442,41443,41446,41448],{"class":38,"line":19287},[36,41444,41445],{"class":53},"                    nn.init.constant_(m.bias,",[36,41447,713],{"class":49},[36,41449,61],{"class":53},[36,41451,41452],{"class":38,"line":19301},[36,41453,41454],{"class":42},"            # 全连接层初始化\n",[36,41456,41457,41460,41462],{"class":38,"line":19314},[36,41458,41459],{"class":114},"            elif",[36,41461,41388],{"class":49},[36,41463,41464],{"class":53},"(m,nn.Linear):\n",[36,41466,41467],{"class":38,"line":19319},[36,41468,41469],{"class":42},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,41471,41472],{"class":38,"line":19333},[36,41473,41474],{"class":42},"                # 均值为0，方差为0.01\n",[36,41476,41477,41480,41482,41484,41487],{"class":38,"line":19338},[36,41478,41479],{"class":53},"                nn.init.normal_(m.weight,",[36,41481,713],{"class":49},[36,41483,3059],{"class":53},[36,41485,41486],{"class":49},"0.01",[36,41488,61],{"class":53},[36,41490,41491],{"class":38,"line":19344},[36,41492,41493],{"class":42},"                # 初始化b参数\n",[36,41495,41496,41498,41500,41502,41504,41506],{"class":38,"line":19349},[36,41497,41421],{"class":114},[36,41499,41424],{"class":53},[36,41501,41427],{"class":114},[36,41503,41430],{"class":114},[36,41505,41433],{"class":49},[36,41507,6270],{"class":53},[36,41509,41510,41512,41514],{"class":38,"line":19363},[36,41511,41445],{"class":53},[36,41513,713],{"class":49},[36,41515,61],{"class":53},[36,41517,41518],{"class":38,"line":19368},[36,41519,546],{"emptyLinePlaceholder":545},[36,41521,41522],{"class":38,"line":19373},[36,41523,37665],{"class":42},[36,41525,41526,41528,41530],{"class":38,"line":19387},[36,41527,33305],{"class":114},[36,41529,33597],{"class":4500},[36,41531,33600],{"class":53},[36,41533,41534,41536,41538,41540],{"class":38,"line":19399},[36,41535,33605],{"class":53},[36,41537,115],{"class":114},[36,41539,33327],{"class":49},[36,41541,41542],{"class":53},".block1(x)\n",[36,41544,41545,41547,41549,41551],{"class":38,"line":19404},[36,41546,33605],{"class":53},[36,41548,115],{"class":114},[36,41550,33327],{"class":49},[36,41552,41553],{"class":53},".block2(x)\n",[36,41555,41556,41558,41560,41562],{"class":38,"line":19417},[36,41557,33605],{"class":53},[36,41559,115],{"class":114},[36,41561,33327],{"class":49},[36,41563,41564],{"class":53},".block3(x)\n",[36,41566,41567,41569,41571,41573],{"class":38,"line":19422},[36,41568,33605],{"class":53},[36,41570,115],{"class":114},[36,41572,33327],{"class":49},[36,41574,41575],{"class":53},".block4(x)\n",[36,41577,41578,41580,41582,41584],{"class":38,"line":19427},[36,41579,33605],{"class":53},[36,41581,115],{"class":114},[36,41583,33327],{"class":49},[36,41585,41586],{"class":53},".block5(x)\n",[36,41588,41589,41591,41593,41595],{"class":38,"line":19432},[36,41590,33605],{"class":53},[36,41592,115],{"class":114},[36,41594,33327],{"class":49},[36,41596,41597],{"class":53},".block6(x)\n",[36,41599,41600,41602],{"class":38,"line":19445},[36,41601,17273],{"class":114},[36,41603,33713],{"class":53},[36,41605,41606],{"class":38,"line":19450},[36,41607,546],{"emptyLinePlaceholder":545},[36,41609,41610],{"class":38,"line":35135},[36,41611,41612],{"class":42},"# 验证模型\n",[36,41614,41615,41617,41619,41621,41624],{"class":38,"line":35141},[36,41616,4069],{"class":114},[36,41618,33724],{"class":49},[36,41620,1377],{"class":114},[36,41622,41623],{"class":57},"'__main__'",[36,41625,6270],{"class":53},[36,41627,41628,41630,41632,41634,41636,41638,41640,41642,41644],{"class":38,"line":35147},[36,41629,33741],{"class":53},[36,41631,115],{"class":114},[36,41633,32957],{"class":53},[36,41635,33748],{"class":57},[36,41637,4242],{"class":114},[36,41639,33753],{"class":53},[36,41641,4239],{"class":114},[36,41643,32981],{"class":57},[36,41645,61],{"class":53},[36,41647,41648,41650],{"class":38,"line":35153},[36,41649,33803],{"class":49},[36,41651,32990],{"class":53},[36,41653,41654,41656,41658],{"class":38,"line":35159},[36,41655,33793],{"class":53},[36,41657,115],{"class":114},[36,41659,41660],{"class":53},"VGG16().to(device)\n",[36,41662,41663,41665,41667,41669,41671,41673,41675,41677],{"class":38,"line":35170},[36,41664,33803],{"class":49},[36,41666,33806],{"class":53},[36,41668,707],{"class":49},[36,41670,3059],{"class":53},[36,41672,34004],{"class":49},[36,41674,3059],{"class":53},[36,41676,34004],{"class":49},[36,41678,33819],{"class":53},[433,41680,41681],{"start":46},[436,41682,41683],{},"训练代码",[19,41685,41686],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41688,41689],{},"解决方式:",[19,41691,41692],{},"①权重初始化",[26,41694,41696],{"className":28,"code":41695,"language":30,"meta":31,"style":31},"# 权重初始化,保证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",[33,41697,41698,41703,41708,41720,41725,41733,41738,41751,41756,41770,41775,41784,41789,41798,41803,41808,41821,41826,41840],{"__ignoreMap":31},[36,41699,41700],{"class":38,"line":39},[36,41701,41702],{"class":42},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,41704,41705],{"class":38,"line":46},[36,41706,41707],{"class":42},"# 循环遍历模型\n",[36,41709,41710,41712,41714,41716,41718],{"class":38,"line":82},[36,41711,5556],{"class":114},[36,41713,41368],{"class":53},[36,41715,28556],{"class":114},[36,41717,41373],{"class":49},[36,41719,41376],{"class":53},[36,41721,41722],{"class":38,"line":88},[36,41723,41724],{"class":42},"    # print(m)\n",[36,41726,41727,41729,41731],{"class":38,"line":195},[36,41728,5632],{"class":114},[36,41730,41388],{"class":49},[36,41732,41391],{"class":53},[36,41734,41735],{"class":38,"line":1517},[36,41736,41737],{"class":42},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,41739,41740,41743,41745,41747,41749],{"class":38,"line":2421},[36,41741,41742],{"class":53},"        nn.init.kaiming_normal_(m.weight,",[36,41744,41404],{"class":1997},[36,41746,115],{"class":114},[36,41748,41409],{"class":57},[36,41750,61],{"class":53},[36,41752,41753],{"class":38,"line":2446},[36,41754,41755],{"class":42},"        # 判断b参数是否存在\n",[36,41757,41758,41760,41762,41764,41766,41768],{"class":38,"line":2469},[36,41759,5029],{"class":114},[36,41761,41424],{"class":53},[36,41763,41427],{"class":114},[36,41765,41430],{"class":114},[36,41767,41433],{"class":49},[36,41769,6270],{"class":53},[36,41771,41772],{"class":38,"line":2492},[36,41773,41774],{"class":42},"            # 如果参数不存在的化初始化b=0\n",[36,41776,41777,41780,41782],{"class":38,"line":4150},[36,41778,41779],{"class":53},"            nn.init.constant_(m.bias,",[36,41781,713],{"class":49},[36,41783,61],{"class":53},[36,41785,41786],{"class":38,"line":4155},[36,41787,41788],{"class":42},"    # 全连接层初始化\n",[36,41790,41791,41794,41796],{"class":38,"line":4161},[36,41792,41793],{"class":114},"    elif",[36,41795,41388],{"class":49},[36,41797,41464],{"class":53},[36,41799,41800],{"class":38,"line":4166},[36,41801,41802],{"class":42},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,41804,41805],{"class":38,"line":4180},[36,41806,41807],{"class":42},"        # 均值为0，方差为0.01\n",[36,41809,41810,41813,41815,41817,41819],{"class":38,"line":4185},[36,41811,41812],{"class":53},"        nn.init.normal_(m.weight,",[36,41814,713],{"class":49},[36,41816,3059],{"class":53},[36,41818,41486],{"class":49},[36,41820,61],{"class":53},[36,41822,41823],{"class":38,"line":4191},[36,41824,41825],{"class":42},"        # 初始化b参数\n",[36,41827,41828,41830,41832,41834,41836,41838],{"class":38,"line":4212},[36,41829,5029],{"class":114},[36,41831,41424],{"class":53},[36,41833,41427],{"class":114},[36,41835,41430],{"class":114},[36,41837,41433],{"class":49},[36,41839,6270],{"class":53},[36,41841,41842,41844,41846],{"class":38,"line":4217},[36,41843,41779],{"class":53},[36,41845,713],{"class":49},[36,41847,61],{"class":53},[19,41849,41850],{},"②尽可能地增加批次",[19,41852,41853],{},"训练完整代码：",[26,41855,41856],{"className":28,"code":40399,"language":30,"meta":31,"style":31},[33,41857,41858,41864,41874,41884,41894,41898,41914,41922,41940,41944,41948,41958,41994,41998,42034,42038,42066,42070,42074,42084,42120,42124,42160,42164,42192,42196,42200,42210,42246,42250,42286,42290,42326,42330,42358,42362,42366,42376,42412,42416,42452,42456,42492,42496,42524,42528,42532,42542,42578,42582,42618,42622,42658,42662,42690,42694,42698,42708,42712,42716,42720,42740,42744,42756,42760,42772,42776,42780,42784,42788,42800,42804,42812,42816,42828,42832,42846,42850,42858,42862,42870,42874,42878,42890,42894,42908,42916,42920,42924,42932,42942,42952,42962,42972,42982,42992,42998,43002,43006,43018,43038,43044,43052],{"__ignoreMap":31},[36,41859,41860,41862],{"class":38,"line":39},[36,41861,537],{"class":114},[36,41863,32902],{"class":53},[36,41865,41866,41868,41870,41872],{"class":38,"line":46},[36,41867,33241],{"class":114},[36,41869,40414],{"class":53},[36,41871,537],{"class":114},[36,41873,40419],{"class":53},[36,41875,41876,41878,41880,41882],{"class":38,"line":82},[36,41877,33241],{"class":114},[36,41879,33244],{"class":53},[36,41881,537],{"class":114},[36,41883,33249],{"class":53},[36,41885,41886,41888,41890,41892],{"class":38,"line":88},[36,41887,33241],{"class":114},[36,41889,33261],{"class":53},[36,41891,537],{"class":114},[36,41893,33266],{"class":53},[36,41895,41896],{"class":38,"line":195},[36,41897,546],{"emptyLinePlaceholder":545},[36,41899,41900,41902,41904,41906,41908,41910,41912],{"class":38,"line":1517},[36,41901,519],{"class":114},[36,41903,40450],{"class":4500},[36,41905,54],{"class":53},[36,41907,33282],{"class":4500},[36,41909,3235],{"class":53},[36,41911,33287],{"class":4500},[36,41913,33290],{"class":53},[36,41915,41916,41918,41920],{"class":38,"line":2421},[36,41917,33305],{"class":114},[36,41919,33308],{"class":49},[36,41921,33311],{"class":53},[36,41923,41924,41926,41928,41930,41932,41934,41936,41938],{"class":38,"line":2446},[36,41925,33321],{"class":49},[36,41927,54],{"class":53},[36,41929,40477],{"class":49},[36,41931,14958],{"class":53},[36,41933,33327],{"class":49},[36,41935,33330],{"class":53},[36,41937,33333],{"class":49},[36,41939,4513],{"class":53},[36,41941,41942],{"class":38,"line":2469},[36,41943,40492],{"class":42},[36,41945,41946],{"class":38,"line":2492},[36,41947,40497],{"class":42},[36,41949,41950,41952,41954,41956],{"class":38,"line":4150},[36,41951,33349],{"class":49},[36,41953,40504],{"class":53},[36,41955,115],{"class":114},[36,41957,40509],{"class":53},[36,41959,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990,41992],{"class":38,"line":4155},[36,41961,40514],{"class":53},[36,41963,33360],{"class":1997},[36,41965,115],{"class":114},[36,41967,707],{"class":49},[36,41969,3059],{"class":53},[36,41971,33369],{"class":1997},[36,41973,115],{"class":114},[36,41975,2890],{"class":49},[36,41977,3059],{"class":53},[36,41979,33378],{"class":1997},[36,41981,115],{"class":114},[36,41983,2767],{"class":49},[36,41985,3059],{"class":53},[36,41987,33387],{"class":1997},[36,41989,115],{"class":114},[36,41991,707],{"class":49},[36,41993,40547],{"class":53},[36,41995,41996],{"class":38,"line":4161},[36,41997,40552],{"class":53},[36,41999,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032],{"class":38,"line":4166},[36,42001,40514],{"class":53},[36,42003,33360],{"class":1997},[36,42005,115],{"class":114},[36,42007,2890],{"class":49},[36,42009,3059],{"class":53},[36,42011,33369],{"class":1997},[36,42013,115],{"class":114},[36,42015,2890],{"class":49},[36,42017,3059],{"class":53},[36,42019,33378],{"class":1997},[36,42021,115],{"class":114},[36,42023,2767],{"class":49},[36,42025,3059],{"class":53},[36,42027,33387],{"class":1997},[36,42029,115],{"class":114},[36,42031,707],{"class":49},[36,42033,40547],{"class":53},[36,42035,42036],{"class":38,"line":4180},[36,42037,40552],{"class":53},[36,42039,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064],{"class":38,"line":4185},[36,42041,40597],{"class":53},[36,42043,33378],{"class":1997},[36,42045,115],{"class":114},[36,42047,1188],{"class":49},[36,42049,3059],{"class":53},[36,42051,33433],{"class":1997},[36,42053,115],{"class":114},[36,42055,1188],{"class":49},[36,42057,3059],{"class":53},[36,42059,33387],{"class":1997},[36,42061,115],{"class":114},[36,42063,713],{"class":49},[36,42065,61],{"class":53},[36,42067,42068],{"class":38,"line":4191},[36,42069,40626],{"class":53},[36,42071,42072],{"class":38,"line":4212},[36,42073,40631],{"class":42},[36,42075,42076,42078,42080,42082],{"class":38,"line":4217},[36,42077,33349],{"class":49},[36,42079,40638],{"class":53},[36,42081,115],{"class":114},[36,42083,40509],{"class":53},[36,42085,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118],{"class":38,"line":4231},[36,42087,40514],{"class":53},[36,42089,33360],{"class":1997},[36,42091,115],{"class":114},[36,42093,2890],{"class":49},[36,42095,3059],{"class":53},[36,42097,33369],{"class":1997},[36,42099,115],{"class":114},[36,42101,34573],{"class":49},[36,42103,3059],{"class":53},[36,42105,33378],{"class":1997},[36,42107,115],{"class":114},[36,42109,2767],{"class":49},[36,42111,3059],{"class":53},[36,42113,33387],{"class":1997},[36,42115,115],{"class":114},[36,42117,707],{"class":49},[36,42119,40547],{"class":53},[36,42121,42122],{"class":38,"line":4236},[36,42123,40552],{"class":53},[36,42125,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156,42158],{"class":38,"line":4264},[36,42127,40514],{"class":53},[36,42129,33360],{"class":1997},[36,42131,115],{"class":114},[36,42133,34573],{"class":49},[36,42135,3059],{"class":53},[36,42137,33369],{"class":1997},[36,42139,115],{"class":114},[36,42141,34573],{"class":49},[36,42143,3059],{"class":53},[36,42145,33378],{"class":1997},[36,42147,115],{"class":114},[36,42149,2767],{"class":49},[36,42151,3059],{"class":53},[36,42153,33387],{"class":1997},[36,42155,115],{"class":114},[36,42157,707],{"class":49},[36,42159,40547],{"class":53},[36,42161,42162],{"class":38,"line":4269},[36,42163,40552],{"class":53},[36,42165,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190],{"class":38,"line":4286},[36,42167,40597],{"class":53},[36,42169,33378],{"class":1997},[36,42171,115],{"class":114},[36,42173,1188],{"class":49},[36,42175,3059],{"class":53},[36,42177,33433],{"class":1997},[36,42179,115],{"class":114},[36,42181,1188],{"class":49},[36,42183,3059],{"class":53},[36,42185,33387],{"class":1997},[36,42187,115],{"class":114},[36,42189,713],{"class":49},[36,42191,61],{"class":53},[36,42193,42194],{"class":38,"line":4291},[36,42195,40626],{"class":53},[36,42197,42198],{"class":38,"line":4296},[36,42199,40759],{"class":42},[36,42201,42202,42204,42206,42208],{"class":38,"line":4301},[36,42203,33349],{"class":49},[36,42205,40766],{"class":53},[36,42207,115],{"class":114},[36,42209,40509],{"class":53},[36,42211,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232,42234,42236,42238,42240,42242,42244],{"class":38,"line":4315},[36,42213,40514],{"class":53},[36,42215,33360],{"class":1997},[36,42217,115],{"class":114},[36,42219,34573],{"class":49},[36,42221,3059],{"class":53},[36,42223,33369],{"class":1997},[36,42225,115],{"class":114},[36,42227,37370],{"class":49},[36,42229,3059],{"class":53},[36,42231,33378],{"class":1997},[36,42233,115],{"class":114},[36,42235,2767],{"class":49},[36,42237,3059],{"class":53},[36,42239,33387],{"class":1997},[36,42241,115],{"class":114},[36,42243,707],{"class":49},[36,42245,40547],{"class":53},[36,42247,42248],{"class":38,"line":4320},[36,42249,40552],{"class":53},[36,42251,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284],{"class":38,"line":5109},[36,42253,40514],{"class":53},[36,42255,33360],{"class":1997},[36,42257,115],{"class":114},[36,42259,37370],{"class":49},[36,42261,3059],{"class":53},[36,42263,33369],{"class":1997},[36,42265,115],{"class":114},[36,42267,37370],{"class":49},[36,42269,3059],{"class":53},[36,42271,33378],{"class":1997},[36,42273,115],{"class":114},[36,42275,2767],{"class":49},[36,42277,3059],{"class":53},[36,42279,33387],{"class":1997},[36,42281,115],{"class":114},[36,42283,707],{"class":49},[36,42285,40547],{"class":53},[36,42287,42288],{"class":38,"line":5123},[36,42289,40552],{"class":53},[36,42291,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320,42322,42324],{"class":38,"line":5131},[36,42293,40514],{"class":53},[36,42295,33360],{"class":1997},[36,42297,115],{"class":114},[36,42299,37370],{"class":49},[36,42301,3059],{"class":53},[36,42303,33369],{"class":1997},[36,42305,115],{"class":114},[36,42307,37370],{"class":49},[36,42309,3059],{"class":53},[36,42311,33378],{"class":1997},[36,42313,115],{"class":114},[36,42315,2767],{"class":49},[36,42317,3059],{"class":53},[36,42319,33387],{"class":1997},[36,42321,115],{"class":114},[36,42323,707],{"class":49},[36,42325,40547],{"class":53},[36,42327,42328],{"class":38,"line":5136},[36,42329,40552],{"class":53},[36,42331,42332,42334,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356],{"class":38,"line":5142},[36,42333,40597],{"class":53},[36,42335,33378],{"class":1997},[36,42337,115],{"class":114},[36,42339,1188],{"class":49},[36,42341,3059],{"class":53},[36,42343,33433],{"class":1997},[36,42345,115],{"class":114},[36,42347,1188],{"class":49},[36,42349,3059],{"class":53},[36,42351,33387],{"class":1997},[36,42353,115],{"class":114},[36,42355,713],{"class":49},[36,42357,61],{"class":53},[36,42359,42360],{"class":38,"line":5148},[36,42361,40626],{"class":53},[36,42363,42364],{"class":38,"line":5153},[36,42365,40927],{"class":42},[36,42367,42368,42370,42372,42374],{"class":38,"line":10475},[36,42369,33349],{"class":49},[36,42371,40934],{"class":53},[36,42373,115],{"class":114},[36,42375,40509],{"class":53},[36,42377,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410],{"class":38,"line":10499},[36,42379,40514],{"class":53},[36,42381,33360],{"class":1997},[36,42383,115],{"class":114},[36,42385,37370],{"class":49},[36,42387,3059],{"class":53},[36,42389,33369],{"class":1997},[36,42391,115],{"class":114},[36,42393,40957],{"class":49},[36,42395,3059],{"class":53},[36,42397,33378],{"class":1997},[36,42399,115],{"class":114},[36,42401,2767],{"class":49},[36,42403,3059],{"class":53},[36,42405,33387],{"class":1997},[36,42407,115],{"class":114},[36,42409,707],{"class":49},[36,42411,40547],{"class":53},[36,42413,42414],{"class":38,"line":10504},[36,42415,40552],{"class":53},[36,42417,42418,42420,42422,42424,42426,42428,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450],{"class":38,"line":10510},[36,42419,40514],{"class":53},[36,42421,33360],{"class":1997},[36,42423,115],{"class":114},[36,42425,40957],{"class":49},[36,42427,3059],{"class":53},[36,42429,33369],{"class":1997},[36,42431,115],{"class":114},[36,42433,40957],{"class":49},[36,42435,3059],{"class":53},[36,42437,33378],{"class":1997},[36,42439,115],{"class":114},[36,42441,2767],{"class":49},[36,42443,3059],{"class":53},[36,42445,33387],{"class":1997},[36,42447,115],{"class":114},[36,42449,707],{"class":49},[36,42451,40547],{"class":53},[36,42453,42454],{"class":38,"line":10537},[36,42455,40552],{"class":53},[36,42457,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490],{"class":38,"line":10542},[36,42459,40514],{"class":53},[36,42461,33360],{"class":1997},[36,42463,115],{"class":114},[36,42465,40957],{"class":49},[36,42467,3059],{"class":53},[36,42469,33369],{"class":1997},[36,42471,115],{"class":114},[36,42473,40957],{"class":49},[36,42475,3059],{"class":53},[36,42477,33378],{"class":1997},[36,42479,115],{"class":114},[36,42481,2767],{"class":49},[36,42483,3059],{"class":53},[36,42485,33387],{"class":1997},[36,42487,115],{"class":114},[36,42489,707],{"class":49},[36,42491,40547],{"class":53},[36,42493,42494],{"class":38,"line":10548},[36,42495,40552],{"class":53},[36,42497,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522],{"class":38,"line":10560},[36,42499,40597],{"class":53},[36,42501,33378],{"class":1997},[36,42503,115],{"class":114},[36,42505,1188],{"class":49},[36,42507,3059],{"class":53},[36,42509,33433],{"class":1997},[36,42511,115],{"class":114},[36,42513,1188],{"class":49},[36,42515,3059],{"class":53},[36,42517,33387],{"class":1997},[36,42519,115],{"class":114},[36,42521,713],{"class":49},[36,42523,61],{"class":53},[36,42525,42526],{"class":38,"line":10572},[36,42527,40626],{"class":53},[36,42529,42530],{"class":38,"line":10584},[36,42531,41096],{"class":42},[36,42533,42534,42536,42538,42540],{"class":38,"line":12241},[36,42535,33349],{"class":49},[36,42537,41103],{"class":53},[36,42539,115],{"class":114},[36,42541,40509],{"class":53},[36,42543,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576],{"class":38,"line":12266},[36,42545,40514],{"class":53},[36,42547,33360],{"class":1997},[36,42549,115],{"class":114},[36,42551,40957],{"class":49},[36,42553,3059],{"class":53},[36,42555,33369],{"class":1997},[36,42557,115],{"class":114},[36,42559,40957],{"class":49},[36,42561,3059],{"class":53},[36,42563,33378],{"class":1997},[36,42565,115],{"class":114},[36,42567,2767],{"class":49},[36,42569,3059],{"class":53},[36,42571,33387],{"class":1997},[36,42573,115],{"class":114},[36,42575,707],{"class":49},[36,42577,40547],{"class":53},[36,42579,42580],{"class":38,"line":12289},[36,42581,40552],{"class":53},[36,42583,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616],{"class":38,"line":12313},[36,42585,40514],{"class":53},[36,42587,33360],{"class":1997},[36,42589,115],{"class":114},[36,42591,40957],{"class":49},[36,42593,3059],{"class":53},[36,42595,33369],{"class":1997},[36,42597,115],{"class":114},[36,42599,40957],{"class":49},[36,42601,3059],{"class":53},[36,42603,33378],{"class":1997},[36,42605,115],{"class":114},[36,42607,2767],{"class":49},[36,42609,3059],{"class":53},[36,42611,33387],{"class":1997},[36,42613,115],{"class":114},[36,42615,707],{"class":49},[36,42617,40547],{"class":53},[36,42619,42620],{"class":38,"line":12318},[36,42621,40552],{"class":53},[36,42623,42624,42626,42628,42630,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":38,"line":12323},[36,42625,40514],{"class":53},[36,42627,33360],{"class":1997},[36,42629,115],{"class":114},[36,42631,40957],{"class":49},[36,42633,3059],{"class":53},[36,42635,33369],{"class":1997},[36,42637,115],{"class":114},[36,42639,40957],{"class":49},[36,42641,3059],{"class":53},[36,42643,33378],{"class":1997},[36,42645,115],{"class":114},[36,42647,2767],{"class":49},[36,42649,3059],{"class":53},[36,42651,33387],{"class":1997},[36,42653,115],{"class":114},[36,42655,707],{"class":49},[36,42657,40547],{"class":53},[36,42659,42660],{"class":38,"line":12328},[36,42661,40552],{"class":53},[36,42663,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688],{"class":38,"line":12337},[36,42665,40597],{"class":53},[36,42667,33378],{"class":1997},[36,42669,115],{"class":114},[36,42671,1188],{"class":49},[36,42673,3059],{"class":53},[36,42675,33433],{"class":1997},[36,42677,115],{"class":114},[36,42679,1188],{"class":49},[36,42681,3059],{"class":53},[36,42683,33387],{"class":1997},[36,42685,115],{"class":114},[36,42687,713],{"class":49},[36,42689,61],{"class":53},[36,42691,42692],{"class":38,"line":12342},[36,42693,40626],{"class":53},[36,42695,42696],{"class":38,"line":12348},[36,42697,41264],{"class":42},[36,42699,42700,42702,42704,42706],{"class":38,"line":12369},[36,42701,33349],{"class":49},[36,42703,41271],{"class":53},[36,42705,115],{"class":114},[36,42707,40509],{"class":53},[36,42709,42710],{"class":38,"line":12375},[36,42711,41280],{"class":42},[36,42713,42714],{"class":38,"line":12389},[36,42715,41285],{"class":42},[36,42717,42718],{"class":38,"line":12395},[36,42719,41290],{"class":53},[36,42721,42722,42724,42726,42728,42730,42732,42734,42736,42738],{"class":38,"line":12422},[36,42723,41295],{"class":53},[36,42725,3050],{"class":49},[36,42727,1050],{"class":114},[36,42729,3050],{"class":49},[36,42731,1050],{"class":114},[36,42733,40957],{"class":49},[36,42735,3059],{"class":53},[36,42737,37370],{"class":49},[36,42739,40547],{"class":53},[36,42741,42742],{"class":38,"line":12431},[36,42743,40552],{"class":53},[36,42745,42746,42748,42750,42752,42754],{"class":38,"line":12437},[36,42747,41295],{"class":53},[36,42749,37370],{"class":49},[36,42751,3059],{"class":53},[36,42753,34573],{"class":49},[36,42755,40547],{"class":53},[36,42757,42758],{"class":38,"line":12445},[36,42759,40552],{"class":53},[36,42761,42762,42764,42766,42768,42770],{"class":38,"line":12450},[36,42763,41295],{"class":53},[36,42765,34573],{"class":49},[36,42767,3059],{"class":53},[36,42769,1317],{"class":49},[36,42771,61],{"class":53},[36,42773,42774],{"class":38,"line":19122},[36,42775,40626],{"class":53},[36,42777,42778],{"class":38,"line":19128},[36,42779,546],{"emptyLinePlaceholder":545},[36,42781,42782],{"class":38,"line":19151},[36,42783,41356],{"class":42},[36,42785,42786],{"class":38,"line":19157},[36,42787,41361],{"class":42},[36,42789,42790,42792,42794,42796,42798],{"class":38,"line":19180},[36,42791,5934],{"class":114},[36,42793,41368],{"class":53},[36,42795,28556],{"class":114},[36,42797,41373],{"class":49},[36,42799,41376],{"class":53},[36,42801,42802],{"class":38,"line":19194},[36,42803,41381],{"class":42},[36,42805,42806,42808,42810],{"class":38,"line":19214},[36,42807,7173],{"class":114},[36,42809,41388],{"class":49},[36,42811,41391],{"class":53},[36,42813,42814],{"class":38,"line":19220},[36,42815,41396],{"class":42},[36,42817,42818,42820,42822,42824,42826],{"class":38,"line":19231},[36,42819,41401],{"class":53},[36,42821,41404],{"class":1997},[36,42823,115],{"class":114},[36,42825,41409],{"class":57},[36,42827,61],{"class":53},[36,42829,42830],{"class":38,"line":19254},[36,42831,41416],{"class":42},[36,42833,42834,42836,42838,42840,42842,42844],{"class":38,"line":19276},[36,42835,41421],{"class":114},[36,42837,41424],{"class":53},[36,42839,41427],{"class":114},[36,42841,41430],{"class":114},[36,42843,41433],{"class":49},[36,42845,6270],{"class":53},[36,42847,42848],{"class":38,"line":19281},[36,42849,41440],{"class":42},[36,42851,42852,42854,42856],{"class":38,"line":19287},[36,42853,41445],{"class":53},[36,42855,713],{"class":49},[36,42857,61],{"class":53},[36,42859,42860],{"class":38,"line":19301},[36,42861,41454],{"class":42},[36,42863,42864,42866,42868],{"class":38,"line":19314},[36,42865,41459],{"class":114},[36,42867,41388],{"class":49},[36,42869,41464],{"class":53},[36,42871,42872],{"class":38,"line":19319},[36,42873,41469],{"class":42},[36,42875,42876],{"class":38,"line":19333},[36,42877,41474],{"class":42},[36,42879,42880,42882,42884,42886,42888],{"class":38,"line":19338},[36,42881,41479],{"class":53},[36,42883,713],{"class":49},[36,42885,3059],{"class":53},[36,42887,41486],{"class":49},[36,42889,61],{"class":53},[36,42891,42892],{"class":38,"line":19344},[36,42893,41493],{"class":42},[36,42895,42896,42898,42900,42902,42904,42906],{"class":38,"line":19349},[36,42897,41421],{"class":114},[36,42899,41424],{"class":53},[36,42901,41427],{"class":114},[36,42903,41430],{"class":114},[36,42905,41433],{"class":49},[36,42907,6270],{"class":53},[36,42909,42910,42912,42914],{"class":38,"line":19363},[36,42911,41445],{"class":53},[36,42913,713],{"class":49},[36,42915,61],{"class":53},[36,42917,42918],{"class":38,"line":19368},[36,42919,546],{"emptyLinePlaceholder":545},[36,42921,42922],{"class":38,"line":19373},[36,42923,37665],{"class":42},[36,42925,42926,42928,42930],{"class":38,"line":19387},[36,42927,33305],{"class":114},[36,42929,33597],{"class":4500},[36,42931,33600],{"class":53},[36,42933,42934,42936,42938,42940],{"class":38,"line":19399},[36,42935,33605],{"class":53},[36,42937,115],{"class":114},[36,42939,33327],{"class":49},[36,42941,41542],{"class":53},[36,42943,42944,42946,42948,42950],{"class":38,"line":19404},[36,42945,33605],{"class":53},[36,42947,115],{"class":114},[36,42949,33327],{"class":49},[36,42951,41553],{"class":53},[36,42953,42954,42956,42958,42960],{"class":38,"line":19417},[36,42955,33605],{"class":53},[36,42957,115],{"class":114},[36,42959,33327],{"class":49},[36,42961,41564],{"class":53},[36,42963,42964,42966,42968,42970],{"class":38,"line":19422},[36,42965,33605],{"class":53},[36,42967,115],{"class":114},[36,42969,33327],{"class":49},[36,42971,41575],{"class":53},[36,42973,42974,42976,42978,42980],{"class":38,"line":19427},[36,42975,33605],{"class":53},[36,42977,115],{"class":114},[36,42979,33327],{"class":49},[36,42981,41586],{"class":53},[36,42983,42984,42986,42988,42990],{"class":38,"line":19432},[36,42985,33605],{"class":53},[36,42987,115],{"class":114},[36,42989,33327],{"class":49},[36,42991,41597],{"class":53},[36,42993,42994,42996],{"class":38,"line":19445},[36,42995,17273],{"class":114},[36,42997,33713],{"class":53},[36,42999,43000],{"class":38,"line":19450},[36,43001,546],{"emptyLinePlaceholder":545},[36,43003,43004],{"class":38,"line":35135},[36,43005,41612],{"class":42},[36,43007,43008,43010,43012,43014,43016],{"class":38,"line":35141},[36,43009,4069],{"class":114},[36,43011,33724],{"class":49},[36,43013,1377],{"class":114},[36,43015,41623],{"class":57},[36,43017,6270],{"class":53},[36,43019,43020,43022,43024,43026,43028,43030,43032,43034,43036],{"class":38,"line":35147},[36,43021,33741],{"class":53},[36,43023,115],{"class":114},[36,43025,32957],{"class":53},[36,43027,33748],{"class":57},[36,43029,4242],{"class":114},[36,43031,33753],{"class":53},[36,43033,4239],{"class":114},[36,43035,32981],{"class":57},[36,43037,61],{"class":53},[36,43039,43040,43042],{"class":38,"line":35153},[36,43041,33803],{"class":49},[36,43043,32990],{"class":53},[36,43045,43046,43048,43050],{"class":38,"line":35159},[36,43047,33793],{"class":53},[36,43049,115],{"class":114},[36,43051,41660],{"class":53},[36,43053,43054,43056,43058,43060,43062,43064,43066,43068],{"class":38,"line":35170},[36,43055,33803],{"class":49},[36,43057,33806],{"class":53},[36,43059,707],{"class":49},[36,43061,3059],{"class":53},[36,43063,34004],{"class":49},[36,43065,3059],{"class":53},[36,43067,34004],{"class":49},[36,43069,33819],{"class":53},[433,43071,43072],{"start":82},[436,43073,43074],{},"测试代码",[26,43076,43078],{"className":28,"code":43077,"language":30,"meta":31,"style":31},"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",[33,43079,43080,43086,43096,43106,43110,43120,43131,43135,43139,43143,43151,43167,43177,43193,43203,43217,43221,43231,43241,43251,43257,43261,43265,43273,43277,43293,43301,43305,43309,43317,43325,43329,43333,43337,43341,43347,43351,43361,43369,43377,43381,43385,43389,43397,43401,43417,43421,43425,43429,43441,43445,43457,43461,43465,43477,43481,43491,43495,43499,43511,43515,43524,43528,43532,43540,43544,43552,43556,43560,43564,43568,43572,43588,43596,43600,43604,43652,43658,43662,43672,43680,43688,43692,43696,43700,43704,43712,43716,43732,43736,43744,43752],{"__ignoreMap":31},[36,43081,43082,43084],{"class":38,"line":39},[36,43083,537],{"class":114},[36,43085,32902],{"class":53},[36,43087,43088,43090,43092,43094],{"class":38,"line":46},[36,43089,537],{"class":114},[36,43091,33919],{"class":53},[36,43093,33887],{"class":114},[36,43095,33924],{"class":53},[36,43097,43098,43100,43102,43104],{"class":38,"line":82},[36,43099,33241],{"class":114},[36,43101,33902],{"class":53},[36,43103,537],{"class":114},[36,43105,33907],{"class":53},[36,43107,43108],{"class":38,"line":88},[36,43109,36423],{"class":42},[36,43111,43112,43114,43116,43118],{"class":38,"line":195},[36,43113,33241],{"class":114},[36,43115,33872],{"class":53},[36,43117,537],{"class":114},[36,43119,33877],{"class":53},[36,43121,43122,43124,43126,43128],{"class":38,"line":1517},[36,43123,33241],{"class":114},[36,43125,34417],{"class":53},[36,43127,537],{"class":114},[36,43129,43130],{"class":49}," VGG16\n",[36,43132,43133],{"class":38,"line":2421},[36,43134,546],{"emptyLinePlaceholder":545},[36,43136,43137],{"class":38,"line":2446},[36,43138,546],{"emptyLinePlaceholder":545},[36,43140,43141],{"class":38,"line":2469},[36,43142,36452],{"class":42},[36,43144,43145,43147,43149],{"class":38,"line":2492},[36,43146,34450],{"class":114},[36,43148,36459],{"class":4500},[36,43150,34456],{"class":53},[36,43152,43153,43155,43157,43159,43161,43163,43165],{"class":38,"line":4150},[36,43154,36466],{"class":53},[36,43156,115],{"class":114},[36,43158,33959],{"class":53},[36,43160,33962],{"class":1997},[36,43162,115],{"class":114},[36,43164,33967],{"class":57},[36,43166,33970],{"class":53},[36,43168,43169,43171,43173,43175],{"class":38,"line":4155},[36,43170,36483],{"class":1997},[36,43172,115],{"class":114},[36,43174,276],{"class":49},[36,43176,33970],{"class":53},[36,43178,43179,43181,43183,43185,43187,43189,43191],{"class":38,"line":4161},[36,43180,36494],{"class":1997},[36,43182,115],{"class":114},[36,43184,33996],{"class":53},[36,43186,33999],{"class":1997},[36,43188,115],{"class":114},[36,43190,34004],{"class":49},[36,43192,34007],{"class":53},[36,43194,43195,43197,43199,43201],{"class":38,"line":4166},[36,43196,36511],{"class":1997},[36,43198,115],{"class":114},[36,43200,189],{"class":49},[36,43202,61],{"class":53},[36,43204,43205,43207,43209,43211,43213,43215],{"class":38,"line":4180},[36,43206,36522],{"class":53},[36,43208,115],{"class":114},[36,43210,34037],{"class":53},[36,43212,34040],{"class":1997},[36,43214,115],{"class":114},[36,43216,36533],{"class":53},[36,43218,43219],{"class":38,"line":4185},[36,43220,36538],{"class":42},[36,43222,43223,43225,43227,43229],{"class":38,"line":4191},[36,43224,36543],{"class":1997},[36,43226,115],{"class":114},[36,43228,707],{"class":49},[36,43230,33970],{"class":53},[36,43232,43233,43235,43237,43239],{"class":38,"line":4212},[36,43234,36554],{"class":1997},[36,43236,115],{"class":114},[36,43238,189],{"class":49},[36,43240,33970],{"class":53},[36,43242,43243,43245,43247,43249],{"class":38,"line":4217},[36,43244,36565],{"class":1997},[36,43246,115],{"class":114},[36,43248,713],{"class":49},[36,43250,61],{"class":53},[36,43252,43253,43255],{"class":38,"line":4231},[36,43254,6621],{"class":114},[36,43256,36578],{"class":53},[36,43258,43259],{"class":38,"line":4236},[36,43260,546],{"emptyLinePlaceholder":545},[36,43262,43263],{"class":38,"line":4264},[36,43264,36587],{"class":42},[36,43266,43267,43269,43271],{"class":38,"line":4269},[36,43268,34450],{"class":114},[36,43270,36594],{"class":4500},[36,43272,36597],{"class":53},[36,43274,43275],{"class":38,"line":4286},[36,43276,36602],{"class":42},[36,43278,43279,43281,43283,43285,43287,43289,43291],{"class":38,"line":4291},[36,43280,33741],{"class":53},[36,43282,115],{"class":114},[36,43284,33748],{"class":57},[36,43286,4242],{"class":114},[36,43288,33753],{"class":53},[36,43290,4239],{"class":114},[36,43292,36619],{"class":57},[36,43294,43295,43297,43299],{"class":38,"line":4296},[36,43296,33793],{"class":53},[36,43298,115],{"class":114},[36,43300,34792],{"class":53},[36,43302,43303],{"class":38,"line":4301},[36,43304,546],{"emptyLinePlaceholder":545},[36,43306,43307],{"class":38,"line":4315},[36,43308,36636],{"class":42},[36,43310,43311,43313,43315],{"class":38,"line":4320},[36,43312,36641],{"class":53},[36,43314,115],{"class":114},[36,43316,34845],{"class":49},[36,43318,43319,43321,43323],{"class":38,"line":5109},[36,43320,36650],{"class":53},[36,43322,115],{"class":114},[36,43324,5616],{"class":49},[36,43326,43327],{"class":38,"line":5123},[36,43328,546],{"emptyLinePlaceholder":545},[36,43330,43331],{"class":38,"line":5131},[36,43332,36663],{"class":42},[36,43334,43335],{"class":38,"line":5136},[36,43336,36668],{"class":42},[36,43338,43339],{"class":38,"line":5142},[36,43340,36673],{"class":42},[36,43342,43343,43345],{"class":38,"line":5148},[36,43344,36678],{"class":114},[36,43346,35386],{"class":53},[36,43348,43349],{"class":38,"line":5153},[36,43350,36685],{"class":42},[36,43352,43353,43355,43357,43359],{"class":38,"line":10475},[36,43354,5934],{"class":114},[36,43356,36692],{"class":53},[36,43358,28556],{"class":114},[36,43360,36697],{"class":53},[36,43362,43363,43365,43367],{"class":38,"line":10499},[36,43364,36702],{"class":53},[36,43366,115],{"class":114},[36,43368,36707],{"class":53},[36,43370,43371,43373,43375],{"class":38,"line":10504},[36,43372,36712],{"class":53},[36,43374,115],{"class":114},[36,43376,36717],{"class":53},[36,43378,43379],{"class":38,"line":10510},[36,43380,36722],{"class":42},[36,43382,43383],{"class":38,"line":10537},[36,43384,35377],{"class":53},[36,43386,43387],{"class":38,"line":10542},[36,43388,36731],{"class":42},[36,43390,43391,43393,43395],{"class":38,"line":10548},[36,43392,35162],{"class":53},[36,43394,115],{"class":114},[36,43396,36740],{"class":53},[36,43398,43399],{"class":38,"line":10560},[36,43400,36745],{"class":42},[36,43402,43403,43405,43407,43409,43411,43413,43415],{"class":38,"line":10572},[36,43404,35179],{"class":53},[36,43406,115],{"class":114},[36,43408,35184],{"class":53},[36,43410,35187],{"class":1997},[36,43412,115],{"class":114},[36,43414,707],{"class":49},[36,43416,61],{"class":53},[36,43418,43419],{"class":38,"line":10584},[36,43420,36766],{"class":42},[36,43422,43423],{"class":38,"line":12241},[36,43424,36771],{"class":42},[36,43426,43427],{"class":38,"line":12266},[36,43428,36776],{"class":42},[36,43430,43431,43433,43435,43437,43439],{"class":38,"line":12289},[36,43432,36781],{"class":53},[36,43434,1224],{"class":114},[36,43436,35289],{"class":53},[36,43438,1377],{"class":114},[36,43440,36790],{"class":53},[36,43442,43443],{"class":38,"line":12313},[36,43444,36795],{"class":42},[36,43446,43447,43449,43451,43453,43455],{"class":38,"line":12318},[36,43448,36800],{"class":53},[36,43450,1224],{"class":114},[36,43452,36805],{"class":53},[36,43454,713],{"class":49},[36,43456,61],{"class":53},[36,43458,43459],{"class":38,"line":12323},[36,43460,546],{"emptyLinePlaceholder":545},[36,43462,43463],{"class":38,"line":12328},[36,43464,36818],{"class":42},[36,43466,43467,43469,43471,43473,43475],{"class":38,"line":12337},[36,43468,36823],{"class":53},[36,43470,115],{"class":114},[36,43472,36828],{"class":53},[36,43474,1065],{"class":114},[36,43476,36833],{"class":53},[36,43478,43479],{"class":38,"line":12342},[36,43480,36838],{"class":42},[36,43482,43483,43485,43487,43489],{"class":38,"line":12348},[36,43484,34954],{"class":49},[36,43486,54],{"class":53},[36,43488,36847],{"class":57},[36,43490,36850],{"class":53},[36,43492,43493],{"class":38,"line":12369},[36,43494,546],{"emptyLinePlaceholder":545},[36,43496,43497],{"class":38,"line":12375},[36,43498,36859],{"class":42},[36,43500,43501,43503,43505,43507,43509],{"class":38,"line":12389},[36,43502,4069],{"class":114},[36,43504,33724],{"class":49},[36,43506,1377],{"class":114},[36,43508,33729],{"class":57},[36,43510,6270],{"class":53},[36,43512,43513],{"class":38,"line":12395},[36,43514,36876],{"class":42},[36,43516,43517,43519,43521],{"class":38,"line":12422},[36,43518,33793],{"class":53},[36,43520,115],{"class":114},[36,43522,43523],{"class":53},"VGG16()\n",[36,43525,43526],{"class":38,"line":12431},[36,43527,36889],{"class":42},[36,43529,43530],{"class":38,"line":12437},[36,43531,36894],{"class":42},[36,43533,43534,43536,43538],{"class":38,"line":12445},[36,43535,36899],{"class":53},[36,43537,36902],{"class":57},[36,43539,625],{"class":53},[36,43541,43542],{"class":38,"line":12450},[36,43543,36909],{"class":42},[36,43545,43546,43548,43550],{"class":38,"line":19122},[36,43547,36522],{"class":53},[36,43549,115],{"class":114},[36,43551,36918],{"class":53},[36,43553,43554],{"class":38,"line":19128},[36,43555,36923],{"class":42},[36,43557,43558],{"class":38,"line":19151},[36,43559,36928],{"class":53},[36,43561,43562],{"class":38,"line":19157},[36,43563,546],{"emptyLinePlaceholder":545},[36,43565,43566],{"class":38,"line":19180},[36,43567,36937],{"class":42},[36,43569,43570],{"class":38,"line":19194},[36,43571,36942],{"class":42},[36,43573,43574,43576,43578,43580,43582,43584,43586],{"class":38,"line":19214},[36,43575,33741],{"class":53},[36,43577,115],{"class":114},[36,43579,33748],{"class":57},[36,43581,4242],{"class":114},[36,43583,33753],{"class":53},[36,43585,4239],{"class":114},[36,43587,36619],{"class":57},[36,43589,43590,43592,43594],{"class":38,"line":19220},[36,43591,33793],{"class":53},[36,43593,115],{"class":114},[36,43595,34792],{"class":53},[36,43597,43598],{"class":38,"line":19231},[36,43599,36971],{"class":42},[36,43601,43602],{"class":38,"line":19254},[36,43603,36976],{"class":42},[36,43605,43606,43608,43610,43612,43614,43616,43618,43620,43622,43624,43626,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648,43650],{"class":38,"line":19276},[36,43607,36981],{"class":53},[36,43609,115],{"class":114},[36,43611,3566],{"class":53},[36,43613,36988],{"class":57},[36,43615,3059],{"class":53},[36,43617,36993],{"class":57},[36,43619,3059],{"class":53},[36,43621,36998],{"class":57},[36,43623,3059],{"class":53},[36,43625,37003],{"class":57},[36,43627,3059],{"class":53},[36,43629,37008],{"class":57},[36,43631,3059],{"class":53},[36,43633,37013],{"class":57},[36,43635,3059],{"class":53},[36,43637,37018],{"class":57},[36,43639,3059],{"class":53},[36,43641,37023],{"class":57},[36,43643,3059],{"class":53},[36,43645,37028],{"class":57},[36,43647,3059],{"class":53},[36,43649,37033],{"class":57},[36,43651,35748],{"class":53},[36,43653,43654,43656],{"class":38,"line":19281},[36,43655,36678],{"class":114},[36,43657,35386],{"class":53},[36,43659,43660],{"class":38,"line":19287},[36,43661,37046],{"class":42},[36,43663,43664,43666,43668,43670],{"class":38,"line":19301},[36,43665,5934],{"class":114},[36,43667,37053],{"class":53},[36,43669,28556],{"class":114},[36,43671,36697],{"class":53},[36,43673,43674,43676,43678],{"class":38,"line":19314},[36,43675,35112],{"class":53},[36,43677,115],{"class":114},[36,43679,35117],{"class":53},[36,43681,43682,43684,43686],{"class":38,"line":19319},[36,43683,35127],{"class":53},[36,43685,115],{"class":114},[36,43687,35132],{"class":53},[36,43689,43690],{"class":38,"line":19333},[36,43691,546],{"emptyLinePlaceholder":545},[36,43693,43694],{"class":38,"line":19338},[36,43695,37082],{"class":42},[36,43697,43698],{"class":38,"line":19344},[36,43699,35377],{"class":53},[36,43701,43702],{"class":38,"line":19349},[36,43703,37091],{"class":42},[36,43705,43706,43708,43710],{"class":38,"line":19363},[36,43707,35162],{"class":53},[36,43709,115],{"class":114},[36,43711,35167],{"class":53},[36,43713,43714],{"class":38,"line":19368},[36,43715,37104],{"class":42},[36,43717,43718,43720,43722,43724,43726,43728,43730],{"class":38,"line":19373},[36,43719,35179],{"class":53},[36,43721,115],{"class":114},[36,43723,35184],{"class":53},[36,43725,35187],{"class":1997},[36,43727,115],{"class":114},[36,43729,707],{"class":49},[36,43731,61],{"class":53},[36,43733,43734],{"class":38,"line":19387},[36,43735,37125],{"class":42},[36,43737,43738,43740,43742],{"class":38,"line":19399},[36,43739,37130],{"class":53},[36,43741,115],{"class":114},[36,43743,37135],{"class":53},[36,43745,43746,43748,43750],{"class":38,"line":19404},[36,43747,37140],{"class":53},[36,43749,115],{"class":114},[36,43751,37145],{"class":53},[36,43753,43754,43756,43758,43760,43762,43764,43766,43768],{"class":38,"line":19417},[36,43755,37150],{"class":49},[36,43757,54],{"class":53},[36,43759,37155],{"class":57},[36,43761,37158],{"class":53},[36,43763,37161],{"class":57},[36,43765,3059],{"class":53},[36,43767,37166],{"class":57},[36,43769,37169],{"class":53},[997,43771,43773],{"id":43772},"_23googlenet","2.3.GoogLeNet",[24515,43775,43777],{"id":43776},"_231原理","2.3.1.原理",[433,43779,43780],{},[436,43781,43782],{},"网络结构",[19,43784,43785],{},[4000,43786],{"alt":31,"src":43787},"\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,43789,43790],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43792,43793],{},[4000,43794],{"alt":31,"src":43795},"\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,43797,43798],{},[4000,43799],{"alt":31,"src":43800},"\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,43802,43803],{},[4000,43804],{"alt":31,"src":43805},"\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",[433,43807,43808],{"start":46},[436,43809,43810],{},"1x1卷积的优点",[19,43812,43813],{},[4000,43814],{"alt":31,"src":43815},"\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",[433,43817,43818],{"start":82},[436,43819,43820],{},"全局平均池化层优点",[19,43822,43823],{},[4000,43824],{"alt":31,"src":43825},"\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,43827,43828],{},[4000,43829],{"alt":31,"src":43830},"\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",[433,43832,43833],{"start":88},[436,43834,43835],{},"参数详细描述",[19,43837,43838],{},[4000,43839],{"alt":31,"src":43840},"\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,43842,43843],{},[4000,43844],{"alt":31,"src":43845},"\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,43847,43848],{},[4000,43849],{"alt":31,"src":43850},"\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,43852,43853],{},[4000,43854],{"alt":31,"src":43855},"\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,43857,43858],{},[4000,43859],{"alt":31,"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-034.png",[19,43862,43863],{},[4000,43864],{"alt":31,"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-035.png",[19,43867,43868],{},[4000,43869],{"alt":31,"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-036.png",[19,43872,43873],{},[4000,43874],{"alt":31,"src":43875},"\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,43877,43878],{},[4000,43879],{"alt":31,"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-038.png",[19,43882,43883],{},[4000,43884],{"alt":31,"src":43885},"\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,43887,43888],{},[4000,43889],{"alt":31,"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-040.png",[19,43892,43893],{},[4000,43894],{"alt":31,"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-041.png",[19,43897,43898],{},[4000,43899],{"alt":31,"src":43900},"\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,43902,43903],{},[4000,43904],{"alt":31,"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-043.png",[19,43907,43908],{},[4000,43909],{"alt":31,"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-044.png",[19,43912,43913],{},[4000,43914],{"alt":31,"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-045.png",[19,43917,43918],{},[4000,43919],{"alt":31,"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-046.png",[19,43922,43923],{},[4000,43924],{"alt":31,"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-047.png",[19,43927,43928],{},[4000,43929],{"alt":31,"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-048.png",[19,43932,43933],{},[4000,43934],{"alt":31,"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-049.png",[19,43937,43938],{},[4000,43939],{"alt":31,"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-050.png",[24515,43942,43944],{"id":43943},"_232代码实现","2.3.2.代码实现",[433,43946,43947],{},[436,43948,33215],{},[19,43950,43951],{},"根据原理一步一步搭建即可",[26,43953,43955],{"className":28,"code":43954,"language":30,"meta":31,"style":31},"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",[33,43956,43957,43963,43973,43983,43987,44004,44013,44028,44038,44043,44076,44081,44118,44165,44170,44206,44253,44258,44263,44298,44330,44334,44342,44358,44382,44407,44428,44433,44448,44452,44456,44461,44478,44483,44492,44507,44518,44562,44566,44594,44598,44609,44637,44641,44678,44682,44710,44714,44725,44761,44793,44821,44825,44836,44870,44902,44934,44967,45001,45029,45033,45044,45077,45109,45123,45127,45140,45144,45149,45161,45169,45191,45196,45201,45206,45211,45216,45221,45235,45243,45252,45265,45280,45289,45293,45301,45312,45323,45334,45345,45356,45362,45366,45371,45383,45403,45412],{"__ignoreMap":31},[36,43958,43959,43961],{"class":38,"line":39},[36,43960,537],{"class":114},[36,43962,32902],{"class":53},[36,43964,43965,43967,43969,43971],{"class":38,"line":46},[36,43966,33241],{"class":114},[36,43968,33244],{"class":53},[36,43970,537],{"class":114},[36,43972,33249],{"class":53},[36,43974,43975,43977,43979,43981],{"class":38,"line":82},[36,43976,33241],{"class":114},[36,43978,33261],{"class":53},[36,43980,537],{"class":114},[36,43982,33266],{"class":53},[36,43984,43985],{"class":38,"line":88},[36,43986,546],{"emptyLinePlaceholder":545},[36,43988,43989,43991,43994,43996,43998,44000,44002],{"class":38,"line":195},[36,43990,519],{"class":114},[36,43992,43993],{"class":4500}," Inception",[36,43995,54],{"class":53},[36,43997,33282],{"class":4500},[36,43999,3235],{"class":53},[36,44001,33287],{"class":4500},[36,44003,33290],{"class":53},[36,44005,44006,44008,44010],{"class":38,"line":1517},[36,44007,33305],{"class":114},[36,44009,33308],{"class":49},[36,44011,44012],{"class":53},"(self,in_channels,c1,c2,c3,c4):\n",[36,44014,44015,44017,44020,44022,44024,44026],{"class":38,"line":2421},[36,44016,33321],{"class":49},[36,44018,44019],{"class":53},"(Inception,",[36,44021,33327],{"class":49},[36,44023,33330],{"class":53},[36,44025,33333],{"class":49},[36,44027,4513],{"class":53},[36,44029,44030,44032,44034,44036],{"class":38,"line":2446},[36,44031,33349],{"class":49},[36,44033,37271],{"class":53},[36,44035,115],{"class":114},[36,44037,37276],{"class":53},[36,44039,44040],{"class":38,"line":2469},[36,44041,44042],{"class":42},"        # 路线1：定义1*1卷积\n",[36,44044,44045,44047,44050,44052,44054,44056,44058,44061,44063,44065,44068,44070,44072,44074],{"class":38,"line":2492},[36,44046,33349],{"class":49},[36,44048,44049],{"class":53},".p1_1",[36,44051,115],{"class":114},[36,44053,33357],{"class":53},[36,44055,33360],{"class":1997},[36,44057,115],{"class":114},[36,44059,44060],{"class":53},"in_channels,",[36,44062,33369],{"class":1997},[36,44064,115],{"class":114},[36,44066,44067],{"class":53},"c1,",[36,44069,33378],{"class":1997},[36,44071,115],{"class":114},[36,44073,707],{"class":49},[36,44075,61],{"class":53},[36,44077,44078],{"class":38,"line":4150},[36,44079,44080],{"class":42},"        # 路线2：定义1*1卷积和3*3\n",[36,44082,44083,44085,44088,44090,44092,44094,44096,44098,44100,44102,44105,44107,44110,44112,44114,44116],{"class":38,"line":4155},[36,44084,33349],{"class":49},[36,44086,44087],{"class":53},".p2_1",[36,44089,115],{"class":114},[36,44091,33357],{"class":53},[36,44093,33360],{"class":1997},[36,44095,115],{"class":114},[36,44097,44060],{"class":53},[36,44099,33369],{"class":1997},[36,44101,115],{"class":114},[36,44103,44104],{"class":53},"c2[",[36,44106,713],{"class":49},[36,44108,44109],{"class":53},"],",[36,44111,33378],{"class":1997},[36,44113,115],{"class":114},[36,44115,707],{"class":49},[36,44117,61],{"class":53},[36,44119,44120,44122,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163],{"class":38,"line":4161},[36,44121,33349],{"class":49},[36,44123,44124],{"class":53},".p2_2",[36,44126,115],{"class":114},[36,44128,33357],{"class":53},[36,44130,33360],{"class":1997},[36,44132,115],{"class":114},[36,44134,44104],{"class":53},[36,44136,713],{"class":49},[36,44138,44109],{"class":53},[36,44140,33369],{"class":1997},[36,44142,115],{"class":114},[36,44144,44104],{"class":53},[36,44146,707],{"class":49},[36,44148,44109],{"class":53},[36,44150,33378],{"class":1997},[36,44152,115],{"class":114},[36,44154,2767],{"class":49},[36,44156,3059],{"class":53},[36,44158,33387],{"class":1997},[36,44160,115],{"class":114},[36,44162,707],{"class":49},[36,44164,61],{"class":53},[36,44166,44167],{"class":38,"line":4166},[36,44168,44169],{"class":42},"        # 路线3：定义1*1卷积和5*5\n",[36,44171,44172,44174,44177,44179,44181,44183,44185,44187,44189,44191,44194,44196,44198,44200,44202,44204],{"class":38,"line":4180},[36,44173,33349],{"class":49},[36,44175,44176],{"class":53},".p3_1",[36,44178,115],{"class":114},[36,44180,33357],{"class":53},[36,44182,33360],{"class":1997},[36,44184,115],{"class":114},[36,44186,44060],{"class":53},[36,44188,33369],{"class":1997},[36,44190,115],{"class":114},[36,44192,44193],{"class":53},"c3[",[36,44195,713],{"class":49},[36,44197,44109],{"class":53},[36,44199,33378],{"class":1997},[36,44201,115],{"class":114},[36,44203,707],{"class":49},[36,44205,61],{"class":53},[36,44207,44208,44210,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251],{"class":38,"line":4185},[36,44209,33349],{"class":49},[36,44211,44212],{"class":53},".p3_2",[36,44214,115],{"class":114},[36,44216,33357],{"class":53},[36,44218,33360],{"class":1997},[36,44220,115],{"class":114},[36,44222,44193],{"class":53},[36,44224,713],{"class":49},[36,44226,44109],{"class":53},[36,44228,33369],{"class":1997},[36,44230,115],{"class":114},[36,44232,44193],{"class":53},[36,44234,707],{"class":49},[36,44236,44109],{"class":53},[36,44238,33378],{"class":1997},[36,44240,115],{"class":114},[36,44242,1134],{"class":49},[36,44244,3059],{"class":53},[36,44246,33387],{"class":1997},[36,44248,115],{"class":114},[36,44250,1188],{"class":49},[36,44252,61],{"class":53},[36,44254,44255],{"class":38,"line":4191},[36,44256,44257],{"class":42},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,44259,44260],{"class":38,"line":4212},[36,44261,44262],{"class":42},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,44264,44265,44267,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288,44290,44292,44294,44296],{"class":38,"line":4217},[36,44266,33349],{"class":49},[36,44268,44269],{"class":53},".p4_1",[36,44271,115],{"class":114},[36,44273,37329],{"class":53},[36,44275,33378],{"class":1997},[36,44277,115],{"class":114},[36,44279,2767],{"class":49},[36,44281,3059],{"class":53},[36,44283,33433],{"class":1997},[36,44285,115],{"class":114},[36,44287,707],{"class":49},[36,44289,3059],{"class":53},[36,44291,33387],{"class":1997},[36,44293,115],{"class":114},[36,44295,707],{"class":49},[36,44297,61],{"class":53},[36,44299,44300,44302,44305,44307,44309,44311,44313,44315,44317,44319,44322,44324,44326,44328],{"class":38,"line":4231},[36,44301,33349],{"class":49},[36,44303,44304],{"class":53},".p4_2",[36,44306,115],{"class":114},[36,44308,33357],{"class":53},[36,44310,33360],{"class":1997},[36,44312,115],{"class":114},[36,44314,44060],{"class":53},[36,44316,33369],{"class":1997},[36,44318,115],{"class":114},[36,44320,44321],{"class":53},"c4,",[36,44323,33378],{"class":1997},[36,44325,115],{"class":114},[36,44327,707],{"class":49},[36,44329,61],{"class":53},[36,44331,44332],{"class":38,"line":4236},[36,44333,546],{"emptyLinePlaceholder":545},[36,44335,44336,44338,44340],{"class":38,"line":4264},[36,44337,33305],{"class":114},[36,44339,33597],{"class":4500},[36,44341,33600],{"class":53},[36,44343,44344,44347,44349,44351,44353,44355],{"class":38,"line":4269},[36,44345,44346],{"class":53},"        p1",[36,44348,115],{"class":114},[36,44350,33327],{"class":49},[36,44352,37684],{"class":53},[36,44354,33327],{"class":49},[36,44356,44357],{"class":53},".p1_1(x))\n",[36,44359,44360,44362,44364,44366,44368,44370,44373,44375,44377,44379],{"class":38,"line":4286},[36,44361,9612],{"class":53},[36,44363,115],{"class":114},[36,44365,33327],{"class":49},[36,44367,37684],{"class":53},[36,44369,33327],{"class":49},[36,44371,44372],{"class":53},".p2_2(",[36,44374,33327],{"class":49},[36,44376,37684],{"class":53},[36,44378,33327],{"class":49},[36,44380,44381],{"class":53},".p2_1(x))))\n",[36,44383,44384,44387,44389,44391,44393,44395,44398,44400,44402,44404],{"class":38,"line":4291},[36,44385,44386],{"class":53},"        p3",[36,44388,115],{"class":114},[36,44390,33327],{"class":49},[36,44392,37684],{"class":53},[36,44394,33327],{"class":49},[36,44396,44397],{"class":53},".p3_2(",[36,44399,33327],{"class":49},[36,44401,37684],{"class":53},[36,44403,33327],{"class":49},[36,44405,44406],{"class":53},".p3_1(x))))\n",[36,44408,44409,44412,44414,44416,44418,44420,44423,44425],{"class":38,"line":4296},[36,44410,44411],{"class":53},"        p4",[36,44413,115],{"class":114},[36,44415,33327],{"class":49},[36,44417,37684],{"class":53},[36,44419,33327],{"class":49},[36,44421,44422],{"class":53},".p4_2(",[36,44424,33327],{"class":49},[36,44426,44427],{"class":53},".p4_1(x)))\n",[36,44429,44430],{"class":38,"line":4301},[36,44431,44432],{"class":42},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,44434,44435,44437,44440,44442,44444,44446],{"class":38,"line":4315},[36,44436,17273],{"class":114},[36,44438,44439],{"class":53}," torch.cat((p1,p2,p3,p4),",[36,44441,35187],{"class":1997},[36,44443,115],{"class":114},[36,44445,707],{"class":49},[36,44447,61],{"class":53},[36,44449,44450],{"class":38,"line":4320},[36,44451,546],{"emptyLinePlaceholder":545},[36,44453,44454],{"class":38,"line":5109},[36,44455,546],{"emptyLinePlaceholder":545},[36,44457,44458],{"class":38,"line":5123},[36,44459,44460],{"class":42},"# 搭建GoogLeNet网络\n",[36,44462,44463,44465,44468,44470,44472,44474,44476],{"class":38,"line":5131},[36,44464,519],{"class":114},[36,44466,44467],{"class":4500}," GoogLeNet",[36,44469,54],{"class":53},[36,44471,33282],{"class":4500},[36,44473,3235],{"class":53},[36,44475,33287],{"class":4500},[36,44477,33290],{"class":53},[36,44479,44480],{"class":38,"line":5136},[36,44481,44482],{"class":42},"    # 必须把Inception导入到里边\n",[36,44484,44485,44487,44489],{"class":38,"line":5142},[36,44486,33305],{"class":114},[36,44488,33308],{"class":49},[36,44490,44491],{"class":53},"(self,Inception):\n",[36,44493,44494,44496,44499,44501,44503,44505],{"class":38,"line":5148},[36,44495,33321],{"class":49},[36,44497,44498],{"class":53},"(GoogLeNet,",[36,44500,33327],{"class":49},[36,44502,33330],{"class":53},[36,44504,33333],{"class":49},[36,44506,4513],{"class":53},[36,44508,44509,44511,44514,44516],{"class":38,"line":5153},[36,44510,33349],{"class":49},[36,44512,44513],{"class":53},".b1",[36,44515,115],{"class":114},[36,44517,40509],{"class":53},[36,44519,44520,44522,44524,44526,44528,44530,44532,44534,44536,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558,44560],{"class":38,"line":10475},[36,44521,40514],{"class":53},[36,44523,33360],{"class":1997},[36,44525,115],{"class":114},[36,44527,707],{"class":49},[36,44529,3059],{"class":53},[36,44531,33369],{"class":1997},[36,44533,115],{"class":114},[36,44535,2890],{"class":49},[36,44537,3059],{"class":53},[36,44539,33378],{"class":1997},[36,44541,115],{"class":114},[36,44543,3050],{"class":49},[36,44545,3059],{"class":53},[36,44547,33433],{"class":1997},[36,44549,115],{"class":114},[36,44551,1188],{"class":49},[36,44553,3059],{"class":53},[36,44555,33387],{"class":1997},[36,44557,115],{"class":114},[36,44559,2767],{"class":49},[36,44561,40547],{"class":53},[36,44563,44564],{"class":38,"line":10499},[36,44565,40552],{"class":53},[36,44567,44568,44570,44572,44574,44576,44578,44580,44582,44584,44586,44588,44590,44592],{"class":38,"line":10504},[36,44569,40597],{"class":53},[36,44571,33378],{"class":1997},[36,44573,115],{"class":114},[36,44575,2767],{"class":49},[36,44577,3059],{"class":53},[36,44579,33433],{"class":1997},[36,44581,115],{"class":114},[36,44583,1188],{"class":49},[36,44585,3059],{"class":53},[36,44587,33387],{"class":1997},[36,44589,115],{"class":114},[36,44591,707],{"class":49},[36,44593,61],{"class":53},[36,44595,44596],{"class":38,"line":10510},[36,44597,40626],{"class":53},[36,44599,44600,44602,44605,44607],{"class":38,"line":10537},[36,44601,33349],{"class":49},[36,44603,44604],{"class":53},".b2",[36,44606,115],{"class":114},[36,44608,40509],{"class":53},[36,44610,44611,44613,44615,44617,44619,44621,44623,44625,44627,44629,44631,44633,44635],{"class":38,"line":10542},[36,44612,40514],{"class":53},[36,44614,33360],{"class":1997},[36,44616,115],{"class":114},[36,44618,2890],{"class":49},[36,44620,3059],{"class":53},[36,44622,33369],{"class":1997},[36,44624,115],{"class":114},[36,44626,2890],{"class":49},[36,44628,3059],{"class":53},[36,44630,33378],{"class":1997},[36,44632,115],{"class":114},[36,44634,707],{"class":49},[36,44636,40547],{"class":53},[36,44638,44639],{"class":38,"line":10548},[36,44640,40552],{"class":53},[36,44642,44643,44645,44647,44649,44651,44653,44655,44657,44660,44662,44664,44666,44668,44670,44672,44674,44676],{"class":38,"line":10560},[36,44644,40514],{"class":53},[36,44646,33360],{"class":1997},[36,44648,115],{"class":114},[36,44650,2890],{"class":49},[36,44652,3059],{"class":53},[36,44654,33369],{"class":1997},[36,44656,115],{"class":114},[36,44658,44659],{"class":49},"192",[36,44661,3059],{"class":53},[36,44663,33378],{"class":1997},[36,44665,115],{"class":114},[36,44667,2767],{"class":49},[36,44669,3059],{"class":53},[36,44671,33387],{"class":1997},[36,44673,115],{"class":114},[36,44675,707],{"class":49},[36,44677,40547],{"class":53},[36,44679,44680],{"class":38,"line":10572},[36,44681,40552],{"class":53},[36,44683,44684,44686,44688,44690,44692,44694,44696,44698,44700,44702,44704,44706,44708],{"class":38,"line":10584},[36,44685,40597],{"class":53},[36,44687,33378],{"class":1997},[36,44689,115],{"class":114},[36,44691,2767],{"class":49},[36,44693,3059],{"class":53},[36,44695,33433],{"class":1997},[36,44697,115],{"class":114},[36,44699,1188],{"class":49},[36,44701,3059],{"class":53},[36,44703,33387],{"class":1997},[36,44705,115],{"class":114},[36,44707,707],{"class":49},[36,44709,61],{"class":53},[36,44711,44712],{"class":38,"line":12241},[36,44713,40626],{"class":53},[36,44715,44716,44718,44721,44723],{"class":38,"line":12266},[36,44717,33349],{"class":49},[36,44719,44720],{"class":53},".b3",[36,44722,115],{"class":114},[36,44724,40509],{"class":53},[36,44726,44727,44730,44732,44734,44736,44739,44741,44743,44745,44748,44750,44752,44754,44757,44759],{"class":38,"line":12289},[36,44728,44729],{"class":53},"            Inception(",[36,44731,44659],{"class":49},[36,44733,3059],{"class":53},[36,44735,2890],{"class":49},[36,44737,44738],{"class":53},",(",[36,44740,2896],{"class":49},[36,44742,3059],{"class":53},[36,44744,34573],{"class":49},[36,44746,44747],{"class":53},"),(",[36,44749,3277],{"class":49},[36,44751,3059],{"class":53},[36,44753,2884],{"class":49},[36,44755,44756],{"class":53},"),",[36,44758,2884],{"class":49},[36,44760,40547],{"class":53},[36,44762,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781,44783,44785,44787,44789,44791],{"class":38,"line":12313},[36,44764,44729],{"class":53},[36,44766,37370],{"class":49},[36,44768,3059],{"class":53},[36,44770,34573],{"class":49},[36,44772,44738],{"class":53},[36,44774,34573],{"class":49},[36,44776,3059],{"class":53},[36,44778,44659],{"class":49},[36,44780,44747],{"class":53},[36,44782,2884],{"class":49},[36,44784,3059],{"class":53},[36,44786,2896],{"class":49},[36,44788,44756],{"class":53},[36,44790,2890],{"class":49},[36,44792,40547],{"class":53},[36,44794,44795,44797,44799,44801,44803,44805,44807,44809,44811,44813,44815,44817,44819],{"class":38,"line":12318},[36,44796,40597],{"class":53},[36,44798,33378],{"class":1997},[36,44800,115],{"class":114},[36,44802,2767],{"class":49},[36,44804,3059],{"class":53},[36,44806,33433],{"class":1997},[36,44808,115],{"class":114},[36,44810,1188],{"class":49},[36,44812,3059],{"class":53},[36,44814,33387],{"class":1997},[36,44816,115],{"class":114},[36,44818,707],{"class":49},[36,44820,61],{"class":53},[36,44822,44823],{"class":38,"line":12323},[36,44824,40626],{"class":53},[36,44826,44827,44829,44832,44834],{"class":38,"line":12328},[36,44828,33349],{"class":49},[36,44830,44831],{"class":53},".b4",[36,44833,115],{"class":114},[36,44835,40509],{"class":53},[36,44837,44838,44840,44843,44845,44847,44849,44851,44853,44856,44858,44860,44862,44864,44866,44868],{"class":38,"line":12337},[36,44839,44729],{"class":53},[36,44841,44842],{"class":49},"480",[36,44844,3059],{"class":53},[36,44846,44659],{"class":49},[36,44848,44738],{"class":53},[36,44850,2896],{"class":49},[36,44852,3059],{"class":53},[36,44854,44855],{"class":49},"208",[36,44857,44747],{"class":53},[36,44859,3277],{"class":49},[36,44861,3059],{"class":53},[36,44863,3283],{"class":49},[36,44865,44756],{"class":53},[36,44867,2890],{"class":49},[36,44869,40547],{"class":53},[36,44871,44872,44874,44876,44878,44880,44882,44884,44886,44888,44890,44892,44894,44896,44898,44900],{"class":38,"line":12342},[36,44873,44729],{"class":53},[36,44875,40957],{"class":49},[36,44877,3059],{"class":53},[36,44879,23566],{"class":49},[36,44881,44738],{"class":53},[36,44883,3294],{"class":49},[36,44885,3059],{"class":53},[36,44887,34004],{"class":49},[36,44889,44747],{"class":53},[36,44891,3476],{"class":49},[36,44893,3059],{"class":53},[36,44895,2890],{"class":49},[36,44897,44756],{"class":53},[36,44899,2890],{"class":49},[36,44901,40547],{"class":53},[36,44903,44904,44906,44908,44910,44912,44914,44916,44918,44920,44922,44924,44926,44928,44930,44932],{"class":38,"line":12348},[36,44905,44729],{"class":53},[36,44907,40957],{"class":49},[36,44909,3059],{"class":53},[36,44911,34573],{"class":49},[36,44913,44738],{"class":53},[36,44915,34573],{"class":49},[36,44917,3059],{"class":53},[36,44919,37370],{"class":49},[36,44921,44747],{"class":53},[36,44923,3476],{"class":49},[36,44925,3059],{"class":53},[36,44927,2890],{"class":49},[36,44929,44756],{"class":53},[36,44931,2890],{"class":49},[36,44933,40547],{"class":53},[36,44935,44936,44938,44940,44942,44944,44946,44948,44950,44953,44955,44957,44959,44961,44963,44965],{"class":38,"line":12369},[36,44937,44729],{"class":53},[36,44939,40957],{"class":49},[36,44941,3059],{"class":53},[36,44943,3294],{"class":49},[36,44945,44738],{"class":53},[36,44947,34573],{"class":49},[36,44949,3059],{"class":53},[36,44951,44952],{"class":49},"288",[36,44954,44747],{"class":53},[36,44956,2884],{"class":49},[36,44958,3059],{"class":53},[36,44960,2890],{"class":49},[36,44962,44756],{"class":53},[36,44964,2890],{"class":49},[36,44966,40547],{"class":53},[36,44968,44969,44971,44974,44976,44978,44980,44982,44984,44987,44989,44991,44993,44995,44997,44999],{"class":38,"line":12375},[36,44970,44729],{"class":53},[36,44972,44973],{"class":49},"528",[36,44975,3059],{"class":53},[36,44977,37370],{"class":49},[36,44979,44738],{"class":53},[36,44981,23566],{"class":49},[36,44983,3059],{"class":53},[36,44985,44986],{"class":49},"320",[36,44988,44747],{"class":53},[36,44990,2884],{"class":49},[36,44992,3059],{"class":53},[36,44994,34573],{"class":49},[36,44996,44756],{"class":53},[36,44998,34573],{"class":49},[36,45000,40547],{"class":53},[36,45002,45003,45005,45007,45009,45011,45013,45015,45017,45019,45021,45023,45025,45027],{"class":38,"line":12389},[36,45004,40597],{"class":53},[36,45006,33378],{"class":1997},[36,45008,115],{"class":114},[36,45010,2767],{"class":49},[36,45012,3059],{"class":53},[36,45014,33433],{"class":1997},[36,45016,115],{"class":114},[36,45018,1188],{"class":49},[36,45020,3059],{"class":53},[36,45022,33387],{"class":1997},[36,45024,115],{"class":114},[36,45026,707],{"class":49},[36,45028,61],{"class":53},[36,45030,45031],{"class":38,"line":12395},[36,45032,40626],{"class":53},[36,45034,45035,45037,45040,45042],{"class":38,"line":12422},[36,45036,33349],{"class":49},[36,45038,45039],{"class":53},".b5",[36,45041,115],{"class":114},[36,45043,40509],{"class":53},[36,45045,45046,45048,45051,45053,45055,45057,45059,45061,45063,45065,45067,45069,45071,45073,45075],{"class":38,"line":12431},[36,45047,44729],{"class":53},[36,45049,45050],{"class":49},"832",[36,45052,3059],{"class":53},[36,45054,37370],{"class":49},[36,45056,44738],{"class":53},[36,45058,23566],{"class":49},[36,45060,3059],{"class":53},[36,45062,44986],{"class":49},[36,45064,44747],{"class":53},[36,45066,2884],{"class":49},[36,45068,3059],{"class":53},[36,45070,34573],{"class":49},[36,45072,44756],{"class":53},[36,45074,34573],{"class":49},[36,45076,40547],{"class":53},[36,45078,45079,45081,45083,45085,45087,45089,45091,45093,45095,45097,45099,45101,45103,45105,45107],{"class":38,"line":12437},[36,45080,44729],{"class":53},[36,45082,45050],{"class":49},[36,45084,3059],{"class":53},[36,45086,37440],{"class":49},[36,45088,44738],{"class":53},[36,45090,44659],{"class":49},[36,45092,3059],{"class":53},[36,45094,37440],{"class":49},[36,45096,44747],{"class":53},[36,45098,3283],{"class":49},[36,45100,3059],{"class":53},[36,45102,34573],{"class":49},[36,45104,44756],{"class":53},[36,45106,34573],{"class":49},[36,45108,40547],{"class":53},[36,45110,45111,45114,45116,45118,45120],{"class":38,"line":12445},[36,45112,45113],{"class":53},"            nn.AdaptiveAvgPool2d((",[36,45115,707],{"class":49},[36,45117,3059],{"class":53},[36,45119,707],{"class":49},[36,45121,45122],{"class":53},")),\n",[36,45124,45125],{"class":38,"line":12450},[36,45126,41290],{"class":53},[36,45128,45129,45131,45134,45136,45138],{"class":38,"line":19122},[36,45130,41295],{"class":53},[36,45132,45133],{"class":49},"1024",[36,45135,3059],{"class":53},[36,45137,1317],{"class":49},[36,45139,61],{"class":53},[36,45141,45142],{"class":38,"line":19128},[36,45143,40626],{"class":53},[36,45145,45146],{"class":38,"line":19151},[36,45147,45148],{"class":42},"        # 对模型参数初始化\n",[36,45150,45151,45153,45155,45157,45159],{"class":38,"line":19157},[36,45152,5934],{"class":114},[36,45154,41368],{"class":53},[36,45156,28556],{"class":114},[36,45158,41373],{"class":49},[36,45160,41376],{"class":53},[36,45162,45163,45165,45167],{"class":38,"line":19180},[36,45164,7173],{"class":114},[36,45166,41388],{"class":49},[36,45168,41391],{"class":53},[36,45170,45171,45173,45176,45178,45181,45183,45185,45187,45189],{"class":38,"line":19194},[36,45172,41401],{"class":53},[36,45174,45175],{"class":1997},"mode",[36,45177,115],{"class":114},[36,45179,45180],{"class":57},"'fan_out'",[36,45182,3059],{"class":53},[36,45184,41404],{"class":1997},[36,45186,115],{"class":114},[36,45188,41409],{"class":57},[36,45190,61],{"class":53},[36,45192,45193],{"class":38,"line":19214},[36,45194,45195],{"class":42},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,45197,45198],{"class":38,"line":19220},[36,45199,45200],{"class":42},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,45202,45203],{"class":38,"line":19231},[36,45204,45205],{"class":42},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,45207,45208],{"class":38,"line":19254},[36,45209,45210],{"class":42},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,45212,45213],{"class":38,"line":19276},[36,45214,45215],{"class":42},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,45217,45218],{"class":38,"line":19281},[36,45219,45220],{"class":42},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,45222,45223,45225,45227,45229,45231,45233],{"class":38,"line":19287},[36,45224,41421],{"class":114},[36,45226,41424],{"class":53},[36,45228,41427],{"class":114},[36,45230,41430],{"class":114},[36,45232,41433],{"class":49},[36,45234,6270],{"class":53},[36,45236,45237,45239,45241],{"class":38,"line":19301},[36,45238,41445],{"class":53},[36,45240,713],{"class":49},[36,45242,61],{"class":53},[36,45244,45245,45248,45250],{"class":38,"line":19314},[36,45246,45247],{"class":114},"                elif",[36,45249,41388],{"class":49},[36,45251,41464],{"class":53},[36,45253,45254,45257,45259,45261,45263],{"class":38,"line":19319},[36,45255,45256],{"class":53},"                    nn.init.normal_(m.weight,",[36,45258,713],{"class":49},[36,45260,3059],{"class":53},[36,45262,41486],{"class":49},[36,45264,61],{"class":53},[36,45266,45267,45270,45272,45274,45276,45278],{"class":38,"line":19333},[36,45268,45269],{"class":114},"                    if",[36,45271,41424],{"class":53},[36,45273,41427],{"class":114},[36,45275,41430],{"class":114},[36,45277,41433],{"class":49},[36,45279,6270],{"class":53},[36,45281,45282,45285,45287],{"class":38,"line":19338},[36,45283,45284],{"class":53},"                        nn.init.constant_(m.bias,",[36,45286,713],{"class":49},[36,45288,61],{"class":53},[36,45290,45291],{"class":38,"line":19344},[36,45292,37665],{"class":42},[36,45294,45295,45297,45299],{"class":38,"line":19349},[36,45296,33305],{"class":114},[36,45298,33597],{"class":4500},[36,45300,33600],{"class":53},[36,45302,45303,45305,45307,45309],{"class":38,"line":19363},[36,45304,33605],{"class":53},[36,45306,115],{"class":114},[36,45308,33327],{"class":49},[36,45310,45311],{"class":53},".b1(x)\n",[36,45313,45314,45316,45318,45320],{"class":38,"line":19368},[36,45315,33605],{"class":53},[36,45317,115],{"class":114},[36,45319,33327],{"class":49},[36,45321,45322],{"class":53},".b2(x)\n",[36,45324,45325,45327,45329,45331],{"class":38,"line":19373},[36,45326,33605],{"class":53},[36,45328,115],{"class":114},[36,45330,33327],{"class":49},[36,45332,45333],{"class":53},".b3(x)\n",[36,45335,45336,45338,45340,45342],{"class":38,"line":19387},[36,45337,33605],{"class":53},[36,45339,115],{"class":114},[36,45341,33327],{"class":49},[36,45343,45344],{"class":53},".b4(x)\n",[36,45346,45347,45349,45351,45353],{"class":38,"line":19399},[36,45348,33605],{"class":53},[36,45350,115],{"class":114},[36,45352,33327],{"class":49},[36,45354,45355],{"class":53},".b5(x)\n",[36,45357,45358,45360],{"class":38,"line":19404},[36,45359,17273],{"class":114},[36,45361,33713],{"class":53},[36,45363,45364],{"class":38,"line":19417},[36,45365,546],{"emptyLinePlaceholder":545},[36,45367,45368],{"class":38,"line":19422},[36,45369,45370],{"class":42},"# 模型展示\n",[36,45372,45373,45375,45377,45379,45381],{"class":38,"line":19427},[36,45374,4069],{"class":114},[36,45376,33724],{"class":49},[36,45378,1377],{"class":114},[36,45380,33729],{"class":57},[36,45382,6270],{"class":53},[36,45384,45385,45387,45389,45391,45393,45395,45397,45399,45401],{"class":38,"line":19432},[36,45386,33741],{"class":53},[36,45388,115],{"class":114},[36,45390,32957],{"class":53},[36,45392,33748],{"class":57},[36,45394,4242],{"class":114},[36,45396,33753],{"class":53},[36,45398,4239],{"class":114},[36,45400,32981],{"class":57},[36,45402,61],{"class":53},[36,45404,45405,45407,45409],{"class":38,"line":19445},[36,45406,33793],{"class":53},[36,45408,115],{"class":114},[36,45410,45411],{"class":53},"GoogLeNet(Inception).to(device)\n",[36,45413,45414,45416,45418,45420,45422,45424,45426,45428],{"class":38,"line":19450},[36,45415,33803],{"class":49},[36,45417,33806],{"class":53},[36,45419,707],{"class":49},[36,45421,3059],{"class":53},[36,45423,34004],{"class":49},[36,45425,3059],{"class":53},[36,45427,34004],{"class":49},[36,45429,33819],{"class":53},[433,45431,45432],{"start":46},[436,45433,41683],{},[26,45435,45437],{"className":28,"code":45436,"language":30,"meta":31,"style":31},"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",[33,45438,45439,45445,45451,45461,45467,45477,45487,45497,45507,45517,45521,45532,45542,45546,45550,45554,45562,45574,45584,45600,45610,45642,45656,45666,45676,45680,45690,45704,45714,45724,45734,45740,45744,45748,45752,45756,45760,45768,45788,45792,45796,45800,45804,45808,45824,45828,45832,45840,45844,45848,45856,45860,45864,45868,45876,45880,45884,45888,45892,45900,45904,45912,45916,45924,45928,45936,45940,45948,45952,45956,45964,45968,45972,45976,45988,46012,46026,46030,46034,46038,46046,46050,46058,46062,46070,46074,46082,46086,46094,46098,46106,46110,46122,46126,46134,46138,46146,46150,46154,46158,46162,46170,46174,46190,46194,46202,46206,46210,46214,46218,46222,46226,46230,46246,46250,46262,46266,46278,46282,46294,46298,46306,46310,46318,46322,46326,46330,46336,46340,46348,46352,46368,46372,46380,46384,46400,46412,46416,46428,46432,46436,46444,46448,46452,46460,46464,46472,46476,46484,46488,46492,46534,46576,46580,46584,46600,46604,46620,46624,46628,46636,46640,46644,46656,46694,46698,46702,46710,46714,46728,46738,46744,46750,46756,46762,46766,46770,46776,46780,46784,46792,46796,46814,46818,46822,46826,46842,46846,46850,46854,46858,46862,46882,46902,46906,46910,46914,46922,46930,46934,46950,46970,46990,46994,46998,47006,47014,47018,47022,47026,47038,47042,47052,47060,47077],{"__ignoreMap":31},[36,45440,45441,45443],{"class":38,"line":39},[36,45442,537],{"class":114},[36,45444,34325],{"class":53},[36,45446,45447,45449],{"class":38,"line":46},[36,45448,537],{"class":114},[36,45450,34332],{"class":53},[36,45452,45453,45455,45457,45459],{"class":38,"line":82},[36,45454,537],{"class":114},[36,45456,34343],{"class":53},[36,45458,33887],{"class":114},[36,45460,34348],{"class":53},[36,45462,45463,45465],{"class":38,"line":88},[36,45464,537],{"class":114},[36,45466,32902],{"class":53},[36,45468,45469,45471,45473,45475],{"class":38,"line":195},[36,45470,33241],{"class":114},[36,45472,33919],{"class":53},[36,45474,537],{"class":114},[36,45476,34365],{"class":53},[36,45478,45479,45481,45483,45485],{"class":38,"line":1517},[36,45480,33241],{"class":114},[36,45482,33872],{"class":53},[36,45484,537],{"class":114},[36,45486,33877],{"class":53},[36,45488,45489,45491,45493,45495],{"class":38,"line":2421},[36,45490,33241],{"class":114},[36,45492,33902],{"class":53},[36,45494,537],{"class":114},[36,45496,33907],{"class":53},[36,45498,45499,45501,45503,45505],{"class":38,"line":2446},[36,45500,537],{"class":114},[36,45502,33919],{"class":53},[36,45504,33887],{"class":114},[36,45506,33924],{"class":53},[36,45508,45509,45511,45513,45515],{"class":38,"line":2469},[36,45510,537],{"class":114},[36,45512,33936],{"class":53},[36,45514,33887],{"class":114},[36,45516,33941],{"class":53},[36,45518,45519],{"class":38,"line":2492},[36,45520,34410],{"class":42},[36,45522,45523,45525,45527,45529],{"class":38,"line":4150},[36,45524,33241],{"class":114},[36,45526,34417],{"class":53},[36,45528,537],{"class":114},[36,45530,45531],{"class":53}," GoogLeNet, Inception\n",[36,45533,45534,45536,45538,45540],{"class":38,"line":4155},[36,45535,33241],{"class":114},[36,45537,33244],{"class":53},[36,45539,537],{"class":114},[36,45541,33249],{"class":53},[36,45543,45544],{"class":38,"line":4161},[36,45545,546],{"emptyLinePlaceholder":545},[36,45547,45548],{"class":38,"line":4166},[36,45549,546],{"emptyLinePlaceholder":545},[36,45551,45552],{"class":38,"line":4180},[36,45553,34445],{"class":42},[36,45555,45556,45558,45560],{"class":38,"line":4185},[36,45557,34450],{"class":114},[36,45559,34453],{"class":4500},[36,45561,34456],{"class":53},[36,45563,45564,45566,45568,45570,45572],{"class":38,"line":4191},[36,45565,34461],{"class":53},[36,45567,115],{"class":114},[36,45569,33959],{"class":53},[36,45571,33967],{"class":57},[36,45573,33970],{"class":53},[36,45575,45576,45578,45580,45582],{"class":38,"line":4212},[36,45577,34474],{"class":1997},[36,45579,115],{"class":114},[36,45581,189],{"class":49},[36,45583,33970],{"class":53},[36,45585,45586,45588,45590,45592,45594,45596,45598],{"class":38,"line":4217},[36,45587,34485],{"class":1997},[36,45589,115],{"class":114},[36,45591,33996],{"class":53},[36,45593,33999],{"class":1997},[36,45595,115],{"class":114},[36,45597,37949],{"class":49},[36,45599,34007],{"class":53},[36,45601,45602,45604,45606,45608],{"class":38,"line":4231},[36,45603,34502],{"class":1997},[36,45605,115],{"class":114},[36,45607,189],{"class":49},[36,45609,61],{"class":53},[36,45611,45612,45614,45616,45618,45620,45622,45624,45626,45628,45630,45632,45634,45636,45638,45640],{"class":38,"line":4236},[36,45613,34513],{"class":53},[36,45615,115],{"class":114},[36,45617,34518],{"class":53},[36,45619,34521],{"class":49},[36,45621,54],{"class":53},[36,45623,34526],{"class":49},[36,45625,1050],{"class":114},[36,45627,9885],{"class":49},[36,45629,34533],{"class":53},[36,45631,34521],{"class":49},[36,45633,54],{"class":53},[36,45635,34540],{"class":49},[36,45637,1050],{"class":114},[36,45639,9885],{"class":49},[36,45641,34547],{"class":53},[36,45643,45644,45646,45648,45650,45652,45654],{"class":38,"line":4264},[36,45645,34552],{"class":53},[36,45647,115],{"class":114},[36,45649,34557],{"class":53},[36,45651,34040],{"class":1997},[36,45653,115],{"class":114},[36,45655,34045],{"class":53},[36,45657,45658,45660,45662,45664],{"class":38,"line":4269},[36,45659,34568],{"class":1997},[36,45661,115],{"class":114},[36,45663,2884],{"class":49},[36,45665,33970],{"class":53},[36,45667,45668,45670,45672,45674],{"class":38,"line":4286},[36,45669,34580],{"class":1997},[36,45671,115],{"class":114},[36,45673,189],{"class":49},[36,45675,33970],{"class":53},[36,45677,45678],{"class":38,"line":4291},[36,45679,34591],{"class":42},[36,45681,45682,45684,45686,45688],{"class":38,"line":4296},[36,45683,34596],{"class":1997},[36,45685,115],{"class":114},[36,45687,3076],{"class":49},[36,45689,61],{"class":53},[36,45691,45692,45694,45696,45698,45700,45702],{"class":38,"line":4301},[36,45693,34607],{"class":53},[36,45695,115],{"class":114},[36,45697,34037],{"class":53},[36,45699,34040],{"class":1997},[36,45701,115],{"class":114},[36,45703,34618],{"class":53},[36,45705,45706,45708,45710,45712],{"class":38,"line":4315},[36,45707,34623],{"class":1997},[36,45709,115],{"class":114},[36,45711,2884],{"class":49},[36,45713,33970],{"class":53},[36,45715,45716,45718,45720,45722],{"class":38,"line":4320},[36,45717,34634],{"class":1997},[36,45719,115],{"class":114},[36,45721,189],{"class":49},[36,45723,33970],{"class":53},[36,45725,45726,45728,45730,45732],{"class":38,"line":5109},[36,45727,34645],{"class":1997},[36,45729,115],{"class":114},[36,45731,3076],{"class":49},[36,45733,61],{"class":53},[36,45735,45736,45738],{"class":38,"line":5123},[36,45737,6621],{"class":114},[36,45739,34658],{"class":53},[36,45741,45742],{"class":38,"line":5131},[36,45743,546],{"emptyLinePlaceholder":545},[36,45745,45746],{"class":38,"line":5136},[36,45747,34667],{"class":42},[36,45749,45750],{"class":38,"line":5142},[36,45751,34672],{"class":42},[36,45753,45754],{"class":38,"line":5148},[36,45755,546],{"emptyLinePlaceholder":545},[36,45757,45758],{"class":38,"line":5153},[36,45759,34681],{"class":42},[36,45761,45762,45764,45766],{"class":38,"line":10475},[36,45763,34450],{"class":114},[36,45765,34688],{"class":4500},[36,45767,34691],{"class":53},[36,45769,45770,45772,45774,45776,45778,45780,45782,45784,45786],{"class":38,"line":10499},[36,45771,33741],{"class":53},[36,45773,115],{"class":114},[36,45775,32957],{"class":53},[36,45777,33748],{"class":57},[36,45779,4242],{"class":114},[36,45781,33753],{"class":53},[36,45783,4239],{"class":114},[36,45785,34710],{"class":57},[36,45787,61],{"class":53},[36,45789,45790],{"class":38,"line":10504},[36,45791,546],{"emptyLinePlaceholder":545},[36,45793,45794],{"class":38,"line":10510},[36,45795,546],{"emptyLinePlaceholder":545},[36,45797,45798],{"class":38,"line":10537},[36,45799,34725],{"class":42},[36,45801,45802],{"class":38,"line":10542},[36,45803,34730],{"class":42},[36,45805,45806],{"class":38,"line":10548},[36,45807,34735],{"class":42},[36,45809,45810,45812,45814,45816,45818,45820,45822],{"class":38,"line":10560},[36,45811,34740],{"class":53},[36,45813,115],{"class":114},[36,45815,34745],{"class":53},[36,45817,34748],{"class":1997},[36,45819,115],{"class":114},[36,45821,34753],{"class":49},[36,45823,61],{"class":53},[36,45825,45826],{"class":38,"line":10572},[36,45827,546],{"emptyLinePlaceholder":545},[36,45829,45830],{"class":38,"line":10584},[36,45831,34764],{"class":42},[36,45833,45834,45836,45838],{"class":38,"line":12241},[36,45835,34769],{"class":53},[36,45837,115],{"class":114},[36,45839,34774],{"class":53},[36,45841,45842],{"class":38,"line":12266},[36,45843,546],{"emptyLinePlaceholder":545},[36,45845,45846],{"class":38,"line":12289},[36,45847,34783],{"class":42},[36,45849,45850,45852,45854],{"class":38,"line":12313},[36,45851,33793],{"class":53},[36,45853,115],{"class":114},[36,45855,34792],{"class":53},[36,45857,45858],{"class":38,"line":12318},[36,45859,34797],{"class":42},[36,45861,45862],{"class":38,"line":12323},[36,45863,34802],{"class":42},[36,45865,45866],{"class":38,"line":12328},[36,45867,34807],{"class":42},[36,45869,45870,45872,45874],{"class":38,"line":12337},[36,45871,34812],{"class":53},[36,45873,115],{"class":114},[36,45875,34817],{"class":53},[36,45877,45878],{"class":38,"line":12342},[36,45879,546],{"emptyLinePlaceholder":545},[36,45881,45882],{"class":38,"line":12348},[36,45883,546],{"emptyLinePlaceholder":545},[36,45885,45886],{"class":38,"line":12369},[36,45887,34830],{"class":42},[36,45889,45890],{"class":38,"line":12375},[36,45891,34835],{"class":42},[36,45893,45894,45896,45898],{"class":38,"line":12389},[36,45895,34840],{"class":53},[36,45897,115],{"class":114},[36,45899,34845],{"class":49},[36,45901,45902],{"class":38,"line":12395},[36,45903,34850],{"class":42},[36,45905,45906,45908,45910],{"class":38,"line":12422},[36,45907,34855],{"class":53},[36,45909,115],{"class":114},[36,45911,34860],{"class":53},[36,45913,45914],{"class":38,"line":12431},[36,45915,34865],{"class":42},[36,45917,45918,45920,45922],{"class":38,"line":12437},[36,45919,34870],{"class":53},[36,45921,115],{"class":114},[36,45923,34860],{"class":53},[36,45925,45926],{"class":38,"line":12445},[36,45927,34879],{"class":42},[36,45929,45930,45932,45934],{"class":38,"line":12450},[36,45931,34884],{"class":53},[36,45933,115],{"class":114},[36,45935,34860],{"class":53},[36,45937,45938],{"class":38,"line":19122},[36,45939,34893],{"class":42},[36,45941,45942,45944,45946],{"class":38,"line":19128},[36,45943,34898],{"class":53},[36,45945,115],{"class":114},[36,45947,34860],{"class":53},[36,45949,45950],{"class":38,"line":19151},[36,45951,546],{"emptyLinePlaceholder":545},[36,45953,45954],{"class":38,"line":19157},[36,45955,34911],{"class":42},[36,45957,45958,45960,45962],{"class":38,"line":19180},[36,45959,34916],{"class":53},[36,45961,115],{"class":114},[36,45963,34921],{"class":53},[36,45965,45966],{"class":38,"line":19194},[36,45967,546],{"emptyLinePlaceholder":545},[36,45969,45970],{"class":38,"line":19214},[36,45971,546],{"emptyLinePlaceholder":545},[36,45973,45974],{"class":38,"line":19220},[36,45975,34934],{"class":42},[36,45977,45978,45980,45982,45984,45986],{"class":38,"line":19231},[36,45979,5732],{"class":114},[36,45981,34941],{"class":53},[36,45983,28556],{"class":114},[36,45985,34946],{"class":49},[36,45987,34949],{"class":53},[36,45989,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010],{"class":38,"line":19254},[36,45991,34954],{"class":49},[36,45993,54],{"class":53},[36,45995,34959],{"class":57},[36,45997,1944],{"class":49},[36,45999,1065],{"class":57},[36,46001,1944],{"class":49},[36,46003,1822],{"class":57},[36,46005,34970],{"class":53},[36,46007,508],{"class":114},[36,46009,707],{"class":49},[36,46011,625],{"class":53},[36,46013,46014,46016,46018,46020,46022,46024],{"class":38,"line":19276},[36,46015,34954],{"class":49},[36,46017,54],{"class":53},[36,46019,34985],{"class":57},[36,46021,1050],{"class":114},[36,46023,1317],{"class":49},[36,46025,61],{"class":53},[36,46027,46028],{"class":38,"line":19281},[36,46029,546],{"emptyLinePlaceholder":545},[36,46031,46032],{"class":38,"line":19287},[36,46033,35000],{"class":42},[36,46035,46036],{"class":38,"line":19301},[36,46037,35005],{"class":42},[36,46039,46040,46042,46044],{"class":38,"line":19314},[36,46041,35010],{"class":53},[36,46043,115],{"class":114},[36,46045,34845],{"class":49},[36,46047,46048],{"class":38,"line":19319},[36,46049,35019],{"class":42},[36,46051,46052,46054,46056],{"class":38,"line":19333},[36,46053,35024],{"class":53},[36,46055,115],{"class":114},[36,46057,5616],{"class":49},[36,46059,46060],{"class":38,"line":19338},[36,46061,35033],{"class":42},[36,46063,46064,46066,46068],{"class":38,"line":19344},[36,46065,35038],{"class":53},[36,46067,115],{"class":114},[36,46069,34845],{"class":49},[36,46071,46072],{"class":38,"line":19349},[36,46073,35047],{"class":42},[36,46075,46076,46078,46080],{"class":38,"line":19363},[36,46077,35052],{"class":53},[36,46079,115],{"class":114},[36,46081,5616],{"class":49},[36,46083,46084],{"class":38,"line":19368},[36,46085,35061],{"class":42},[36,46087,46088,46090,46092],{"class":38,"line":19373},[36,46089,35066],{"class":53},[36,46091,115],{"class":114},[36,46093,5616],{"class":49},[36,46095,46096],{"class":38,"line":19387},[36,46097,35075],{"class":42},[36,46099,46100,46102,46104],{"class":38,"line":19399},[36,46101,35080],{"class":53},[36,46103,115],{"class":114},[36,46105,5616],{"class":49},[36,46107,46108],{"class":38,"line":19404},[36,46109,35089],{"class":42},[36,46111,46112,46114,46116,46118,46120],{"class":38,"line":19417},[36,46113,5934],{"class":114},[36,46115,34104],{"class":53},[36,46117,28556],{"class":114},[36,46119,34109],{"class":49},[36,46121,35102],{"class":53},[36,46123,46124],{"class":38,"line":19422},[36,46125,35107],{"class":42},[36,46127,46128,46130,46132],{"class":38,"line":19427},[36,46129,35112],{"class":53},[36,46131,115],{"class":114},[36,46133,35117],{"class":53},[36,46135,46136],{"class":38,"line":19432},[36,46137,35122],{"class":42},[36,46139,46140,46142,46144],{"class":38,"line":19445},[36,46141,35127],{"class":53},[36,46143,115],{"class":114},[36,46145,35132],{"class":53},[36,46147,46148],{"class":38,"line":19450},[36,46149,35138],{"class":42},[36,46151,46152],{"class":38,"line":35135},[36,46153,35144],{"class":53},[36,46155,46156],{"class":38,"line":35141},[36,46157,35150],{"class":42},[36,46159,46160],{"class":38,"line":35147},[36,46161,35156],{"class":42},[36,46163,46164,46166,46168],{"class":38,"line":35153},[36,46165,35162],{"class":53},[36,46167,115],{"class":114},[36,46169,35167],{"class":53},[36,46171,46172],{"class":38,"line":35159},[36,46173,35173],{"class":42},[36,46175,46176,46178,46180,46182,46184,46186,46188],{"class":38,"line":35170},[36,46177,35179],{"class":53},[36,46179,115],{"class":114},[36,46181,35184],{"class":53},[36,46183,35187],{"class":1997},[36,46185,115],{"class":114},[36,46187,707],{"class":49},[36,46189,61],{"class":53},[36,46191,46192],{"class":38,"line":35176},[36,46193,35199],{"class":42},[36,46195,46196,46198,46200],{"class":38,"line":35196},[36,46197,35205],{"class":53},[36,46199,115],{"class":114},[36,46201,35210],{"class":53},[36,46203,46204],{"class":38,"line":35202},[36,46205,35216],{"class":42},[36,46207,46208],{"class":38,"line":35213},[36,46209,35222],{"class":53},[36,46211,46212],{"class":38,"line":35219},[36,46213,35228],{"class":42},[36,46215,46216],{"class":38,"line":35225},[36,46217,35234],{"class":53},[36,46219,46220],{"class":38,"line":35231},[36,46221,35240],{"class":42},[36,46223,46224],{"class":38,"line":35237},[36,46225,35246],{"class":53},[36,46227,46228],{"class":38,"line":35243},[36,46229,35252],{"class":42},[36,46231,46232,46234,46236,46238,46240,46242,46244],{"class":38,"line":35249},[36,46233,35258],{"class":53},[36,46235,1224],{"class":114},[36,46237,35263],{"class":53},[36,46239,1050],{"class":114},[36,46241,35268],{"class":53},[36,46243,713],{"class":49},[36,46245,61],{"class":53},[36,46247,46248],{"class":38,"line":35255},[36,46249,35278],{"class":42},[36,46251,46252,46254,46256,46258,46260],{"class":38,"line":35275},[36,46253,35284],{"class":53},[36,46255,1224],{"class":114},[36,46257,35289],{"class":53},[36,46259,1377],{"class":114},[36,46261,35294],{"class":53},[36,46263,46264],{"class":38,"line":35281},[36,46265,35300],{"class":42},[36,46267,46268,46270,46272,46274,46276],{"class":38,"line":35297},[36,46269,35306],{"class":53},[36,46271,1224],{"class":114},[36,46273,35268],{"class":53},[36,46275,713],{"class":49},[36,46277,61],{"class":53},[36,46279,46280],{"class":38,"line":35303},[36,46281,35320],{"class":42},[36,46283,46284,46286,46288,46290,46292],{"class":38,"line":35317},[36,46285,5934],{"class":114},[36,46287,35328],{"class":53},[36,46289,28556],{"class":114},[36,46291,34109],{"class":49},[36,46293,35335],{"class":53},[36,46295,46296],{"class":38,"line":35323},[36,46297,35341],{"class":42},[36,46299,46300,46302,46304],{"class":38,"line":35338},[36,46301,35112],{"class":53},[36,46303,115],{"class":114},[36,46305,35117],{"class":53},[36,46307,46308],{"class":38,"line":35344},[36,46309,35356],{"class":42},[36,46311,46312,46314,46316],{"class":38,"line":35353},[36,46313,35127],{"class":53},[36,46315,115],{"class":114},[36,46317,35132],{"class":53},[36,46319,46320],{"class":38,"line":35359},[36,46321,35371],{"class":42},[36,46323,46324],{"class":38,"line":35368},[36,46325,35377],{"class":53},[36,46327,46328],{"class":38,"line":35374},[36,46329,38856],{"class":42},[36,46331,46332,46334],{"class":38,"line":35380},[36,46333,35383],{"class":114},[36,46335,35386],{"class":53},[36,46337,46338],{"class":38,"line":35389},[36,46339,35392],{"class":42},[36,46341,46342,46344,46346],{"class":38,"line":35395},[36,46343,38871],{"class":53},[36,46345,115],{"class":114},[36,46347,35167],{"class":53},[36,46349,46350],{"class":38,"line":35406},[36,46351,35409],{"class":42},[36,46353,46354,46356,46358,46360,46362,46364,46366],{"class":38,"line":35412},[36,46355,38884],{"class":53},[36,46357,115],{"class":114},[36,46359,35184],{"class":53},[36,46361,35187],{"class":1997},[36,46363,115],{"class":114},[36,46365,707],{"class":49},[36,46367,61],{"class":53},[36,46369,46370],{"class":38,"line":35431},[36,46371,35434],{"class":42},[36,46373,46374,46376,46378],{"class":38,"line":35437},[36,46375,38905],{"class":53},[36,46377,115],{"class":114},[36,46379,35210],{"class":53},[36,46381,46382],{"class":38,"line":35448},[36,46383,35451],{"class":42},[36,46385,46386,46388,46390,46392,46394,46396,46398],{"class":38,"line":35454},[36,46387,38918],{"class":53},[36,46389,1224],{"class":114},[36,46391,38923],{"class":53},[36,46393,1050],{"class":114},[36,46395,35268],{"class":53},[36,46397,713],{"class":49},[36,46399,61],{"class":53},[36,46401,46402,46404,46406,46408,46410],{"class":38,"line":35474},[36,46403,38936],{"class":53},[36,46405,1224],{"class":114},[36,46407,35289],{"class":53},[36,46409,1377],{"class":114},[36,46411,35294],{"class":53},[36,46413,46414],{"class":38,"line":35490},[36,46415,38949],{"class":42},[36,46417,46418,46420,46422,46424,46426],{"class":38,"line":35496},[36,46419,38954],{"class":53},[36,46421,1224],{"class":114},[36,46423,35268],{"class":53},[36,46425,713],{"class":49},[36,46427,61],{"class":53},[36,46429,46430],{"class":38,"line":35510},[36,46431,35513],{"class":42},[36,46433,46434],{"class":38,"line":35516},[36,46435,35519],{"class":42},[36,46437,46438,46440,46442],{"class":38,"line":35522},[36,46439,35525],{"class":53},[36,46441,1065],{"class":114},[36,46443,35530],{"class":53},[36,46445,46446],{"class":38,"line":35533},[36,46447,35536],{"class":42},[36,46449,46450],{"class":38,"line":35539},[36,46451,35542],{"class":42},[36,46453,46454,46456,46458],{"class":38,"line":35545},[36,46455,35548],{"class":53},[36,46457,1065],{"class":114},[36,46459,35530],{"class":53},[36,46461,46462],{"class":38,"line":35555},[36,46463,35558],{"class":42},[36,46465,46466,46468,46470],{"class":38,"line":35561},[36,46467,35564],{"class":53},[36,46469,1065],{"class":114},[36,46471,35569],{"class":53},[36,46473,46474],{"class":38,"line":35572},[36,46475,35575],{"class":42},[36,46477,46478,46480,46482],{"class":38,"line":35578},[36,46479,35581],{"class":53},[36,46481,1065],{"class":114},[36,46483,35569],{"class":53},[36,46485,46486],{"class":38,"line":35588},[36,46487,546],{"emptyLinePlaceholder":545},[36,46489,46490],{"class":38,"line":35593},[36,46491,35596],{"class":42},[36,46493,46494,46496,46498,46500,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532],{"class":38,"line":35599},[36,46495,34954],{"class":49},[36,46497,54],{"class":53},[36,46499,6123],{"class":57},[36,46501,1944],{"class":49},[36,46503,35610],{"class":57},[36,46505,2065],{"class":49},[36,46507,35615],{"class":114},[36,46509,2070],{"class":49},[36,46511,35620],{"class":57},[36,46513,2065],{"class":49},[36,46515,35615],{"class":114},[36,46517,2070],{"class":49},[36,46519,6123],{"class":57},[36,46521,35631],{"class":53},[36,46523,508],{"class":114},[36,46525,707],{"class":49},[36,46527,35638],{"class":53},[36,46529,508],{"class":114},[36,46531,707],{"class":49},[36,46533,35645],{"class":53},[36,46535,46536,46538,46540,46542,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574],{"class":38,"line":35648},[36,46537,34954],{"class":49},[36,46539,54],{"class":53},[36,46541,6123],{"class":57},[36,46543,1944],{"class":49},[36,46545,35659],{"class":57},[36,46547,2065],{"class":49},[36,46549,35615],{"class":114},[36,46551,2070],{"class":49},[36,46553,35668],{"class":57},[36,46555,2065],{"class":49},[36,46557,35615],{"class":114},[36,46559,2070],{"class":49},[36,46561,6123],{"class":57},[36,46563,35679],{"class":53},[36,46565,508],{"class":114},[36,46567,707],{"class":49},[36,46569,35686],{"class":53},[36,46571,508],{"class":114},[36,46573,707],{"class":49},[36,46575,35645],{"class":53},[36,46577,46578],{"class":38,"line":35695},[36,46579,546],{"emptyLinePlaceholder":545},[36,46581,46582],{"class":38,"line":35700},[36,46583,35703],{"class":42},[36,46585,46586,46588,46590,46592,46594,46596,46598],{"class":38,"line":35706},[36,46587,5029],{"class":114},[36,46589,35711],{"class":53},[36,46591,508],{"class":114},[36,46593,707],{"class":49},[36,46595,3614],{"class":53},[36,46597,3633],{"class":114},[36,46599,35722],{"class":53},[36,46601,46602],{"class":38,"line":35725},[36,46603,35728],{"class":42},[36,46605,46606,46608,46610,46612,46614,46616,46618],{"class":38,"line":35731},[36,46607,35734],{"class":53},[36,46609,244],{"class":49},[36,46611,115],{"class":114},[36,46613,35741],{"class":53},[36,46615,508],{"class":114},[36,46617,707],{"class":49},[36,46619,35748],{"class":53},[36,46621,46622],{"class":38,"line":35751},[36,46623,35754],{"class":42},[36,46625,46626],{"class":38,"line":35757},[36,46627,35760],{"class":42},[36,46629,46630,46632,46634],{"class":38,"line":35763},[36,46631,35766],{"class":53},[36,46633,115],{"class":114},[36,46635,34817],{"class":53},[36,46637,46638],{"class":38,"line":35773},[36,46639,546],{"emptyLinePlaceholder":545},[36,46641,46642],{"class":38,"line":35778},[36,46643,35781],{"class":42},[36,46645,46646,46648,46650,46652,46654],{"class":38,"line":35784},[36,46647,35787],{"class":53},[36,46649,115],{"class":114},[36,46651,35792],{"class":53},[36,46653,508],{"class":114},[36,46655,35797],{"class":53},[36,46657,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692],{"class":38,"line":35800},[36,46659,34954],{"class":49},[36,46661,54],{"class":53},[36,46663,35807],{"class":57},[36,46665,2065],{"class":49},[36,46667,35812],{"class":114},[36,46669,2070],{"class":49},[36,46671,3221],{"class":57},[36,46673,2065],{"class":49},[36,46675,35812],{"class":114},[36,46677,2070],{"class":49},[36,46679,35825],{"class":57},[36,46681,35828],{"class":53},[36,46683,1080],{"class":114},[36,46685,3582],{"class":49},[36,46687,35835],{"class":53},[36,46689,1095],{"class":114},[36,46691,3582],{"class":49},[36,46693,625],{"class":53},[36,46695,46696],{"class":38,"line":35844},[36,46697,39233],{"class":42},[36,46699,46700],{"class":38,"line":35850},[36,46701,39238],{"class":42},[36,46703,46704,46706,46708],{"class":38,"line":35856},[36,46705,39243],{"class":53},[36,46707,35868],{"class":57},[36,46709,61],{"class":53},[36,46711,46712],{"class":38,"line":35862},[36,46713,35888],{"class":42},[36,46715,46716,46718,46720,46722,46724,46726],{"class":38,"line":35873},[36,46717,35894],{"class":53},[36,46719,115],{"class":114},[36,46721,35899],{"class":53},[36,46723,35902],{"class":1997},[36,46725,115],{"class":114},[36,46727,4084],{"class":53},[36,46729,46730,46732,46734,46736],{"class":38,"line":35879},[36,46731,35912],{"class":57},[36,46733,3535],{"class":53},[36,46735,35917],{"class":49},[36,46737,35920],{"class":53},[36,46739,46740,46742],{"class":38,"line":35885},[36,46741,35926],{"class":57},[36,46743,35929],{"class":53},[36,46745,46746,46748],{"class":38,"line":35891},[36,46747,35935],{"class":57},[36,46749,35938],{"class":53},[36,46751,46752,46754],{"class":38,"line":35909},[36,46753,35944],{"class":57},[36,46755,35947],{"class":53},[36,46757,46758,46760],{"class":38,"line":35923},[36,46759,35953],{"class":57},[36,46761,35956],{"class":53},[36,46763,46764],{"class":38,"line":35932},[36,46765,35962],{"class":53},[36,46767,46768],{"class":38,"line":35941},[36,46769,35968],{"class":42},[36,46771,46772,46774],{"class":38,"line":35950},[36,46773,6621],{"class":114},[36,46775,35976],{"class":53},[36,46777,46778],{"class":38,"line":35959},[36,46779,546],{"emptyLinePlaceholder":545},[36,46781,46782],{"class":38,"line":35965},[36,46783,35987],{"class":42},[36,46785,46786,46788,46790],{"class":38,"line":35971},[36,46787,34450],{"class":114},[36,46789,35995],{"class":4500},[36,46791,35998],{"class":53},[36,46793,46794],{"class":38,"line":35979},[36,46795,36004],{"class":42},[36,46797,46798,46800,46802,46804,46806,46808,46810,46812],{"class":38,"line":35984},[36,46799,36010],{"class":53},[36,46801,34196],{"class":1997},[36,46803,115],{"class":114},[36,46805,54],{"class":53},[36,46807,3176],{"class":49},[36,46809,3059],{"class":53},[36,46811,2977],{"class":49},[36,46813,625],{"class":53},[36,46815,46816],{"class":38,"line":35990},[36,46817,36030],{"class":42},[36,46819,46820],{"class":38,"line":36001},[36,46821,36036],{"class":42},[36,46823,46824],{"class":38,"line":36007},[36,46825,36042],{"class":42},[36,46827,46828,46830,46832,46834,46836,46838,46840],{"class":38,"line":36027},[36,46829,34230],{"class":53},[36,46831,707],{"class":49},[36,46833,3059],{"class":53},[36,46835,1188],{"class":49},[36,46837,3059],{"class":53},[36,46839,707],{"class":49},[36,46841,61],{"class":53},[36,46843,46844],{"class":38,"line":36033},[36,46845,36065],{"class":42},[36,46847,46848],{"class":38,"line":36039},[36,46849,36071],{"class":42},[36,46851,46852],{"class":38,"line":36045},[36,46853,36077],{"class":42},[36,46855,46856],{"class":38,"line":36062},[36,46857,36083],{"class":42},[36,46859,46860],{"class":38,"line":36068},[36,46861,36089],{"class":42},[36,46863,46864,46866,46868,46870,46872,46874,46876,46878,46880],{"class":38,"line":36074},[36,46865,36095],{"class":53},[36,46867,36098],{"class":57},[36,46869,36101],{"class":53},[36,46871,36104],{"class":57},[36,46873,3059],{"class":53},[36,46875,36109],{"class":1997},[36,46877,115],{"class":114},[36,46879,36114],{"class":57},[36,46881,61],{"class":53},[36,46883,46884,46886,46888,46890,46892,46894,46896,46898,46900],{"class":38,"line":36080},[36,46885,36095],{"class":53},[36,46887,36098],{"class":57},[36,46889,36126],{"class":53},[36,46891,36129],{"class":57},[36,46893,3059],{"class":53},[36,46895,36109],{"class":1997},[36,46897,115],{"class":114},[36,46899,36138],{"class":57},[36,46901,61],{"class":53},[36,46903,46904],{"class":38,"line":36086},[36,46905,36146],{"class":42},[36,46907,46908],{"class":38,"line":36092},[36,46909,36152],{"class":53},[36,46911,46912],{"class":38,"line":36119},[36,46913,36158],{"class":42},[36,46915,46916,46918,46920],{"class":38,"line":36143},[36,46917,36164],{"class":53},[36,46919,36167],{"class":57},[36,46921,61],{"class":53},[36,46923,46924,46926,46928],{"class":38,"line":36149},[36,46925,36175],{"class":53},[36,46927,36178],{"class":57},[36,46929,61],{"class":53},[36,46931,46932],{"class":38,"line":36155},[36,46933,36186],{"class":42},[36,46935,46936,46938,46940,46942,46944,46946,46948],{"class":38,"line":36161},[36,46937,34230],{"class":53},[36,46939,707],{"class":49},[36,46941,3059],{"class":53},[36,46943,1188],{"class":49},[36,46945,3059],{"class":53},[36,46947,1188],{"class":49},[36,46949,61],{"class":53},[36,46951,46952,46954,46956,46958,46960,46962,46964,46966,46968],{"class":38,"line":36172},[36,46953,36095],{"class":53},[36,46955,36098],{"class":57},[36,46957,36213],{"class":53},[36,46959,36104],{"class":57},[36,46961,3059],{"class":53},[36,46963,36109],{"class":1997},[36,46965,115],{"class":114},[36,46967,36224],{"class":57},[36,46969,61],{"class":53},[36,46971,46972,46974,46976,46978,46980,46982,46984,46986,46988],{"class":38,"line":36183},[36,46973,36095],{"class":53},[36,46975,36098],{"class":57},[36,46977,36236],{"class":53},[36,46979,36129],{"class":57},[36,46981,3059],{"class":53},[36,46983,36109],{"class":1997},[36,46985,115],{"class":114},[36,46987,36247],{"class":57},[36,46989,61],{"class":53},[36,46991,46992],{"class":38,"line":36189},[36,46993,36255],{"class":42},[36,46995,46996],{"class":38,"line":36206},[36,46997,36152],{"class":53},[36,46999,47000,47002,47004],{"class":38,"line":36229},[36,47001,36164],{"class":53},[36,47003,36098],{"class":57},[36,47005,61],{"class":53},[36,47007,47008,47010,47012],{"class":38,"line":36252},[36,47009,36175],{"class":53},[36,47011,36277],{"class":57},[36,47013,61],{"class":53},[36,47015,47016],{"class":38,"line":36258},[36,47017,36285],{"class":53},[36,47019,47020],{"class":38,"line":36263},[36,47021,546],{"emptyLinePlaceholder":545},[36,47023,47024],{"class":38,"line":36272},[36,47025,36296],{"class":42},[36,47027,47028,47030,47032,47034,47036],{"class":38,"line":36282},[36,47029,4069],{"class":114},[36,47031,33724],{"class":49},[36,47033,1377],{"class":114},[36,47035,33729],{"class":57},[36,47037,6270],{"class":53},[36,47039,47040],{"class":38,"line":36288},[36,47041,36315],{"class":42},[36,47043,47044,47047,47049],{"class":38,"line":36293},[36,47045,47046],{"class":53},"    GoogLeNet",[36,47048,115],{"class":114},[36,47050,47051],{"class":53},"GoogLeNet(Inception)\n",[36,47053,47054,47056,47058],{"class":38,"line":36299},[36,47055,36332],{"class":53},[36,47057,115],{"class":114},[36,47059,36337],{"class":53},[36,47061,47062,47064,47066,47069,47071,47073,47075],{"class":38,"line":36312},[36,47063,35894],{"class":53},[36,47065,115],{"class":114},[36,47067,47068],{"class":53},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,47070,36350],{"class":1997},[36,47072,115],{"class":114},[36,47074,3624],{"class":49},[36,47076,61],{"class":53},[36,47078,47079],{"class":38,"line":36318},[36,47080,36362],{"class":53},[433,47082,47083],{"start":82},[436,47084,43074],{},[26,47086,47088],{"className":28,"code":47087,"language":30,"meta":31,"style":31},"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",[33,47089,47090,47096,47106,47116,47120,47130,47141,47145,47149,47153,47161,47177,47187,47203,47213,47227,47231,47241,47251,47261,47267,47271,47275,47283,47287,47303,47311,47315,47319,47327,47335,47339,47343,47347,47351,47357,47361,47371,47379,47387,47391,47395,47399,47407,47411,47427,47431,47435,47439,47451,47455,47467,47471,47475,47487,47491,47501,47505,47509,47521,47525,47533,47537,47541,47549,47553,47561,47565,47569,47573,47577,47581,47597,47605,47609,47613,47661,47667,47671,47681,47689,47697,47701,47705,47709,47713,47721,47725,47741,47745,47753,47761],{"__ignoreMap":31},[36,47091,47092,47094],{"class":38,"line":39},[36,47093,537],{"class":114},[36,47095,32902],{"class":53},[36,47097,47098,47100,47102,47104],{"class":38,"line":46},[36,47099,537],{"class":114},[36,47101,33919],{"class":53},[36,47103,33887],{"class":114},[36,47105,33924],{"class":53},[36,47107,47108,47110,47112,47114],{"class":38,"line":82},[36,47109,33241],{"class":114},[36,47111,33902],{"class":53},[36,47113,537],{"class":114},[36,47115,33907],{"class":53},[36,47117,47118],{"class":38,"line":88},[36,47119,36423],{"class":42},[36,47121,47122,47124,47126,47128],{"class":38,"line":195},[36,47123,33241],{"class":114},[36,47125,33872],{"class":53},[36,47127,537],{"class":114},[36,47129,33877],{"class":53},[36,47131,47132,47134,47136,47138],{"class":38,"line":1517},[36,47133,33241],{"class":114},[36,47135,34417],{"class":53},[36,47137,537],{"class":114},[36,47139,47140],{"class":53}," GoogLeNet,Inception\n",[36,47142,47143],{"class":38,"line":2421},[36,47144,546],{"emptyLinePlaceholder":545},[36,47146,47147],{"class":38,"line":2446},[36,47148,546],{"emptyLinePlaceholder":545},[36,47150,47151],{"class":38,"line":2469},[36,47152,36452],{"class":42},[36,47154,47155,47157,47159],{"class":38,"line":2492},[36,47156,34450],{"class":114},[36,47158,36459],{"class":4500},[36,47160,34456],{"class":53},[36,47162,47163,47165,47167,47169,47171,47173,47175],{"class":38,"line":4150},[36,47164,36466],{"class":53},[36,47166,115],{"class":114},[36,47168,33959],{"class":53},[36,47170,33962],{"class":1997},[36,47172,115],{"class":114},[36,47174,33967],{"class":57},[36,47176,33970],{"class":53},[36,47178,47179,47181,47183,47185],{"class":38,"line":4155},[36,47180,36483],{"class":1997},[36,47182,115],{"class":114},[36,47184,276],{"class":49},[36,47186,33970],{"class":53},[36,47188,47189,47191,47193,47195,47197,47199,47201],{"class":38,"line":4161},[36,47190,36494],{"class":1997},[36,47192,115],{"class":114},[36,47194,33996],{"class":53},[36,47196,33999],{"class":1997},[36,47198,115],{"class":114},[36,47200,37949],{"class":49},[36,47202,34007],{"class":53},[36,47204,47205,47207,47209,47211],{"class":38,"line":4166},[36,47206,36511],{"class":1997},[36,47208,115],{"class":114},[36,47210,189],{"class":49},[36,47212,61],{"class":53},[36,47214,47215,47217,47219,47221,47223,47225],{"class":38,"line":4180},[36,47216,36522],{"class":53},[36,47218,115],{"class":114},[36,47220,34037],{"class":53},[36,47222,34040],{"class":1997},[36,47224,115],{"class":114},[36,47226,36533],{"class":53},[36,47228,47229],{"class":38,"line":4185},[36,47230,36538],{"class":42},[36,47232,47233,47235,47237,47239],{"class":38,"line":4191},[36,47234,36543],{"class":1997},[36,47236,115],{"class":114},[36,47238,707],{"class":49},[36,47240,33970],{"class":53},[36,47242,47243,47245,47247,47249],{"class":38,"line":4212},[36,47244,36554],{"class":1997},[36,47246,115],{"class":114},[36,47248,189],{"class":49},[36,47250,33970],{"class":53},[36,47252,47253,47255,47257,47259],{"class":38,"line":4217},[36,47254,36565],{"class":1997},[36,47256,115],{"class":114},[36,47258,713],{"class":49},[36,47260,61],{"class":53},[36,47262,47263,47265],{"class":38,"line":4231},[36,47264,6621],{"class":114},[36,47266,36578],{"class":53},[36,47268,47269],{"class":38,"line":4236},[36,47270,546],{"emptyLinePlaceholder":545},[36,47272,47273],{"class":38,"line":4264},[36,47274,36587],{"class":42},[36,47276,47277,47279,47281],{"class":38,"line":4269},[36,47278,34450],{"class":114},[36,47280,36594],{"class":4500},[36,47282,36597],{"class":53},[36,47284,47285],{"class":38,"line":4286},[36,47286,36602],{"class":42},[36,47288,47289,47291,47293,47295,47297,47299,47301],{"class":38,"line":4291},[36,47290,33741],{"class":53},[36,47292,115],{"class":114},[36,47294,33748],{"class":57},[36,47296,4242],{"class":114},[36,47298,33753],{"class":53},[36,47300,4239],{"class":114},[36,47302,36619],{"class":57},[36,47304,47305,47307,47309],{"class":38,"line":4296},[36,47306,33793],{"class":53},[36,47308,115],{"class":114},[36,47310,34792],{"class":53},[36,47312,47313],{"class":38,"line":4301},[36,47314,546],{"emptyLinePlaceholder":545},[36,47316,47317],{"class":38,"line":4315},[36,47318,36636],{"class":42},[36,47320,47321,47323,47325],{"class":38,"line":4320},[36,47322,36641],{"class":53},[36,47324,115],{"class":114},[36,47326,34845],{"class":49},[36,47328,47329,47331,47333],{"class":38,"line":5109},[36,47330,36650],{"class":53},[36,47332,115],{"class":114},[36,47334,5616],{"class":49},[36,47336,47337],{"class":38,"line":5123},[36,47338,546],{"emptyLinePlaceholder":545},[36,47340,47341],{"class":38,"line":5131},[36,47342,36663],{"class":42},[36,47344,47345],{"class":38,"line":5136},[36,47346,36668],{"class":42},[36,47348,47349],{"class":38,"line":5142},[36,47350,36673],{"class":42},[36,47352,47353,47355],{"class":38,"line":5148},[36,47354,36678],{"class":114},[36,47356,35386],{"class":53},[36,47358,47359],{"class":38,"line":5153},[36,47360,36685],{"class":42},[36,47362,47363,47365,47367,47369],{"class":38,"line":10475},[36,47364,5934],{"class":114},[36,47366,36692],{"class":53},[36,47368,28556],{"class":114},[36,47370,36697],{"class":53},[36,47372,47373,47375,47377],{"class":38,"line":10499},[36,47374,36702],{"class":53},[36,47376,115],{"class":114},[36,47378,36707],{"class":53},[36,47380,47381,47383,47385],{"class":38,"line":10504},[36,47382,36712],{"class":53},[36,47384,115],{"class":114},[36,47386,36717],{"class":53},[36,47388,47389],{"class":38,"line":10510},[36,47390,36722],{"class":42},[36,47392,47393],{"class":38,"line":10537},[36,47394,35377],{"class":53},[36,47396,47397],{"class":38,"line":10542},[36,47398,36731],{"class":42},[36,47400,47401,47403,47405],{"class":38,"line":10548},[36,47402,35162],{"class":53},[36,47404,115],{"class":114},[36,47406,36740],{"class":53},[36,47408,47409],{"class":38,"line":10560},[36,47410,36745],{"class":42},[36,47412,47413,47415,47417,47419,47421,47423,47425],{"class":38,"line":10572},[36,47414,35179],{"class":53},[36,47416,115],{"class":114},[36,47418,35184],{"class":53},[36,47420,35187],{"class":1997},[36,47422,115],{"class":114},[36,47424,707],{"class":49},[36,47426,61],{"class":53},[36,47428,47429],{"class":38,"line":10584},[36,47430,36766],{"class":42},[36,47432,47433],{"class":38,"line":12241},[36,47434,36771],{"class":42},[36,47436,47437],{"class":38,"line":12266},[36,47438,36776],{"class":42},[36,47440,47441,47443,47445,47447,47449],{"class":38,"line":12289},[36,47442,36781],{"class":53},[36,47444,1224],{"class":114},[36,47446,35289],{"class":53},[36,47448,1377],{"class":114},[36,47450,36790],{"class":53},[36,47452,47453],{"class":38,"line":12313},[36,47454,36795],{"class":42},[36,47456,47457,47459,47461,47463,47465],{"class":38,"line":12318},[36,47458,36800],{"class":53},[36,47460,1224],{"class":114},[36,47462,36805],{"class":53},[36,47464,713],{"class":49},[36,47466,61],{"class":53},[36,47468,47469],{"class":38,"line":12323},[36,47470,546],{"emptyLinePlaceholder":545},[36,47472,47473],{"class":38,"line":12328},[36,47474,36818],{"class":42},[36,47476,47477,47479,47481,47483,47485],{"class":38,"line":12337},[36,47478,36823],{"class":53},[36,47480,115],{"class":114},[36,47482,36828],{"class":53},[36,47484,1065],{"class":114},[36,47486,36833],{"class":53},[36,47488,47489],{"class":38,"line":12342},[36,47490,36838],{"class":42},[36,47492,47493,47495,47497,47499],{"class":38,"line":12348},[36,47494,34954],{"class":49},[36,47496,54],{"class":53},[36,47498,36847],{"class":57},[36,47500,36850],{"class":53},[36,47502,47503],{"class":38,"line":12369},[36,47504,546],{"emptyLinePlaceholder":545},[36,47506,47507],{"class":38,"line":12375},[36,47508,36859],{"class":42},[36,47510,47511,47513,47515,47517,47519],{"class":38,"line":12389},[36,47512,4069],{"class":114},[36,47514,33724],{"class":49},[36,47516,1377],{"class":114},[36,47518,33729],{"class":57},[36,47520,6270],{"class":53},[36,47522,47523],{"class":38,"line":12395},[36,47524,36876],{"class":42},[36,47526,47527,47529,47531],{"class":38,"line":12422},[36,47528,33793],{"class":53},[36,47530,115],{"class":114},[36,47532,47051],{"class":53},[36,47534,47535],{"class":38,"line":12431},[36,47536,36889],{"class":42},[36,47538,47539],{"class":38,"line":12437},[36,47540,36894],{"class":42},[36,47542,47543,47545,47547],{"class":38,"line":12445},[36,47544,36899],{"class":53},[36,47546,36902],{"class":57},[36,47548,625],{"class":53},[36,47550,47551],{"class":38,"line":12450},[36,47552,36909],{"class":42},[36,47554,47555,47557,47559],{"class":38,"line":19122},[36,47556,36522],{"class":53},[36,47558,115],{"class":114},[36,47560,36918],{"class":53},[36,47562,47563],{"class":38,"line":19128},[36,47564,36923],{"class":42},[36,47566,47567],{"class":38,"line":19151},[36,47568,36928],{"class":53},[36,47570,47571],{"class":38,"line":19157},[36,47572,546],{"emptyLinePlaceholder":545},[36,47574,47575],{"class":38,"line":19180},[36,47576,36937],{"class":42},[36,47578,47579],{"class":38,"line":19194},[36,47580,36942],{"class":42},[36,47582,47583,47585,47587,47589,47591,47593,47595],{"class":38,"line":19214},[36,47584,33741],{"class":53},[36,47586,115],{"class":114},[36,47588,33748],{"class":57},[36,47590,4242],{"class":114},[36,47592,33753],{"class":53},[36,47594,4239],{"class":114},[36,47596,36619],{"class":57},[36,47598,47599,47601,47603],{"class":38,"line":19220},[36,47600,33793],{"class":53},[36,47602,115],{"class":114},[36,47604,34792],{"class":53},[36,47606,47607],{"class":38,"line":19231},[36,47608,36971],{"class":42},[36,47610,47611],{"class":38,"line":19254},[36,47612,36976],{"class":42},[36,47614,47615,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657,47659],{"class":38,"line":19276},[36,47616,36981],{"class":53},[36,47618,115],{"class":114},[36,47620,3566],{"class":53},[36,47622,36988],{"class":57},[36,47624,3059],{"class":53},[36,47626,36993],{"class":57},[36,47628,3059],{"class":53},[36,47630,36998],{"class":57},[36,47632,3059],{"class":53},[36,47634,37003],{"class":57},[36,47636,3059],{"class":53},[36,47638,37008],{"class":57},[36,47640,3059],{"class":53},[36,47642,37013],{"class":57},[36,47644,3059],{"class":53},[36,47646,37018],{"class":57},[36,47648,3059],{"class":53},[36,47650,37023],{"class":57},[36,47652,3059],{"class":53},[36,47654,37028],{"class":57},[36,47656,3059],{"class":53},[36,47658,37033],{"class":57},[36,47660,35748],{"class":53},[36,47662,47663,47665],{"class":38,"line":19281},[36,47664,36678],{"class":114},[36,47666,35386],{"class":53},[36,47668,47669],{"class":38,"line":19287},[36,47670,37046],{"class":42},[36,47672,47673,47675,47677,47679],{"class":38,"line":19301},[36,47674,5934],{"class":114},[36,47676,37053],{"class":53},[36,47678,28556],{"class":114},[36,47680,36697],{"class":53},[36,47682,47683,47685,47687],{"class":38,"line":19314},[36,47684,35112],{"class":53},[36,47686,115],{"class":114},[36,47688,35117],{"class":53},[36,47690,47691,47693,47695],{"class":38,"line":19319},[36,47692,35127],{"class":53},[36,47694,115],{"class":114},[36,47696,35132],{"class":53},[36,47698,47699],{"class":38,"line":19333},[36,47700,546],{"emptyLinePlaceholder":545},[36,47702,47703],{"class":38,"line":19338},[36,47704,37082],{"class":42},[36,47706,47707],{"class":38,"line":19344},[36,47708,35377],{"class":53},[36,47710,47711],{"class":38,"line":19349},[36,47712,37091],{"class":42},[36,47714,47715,47717,47719],{"class":38,"line":19363},[36,47716,35162],{"class":53},[36,47718,115],{"class":114},[36,47720,35167],{"class":53},[36,47722,47723],{"class":38,"line":19368},[36,47724,37104],{"class":42},[36,47726,47727,47729,47731,47733,47735,47737,47739],{"class":38,"line":19373},[36,47728,35179],{"class":53},[36,47730,115],{"class":114},[36,47732,35184],{"class":53},[36,47734,35187],{"class":1997},[36,47736,115],{"class":114},[36,47738,707],{"class":49},[36,47740,61],{"class":53},[36,47742,47743],{"class":38,"line":19387},[36,47744,37125],{"class":42},[36,47746,47747,47749,47751],{"class":38,"line":19399},[36,47748,37130],{"class":53},[36,47750,115],{"class":114},[36,47752,37135],{"class":53},[36,47754,47755,47757,47759],{"class":38,"line":19404},[36,47756,37140],{"class":53},[36,47758,115],{"class":114},[36,47760,37145],{"class":53},[36,47762,47763,47765,47767,47769,47771,47773,47775,47777],{"class":38,"line":19417},[36,47764,37150],{"class":49},[36,47766,54],{"class":53},[36,47768,37155],{"class":57},[36,47770,37158],{"class":53},[36,47772,37161],{"class":57},[36,47774,3059],{"class":53},[36,47776,37166],{"class":57},[36,47778,37169],{"class":53},[997,47780,47782],{"id":47781},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47784,47785],{},"猫狗分类任务",[19,47787,47788],{},"划分数据集和验证集",[26,47790,47792],{"className":28,"code":47791,"language":30,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\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",[33,47793,47794,47799,47806,47811,47822,47829,47833,47843,47857,47866,47870,47875,47885,47905,47909,47914,47924,47935,47948,47952,47957,47966,47976,47987,47991,47996,48006,48010,48015,48020,48025,48030,48035,48039,48049,48075,48088,48100,48126,48131,48136,48150,48155,48167,48182,48197,48205,48209,48214,48220,48232,48245,48250,48255,48260,48309,48315,48319],{"__ignoreMap":31},[36,47795,47796],{"class":38,"line":39},[36,47797,47798],{"class":42},"# 创建脚本，用于划分数据集和验证集\n",[36,47800,47801,47803],{"class":38,"line":46},[36,47802,537],{"class":114},[36,47804,47805],{"class":53}," os\n",[36,47807,47808],{"class":38,"line":82},[36,47809,47810],{"class":42},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,47812,47813,47815,47818,47820],{"class":38,"line":88},[36,47814,33241],{"class":114},[36,47816,47817],{"class":53}," shutil ",[36,47819,537],{"class":114},[36,47821,34325],{"class":53},[36,47823,47824,47826],{"class":38,"line":195},[36,47825,537],{"class":114},[36,47827,47828],{"class":53}," random\n",[36,47830,47831],{"class":38,"line":1517},[36,47832,546],{"emptyLinePlaceholder":545},[36,47834,47835,47837,47840],{"class":38,"line":2421},[36,47836,34450],{"class":114},[36,47838,47839],{"class":4500}," mkfile",[36,47841,47842],{"class":53},"(file):\n",[36,47844,47845,47847,47849,47852,47855],{"class":38,"line":2446},[36,47846,5632],{"class":114},[36,47848,41430],{"class":114},[36,47850,47851],{"class":53}," os.path.exists(",[36,47853,47854],{"class":1997},"file",[36,47856,33290],{"class":53},[36,47858,47859,47862,47864],{"class":38,"line":2469},[36,47860,47861],{"class":53},"        os.makedirs(",[36,47863,47854],{"class":1997},[36,47865,61],{"class":53},[36,47867,47868],{"class":38,"line":2492},[36,47869,546],{"emptyLinePlaceholder":545},[36,47871,47872],{"class":38,"line":4150},[36,47873,47874],{"class":42},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,47876,47877,47880,47882],{"class":38,"line":4155},[36,47878,47879],{"class":53},"file_path",[36,47881,115],{"class":114},[36,47883,47884],{"class":57},"'data_cat_dog'\n",[36,47886,47887,47890,47892,47895,47897,47900,47902],{"class":38,"line":4161},[36,47888,47889],{"class":53},"flower_class",[36,47891,115],{"class":114},[36,47893,47894],{"class":53},"[cla ",[36,47896,5556],{"class":114},[36,47898,47899],{"class":53}," cla ",[36,47901,28556],{"class":114},[36,47903,47904],{"class":53}," os.listdir(file_path)]\n",[36,47906,47907],{"class":38,"line":4166},[36,47908,546],{"emptyLinePlaceholder":545},[36,47910,47911],{"class":38,"line":4180},[36,47912,47913],{"class":42},"# 创建训练集train文件夹\n",[36,47915,47916,47919,47922],{"class":38,"line":4185},[36,47917,47918],{"class":53},"mkfile(",[36,47920,47921],{"class":57},"'data\u002Ftrain'",[36,47923,61],{"class":53},[36,47925,47926,47928,47930,47932],{"class":38,"line":4191},[36,47927,5556],{"class":114},[36,47929,47899],{"class":53},[36,47931,28556],{"class":114},[36,47933,47934],{"class":53}," flower_class:\n",[36,47936,47937,47940,47943,47945],{"class":38,"line":4212},[36,47938,47939],{"class":53},"    mkfile(",[36,47941,47942],{"class":57},"'data\u002Ftrain\u002F'",[36,47944,121],{"class":114},[36,47946,47947],{"class":53},"cla)\n",[36,47949,47950],{"class":38,"line":4217},[36,47951,546],{"emptyLinePlaceholder":545},[36,47953,47954],{"class":38,"line":4231},[36,47955,47956],{"class":42},"# 创建验证集val文件夹\n",[36,47958,47959,47961,47964],{"class":38,"line":4236},[36,47960,47918],{"class":53},[36,47962,47963],{"class":57},"'data\u002Ftest'",[36,47965,61],{"class":53},[36,47967,47968,47970,47972,47974],{"class":38,"line":4264},[36,47969,5556],{"class":114},[36,47971,47899],{"class":53},[36,47973,28556],{"class":114},[36,47975,47934],{"class":53},[36,47977,47978,47980,47983,47985],{"class":38,"line":4269},[36,47979,47939],{"class":53},[36,47981,47982],{"class":57},"'data\u002Ftest\u002F'",[36,47984,121],{"class":114},[36,47986,47947],{"class":53},[36,47988,47989],{"class":38,"line":4286},[36,47990,546],{"emptyLinePlaceholder":545},[36,47992,47993],{"class":38,"line":4291},[36,47994,47995],{"class":42},"# 划分比例，训练集：测试集=9：1\n",[36,47997,47998,48001,48003],{"class":38,"line":4296},[36,47999,48000],{"class":53},"split_rate",[36,48002,115],{"class":114},[36,48004,48005],{"class":49},"0.1\n",[36,48007,48008],{"class":38,"line":4301},[36,48009,546],{"emptyLinePlaceholder":545},[36,48011,48012],{"class":38,"line":4315},[36,48013,48014],{"class":42},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,48016,48017],{"class":38,"line":4320},[36,48018,48019],{"class":42},"# cla_path：当前类别的原始图片路径\n",[36,48021,48022],{"class":38,"line":5109},[36,48023,48024],{"class":42},"# images：当前类别下所有图片的文件名列表\n",[36,48026,48027],{"class":38,"line":5123},[36,48028,48029],{"class":42},"# num：该类别图片总数\n",[36,48031,48032],{"class":38,"line":5131},[36,48033,48034],{"class":42},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,48036,48037],{"class":38,"line":5136},[36,48038,546],{"emptyLinePlaceholder":545},[36,48040,48041,48043,48045,48047],{"class":38,"line":5142},[36,48042,5556],{"class":114},[36,48044,47899],{"class":53},[36,48046,28556],{"class":114},[36,48048,47934],{"class":53},[36,48050,48051,48054,48056,48059,48061,48064,48066,48068,48070,48072],{"class":38,"line":5148},[36,48052,48053],{"class":53},"    cla_path ",[36,48055,115],{"class":114},[36,48057,48058],{"class":53}," file_path ",[36,48060,121],{"class":114},[36,48062,48063],{"class":57}," '\u002F'",[36,48065,730],{"class":114},[36,48067,47899],{"class":53},[36,48069,121],{"class":114},[36,48071,48063],{"class":57},[36,48073,48074],{"class":42},"  # 某一类别的子目录\n",[36,48076,48077,48080,48082,48085],{"class":38,"line":5153},[36,48078,48079],{"class":53},"    images ",[36,48081,115],{"class":114},[36,48083,48084],{"class":53}," os.listdir(cla_path)  ",[36,48086,48087],{"class":42},"# iamges 列表存储了该目录下所有图像的名称\n",[36,48089,48090,48093,48095,48097],{"class":38,"line":10475},[36,48091,48092],{"class":53},"    num ",[36,48094,115],{"class":114},[36,48096,9858],{"class":49},[36,48098,48099],{"class":53},"(images)\n",[36,48101,48102,48105,48107,48110,48112,48114,48116,48118,48120,48123],{"class":38,"line":10499},[36,48103,48104],{"class":53},"    eval_index ",[36,48106,115],{"class":114},[36,48108,48109],{"class":53}," random.sample(images, ",[36,48111,3171],{"class":1997},[36,48113,115],{"class":114},[36,48115,232],{"class":49},[36,48117,926],{"class":53},[36,48119,1050],{"class":114},[36,48121,48122],{"class":53}," split_rate))  ",[36,48124,48125],{"class":42},"# 从images列表中随机抽取 k 个图像名称\n",[36,48127,48128],{"class":38,"line":10504},[36,48129,48130],{"class":42},"    # 遍历该类别下的所有图片\n",[36,48132,48133],{"class":38,"line":10510},[36,48134,48135],{"class":42},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,48137,48138,48140,48143,48145,48147],{"class":38,"line":10537},[36,48139,5732],{"class":114},[36,48141,48142],{"class":53}," index, image ",[36,48144,28556],{"class":114},[36,48146,34109],{"class":49},[36,48148,48149],{"class":53},"(images):\n",[36,48151,48152],{"class":38,"line":10542},[36,48153,48154],{"class":42},"        # eval_index 中保存验证集val的图像名称\n",[36,48156,48157,48159,48162,48164],{"class":38,"line":10548},[36,48158,5029],{"class":114},[36,48160,48161],{"class":53}," image ",[36,48163,28556],{"class":114},[36,48165,48166],{"class":53}," eval_index:\n",[36,48168,48169,48172,48174,48177,48179],{"class":38,"line":10560},[36,48170,48171],{"class":53},"            image_path ",[36,48173,115],{"class":114},[36,48175,48176],{"class":53}," cla_path ",[36,48178,121],{"class":114},[36,48180,48181],{"class":53}," image\n",[36,48183,48184,48187,48189,48192,48194],{"class":38,"line":10572},[36,48185,48186],{"class":53},"            new_path ",[36,48188,115],{"class":114},[36,48190,48191],{"class":57}," 'data\u002Ftest\u002F'",[36,48193,730],{"class":114},[36,48195,48196],{"class":53}," cla\n",[36,48198,48199,48202],{"class":38,"line":10584},[36,48200,48201],{"class":53},"            copy(image_path, new_path)  ",[36,48203,48204],{"class":42},"# 将选中的图像复制到新路径\n",[36,48206,48207],{"class":38,"line":12241},[36,48208,546],{"emptyLinePlaceholder":545},[36,48210,48211],{"class":38,"line":12266},[36,48212,48213],{"class":42},"        # 其余的图像保存在训练集train中\n",[36,48215,48216,48218],{"class":38,"line":12289},[36,48217,5066],{"class":114},[36,48219,6270],{"class":53},[36,48221,48222,48224,48226,48228,48230],{"class":38,"line":12313},[36,48223,48171],{"class":53},[36,48225,115],{"class":114},[36,48227,48176],{"class":53},[36,48229,121],{"class":114},[36,48231,48181],{"class":53},[36,48233,48234,48236,48238,48241,48243],{"class":38,"line":12318},[36,48235,48186],{"class":53},[36,48237,115],{"class":114},[36,48239,48240],{"class":57}," 'data\u002Ftrain\u002F'",[36,48242,730],{"class":114},[36,48244,48196],{"class":53},[36,48246,48247],{"class":38,"line":12323},[36,48248,48249],{"class":53},"            copy(image_path, new_path)\n",[36,48251,48252],{"class":38,"line":12328},[36,48253,48254],{"class":42},"            # 打印进度条信息\n",[36,48256,48257],{"class":38,"line":12337},[36,48258,48259],{"class":42},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,48261,48262,48264,48266,48268,48271,48273,48275,48278,48280,48282,48284,48287,48290,48292,48294,48297,48300,48302,48304,48306],{"class":38,"line":12342},[36,48263,34954],{"class":49},[36,48265,54],{"class":53},[36,48267,1822],{"class":57},[36,48269,48270],{"class":49},"\\r",[36,48272,3566],{"class":57},[36,48274,1944],{"class":49},[36,48276,48277],{"class":57},"] processing [",[36,48279,1944],{"class":49},[36,48281,1065],{"class":57},[36,48283,1944],{"class":49},[36,48285,48286],{"class":57},"]\"",[36,48288,48289],{"class":53},".format(cla, index ",[36,48291,121],{"class":114},[36,48293,733],{"class":49},[36,48295,48296],{"class":53},", num), ",[36,48298,48299],{"class":1997},"end",[36,48301,115],{"class":114},[36,48303,10179],{"class":57},[36,48305,754],{"class":53},[36,48307,48308],{"class":42},"# processing bar\n",[36,48310,48311,48313],{"class":38,"line":12348},[36,48312,33803],{"class":49},[36,48314,4513],{"class":53},[36,48316,48317],{"class":38,"line":12369},[36,48318,546],{"emptyLinePlaceholder":545},[36,48320,48321,48323,48325,48328],{"class":38,"line":12375},[36,48322,50],{"class":49},[36,48324,54],{"class":53},[36,48326,48327],{"class":57},"\"processing done!\"",[36,48329,61],{"class":53},[19,48331,48332],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24515,48334,48336],{"id":48335},"_242模型代码","2.4.2.模型代码",[19,48338,48339],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,48341,48343],{"className":28,"code":48342,"language":30,"meta":31,"style":31},"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",[33,48344,48345,48351,48361,48371,48375,48391,48399,48413,48423,48427,48457,48461,48495,48541,48545,48579,48625,48629,48633,48667,48697,48701,48709,48723,48745,48767,48785,48789,48803,48807,48811,48827,48831,48839,48853,48863,48907,48911,48939,48943,48953,48981,48985,49021,49025,49053,49057,49067,49099,49131,49159,49163,49173,49205,49237,49269,49301,49333,49361,49365,49375,49407,49439,49451,49455,49467,49471,49475,49487,49495,49515,49519,49523,49527,49531,49535,49539,49553,49561,49569,49581,49595,49603,49607,49615,49625,49635,49645,49655,49665,49671,49675,49679,49691,49711,49719],{"__ignoreMap":31},[36,48346,48347,48349],{"class":38,"line":39},[36,48348,537],{"class":114},[36,48350,32902],{"class":53},[36,48352,48353,48355,48357,48359],{"class":38,"line":46},[36,48354,33241],{"class":114},[36,48356,33244],{"class":53},[36,48358,537],{"class":114},[36,48360,33249],{"class":53},[36,48362,48363,48365,48367,48369],{"class":38,"line":82},[36,48364,33241],{"class":114},[36,48366,33261],{"class":53},[36,48368,537],{"class":114},[36,48370,33266],{"class":53},[36,48372,48373],{"class":38,"line":88},[36,48374,546],{"emptyLinePlaceholder":545},[36,48376,48377,48379,48381,48383,48385,48387,48389],{"class":38,"line":195},[36,48378,519],{"class":114},[36,48380,43993],{"class":4500},[36,48382,54],{"class":53},[36,48384,33282],{"class":4500},[36,48386,3235],{"class":53},[36,48388,33287],{"class":4500},[36,48390,33290],{"class":53},[36,48392,48393,48395,48397],{"class":38,"line":1517},[36,48394,33305],{"class":114},[36,48396,33308],{"class":49},[36,48398,44012],{"class":53},[36,48400,48401,48403,48405,48407,48409,48411],{"class":38,"line":2421},[36,48402,33321],{"class":49},[36,48404,44019],{"class":53},[36,48406,33327],{"class":49},[36,48408,33330],{"class":53},[36,48410,33333],{"class":49},[36,48412,4513],{"class":53},[36,48414,48415,48417,48419,48421],{"class":38,"line":2446},[36,48416,33349],{"class":49},[36,48418,37271],{"class":53},[36,48420,115],{"class":114},[36,48422,37276],{"class":53},[36,48424,48425],{"class":38,"line":2469},[36,48426,44042],{"class":42},[36,48428,48429,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453,48455],{"class":38,"line":2492},[36,48430,33349],{"class":49},[36,48432,44049],{"class":53},[36,48434,115],{"class":114},[36,48436,33357],{"class":53},[36,48438,33360],{"class":1997},[36,48440,115],{"class":114},[36,48442,44060],{"class":53},[36,48444,33369],{"class":1997},[36,48446,115],{"class":114},[36,48448,44067],{"class":53},[36,48450,33378],{"class":1997},[36,48452,115],{"class":114},[36,48454,707],{"class":49},[36,48456,61],{"class":53},[36,48458,48459],{"class":38,"line":4150},[36,48460,44080],{"class":42},[36,48462,48463,48465,48467,48469,48471,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491,48493],{"class":38,"line":4155},[36,48464,33349],{"class":49},[36,48466,44087],{"class":53},[36,48468,115],{"class":114},[36,48470,33357],{"class":53},[36,48472,33360],{"class":1997},[36,48474,115],{"class":114},[36,48476,44060],{"class":53},[36,48478,33369],{"class":1997},[36,48480,115],{"class":114},[36,48482,44104],{"class":53},[36,48484,713],{"class":49},[36,48486,44109],{"class":53},[36,48488,33378],{"class":1997},[36,48490,115],{"class":114},[36,48492,707],{"class":49},[36,48494,61],{"class":53},[36,48496,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533,48535,48537,48539],{"class":38,"line":4161},[36,48498,33349],{"class":49},[36,48500,44124],{"class":53},[36,48502,115],{"class":114},[36,48504,33357],{"class":53},[36,48506,33360],{"class":1997},[36,48508,115],{"class":114},[36,48510,44104],{"class":53},[36,48512,713],{"class":49},[36,48514,44109],{"class":53},[36,48516,33369],{"class":1997},[36,48518,115],{"class":114},[36,48520,44104],{"class":53},[36,48522,707],{"class":49},[36,48524,44109],{"class":53},[36,48526,33378],{"class":1997},[36,48528,115],{"class":114},[36,48530,2767],{"class":49},[36,48532,3059],{"class":53},[36,48534,33387],{"class":1997},[36,48536,115],{"class":114},[36,48538,707],{"class":49},[36,48540,61],{"class":53},[36,48542,48543],{"class":38,"line":4166},[36,48544,44169],{"class":42},[36,48546,48547,48549,48551,48553,48555,48557,48559,48561,48563,48565,48567,48569,48571,48573,48575,48577],{"class":38,"line":4180},[36,48548,33349],{"class":49},[36,48550,44176],{"class":53},[36,48552,115],{"class":114},[36,48554,33357],{"class":53},[36,48556,33360],{"class":1997},[36,48558,115],{"class":114},[36,48560,44060],{"class":53},[36,48562,33369],{"class":1997},[36,48564,115],{"class":114},[36,48566,44193],{"class":53},[36,48568,713],{"class":49},[36,48570,44109],{"class":53},[36,48572,33378],{"class":1997},[36,48574,115],{"class":114},[36,48576,707],{"class":49},[36,48578,61],{"class":53},[36,48580,48581,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619,48621,48623],{"class":38,"line":4185},[36,48582,33349],{"class":49},[36,48584,44212],{"class":53},[36,48586,115],{"class":114},[36,48588,33357],{"class":53},[36,48590,33360],{"class":1997},[36,48592,115],{"class":114},[36,48594,44193],{"class":53},[36,48596,713],{"class":49},[36,48598,44109],{"class":53},[36,48600,33369],{"class":1997},[36,48602,115],{"class":114},[36,48604,44193],{"class":53},[36,48606,707],{"class":49},[36,48608,44109],{"class":53},[36,48610,33378],{"class":1997},[36,48612,115],{"class":114},[36,48614,1134],{"class":49},[36,48616,3059],{"class":53},[36,48618,33387],{"class":1997},[36,48620,115],{"class":114},[36,48622,1188],{"class":49},[36,48624,61],{"class":53},[36,48626,48627],{"class":38,"line":4191},[36,48628,44257],{"class":42},[36,48630,48631],{"class":38,"line":4212},[36,48632,44262],{"class":42},[36,48634,48635,48637,48639,48641,48643,48645,48647,48649,48651,48653,48655,48657,48659,48661,48663,48665],{"class":38,"line":4217},[36,48636,33349],{"class":49},[36,48638,44269],{"class":53},[36,48640,115],{"class":114},[36,48642,37329],{"class":53},[36,48644,33378],{"class":1997},[36,48646,115],{"class":114},[36,48648,2767],{"class":49},[36,48650,3059],{"class":53},[36,48652,33433],{"class":1997},[36,48654,115],{"class":114},[36,48656,707],{"class":49},[36,48658,3059],{"class":53},[36,48660,33387],{"class":1997},[36,48662,115],{"class":114},[36,48664,707],{"class":49},[36,48666,61],{"class":53},[36,48668,48669,48671,48673,48675,48677,48679,48681,48683,48685,48687,48689,48691,48693,48695],{"class":38,"line":4231},[36,48670,33349],{"class":49},[36,48672,44304],{"class":53},[36,48674,115],{"class":114},[36,48676,33357],{"class":53},[36,48678,33360],{"class":1997},[36,48680,115],{"class":114},[36,48682,44060],{"class":53},[36,48684,33369],{"class":1997},[36,48686,115],{"class":114},[36,48688,44321],{"class":53},[36,48690,33378],{"class":1997},[36,48692,115],{"class":114},[36,48694,707],{"class":49},[36,48696,61],{"class":53},[36,48698,48699],{"class":38,"line":4236},[36,48700,546],{"emptyLinePlaceholder":545},[36,48702,48703,48705,48707],{"class":38,"line":4264},[36,48704,33305],{"class":114},[36,48706,33597],{"class":4500},[36,48708,33600],{"class":53},[36,48710,48711,48713,48715,48717,48719,48721],{"class":38,"line":4269},[36,48712,44346],{"class":53},[36,48714,115],{"class":114},[36,48716,33327],{"class":49},[36,48718,37684],{"class":53},[36,48720,33327],{"class":49},[36,48722,44357],{"class":53},[36,48724,48725,48727,48729,48731,48733,48735,48737,48739,48741,48743],{"class":38,"line":4286},[36,48726,9612],{"class":53},[36,48728,115],{"class":114},[36,48730,33327],{"class":49},[36,48732,37684],{"class":53},[36,48734,33327],{"class":49},[36,48736,44372],{"class":53},[36,48738,33327],{"class":49},[36,48740,37684],{"class":53},[36,48742,33327],{"class":49},[36,48744,44381],{"class":53},[36,48746,48747,48749,48751,48753,48755,48757,48759,48761,48763,48765],{"class":38,"line":4291},[36,48748,44386],{"class":53},[36,48750,115],{"class":114},[36,48752,33327],{"class":49},[36,48754,37684],{"class":53},[36,48756,33327],{"class":49},[36,48758,44397],{"class":53},[36,48760,33327],{"class":49},[36,48762,37684],{"class":53},[36,48764,33327],{"class":49},[36,48766,44406],{"class":53},[36,48768,48769,48771,48773,48775,48777,48779,48781,48783],{"class":38,"line":4296},[36,48770,44411],{"class":53},[36,48772,115],{"class":114},[36,48774,33327],{"class":49},[36,48776,37684],{"class":53},[36,48778,33327],{"class":49},[36,48780,44422],{"class":53},[36,48782,33327],{"class":49},[36,48784,44427],{"class":53},[36,48786,48787],{"class":38,"line":4301},[36,48788,44432],{"class":42},[36,48790,48791,48793,48795,48797,48799,48801],{"class":38,"line":4315},[36,48792,17273],{"class":114},[36,48794,44439],{"class":53},[36,48796,35187],{"class":1997},[36,48798,115],{"class":114},[36,48800,707],{"class":49},[36,48802,61],{"class":53},[36,48804,48805],{"class":38,"line":4320},[36,48806,546],{"emptyLinePlaceholder":545},[36,48808,48809],{"class":38,"line":5109},[36,48810,44460],{"class":42},[36,48812,48813,48815,48817,48819,48821,48823,48825],{"class":38,"line":5123},[36,48814,519],{"class":114},[36,48816,44467],{"class":4500},[36,48818,54],{"class":53},[36,48820,33282],{"class":4500},[36,48822,3235],{"class":53},[36,48824,33287],{"class":4500},[36,48826,33290],{"class":53},[36,48828,48829],{"class":38,"line":5131},[36,48830,44482],{"class":42},[36,48832,48833,48835,48837],{"class":38,"line":5136},[36,48834,33305],{"class":114},[36,48836,33308],{"class":49},[36,48838,44491],{"class":53},[36,48840,48841,48843,48845,48847,48849,48851],{"class":38,"line":5142},[36,48842,33321],{"class":49},[36,48844,44498],{"class":53},[36,48846,33327],{"class":49},[36,48848,33330],{"class":53},[36,48850,33333],{"class":49},[36,48852,4513],{"class":53},[36,48854,48855,48857,48859,48861],{"class":38,"line":5148},[36,48856,33349],{"class":49},[36,48858,44513],{"class":53},[36,48860,115],{"class":114},[36,48862,40509],{"class":53},[36,48864,48865,48867,48869,48871,48873,48875,48877,48879,48881,48883,48885,48887,48889,48891,48893,48895,48897,48899,48901,48903,48905],{"class":38,"line":5153},[36,48866,40514],{"class":53},[36,48868,33360],{"class":1997},[36,48870,115],{"class":114},[36,48872,2767],{"class":49},[36,48874,3059],{"class":53},[36,48876,33369],{"class":1997},[36,48878,115],{"class":114},[36,48880,2890],{"class":49},[36,48882,3059],{"class":53},[36,48884,33378],{"class":1997},[36,48886,115],{"class":114},[36,48888,3050],{"class":49},[36,48890,3059],{"class":53},[36,48892,33433],{"class":1997},[36,48894,115],{"class":114},[36,48896,1188],{"class":49},[36,48898,3059],{"class":53},[36,48900,33387],{"class":1997},[36,48902,115],{"class":114},[36,48904,2767],{"class":49},[36,48906,40547],{"class":53},[36,48908,48909],{"class":38,"line":10475},[36,48910,40552],{"class":53},[36,48912,48913,48915,48917,48919,48921,48923,48925,48927,48929,48931,48933,48935,48937],{"class":38,"line":10499},[36,48914,40597],{"class":53},[36,48916,33378],{"class":1997},[36,48918,115],{"class":114},[36,48920,2767],{"class":49},[36,48922,3059],{"class":53},[36,48924,33433],{"class":1997},[36,48926,115],{"class":114},[36,48928,1188],{"class":49},[36,48930,3059],{"class":53},[36,48932,33387],{"class":1997},[36,48934,115],{"class":114},[36,48936,707],{"class":49},[36,48938,61],{"class":53},[36,48940,48941],{"class":38,"line":10504},[36,48942,40626],{"class":53},[36,48944,48945,48947,48949,48951],{"class":38,"line":10510},[36,48946,33349],{"class":49},[36,48948,44604],{"class":53},[36,48950,115],{"class":114},[36,48952,40509],{"class":53},[36,48954,48955,48957,48959,48961,48963,48965,48967,48969,48971,48973,48975,48977,48979],{"class":38,"line":10537},[36,48956,40514],{"class":53},[36,48958,33360],{"class":1997},[36,48960,115],{"class":114},[36,48962,2890],{"class":49},[36,48964,3059],{"class":53},[36,48966,33369],{"class":1997},[36,48968,115],{"class":114},[36,48970,2890],{"class":49},[36,48972,3059],{"class":53},[36,48974,33378],{"class":1997},[36,48976,115],{"class":114},[36,48978,707],{"class":49},[36,48980,40547],{"class":53},[36,48982,48983],{"class":38,"line":10542},[36,48984,40552],{"class":53},[36,48986,48987,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019],{"class":38,"line":10548},[36,48988,40514],{"class":53},[36,48990,33360],{"class":1997},[36,48992,115],{"class":114},[36,48994,2890],{"class":49},[36,48996,3059],{"class":53},[36,48998,33369],{"class":1997},[36,49000,115],{"class":114},[36,49002,44659],{"class":49},[36,49004,3059],{"class":53},[36,49006,33378],{"class":1997},[36,49008,115],{"class":114},[36,49010,2767],{"class":49},[36,49012,3059],{"class":53},[36,49014,33387],{"class":1997},[36,49016,115],{"class":114},[36,49018,707],{"class":49},[36,49020,40547],{"class":53},[36,49022,49023],{"class":38,"line":10560},[36,49024,40552],{"class":53},[36,49026,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051],{"class":38,"line":10572},[36,49028,40597],{"class":53},[36,49030,33378],{"class":1997},[36,49032,115],{"class":114},[36,49034,2767],{"class":49},[36,49036,3059],{"class":53},[36,49038,33433],{"class":1997},[36,49040,115],{"class":114},[36,49042,1188],{"class":49},[36,49044,3059],{"class":53},[36,49046,33387],{"class":1997},[36,49048,115],{"class":114},[36,49050,707],{"class":49},[36,49052,61],{"class":53},[36,49054,49055],{"class":38,"line":10584},[36,49056,40626],{"class":53},[36,49058,49059,49061,49063,49065],{"class":38,"line":12241},[36,49060,33349],{"class":49},[36,49062,44720],{"class":53},[36,49064,115],{"class":114},[36,49066,40509],{"class":53},[36,49068,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097],{"class":38,"line":12266},[36,49070,44729],{"class":53},[36,49072,44659],{"class":49},[36,49074,3059],{"class":53},[36,49076,2890],{"class":49},[36,49078,44738],{"class":53},[36,49080,2896],{"class":49},[36,49082,3059],{"class":53},[36,49084,34573],{"class":49},[36,49086,44747],{"class":53},[36,49088,3277],{"class":49},[36,49090,3059],{"class":53},[36,49092,2884],{"class":49},[36,49094,44756],{"class":53},[36,49096,2884],{"class":49},[36,49098,40547],{"class":53},[36,49100,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129],{"class":38,"line":12289},[36,49102,44729],{"class":53},[36,49104,37370],{"class":49},[36,49106,3059],{"class":53},[36,49108,34573],{"class":49},[36,49110,44738],{"class":53},[36,49112,34573],{"class":49},[36,49114,3059],{"class":53},[36,49116,44659],{"class":49},[36,49118,44747],{"class":53},[36,49120,2884],{"class":49},[36,49122,3059],{"class":53},[36,49124,2896],{"class":49},[36,49126,44756],{"class":53},[36,49128,2890],{"class":49},[36,49130,40547],{"class":53},[36,49132,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157],{"class":38,"line":12313},[36,49134,40597],{"class":53},[36,49136,33378],{"class":1997},[36,49138,115],{"class":114},[36,49140,2767],{"class":49},[36,49142,3059],{"class":53},[36,49144,33433],{"class":1997},[36,49146,115],{"class":114},[36,49148,1188],{"class":49},[36,49150,3059],{"class":53},[36,49152,33387],{"class":1997},[36,49154,115],{"class":114},[36,49156,707],{"class":49},[36,49158,61],{"class":53},[36,49160,49161],{"class":38,"line":12318},[36,49162,40626],{"class":53},[36,49164,49165,49167,49169,49171],{"class":38,"line":12323},[36,49166,33349],{"class":49},[36,49168,44831],{"class":53},[36,49170,115],{"class":114},[36,49172,40509],{"class":53},[36,49174,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203],{"class":38,"line":12328},[36,49176,44729],{"class":53},[36,49178,44842],{"class":49},[36,49180,3059],{"class":53},[36,49182,44659],{"class":49},[36,49184,44738],{"class":53},[36,49186,2896],{"class":49},[36,49188,3059],{"class":53},[36,49190,44855],{"class":49},[36,49192,44747],{"class":53},[36,49194,3277],{"class":49},[36,49196,3059],{"class":53},[36,49198,3283],{"class":49},[36,49200,44756],{"class":53},[36,49202,2890],{"class":49},[36,49204,40547],{"class":53},[36,49206,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235],{"class":38,"line":12337},[36,49208,44729],{"class":53},[36,49210,40957],{"class":49},[36,49212,3059],{"class":53},[36,49214,23566],{"class":49},[36,49216,44738],{"class":53},[36,49218,3294],{"class":49},[36,49220,3059],{"class":53},[36,49222,34004],{"class":49},[36,49224,44747],{"class":53},[36,49226,3476],{"class":49},[36,49228,3059],{"class":53},[36,49230,2890],{"class":49},[36,49232,44756],{"class":53},[36,49234,2890],{"class":49},[36,49236,40547],{"class":53},[36,49238,49239,49241,49243,49245,49247,49249,49251,49253,49255,49257,49259,49261,49263,49265,49267],{"class":38,"line":12342},[36,49240,44729],{"class":53},[36,49242,40957],{"class":49},[36,49244,3059],{"class":53},[36,49246,34573],{"class":49},[36,49248,44738],{"class":53},[36,49250,34573],{"class":49},[36,49252,3059],{"class":53},[36,49254,37370],{"class":49},[36,49256,44747],{"class":53},[36,49258,3476],{"class":49},[36,49260,3059],{"class":53},[36,49262,2890],{"class":49},[36,49264,44756],{"class":53},[36,49266,2890],{"class":49},[36,49268,40547],{"class":53},[36,49270,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293,49295,49297,49299],{"class":38,"line":12348},[36,49272,44729],{"class":53},[36,49274,40957],{"class":49},[36,49276,3059],{"class":53},[36,49278,3294],{"class":49},[36,49280,44738],{"class":53},[36,49282,34573],{"class":49},[36,49284,3059],{"class":53},[36,49286,44952],{"class":49},[36,49288,44747],{"class":53},[36,49290,2884],{"class":49},[36,49292,3059],{"class":53},[36,49294,2890],{"class":49},[36,49296,44756],{"class":53},[36,49298,2890],{"class":49},[36,49300,40547],{"class":53},[36,49302,49303,49305,49307,49309,49311,49313,49315,49317,49319,49321,49323,49325,49327,49329,49331],{"class":38,"line":12369},[36,49304,44729],{"class":53},[36,49306,44973],{"class":49},[36,49308,3059],{"class":53},[36,49310,37370],{"class":49},[36,49312,44738],{"class":53},[36,49314,23566],{"class":49},[36,49316,3059],{"class":53},[36,49318,44986],{"class":49},[36,49320,44747],{"class":53},[36,49322,2884],{"class":49},[36,49324,3059],{"class":53},[36,49326,34573],{"class":49},[36,49328,44756],{"class":53},[36,49330,34573],{"class":49},[36,49332,40547],{"class":53},[36,49334,49335,49337,49339,49341,49343,49345,49347,49349,49351,49353,49355,49357,49359],{"class":38,"line":12375},[36,49336,40597],{"class":53},[36,49338,33378],{"class":1997},[36,49340,115],{"class":114},[36,49342,2767],{"class":49},[36,49344,3059],{"class":53},[36,49346,33433],{"class":1997},[36,49348,115],{"class":114},[36,49350,1188],{"class":49},[36,49352,3059],{"class":53},[36,49354,33387],{"class":1997},[36,49356,115],{"class":114},[36,49358,707],{"class":49},[36,49360,61],{"class":53},[36,49362,49363],{"class":38,"line":12389},[36,49364,40626],{"class":53},[36,49366,49367,49369,49371,49373],{"class":38,"line":12395},[36,49368,33349],{"class":49},[36,49370,45039],{"class":53},[36,49372,115],{"class":114},[36,49374,40509],{"class":53},[36,49376,49377,49379,49381,49383,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405],{"class":38,"line":12422},[36,49378,44729],{"class":53},[36,49380,45050],{"class":49},[36,49382,3059],{"class":53},[36,49384,37370],{"class":49},[36,49386,44738],{"class":53},[36,49388,23566],{"class":49},[36,49390,3059],{"class":53},[36,49392,44986],{"class":49},[36,49394,44747],{"class":53},[36,49396,2884],{"class":49},[36,49398,3059],{"class":53},[36,49400,34573],{"class":49},[36,49402,44756],{"class":53},[36,49404,34573],{"class":49},[36,49406,40547],{"class":53},[36,49408,49409,49411,49413,49415,49417,49419,49421,49423,49425,49427,49429,49431,49433,49435,49437],{"class":38,"line":12431},[36,49410,44729],{"class":53},[36,49412,45050],{"class":49},[36,49414,3059],{"class":53},[36,49416,37440],{"class":49},[36,49418,44738],{"class":53},[36,49420,44659],{"class":49},[36,49422,3059],{"class":53},[36,49424,37440],{"class":49},[36,49426,44747],{"class":53},[36,49428,3283],{"class":49},[36,49430,3059],{"class":53},[36,49432,34573],{"class":49},[36,49434,44756],{"class":53},[36,49436,34573],{"class":49},[36,49438,40547],{"class":53},[36,49440,49441,49443,49445,49447,49449],{"class":38,"line":12437},[36,49442,45113],{"class":53},[36,49444,707],{"class":49},[36,49446,3059],{"class":53},[36,49448,707],{"class":49},[36,49450,45122],{"class":53},[36,49452,49453],{"class":38,"line":12445},[36,49454,41290],{"class":53},[36,49456,49457,49459,49461,49463,49465],{"class":38,"line":12450},[36,49458,41295],{"class":53},[36,49460,45133],{"class":49},[36,49462,3059],{"class":53},[36,49464,1188],{"class":49},[36,49466,61],{"class":53},[36,49468,49469],{"class":38,"line":19122},[36,49470,40626],{"class":53},[36,49472,49473],{"class":38,"line":19128},[36,49474,45148],{"class":42},[36,49476,49477,49479,49481,49483,49485],{"class":38,"line":19151},[36,49478,5934],{"class":114},[36,49480,41368],{"class":53},[36,49482,28556],{"class":114},[36,49484,41373],{"class":49},[36,49486,41376],{"class":53},[36,49488,49489,49491,49493],{"class":38,"line":19157},[36,49490,7173],{"class":114},[36,49492,41388],{"class":49},[36,49494,41391],{"class":53},[36,49496,49497,49499,49501,49503,49505,49507,49509,49511,49513],{"class":38,"line":19180},[36,49498,41401],{"class":53},[36,49500,45175],{"class":1997},[36,49502,115],{"class":114},[36,49504,45180],{"class":57},[36,49506,3059],{"class":53},[36,49508,41404],{"class":1997},[36,49510,115],{"class":114},[36,49512,41409],{"class":57},[36,49514,61],{"class":53},[36,49516,49517],{"class":38,"line":19194},[36,49518,45195],{"class":42},[36,49520,49521],{"class":38,"line":19214},[36,49522,45200],{"class":42},[36,49524,49525],{"class":38,"line":19220},[36,49526,45205],{"class":42},[36,49528,49529],{"class":38,"line":19231},[36,49530,45210],{"class":42},[36,49532,49533],{"class":38,"line":19254},[36,49534,45215],{"class":42},[36,49536,49537],{"class":38,"line":19276},[36,49538,45220],{"class":42},[36,49540,49541,49543,49545,49547,49549,49551],{"class":38,"line":19281},[36,49542,41421],{"class":114},[36,49544,41424],{"class":53},[36,49546,41427],{"class":114},[36,49548,41430],{"class":114},[36,49550,41433],{"class":49},[36,49552,6270],{"class":53},[36,49554,49555,49557,49559],{"class":38,"line":19287},[36,49556,41445],{"class":53},[36,49558,713],{"class":49},[36,49560,61],{"class":53},[36,49562,49563,49565,49567],{"class":38,"line":19301},[36,49564,45247],{"class":114},[36,49566,41388],{"class":49},[36,49568,41464],{"class":53},[36,49570,49571,49573,49575,49577,49579],{"class":38,"line":19314},[36,49572,45256],{"class":53},[36,49574,713],{"class":49},[36,49576,3059],{"class":53},[36,49578,41486],{"class":49},[36,49580,61],{"class":53},[36,49582,49583,49585,49587,49589,49591,49593],{"class":38,"line":19319},[36,49584,45269],{"class":114},[36,49586,41424],{"class":53},[36,49588,41427],{"class":114},[36,49590,41430],{"class":114},[36,49592,41433],{"class":49},[36,49594,6270],{"class":53},[36,49596,49597,49599,49601],{"class":38,"line":19333},[36,49598,45284],{"class":53},[36,49600,713],{"class":49},[36,49602,61],{"class":53},[36,49604,49605],{"class":38,"line":19338},[36,49606,37665],{"class":42},[36,49608,49609,49611,49613],{"class":38,"line":19344},[36,49610,33305],{"class":114},[36,49612,33597],{"class":4500},[36,49614,33600],{"class":53},[36,49616,49617,49619,49621,49623],{"class":38,"line":19349},[36,49618,33605],{"class":53},[36,49620,115],{"class":114},[36,49622,33327],{"class":49},[36,49624,45311],{"class":53},[36,49626,49627,49629,49631,49633],{"class":38,"line":19363},[36,49628,33605],{"class":53},[36,49630,115],{"class":114},[36,49632,33327],{"class":49},[36,49634,45322],{"class":53},[36,49636,49637,49639,49641,49643],{"class":38,"line":19368},[36,49638,33605],{"class":53},[36,49640,115],{"class":114},[36,49642,33327],{"class":49},[36,49644,45333],{"class":53},[36,49646,49647,49649,49651,49653],{"class":38,"line":19373},[36,49648,33605],{"class":53},[36,49650,115],{"class":114},[36,49652,33327],{"class":49},[36,49654,45344],{"class":53},[36,49656,49657,49659,49661,49663],{"class":38,"line":19387},[36,49658,33605],{"class":53},[36,49660,115],{"class":114},[36,49662,33327],{"class":49},[36,49664,45355],{"class":53},[36,49666,49667,49669],{"class":38,"line":19399},[36,49668,17273],{"class":114},[36,49670,33713],{"class":53},[36,49672,49673],{"class":38,"line":19404},[36,49674,546],{"emptyLinePlaceholder":545},[36,49676,49677],{"class":38,"line":19417},[36,49678,45370],{"class":42},[36,49680,49681,49683,49685,49687,49689],{"class":38,"line":19422},[36,49682,4069],{"class":114},[36,49684,33724],{"class":49},[36,49686,1377],{"class":114},[36,49688,33729],{"class":57},[36,49690,6270],{"class":53},[36,49692,49693,49695,49697,49699,49701,49703,49705,49707,49709],{"class":38,"line":19427},[36,49694,33741],{"class":53},[36,49696,115],{"class":114},[36,49698,32957],{"class":53},[36,49700,33748],{"class":57},[36,49702,4242],{"class":114},[36,49704,33753],{"class":53},[36,49706,4239],{"class":114},[36,49708,32981],{"class":57},[36,49710,61],{"class":53},[36,49712,49713,49715,49717],{"class":38,"line":19432},[36,49714,33793],{"class":53},[36,49716,115],{"class":114},[36,49718,45411],{"class":53},[36,49720,49721,49723,49725,49727,49729,49731,49733,49735],{"class":38,"line":19445},[36,49722,33803],{"class":49},[36,49724,33806],{"class":53},[36,49726,707],{"class":49},[36,49728,3059],{"class":53},[36,49730,34004],{"class":49},[36,49732,3059],{"class":53},[36,49734,34004],{"class":49},[36,49736,33819],{"class":53},[24515,49738,49740],{"id":49739},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49742,49743],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,49745,49747],{"className":28,"code":49746,"language":30,"meta":31,"style":31},"# 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",[33,49748,49749,49754,49767,49772,49778,49783,49793,49797,49802,49812,49816,49821,49831,49848,49852,49857,49869,49881,49912,49921,49931,49941,49945,49950,49965,49969,49974,49979,49984,49994,49999,50024,50028,50033,50048,50052,50065,50069,50074,50079,50084,50089,50094,50104,50114,50137,50145,50153,50161,50165,50177,50181,50186,50190,50194,50201,50220,50244,50251,50265,50270,50275,50279,50293,50297,50309],{"__ignoreMap":31},[36,49750,49751],{"class":38,"line":39},[36,49752,49753],{"class":42},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,49755,49756,49758,49761,49764],{"class":38,"line":46},[36,49757,33241],{"class":114},[36,49759,49760],{"class":49}," PIL",[36,49762,49763],{"class":114}," import",[36,49765,49766],{"class":53}," Image\n",[36,49768,49769],{"class":38,"line":82},[36,49770,49771],{"class":42},"# os 用来处理文件夹和文件路径\n",[36,49773,49774,49776],{"class":38,"line":88},[36,49775,537],{"class":114},[36,49777,47805],{"class":53},[36,49779,49780],{"class":38,"line":195},[36,49781,49782],{"class":42},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,49784,49785,49787,49789,49791],{"class":38,"line":1517},[36,49786,537],{"class":114},[36,49788,33884],{"class":53},[36,49790,33887],{"class":114},[36,49792,33890],{"class":53},[36,49794,49795],{"class":38,"line":2421},[36,49796,546],{"emptyLinePlaceholder":545},[36,49798,49799],{"class":38,"line":2446},[36,49800,49801],{"class":42},"# 文件夹路径，包含所有图片文件\n",[36,49803,49804,49807,49809],{"class":38,"line":2469},[36,49805,49806],{"class":53},"folder_path ",[36,49808,115],{"class":114},[36,49810,49811],{"class":57}," 'data_cat_dog'\n",[36,49813,49814],{"class":38,"line":2492},[36,49815,546],{"emptyLinePlaceholder":545},[36,49817,49818],{"class":38,"line":4150},[36,49819,49820],{"class":42},"# 初始化累积变量\n",[36,49822,49823,49826,49828],{"class":38,"line":4155},[36,49824,49825],{"class":53},"total_pixels ",[36,49827,115],{"class":114},[36,49829,49830],{"class":49}," 0\n",[36,49832,49833,49836,49838,49841,49843,49845],{"class":38,"line":4161},[36,49834,49835],{"class":53},"sum_normalized_pixel_values ",[36,49837,115],{"class":114},[36,49839,49840],{"class":53}," np.zeros(",[36,49842,2767],{"class":49},[36,49844,754],{"class":53},[36,49846,49847],{"class":42},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,49849,49850],{"class":38,"line":4166},[36,49851,546],{"emptyLinePlaceholder":545},[36,49853,49854],{"class":38,"line":4180},[36,49855,49856],{"class":42},"# 遍历文件夹中的图片文件\n",[36,49858,49859,49861,49864,49866],{"class":38,"line":4185},[36,49860,5556],{"class":114},[36,49862,49863],{"class":53}," root, dirs, files ",[36,49865,28556],{"class":114},[36,49867,49868],{"class":53}," os.walk(folder_path):\n",[36,49870,49871,49873,49876,49878],{"class":38,"line":4191},[36,49872,5732],{"class":114},[36,49874,49875],{"class":53}," filename ",[36,49877,28556],{"class":114},[36,49879,49880],{"class":53}," files:\n",[36,49882,49883,49885,49888,49891,49893,49896,49898,49901,49903,49906,49909],{"class":38,"line":4212},[36,49884,5029],{"class":114},[36,49886,49887],{"class":53}," filename.endswith((",[36,49889,49890],{"class":57},"'.jpg'",[36,49892,14958],{"class":53},[36,49894,49895],{"class":57},"'.jpeg'",[36,49897,14958],{"class":53},[36,49899,49900],{"class":57},"'.png'",[36,49902,14958],{"class":53},[36,49904,49905],{"class":57},"'.bmp'",[36,49907,49908],{"class":53},")):  ",[36,49910,49911],{"class":42},"# 可根据实际情况添加其他格式\n",[36,49913,49914,49916,49918],{"class":38,"line":4217},[36,49915,48171],{"class":53},[36,49917,115],{"class":114},[36,49919,49920],{"class":53}," os.path.join(root, filename)\n",[36,49922,49923,49926,49928],{"class":38,"line":4231},[36,49924,49925],{"class":53},"            image ",[36,49927,115],{"class":114},[36,49929,49930],{"class":53}," Image.open(image_path)\n",[36,49932,49933,49936,49938],{"class":38,"line":4236},[36,49934,49935],{"class":53},"            image_array ",[36,49937,115],{"class":114},[36,49939,49940],{"class":53}," np.array(image)\n",[36,49942,49943],{"class":38,"line":4264},[36,49944,546],{"emptyLinePlaceholder":545},[36,49946,49947],{"class":38,"line":4269},[36,49948,49949],{"class":42},"            # 归一化像素值到0-1之间\n",[36,49951,49952,49955,49957,49960,49962],{"class":38,"line":4286},[36,49953,49954],{"class":53},"            normalized_image_array ",[36,49956,115],{"class":114},[36,49958,49959],{"class":53}," image_array ",[36,49961,1065],{"class":114},[36,49963,49964],{"class":49}," 255.0\n",[36,49966,49967],{"class":38,"line":4291},[36,49968,546],{"emptyLinePlaceholder":545},[36,49970,49971],{"class":38,"line":4296},[36,49972,49973],{"class":42},"            # print(image_path)\n",[36,49975,49976],{"class":38,"line":4301},[36,49977,49978],{"class":42},"            # print(normalized_image_array.shape)\n",[36,49980,49981],{"class":38,"line":4315},[36,49982,49983],{"class":42},"            # 累积归一化后的像素值和像素数量\n",[36,49985,49986,49989,49991],{"class":38,"line":4320},[36,49987,49988],{"class":53},"            total_pixels ",[36,49990,1224],{"class":114},[36,49992,49993],{"class":53}," normalized_image_array.size\n",[36,49995,49996],{"class":38,"line":5109},[36,49997,49998],{"class":42},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,50000,50001,50004,50006,50009,50012,50014,50016,50018,50020,50022],{"class":38,"line":5123},[36,50002,50003],{"class":53},"            sum_normalized_pixel_values ",[36,50005,1224],{"class":114},[36,50007,50008],{"class":53}," np.sum(normalized_image_array, ",[36,50010,50011],{"class":1997},"axis",[36,50013,115],{"class":114},[36,50015,54],{"class":53},[36,50017,713],{"class":49},[36,50019,14958],{"class":53},[36,50021,707],{"class":49},[36,50023,625],{"class":53},[36,50025,50026],{"class":38,"line":5131},[36,50027,546],{"emptyLinePlaceholder":545},[36,50029,50030],{"class":38,"line":5136},[36,50031,50032],{"class":42},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,50034,50035,50038,50040,50043,50045],{"class":38,"line":5142},[36,50036,50037],{"class":53},"mean ",[36,50039,115],{"class":114},[36,50041,50042],{"class":53}," sum_normalized_pixel_values ",[36,50044,1065],{"class":114},[36,50046,50047],{"class":53}," total_pixels\n",[36,50049,50050],{"class":38,"line":5148},[36,50051,546],{"emptyLinePlaceholder":545},[36,50053,50054,50057,50059,50061,50063],{"class":38,"line":5153},[36,50055,50056],{"class":53},"sum_squared_diff ",[36,50058,115],{"class":114},[36,50060,49840],{"class":53},[36,50062,2767],{"class":49},[36,50064,61],{"class":53},[36,50066,50067],{"class":38,"line":10475},[36,50068,546],{"emptyLinePlaceholder":545},[36,50070,50071],{"class":38,"line":10499},[36,50072,50073],{"class":42},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,50075,50076],{"class":38,"line":10504},[36,50077,50078],{"class":42},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,50080,50081],{"class":38,"line":10510},[36,50082,50083],{"class":42},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,50085,50086],{"class":38,"line":10537},[36,50087,50088],{"class":42},"# Image.open(image_path)：打开图片\n",[36,50090,50091],{"class":38,"line":10542},[36,50092,50093],{"class":42},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,50095,50096,50098,50100,50102],{"class":38,"line":10548},[36,50097,5556],{"class":114},[36,50099,49863],{"class":53},[36,50101,28556],{"class":114},[36,50103,49868],{"class":53},[36,50105,50106,50108,50110,50112],{"class":38,"line":10560},[36,50107,5732],{"class":114},[36,50109,49875],{"class":53},[36,50111,28556],{"class":114},[36,50113,49880],{"class":53},[36,50115,50116,50118,50120,50122,50124,50126,50128,50130,50132,50134],{"class":38,"line":10572},[36,50117,5029],{"class":114},[36,50119,49887],{"class":53},[36,50121,49890],{"class":57},[36,50123,14958],{"class":53},[36,50125,49895],{"class":57},[36,50127,14958],{"class":53},[36,50129,49900],{"class":57},[36,50131,14958],{"class":53},[36,50133,49905],{"class":57},[36,50135,50136],{"class":53},")):\n",[36,50138,50139,50141,50143],{"class":38,"line":10584},[36,50140,48171],{"class":53},[36,50142,115],{"class":114},[36,50144,49920],{"class":53},[36,50146,50147,50149,50151],{"class":38,"line":12241},[36,50148,49925],{"class":53},[36,50150,115],{"class":114},[36,50152,49930],{"class":53},[36,50154,50155,50157,50159],{"class":38,"line":12266},[36,50156,49935],{"class":53},[36,50158,115],{"class":114},[36,50160,49940],{"class":53},[36,50162,50163],{"class":38,"line":12289},[36,50164,49949],{"class":42},[36,50166,50167,50169,50171,50173,50175],{"class":38,"line":12313},[36,50168,49954],{"class":53},[36,50170,115],{"class":114},[36,50172,49959],{"class":53},[36,50174,1065],{"class":114},[36,50176,49964],{"class":49},[36,50178,50179],{"class":38,"line":12318},[36,50180,49978],{"class":42},[36,50182,50183],{"class":38,"line":12323},[36,50184,50185],{"class":42},"            # print(mean.shape)\n",[36,50187,50188],{"class":38,"line":12328},[36,50189,49973],{"class":42},[36,50191,50192],{"class":38,"line":12337},[36,50193,546],{"emptyLinePlaceholder":545},[36,50195,50196,50199],{"class":38,"line":12342},[36,50197,50198],{"class":114},"            try",[36,50200,6270],{"class":53},[36,50202,50203,50206,50208,50211,50213,50216,50218],{"class":38,"line":12348},[36,50204,50205],{"class":53},"                diff ",[36,50207,115],{"class":114},[36,50209,50210],{"class":53}," (normalized_image_array ",[36,50212,508],{"class":114},[36,50214,50215],{"class":53}," mean) ",[36,50217,1110],{"class":114},[36,50219,1237],{"class":49},[36,50221,50222,50225,50227,50230,50232,50234,50236,50238,50240,50242],{"class":38,"line":12369},[36,50223,50224],{"class":53},"                sum_squared_diff ",[36,50226,1224],{"class":114},[36,50228,50229],{"class":53}," np.sum(diff, ",[36,50231,50011],{"class":1997},[36,50233,115],{"class":114},[36,50235,54],{"class":53},[36,50237,713],{"class":49},[36,50239,14958],{"class":53},[36,50241,707],{"class":49},[36,50243,625],{"class":53},[36,50245,50246,50249],{"class":38,"line":12375},[36,50247,50248],{"class":114},"            except",[36,50250,6270],{"class":53},[36,50252,50253,50256,50258,50260,50263],{"class":38,"line":12389},[36,50254,50255],{"class":49},"                print",[36,50257,54],{"class":53},[36,50259,2060],{"class":114},[36,50261,50262],{"class":57},"\"捕获到自定义异常\"",[36,50264,61],{"class":53},[36,50266,50267],{"class":38,"line":12395},[36,50268,50269],{"class":42},"            # diff = (normalized_image_array - mean) ** 2\n",[36,50271,50272],{"class":38,"line":12422},[36,50273,50274],{"class":42},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,50276,50277],{"class":38,"line":12431},[36,50278,546],{"emptyLinePlaceholder":545},[36,50280,50281,50284,50286,50289,50291],{"class":38,"line":12437},[36,50282,50283],{"class":53},"variance ",[36,50285,115],{"class":114},[36,50287,50288],{"class":53}," sum_squared_diff ",[36,50290,1065],{"class":114},[36,50292,50047],{"class":53},[36,50294,50295],{"class":38,"line":12445},[36,50296,546],{"emptyLinePlaceholder":545},[36,50298,50299,50301,50303,50306],{"class":38,"line":12450},[36,50300,50],{"class":49},[36,50302,54],{"class":53},[36,50304,50305],{"class":57},"\"Mean:\"",[36,50307,50308],{"class":53},", mean)\n",[36,50310,50311,50313,50315,50318],{"class":38,"line":19122},[36,50312,50],{"class":49},[36,50314,54],{"class":53},[36,50316,50317],{"class":57},"\"Variance:\"",[36,50319,50320],{"class":53},", variance)\n",[26,50322,50324],{"className":28,"code":50323,"language":30,"meta":31,"style":31},"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",[33,50325,50326,50332,50338,50348,50354,50364,50378,50388,50398,50408,50412,50422,50432,50436,50440,50448,50453,50458,50477,50481,50486,50491,50496,50501,50542,50547,50557,50562,50575,50580,50585,50590,50595,50600,50604,50609,50614,50636,50640,50672,50686,50696,50706,50710,50720,50734,50744,50754,50764,50770,50774,50778,50782,50786,50790,50798,50818,50822,50826,50830,50834,50850,50854,50858,50866,50870,50874,50882,50886,50890,50894,50902,50906,50910,50914,50922,50926,50934,50938,50946,50950,50958,50962,50970,50974,50978,50986,50990,50994,51006,51030,51044,51048,51052,51056,51064,51068,51076,51080,51088,51092,51100,51104,51112,51116,51124,51128,51140,51144,51152,51156,51164,51168,51172,51176,51180,51188,51192,51208,51212,51220,51224,51228,51232,51236,51240,51244,51248,51264,51268,51280,51284,51296,51300,51312,51316,51324,51328,51336,51340,51344,51348,51354,51358,51366,51370,51386,51390,51398,51402,51418,51430,51434,51446,51450,51454,51462,51466,51470,51478,51482,51490,51494,51502,51506,51510,51552,51594,51598,51602,51618,51622,51638,51642,51646,51654,51658,51662,51674,51712,51716,51720,51728,51732,51746,51756,51762,51768,51774,51780,51784,51788,51794,51798,51802,51810,51814,51832,51836,51840,51844,51860,51864,51868,51872,51876,51880,51900,51920,51924,51928,51932,51940,51948,51952,51968,51988,52008,52012,52017,52026,52035,52040,52045,52050,52063,52068,52077,52086,52103],{"__ignoreMap":31},[36,50327,50328,50330],{"class":38,"line":39},[36,50329,537],{"class":114},[36,50331,34325],{"class":53},[36,50333,50334,50336],{"class":38,"line":46},[36,50335,537],{"class":114},[36,50337,34332],{"class":53},[36,50339,50340,50342,50344,50346],{"class":38,"line":82},[36,50341,537],{"class":114},[36,50343,34343],{"class":53},[36,50345,33887],{"class":114},[36,50347,34348],{"class":53},[36,50349,50350,50352],{"class":38,"line":88},[36,50351,537],{"class":114},[36,50353,32902],{"class":53},[36,50355,50356,50358,50360,50362],{"class":38,"line":195},[36,50357,33241],{"class":114},[36,50359,33919],{"class":53},[36,50361,537],{"class":114},[36,50363,34365],{"class":53},[36,50365,50366,50368,50370,50372,50375],{"class":38,"line":1517},[36,50367,33241],{"class":114},[36,50369,33872],{"class":53},[36,50371,537],{"class":114},[36,50373,50374],{"class":53}," ImageFolder ",[36,50376,50377],{"class":42},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,50379,50380,50382,50384,50386],{"class":38,"line":2421},[36,50381,33241],{"class":114},[36,50383,33902],{"class":53},[36,50385,537],{"class":114},[36,50387,33907],{"class":53},[36,50389,50390,50392,50394,50396],{"class":38,"line":2446},[36,50391,537],{"class":114},[36,50393,33919],{"class":53},[36,50395,33887],{"class":114},[36,50397,33924],{"class":53},[36,50399,50400,50402,50404,50406],{"class":38,"line":2469},[36,50401,537],{"class":114},[36,50403,33936],{"class":53},[36,50405,33887],{"class":114},[36,50407,33941],{"class":53},[36,50409,50410],{"class":38,"line":2492},[36,50411,34410],{"class":42},[36,50413,50414,50416,50418,50420],{"class":38,"line":4150},[36,50415,33241],{"class":114},[36,50417,34417],{"class":53},[36,50419,537],{"class":114},[36,50421,45531],{"class":53},[36,50423,50424,50426,50428,50430],{"class":38,"line":4155},[36,50425,33241],{"class":114},[36,50427,33244],{"class":53},[36,50429,537],{"class":114},[36,50431,33249],{"class":53},[36,50433,50434],{"class":38,"line":4161},[36,50435,546],{"emptyLinePlaceholder":545},[36,50437,50438],{"class":38,"line":4166},[36,50439,34445],{"class":42},[36,50441,50442,50444,50446],{"class":38,"line":4180},[36,50443,34450],{"class":114},[36,50445,34453],{"class":4500},[36,50447,34456],{"class":53},[36,50449,50450],{"class":38,"line":4185},[36,50451,50452],{"class":42},"    # 导入自己的数据集，并进行数据处理\n",[36,50454,50455],{"class":38,"line":4191},[36,50456,50457],{"class":42},"    # 定义数据集的路径\n",[36,50459,50460,50463,50465,50467,50469,50471,50475],{"class":38,"line":4212},[36,50461,50462],{"class":49},"    ROOT_PATH",[36,50464,115],{"class":114},[36,50466,3346],{"class":114},[36,50468,1822],{"class":57},[36,50470,3235],{"class":49},[36,50472,50474],{"class":50473},"sA_wV","\u002Fdata\u002Ftrain",[36,50476,1620],{"class":57},[36,50478,50479],{"class":38,"line":4217},[36,50480,546],{"emptyLinePlaceholder":545},[36,50482,50483],{"class":38,"line":4231},[36,50484,50485],{"class":42},"    # 定义归一化方法\n",[36,50487,50488],{"class":38,"line":4236},[36,50489,50490],{"class":42},"    # 这里需要先计算一下数据集的均值和方差\n",[36,50492,50493],{"class":38,"line":4264},[36,50494,50495],{"class":42},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,50497,50498],{"class":38,"line":4269},[36,50499,50500],{"class":42},"    # 第一个参数是均值，第二个参数是方差\n",[36,50502,50503,50506,50508,50511,50514,50516,50519,50521,50524,50527,50530,50532,50535,50537,50540],{"class":38,"line":4286},[36,50504,50505],{"class":53},"    normalize",[36,50507,115],{"class":114},[36,50509,50510],{"class":53},"transforms.Normalize([",[36,50512,50513],{"class":49},"0.162",[36,50515,3059],{"class":53},[36,50517,50518],{"class":49},"0.151",[36,50520,3059],{"class":53},[36,50522,50523],{"class":49},"0.138",[36,50525,50526],{"class":53},"],[",[36,50528,50529],{"class":49},"0.058",[36,50531,3059],{"class":53},[36,50533,50534],{"class":49},"0.052",[36,50536,3059],{"class":53},[36,50538,50539],{"class":49},"0.048",[36,50541,7188],{"class":53},[36,50543,50544],{"class":38,"line":4291},[36,50545,50546],{"class":42},"    # 定义数据集处理方法变量\n",[36,50548,50549,50552,50554],{"class":38,"line":4296},[36,50550,50551],{"class":53},"    train_transform",[36,50553,115],{"class":114},[36,50555,50556],{"class":53},"transforms.Compose([\n",[36,50558,50559],{"class":38,"line":4301},[36,50560,50561],{"class":42},"        # 调整图像大小为224*224\n",[36,50563,50564,50567,50569,50571,50573],{"class":38,"line":4315},[36,50565,50566],{"class":53},"        transforms.Resize((",[36,50568,34004],{"class":49},[36,50570,3059],{"class":53},[36,50572,34004],{"class":49},[36,50574,45122],{"class":53},[36,50576,50577],{"class":38,"line":4320},[36,50578,50579],{"class":42},"        # 将图像转换为张量\n",[36,50581,50582],{"class":38,"line":5109},[36,50583,50584],{"class":53},"        transforms.ToTensor(),\n",[36,50586,50587],{"class":38,"line":5123},[36,50588,50589],{"class":53},"        normalize])\n",[36,50591,50592],{"class":38,"line":5131},[36,50593,50594],{"class":42},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,50596,50597],{"class":38,"line":5136},[36,50598,50599],{"class":42},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,50601,50602],{"class":38,"line":5142},[36,50603,546],{"emptyLinePlaceholder":545},[36,50605,50606],{"class":38,"line":5148},[36,50607,50608],{"class":42},"    # 加载数据集\n",[36,50610,50611],{"class":38,"line":5153},[36,50612,50613],{"class":42},"    # 传入数据集路径与处理方法\n",[36,50615,50616,50618,50620,50623,50626,50628,50631,50633],{"class":38,"line":10475},[36,50617,34461],{"class":53},[36,50619,115],{"class":114},[36,50621,50622],{"class":53},"ImageFolder(",[36,50624,50625],{"class":49},"ROOT_PATH",[36,50627,3059],{"class":53},[36,50629,50630],{"class":1997},"transform",[36,50632,115],{"class":114},[36,50634,50635],{"class":53},"train_transform)\n",[36,50637,50638],{"class":38,"line":10499},[36,50639,546],{"emptyLinePlaceholder":545},[36,50641,50642,50644,50646,50648,50650,50652,50654,50656,50658,50660,50662,50664,50666,50668,50670],{"class":38,"line":10504},[36,50643,34513],{"class":53},[36,50645,115],{"class":114},[36,50647,34518],{"class":53},[36,50649,34521],{"class":49},[36,50651,54],{"class":53},[36,50653,34526],{"class":49},[36,50655,1050],{"class":114},[36,50657,9885],{"class":49},[36,50659,34533],{"class":53},[36,50661,34521],{"class":49},[36,50663,54],{"class":53},[36,50665,34540],{"class":49},[36,50667,1050],{"class":114},[36,50669,9885],{"class":49},[36,50671,34547],{"class":53},[36,50673,50674,50676,50678,50680,50682,50684],{"class":38,"line":10510},[36,50675,34552],{"class":53},[36,50677,115],{"class":114},[36,50679,34557],{"class":53},[36,50681,34040],{"class":1997},[36,50683,115],{"class":114},[36,50685,34045],{"class":53},[36,50687,50688,50690,50692,50694],{"class":38,"line":10537},[36,50689,34568],{"class":1997},[36,50691,115],{"class":114},[36,50693,2884],{"class":49},[36,50695,33970],{"class":53},[36,50697,50698,50700,50702,50704],{"class":38,"line":10542},[36,50699,34580],{"class":1997},[36,50701,115],{"class":114},[36,50703,189],{"class":49},[36,50705,33970],{"class":53},[36,50707,50708],{"class":38,"line":10548},[36,50709,34591],{"class":42},[36,50711,50712,50714,50716,50718],{"class":38,"line":10560},[36,50713,34596],{"class":1997},[36,50715,115],{"class":114},[36,50717,3076],{"class":49},[36,50719,61],{"class":53},[36,50721,50722,50724,50726,50728,50730,50732],{"class":38,"line":10572},[36,50723,34607],{"class":53},[36,50725,115],{"class":114},[36,50727,34037],{"class":53},[36,50729,34040],{"class":1997},[36,50731,115],{"class":114},[36,50733,34618],{"class":53},[36,50735,50736,50738,50740,50742],{"class":38,"line":10584},[36,50737,34623],{"class":1997},[36,50739,115],{"class":114},[36,50741,2884],{"class":49},[36,50743,33970],{"class":53},[36,50745,50746,50748,50750,50752],{"class":38,"line":12241},[36,50747,34634],{"class":1997},[36,50749,115],{"class":114},[36,50751,189],{"class":49},[36,50753,33970],{"class":53},[36,50755,50756,50758,50760,50762],{"class":38,"line":12266},[36,50757,34645],{"class":1997},[36,50759,115],{"class":114},[36,50761,3076],{"class":49},[36,50763,61],{"class":53},[36,50765,50766,50768],{"class":38,"line":12289},[36,50767,6621],{"class":114},[36,50769,34658],{"class":53},[36,50771,50772],{"class":38,"line":12313},[36,50773,546],{"emptyLinePlaceholder":545},[36,50775,50776],{"class":38,"line":12318},[36,50777,34667],{"class":42},[36,50779,50780],{"class":38,"line":12323},[36,50781,34672],{"class":42},[36,50783,50784],{"class":38,"line":12328},[36,50785,546],{"emptyLinePlaceholder":545},[36,50787,50788],{"class":38,"line":12337},[36,50789,34681],{"class":42},[36,50791,50792,50794,50796],{"class":38,"line":12342},[36,50793,34450],{"class":114},[36,50795,34688],{"class":4500},[36,50797,34691],{"class":53},[36,50799,50800,50802,50804,50806,50808,50810,50812,50814,50816],{"class":38,"line":12348},[36,50801,33741],{"class":53},[36,50803,115],{"class":114},[36,50805,32957],{"class":53},[36,50807,33748],{"class":57},[36,50809,4242],{"class":114},[36,50811,33753],{"class":53},[36,50813,4239],{"class":114},[36,50815,34710],{"class":57},[36,50817,61],{"class":53},[36,50819,50820],{"class":38,"line":12369},[36,50821,546],{"emptyLinePlaceholder":545},[36,50823,50824],{"class":38,"line":12375},[36,50825,34725],{"class":42},[36,50827,50828],{"class":38,"line":12389},[36,50829,34730],{"class":42},[36,50831,50832],{"class":38,"line":12395},[36,50833,34735],{"class":42},[36,50835,50836,50838,50840,50842,50844,50846,50848],{"class":38,"line":12422},[36,50837,34740],{"class":53},[36,50839,115],{"class":114},[36,50841,34745],{"class":53},[36,50843,34748],{"class":1997},[36,50845,115],{"class":114},[36,50847,34753],{"class":49},[36,50849,61],{"class":53},[36,50851,50852],{"class":38,"line":12431},[36,50853,546],{"emptyLinePlaceholder":545},[36,50855,50856],{"class":38,"line":12437},[36,50857,34764],{"class":42},[36,50859,50860,50862,50864],{"class":38,"line":12445},[36,50861,34769],{"class":53},[36,50863,115],{"class":114},[36,50865,34774],{"class":53},[36,50867,50868],{"class":38,"line":12450},[36,50869,546],{"emptyLinePlaceholder":545},[36,50871,50872],{"class":38,"line":19122},[36,50873,34783],{"class":42},[36,50875,50876,50878,50880],{"class":38,"line":19128},[36,50877,33793],{"class":53},[36,50879,115],{"class":114},[36,50881,34792],{"class":53},[36,50883,50884],{"class":38,"line":19151},[36,50885,34797],{"class":42},[36,50887,50888],{"class":38,"line":19157},[36,50889,34802],{"class":42},[36,50891,50892],{"class":38,"line":19180},[36,50893,34807],{"class":42},[36,50895,50896,50898,50900],{"class":38,"line":19194},[36,50897,34812],{"class":53},[36,50899,115],{"class":114},[36,50901,34817],{"class":53},[36,50903,50904],{"class":38,"line":19214},[36,50905,546],{"emptyLinePlaceholder":545},[36,50907,50908],{"class":38,"line":19220},[36,50909,34830],{"class":42},[36,50911,50912],{"class":38,"line":19231},[36,50913,34835],{"class":42},[36,50915,50916,50918,50920],{"class":38,"line":19254},[36,50917,34840],{"class":53},[36,50919,115],{"class":114},[36,50921,34845],{"class":49},[36,50923,50924],{"class":38,"line":19276},[36,50925,34850],{"class":42},[36,50927,50928,50930,50932],{"class":38,"line":19281},[36,50929,34855],{"class":53},[36,50931,115],{"class":114},[36,50933,34860],{"class":53},[36,50935,50936],{"class":38,"line":19287},[36,50937,34865],{"class":42},[36,50939,50940,50942,50944],{"class":38,"line":19301},[36,50941,34870],{"class":53},[36,50943,115],{"class":114},[36,50945,34860],{"class":53},[36,50947,50948],{"class":38,"line":19314},[36,50949,34879],{"class":42},[36,50951,50952,50954,50956],{"class":38,"line":19319},[36,50953,34884],{"class":53},[36,50955,115],{"class":114},[36,50957,34860],{"class":53},[36,50959,50960],{"class":38,"line":19333},[36,50961,34893],{"class":42},[36,50963,50964,50966,50968],{"class":38,"line":19338},[36,50965,34898],{"class":53},[36,50967,115],{"class":114},[36,50969,34860],{"class":53},[36,50971,50972],{"class":38,"line":19344},[36,50973,546],{"emptyLinePlaceholder":545},[36,50975,50976],{"class":38,"line":19349},[36,50977,34911],{"class":42},[36,50979,50980,50982,50984],{"class":38,"line":19363},[36,50981,34916],{"class":53},[36,50983,115],{"class":114},[36,50985,34921],{"class":53},[36,50987,50988],{"class":38,"line":19368},[36,50989,546],{"emptyLinePlaceholder":545},[36,50991,50992],{"class":38,"line":19373},[36,50993,34934],{"class":42},[36,50995,50996,50998,51000,51002,51004],{"class":38,"line":19387},[36,50997,5732],{"class":114},[36,50999,34941],{"class":53},[36,51001,28556],{"class":114},[36,51003,34946],{"class":49},[36,51005,34949],{"class":53},[36,51007,51008,51010,51012,51014,51016,51018,51020,51022,51024,51026,51028],{"class":38,"line":19399},[36,51009,34954],{"class":49},[36,51011,54],{"class":53},[36,51013,34959],{"class":57},[36,51015,1944],{"class":49},[36,51017,1065],{"class":57},[36,51019,1944],{"class":49},[36,51021,1822],{"class":57},[36,51023,34970],{"class":53},[36,51025,508],{"class":114},[36,51027,707],{"class":49},[36,51029,625],{"class":53},[36,51031,51032,51034,51036,51038,51040,51042],{"class":38,"line":19404},[36,51033,34954],{"class":49},[36,51035,54],{"class":53},[36,51037,34985],{"class":57},[36,51039,1050],{"class":114},[36,51041,1317],{"class":49},[36,51043,61],{"class":53},[36,51045,51046],{"class":38,"line":19417},[36,51047,546],{"emptyLinePlaceholder":545},[36,51049,51050],{"class":38,"line":19422},[36,51051,35000],{"class":42},[36,51053,51054],{"class":38,"line":19427},[36,51055,35005],{"class":42},[36,51057,51058,51060,51062],{"class":38,"line":19432},[36,51059,35010],{"class":53},[36,51061,115],{"class":114},[36,51063,34845],{"class":49},[36,51065,51066],{"class":38,"line":19445},[36,51067,35019],{"class":42},[36,51069,51070,51072,51074],{"class":38,"line":19450},[36,51071,35024],{"class":53},[36,51073,115],{"class":114},[36,51075,5616],{"class":49},[36,51077,51078],{"class":38,"line":35135},[36,51079,35033],{"class":42},[36,51081,51082,51084,51086],{"class":38,"line":35141},[36,51083,35038],{"class":53},[36,51085,115],{"class":114},[36,51087,34845],{"class":49},[36,51089,51090],{"class":38,"line":35147},[36,51091,35047],{"class":42},[36,51093,51094,51096,51098],{"class":38,"line":35153},[36,51095,35052],{"class":53},[36,51097,115],{"class":114},[36,51099,5616],{"class":49},[36,51101,51102],{"class":38,"line":35159},[36,51103,35061],{"class":42},[36,51105,51106,51108,51110],{"class":38,"line":35170},[36,51107,35066],{"class":53},[36,51109,115],{"class":114},[36,51111,5616],{"class":49},[36,51113,51114],{"class":38,"line":35176},[36,51115,35075],{"class":42},[36,51117,51118,51120,51122],{"class":38,"line":35196},[36,51119,35080],{"class":53},[36,51121,115],{"class":114},[36,51123,5616],{"class":49},[36,51125,51126],{"class":38,"line":35202},[36,51127,35089],{"class":42},[36,51129,51130,51132,51134,51136,51138],{"class":38,"line":35213},[36,51131,5934],{"class":114},[36,51133,34104],{"class":53},[36,51135,28556],{"class":114},[36,51137,34109],{"class":49},[36,51139,35102],{"class":53},[36,51141,51142],{"class":38,"line":35219},[36,51143,35107],{"class":42},[36,51145,51146,51148,51150],{"class":38,"line":35225},[36,51147,35112],{"class":53},[36,51149,115],{"class":114},[36,51151,35117],{"class":53},[36,51153,51154],{"class":38,"line":35231},[36,51155,35122],{"class":42},[36,51157,51158,51160,51162],{"class":38,"line":35237},[36,51159,35127],{"class":53},[36,51161,115],{"class":114},[36,51163,35132],{"class":53},[36,51165,51166],{"class":38,"line":35243},[36,51167,35138],{"class":42},[36,51169,51170],{"class":38,"line":35249},[36,51171,35144],{"class":53},[36,51173,51174],{"class":38,"line":35255},[36,51175,35150],{"class":42},[36,51177,51178],{"class":38,"line":35275},[36,51179,35156],{"class":42},[36,51181,51182,51184,51186],{"class":38,"line":35281},[36,51183,35162],{"class":53},[36,51185,115],{"class":114},[36,51187,35167],{"class":53},[36,51189,51190],{"class":38,"line":35297},[36,51191,35173],{"class":42},[36,51193,51194,51196,51198,51200,51202,51204,51206],{"class":38,"line":35303},[36,51195,35179],{"class":53},[36,51197,115],{"class":114},[36,51199,35184],{"class":53},[36,51201,35187],{"class":1997},[36,51203,115],{"class":114},[36,51205,707],{"class":49},[36,51207,61],{"class":53},[36,51209,51210],{"class":38,"line":35317},[36,51211,35199],{"class":42},[36,51213,51214,51216,51218],{"class":38,"line":35323},[36,51215,35205],{"class":53},[36,51217,115],{"class":114},[36,51219,35210],{"class":53},[36,51221,51222],{"class":38,"line":35338},[36,51223,35216],{"class":42},[36,51225,51226],{"class":38,"line":35344},[36,51227,35222],{"class":53},[36,51229,51230],{"class":38,"line":35353},[36,51231,35228],{"class":42},[36,51233,51234],{"class":38,"line":35359},[36,51235,35234],{"class":53},[36,51237,51238],{"class":38,"line":35368},[36,51239,35240],{"class":42},[36,51241,51242],{"class":38,"line":35374},[36,51243,35246],{"class":53},[36,51245,51246],{"class":38,"line":35380},[36,51247,35252],{"class":42},[36,51249,51250,51252,51254,51256,51258,51260,51262],{"class":38,"line":35389},[36,51251,35258],{"class":53},[36,51253,1224],{"class":114},[36,51255,35263],{"class":53},[36,51257,1050],{"class":114},[36,51259,35268],{"class":53},[36,51261,713],{"class":49},[36,51263,61],{"class":53},[36,51265,51266],{"class":38,"line":35395},[36,51267,35278],{"class":42},[36,51269,51270,51272,51274,51276,51278],{"class":38,"line":35406},[36,51271,35284],{"class":53},[36,51273,1224],{"class":114},[36,51275,35289],{"class":53},[36,51277,1377],{"class":114},[36,51279,35294],{"class":53},[36,51281,51282],{"class":38,"line":35412},[36,51283,35300],{"class":42},[36,51285,51286,51288,51290,51292,51294],{"class":38,"line":35431},[36,51287,35306],{"class":53},[36,51289,1224],{"class":114},[36,51291,35268],{"class":53},[36,51293,713],{"class":49},[36,51295,61],{"class":53},[36,51297,51298],{"class":38,"line":35437},[36,51299,35320],{"class":42},[36,51301,51302,51304,51306,51308,51310],{"class":38,"line":35448},[36,51303,5934],{"class":114},[36,51305,35328],{"class":53},[36,51307,28556],{"class":114},[36,51309,34109],{"class":49},[36,51311,35335],{"class":53},[36,51313,51314],{"class":38,"line":35454},[36,51315,35341],{"class":42},[36,51317,51318,51320,51322],{"class":38,"line":35474},[36,51319,35112],{"class":53},[36,51321,115],{"class":114},[36,51323,35117],{"class":53},[36,51325,51326],{"class":38,"line":35490},[36,51327,35356],{"class":42},[36,51329,51330,51332,51334],{"class":38,"line":35496},[36,51331,35127],{"class":53},[36,51333,115],{"class":114},[36,51335,35132],{"class":53},[36,51337,51338],{"class":38,"line":35510},[36,51339,35371],{"class":42},[36,51341,51342],{"class":38,"line":35516},[36,51343,35377],{"class":53},[36,51345,51346],{"class":38,"line":35522},[36,51347,38856],{"class":42},[36,51349,51350,51352],{"class":38,"line":35533},[36,51351,35383],{"class":114},[36,51353,35386],{"class":53},[36,51355,51356],{"class":38,"line":35539},[36,51357,35392],{"class":42},[36,51359,51360,51362,51364],{"class":38,"line":35545},[36,51361,38871],{"class":53},[36,51363,115],{"class":114},[36,51365,35167],{"class":53},[36,51367,51368],{"class":38,"line":35555},[36,51369,35409],{"class":42},[36,51371,51372,51374,51376,51378,51380,51382,51384],{"class":38,"line":35561},[36,51373,38884],{"class":53},[36,51375,115],{"class":114},[36,51377,35184],{"class":53},[36,51379,35187],{"class":1997},[36,51381,115],{"class":114},[36,51383,707],{"class":49},[36,51385,61],{"class":53},[36,51387,51388],{"class":38,"line":35572},[36,51389,35434],{"class":42},[36,51391,51392,51394,51396],{"class":38,"line":35578},[36,51393,38905],{"class":53},[36,51395,115],{"class":114},[36,51397,35210],{"class":53},[36,51399,51400],{"class":38,"line":35588},[36,51401,35451],{"class":42},[36,51403,51404,51406,51408,51410,51412,51414,51416],{"class":38,"line":35593},[36,51405,38918],{"class":53},[36,51407,1224],{"class":114},[36,51409,38923],{"class":53},[36,51411,1050],{"class":114},[36,51413,35268],{"class":53},[36,51415,713],{"class":49},[36,51417,61],{"class":53},[36,51419,51420,51422,51424,51426,51428],{"class":38,"line":35599},[36,51421,38936],{"class":53},[36,51423,1224],{"class":114},[36,51425,35289],{"class":53},[36,51427,1377],{"class":114},[36,51429,35294],{"class":53},[36,51431,51432],{"class":38,"line":35648},[36,51433,38949],{"class":42},[36,51435,51436,51438,51440,51442,51444],{"class":38,"line":35695},[36,51437,38954],{"class":53},[36,51439,1224],{"class":114},[36,51441,35268],{"class":53},[36,51443,713],{"class":49},[36,51445,61],{"class":53},[36,51447,51448],{"class":38,"line":35700},[36,51449,35513],{"class":42},[36,51451,51452],{"class":38,"line":35706},[36,51453,35519],{"class":42},[36,51455,51456,51458,51460],{"class":38,"line":35725},[36,51457,35525],{"class":53},[36,51459,1065],{"class":114},[36,51461,35530],{"class":53},[36,51463,51464],{"class":38,"line":35731},[36,51465,35536],{"class":42},[36,51467,51468],{"class":38,"line":35751},[36,51469,35542],{"class":42},[36,51471,51472,51474,51476],{"class":38,"line":35757},[36,51473,35548],{"class":53},[36,51475,1065],{"class":114},[36,51477,35530],{"class":53},[36,51479,51480],{"class":38,"line":35763},[36,51481,35558],{"class":42},[36,51483,51484,51486,51488],{"class":38,"line":35773},[36,51485,35564],{"class":53},[36,51487,1065],{"class":114},[36,51489,35569],{"class":53},[36,51491,51492],{"class":38,"line":35778},[36,51493,35575],{"class":42},[36,51495,51496,51498,51500],{"class":38,"line":35784},[36,51497,35581],{"class":53},[36,51499,1065],{"class":114},[36,51501,35569],{"class":53},[36,51503,51504],{"class":38,"line":35800},[36,51505,546],{"emptyLinePlaceholder":545},[36,51507,51508],{"class":38,"line":35844},[36,51509,35596],{"class":42},[36,51511,51512,51514,51516,51518,51520,51522,51524,51526,51528,51530,51532,51534,51536,51538,51540,51542,51544,51546,51548,51550],{"class":38,"line":35850},[36,51513,34954],{"class":49},[36,51515,54],{"class":53},[36,51517,6123],{"class":57},[36,51519,1944],{"class":49},[36,51521,35610],{"class":57},[36,51523,2065],{"class":49},[36,51525,35615],{"class":114},[36,51527,2070],{"class":49},[36,51529,35620],{"class":57},[36,51531,2065],{"class":49},[36,51533,35615],{"class":114},[36,51535,2070],{"class":49},[36,51537,6123],{"class":57},[36,51539,35631],{"class":53},[36,51541,508],{"class":114},[36,51543,707],{"class":49},[36,51545,35638],{"class":53},[36,51547,508],{"class":114},[36,51549,707],{"class":49},[36,51551,35645],{"class":53},[36,51553,51554,51556,51558,51560,51562,51564,51566,51568,51570,51572,51574,51576,51578,51580,51582,51584,51586,51588,51590,51592],{"class":38,"line":35856},[36,51555,34954],{"class":49},[36,51557,54],{"class":53},[36,51559,6123],{"class":57},[36,51561,1944],{"class":49},[36,51563,35659],{"class":57},[36,51565,2065],{"class":49},[36,51567,35615],{"class":114},[36,51569,2070],{"class":49},[36,51571,35668],{"class":57},[36,51573,2065],{"class":49},[36,51575,35615],{"class":114},[36,51577,2070],{"class":49},[36,51579,6123],{"class":57},[36,51581,35679],{"class":53},[36,51583,508],{"class":114},[36,51585,707],{"class":49},[36,51587,35686],{"class":53},[36,51589,508],{"class":114},[36,51591,707],{"class":49},[36,51593,35645],{"class":53},[36,51595,51596],{"class":38,"line":35862},[36,51597,546],{"emptyLinePlaceholder":545},[36,51599,51600],{"class":38,"line":35873},[36,51601,35703],{"class":42},[36,51603,51604,51606,51608,51610,51612,51614,51616],{"class":38,"line":35879},[36,51605,5029],{"class":114},[36,51607,35711],{"class":53},[36,51609,508],{"class":114},[36,51611,707],{"class":49},[36,51613,3614],{"class":53},[36,51615,3633],{"class":114},[36,51617,35722],{"class":53},[36,51619,51620],{"class":38,"line":35885},[36,51621,35728],{"class":42},[36,51623,51624,51626,51628,51630,51632,51634,51636],{"class":38,"line":35891},[36,51625,35734],{"class":53},[36,51627,244],{"class":49},[36,51629,115],{"class":114},[36,51631,35741],{"class":53},[36,51633,508],{"class":114},[36,51635,707],{"class":49},[36,51637,35748],{"class":53},[36,51639,51640],{"class":38,"line":35909},[36,51641,35754],{"class":42},[36,51643,51644],{"class":38,"line":35923},[36,51645,35760],{"class":42},[36,51647,51648,51650,51652],{"class":38,"line":35932},[36,51649,35766],{"class":53},[36,51651,115],{"class":114},[36,51653,34817],{"class":53},[36,51655,51656],{"class":38,"line":35941},[36,51657,546],{"emptyLinePlaceholder":545},[36,51659,51660],{"class":38,"line":35950},[36,51661,35781],{"class":42},[36,51663,51664,51666,51668,51670,51672],{"class":38,"line":35959},[36,51665,35787],{"class":53},[36,51667,115],{"class":114},[36,51669,35792],{"class":53},[36,51671,508],{"class":114},[36,51673,35797],{"class":53},[36,51675,51676,51678,51680,51682,51684,51686,51688,51690,51692,51694,51696,51698,51700,51702,51704,51706,51708,51710],{"class":38,"line":35965},[36,51677,34954],{"class":49},[36,51679,54],{"class":53},[36,51681,35807],{"class":57},[36,51683,2065],{"class":49},[36,51685,35812],{"class":114},[36,51687,2070],{"class":49},[36,51689,3221],{"class":57},[36,51691,2065],{"class":49},[36,51693,35812],{"class":114},[36,51695,2070],{"class":49},[36,51697,35825],{"class":57},[36,51699,35828],{"class":53},[36,51701,1080],{"class":114},[36,51703,3582],{"class":49},[36,51705,35835],{"class":53},[36,51707,1095],{"class":114},[36,51709,3582],{"class":49},[36,51711,625],{"class":53},[36,51713,51714],{"class":38,"line":35971},[36,51715,39233],{"class":42},[36,51717,51718],{"class":38,"line":35979},[36,51719,39238],{"class":42},[36,51721,51722,51724,51726],{"class":38,"line":35984},[36,51723,39243],{"class":53},[36,51725,35868],{"class":57},[36,51727,61],{"class":53},[36,51729,51730],{"class":38,"line":35990},[36,51731,35888],{"class":42},[36,51733,51734,51736,51738,51740,51742,51744],{"class":38,"line":36001},[36,51735,35894],{"class":53},[36,51737,115],{"class":114},[36,51739,35899],{"class":53},[36,51741,35902],{"class":1997},[36,51743,115],{"class":114},[36,51745,4084],{"class":53},[36,51747,51748,51750,51752,51754],{"class":38,"line":36007},[36,51749,35912],{"class":57},[36,51751,3535],{"class":53},[36,51753,35917],{"class":49},[36,51755,35920],{"class":53},[36,51757,51758,51760],{"class":38,"line":36027},[36,51759,35926],{"class":57},[36,51761,35929],{"class":53},[36,51763,51764,51766],{"class":38,"line":36033},[36,51765,35935],{"class":57},[36,51767,35938],{"class":53},[36,51769,51770,51772],{"class":38,"line":36039},[36,51771,35944],{"class":57},[36,51773,35947],{"class":53},[36,51775,51776,51778],{"class":38,"line":36045},[36,51777,35953],{"class":57},[36,51779,35956],{"class":53},[36,51781,51782],{"class":38,"line":36062},[36,51783,35962],{"class":53},[36,51785,51786],{"class":38,"line":36068},[36,51787,35968],{"class":42},[36,51789,51790,51792],{"class":38,"line":36074},[36,51791,6621],{"class":114},[36,51793,35976],{"class":53},[36,51795,51796],{"class":38,"line":36080},[36,51797,546],{"emptyLinePlaceholder":545},[36,51799,51800],{"class":38,"line":36086},[36,51801,35987],{"class":42},[36,51803,51804,51806,51808],{"class":38,"line":36092},[36,51805,34450],{"class":114},[36,51807,35995],{"class":4500},[36,51809,35998],{"class":53},[36,51811,51812],{"class":38,"line":36119},[36,51813,36004],{"class":42},[36,51815,51816,51818,51820,51822,51824,51826,51828,51830],{"class":38,"line":36143},[36,51817,36010],{"class":53},[36,51819,34196],{"class":1997},[36,51821,115],{"class":114},[36,51823,54],{"class":53},[36,51825,3176],{"class":49},[36,51827,3059],{"class":53},[36,51829,2977],{"class":49},[36,51831,625],{"class":53},[36,51833,51834],{"class":38,"line":36149},[36,51835,36030],{"class":42},[36,51837,51838],{"class":38,"line":36155},[36,51839,36036],{"class":42},[36,51841,51842],{"class":38,"line":36161},[36,51843,36042],{"class":42},[36,51845,51846,51848,51850,51852,51854,51856,51858],{"class":38,"line":36172},[36,51847,34230],{"class":53},[36,51849,707],{"class":49},[36,51851,3059],{"class":53},[36,51853,1188],{"class":49},[36,51855,3059],{"class":53},[36,51857,707],{"class":49},[36,51859,61],{"class":53},[36,51861,51862],{"class":38,"line":36183},[36,51863,36065],{"class":42},[36,51865,51866],{"class":38,"line":36189},[36,51867,36071],{"class":42},[36,51869,51870],{"class":38,"line":36206},[36,51871,36077],{"class":42},[36,51873,51874],{"class":38,"line":36229},[36,51875,36083],{"class":42},[36,51877,51878],{"class":38,"line":36252},[36,51879,36089],{"class":42},[36,51881,51882,51884,51886,51888,51890,51892,51894,51896,51898],{"class":38,"line":36258},[36,51883,36095],{"class":53},[36,51885,36098],{"class":57},[36,51887,36101],{"class":53},[36,51889,36104],{"class":57},[36,51891,3059],{"class":53},[36,51893,36109],{"class":1997},[36,51895,115],{"class":114},[36,51897,36114],{"class":57},[36,51899,61],{"class":53},[36,51901,51902,51904,51906,51908,51910,51912,51914,51916,51918],{"class":38,"line":36263},[36,51903,36095],{"class":53},[36,51905,36098],{"class":57},[36,51907,36126],{"class":53},[36,51909,36129],{"class":57},[36,51911,3059],{"class":53},[36,51913,36109],{"class":1997},[36,51915,115],{"class":114},[36,51917,36138],{"class":57},[36,51919,61],{"class":53},[36,51921,51922],{"class":38,"line":36272},[36,51923,36146],{"class":42},[36,51925,51926],{"class":38,"line":36282},[36,51927,36152],{"class":53},[36,51929,51930],{"class":38,"line":36288},[36,51931,36158],{"class":42},[36,51933,51934,51936,51938],{"class":38,"line":36293},[36,51935,36164],{"class":53},[36,51937,36167],{"class":57},[36,51939,61],{"class":53},[36,51941,51942,51944,51946],{"class":38,"line":36299},[36,51943,36175],{"class":53},[36,51945,36178],{"class":57},[36,51947,61],{"class":53},[36,51949,51950],{"class":38,"line":36312},[36,51951,36186],{"class":42},[36,51953,51954,51956,51958,51960,51962,51964,51966],{"class":38,"line":36318},[36,51955,34230],{"class":53},[36,51957,707],{"class":49},[36,51959,3059],{"class":53},[36,51961,1188],{"class":49},[36,51963,3059],{"class":53},[36,51965,1188],{"class":49},[36,51967,61],{"class":53},[36,51969,51970,51972,51974,51976,51978,51980,51982,51984,51986],{"class":38,"line":36329},[36,51971,36095],{"class":53},[36,51973,36098],{"class":57},[36,51975,36213],{"class":53},[36,51977,36104],{"class":57},[36,51979,3059],{"class":53},[36,51981,36109],{"class":1997},[36,51983,115],{"class":114},[36,51985,36224],{"class":57},[36,51987,61],{"class":53},[36,51989,51990,51992,51994,51996,51998,52000,52002,52004,52006],{"class":38,"line":36340},[36,51991,36095],{"class":53},[36,51993,36098],{"class":57},[36,51995,36236],{"class":53},[36,51997,36129],{"class":57},[36,51999,3059],{"class":53},[36,52001,36109],{"class":1997},[36,52003,115],{"class":114},[36,52005,36247],{"class":57},[36,52007,61],{"class":53},[36,52009,52010],{"class":38,"line":36359},[36,52011,36255],{"class":42},[36,52013,52015],{"class":38,"line":52014},219,[36,52016,36152],{"class":53},[36,52018,52020,52022,52024],{"class":38,"line":52019},220,[36,52021,36164],{"class":53},[36,52023,36098],{"class":57},[36,52025,61],{"class":53},[36,52027,52029,52031,52033],{"class":38,"line":52028},221,[36,52030,36175],{"class":53},[36,52032,36277],{"class":57},[36,52034,61],{"class":53},[36,52036,52038],{"class":38,"line":52037},222,[36,52039,36285],{"class":53},[36,52041,52043],{"class":38,"line":52042},223,[36,52044,546],{"emptyLinePlaceholder":545},[36,52046,52048],{"class":38,"line":52047},224,[36,52049,36296],{"class":42},[36,52051,52053,52055,52057,52059,52061],{"class":38,"line":52052},225,[36,52054,4069],{"class":114},[36,52056,33724],{"class":49},[36,52058,1377],{"class":114},[36,52060,33729],{"class":57},[36,52062,6270],{"class":53},[36,52064,52066],{"class":38,"line":52065},226,[36,52067,36315],{"class":42},[36,52069,52071,52073,52075],{"class":38,"line":52070},227,[36,52072,47046],{"class":53},[36,52074,115],{"class":114},[36,52076,47051],{"class":53},[36,52078,52080,52082,52084],{"class":38,"line":52079},228,[36,52081,36332],{"class":53},[36,52083,115],{"class":114},[36,52085,36337],{"class":53},[36,52087,52089,52091,52093,52095,52097,52099,52101],{"class":38,"line":52088},229,[36,52090,35894],{"class":53},[36,52092,115],{"class":114},[36,52094,47068],{"class":53},[36,52096,36350],{"class":1997},[36,52098,115],{"class":114},[36,52100,3582],{"class":49},[36,52102,61],{"class":53},[36,52104,52106],{"class":38,"line":52105},230,[36,52107,36362],{"class":53},[24515,52109,52111],{"id":52110},"_242测试代码","2.4.2.测试代码",[19,52113,52114],{},"使用测试集进行测试与推理",[26,52116,52118],{"className":28,"code":52117,"language":30,"meta":31,"style":31},"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",[33,52119,52120,52126,52136,52146,52157,52167,52171,52175,52183,52188,52192,52209,52213,52217,52221,52225,52229,52261,52265,52273,52277,52289,52293,52297,52301,52305,52309,52313,52317,52321,52339,52353,52357,52367,52377,52387,52393,52397,52401,52409,52413,52429,52437,52441,52445,52453,52461,52465,52469,52473,52477,52483,52487,52497,52505,52513,52517,52521,52525,52533,52537,52553,52557,52561,52565,52577,52581,52593,52597,52601,52613,52617,52627,52631,52635,52647,52651,52659,52663,52667,52675,52679,52687,52691,52695,52699,52703,52707,52723,52731,52735,52739,52757,52763,52767,52777,52785,52793,52797,52801,52805,52809,52817,52821,52837,52841,52849,52857],{"__ignoreMap":31},[36,52121,52122,52124],{"class":38,"line":39},[36,52123,537],{"class":114},[36,52125,32902],{"class":53},[36,52127,52128,52130,52132,52134],{"class":38,"line":46},[36,52129,537],{"class":114},[36,52131,33919],{"class":53},[36,52133,33887],{"class":114},[36,52135,33924],{"class":53},[36,52137,52138,52140,52142,52144],{"class":38,"line":82},[36,52139,33241],{"class":114},[36,52141,33902],{"class":53},[36,52143,537],{"class":114},[36,52145,33907],{"class":53},[36,52147,52148,52150,52152,52154],{"class":38,"line":88},[36,52149,33241],{"class":114},[36,52151,33872],{"class":53},[36,52153,537],{"class":114},[36,52155,52156],{"class":53}," ImageFolder\n",[36,52158,52159,52161,52163,52165],{"class":38,"line":195},[36,52160,33241],{"class":114},[36,52162,34417],{"class":53},[36,52164,537],{"class":114},[36,52166,47140],{"class":53},[36,52168,52169],{"class":38,"line":1517},[36,52170,546],{"emptyLinePlaceholder":545},[36,52172,52173],{"class":38,"line":2421},[36,52174,36452],{"class":42},[36,52176,52177,52179,52181],{"class":38,"line":2446},[36,52178,34450],{"class":114},[36,52180,36459],{"class":4500},[36,52182,34456],{"class":53},[36,52184,52185],{"class":38,"line":2469},[36,52186,52187],{"class":42},"   # 导入自己的数据集，并进行数据处理\n",[36,52189,52190],{"class":38,"line":2492},[36,52191,50457],{"class":42},[36,52193,52194,52196,52198,52200,52202,52204,52207],{"class":38,"line":4150},[36,52195,50462],{"class":49},[36,52197,115],{"class":114},[36,52199,3346],{"class":114},[36,52201,1822],{"class":57},[36,52203,3235],{"class":49},[36,52205,52206],{"class":50473},"\u002Fdata\u002Ftest",[36,52208,1620],{"class":57},[36,52210,52211],{"class":38,"line":4155},[36,52212,546],{"emptyLinePlaceholder":545},[36,52214,52215],{"class":38,"line":4161},[36,52216,50485],{"class":42},[36,52218,52219],{"class":38,"line":4166},[36,52220,50490],{"class":42},[36,52222,52223],{"class":38,"line":4180},[36,52224,50495],{"class":42},[36,52226,52227],{"class":38,"line":4185},[36,52228,50500],{"class":42},[36,52230,52231,52233,52235,52237,52239,52241,52243,52245,52247,52249,52251,52253,52255,52257,52259],{"class":38,"line":4191},[36,52232,50505],{"class":53},[36,52234,115],{"class":114},[36,52236,50510],{"class":53},[36,52238,50513],{"class":49},[36,52240,3059],{"class":53},[36,52242,50518],{"class":49},[36,52244,3059],{"class":53},[36,52246,50523],{"class":49},[36,52248,50526],{"class":53},[36,52250,50529],{"class":49},[36,52252,3059],{"class":53},[36,52254,50534],{"class":49},[36,52256,3059],{"class":53},[36,52258,50539],{"class":49},[36,52260,7188],{"class":53},[36,52262,52263],{"class":38,"line":4212},[36,52264,50546],{"class":42},[36,52266,52267,52269,52271],{"class":38,"line":4217},[36,52268,50551],{"class":53},[36,52270,115],{"class":114},[36,52272,50556],{"class":53},[36,52274,52275],{"class":38,"line":4231},[36,52276,50561],{"class":42},[36,52278,52279,52281,52283,52285,52287],{"class":38,"line":4236},[36,52280,50566],{"class":53},[36,52282,34004],{"class":49},[36,52284,3059],{"class":53},[36,52286,34004],{"class":49},[36,52288,45122],{"class":53},[36,52290,52291],{"class":38,"line":4264},[36,52292,50579],{"class":42},[36,52294,52295],{"class":38,"line":4269},[36,52296,50584],{"class":53},[36,52298,52299],{"class":38,"line":4286},[36,52300,50589],{"class":53},[36,52302,52303],{"class":38,"line":4291},[36,52304,50594],{"class":42},[36,52306,52307],{"class":38,"line":4296},[36,52308,50599],{"class":42},[36,52310,52311],{"class":38,"line":4301},[36,52312,546],{"emptyLinePlaceholder":545},[36,52314,52315],{"class":38,"line":4315},[36,52316,50608],{"class":42},[36,52318,52319],{"class":38,"line":4320},[36,52320,50613],{"class":42},[36,52322,52323,52325,52327,52329,52331,52333,52335,52337],{"class":38,"line":5109},[36,52324,36466],{"class":53},[36,52326,115],{"class":114},[36,52328,50622],{"class":53},[36,52330,50625],{"class":49},[36,52332,3059],{"class":53},[36,52334,50630],{"class":1997},[36,52336,115],{"class":114},[36,52338,50635],{"class":53},[36,52340,52341,52343,52345,52347,52349,52351],{"class":38,"line":5123},[36,52342,36522],{"class":53},[36,52344,115],{"class":114},[36,52346,34037],{"class":53},[36,52348,34040],{"class":1997},[36,52350,115],{"class":114},[36,52352,36533],{"class":53},[36,52354,52355],{"class":38,"line":5131},[36,52356,36538],{"class":42},[36,52358,52359,52361,52363,52365],{"class":38,"line":5136},[36,52360,36543],{"class":1997},[36,52362,115],{"class":114},[36,52364,707],{"class":49},[36,52366,33970],{"class":53},[36,52368,52369,52371,52373,52375],{"class":38,"line":5142},[36,52370,36554],{"class":1997},[36,52372,115],{"class":114},[36,52374,189],{"class":49},[36,52376,33970],{"class":53},[36,52378,52379,52381,52383,52385],{"class":38,"line":5148},[36,52380,36565],{"class":1997},[36,52382,115],{"class":114},[36,52384,713],{"class":49},[36,52386,61],{"class":53},[36,52388,52389,52391],{"class":38,"line":5153},[36,52390,6621],{"class":114},[36,52392,36578],{"class":53},[36,52394,52395],{"class":38,"line":10475},[36,52396,546],{"emptyLinePlaceholder":545},[36,52398,52399],{"class":38,"line":10499},[36,52400,36587],{"class":42},[36,52402,52403,52405,52407],{"class":38,"line":10504},[36,52404,34450],{"class":114},[36,52406,36594],{"class":4500},[36,52408,36597],{"class":53},[36,52410,52411],{"class":38,"line":10510},[36,52412,36602],{"class":42},[36,52414,52415,52417,52419,52421,52423,52425,52427],{"class":38,"line":10537},[36,52416,33741],{"class":53},[36,52418,115],{"class":114},[36,52420,33748],{"class":57},[36,52422,4242],{"class":114},[36,52424,33753],{"class":53},[36,52426,4239],{"class":114},[36,52428,36619],{"class":57},[36,52430,52431,52433,52435],{"class":38,"line":10542},[36,52432,33793],{"class":53},[36,52434,115],{"class":114},[36,52436,34792],{"class":53},[36,52438,52439],{"class":38,"line":10548},[36,52440,546],{"emptyLinePlaceholder":545},[36,52442,52443],{"class":38,"line":10560},[36,52444,36636],{"class":42},[36,52446,52447,52449,52451],{"class":38,"line":10572},[36,52448,36641],{"class":53},[36,52450,115],{"class":114},[36,52452,34845],{"class":49},[36,52454,52455,52457,52459],{"class":38,"line":10584},[36,52456,36650],{"class":53},[36,52458,115],{"class":114},[36,52460,5616],{"class":49},[36,52462,52463],{"class":38,"line":12241},[36,52464,546],{"emptyLinePlaceholder":545},[36,52466,52467],{"class":38,"line":12266},[36,52468,36663],{"class":42},[36,52470,52471],{"class":38,"line":12289},[36,52472,36668],{"class":42},[36,52474,52475],{"class":38,"line":12313},[36,52476,36673],{"class":42},[36,52478,52479,52481],{"class":38,"line":12318},[36,52480,36678],{"class":114},[36,52482,35386],{"class":53},[36,52484,52485],{"class":38,"line":12323},[36,52486,36685],{"class":42},[36,52488,52489,52491,52493,52495],{"class":38,"line":12328},[36,52490,5934],{"class":114},[36,52492,36692],{"class":53},[36,52494,28556],{"class":114},[36,52496,36697],{"class":53},[36,52498,52499,52501,52503],{"class":38,"line":12337},[36,52500,36702],{"class":53},[36,52502,115],{"class":114},[36,52504,36707],{"class":53},[36,52506,52507,52509,52511],{"class":38,"line":12342},[36,52508,36712],{"class":53},[36,52510,115],{"class":114},[36,52512,36717],{"class":53},[36,52514,52515],{"class":38,"line":12348},[36,52516,36722],{"class":42},[36,52518,52519],{"class":38,"line":12369},[36,52520,35377],{"class":53},[36,52522,52523],{"class":38,"line":12375},[36,52524,36731],{"class":42},[36,52526,52527,52529,52531],{"class":38,"line":12389},[36,52528,35162],{"class":53},[36,52530,115],{"class":114},[36,52532,36740],{"class":53},[36,52534,52535],{"class":38,"line":12395},[36,52536,36745],{"class":42},[36,52538,52539,52541,52543,52545,52547,52549,52551],{"class":38,"line":12422},[36,52540,35179],{"class":53},[36,52542,115],{"class":114},[36,52544,35184],{"class":53},[36,52546,35187],{"class":1997},[36,52548,115],{"class":114},[36,52550,707],{"class":49},[36,52552,61],{"class":53},[36,52554,52555],{"class":38,"line":12431},[36,52556,36766],{"class":42},[36,52558,52559],{"class":38,"line":12437},[36,52560,36771],{"class":42},[36,52562,52563],{"class":38,"line":12445},[36,52564,36776],{"class":42},[36,52566,52567,52569,52571,52573,52575],{"class":38,"line":12450},[36,52568,36781],{"class":53},[36,52570,1224],{"class":114},[36,52572,35289],{"class":53},[36,52574,1377],{"class":114},[36,52576,36790],{"class":53},[36,52578,52579],{"class":38,"line":19122},[36,52580,36795],{"class":42},[36,52582,52583,52585,52587,52589,52591],{"class":38,"line":19128},[36,52584,36800],{"class":53},[36,52586,1224],{"class":114},[36,52588,36805],{"class":53},[36,52590,713],{"class":49},[36,52592,61],{"class":53},[36,52594,52595],{"class":38,"line":19151},[36,52596,546],{"emptyLinePlaceholder":545},[36,52598,52599],{"class":38,"line":19157},[36,52600,36818],{"class":42},[36,52602,52603,52605,52607,52609,52611],{"class":38,"line":19180},[36,52604,36823],{"class":53},[36,52606,115],{"class":114},[36,52608,36828],{"class":53},[36,52610,1065],{"class":114},[36,52612,36833],{"class":53},[36,52614,52615],{"class":38,"line":19194},[36,52616,36838],{"class":42},[36,52618,52619,52621,52623,52625],{"class":38,"line":19214},[36,52620,34954],{"class":49},[36,52622,54],{"class":53},[36,52624,36847],{"class":57},[36,52626,36850],{"class":53},[36,52628,52629],{"class":38,"line":19220},[36,52630,546],{"emptyLinePlaceholder":545},[36,52632,52633],{"class":38,"line":19231},[36,52634,36859],{"class":42},[36,52636,52637,52639,52641,52643,52645],{"class":38,"line":19254},[36,52638,4069],{"class":114},[36,52640,33724],{"class":49},[36,52642,1377],{"class":114},[36,52644,33729],{"class":57},[36,52646,6270],{"class":53},[36,52648,52649],{"class":38,"line":19276},[36,52650,36876],{"class":42},[36,52652,52653,52655,52657],{"class":38,"line":19281},[36,52654,33793],{"class":53},[36,52656,115],{"class":114},[36,52658,47051],{"class":53},[36,52660,52661],{"class":38,"line":19287},[36,52662,36889],{"class":42},[36,52664,52665],{"class":38,"line":19301},[36,52666,36894],{"class":42},[36,52668,52669,52671,52673],{"class":38,"line":19314},[36,52670,36899],{"class":53},[36,52672,36902],{"class":57},[36,52674,625],{"class":53},[36,52676,52677],{"class":38,"line":19319},[36,52678,36909],{"class":42},[36,52680,52681,52683,52685],{"class":38,"line":19333},[36,52682,36522],{"class":53},[36,52684,115],{"class":114},[36,52686,36918],{"class":53},[36,52688,52689],{"class":38,"line":19338},[36,52690,36923],{"class":42},[36,52692,52693],{"class":38,"line":19344},[36,52694,36928],{"class":53},[36,52696,52697],{"class":38,"line":19349},[36,52698,546],{"emptyLinePlaceholder":545},[36,52700,52701],{"class":38,"line":19363},[36,52702,36937],{"class":42},[36,52704,52705],{"class":38,"line":19368},[36,52706,36942],{"class":42},[36,52708,52709,52711,52713,52715,52717,52719,52721],{"class":38,"line":19373},[36,52710,33741],{"class":53},[36,52712,115],{"class":114},[36,52714,33748],{"class":57},[36,52716,4242],{"class":114},[36,52718,33753],{"class":53},[36,52720,4239],{"class":114},[36,52722,36619],{"class":57},[36,52724,52725,52727,52729],{"class":38,"line":19387},[36,52726,33793],{"class":53},[36,52728,115],{"class":114},[36,52730,34792],{"class":53},[36,52732,52733],{"class":38,"line":19399},[36,52734,36971],{"class":42},[36,52736,52737],{"class":38,"line":19404},[36,52738,36976],{"class":42},[36,52740,52741,52743,52745,52747,52750,52752,52755],{"class":38,"line":19417},[36,52742,36981],{"class":53},[36,52744,115],{"class":114},[36,52746,3566],{"class":53},[36,52748,52749],{"class":57},"'猫'",[36,52751,3059],{"class":53},[36,52753,52754],{"class":57},"'狗'",[36,52756,35748],{"class":53},[36,52758,52759,52761],{"class":38,"line":19422},[36,52760,36678],{"class":114},[36,52762,35386],{"class":53},[36,52764,52765],{"class":38,"line":19427},[36,52766,37046],{"class":42},[36,52768,52769,52771,52773,52775],{"class":38,"line":19432},[36,52770,5934],{"class":114},[36,52772,37053],{"class":53},[36,52774,28556],{"class":114},[36,52776,36697],{"class":53},[36,52778,52779,52781,52783],{"class":38,"line":19445},[36,52780,35112],{"class":53},[36,52782,115],{"class":114},[36,52784,35117],{"class":53},[36,52786,52787,52789,52791],{"class":38,"line":19450},[36,52788,35127],{"class":53},[36,52790,115],{"class":114},[36,52792,35132],{"class":53},[36,52794,52795],{"class":38,"line":35135},[36,52796,546],{"emptyLinePlaceholder":545},[36,52798,52799],{"class":38,"line":35141},[36,52800,37082],{"class":42},[36,52802,52803],{"class":38,"line":35147},[36,52804,35377],{"class":53},[36,52806,52807],{"class":38,"line":35153},[36,52808,37091],{"class":42},[36,52810,52811,52813,52815],{"class":38,"line":35159},[36,52812,35162],{"class":53},[36,52814,115],{"class":114},[36,52816,35167],{"class":53},[36,52818,52819],{"class":38,"line":35170},[36,52820,37104],{"class":42},[36,52822,52823,52825,52827,52829,52831,52833,52835],{"class":38,"line":35176},[36,52824,35179],{"class":53},[36,52826,115],{"class":114},[36,52828,35184],{"class":53},[36,52830,35187],{"class":1997},[36,52832,115],{"class":114},[36,52834,707],{"class":49},[36,52836,61],{"class":53},[36,52838,52839],{"class":38,"line":35196},[36,52840,37125],{"class":42},[36,52842,52843,52845,52847],{"class":38,"line":35202},[36,52844,37130],{"class":53},[36,52846,115],{"class":114},[36,52848,37135],{"class":53},[36,52850,52851,52853,52855],{"class":38,"line":35213},[36,52852,37140],{"class":53},[36,52854,115],{"class":114},[36,52856,37145],{"class":53},[36,52858,52859,52861,52863,52865,52867,52869,52871,52873],{"class":38,"line":35219},[36,52860,37150],{"class":49},[36,52862,54],{"class":53},[36,52864,37155],{"class":57},[36,52866,37158],{"class":53},[36,52868,37161],{"class":57},[36,52870,3059],{"class":53},[36,52872,37166],{"class":57},[36,52874,37169],{"class":53},[2602,52876,52877],{},"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":31,"searchDepth":46,"depth":46,"links":52879},[52880,52881,52882,52883],{"id":33095,"depth":82,"text":33096},{"id":40339,"depth":82,"text":40340},{"id":43772,"depth":82,"text":43773},{"id":47781,"depth":82,"text":47782},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33087,"description":2630},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52890,"title":52891,"body":52892,"description":2630,"extension":2631,"meta":52899,"navigation":545,"path":52900,"seo":52901,"stem":52902,"__hash__":52903},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52893,"toc":52897},[52894],[10,52895,52891],{"id":52896},"_3yolo模型学习",{"title":31,"searchDepth":46,"depth":46,"links":52898},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52891,"description":2630},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52905,"title":52906,"body":52907,"description":52914,"extension":2631,"meta":52915,"navigation":545,"path":52917,"seo":52918,"stem":52919,"__hash__":52920},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52908,"toc":52912},[52909],[19,52910,52911],{},"yolo模型还未补充",{"title":31,"searchDepth":46,"depth":46,"links":52913},[],"深度学习学习",{"category":52916},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52906,"description":52914},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52922,"title":52923,"body":52924,"description":2630,"extension":2631,"meta":52949,"navigation":545,"path":52950,"seo":52951,"stem":52952,"__hash__":52953},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52925,"toc":52947},[52926,52929,52932,52937,52944],[10,52927,52923],{"id":52928},"_1工具",[19,52930,52931],{},"提示错误插件：有问题会提前报错",[19,52933,52934],{},[4000,52935],{"alt":31,"src":52936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52938,52939],{},[2923,52940,52943],{"href":52941,"rel":52942},"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",[26381],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52945,52946],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":46,"depth":46,"links":52948},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52923,"description":2630},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52955,"title":52956,"body":52957,"description":2630,"extension":2631,"meta":55819,"navigation":545,"path":55820,"seo":55821,"stem":55822,"__hash__":55823},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52958,"toc":55770},[52959,52962,52966,52970,52975,52978,52983,52987,52994,52999,53006,53011,53018,53023,53027,53032,53035,53039,53044,53048,53053,53056,53059,53062,53065,53068,53071,53074,53077,53082,53087,53092,53096,53099,53102,53106,53111,53114,53122,53127,53144,53152,53157,53162,53167,53172,53177,53180,53185,53190,53194,53203,53208,53213,53217,53222,53225,53227,53232,53240,53245,53250,53253,53258,53263,53268,53271,53274,53277,53282,53287,53290,53295,53298,53303,53306,53309,53312,53317,53320,53323,53338,53343,53348,53353,53356,53359,53362,53376,53379,53384,53389,53392,53395,53398,53401,53404,53407,53410,53414,53418,53423,53427,53430,53435,53440,53443,53448,53451,53455,53460,53463,53466,53469,53472,53475,53478,53481,53484,53487,53491,53496,53501,53506,53509,53512,53516,53521,53524,53528,53531,53534,53539,53542,53545,53549,53553,53556,53561,53566,53569,53598,53603,53608,53613,53618,53622,53627,53631,53636,53639,53643,53647,53652,53656,53661,53666,53670,53675,53678,53680,53683,53688,53692,53697,53701,53705,53710,53715,53720,53725,53729,53734,53739,53744,53747,53750,53755,53758,53763,53768,53773,53778,53782,54589,54593,54936,54941,54944,54947,54950,54953,54956,54959,54962,54965,54967,54970,54972,54975,54979,54984,54987,54990,54993,54997,55002,55007,55027,55030,55034,55039,55044,55061,55065,55094,55098,55120,55122,55161,55169,55175,55179,55182,55185,55190,55195,55198,55201,55204,55209,55214,55217,55220,55223,55226,55229,55232,55235,55238,55241,55244,55247,55249,55252,55255,55258,55261,55264,55267,55270,55273,55277,55282,55285,55290,55293,55296,55299,55302,55305,55308,55311,55313,55316,55319,55322,55325,55328,55331,55335,55338,55347,55350,55355,55358,55363,55366,55369,55372,55375,55378,55381,55384,55388,55392,55395,55398,55403,55408,55413,55417,55422,55427,55430,55433,55436,55439,55442,55447,55450,55455,55457,55462,55465,55469,55474,55477,55480,55485,55489,55492,55497,55500,55503,55532,55537,55540,55543,55546,55549,55552,55556,55559,55645,55649,55652,55657,55662,55669,55672,55675,55678,55681,55684,55689,55694,55697,55700,55703,55706,55709,55712,55715,55718,55721,55723,55726,55730,55735,55740,55745,55748,55753,55758,55761,55764,55767],[10,52960,52956],{"id":52961},"_2基础语法",[14,52963,52965],{"id":52964},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[997,52967,52969],{"id":52968},"_211-js组成","2.1.1 js组成",[433,52971,52972],{},[436,52973,52974],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52976,52977],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[433,52979,52980],{"start":46},[436,52981,52982],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[997,52984,52986],{"id":52985},"_212-js书写位置","2.1.2 js书写位置",[433,52988,52989],{},[436,52990,52991],{},[2839,52992,52993],{},"内部 JavaScript",[19,52995,52996],{},[4000,52997],{"alt":31,"src":52998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[433,53000,53001],{"start":46},[436,53002,53003],{},[2839,53004,53005],{},"外部 JavaScript",[19,53007,53008],{},[4000,53009],{"alt":31,"src":53010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[433,53012,53013],{"start":82},[436,53014,53015],{},[2839,53016,53017],{},"内联 JavaScript",[19,53019,53020],{},[4000,53021],{"alt":31,"src":53022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[997,53024,53026],{"id":53025},"_213-javascript注释","2.1.3 JavaScript注释",[19,53028,53029],{},[4000,53030],{"alt":31,"src":53031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,53033,53034],{},"alt+shift+a一定要记住！",[997,53036,53038],{"id":53037},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,53040,53041],{},[4000,53042],{"alt":31,"src":53043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[997,53045,53047],{"id":53046},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[433,53049,53050],{},[436,53051,53052],{},"输出语法：",[19,53054,53055],{},"①document.write('要出的内容')",[19,53057,53058],{},"向body内输出内容；",[19,53060,53061],{},"如果输出的内容写的是标签，也会被解析cheng",[19,53063,53064],{},"②alert('要出的内容')",[19,53066,53067],{},"页面弹出警告对话框",[19,53069,53070],{},"③console.log('控制台打印')",[19,53072,53073],{},"控制台输出语法，程序员调试使用",[19,53075,53076],{},"输入log就行，自动生成：",[19,53078,53079],{},[4000,53080],{"alt":31,"src":53081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[433,53083,53084],{"start":46},[436,53085,53086],{},"输入语法：",[19,53088,53089],{},[4000,53090],{"alt":31,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[997,53093,53095],{"id":53094},"_2116-字面量","21.1.6 字面量",[19,53097,53098],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53100,53101],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53103,53105],{"id":53104},"_22-变量","2.2 变量",[433,53107,53108],{},[436,53109,53110],{},"变量声明",[19,53112,53113],{},"let 变量名",[3680,53115,53116,53119],{},[436,53117,53118],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[436,53120,53121],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[433,53123,53124],{"start":46},[436,53125,53126],{},"变量赋值",[26,53128,53132],{"className":53129,"code":53130,"language":53131,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,53133,53134,53139],{"__ignoreMap":31},[36,53135,53136],{"class":38,"line":39},[36,53137,53138],{"class":53},"let age\n",[36,53140,53141],{"class":38,"line":46},[36,53142,53143],{"class":53},"age=18\n",[433,53145,53146,53149],{"start":82},[436,53147,53148],{},"连这些（变量的初始化）：let age=18",[436,53150,53151],{},"更新变量",[19,53153,53154],{},[4000,53155],{"alt":31,"src":53156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[433,53158,53159],{"start":195},[436,53160,53161],{},"声明多个变量",[19,53163,53164],{},[4000,53165],{"alt":31,"src":53166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[433,53168,53169],{"start":1517},[436,53170,53171],{},"变量命名规则与规范",[19,53173,53174],{},[4000,53175],{"alt":31,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53178,53179],{},"遵守小驼峰！",[433,53181,53182],{"start":2421},[436,53183,53184],{},"变量拓展-let和var的区别",[19,53186,53187],{},[4000,53188],{"alt":31,"src":53189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53191,53193],{"id":53192},"_23-数组","2.3 数组",[26,53195,53197],{"className":53129,"code":53196,"language":53131,"meta":31,"style":31},"let arr = []\n",[33,53198,53199],{"__ignoreMap":31},[36,53200,53201],{"class":38,"line":39},[36,53202,53196],{"class":53},[19,53204,53205],{},[4000,53206],{"alt":31,"src":53207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,53209,53210],{},[4000,53211],{"alt":31,"src":53212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53214,53216],{"id":53215},"_24-常量","2.4 常量",[19,53218,53219],{},[4000,53220],{"alt":31,"src":53221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,53223,53224],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53226,597],{"id":596},[19,53228,53229],{},[4000,53230],{"alt":31,"src":53231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[433,53233,53234,53237],{},[436,53235,53236],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[436,53238,53239],{},"算数运算符：",[19,53241,53242],{},[4000,53243],{"alt":31,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[433,53246,53247],{"start":82},[436,53248,53249],{},"数字类型（Number）",[19,53251,53252],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,53254,53255],{},[4000,53256],{"alt":31,"src":53257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[433,53259,53260],{"start":88},[436,53261,53262],{},"字符串类型（string）",[19,53264,53265],{},[4000,53266],{"alt":31,"src":53267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53269,53270],{},"反引号也是可以使用的",[19,53272,53273],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53275,53276],{},"例如：document.write(\"我今年\"+age+\"岁\")",[433,53278,53279],{"start":195},[436,53280,53281],{},"模板字符串",[19,53283,53284],{},[4000,53285],{"alt":31,"src":53286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53288,53289],{},"类似于python的字符串格式化",[433,53291,53292],{"start":1517},[436,53293,53294],{},"布尔类型",[19,53296,53297],{},"true 和 false",[433,53299,53300],{"start":2421},[436,53301,53302],{},"未定义类型（underfined）",[19,53304,53305],{},"表示没有赋值",[19,53307,53308],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53310,53311],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[433,53313,53314],{"start":2446},[436,53315,53316],{},"null（空类型）",[19,53318,53319],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53321,53322],{},"赋值了，但是内容为空",[26,53324,53326],{"className":53129,"code":53325,"language":53131,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,53327,53328,53333],{"__ignoreMap":31},[36,53329,53330],{"class":38,"line":39},[36,53331,53332],{"class":53},"typeof null\n",[36,53334,53335],{"class":38,"line":46},[36,53336,53337],{"class":53},"输出的是'object'，是一个对象数据类型\n",[433,53339,53340],{"start":2469},[436,53341,53342],{},"控制台检测数据类型",[19,53344,53345],{},[4000,53346],{"alt":31,"src":53347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[433,53349,53350],{"start":2492},[436,53351,53352],{},"类型转换",[19,53354,53355],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53357,53358],{},"转换方式：隐式转换和显示转换",[19,53360,53361],{},"①隐式转换",[3680,53363,53364,53367,53370,53373],{},[436,53365,53366],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[436,53368,53369],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[436,53371,53372],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[436,53374,53375],{},"任何数据和字符串相加结果都是字符串",[19,53377,53378],{},"②显示转换",[19,53380,53381],{},[4000,53382],{"alt":31,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53385,53386],{},[4000,53387],{"alt":31,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53390,53391],{},"在输入的时候要用好隐式转换，简单写起来",[19,53393,53394],{},"let num = +prompt(’请输入数字：‘)",[19,53396,53397],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53399,53400],{},"console.log(parseInt('12.333px'))",[19,53402,53403],{},"输出为：12",[19,53405,53406],{},"console.log(parseInt('a'a'a12.333px'))",[19,53408,53409],{},"输出：NaN",[14,53411,53413],{"id":53412},"_26-运算符","2.6 运算符",[997,53415,53417],{"id":53416},"_261-赋值运算符","2.6.1 赋值运算符",[19,53419,53420],{},[4000,53421],{"alt":31,"src":53422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[997,53424,53426],{"id":53425},"_262-一元运算符","2.6.2 一元运算符",[19,53428,53429],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53431,53432],{},[4000,53433],{"alt":31,"src":53434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53436,53437],{},[4000,53438],{"alt":31,"src":53439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53441,53442],{},"两者的区别：",[19,53444,53445],{},[4000,53446],{"alt":31,"src":53447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53449,53450],{},"前置先自加；后置后加，代码执行完之后再加",[997,53452,53454],{"id":53453},"_263-比较运算符","2.6.3 比较运算符",[19,53456,53457],{},[4000,53458],{"alt":31,"src":53459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53461,53462],{},"比较运算符也有隐式转换",[19,53464,53465],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53467,53468],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53470,53471],{},"要使用三等，开发的时候",[19,53473,53474],{},"NaN不等于任何人，包括它自己",[19,53476,53477],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53479,53480],{},"7\u002F10=0.7",[19,53482,53483],{},"最后：0.5+0.2=0.7",[19,53485,53486],{},"字符串比较，比较的是字符对应的ASCII码",[997,53488,53490],{"id":53489},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53492,53493],{},[4000,53494],{"alt":31,"src":53495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53497,53498],{},[4000,53499],{"alt":31,"src":53500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53502,53503],{},[4000,53504],{"alt":31,"src":53505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53507,53508],{},"上述题目选D",[19,53510,53511],{},"与真2假1；或真1假2",[997,53513,53515],{"id":53514},"_265-运算符优先级","2.6.5 运算符优先级",[19,53517,53518],{},[4000,53519],{"alt":31,"src":53520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53522,53523],{},"先算逻辑与，后算逻辑或",[14,53525,53527],{"id":53526},"_27-语句","2.7 语句",[19,53529,53530],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53532,53533],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53535,53536],{},[4000,53537],{"alt":31,"src":53538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53540,53541],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53543,53544],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[997,53546,53548],{"id":53547},"_271-分支语句","2.7.1 分支语句",[24515,53550,53552],{"id":53551},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53554,53555],{},"if语句单行简单的话，可以不写{}，写在一行就行",[433,53557,53558],{},[436,53559,53560],{},"单分支语句",[19,53562,53563],{},[4000,53564],{"alt":31,"src":53565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53567,53568],{},"除了0，所有数字都为真",[26,53570,53572],{"className":53129,"code":53571,"language":53131,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,53573,53574,53579,53584,53589,53593],{"__ignoreMap":31},[36,53575,53576],{"class":38,"line":39},[36,53577,53578],{"class":53},"if（0) {\n",[36,53580,53581],{"class":38,"line":46},[36,53582,53583],{"class":53},"    let a=1\n",[36,53585,53586],{"class":38,"line":82},[36,53587,53588],{"class":53},"    alert(typeof a)\n",[36,53590,53591],{"class":38,"line":88},[36,53592,4103],{"class":53},[36,53594,53595],{"class":38,"line":195},[36,53596,53597],{"class":53},"不输出，括号为假\n",[433,53599,53600],{"start":46},[436,53601,53602],{},"双分支语句",[19,53604,53605],{},[4000,53606],{"alt":31,"src":53607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[433,53609,53610],{"start":82},[436,53611,53612],{},"多分支语句",[19,53614,53615],{},[4000,53616],{"alt":31,"src":53617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24515,53619,53621],{"id":53620},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53623,53624],{},[4000,53625],{"alt":31,"src":53626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24515,53628,53630],{"id":53629},"_2713-switch语句","2.7.1.3 switch语句",[19,53632,53633],{},[4000,53634],{"alt":31,"src":53635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53637,53638],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[997,53640,53642],{"id":53641},"_272-循环语句","2.7.2 循环语句",[24515,53644,53646],{"id":53645},"_2721-断点演示","2.7.2.1 断点演示",[19,53648,53649],{},[4000,53650],{"alt":31,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24515,53653,53655],{"id":53654},"_2722-while循环","2.7.2.2 while循环",[19,53657,53658],{},[4000,53659],{"alt":31,"src":53660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53662,53663],{},[4000,53664],{"alt":31,"src":53665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24515,53667,53669],{"id":53668},"_2723-for循环","2.7.2.3 for循环",[19,53671,53672],{},[4000,53673],{"alt":31,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53676,53677],{},"for(;;) {",[19,53679,2070],{},[19,53681,53682],{},"表示无限循环",[19,53684,53685],{},[4000,53686],{"alt":31,"src":53687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24515,53689,53691],{"id":53690},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53693,53694],{},[4000,53695],{"alt":31,"src":53696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53698,53700],{"id":53699},"_28-数组","2.8 数组",[997,53702,53704],{"id":53703},"_281-基础认识","2.8.1 基础认识",[19,53706,53707],{},[4000,53708],{"alt":31,"src":53709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53711,53712],{},[4000,53713],{"alt":31,"src":53714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53716,53717],{},[4000,53718],{"alt":31,"src":53719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53721,53722],{},[4000,53723],{"alt":31,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[997,53726,53728],{"id":53727},"_282-操作数组","2.8.2 操作数组",[19,53730,53731],{},[4000,53732],{"alt":31,"src":53733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[433,53735,53736],{},[436,53737,53738],{},"添加元素",[19,53740,53741],{},[4000,53742],{"alt":31,"src":53743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53745,53746],{},"console.log(arr.push('green'))",[19,53748,53749],{},"输出结果：为新数组的长度",[19,53751,53752],{},[4000,53753],{"alt":31,"src":53754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53756,53757],{},"push用的非常多，一定要记住",[433,53759,53760],{},[436,53761,53762],{},"删除元素",[19,53764,53765],{},[4000,53766],{"alt":31,"src":53767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53769,53770],{},[4000,53771],{"alt":31,"src":53772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53774,53775],{},[4000,53776],{"alt":31,"src":53777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[997,53779,53781],{"id":53780},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,53783,53785],{"className":53129,"code":53784,"language":53131,"meta":31,"style":31},"\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",[33,53786,53787,53802,53818,53822,53831,53849,53873,53895,53909,53917,53924,53936,53947,53951,53955,53962,53974,53989,54002,54021,54038,54053,54065,54077,54089,54093,54097,54108,54118,54130,54142,54154,54165,54169,54173,54185,54189,54203,54207,54211,54222,54236,54248,54262,54266,54275,54284,54288,54297,54301,54310,54315,54320,54333,54361,54366,54371,54396,54401,54405,54410,54415,54430,54434,54439,54469,54481,54497,54513,54527,54532,54539,54543,54548,54561,54569,54577,54581],{"__ignoreMap":31},[36,53788,53789,53792,53796,53799],{"class":38,"line":39},[36,53790,53791],{"class":53},"\u003C!",[36,53793,53795],{"class":53794},"s9eBZ","DOCTYPE",[36,53797,53798],{"class":4500}," html",[36,53800,53801],{"class":53},">\n",[36,53803,53804,53806,53808,53811,53813,53816],{"class":38,"line":46},[36,53805,1507],{"class":53},[36,53807,53131],{"class":53794},[36,53809,53810],{"class":4500}," lang",[36,53812,115],{"class":53},[36,53814,53815],{"class":57},"\"en\"",[36,53817,53801],{"class":53},[36,53819,53820],{"class":38,"line":82},[36,53821,546],{"emptyLinePlaceholder":545},[36,53823,53824,53826,53829],{"class":38,"line":88},[36,53825,1507],{"class":53},[36,53827,53828],{"class":53794},"head",[36,53830,53801],{"class":53},[36,53832,53833,53836,53839,53842,53844,53847],{"class":38,"line":195},[36,53834,53835],{"class":53},"    \u003C",[36,53837,53838],{"class":53794},"meta",[36,53840,53841],{"class":4500}," charset",[36,53843,115],{"class":53},[36,53845,53846],{"class":57},"\"UTF-8\"",[36,53848,53801],{"class":53},[36,53850,53851,53853,53855,53858,53860,53863,53866,53868,53871],{"class":38,"line":1517},[36,53852,53835],{"class":53},[36,53854,53838],{"class":53794},[36,53856,53857],{"class":4500}," http-equiv",[36,53859,115],{"class":53},[36,53861,53862],{"class":57},"\"X-UA-Compatible\"",[36,53864,53865],{"class":4500}," content",[36,53867,115],{"class":53},[36,53869,53870],{"class":57},"\"IE=edge\"",[36,53872,53801],{"class":53},[36,53874,53875,53877,53879,53881,53883,53886,53888,53890,53893],{"class":38,"line":2421},[36,53876,53835],{"class":53},[36,53878,53838],{"class":53794},[36,53880,17440],{"class":4500},[36,53882,115],{"class":53},[36,53884,53885],{"class":57},"\"viewport\"",[36,53887,53865],{"class":4500},[36,53889,115],{"class":53},[36,53891,53892],{"class":57},"\"width=device-width, initial-scale=1.0\"",[36,53894,53801],{"class":53},[36,53896,53897,53899,53902,53905,53907],{"class":38,"line":2446},[36,53898,53835],{"class":53},[36,53900,53901],{"class":53794},"title",[36,53903,53904],{"class":53},">Document\u003C\u002F",[36,53906,53901],{"class":53794},[36,53908,53801],{"class":53},[36,53910,53911,53913,53915],{"class":38,"line":2469},[36,53912,53835],{"class":53},[36,53914,2602],{"class":53794},[36,53916,53801],{"class":53},[36,53918,53919,53922],{"class":38,"line":2492},[36,53920,53921],{"class":53794},"        *",[36,53923,18091],{"class":53},[36,53925,53926,53929,53932,53934],{"class":38,"line":4150},[36,53927,53928],{"class":49},"            margin",[36,53930,53931],{"class":53},": ",[36,53933,713],{"class":49},[36,53935,3833],{"class":53},[36,53937,53938,53941,53943,53945],{"class":38,"line":4155},[36,53939,53940],{"class":49},"            padding",[36,53942,53931],{"class":53},[36,53944,713],{"class":49},[36,53946,3833],{"class":53},[36,53948,53949],{"class":38,"line":4161},[36,53950,5061],{"class":53},[36,53952,53953],{"class":38,"line":4166},[36,53954,546],{"emptyLinePlaceholder":545},[36,53956,53957,53960],{"class":38,"line":4180},[36,53958,53959],{"class":4500},"        .box",[36,53961,18091],{"class":53},[36,53963,53964,53967,53969,53972],{"class":38,"line":4185},[36,53965,53966],{"class":49},"            display",[36,53968,53931],{"class":53},[36,53970,53971],{"class":49},"flex",[36,53973,3833],{"class":53},[36,53975,53976,53979,53981,53984,53987],{"class":38,"line":4191},[36,53977,53978],{"class":49},"            width",[36,53980,53931],{"class":53},[36,53982,53983],{"class":49},"700",[36,53985,53986],{"class":114},"px",[36,53988,3833],{"class":53},[36,53990,53991,53994,53996,53998,54000],{"class":38,"line":4212},[36,53992,53993],{"class":49},"            height",[36,53995,53931],{"class":53},[36,53997,6504],{"class":49},[36,53999,53986],{"class":114},[36,54001,3833],{"class":53},[36,54003,54004,54007,54009,54011,54013,54016,54019],{"class":38,"line":4217},[36,54005,54006],{"class":49},"            border-left",[36,54008,53931],{"class":53},[36,54010,707],{"class":49},[36,54012,53986],{"class":114},[36,54014,54015],{"class":49}," solid",[36,54017,54018],{"class":49}," pink",[36,54020,3833],{"class":53},[36,54022,54023,54026,54028,54030,54032,54034,54036],{"class":38,"line":4231},[36,54024,54025],{"class":49},"            border-bottom",[36,54027,53931],{"class":53},[36,54029,707],{"class":49},[36,54031,53986],{"class":114},[36,54033,54015],{"class":49},[36,54035,54018],{"class":49},[36,54037,3833],{"class":53},[36,54039,54040,54042,54044,54046,54048,54051],{"class":38,"line":4236},[36,54041,53928],{"class":49},[36,54043,53931],{"class":53},[36,54045,3332],{"class":49},[36,54047,53986],{"class":114},[36,54049,54050],{"class":49}," auto",[36,54052,3833],{"class":53},[36,54054,54055,54058,54060,54063],{"class":38,"line":4264},[36,54056,54057],{"class":49},"            justify-content",[36,54059,53931],{"class":53},[36,54061,54062],{"class":49},"space-around",[36,54064,3833],{"class":53},[36,54066,54067,54070,54072,54075],{"class":38,"line":4269},[36,54068,54069],{"class":49},"            align-items",[36,54071,53931],{"class":53},[36,54073,54074],{"class":49},"flex-end",[36,54076,3833],{"class":53},[36,54078,54079,54082,54084,54087],{"class":38,"line":4286},[36,54080,54081],{"class":49},"            text-align",[36,54083,53931],{"class":53},[36,54085,54086],{"class":49},"center",[36,54088,3833],{"class":53},[36,54090,54091],{"class":38,"line":4291},[36,54092,5061],{"class":53},[36,54094,54095],{"class":38,"line":4296},[36,54096,546],{"emptyLinePlaceholder":545},[36,54098,54099,54101,54103,54106],{"class":38,"line":4301},[36,54100,53959],{"class":4500},[36,54102,3633],{"class":114},[36,54104,54105],{"class":53794},"div",[36,54107,18091],{"class":53},[36,54109,54110,54112,54114,54116],{"class":38,"line":4315},[36,54111,53966],{"class":49},[36,54113,53931],{"class":53},[36,54115,53971],{"class":49},[36,54117,3833],{"class":53},[36,54119,54120,54122,54124,54126,54128],{"class":38,"line":4320},[36,54121,53978],{"class":49},[36,54123,53931],{"class":53},[36,54125,3332],{"class":49},[36,54127,53986],{"class":114},[36,54129,3833],{"class":53},[36,54131,54132,54135,54137,54140],{"class":38,"line":5109},[36,54133,54134],{"class":49},"            background-color",[36,54136,53931],{"class":53},[36,54138,54139],{"class":49},"pink",[36,54141,3833],{"class":53},[36,54143,54144,54147,54149,54152],{"class":38,"line":5123},[36,54145,54146],{"class":49},"            flex-direction",[36,54148,53931],{"class":53},[36,54150,54151],{"class":49},"column",[36,54153,3833],{"class":53},[36,54155,54156,54158,54160,54163],{"class":38,"line":5131},[36,54157,54057],{"class":49},[36,54159,53931],{"class":53},[36,54161,54162],{"class":49},"space-between",[36,54164,3833],{"class":53},[36,54166,54167],{"class":38,"line":5136},[36,54168,5061],{"class":53},[36,54170,54171],{"class":38,"line":5142},[36,54172,546],{"emptyLinePlaceholder":545},[36,54174,54175,54177,54180,54183],{"class":38,"line":5148},[36,54176,53959],{"class":4500},[36,54178,54179],{"class":53794}," div",[36,54181,54182],{"class":53794}," span",[36,54184,18091],{"class":53},[36,54186,54187],{"class":38,"line":5153},[36,54188,546],{"emptyLinePlaceholder":545},[36,54190,54191,54194,54196,54199,54201],{"class":38,"line":10475},[36,54192,54193],{"class":49},"            margin-top",[36,54195,53931],{"class":53},[36,54197,54198],{"class":49},"-20",[36,54200,53986],{"class":114},[36,54202,3833],{"class":53},[36,54204,54205],{"class":38,"line":10499},[36,54206,5061],{"class":53},[36,54208,54209],{"class":38,"line":10504},[36,54210,546],{"emptyLinePlaceholder":545},[36,54212,54213,54215,54217,54220],{"class":38,"line":10510},[36,54214,53959],{"class":4500},[36,54216,54179],{"class":53794},[36,54218,54219],{"class":53794}," h4",[36,54221,18091],{"class":53},[36,54223,54224,54227,54229,54232,54234],{"class":38,"line":10537},[36,54225,54226],{"class":49},"            margin-bottom",[36,54228,53931],{"class":53},[36,54230,54231],{"class":49},"-35",[36,54233,53986],{"class":114},[36,54235,3833],{"class":53},[36,54237,54238,54240,54242,54244,54246],{"class":38,"line":10542},[36,54239,53978],{"class":49},[36,54241,53931],{"class":53},[36,54243,3037],{"class":49},[36,54245,53986],{"class":114},[36,54247,3833],{"class":53},[36,54249,54250,54253,54255,54258,54260],{"class":38,"line":10548},[36,54251,54252],{"class":49},"            margin-left",[36,54254,53931],{"class":53},[36,54256,54257],{"class":49},"-10",[36,54259,53986],{"class":114},[36,54261,3833],{"class":53},[36,54263,54264],{"class":38,"line":10560},[36,54265,5061],{"class":53},[36,54267,54268,54271,54273],{"class":38,"line":10572},[36,54269,54270],{"class":53},"    \u003C\u002F",[36,54272,2602],{"class":53794},[36,54274,53801],{"class":53},[36,54276,54277,54280,54282],{"class":38,"line":10584},[36,54278,54279],{"class":53},"\u003C\u002F",[36,54281,53828],{"class":53794},[36,54283,53801],{"class":53},[36,54285,54286],{"class":38,"line":12241},[36,54287,546],{"emptyLinePlaceholder":545},[36,54289,54290,54292,54295],{"class":38,"line":12266},[36,54291,1507],{"class":53},[36,54293,54294],{"class":53794},"body",[36,54296,53801],{"class":53},[36,54298,54299],{"class":38,"line":12289},[36,54300,546],{"emptyLinePlaceholder":545},[36,54302,54303,54305,54308],{"class":38,"line":12313},[36,54304,53835],{"class":53},[36,54306,54307],{"class":53794},"script",[36,54309,53801],{"class":53},[36,54311,54312],{"class":38,"line":12318},[36,54313,54314],{"class":42},"        \u002F\u002F 1. 四次弹框效果\n",[36,54316,54317],{"class":38,"line":12323},[36,54318,54319],{"class":42},"        \u002F\u002F 声明一个新的数组\n",[36,54321,54322,54325,54328,54330],{"class":38,"line":12328},[36,54323,54324],{"class":114},"        let",[36,54326,54327],{"class":53}," arr ",[36,54329,115],{"class":114},[36,54331,54332],{"class":53}," []\n",[36,54334,54335,54337,54339,54342,54344,54346,54348,54350,54352,54355,54357,54359],{"class":38,"line":12337},[36,54336,5934],{"class":114},[36,54338,4196],{"class":53},[36,54340,54341],{"class":114},"let",[36,54343,11964],{"class":53},[36,54345,115],{"class":114},[36,54347,733],{"class":49},[36,54349,11971],{"class":53},[36,54351,4126],{"class":114},[36,54353,54354],{"class":49}," 4",[36,54356,5745],{"class":53},[36,54358,4826],{"class":114},[36,54360,14965],{"class":53},[36,54362,54363],{"class":38,"line":12342},[36,54364,54365],{"class":42},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,54367,54368],{"class":38,"line":12348},[36,54369,54370],{"class":42},"            \u002F\u002F arr.push(num)\n",[36,54372,54373,54376,54379,54381,54384,54386,54389,54391,54394],{"class":38,"line":12369},[36,54374,54375],{"class":53},"            arr.",[36,54377,54378],{"class":4500},"push",[36,54380,54],{"class":53},[36,54382,54383],{"class":4500},"prompt",[36,54385,54],{"class":53},[36,54387,54388],{"class":57},"`请输入第${",[36,54390,3122],{"class":53},[36,54392,54393],{"class":57},"}季度的数据:`",[36,54395,625],{"class":53},[36,54397,54398],{"class":38,"line":12375},[36,54399,54400],{"class":42},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,54402,54403],{"class":38,"line":12389},[36,54404,5061],{"class":53},[36,54406,54407],{"class":38,"line":12395},[36,54408,54409],{"class":42},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,54411,54412],{"class":38,"line":12422},[36,54413,54414],{"class":42},"        \u002F\u002F 盒子开头\n",[36,54416,54417,54420,54423,54425,54428],{"class":38,"line":12431},[36,54418,54419],{"class":53},"        document.",[36,54421,54422],{"class":4500},"write",[36,54424,54],{"class":53},[36,54426,54427],{"class":57},"` \u003Cdiv class=\"box\">`",[36,54429,61],{"class":53},[36,54431,54432],{"class":38,"line":12437},[36,54433,546],{"emptyLinePlaceholder":545},[36,54435,54436],{"class":38,"line":12445},[36,54437,54438],{"class":42},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,54440,54441,54443,54445,54447,54449,54451,54453,54455,54457,54460,54463,54465,54467],{"class":38,"line":12450},[36,54442,5934],{"class":114},[36,54444,4196],{"class":53},[36,54446,54341],{"class":114},[36,54448,11964],{"class":53},[36,54450,115],{"class":114},[36,54452,6624],{"class":49},[36,54454,11971],{"class":53},[36,54456,1507],{"class":114},[36,54458,54459],{"class":53}," arr.",[36,54461,54462],{"class":49},"length",[36,54464,5745],{"class":53},[36,54466,4826],{"class":114},[36,54468,14965],{"class":53},[36,54470,54471,54474,54476,54478],{"class":38,"line":19122},[36,54472,54473],{"class":53},"            document.",[36,54475,54422],{"class":4500},[36,54477,54],{"class":53},[36,54479,54480],{"class":57},"`\n",[36,54482,54483,54486,54488,54490,54492,54494],{"class":38,"line":19128},[36,54484,54485],{"class":57},"              \u003Cdiv style=\"height: ${",[36,54487,6411],{"class":53},[36,54489,3566],{"class":57},[36,54491,3122],{"class":53},[36,54493,3614],{"class":57},[36,54495,54496],{"class":57},"}px;\">\n",[36,54498,54499,54502,54504,54506,54508,54510],{"class":38,"line":19151},[36,54500,54501],{"class":57},"                \u003Cspan>${",[36,54503,6411],{"class":53},[36,54505,3566],{"class":57},[36,54507,3122],{"class":53},[36,54509,3614],{"class":57},[36,54511,54512],{"class":57},"}\u003C\u002Fspan>\n",[36,54514,54515,54518,54520,54522,54524],{"class":38,"line":19157},[36,54516,54517],{"class":57},"                \u003Ch4>第${",[36,54519,3122],{"class":53},[36,54521,730],{"class":114},[36,54523,733],{"class":49},[36,54525,54526],{"class":57},"}季度\u003C\u002Fh4>\n",[36,54528,54529],{"class":38,"line":19180},[36,54530,54531],{"class":57},"              \u003C\u002Fdiv>          \n",[36,54533,54534,54537],{"class":38,"line":19194},[36,54535,54536],{"class":57},"            `",[36,54538,61],{"class":53},[36,54540,54541],{"class":38,"line":19214},[36,54542,5061],{"class":53},[36,54544,54545],{"class":38,"line":19220},[36,54546,54547],{"class":42},"        \u002F\u002F 盒子结尾\n",[36,54549,54550,54552,54554,54556,54559],{"class":38,"line":19231},[36,54551,54419],{"class":53},[36,54553,54422],{"class":4500},[36,54555,54],{"class":53},[36,54557,54558],{"class":57},"` \u003C\u002Fdiv>`",[36,54560,61],{"class":53},[36,54562,54563,54565,54567],{"class":38,"line":19254},[36,54564,54270],{"class":53},[36,54566,54307],{"class":53794},[36,54568,53801],{"class":53},[36,54570,54571,54573,54575],{"class":38,"line":19276},[36,54572,54279],{"class":53},[36,54574,54294],{"class":53794},[36,54576,53801],{"class":53},[36,54578,54579],{"class":38,"line":19281},[36,54580,546],{"emptyLinePlaceholder":545},[36,54582,54583,54585,54587],{"class":38,"line":19287},[36,54584,54279],{"class":53},[36,54586,53131],{"class":53794},[36,54588,53801],{"class":53},[997,54590,54592],{"id":54591},"_284-冒泡排序","2.8.4 冒泡排序",[26,54594,54596],{"className":53129,"code":54595,"language":53131,"meta":31,"style":31},"\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",[33,54597,54598,54608,54622,54626,54634,54649,54669,54681,54689,54693,54701,54709,54741,54774,54811,54816,54835,54840,54853,54868,54884,54888,54893,54897,54907,54916,54924,54928],{"__ignoreMap":31},[36,54599,54600,54602,54604,54606],{"class":38,"line":39},[36,54601,53791],{"class":53},[36,54603,53795],{"class":53794},[36,54605,53798],{"class":4500},[36,54607,53801],{"class":53},[36,54609,54610,54612,54614,54616,54618,54620],{"class":38,"line":46},[36,54611,1507],{"class":53},[36,54613,53131],{"class":53794},[36,54615,53810],{"class":4500},[36,54617,115],{"class":53},[36,54619,53815],{"class":57},[36,54621,53801],{"class":53},[36,54623,54624],{"class":38,"line":82},[36,54625,546],{"emptyLinePlaceholder":545},[36,54627,54628,54630,54632],{"class":38,"line":88},[36,54629,1507],{"class":53},[36,54631,53828],{"class":53794},[36,54633,53801],{"class":53},[36,54635,54636,54639,54641,54643,54645,54647],{"class":38,"line":195},[36,54637,54638],{"class":53},"  \u003C",[36,54640,53838],{"class":53794},[36,54642,53841],{"class":4500},[36,54644,115],{"class":53},[36,54646,53846],{"class":57},[36,54648,53801],{"class":53},[36,54650,54651,54653,54655,54657,54659,54661,54663,54665,54667],{"class":38,"line":1517},[36,54652,54638],{"class":53},[36,54654,53838],{"class":53794},[36,54656,17440],{"class":4500},[36,54658,115],{"class":53},[36,54660,53885],{"class":57},[36,54662,53865],{"class":4500},[36,54664,115],{"class":53},[36,54666,53892],{"class":57},[36,54668,53801],{"class":53},[36,54670,54671,54673,54675,54677,54679],{"class":38,"line":2421},[36,54672,54638],{"class":53},[36,54674,53901],{"class":53794},[36,54676,53904],{"class":53},[36,54678,53901],{"class":53794},[36,54680,53801],{"class":53},[36,54682,54683,54685,54687],{"class":38,"line":2446},[36,54684,54279],{"class":53},[36,54686,53828],{"class":53794},[36,54688,53801],{"class":53},[36,54690,54691],{"class":38,"line":2469},[36,54692,546],{"emptyLinePlaceholder":545},[36,54694,54695,54697,54699],{"class":38,"line":2492},[36,54696,1507],{"class":53},[36,54698,54294],{"class":53794},[36,54700,53801],{"class":53},[36,54702,54703,54705,54707],{"class":38,"line":4150},[36,54704,54638],{"class":53},[36,54706,54307],{"class":53794},[36,54708,53801],{"class":53},[36,54710,54711,54714,54716,54718,54721,54723,54725,54727,54729,54731,54733,54735,54737,54739],{"class":38,"line":4155},[36,54712,54713],{"class":114},"    let",[36,54715,54327],{"class":53},[36,54717,115],{"class":114},[36,54719,54720],{"class":53}," [",[36,54722,1134],{"class":49},[36,54724,14958],{"class":53},[36,54726,2977],{"class":49},[36,54728,14958],{"class":53},[36,54730,2767],{"class":49},[36,54732,14958],{"class":53},[36,54734,1188],{"class":49},[36,54736,14958],{"class":53},[36,54738,707],{"class":49},[36,54740,35748],{"class":53},[36,54742,54743,54745,54747,54749,54751,54753,54755,54757,54759,54761,54763,54766,54768,54770,54772],{"class":38,"line":4161},[36,54744,5732],{"class":114},[36,54746,4196],{"class":53},[36,54748,54341],{"class":114},[36,54750,11964],{"class":53},[36,54752,115],{"class":114},[36,54754,6624],{"class":49},[36,54756,11971],{"class":53},[36,54758,1507],{"class":114},[36,54760,54459],{"class":53},[36,54762,54462],{"class":49},[36,54764,54765],{"class":114}," -",[36,54767,733],{"class":49},[36,54769,5745],{"class":53},[36,54771,4826],{"class":114},[36,54773,14965],{"class":53},[36,54775,54776,54779,54781,54783,54785,54787,54789,54791,54793,54795,54797,54799,54801,54803,54805,54807,54809],{"class":38,"line":4166},[36,54777,54778],{"class":114},"      for",[36,54780,4196],{"class":53},[36,54782,54341],{"class":114},[36,54784,12025],{"class":53},[36,54786,115],{"class":114},[36,54788,6624],{"class":49},[36,54790,12032],{"class":53},[36,54792,1507],{"class":114},[36,54794,54459],{"class":53},[36,54796,54462],{"class":49},[36,54798,54765],{"class":114},[36,54800,11964],{"class":53},[36,54802,508],{"class":114},[36,54804,733],{"class":49},[36,54806,12039],{"class":53},[36,54808,4826],{"class":114},[36,54810,14965],{"class":53},[36,54812,54813],{"class":38,"line":4180},[36,54814,54815],{"class":42},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,54817,54818,54820,54823,54825,54828,54830,54832],{"class":38,"line":4185},[36,54819,5029],{"class":114},[36,54821,54822],{"class":53}," (arr[j] ",[36,54824,3633],{"class":114},[36,54826,54827],{"class":53}," arr[j ",[36,54829,121],{"class":114},[36,54831,733],{"class":49},[36,54833,54834],{"class":53},"]) {\n",[36,54836,54837],{"class":38,"line":4191},[36,54838,54839],{"class":42},"          \u002F\u002F 交换两个变量\n",[36,54841,54842,54845,54848,54850],{"class":38,"line":4212},[36,54843,54844],{"class":114},"          let",[36,54846,54847],{"class":53}," tmp ",[36,54849,115],{"class":114},[36,54851,54852],{"class":53}," arr[j]\n",[36,54854,54855,54858,54860,54862,54864,54866],{"class":38,"line":4217},[36,54856,54857],{"class":53},"          arr[j] ",[36,54859,115],{"class":114},[36,54861,54827],{"class":53},[36,54863,121],{"class":114},[36,54865,733],{"class":49},[36,54867,35748],{"class":53},[36,54869,54870,54873,54875,54877,54879,54881],{"class":38,"line":4231},[36,54871,54872],{"class":53},"          arr[j ",[36,54874,121],{"class":114},[36,54876,733],{"class":49},[36,54878,6974],{"class":53},[36,54880,115],{"class":114},[36,54882,54883],{"class":53}," tmp\n",[36,54885,54886],{"class":38,"line":4236},[36,54887,5061],{"class":53},[36,54889,54890],{"class":38,"line":4264},[36,54891,54892],{"class":53},"      }\n",[36,54894,54895],{"class":38,"line":4269},[36,54896,4721],{"class":53},[36,54898,54899,54902,54904],{"class":38,"line":4286},[36,54900,54901],{"class":53},"    document.",[36,54903,54422],{"class":4500},[36,54905,54906],{"class":53},"(arr)\n",[36,54908,54909,54912,54914],{"class":38,"line":4291},[36,54910,54911],{"class":53},"  \u003C\u002F",[36,54913,54307],{"class":53794},[36,54915,53801],{"class":53},[36,54917,54918,54920,54922],{"class":38,"line":4296},[36,54919,54279],{"class":53},[36,54921,54294],{"class":53794},[36,54923,53801],{"class":53},[36,54925,54926],{"class":38,"line":4301},[36,54927,546],{"emptyLinePlaceholder":545},[36,54929,54930,54932,54934],{"class":38,"line":4315},[36,54931,54279],{"class":53},[36,54933,53131],{"class":53794},[36,54935,53801],{"class":53},[19,54937,54938],{},[4000,54939],{"alt":31,"src":54940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54942,54943],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54945,54946],{},"let arr = [4, 2, 5, 1, 3]",[19,54948,54949],{},"\u002F\u002F 1.升序排列写法",[19,54951,54952],{},"arr.sort(function (a, b) {",[19,54954,54955],{},"return a - b",[19,54957,54958],{},"})",[19,54960,54961],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54963,54964],{},"\u002F\u002F 降序排列写法",[19,54966,54952],{},[19,54968,54969],{},"return b - a",[19,54971,54958],{},[19,54973,54974],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54976,54978],{"id":54977},"_29-函数","2.9 函数",[19,54980,54981],{},[4000,54982],{"alt":31,"src":54983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54985,54986],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54988,54989],{},"函数的声明用function",[19,54991,54992],{},"函数里边可以嵌套函数",[997,54994,54996],{"id":54995},"_291-函数传参","2.9.1 函数传参",[19,54998,54999],{},[4000,55000],{"alt":31,"src":55001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,55003,55004],{},[4000,55005],{"alt":31,"src":55006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3680,55008,55009,55012,55015,55018,55021,55024],{},[436,55010,55011],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[436,55013,55014],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[436,55016,55017],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[436,55019,55020],{},"开发中尽量保持形参和实参个数一致",[436,55022,55023],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[436,55025,55026],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,55028,55029],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[997,55031,55033],{"id":55032},"_292-函数的返回值","2.9.2 函数的返回值",[19,55035,55036],{},[4000,55037],{"alt":31,"src":55038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,55040,55041],{},[4000,55042],{"alt":31,"src":55043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3680,55045,55046,55049,55052,55055,55058],{},[436,55047,55048],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[436,55050,55051],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[436,55053,55054],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[436,55056,55057],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[436,55059,55060],{},"断点调试:进入函数内部看执行过程F11",[997,55062,55064],{"id":55063},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,55066,55068],{"className":53129,"code":55067,"language":53131,"meta":31,"style":31},"    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",[33,55069,55070,55075,55080,55084,55089],{"__ignoreMap":31},[36,55071,55072],{"class":38,"line":39},[36,55073,55074],{"class":53},"    function fn(a, b) {\n",[36,55076,55077],{"class":38,"line":46},[36,55078,55079],{"class":53},"      console.log(a + b);\n",[36,55081,55082],{"class":38,"line":82},[36,55083,4721],{"class":53},[36,55085,55086],{"class":38,"line":88},[36,55087,55088],{"class":53},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,55090,55091],{"class":38,"line":195},[36,55092,55093],{"class":53},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[997,55095,55097],{"id":55096},"_294-作用域","2.9.4 作用域",[3680,55099,55100,55106,55111,55114,55117],{},[436,55101,55102,55103],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2839,55104,55105],{},"作用域",[436,55107,55108],{},[2839,55109,55110],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[436,55112,55113],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[436,55115,55116],{},"函数内部可以直接所使用全局变量",[436,55118,55119],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,55121,17155],{},[26,55123,55125],{"className":53129,"code":55124,"language":53131,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,55126,55127,55132,55137,55141,55146,55151,55156],{"__ignoreMap":31},[36,55128,55129],{"class":38,"line":39},[36,55130,55131],{"class":53},"    function fun() {\n",[36,55133,55134],{"class":38,"line":46},[36,55135,55136],{"class":53},"      num = 10\n",[36,55138,55139],{"class":38,"line":82},[36,55140,4721],{"class":53},[36,55142,55143],{"class":38,"line":88},[36,55144,55145],{"class":53},"    fun()\n",[36,55147,55148],{"class":38,"line":195},[36,55149,55150],{"class":53},"    console.log(num)\n",[36,55152,55153],{"class":38,"line":1517},[36,55154,55155],{"class":53},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,55157,55158],{"class":38,"line":2421},[36,55159,55160],{"class":53},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3680,55162,55163,55166],{},[436,55164,55165],{},"函数内部的形参可以看做是局部变量",[436,55167,55168],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55170,55171,55172],{},"变量访问原则： ",[2839,55173,55174],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[997,55176,55178],{"id":55177},"_295-匿名函数","2.9.5 匿名函数",[19,55180,55181],{},"函数可以分为具名函数和匿名函数",[19,55183,55184],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[433,55186,55187],{},[436,55188,55189],{},"函数表达式",[19,55191,55192],{},[4000,55193],{"alt":31,"src":55194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,55196,55197],{},"里边也可以写参数",[19,55199,55200],{},"具名函数调用位置可以随意调整；",[19,55202,55203],{},"匿名函数函数表达式形式只能在声明后才可以使用",[433,55205,55206],{"start":46},[436,55207,55208],{},"立即执行函数",[19,55210,55211],{},[4000,55212],{"alt":31,"src":55213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,55215,55216],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,55218,55219],{},"写法：两个小括号，然后在第一个小括号中写function",[19,55221,55222],{},"(function () {})();",[19,55224,55225],{},"不要落下最后的;",[19,55227,55228],{},"立即执行函数必须要加;",[19,55230,55231],{},"分号写前写后都没问题",[19,55233,55234],{},"写前：",[19,55236,55237],{},"(function() {})()",[19,55239,55240],{},";(function () {})();",[19,55242,55243],{},"写后:",[19,55245,55246],{},"(function() {})();",[19,55248,55222],{},[19,55250,55251],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,55253,55254],{},"还有一种写法：",[19,55256,55257],{},"(function(){}());",[19,55259,55260],{},"或者:",[19,55262,55263],{},"!function(){}();",[19,55265,55266],{},"立即执行函数有时候也是可以加名字的：",[19,55268,55269],{},"(function flexible(window,document) {}(window,document));",[19,55271,55272],{},"省一些调用方法",[997,55274,55276],{"id":55275},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55278,55279],{},[4000,55280],{"alt":31,"src":55281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55283,55284],{},"这样就不用非得给x,y初始化了",[19,55286,55287],{},[4000,55288],{"alt":31,"src":55289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55291,55292],{},"代码执行时先看左边",[19,55294,55295],{},"例如：console.log(false && 3+5)",[19,55297,55298],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55300,55301],{},"&&都是真时，就返回最后一个真值",[19,55303,55304],{},"console.log(11 && 22)",[19,55306,55307],{},"输出22",[19,55309,55310],{},"逻辑与：遇真则真",[19,55312,17155],{},[19,55314,55315],{},"let age=1",[19,55317,55318],{},"console.log(11 || age++)",[19,55320,55321],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55323,55324],{},"console.log(11 || 22)",[19,55326,55327],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55329,55330],{},"||如果都是假的话，就取最后一个假的值了",[997,55332,55334],{"id":55333},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55336,55337],{},"显示转换：",[19,55339,55340,55343,55344],{},[2839,55341,55342],{},"记忆","： ",[2839,55345,55346],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55348,55349],{},"空字符串为假，其他字符串全为真",[19,55351,55352],{},[4000,55353],{"alt":31,"src":55354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55356,55357],{},"隐式转换：",[19,55359,55360],{},[4000,55361],{"alt":31,"src":55362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55364,55365],{},"隐式转换:",[19,55367,55368],{},"null+3=3",[19,55370,55371],{},"undefined+3=NaN",[19,55373,55374],{},"null==undefined 输出true,他两个都当0看",[19,55376,55377],{},"null===undefined 输出false",[19,55379,55380],{},"undefined做任何操作都是NaN",[19,55382,55383],{},"NaN不等于NaN，NaN表示计算错误",[14,55385,55387],{"id":55386},"_210-对象","2.10 对象",[997,55389,55391],{"id":55390},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55393,55394],{},"对象也是一种数据类型，里边的数据是无序的",[19,55396,55397],{},"对象由属性和方法组成",[19,55399,55400],{},[4000,55401],{"alt":31,"src":55402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55404,55405],{},[4000,55406],{"alt":31,"src":55407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55409,55410],{},[4000,55411],{"alt":31,"src":55412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[997,55414,55416],{"id":55415},"_2102-对象属性","2.10.2 对象属性",[19,55418,55419],{},[4000,55420],{"alt":31,"src":55421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[433,55423,55424],{},[436,55425,55426],{},"查询对象",[19,55428,55429],{},"对象名.属性 goods.uname",[19,55431,55432],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55434,55435],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55437,55438],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55440,55441],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[433,55443,55444],{"start":46},[436,55445,55446],{},"重新赋值",[19,55448,55449],{},"对象名.属性=新值",[433,55451,55452],{"start":82},[436,55453,55454],{},"增加新数据",[19,55456,55449],{},[433,55458,55459],{"start":88},[436,55460,55461],{},"删除对象中的属性",[19,55463,55464],{},"delete 对象名.属性",[997,55466,55468],{"id":55467},"_2103-对象方法","2.10.3 对象方法",[19,55470,55471],{},[4000,55472],{"alt":31,"src":55473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55475,55476],{},"后边跟的是匿名函数",[19,55478,55479],{},"对象外面的叫函数；对象内部的叫方法",[19,55481,55482],{},[4000,55483],{"alt":31,"src":55484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[997,55486,55488],{"id":55487},"_2104-遍历对象","2.10.4 遍历对象",[19,55490,55491],{},"理解为加括号的python字典遍历",[19,55493,55494],{},[4000,55495],{"alt":31,"src":55496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55498,55499],{},"k是字符串类型",[19,55501,55502],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,55504,55506],{"className":53129,"code":55505,"language":53131,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,55507,55508,55513,55518,55523,55528],{"__ignoreMap":31},[36,55509,55510],{"class":38,"line":39},[36,55511,55512],{"class":53},"   let arr = [1, 2, 3]\n",[36,55514,55515],{"class":38,"line":46},[36,55516,55517],{"class":53},"    for (let k in arr) {\n",[36,55519,55520],{"class":38,"line":82},[36,55521,55522],{"class":53},"      console.log(k)\n",[36,55524,55525],{"class":38,"line":88},[36,55526,55527],{"class":53},"      console.log(arr[k])\n",[36,55529,55530],{"class":38,"line":195},[36,55531,4721],{"class":53},[19,55533,55534],{},[4000,55535],{"alt":31,"src":55536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55538,55539],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55541,55542],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55544,55545],{},"for in 得到的k是属性名",[54307,55547,55548],{},"\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,55550,55551],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[997,55553,55555],{"id":55554},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55557,55558],{},"数组中放对象信息",[26,55560,55564],{"className":55561,"code":55562,"language":55563,"meta":31,"style":31},"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",[33,55565,55566,55574,55579,55584,55589,55594,55599,55604,55609,55614,55619,55624,55629,55633,55637],{"__ignoreMap":31},[36,55567,55568,55570,55572],{"class":38,"line":39},[36,55569,1507],{"class":53},[36,55571,54307],{"class":53794},[36,55573,53801],{"class":53},[36,55575,55576],{"class":38,"line":46},[36,55577,55578],{"class":53},"    let students = [\n",[36,55580,55581],{"class":38,"line":82},[36,55582,55583],{"class":53},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,55585,55586],{"class":38,"line":88},[36,55587,55588],{"class":53},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,55590,55591],{"class":38,"line":195},[36,55592,55593],{"class":53},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,55595,55596],{"class":38,"line":1517},[36,55597,55598],{"class":53},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,55600,55601],{"class":38,"line":2421},[36,55602,55603],{"class":53},"    ]\n",[36,55605,55606],{"class":38,"line":2446},[36,55607,55608],{"class":53},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,55610,55611],{"class":38,"line":2469},[36,55612,55613],{"class":53},"      for (let k in students[i]) {\n",[36,55615,55616],{"class":38,"line":2492},[36,55617,55618],{"class":53},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,55620,55621],{"class":38,"line":4150},[36,55622,55623],{"class":53},"        \u002F\u002F输出每个人的名字：\n",[36,55625,55626],{"class":38,"line":4155},[36,55627,55628],{"class":53},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,55630,55631],{"class":38,"line":4161},[36,55632,54892],{"class":53},[36,55634,55635],{"class":38,"line":4166},[36,55636,4721],{"class":53},[36,55638,55639,55641,55643],{"class":38,"line":4180},[36,55640,54911],{"class":53},[36,55642,54307],{"class":53794},[36,55644,53801],{"class":53},[997,55646,55648],{"id":55647},"_2106-内置对象","2.10.6 内置对象",[19,55650,55651],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[433,55653,55654],{},[436,55655,55656],{},"数学对象Math",[19,55658,55659],{},[4000,55660],{"alt":31,"src":55661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55663,55664],{},[2923,55665,55668],{"href":55666,"rel":55667},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26381],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55670,55671],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55673,55674],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55676,55677],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55679,55680],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55682,55683],{},"null属于对象数据类型",[433,55685,55686],{"start":46},[436,55687,55688],{},"生成任意范围随机数",[19,55690,55691],{},[4000,55692],{"alt":31,"src":55693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55695,55696],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55698,55699],{},"乘以几就取不到几",[19,55701,55702],{},"取数组中的随机元素：",[19,55704,55705],{},"let arr = ['red', 'green', 'blue']",[19,55707,55708],{},"let random = Math.floor(Math.random() * arr.length)",[19,55710,55711],{},"console.log(arr[random])",[19,55713,55714],{},"这个函数得到的是全闭区间",[19,55716,55717],{},"function getRandom(N, M) {",[19,55719,55720],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55722,2070],{},[19,55724,55725],{},"console.log(getRandom(4, 8))",[997,55727,55729],{"id":55728},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55731,55732],{},[4000,55733],{"alt":31,"src":55734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55736,55737],{},[4000,55738],{"alt":31,"src":55739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55741,55742],{},[4000,55743],{"alt":31,"src":55744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55746,55747],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55749,55750],{},[4000,55751],{"alt":31,"src":55752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55754,55755],{},[4000,55756],{"alt":31,"src":55757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55759,55760],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55762,55763],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55765,55766],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2602,55768,55769],{},"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":31,"searchDepth":46,"depth":46,"links":55771},[55772,55780,55781,55782,55783,55784,55791,55795,55801,55810],{"id":52964,"depth":46,"text":52965,"children":55773},[55774,55775,55776,55777,55778,55779],{"id":52968,"depth":82,"text":52969},{"id":52985,"depth":82,"text":52986},{"id":53025,"depth":82,"text":53026},{"id":53037,"depth":82,"text":53038},{"id":53046,"depth":82,"text":53047},{"id":53094,"depth":82,"text":53095},{"id":53104,"depth":46,"text":53105},{"id":53192,"depth":46,"text":53193},{"id":53215,"depth":46,"text":53216},{"id":596,"depth":46,"text":597},{"id":53412,"depth":46,"text":53413,"children":55785},[55786,55787,55788,55789,55790],{"id":53416,"depth":82,"text":53417},{"id":53425,"depth":82,"text":53426},{"id":53453,"depth":82,"text":53454},{"id":53489,"depth":82,"text":53490},{"id":53514,"depth":82,"text":53515},{"id":53526,"depth":46,"text":53527,"children":55792},[55793,55794],{"id":53547,"depth":82,"text":53548},{"id":53641,"depth":82,"text":53642},{"id":53699,"depth":46,"text":53700,"children":55796},[55797,55798,55799,55800],{"id":53703,"depth":82,"text":53704},{"id":53727,"depth":82,"text":53728},{"id":53780,"depth":82,"text":53781},{"id":54591,"depth":82,"text":54592},{"id":54977,"depth":46,"text":54978,"children":55802},[55803,55804,55805,55806,55807,55808,55809],{"id":54995,"depth":82,"text":54996},{"id":55032,"depth":82,"text":55033},{"id":55063,"depth":82,"text":55064},{"id":55096,"depth":82,"text":55097},{"id":55177,"depth":82,"text":55178},{"id":55275,"depth":82,"text":55276},{"id":55333,"depth":82,"text":55334},{"id":55386,"depth":46,"text":55387,"children":55811},[55812,55813,55814,55815,55816,55817,55818],{"id":55390,"depth":82,"text":55391},{"id":55415,"depth":82,"text":55416},{"id":55467,"depth":82,"text":55468},{"id":55487,"depth":82,"text":55488},{"id":55554,"depth":82,"text":55555},{"id":55647,"depth":82,"text":55648},{"id":55728,"depth":82,"text":55729},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52956,"description":2630},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55825,"title":55826,"body":55827,"description":2630,"extension":2631,"meta":79158,"navigation":545,"path":79159,"seo":79160,"stem":79161,"__hash__":79162},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55828,"toc":79098},[55829,55832,55835,55838,55843,55846,55849,55852,55856,55860,55866,55871,55879,55886,55889,55893,55898,55903,55908,55911,55914,55925,55928,55932,55935,55938,55943,55948,55953,55956,55959,56051,56054,56059,56062,56067,56070,56073,56078,56081,56086,56090,56093,56107,56111,56116,56119,56122,56126,56131,56134,56138,56142,56147,56151,56156,56159,56162,56165,56168,56171,56174,56179,56184,56212,56215,56218,56221,56226,56229,56232,56235,56238,56242,56271,56275,56280,56285,56288,56291,56294,56299,56413,56418,56423,56584,56589,56592,56596,56601,56606,56609,56612,56615,56618,56621,56624,56627,56630,56633,56636,56639,56642,56645,56648,56650,56653,56656,56659,56664,56668,57063,57066,57072,57076,57081,58362,58367,58370,58373,58376,58381,59577,59581,59587,59592,59595,59600,59605,59609,59613,59618,59621,59626,59629,59632,59636,60544,60547,60551,60772,60775,60778,60781,61006,61009,61233,61236,61240,61245,61248,61251,61479,61482,61515,61518,61522,61527,61531,61534,61537,61540,61543,61546,61549,61552,61557,62837,62841,62844,63936,63940,63943,63946,63949,63952,63956,63959,63962,63964,63972,65453,65457,65460,65463,65466,65675,65678,65682,65686,65691,65696,65699,65702,65707,65711,65716,65719,65828,65832,65837,65842,65845,65848,65852,65857,65862,65867,65870,65873,65884,65887,65892,65897,65900,65903,65976,65980,65985,65988,65990,66001,66005,66010,67336,67339,67342,67345,67347,67350,67353,67356,67359,67362,67365,67368,67371,67374,67377,67380,67383,67385,67387,67390,67394,68488,68491,68494,68509,68523,68526,68531,68537,68542,68546,68550,68555,68559,68564,69006,69011,69014,69018,69023,69026,69029,69033,69038,69042,69047,69052,69056,69061,69066,69069,69074,69079,69083,69088,69093,69197,69200,69204,69209,69575,69578,69581,69584,69587,69590,69593,69596,69599,70895,70899,70904,70909,70912,70915,70918,70921,70923,70928,70933,70936,70940,70945,70950,70955,70958,70961,70964,70967,70970,70975,70978,70982,70987,70992,70996,71001,71004,71009,71012,71015,71018,71021,71024,71029,71032,71035,71038,71041,71045,71050,71053,71057,71062,71065,71068,71072,71101,71104,71108,71112,71117,71121,71126,71129,71132,71135,71138,71141,71144,71147,71150,71153,71156,71159,71162,71165,71168,71172,71177,71182,71185,71189,71193,71198,71201,71205,71208,71211,71216,71221,71226,71231,71236,71239,71242,71247,71252,71256,71261,71264,71269,71272,71275,71278,71281,71286,71289,71298,71302,71307,71310,71313,71317,71320,71325,71329,71332,71338,71344,71348,71374,71377,72937,72940,73436,73439,73444,73449,73454,73458,73463,73468,73473,73477,73482,73485,73488,73491,73494,73498,73501,73506,73509,73514,73518,73523,73526,73531,73536,73541,73544,73547,73552,73557,73560,73563,73567,73570,73575,73578,73583,73586,73591,73596,73601,73604,73609,73674,73677,73688,73692,73697,73869,73873,73878,73881,73884,73887,73891,73902,73906,73909,73914,73919,73922,73925,73928,73931,73934,73936,73939,73942,73945,73950,73953,73958,73961,73965,73968,73971,73985,73989,73992,74047,74052,74055,74058,74063,74066,74070,74075,74205,74209,74214,74219,74300,74305,74309,74312,74317,74322,74328,74331,74334,74337,74341,74346,74349,74360,74364,74381,77427,77431,77434,77437,77440,77461,77465,77468,77476,77479,77484,77487,77490,77495,77500,77504,77525,77529,77534,77537,77540,77543,77546,77550,77555,77558,77562,77567,77570,77575,77578,77583,77586,77591,78794,78798,78803,78806,78811,79095],[10,55830,55826],{"id":55831},"_3web-apis",[19,55833,55834],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55836,55837],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55839,55840],{},[4000,55841],{"alt":31,"src":55842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55844,55845],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55847,55848],{},"建议数组和对象使用 const 来声明",[19,55850,55851],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55853,55855],{"id":55854},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[997,55857,55859],{"id":55858},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55861,55862,55865],{},[33,55863,55864],{},"document"," = HTML 文件解析后的对象化表示；",[19,55867,55868,55870],{},[33,55869,55864],{}," ≠ HTML 文件本身",[19,55872,55873,55878],{},[2839,55874,55875],{},[33,55876,55877],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55880,55881,55885],{},[2839,55882,55883],{},[33,55884,55864],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55887,55888],{},"document实际上为window.document的简写",[997,55890,55892],{"id":55891},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55894,55895],{},[4000,55896],{"alt":31,"src":55897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55899,55900],{},[4000,55901],{"alt":31,"src":55902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55904,55905],{},[4000,55906],{"alt":31,"src":55907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55909,55910],{},"console.dir()",[19,55912,55913],{},"dir用来打印对象",[3680,55915,55916,55919,55922],{},[436,55917,55918],{},"任何一个标签，都是一个对象",[436,55920,55921],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[436,55923,55924],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55926,55927],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[997,55929,55931],{"id":55930},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55933,55934],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55936,55937],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55939,55940],{},[2839,55941,55942],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[433,55944,55945],{},[436,55946,55947],{},"利用CSS选择器来获取标签元素",[19,55949,55950],{},[4000,55951],{"alt":31,"src":55952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55954,55955],{},"里边的选择器必须必须加引号！！！",[19,55957,55958],{},"只选择第一个元素",[26,55960,55962],{"className":55561,"code":55961,"language":55563,"meta":31,"style":31},"\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",[33,55963,55964,55972,55993,56012,56020,56025,56030,56035,56043],{"__ignoreMap":31},[36,55965,55966,55968,55970],{"class":38,"line":39},[36,55967,1507],{"class":53},[36,55969,54294],{"class":53794},[36,55971,53801],{"class":53},[36,55973,55974,55976,55978,55981,55983,55986,55989,55991],{"class":38,"line":46},[36,55975,54638],{"class":53},[36,55977,54105],{"class":53794},[36,55979,55980],{"class":4500}," class",[36,55982,115],{"class":53},[36,55984,55985],{"class":57},"\"box\"",[36,55987,55988],{"class":53},">123\u003C\u002F",[36,55990,54105],{"class":53794},[36,55992,53801],{"class":53},[36,55994,55995,55997,55999,56001,56003,56005,56008,56010],{"class":38,"line":82},[36,55996,54638],{"class":53},[36,55998,54105],{"class":53794},[36,56000,55980],{"class":4500},[36,56002,115],{"class":53},[36,56004,55985],{"class":57},[36,56006,56007],{"class":53},">456\u003C\u002F",[36,56009,54105],{"class":53794},[36,56011,53801],{"class":53},[36,56013,56014,56016,56018],{"class":38,"line":88},[36,56015,54638],{"class":53},[36,56017,54307],{"class":53794},[36,56019,53801],{"class":53},[36,56021,56022],{"class":38,"line":195},[36,56023,56024],{"class":53},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,56026,56027],{"class":38,"line":1517},[36,56028,56029],{"class":53},"    const box = document.querySelector('div')\n",[36,56031,56032],{"class":38,"line":2421},[36,56033,56034],{"class":53},"    console.dir(box)\n",[36,56036,56037,56039,56041],{"class":38,"line":2446},[36,56038,54911],{"class":53},[36,56040,54307],{"class":53794},[36,56042,53801],{"class":53},[36,56044,56045,56047,56049],{"class":38,"line":2469},[36,56046,54279],{"class":53},[36,56048,54294],{"class":53794},[36,56050,53801],{"class":53},[19,56052,56053],{},"只选123，不选456",[19,56055,56056],{},[4000,56057],{"alt":31,"src":56058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,56060,56061],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,56063,56064],{},[4000,56065],{"alt":31,"src":56066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,56068,56069],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,56071,56072],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[433,56074,56075],{"start":46},[436,56076,56077],{},"其他方法来获取标签元素",[19,56079,56080],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,56082,56083],{},[4000,56084],{"alt":31,"src":56085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[997,56087,56089],{"id":56088},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56091,56092],{},"设置修改DOM元素内容有两种方式：",[3680,56094,56095,56098,56101,56104],{},[436,56096,56097],{},"元素.innerText=''",[436,56099,56100],{},"元素.innerHTML=''",[436,56102,56103],{},"不写字符串输出数字也是可以的",[436,56105,56106],{},"元素.innerHtml=1",[24515,56108,56110],{"id":56109},"_3131-innertext","3.1.3.1 innerText",[19,56112,56113],{},[4000,56114],{"alt":31,"src":56115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,56117,56118],{},"思路：实现了修改盒子中的内容！",[19,56120,56121],{},"它只显示纯文本，不解析标签",[24515,56123,56125],{"id":56124},"_3132-innerhtml","3.1.3.2 innerHTML",[19,56127,56128],{},[4000,56129],{"alt":31,"src":56130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,56132,56133],{},"相比于innerText，他的强大之处在于可以解析标签",[997,56135,56137],{"id":56136},"_314-操作元素属性","3.1.4 操作元素属性",[24515,56139,56141],{"id":56140},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,56143,56144],{},[4000,56145],{"alt":31,"src":56146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24515,56148,56150],{"id":56149},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56152,56153],{},[4000,56154],{"alt":31,"src":56155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56157,56158],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56160,56161],{},"div.style.backgroundColor = 'hotpink'",[19,56163,56164],{},"如果按照css的写法，-表示减，就会出错",[19,56166,56167],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56169,56170],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56172,56173],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56175,56176],{},[4000,56177],{"alt":31,"src":56178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56180,56181],{},[4000,56182],{"alt":31,"src":56183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[433,56185,56186,56189,56192,56195,56198,56201],{},[436,56187,56188],{},"className这个方式就是修改很多样式的时候来使用的！",[436,56190,56191],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[436,56193,56194],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[436,56196,56197],{},"className为属性名，如果还用class的话就导致与关键字冲突",[436,56199,56200],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[436,56202,56203,56204,56209],{},"解析标签的时候就变为了",[54105,56205],{"className":56206},[56207,56208],"nav","box",[56210,56211],"br",{},[19,56213,56214],{},"例子：",[54105,56216],{"className":56217},[56207],[54307,56219,56220],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,56222,56223],{},[4000,56224],{"alt":31,"src":56225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,56227,56228],{},"追加和删除类名用classList",[19,56230,56231],{},"常用于类似于开关的操作",[19,56233,56234],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,56236,56237],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24515,56239,56241],{"id":56240},"_3143-牢记点","3.1.4.3 牢记点",[433,56243,56244,56247,56250,56253,56256,56259,56262,56265,56268],{},[436,56245,56246],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[436,56248,56249],{},"使用style属性操作css时不要忘记引号",[436,56251,56252],{},"使用className或者classList时也不要忘记引号",[436,56254,56255],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[436,56257,56258],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[436,56260,56261],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[436,56263,56264],{},"若： let arr=['1','2',3] arr[0]=1",[436,56266,56267],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[436,56269,56270],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[997,56272,56274],{"id":56273},"_315-操作表单元素","3.1.5 操作表单元素",[433,56276,56277],{},[436,56278,56279],{},"天生的属性",[19,56281,56282],{},[4000,56283],{"alt":31,"src":56284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56286,56287],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56289,56290],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56292,56293],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56295,56296],{},[4000,56297],{"alt":31,"src":56298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,56300,56302],{"className":53129,"code":56301,"language":53131,"meta":31,"style":31},"在复选框中如果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",[33,56303,56304,56309,56340,56345,56350,56355,56360,56364,56369,56374,56391,56403,56408],{"__ignoreMap":31},[36,56305,56306],{"class":38,"line":39},[36,56307,56308],{"class":53},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,56310,56311,56313,56315,56318,56320,56323,56325,56327,56329,56331,56333,56335,56338],{"class":38,"line":46},[36,56312,1507],{"class":53},[36,56314,913],{"class":53794},[36,56316,56317],{"class":4500}," type",[36,56319,115],{"class":53},[36,56321,56322],{"class":57},"\"checkbox\"",[36,56324,17440],{"class":4500},[36,56326,115],{"class":53},[36,56328,10179],{"class":57},[36,56330,17479],{"class":4500},[36,56332,115],{"class":53},[36,56334,10179],{"class":57},[36,56336,56337],{"class":4500}," checked",[36,56339,53801],{"class":53},[36,56341,56342],{"class":38,"line":82},[36,56343,56344],{"class":53},"不选的话：\n",[36,56346,56347],{"class":38,"line":88},[36,56348,56349],{"class":53},"const input = document.querySelector('input')\n",[36,56351,56352],{"class":38,"line":195},[36,56353,56354],{"class":53},"input.checked=false\n",[36,56356,56357],{"class":38,"line":1517},[36,56358,56359],{"class":53},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,56361,56362],{"class":38,"line":2421},[36,56363,546],{"emptyLinePlaceholder":545},[36,56365,56366],{"class":38,"line":2446},[36,56367,56368],{"class":53},"禁用按钮：\n",[36,56370,56371],{"class":38,"line":2469},[36,56372,56373],{"class":53},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,56375,56376,56378,56381,56384,56387,56389],{"class":38,"line":2492},[36,56377,1507],{"class":53},[36,56379,56380],{"class":53794},"button",[36,56382,56383],{"class":4500}," disabled",[36,56385,56386],{"class":53},">点击\u003C\u002F",[36,56388,56380],{"class":53794},[36,56390,53801],{"class":53},[36,56392,56393,56395,56397,56399,56401],{"class":38,"line":4150},[36,56394,1507],{"class":53},[36,56396,56380],{"class":53794},[36,56398,56386],{"class":53},[36,56400,56380],{"class":53794},[36,56402,53801],{"class":53},[36,56404,56405],{"class":38,"line":4155},[36,56406,56407],{"class":53},"const bt = document.querySelector('button')\n",[36,56409,56410],{"class":38,"line":4161},[36,56411,56412],{"class":53},"bt.disabled = false\n",[433,56414,56415],{"start":46},[436,56416,56417],{},"自定义属性",[19,56419,56420],{},[4000,56421],{"alt":31,"src":56422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,56424,56426],{"className":55561,"code":56425,"language":55563,"meta":31,"style":31},"\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",[33,56427,56428,56436,56464,56483,56502,56521,56540,56548,56553,56558,56563,56568,56576],{"__ignoreMap":31},[36,56429,56430,56432,56434],{"class":38,"line":39},[36,56431,1507],{"class":53},[36,56433,54294],{"class":53794},[36,56435,53801],{"class":53},[36,56437,56438,56440,56442,56445,56447,56449,56452,56454,56457,56460,56462],{"class":38,"line":46},[36,56439,54638],{"class":53},[36,56441,54105],{"class":53794},[36,56443,56444],{"class":4500}," data-id",[36,56446,115],{"class":53},[36,56448,6209],{"class":57},[36,56450,56451],{"class":4500}," data-spm",[36,56453,115],{"class":53},[36,56455,56456],{"class":57},"\"我不知道\"",[36,56458,56459],{"class":53},">1\u003C\u002F",[36,56461,54105],{"class":53794},[36,56463,53801],{"class":53},[36,56465,56466,56468,56470,56472,56474,56476,56479,56481],{"class":38,"line":82},[36,56467,54638],{"class":53},[36,56469,54105],{"class":53794},[36,56471,56444],{"class":4500},[36,56473,115],{"class":53},[36,56475,6232],{"class":57},[36,56477,56478],{"class":53},">2\u003C\u002F",[36,56480,54105],{"class":53794},[36,56482,53801],{"class":53},[36,56484,56485,56487,56489,56491,56493,56495,56498,56500],{"class":38,"line":88},[36,56486,54638],{"class":53},[36,56488,54105],{"class":53794},[36,56490,56444],{"class":4500},[36,56492,115],{"class":53},[36,56494,6245],{"class":57},[36,56496,56497],{"class":53},">3\u003C\u002F",[36,56499,54105],{"class":53794},[36,56501,53801],{"class":53},[36,56503,56504,56506,56508,56510,56512,56514,56517,56519],{"class":38,"line":195},[36,56505,54638],{"class":53},[36,56507,54105],{"class":53794},[36,56509,56444],{"class":4500},[36,56511,115],{"class":53},[36,56513,6258],{"class":57},[36,56515,56516],{"class":53},">4\u003C\u002F",[36,56518,54105],{"class":53794},[36,56520,53801],{"class":53},[36,56522,56523,56525,56527,56529,56531,56533,56536,56538],{"class":38,"line":1517},[36,56524,54638],{"class":53},[36,56526,54105],{"class":53794},[36,56528,56444],{"class":4500},[36,56530,115],{"class":53},[36,56532,6279],{"class":57},[36,56534,56535],{"class":53},">5\u003C\u002F",[36,56537,54105],{"class":53794},[36,56539,53801],{"class":53},[36,56541,56542,56544,56546],{"class":38,"line":2421},[36,56543,54638],{"class":53},[36,56545,54307],{"class":53794},[36,56547,53801],{"class":53},[36,56549,56550],{"class":38,"line":2446},[36,56551,56552],{"class":53},"    const one = document.querySelector('div')\n",[36,56554,56555],{"class":38,"line":2469},[36,56556,56557],{"class":53},"    console.log(one.dataset)\n",[36,56559,56560],{"class":38,"line":2492},[36,56561,56562],{"class":53},"    console.log(one.dataset.id)\n",[36,56564,56565],{"class":38,"line":4150},[36,56566,56567],{"class":53},"    console.log(one.dataset.spm)\n",[36,56569,56570,56572,56574],{"class":38,"line":4155},[36,56571,54911],{"class":53},[36,56573,54307],{"class":53794},[36,56575,53801],{"class":53},[36,56577,56578,56580,56582],{"class":38,"line":4161},[36,56579,54279],{"class":53},[36,56581,54294],{"class":53794},[36,56583,53801],{"class":53},[19,56585,56586],{},[4000,56587],{"alt":31,"src":56588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56590,56591],{},"document.querySelector选择的是第一个对象（元素）",[997,56593,56595],{"id":56594},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56597,56598],{},[4000,56599],{"alt":31,"src":56600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56602,56603],{},[4000,56604],{"alt":31,"src":56605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56607,56608],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54307,56610,56611],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56613,56614],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54307,56616,56617],{},"\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,56619,56620],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56622,56623],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56625,56626],{},"单位为毫秒！！！",[19,56628,56629],{},"可以搭配匿名函数来用！！！",[19,56631,56632],{},"setInterval(function () {",[19,56634,56635],{},"alert('两秒执行一次')",[19,56637,56638],{},"}, 2000)",[19,56640,56641],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56643,56644],{},"function fn() {",[19,56646,56647],{},"document.write(1)",[19,56649,2070],{},[19,56651,56652],{},"setInterval(fn, 1000)",[19,56654,56655],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56657,56658],{},"setInterval('fn()', 1000)",[19,56660,56661],{},[4000,56662],{"alt":31,"src":56663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24515,56665,56667],{"id":56666},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,56669,56671],{"className":53129,"code":56670,"language":53131,"meta":31,"style":31},"\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",[33,56672,56673,56683,56697,56701,56709,56723,56743,56755,56763,56767,56775,56811,56816,56821,56826,56834,56842,56864,56872,56877,56899,56904,56909,56919,56924,56944,56952,56967,56982,56993,56998,57008,57018,57022,57031,57035,57043,57051,57055],{"__ignoreMap":31},[36,56674,56675,56677,56679,56681],{"class":38,"line":39},[36,56676,53791],{"class":53},[36,56678,53795],{"class":53794},[36,56680,53798],{"class":4500},[36,56682,53801],{"class":53},[36,56684,56685,56687,56689,56691,56693,56695],{"class":38,"line":46},[36,56686,1507],{"class":53},[36,56688,53131],{"class":53794},[36,56690,53810],{"class":4500},[36,56692,115],{"class":53},[36,56694,53815],{"class":57},[36,56696,53801],{"class":53},[36,56698,56699],{"class":38,"line":82},[36,56700,546],{"emptyLinePlaceholder":545},[36,56702,56703,56705,56707],{"class":38,"line":88},[36,56704,1507],{"class":53},[36,56706,53828],{"class":53794},[36,56708,53801],{"class":53},[36,56710,56711,56713,56715,56717,56719,56721],{"class":38,"line":195},[36,56712,54638],{"class":53},[36,56714,53838],{"class":53794},[36,56716,53841],{"class":4500},[36,56718,115],{"class":53},[36,56720,53846],{"class":57},[36,56722,53801],{"class":53},[36,56724,56725,56727,56729,56731,56733,56735,56737,56739,56741],{"class":38,"line":1517},[36,56726,54638],{"class":53},[36,56728,53838],{"class":53794},[36,56730,17440],{"class":4500},[36,56732,115],{"class":53},[36,56734,53885],{"class":57},[36,56736,53865],{"class":4500},[36,56738,115],{"class":53},[36,56740,53892],{"class":57},[36,56742,53801],{"class":53},[36,56744,56745,56747,56749,56751,56753],{"class":38,"line":2421},[36,56746,54638],{"class":53},[36,56748,53901],{"class":53794},[36,56750,53904],{"class":53},[36,56752,53901],{"class":53794},[36,56754,53801],{"class":53},[36,56756,56757,56759,56761],{"class":38,"line":2446},[36,56758,54279],{"class":53},[36,56760,53828],{"class":53794},[36,56762,53801],{"class":53},[36,56764,56765],{"class":38,"line":2469},[36,56766,546],{"emptyLinePlaceholder":545},[36,56768,56769,56771,56773],{"class":38,"line":2492},[36,56770,1507],{"class":53},[36,56772,54294],{"class":53794},[36,56774,53801],{"class":53},[36,56776,56777,56779,56782,56784,56786,56788,56790,56792,56794,56797,56799,56802,56805,56807,56809],{"class":38,"line":4150},[36,56778,54638],{"class":53},[36,56780,56781],{"class":53794},"textarea",[36,56783,17440],{"class":4500},[36,56785,115],{"class":53},[36,56787,10179],{"class":57},[36,56789,17479],{"class":4500},[36,56791,115],{"class":53},[36,56793,10179],{"class":57},[36,56795,56796],{"class":4500}," cols",[36,56798,115],{"class":53},[36,56800,56801],{"class":57},"\"30\"",[36,56803,56804],{"class":4500}," rows",[36,56806,115],{"class":53},[36,56808,778],{"class":57},[36,56810,53801],{"class":53},[36,56812,56813],{"class":38,"line":4155},[36,56814,56815],{"class":53},"        用户注册协议\n",[36,56817,56818],{"class":38,"line":4161},[36,56819,56820],{"class":53},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,56822,56823],{"class":38,"line":4166},[36,56824,56825],{"class":53},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,56827,56828,56830,56832],{"class":38,"line":4180},[36,56829,54270],{"class":53},[36,56831,56781],{"class":53794},[36,56833,53801],{"class":53},[36,56835,56836,56838,56840],{"class":38,"line":4185},[36,56837,54638],{"class":53},[36,56839,56210],{"class":53794},[36,56841,53801],{"class":53},[36,56843,56844,56846,56848,56850,56852,56855,56857,56860,56862],{"class":38,"line":4191},[36,56845,54638],{"class":53},[36,56847,56380],{"class":53794},[36,56849,55980],{"class":4500},[36,56851,115],{"class":53},[36,56853,56854],{"class":57},"\"btn\"",[36,56856,56383],{"class":4500},[36,56858,56859],{"class":53},">我已经阅读用户协议(5)\u003C\u002F",[36,56861,56380],{"class":53794},[36,56863,53801],{"class":53},[36,56865,56866,56868,56870],{"class":38,"line":4212},[36,56867,54638],{"class":53},[36,56869,54307],{"class":53794},[36,56871,53801],{"class":53},[36,56873,56874],{"class":38,"line":4217},[36,56875,56876],{"class":42},"    \u002F\u002F 1. 获取元素\n",[36,56878,56879,56881,56884,56886,56889,56892,56894,56897],{"class":38,"line":4231},[36,56880,13744],{"class":114},[36,56882,56883],{"class":49}," btn",[36,56885,498],{"class":114},[36,56887,56888],{"class":53}," document.",[36,56890,56891],{"class":4500},"querySelector",[36,56893,54],{"class":53},[36,56895,56896],{"class":57},"'.btn'",[36,56898,61],{"class":53},[36,56900,56901],{"class":38,"line":4236},[36,56902,56903],{"class":42},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,56905,56906],{"class":38,"line":4264},[36,56907,56908],{"class":42},"    \u002F\u002F 2. 倒计时\n",[36,56910,56911,56913,56915,56917],{"class":38,"line":4269},[36,56912,54713],{"class":114},[36,56914,11964],{"class":53},[36,56916,115],{"class":114},[36,56918,1227],{"class":49},[36,56920,56921],{"class":38,"line":4286},[36,56922,56923],{"class":42},"    \u002F\u002F 2.1 开启定时器\n",[36,56925,56926,56928,56931,56933,56936,56938,56941],{"class":38,"line":4291},[36,56927,54713],{"class":114},[36,56929,56930],{"class":53}," n ",[36,56932,115],{"class":114},[36,56934,56935],{"class":4500}," setInterval",[36,56937,54],{"class":53},[36,56939,56940],{"class":114},"function",[36,56942,56943],{"class":53}," () {\n",[36,56945,56946,56949],{"class":38,"line":4296},[36,56947,56948],{"class":53},"      i",[36,56950,56951],{"class":114},"--\n",[36,56953,56954,56957,56959,56962,56964],{"class":38,"line":4301},[36,56955,56956],{"class":53},"      btn.innerHTML ",[36,56958,115],{"class":114},[36,56960,56961],{"class":57}," `我已经阅读用户协议(${",[36,56963,3122],{"class":53},[36,56965,56966],{"class":57},"})`\n",[36,56968,56969,56972,56975,56978,56980],{"class":38,"line":4315},[36,56970,56971],{"class":114},"      if",[36,56973,56974],{"class":53}," (i ",[36,56976,56977],{"class":114},"===",[36,56979,6624],{"class":49},[36,56981,14965],{"class":53},[36,56983,56984,56987,56990],{"class":38,"line":4320},[36,56985,56986],{"class":4500},"        clearInterval",[36,56988,56989],{"class":53},"(n)  ",[36,56991,56992],{"class":42},"\u002F\u002F 关闭定时器\n",[36,56994,56995],{"class":38,"line":5109},[36,56996,56997],{"class":42},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,56999,57000,57003,57005],{"class":38,"line":5123},[36,57001,57002],{"class":53},"        btn.disabled ",[36,57004,115],{"class":114},[36,57006,57007],{"class":49}," false\n",[36,57009,57010,57013,57015],{"class":38,"line":5131},[36,57011,57012],{"class":53},"        btn.innerHTML ",[36,57014,115],{"class":114},[36,57016,57017],{"class":57}," '同意'\n",[36,57019,57020],{"class":38,"line":5136},[36,57021,54892],{"class":53},[36,57023,57024,57027,57029],{"class":38,"line":5142},[36,57025,57026],{"class":53},"    }, ",[36,57028,8937],{"class":49},[36,57030,61],{"class":53},[36,57032,57033],{"class":38,"line":5148},[36,57034,546],{"emptyLinePlaceholder":545},[36,57036,57037,57039,57041],{"class":38,"line":5153},[36,57038,54911],{"class":53},[36,57040,54307],{"class":53794},[36,57042,53801],{"class":53},[36,57044,57045,57047,57049],{"class":38,"line":10475},[36,57046,54279],{"class":53},[36,57048,54294],{"class":53794},[36,57050,53801],{"class":53},[36,57052,57053],{"class":38,"line":10499},[36,57054,546],{"emptyLinePlaceholder":545},[36,57056,57057,57059,57061],{"class":38,"line":10504},[36,57058,54279],{"class":53},[36,57060,53131],{"class":53794},[36,57062,53801],{"class":53},[19,57064,57065],{},"不要一直想着用死循环,避免死循环",[19,57067,57068,57071],{},[33,57069,57070],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24515,57073,57075],{"id":57074},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[433,57077,57078],{},[436,57079,57080],{},"法1",[26,57082,57084],{"className":53129,"code":57083,"language":53131,"meta":31,"style":31},"\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",[33,57085,57086,57096,57110,57114,57122,57136,57156,57168,57176,57182,57193,57204,57208,57212,57219,57231,57235,57239,57246,57258,57272,57285,57299,57303,57307,57314,57325,57336,57347,57359,57371,57383,57387,57391,57399,57409,57422,57434,57447,57451,57455,57462,57472,57484,57496,57507,57518,57528,57540,57552,57556,57560,57569,57581,57593,57621,57634,57638,57642,57649,57660,57664,57672,57680,57684,57692,57706,57721,57745,57753,57768,57781,57789,57810,57822,57834,57846,57858,57870,57882,57894,57903,57911,57919,57927,57939,57962,57981,58000,58019,58038,58057,58076,58096,58100,58120,58139,58159,58180,58190,58207,58217,58227,58237,58242,58247,58252,58257,58282,58295,58299,58322,58326,58334,58342,58350,58354],{"__ignoreMap":31},[36,57087,57088,57090,57092,57094],{"class":38,"line":39},[36,57089,53791],{"class":53},[36,57091,53795],{"class":53794},[36,57093,53798],{"class":4500},[36,57095,53801],{"class":53},[36,57097,57098,57100,57102,57104,57106,57108],{"class":38,"line":46},[36,57099,1507],{"class":53},[36,57101,53131],{"class":53794},[36,57103,53810],{"class":4500},[36,57105,115],{"class":53},[36,57107,53815],{"class":57},[36,57109,53801],{"class":53},[36,57111,57112],{"class":38,"line":82},[36,57113,546],{"emptyLinePlaceholder":545},[36,57115,57116,57118,57120],{"class":38,"line":88},[36,57117,1507],{"class":53},[36,57119,53828],{"class":53794},[36,57121,53801],{"class":53},[36,57123,57124,57126,57128,57130,57132,57134],{"class":38,"line":195},[36,57125,54638],{"class":53},[36,57127,53838],{"class":53794},[36,57129,53841],{"class":4500},[36,57131,115],{"class":53},[36,57133,53846],{"class":57},[36,57135,53801],{"class":53},[36,57137,57138,57140,57142,57144,57146,57148,57150,57152,57154],{"class":38,"line":1517},[36,57139,54638],{"class":53},[36,57141,53838],{"class":53794},[36,57143,17440],{"class":4500},[36,57145,115],{"class":53},[36,57147,53885],{"class":57},[36,57149,53865],{"class":4500},[36,57151,115],{"class":53},[36,57153,53892],{"class":57},[36,57155,53801],{"class":53},[36,57157,57158,57160,57162,57164,57166],{"class":38,"line":2421},[36,57159,54638],{"class":53},[36,57161,53901],{"class":53794},[36,57163,53904],{"class":53},[36,57165,53901],{"class":53794},[36,57167,53801],{"class":53},[36,57169,57170,57172,57174],{"class":38,"line":2446},[36,57171,54638],{"class":53},[36,57173,2602],{"class":53794},[36,57175,53801],{"class":53},[36,57177,57178,57180],{"class":38,"line":2469},[36,57179,8930],{"class":53794},[36,57181,18091],{"class":53},[36,57183,57184,57187,57189,57191],{"class":38,"line":2492},[36,57185,57186],{"class":49},"      padding",[36,57188,53931],{"class":53},[36,57190,713],{"class":49},[36,57192,3833],{"class":53},[36,57194,57195,57198,57200,57202],{"class":38,"line":4150},[36,57196,57197],{"class":49},"      margin",[36,57199,53931],{"class":53},[36,57201,713],{"class":49},[36,57203,3833],{"class":53},[36,57205,57206],{"class":38,"line":4155},[36,57207,4721],{"class":53},[36,57209,57210],{"class":38,"line":4161},[36,57211,546],{"emptyLinePlaceholder":545},[36,57213,57214,57217],{"class":38,"line":4166},[36,57215,57216],{"class":53794},"    li",[36,57218,18091],{"class":53},[36,57220,57221,57224,57226,57229],{"class":38,"line":4180},[36,57222,57223],{"class":49},"      list-style",[36,57225,53931],{"class":53},[36,57227,57228],{"class":49},"none",[36,57230,3833],{"class":53},[36,57232,57233],{"class":38,"line":4185},[36,57234,4721],{"class":53},[36,57236,57237],{"class":38,"line":4191},[36,57238,546],{"emptyLinePlaceholder":545},[36,57240,57241,57244],{"class":38,"line":4212},[36,57242,57243],{"class":4500},"    .box",[36,57245,18091],{"class":53},[36,57247,57248,57251,57253,57256],{"class":38,"line":4217},[36,57249,57250],{"class":49},"      position",[36,57252,53931],{"class":53},[36,57254,57255],{"class":49},"relative",[36,57257,3833],{"class":53},[36,57259,57260,57263,57265,57268,57270],{"class":38,"line":4231},[36,57261,57262],{"class":49},"      width",[36,57264,53931],{"class":53},[36,57266,57267],{"class":49},"976",[36,57269,53986],{"class":114},[36,57271,3833],{"class":53},[36,57273,57274,57277,57279,57281,57283],{"class":38,"line":4236},[36,57275,57276],{"class":49},"      height",[36,57278,53931],{"class":53},[36,57280,4077],{"class":49},[36,57282,53986],{"class":114},[36,57284,3833],{"class":53},[36,57286,57287,57289,57291,57293,57295,57297],{"class":38,"line":4264},[36,57288,57197],{"class":49},[36,57290,53931],{"class":53},[36,57292,166],{"class":49},[36,57294,53986],{"class":114},[36,57296,54050],{"class":49},[36,57298,3833],{"class":53},[36,57300,57301],{"class":38,"line":4269},[36,57302,4721],{"class":53},[36,57304,57305],{"class":38,"line":4286},[36,57306,546],{"emptyLinePlaceholder":545},[36,57308,57309,57312],{"class":38,"line":4291},[36,57310,57311],{"class":4500},"    .slider-footer",[36,57313,18091],{"class":53},[36,57315,57316,57318,57320,57323],{"class":38,"line":4296},[36,57317,57250],{"class":49},[36,57319,53931],{"class":53},[36,57321,57322],{"class":49},"absolute",[36,57324,3833],{"class":53},[36,57326,57327,57330,57332,57334],{"class":38,"line":4301},[36,57328,57329],{"class":49},"      left",[36,57331,53931],{"class":53},[36,57333,713],{"class":49},[36,57335,3833],{"class":53},[36,57337,57338,57341,57343,57345],{"class":38,"line":4315},[36,57339,57340],{"class":49},"      bottom",[36,57342,53931],{"class":53},[36,57344,713],{"class":49},[36,57346,3833],{"class":53},[36,57348,57349,57351,57353,57355,57357],{"class":38,"line":4320},[36,57350,57262],{"class":49},[36,57352,53931],{"class":53},[36,57354,166],{"class":49},[36,57356,1095],{"class":114},[36,57358,3833],{"class":53},[36,57360,57361,57363,57365,57367,57369],{"class":38,"line":5109},[36,57362,57276],{"class":49},[36,57364,53931],{"class":53},[36,57366,3252],{"class":49},[36,57368,1095],{"class":114},[36,57370,3833],{"class":53},[36,57372,57373,57376,57378,57381],{"class":38,"line":5123},[36,57374,57375],{"class":49},"      background-color",[36,57377,53931],{"class":53},[36,57379,57380],{"class":49},"skyblue",[36,57382,3833],{"class":53},[36,57384,57385],{"class":38,"line":5131},[36,57386,4721],{"class":53},[36,57388,57389],{"class":38,"line":5136},[36,57390,546],{"emptyLinePlaceholder":545},[36,57392,57393,57395,57397],{"class":38,"line":5142},[36,57394,57311],{"class":4500},[36,57396,9352],{"class":53794},[36,57398,18091],{"class":53},[36,57400,57401,57403,57405,57407],{"class":38,"line":5148},[36,57402,57250],{"class":49},[36,57404,53931],{"class":53},[36,57406,57322],{"class":49},[36,57408,3833],{"class":53},[36,57410,57411,57414,57416,57418,57420],{"class":38,"line":5153},[36,57412,57413],{"class":49},"      font-size",[36,57415,53931],{"class":53},[36,57417,3576],{"class":49},[36,57419,53986],{"class":114},[36,57421,3833],{"class":53},[36,57423,57424,57426,57428,57430,57432],{"class":38,"line":10475},[36,57425,57329],{"class":49},[36,57427,53931],{"class":53},[36,57429,3376],{"class":49},[36,57431,53986],{"class":114},[36,57433,3833],{"class":53},[36,57435,57436,57439,57441,57443,57445],{"class":38,"line":10499},[36,57437,57438],{"class":49},"      top",[36,57440,53931],{"class":53},[36,57442,1134],{"class":49},[36,57444,53986],{"class":114},[36,57446,3833],{"class":53},[36,57448,57449],{"class":38,"line":10504},[36,57450,4721],{"class":53},[36,57452,57453],{"class":38,"line":10510},[36,57454,546],{"emptyLinePlaceholder":545},[36,57456,57457,57460],{"class":38,"line":10537},[36,57458,57459],{"class":53794},"    ul",[36,57461,18091],{"class":53},[36,57463,57464,57466,57468,57470],{"class":38,"line":10542},[36,57465,57250],{"class":49},[36,57467,53931],{"class":53},[36,57469,57322],{"class":49},[36,57471,3833],{"class":53},[36,57473,57474,57476,57478,57480,57482],{"class":38,"line":10548},[36,57475,57438],{"class":49},[36,57477,53931],{"class":53},[36,57479,3457],{"class":49},[36,57481,53986],{"class":114},[36,57483,3833],{"class":53},[36,57485,57486,57488,57490,57492,57494],{"class":38,"line":10560},[36,57487,57329],{"class":49},[36,57489,53931],{"class":53},[36,57491,3376],{"class":49},[36,57493,53986],{"class":114},[36,57495,3833],{"class":53},[36,57497,57498,57501,57503,57505],{"class":38,"line":10572},[36,57499,57500],{"class":49},"      display",[36,57502,53931],{"class":53},[36,57504,53971],{"class":49},[36,57506,3833],{"class":53},[36,57508,57509,57512,57514,57516],{"class":38,"line":10584},[36,57510,57511],{"class":49},"      justify-content",[36,57513,53931],{"class":53},[36,57515,54162],{"class":49},[36,57517,3833],{"class":53},[36,57519,57520,57522,57524,57526],{"class":38,"line":12241},[36,57521,57250],{"class":49},[36,57523,53931],{"class":53},[36,57525,57322],{"class":49},[36,57527,3833],{"class":53},[36,57529,57530,57532,57534,57536,57538],{"class":38,"line":12266},[36,57531,57262],{"class":49},[36,57533,53931],{"class":53},[36,57535,6523],{"class":49},[36,57537,53986],{"class":114},[36,57539,3833],{"class":53},[36,57541,57542,57544,57546,57548,57550],{"class":38,"line":12289},[36,57543,57276],{"class":49},[36,57545,53931],{"class":53},[36,57547,3376],{"class":49},[36,57549,53986],{"class":114},[36,57551,3833],{"class":53},[36,57553,57554],{"class":38,"line":12313},[36,57555,4721],{"class":53},[36,57557,57558],{"class":38,"line":12318},[36,57559,546],{"emptyLinePlaceholder":545},[36,57561,57562,57564,57567],{"class":38,"line":12323},[36,57563,57459],{"class":53794},[36,57565,57566],{"class":53794}," li",[36,57568,18091],{"class":53},[36,57570,57571,57573,57575,57577,57579],{"class":38,"line":12328},[36,57572,57262],{"class":49},[36,57574,53931],{"class":53},[36,57576,3376],{"class":49},[36,57578,53986],{"class":114},[36,57580,3833],{"class":53},[36,57582,57583,57585,57587,57589,57591],{"class":38,"line":12337},[36,57584,57276],{"class":49},[36,57586,53931],{"class":53},[36,57588,3376],{"class":49},[36,57590,53986],{"class":114},[36,57592,3833],{"class":53},[36,57594,57595,57597,57599,57602,57604,57606,57608,57610,57612,57614,57616,57619],{"class":38,"line":12342},[36,57596,57375],{"class":49},[36,57598,53931],{"class":53},[36,57600,57601],{"class":49},"rgba",[36,57603,54],{"class":53},[36,57605,713],{"class":49},[36,57607,14958],{"class":53},[36,57609,713],{"class":49},[36,57611,14958],{"class":53},[36,57613,713],{"class":49},[36,57615,14958],{"class":53},[36,57617,57618],{"class":49},".4",[36,57620,5251],{"class":53},[36,57622,57623,57626,57628,57630,57632],{"class":38,"line":12348},[36,57624,57625],{"class":49},"      border-radius",[36,57627,53931],{"class":53},[36,57629,1317],{"class":49},[36,57631,53986],{"class":114},[36,57633,3833],{"class":53},[36,57635,57636],{"class":38,"line":12369},[36,57637,4721],{"class":53},[36,57639,57640],{"class":38,"line":12375},[36,57641,546],{"emptyLinePlaceholder":545},[36,57643,57644,57647],{"class":38,"line":12389},[36,57645,57646],{"class":4500},"    .activate",[36,57648,18091],{"class":53},[36,57650,57651,57653,57655,57658],{"class":38,"line":12395},[36,57652,57375],{"class":49},[36,57654,53931],{"class":53},[36,57656,57657],{"class":49},"#f7f7f7",[36,57659,3833],{"class":53},[36,57661,57662],{"class":38,"line":12422},[36,57663,4721],{"class":53},[36,57665,57666,57668,57670],{"class":38,"line":12431},[36,57667,54911],{"class":53},[36,57669,2602],{"class":53794},[36,57671,53801],{"class":53},[36,57673,57674,57676,57678],{"class":38,"line":12437},[36,57675,54279],{"class":53},[36,57677,53828],{"class":53794},[36,57679,53801],{"class":53},[36,57681,57682],{"class":38,"line":12445},[36,57683,546],{"emptyLinePlaceholder":545},[36,57685,57686,57688,57690],{"class":38,"line":12450},[36,57687,1507],{"class":53},[36,57689,54294],{"class":53794},[36,57691,53801],{"class":53},[36,57693,57694,57696,57698,57700,57702,57704],{"class":38,"line":19122},[36,57695,54638],{"class":53},[36,57697,54105],{"class":53794},[36,57699,55980],{"class":4500},[36,57701,115],{"class":53},[36,57703,55985],{"class":57},[36,57705,53801],{"class":53},[36,57707,57708,57710,57712,57714,57716,57719],{"class":38,"line":19128},[36,57709,53835],{"class":53},[36,57711,54105],{"class":53794},[36,57713,55980],{"class":4500},[36,57715,115],{"class":53},[36,57717,57718],{"class":57},"\"slider-wrapper\"",[36,57720,53801],{"class":53},[36,57722,57723,57726,57728,57731,57733,57736,57739,57741,57743],{"class":38,"line":19151},[36,57724,57725],{"class":53},"      \u003C",[36,57727,4000],{"class":53794},[36,57729,57730],{"class":4500}," src",[36,57732,115],{"class":53},[36,57734,57735],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,57737,57738],{"class":4500}," alt",[36,57740,115],{"class":53},[36,57742,10179],{"class":57},[36,57744,53801],{"class":53},[36,57746,57747,57749,57751],{"class":38,"line":19157},[36,57748,54270],{"class":53},[36,57750,54105],{"class":53794},[36,57752,53801],{"class":53},[36,57754,57755,57757,57759,57761,57763,57766],{"class":38,"line":19180},[36,57756,53835],{"class":53},[36,57758,54105],{"class":53794},[36,57760,55980],{"class":4500},[36,57762,115],{"class":53},[36,57764,57765],{"class":57},"\"slider-footer\"",[36,57767,53801],{"class":53},[36,57769,57770,57772,57774,57777,57779],{"class":38,"line":19194},[36,57771,57725],{"class":53},[36,57773,19],{"class":53794},[36,57775,57776],{"class":53},">对人类来说会不会太超前了?\u003C\u002F",[36,57778,19],{"class":53794},[36,57780,53801],{"class":53},[36,57782,57783,57785,57787],{"class":38,"line":19214},[36,57784,57725],{"class":53},[36,57786,3680],{"class":53794},[36,57788,53801],{"class":53},[36,57790,57791,57794,57796,57798,57800,57803,57806,57808],{"class":38,"line":19220},[36,57792,57793],{"class":53},"        \u003C",[36,57795,436],{"class":53794},[36,57797,55980],{"class":4500},[36,57799,115],{"class":53},[36,57801,57802],{"class":57},"\"activate\"",[36,57804,57805],{"class":53},">\u003C\u002F",[36,57807,436],{"class":53794},[36,57809,53801],{"class":53},[36,57811,57812,57814,57816,57818,57820],{"class":38,"line":19231},[36,57813,57793],{"class":53},[36,57815,436],{"class":53794},[36,57817,57805],{"class":53},[36,57819,436],{"class":53794},[36,57821,53801],{"class":53},[36,57823,57824,57826,57828,57830,57832],{"class":38,"line":19254},[36,57825,57793],{"class":53},[36,57827,436],{"class":53794},[36,57829,57805],{"class":53},[36,57831,436],{"class":53794},[36,57833,53801],{"class":53},[36,57835,57836,57838,57840,57842,57844],{"class":38,"line":19276},[36,57837,57793],{"class":53},[36,57839,436],{"class":53794},[36,57841,57805],{"class":53},[36,57843,436],{"class":53794},[36,57845,53801],{"class":53},[36,57847,57848,57850,57852,57854,57856],{"class":38,"line":19281},[36,57849,57793],{"class":53},[36,57851,436],{"class":53794},[36,57853,57805],{"class":53},[36,57855,436],{"class":53794},[36,57857,53801],{"class":53},[36,57859,57860,57862,57864,57866,57868],{"class":38,"line":19287},[36,57861,57793],{"class":53},[36,57863,436],{"class":53794},[36,57865,57805],{"class":53},[36,57867,436],{"class":53794},[36,57869,53801],{"class":53},[36,57871,57872,57874,57876,57878,57880],{"class":38,"line":19301},[36,57873,57793],{"class":53},[36,57875,436],{"class":53794},[36,57877,57805],{"class":53},[36,57879,436],{"class":53794},[36,57881,53801],{"class":53},[36,57883,57884,57886,57888,57890,57892],{"class":38,"line":19314},[36,57885,57793],{"class":53},[36,57887,436],{"class":53794},[36,57889,57805],{"class":53},[36,57891,436],{"class":53794},[36,57893,53801],{"class":53},[36,57895,57896,57899,57901],{"class":38,"line":19319},[36,57897,57898],{"class":53},"      \u003C\u002F",[36,57900,3680],{"class":53794},[36,57902,53801],{"class":53},[36,57904,57905,57907,57909],{"class":38,"line":19333},[36,57906,54270],{"class":53},[36,57908,54105],{"class":53794},[36,57910,53801],{"class":53},[36,57912,57913,57915,57917],{"class":38,"line":19338},[36,57914,54911],{"class":53},[36,57916,54105],{"class":53794},[36,57918,53801],{"class":53},[36,57920,57921,57923,57925],{"class":38,"line":19344},[36,57922,54638],{"class":53},[36,57924,54307],{"class":53794},[36,57926,53801],{"class":53},[36,57928,57929,57931,57934,57936],{"class":38,"line":19349},[36,57930,13744],{"class":114},[36,57932,57933],{"class":49}," arrImage",[36,57935,498],{"class":114},[36,57937,57938],{"class":53}," [\n",[36,57940,57941,57944,57947,57950,57953,57956,57959],{"class":38,"line":19363},[36,57942,57943],{"class":53},"      { url: ",[36,57945,57946],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,57948,57949],{"class":53},", title: ",[36,57951,57952],{"class":57},"'对人类来说会不会太超前了?'",[36,57954,57955],{"class":53},", color: ",[36,57957,57958],{"class":57},"'rgba(100,67,68)'",[36,57960,57961],{"class":53}," },\n",[36,57963,57964,57966,57969,57971,57974,57976,57979],{"class":38,"line":19368},[36,57965,57943],{"class":53},[36,57967,57968],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,57970,57949],{"class":53},[36,57972,57973],{"class":57},"'开启剑与雪的黑暗传说!'",[36,57975,57955],{"class":53},[36,57977,57978],{"class":57},"'rgba(43,35,26)'",[36,57980,57961],{"class":53},[36,57982,57983,57985,57988,57990,57993,57995,57998],{"class":38,"line":19373},[36,57984,57943],{"class":53},[36,57986,57987],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,57989,57949],{"class":53},[36,57991,57992],{"class":57},"'真正的jo厨出现了!'",[36,57994,57955],{"class":53},[36,57996,57997],{"class":57},"'rgba(36,31,33)'",[36,57999,57961],{"class":53},[36,58001,58002,58004,58007,58009,58012,58014,58017],{"class":38,"line":19387},[36,58003,57943],{"class":53},[36,58005,58006],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,58008,57949],{"class":53},[36,58010,58011],{"class":57},"'李玉刚:让世界通过b站看到东方大国文化'",[36,58013,57955],{"class":53},[36,58015,58016],{"class":57},"'rgba(139,98,66)'",[36,58018,57961],{"class":53},[36,58020,58021,58023,58026,58028,58031,58033,58036],{"class":38,"line":19399},[36,58022,57943],{"class":53},[36,58024,58025],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,58027,57949],{"class":53},[36,58029,58030],{"class":57},"'快来分享你的寒假日常吧'",[36,58032,57955],{"class":53},[36,58034,58035],{"class":57},"'rgba(67,90,92)'",[36,58037,57961],{"class":53},[36,58039,58040,58042,58045,58047,58050,58052,58055],{"class":38,"line":19404},[36,58041,57943],{"class":53},[36,58043,58044],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,58046,57949],{"class":53},[36,58048,58049],{"class":57},"'哔哩哔哩小年YEAR'",[36,58051,57955],{"class":53},[36,58053,58054],{"class":57},"'rgba(166,131,143)'",[36,58056,57961],{"class":53},[36,58058,58059,58061,58064,58066,58069,58071,58074],{"class":38,"line":19417},[36,58060,57943],{"class":53},[36,58062,58063],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,58065,57949],{"class":53},[36,58067,58068],{"class":57},"'一站式解决你的电脑配置问题'",[36,58070,57955],{"class":53},[36,58072,58073],{"class":57},"'rgba(53,29,25)'",[36,58075,57961],{"class":53},[36,58077,58078,58080,58083,58085,58088,58090,58093],{"class":38,"line":19422},[36,58079,57943],{"class":53},[36,58081,58082],{"class":57},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,58084,57949],{"class":53},[36,58086,58087],{"class":57},"'谁不想和小猫咪贴贴呢?'",[36,58089,57955],{"class":53},[36,58091,58092],{"class":57},"'rgba(99,72,114)'",[36,58094,58095],{"class":53}," }\n",[36,58097,58098],{"class":38,"line":19427},[36,58099,55603],{"class":53},[36,58101,58102,58104,58107,58109,58111,58113,58115,58118],{"class":38,"line":19432},[36,58103,13744],{"class":114},[36,58105,58106],{"class":49}," img",[36,58108,498],{"class":114},[36,58110,56888],{"class":53},[36,58112,56891],{"class":4500},[36,58114,54],{"class":53},[36,58116,58117],{"class":57},"'.slider-wrapper img'",[36,58119,61],{"class":53},[36,58121,58122,58124,58126,58128,58130,58132,58134,58137],{"class":38,"line":19445},[36,58123,13744],{"class":114},[36,58125,9352],{"class":49},[36,58127,498],{"class":114},[36,58129,56888],{"class":53},[36,58131,56891],{"class":4500},[36,58133,54],{"class":53},[36,58135,58136],{"class":57},"'.slider-footer p'",[36,58138,61],{"class":53},[36,58140,58141,58143,58146,58148,58150,58152,58154,58157],{"class":38,"line":19450},[36,58142,13744],{"class":114},[36,58144,58145],{"class":49}," color",[36,58147,498],{"class":114},[36,58149,56888],{"class":53},[36,58151,56891],{"class":4500},[36,58153,54],{"class":53},[36,58155,58156],{"class":57},"'.slider-footer'",[36,58158,61],{"class":53},[36,58160,58161,58163,58166,58168,58170,58173,58175,58178],{"class":38,"line":35135},[36,58162,13744],{"class":114},[36,58164,58165],{"class":49}," lis",[36,58167,498],{"class":114},[36,58169,56888],{"class":53},[36,58171,58172],{"class":4500},"querySelectorAll",[36,58174,54],{"class":53},[36,58176,58177],{"class":57},"'.slider-footer ul li'",[36,58179,61],{"class":53},[36,58181,58182,58184,58186,58188],{"class":38,"line":35141},[36,58183,54713],{"class":114},[36,58185,11964],{"class":53},[36,58187,115],{"class":114},[36,58189,124],{"class":49},[36,58191,58192,58194,58197,58199,58201,58203,58205],{"class":38,"line":35147},[36,58193,54713],{"class":114},[36,58195,58196],{"class":53}," timer ",[36,58198,115],{"class":114},[36,58200,56935],{"class":4500},[36,58202,54],{"class":53},[36,58204,56940],{"class":114},[36,58206,56943],{"class":53},[36,58208,58209,58212,58214],{"class":38,"line":35153},[36,58210,58211],{"class":53},"      img.src ",[36,58213,115],{"class":114},[36,58215,58216],{"class":53}," arrImage[i].url\n",[36,58218,58219,58222,58224],{"class":38,"line":35159},[36,58220,58221],{"class":53},"      p.innerHTML ",[36,58223,115],{"class":114},[36,58225,58226],{"class":53}," arrImage[i].title\n",[36,58228,58229,58232,58234],{"class":38,"line":35170},[36,58230,58231],{"class":53},"      color.style.backgroundColor ",[36,58233,115],{"class":114},[36,58235,58236],{"class":53}," arrImage[i].color\n",[36,58238,58239],{"class":38,"line":35176},[36,58240,58241],{"class":42},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,58243,58244],{"class":38,"line":35196},[36,58245,58246],{"class":42},"      \u002F\u002F li.classList.add('activate')\n",[36,58248,58249],{"class":38,"line":35202},[36,58250,58251],{"class":42},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,58253,58254],{"class":38,"line":35213},[36,58255,58256],{"class":42},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,58258,58259,58262,58264,58266,58269,58272,58275,58277,58280],{"class":38,"line":35219},[36,58260,58261],{"class":53},"      document.",[36,58263,56891],{"class":4500},[36,58265,54],{"class":53},[36,58267,58268],{"class":57},"'.activate'",[36,58270,58271],{"class":53},")?.classList.",[36,58273,58274],{"class":4500},"toggle",[36,58276,54],{"class":53},[36,58278,58279],{"class":57},"'activate'",[36,58281,61],{"class":53},[36,58283,58284,58287,58289,58291,58293],{"class":38,"line":35225},[36,58285,58286],{"class":53},"      lis[i].classList.",[36,58288,7862],{"class":4500},[36,58290,54],{"class":53},[36,58292,58279],{"class":57},[36,58294,61],{"class":53},[36,58296,58297],{"class":38,"line":35231},[36,58298,546],{"emptyLinePlaceholder":545},[36,58300,58301,58304,58306,58308,58310,58312,58314,58316,58319],{"class":38,"line":35237},[36,58302,58303],{"class":53},"      i ",[36,58305,115],{"class":114},[36,58307,56974],{"class":53},[36,58309,121],{"class":114},[36,58311,733],{"class":49},[36,58313,16236],{"class":53},[36,58315,1095],{"class":114},[36,58317,58318],{"class":53}," arrImage.",[36,58320,58321],{"class":49},"length\n",[36,58323,58324],{"class":38,"line":35243},[36,58325,546],{"emptyLinePlaceholder":545},[36,58327,58328,58330,58332],{"class":38,"line":35249},[36,58329,57026],{"class":53},[36,58331,8937],{"class":49},[36,58333,61],{"class":53},[36,58335,58336,58338,58340],{"class":38,"line":35255},[36,58337,54911],{"class":53},[36,58339,54307],{"class":53794},[36,58341,53801],{"class":53},[36,58343,58344,58346,58348],{"class":38,"line":35275},[36,58345,54279],{"class":53},[36,58347,54294],{"class":53794},[36,58349,53801],{"class":53},[36,58351,58352],{"class":38,"line":35281},[36,58353,546],{"emptyLinePlaceholder":545},[36,58355,58356,58358,58360],{"class":38,"line":35297},[36,58357,54279],{"class":53},[36,58359,53131],{"class":53794},[36,58361,53801],{"class":53},[19,58363,58364],{},[4000,58365],{"alt":31,"src":58366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58368,58369],{},"?.就是短路保护,确保输出正常进行",[19,58371,58372],{},"不要忘记取余%,有时候可以用",[19,58374,58375],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[433,58377,58378],{"start":46},[436,58379,58380],{},"法2",[26,58382,58384],{"className":53129,"code":58383,"language":53131,"meta":31,"style":31},"\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",[33,58385,58386,58396,58410,58414,58422,58436,58456,58468,58476,58482,58492,58502,58506,58510,58516,58526,58530,58534,58540,58550,58562,58574,58588,58592,58596,58602,58612,58622,58632,58644,58656,58666,58670,58674,58682,58692,58704,58716,58728,58732,58736,58742,58752,58764,58776,58786,58796,58806,58818,58830,58834,58838,58846,58858,58870,58896,58908,58912,58916,58922,58932,58936,58944,58952,58956,58964,58978,58992,59012,59020,59034,59046,59054,59072,59084,59096,59108,59120,59132,59144,59156,59164,59172,59180,59188,59199,59215,59231,59247,59263,59279,59295,59311,59327,59331,59336,59354,59372,59382,59387,59392,59403,59409,59424,59433,59437,59442,59451,59456,59465,59470,59475,59480,59503,59533,59537,59545,59549,59557,59565,59569],{"__ignoreMap":31},[36,58387,58388,58390,58392,58394],{"class":38,"line":39},[36,58389,53791],{"class":53},[36,58391,53795],{"class":53794},[36,58393,53798],{"class":4500},[36,58395,53801],{"class":53},[36,58397,58398,58400,58402,58404,58406,58408],{"class":38,"line":46},[36,58399,1507],{"class":53},[36,58401,53131],{"class":53794},[36,58403,53810],{"class":4500},[36,58405,115],{"class":53},[36,58407,53815],{"class":57},[36,58409,53801],{"class":53},[36,58411,58412],{"class":38,"line":82},[36,58413,546],{"emptyLinePlaceholder":545},[36,58415,58416,58418,58420],{"class":38,"line":88},[36,58417,1507],{"class":53},[36,58419,53828],{"class":53794},[36,58421,53801],{"class":53},[36,58423,58424,58426,58428,58430,58432,58434],{"class":38,"line":195},[36,58425,54638],{"class":53},[36,58427,53838],{"class":53794},[36,58429,53841],{"class":4500},[36,58431,115],{"class":53},[36,58433,53846],{"class":57},[36,58435,53801],{"class":53},[36,58437,58438,58440,58442,58444,58446,58448,58450,58452,58454],{"class":38,"line":1517},[36,58439,54638],{"class":53},[36,58441,53838],{"class":53794},[36,58443,17440],{"class":4500},[36,58445,115],{"class":53},[36,58447,53885],{"class":57},[36,58449,53865],{"class":4500},[36,58451,115],{"class":53},[36,58453,53892],{"class":57},[36,58455,53801],{"class":53},[36,58457,58458,58460,58462,58464,58466],{"class":38,"line":2421},[36,58459,54638],{"class":53},[36,58461,53901],{"class":53794},[36,58463,53904],{"class":53},[36,58465,53901],{"class":53794},[36,58467,53801],{"class":53},[36,58469,58470,58472,58474],{"class":38,"line":2446},[36,58471,54638],{"class":53},[36,58473,2602],{"class":53794},[36,58475,53801],{"class":53},[36,58477,58478,58480],{"class":38,"line":2469},[36,58479,8930],{"class":53794},[36,58481,18091],{"class":53},[36,58483,58484,58486,58488,58490],{"class":38,"line":2492},[36,58485,57186],{"class":49},[36,58487,53931],{"class":53},[36,58489,713],{"class":49},[36,58491,3833],{"class":53},[36,58493,58494,58496,58498,58500],{"class":38,"line":4150},[36,58495,57197],{"class":49},[36,58497,53931],{"class":53},[36,58499,713],{"class":49},[36,58501,3833],{"class":53},[36,58503,58504],{"class":38,"line":4155},[36,58505,4721],{"class":53},[36,58507,58508],{"class":38,"line":4161},[36,58509,546],{"emptyLinePlaceholder":545},[36,58511,58512,58514],{"class":38,"line":4166},[36,58513,57216],{"class":53794},[36,58515,18091],{"class":53},[36,58517,58518,58520,58522,58524],{"class":38,"line":4180},[36,58519,57223],{"class":49},[36,58521,53931],{"class":53},[36,58523,57228],{"class":49},[36,58525,3833],{"class":53},[36,58527,58528],{"class":38,"line":4185},[36,58529,4721],{"class":53},[36,58531,58532],{"class":38,"line":4191},[36,58533,546],{"emptyLinePlaceholder":545},[36,58535,58536,58538],{"class":38,"line":4212},[36,58537,57243],{"class":4500},[36,58539,18091],{"class":53},[36,58541,58542,58544,58546,58548],{"class":38,"line":4217},[36,58543,57250],{"class":49},[36,58545,53931],{"class":53},[36,58547,57255],{"class":49},[36,58549,3833],{"class":53},[36,58551,58552,58554,58556,58558,58560],{"class":38,"line":4231},[36,58553,57262],{"class":49},[36,58555,53931],{"class":53},[36,58557,57267],{"class":49},[36,58559,53986],{"class":114},[36,58561,3833],{"class":53},[36,58563,58564,58566,58568,58570,58572],{"class":38,"line":4236},[36,58565,57276],{"class":49},[36,58567,53931],{"class":53},[36,58569,4077],{"class":49},[36,58571,53986],{"class":114},[36,58573,3833],{"class":53},[36,58575,58576,58578,58580,58582,58584,58586],{"class":38,"line":4264},[36,58577,57197],{"class":49},[36,58579,53931],{"class":53},[36,58581,166],{"class":49},[36,58583,53986],{"class":114},[36,58585,54050],{"class":49},[36,58587,3833],{"class":53},[36,58589,58590],{"class":38,"line":4269},[36,58591,4721],{"class":53},[36,58593,58594],{"class":38,"line":4286},[36,58595,546],{"emptyLinePlaceholder":545},[36,58597,58598,58600],{"class":38,"line":4291},[36,58599,57311],{"class":4500},[36,58601,18091],{"class":53},[36,58603,58604,58606,58608,58610],{"class":38,"line":4296},[36,58605,57250],{"class":49},[36,58607,53931],{"class":53},[36,58609,57322],{"class":49},[36,58611,3833],{"class":53},[36,58613,58614,58616,58618,58620],{"class":38,"line":4301},[36,58615,57329],{"class":49},[36,58617,53931],{"class":53},[36,58619,713],{"class":49},[36,58621,3833],{"class":53},[36,58623,58624,58626,58628,58630],{"class":38,"line":4315},[36,58625,57340],{"class":49},[36,58627,53931],{"class":53},[36,58629,713],{"class":49},[36,58631,3833],{"class":53},[36,58633,58634,58636,58638,58640,58642],{"class":38,"line":4320},[36,58635,57262],{"class":49},[36,58637,53931],{"class":53},[36,58639,166],{"class":49},[36,58641,1095],{"class":114},[36,58643,3833],{"class":53},[36,58645,58646,58648,58650,58652,58654],{"class":38,"line":5109},[36,58647,57276],{"class":49},[36,58649,53931],{"class":53},[36,58651,3252],{"class":49},[36,58653,1095],{"class":114},[36,58655,3833],{"class":53},[36,58657,58658,58660,58662,58664],{"class":38,"line":5123},[36,58659,57375],{"class":49},[36,58661,53931],{"class":53},[36,58663,57380],{"class":49},[36,58665,3833],{"class":53},[36,58667,58668],{"class":38,"line":5131},[36,58669,4721],{"class":53},[36,58671,58672],{"class":38,"line":5136},[36,58673,546],{"emptyLinePlaceholder":545},[36,58675,58676,58678,58680],{"class":38,"line":5142},[36,58677,57311],{"class":4500},[36,58679,9352],{"class":53794},[36,58681,18091],{"class":53},[36,58683,58684,58686,58688,58690],{"class":38,"line":5148},[36,58685,57250],{"class":49},[36,58687,53931],{"class":53},[36,58689,57322],{"class":49},[36,58691,3833],{"class":53},[36,58693,58694,58696,58698,58700,58702],{"class":38,"line":5153},[36,58695,57413],{"class":49},[36,58697,53931],{"class":53},[36,58699,3576],{"class":49},[36,58701,53986],{"class":114},[36,58703,3833],{"class":53},[36,58705,58706,58708,58710,58712,58714],{"class":38,"line":10475},[36,58707,57329],{"class":49},[36,58709,53931],{"class":53},[36,58711,3376],{"class":49},[36,58713,53986],{"class":114},[36,58715,3833],{"class":53},[36,58717,58718,58720,58722,58724,58726],{"class":38,"line":10499},[36,58719,57438],{"class":49},[36,58721,53931],{"class":53},[36,58723,1134],{"class":49},[36,58725,53986],{"class":114},[36,58727,3833],{"class":53},[36,58729,58730],{"class":38,"line":10504},[36,58731,4721],{"class":53},[36,58733,58734],{"class":38,"line":10510},[36,58735,546],{"emptyLinePlaceholder":545},[36,58737,58738,58740],{"class":38,"line":10537},[36,58739,57459],{"class":53794},[36,58741,18091],{"class":53},[36,58743,58744,58746,58748,58750],{"class":38,"line":10542},[36,58745,57250],{"class":49},[36,58747,53931],{"class":53},[36,58749,57322],{"class":49},[36,58751,3833],{"class":53},[36,58753,58754,58756,58758,58760,58762],{"class":38,"line":10548},[36,58755,57438],{"class":49},[36,58757,53931],{"class":53},[36,58759,3457],{"class":49},[36,58761,53986],{"class":114},[36,58763,3833],{"class":53},[36,58765,58766,58768,58770,58772,58774],{"class":38,"line":10560},[36,58767,57329],{"class":49},[36,58769,53931],{"class":53},[36,58771,3376],{"class":49},[36,58773,53986],{"class":114},[36,58775,3833],{"class":53},[36,58777,58778,58780,58782,58784],{"class":38,"line":10572},[36,58779,57500],{"class":49},[36,58781,53931],{"class":53},[36,58783,53971],{"class":49},[36,58785,3833],{"class":53},[36,58787,58788,58790,58792,58794],{"class":38,"line":10584},[36,58789,57511],{"class":49},[36,58791,53931],{"class":53},[36,58793,54162],{"class":49},[36,58795,3833],{"class":53},[36,58797,58798,58800,58802,58804],{"class":38,"line":12241},[36,58799,57250],{"class":49},[36,58801,53931],{"class":53},[36,58803,57322],{"class":49},[36,58805,3833],{"class":53},[36,58807,58808,58810,58812,58814,58816],{"class":38,"line":12266},[36,58809,57262],{"class":49},[36,58811,53931],{"class":53},[36,58813,6523],{"class":49},[36,58815,53986],{"class":114},[36,58817,3833],{"class":53},[36,58819,58820,58822,58824,58826,58828],{"class":38,"line":12289},[36,58821,57276],{"class":49},[36,58823,53931],{"class":53},[36,58825,3376],{"class":49},[36,58827,53986],{"class":114},[36,58829,3833],{"class":53},[36,58831,58832],{"class":38,"line":12313},[36,58833,4721],{"class":53},[36,58835,58836],{"class":38,"line":12318},[36,58837,546],{"emptyLinePlaceholder":545},[36,58839,58840,58842,58844],{"class":38,"line":12323},[36,58841,57459],{"class":53794},[36,58843,57566],{"class":53794},[36,58845,18091],{"class":53},[36,58847,58848,58850,58852,58854,58856],{"class":38,"line":12328},[36,58849,57262],{"class":49},[36,58851,53931],{"class":53},[36,58853,3376],{"class":49},[36,58855,53986],{"class":114},[36,58857,3833],{"class":53},[36,58859,58860,58862,58864,58866,58868],{"class":38,"line":12337},[36,58861,57276],{"class":49},[36,58863,53931],{"class":53},[36,58865,3376],{"class":49},[36,58867,53986],{"class":114},[36,58869,3833],{"class":53},[36,58871,58872,58874,58876,58878,58880,58882,58884,58886,58888,58890,58892,58894],{"class":38,"line":12342},[36,58873,57375],{"class":49},[36,58875,53931],{"class":53},[36,58877,57601],{"class":49},[36,58879,54],{"class":53},[36,58881,713],{"class":49},[36,58883,14958],{"class":53},[36,58885,713],{"class":49},[36,58887,14958],{"class":53},[36,58889,713],{"class":49},[36,58891,14958],{"class":53},[36,58893,57618],{"class":49},[36,58895,5251],{"class":53},[36,58897,58898,58900,58902,58904,58906],{"class":38,"line":12348},[36,58899,57625],{"class":49},[36,58901,53931],{"class":53},[36,58903,1317],{"class":49},[36,58905,53986],{"class":114},[36,58907,3833],{"class":53},[36,58909,58910],{"class":38,"line":12369},[36,58911,4721],{"class":53},[36,58913,58914],{"class":38,"line":12375},[36,58915,546],{"emptyLinePlaceholder":545},[36,58917,58918,58920],{"class":38,"line":12389},[36,58919,57646],{"class":4500},[36,58921,18091],{"class":53},[36,58923,58924,58926,58928,58930],{"class":38,"line":12395},[36,58925,57375],{"class":49},[36,58927,53931],{"class":53},[36,58929,57657],{"class":49},[36,58931,3833],{"class":53},[36,58933,58934],{"class":38,"line":12422},[36,58935,4721],{"class":53},[36,58937,58938,58940,58942],{"class":38,"line":12431},[36,58939,54911],{"class":53},[36,58941,2602],{"class":53794},[36,58943,53801],{"class":53},[36,58945,58946,58948,58950],{"class":38,"line":12437},[36,58947,54279],{"class":53},[36,58949,53828],{"class":53794},[36,58951,53801],{"class":53},[36,58953,58954],{"class":38,"line":12445},[36,58955,546],{"emptyLinePlaceholder":545},[36,58957,58958,58960,58962],{"class":38,"line":12450},[36,58959,1507],{"class":53},[36,58961,54294],{"class":53794},[36,58963,53801],{"class":53},[36,58965,58966,58968,58970,58972,58974,58976],{"class":38,"line":19122},[36,58967,54638],{"class":53},[36,58969,54105],{"class":53794},[36,58971,55980],{"class":4500},[36,58973,115],{"class":53},[36,58975,55985],{"class":57},[36,58977,53801],{"class":53},[36,58979,58980,58982,58984,58986,58988,58990],{"class":38,"line":19128},[36,58981,53835],{"class":53},[36,58983,54105],{"class":53794},[36,58985,55980],{"class":4500},[36,58987,115],{"class":53},[36,58989,57718],{"class":57},[36,58991,53801],{"class":53},[36,58993,58994,58996,58998,59000,59002,59004,59006,59008,59010],{"class":38,"line":19151},[36,58995,57725],{"class":53},[36,58997,4000],{"class":53794},[36,58999,57730],{"class":4500},[36,59001,115],{"class":53},[36,59003,57735],{"class":57},[36,59005,57738],{"class":4500},[36,59007,115],{"class":53},[36,59009,10179],{"class":57},[36,59011,53801],{"class":53},[36,59013,59014,59016,59018],{"class":38,"line":19157},[36,59015,54270],{"class":53},[36,59017,54105],{"class":53794},[36,59019,53801],{"class":53},[36,59021,59022,59024,59026,59028,59030,59032],{"class":38,"line":19180},[36,59023,53835],{"class":53},[36,59025,54105],{"class":53794},[36,59027,55980],{"class":4500},[36,59029,115],{"class":53},[36,59031,57765],{"class":57},[36,59033,53801],{"class":53},[36,59035,59036,59038,59040,59042,59044],{"class":38,"line":19194},[36,59037,57725],{"class":53},[36,59039,19],{"class":53794},[36,59041,57776],{"class":53},[36,59043,19],{"class":53794},[36,59045,53801],{"class":53},[36,59047,59048,59050,59052],{"class":38,"line":19214},[36,59049,57725],{"class":53},[36,59051,3680],{"class":53794},[36,59053,53801],{"class":53},[36,59055,59056,59058,59060,59062,59064,59066,59068,59070],{"class":38,"line":19220},[36,59057,57793],{"class":53},[36,59059,436],{"class":53794},[36,59061,55980],{"class":4500},[36,59063,115],{"class":53},[36,59065,57802],{"class":57},[36,59067,57805],{"class":53},[36,59069,436],{"class":53794},[36,59071,53801],{"class":53},[36,59073,59074,59076,59078,59080,59082],{"class":38,"line":19231},[36,59075,57793],{"class":53},[36,59077,436],{"class":53794},[36,59079,57805],{"class":53},[36,59081,436],{"class":53794},[36,59083,53801],{"class":53},[36,59085,59086,59088,59090,59092,59094],{"class":38,"line":19254},[36,59087,57793],{"class":53},[36,59089,436],{"class":53794},[36,59091,57805],{"class":53},[36,59093,436],{"class":53794},[36,59095,53801],{"class":53},[36,59097,59098,59100,59102,59104,59106],{"class":38,"line":19276},[36,59099,57793],{"class":53},[36,59101,436],{"class":53794},[36,59103,57805],{"class":53},[36,59105,436],{"class":53794},[36,59107,53801],{"class":53},[36,59109,59110,59112,59114,59116,59118],{"class":38,"line":19281},[36,59111,57793],{"class":53},[36,59113,436],{"class":53794},[36,59115,57805],{"class":53},[36,59117,436],{"class":53794},[36,59119,53801],{"class":53},[36,59121,59122,59124,59126,59128,59130],{"class":38,"line":19287},[36,59123,57793],{"class":53},[36,59125,436],{"class":53794},[36,59127,57805],{"class":53},[36,59129,436],{"class":53794},[36,59131,53801],{"class":53},[36,59133,59134,59136,59138,59140,59142],{"class":38,"line":19301},[36,59135,57793],{"class":53},[36,59137,436],{"class":53794},[36,59139,57805],{"class":53},[36,59141,436],{"class":53794},[36,59143,53801],{"class":53},[36,59145,59146,59148,59150,59152,59154],{"class":38,"line":19314},[36,59147,57793],{"class":53},[36,59149,436],{"class":53794},[36,59151,57805],{"class":53},[36,59153,436],{"class":53794},[36,59155,53801],{"class":53},[36,59157,59158,59160,59162],{"class":38,"line":19319},[36,59159,57898],{"class":53},[36,59161,3680],{"class":53794},[36,59163,53801],{"class":53},[36,59165,59166,59168,59170],{"class":38,"line":19333},[36,59167,54270],{"class":53},[36,59169,54105],{"class":53794},[36,59171,53801],{"class":53},[36,59173,59174,59176,59178],{"class":38,"line":19338},[36,59175,54911],{"class":53},[36,59177,54105],{"class":53794},[36,59179,53801],{"class":53},[36,59181,59182,59184,59186],{"class":38,"line":19344},[36,59183,54638],{"class":53},[36,59185,54307],{"class":53794},[36,59187,53801],{"class":53},[36,59189,59190,59192,59195,59197],{"class":38,"line":19349},[36,59191,13744],{"class":114},[36,59193,59194],{"class":49}," sliderData",[36,59196,498],{"class":114},[36,59198,57938],{"class":53},[36,59200,59201,59203,59205,59207,59209,59211,59213],{"class":38,"line":19363},[36,59202,57943],{"class":53},[36,59204,57946],{"class":57},[36,59206,57949],{"class":53},[36,59208,57952],{"class":57},[36,59210,57955],{"class":53},[36,59212,57958],{"class":57},[36,59214,57961],{"class":53},[36,59216,59217,59219,59221,59223,59225,59227,59229],{"class":38,"line":19368},[36,59218,57943],{"class":53},[36,59220,57968],{"class":57},[36,59222,57949],{"class":53},[36,59224,57973],{"class":57},[36,59226,57955],{"class":53},[36,59228,57978],{"class":57},[36,59230,57961],{"class":53},[36,59232,59233,59235,59237,59239,59241,59243,59245],{"class":38,"line":19373},[36,59234,57943],{"class":53},[36,59236,57987],{"class":57},[36,59238,57949],{"class":53},[36,59240,57992],{"class":57},[36,59242,57955],{"class":53},[36,59244,57997],{"class":57},[36,59246,57961],{"class":53},[36,59248,59249,59251,59253,59255,59257,59259,59261],{"class":38,"line":19387},[36,59250,57943],{"class":53},[36,59252,58006],{"class":57},[36,59254,57949],{"class":53},[36,59256,58011],{"class":57},[36,59258,57955],{"class":53},[36,59260,58016],{"class":57},[36,59262,57961],{"class":53},[36,59264,59265,59267,59269,59271,59273,59275,59277],{"class":38,"line":19399},[36,59266,57943],{"class":53},[36,59268,58025],{"class":57},[36,59270,57949],{"class":53},[36,59272,58030],{"class":57},[36,59274,57955],{"class":53},[36,59276,58035],{"class":57},[36,59278,57961],{"class":53},[36,59280,59281,59283,59285,59287,59289,59291,59293],{"class":38,"line":19404},[36,59282,57943],{"class":53},[36,59284,58044],{"class":57},[36,59286,57949],{"class":53},[36,59288,58049],{"class":57},[36,59290,57955],{"class":53},[36,59292,58054],{"class":57},[36,59294,57961],{"class":53},[36,59296,59297,59299,59301,59303,59305,59307,59309],{"class":38,"line":19417},[36,59298,57943],{"class":53},[36,59300,58063],{"class":57},[36,59302,57949],{"class":53},[36,59304,58068],{"class":57},[36,59306,57955],{"class":53},[36,59308,58073],{"class":57},[36,59310,57961],{"class":53},[36,59312,59313,59315,59317,59319,59321,59323,59325],{"class":38,"line":19422},[36,59314,57943],{"class":53},[36,59316,58082],{"class":57},[36,59318,57949],{"class":53},[36,59320,58087],{"class":57},[36,59322,57955],{"class":53},[36,59324,58092],{"class":57},[36,59326,58095],{"class":53},[36,59328,59329],{"class":38,"line":19427},[36,59330,55603],{"class":53},[36,59332,59333],{"class":38,"line":19432},[36,59334,59335],{"class":42},"    \u002F\u002F 1.获取元素\n",[36,59337,59338,59340,59342,59344,59346,59348,59350,59352],{"class":38,"line":19445},[36,59339,13744],{"class":114},[36,59341,58106],{"class":49},[36,59343,498],{"class":114},[36,59345,56888],{"class":53},[36,59347,56891],{"class":4500},[36,59349,54],{"class":53},[36,59351,58117],{"class":57},[36,59353,61],{"class":53},[36,59355,59356,59358,59360,59362,59364,59366,59368,59370],{"class":38,"line":19450},[36,59357,13744],{"class":114},[36,59359,9352],{"class":49},[36,59361,498],{"class":114},[36,59363,56888],{"class":53},[36,59365,56891],{"class":4500},[36,59367,54],{"class":53},[36,59369,58136],{"class":57},[36,59371,61],{"class":53},[36,59373,59374,59376,59378,59380],{"class":38,"line":35135},[36,59375,54713],{"class":114},[36,59377,11964],{"class":53},[36,59379,115],{"class":114},[36,59381,49830],{"class":49},[36,59383,59384],{"class":38,"line":35141},[36,59385,59386],{"class":42},"    \u002F\u002F 2.开启定时器\n",[36,59388,59389],{"class":38,"line":35147},[36,59390,59391],{"class":42},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,59393,59394,59397,59399,59401],{"class":38,"line":35153},[36,59395,59396],{"class":4500},"    setInterval",[36,59398,54],{"class":53},[36,59400,56940],{"class":114},[36,59402,56943],{"class":53},[36,59404,59405,59407],{"class":38,"line":35159},[36,59406,56948],{"class":53},[36,59408,5234],{"class":114},[36,59410,59411,59413,59415,59417,59420,59422],{"class":38,"line":35170},[36,59412,56971],{"class":114},[36,59414,56974],{"class":53},[36,59416,1490],{"class":114},[36,59418,59419],{"class":53}," sliderData.",[36,59421,54462],{"class":49},[36,59423,14965],{"class":53},[36,59425,59426,59429,59431],{"class":38,"line":35176},[36,59427,59428],{"class":53},"        i ",[36,59430,115],{"class":114},[36,59432,49830],{"class":49},[36,59434,59435],{"class":38,"line":35196},[36,59436,54892],{"class":53},[36,59438,59439],{"class":38,"line":35202},[36,59440,59441],{"class":42},"      \u002F\u002F 更换图片路径\n",[36,59443,59444,59446,59448],{"class":38,"line":35213},[36,59445,58211],{"class":53},[36,59447,115],{"class":114},[36,59449,59450],{"class":53}," sliderData[i].url\n",[36,59452,59453],{"class":38,"line":35219},[36,59454,59455],{"class":42},"      \u002F\u002F 把文字写到p里面\n",[36,59457,59458,59460,59462],{"class":38,"line":35225},[36,59459,58221],{"class":53},[36,59461,115],{"class":114},[36,59463,59464],{"class":53}," sliderData[i].title\n",[36,59466,59467],{"class":38,"line":35231},[36,59468,59469],{"class":42},"      \u002F\u002F 小圆点\n",[36,59471,59472],{"class":38,"line":35237},[36,59473,59474],{"class":42},"      \u002F\u002F 先删除以前的active\n",[36,59476,59477],{"class":38,"line":35243},[36,59478,59479],{"class":42},"      \u002F\u002F 只让当前li添加active\n",[36,59481,59482,59484,59486,59488,59491,59494,59497,59499,59501],{"class":38,"line":35249},[36,59483,58261],{"class":53},[36,59485,56891],{"class":4500},[36,59487,54],{"class":53},[36,59489,59490],{"class":57},"'.slider-footer .activate'",[36,59492,59493],{"class":53},").classList.",[36,59495,59496],{"class":4500},"remove",[36,59498,54],{"class":53},[36,59500,58279],{"class":57},[36,59502,61],{"class":53},[36,59504,59505,59507,59509,59511,59514,59516,59518,59520,59523,59525,59527,59529,59531],{"class":38,"line":35255},[36,59506,58261],{"class":53},[36,59508,56891],{"class":4500},[36,59510,54],{"class":53},[36,59512,59513],{"class":57},"`.slider-footer ul li:nth-child(${",[36,59515,3122],{"class":53},[36,59517,730],{"class":114},[36,59519,733],{"class":49},[36,59521,59522],{"class":57},"})`",[36,59524,59493],{"class":53},[36,59526,7862],{"class":4500},[36,59528,54],{"class":53},[36,59530,58279],{"class":57},[36,59532,61],{"class":53},[36,59534,59535],{"class":38,"line":35275},[36,59536,546],{"emptyLinePlaceholder":545},[36,59538,59539,59541,59543],{"class":38,"line":35281},[36,59540,57026],{"class":53},[36,59542,8937],{"class":49},[36,59544,61],{"class":53},[36,59546,59547],{"class":38,"line":35297},[36,59548,546],{"emptyLinePlaceholder":545},[36,59550,59551,59553,59555],{"class":38,"line":35303},[36,59552,54911],{"class":53},[36,59554,54307],{"class":53794},[36,59556,53801],{"class":53},[36,59558,59559,59561,59563],{"class":38,"line":35317},[36,59560,54279],{"class":53},[36,59562,54294],{"class":53794},[36,59564,53801],{"class":53},[36,59566,59567],{"class":38,"line":35323},[36,59568,546],{"emptyLinePlaceholder":545},[36,59570,59571,59573,59575],{"class":38,"line":35338},[36,59572,54279],{"class":53},[36,59574,53131],{"class":53794},[36,59576,53801],{"class":53},[997,59578,59580],{"id":59579},"_317-重要知识点","3.1.7 重要知识点",[19,59582,59583,59584],{},"浏览器在渲染文本时， ",[2839,59585,59586],{},"没有空格或换行符就没有“断行点”",[19,59588,59589],{},[4000,59590],{"alt":31,"src":59591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59593,59594],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59596,59597],{},[4000,59598],{"alt":31,"src":59599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59601,59602],{},[4000,59603],{"alt":31,"src":59604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59606,59608],{"id":59607},"_32-dom事件基础","3.2 DOM事件基础",[997,59610,59612],{"id":59611},"_321-事件监听","3.2.1 事件监听",[19,59614,59615],{},[4000,59616],{"alt":31,"src":59617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59619,59620],{},"事件监听有响应的发生",[19,59622,59623],{},[4000,59624],{"alt":31,"src":59625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59627,59628],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59630,59631],{},"对于有名函数,要执行的函数名后边不要加()",[997,59633,59635],{"id":59634},"_322-随机点名案例","3.2.2 随机点名案例",[26,59637,59639],{"className":53129,"code":59638,"language":53131,"meta":31,"style":31},"\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",[33,59640,59641,59651,59665,59669,59677,59691,59711,59723,59731,59737,59747,59757,59761,59765,59772,59783,59787,59791,59797,59809,59823,59833,59845,59858,59862,59866,59873,59877,59890,59902,59914,59918,59922,59926,59933,59943,59947,59951,59960,59972,59984,59999,60003,60011,60019,60023,60031,60044,60058,60071,60091,60099,60114,60134,60154,60162,60166,60174,60179,60215,60235,60240,60259,60264,60275,60280,60291,60296,60315,60330,60335,60361,60371,60380,60385,60401,60406,60411,60416,60431,60435,60439,60444,60463,60480,60488,60493,60508,60512,60516,60524,60532,60536],{"__ignoreMap":31},[36,59642,59643,59645,59647,59649],{"class":38,"line":39},[36,59644,53791],{"class":53},[36,59646,53795],{"class":53794},[36,59648,53798],{"class":4500},[36,59650,53801],{"class":53},[36,59652,59653,59655,59657,59659,59661,59663],{"class":38,"line":46},[36,59654,1507],{"class":53},[36,59656,53131],{"class":53794},[36,59658,53810],{"class":4500},[36,59660,115],{"class":53},[36,59662,53815],{"class":57},[36,59664,53801],{"class":53},[36,59666,59667],{"class":38,"line":82},[36,59668,546],{"emptyLinePlaceholder":545},[36,59670,59671,59673,59675],{"class":38,"line":88},[36,59672,1507],{"class":53},[36,59674,53828],{"class":53794},[36,59676,53801],{"class":53},[36,59678,59679,59681,59683,59685,59687,59689],{"class":38,"line":195},[36,59680,54638],{"class":53},[36,59682,53838],{"class":53794},[36,59684,53841],{"class":4500},[36,59686,115],{"class":53},[36,59688,53846],{"class":57},[36,59690,53801],{"class":53},[36,59692,59693,59695,59697,59699,59701,59703,59705,59707,59709],{"class":38,"line":1517},[36,59694,54638],{"class":53},[36,59696,53838],{"class":53794},[36,59698,17440],{"class":4500},[36,59700,115],{"class":53},[36,59702,53885],{"class":57},[36,59704,53865],{"class":4500},[36,59706,115],{"class":53},[36,59708,53892],{"class":57},[36,59710,53801],{"class":53},[36,59712,59713,59715,59717,59719,59721],{"class":38,"line":2421},[36,59714,54638],{"class":53},[36,59716,53901],{"class":53794},[36,59718,53904],{"class":53},[36,59720,53901],{"class":53794},[36,59722,53801],{"class":53},[36,59724,59725,59727,59729],{"class":38,"line":2446},[36,59726,54638],{"class":53},[36,59728,2602],{"class":53794},[36,59730,53801],{"class":53},[36,59732,59733,59735],{"class":38,"line":2469},[36,59734,8930],{"class":53794},[36,59736,18091],{"class":53},[36,59738,59739,59741,59743,59745],{"class":38,"line":2492},[36,59740,57197],{"class":49},[36,59742,53931],{"class":53},[36,59744,713],{"class":49},[36,59746,3833],{"class":53},[36,59748,59749,59751,59753,59755],{"class":38,"line":4150},[36,59750,57186],{"class":49},[36,59752,53931],{"class":53},[36,59754,713],{"class":49},[36,59756,3833],{"class":53},[36,59758,59759],{"class":38,"line":4155},[36,59760,4721],{"class":53},[36,59762,59763],{"class":38,"line":4161},[36,59764,546],{"emptyLinePlaceholder":545},[36,59766,59767,59770],{"class":38,"line":4166},[36,59768,59769],{"class":53794},"    h2",[36,59771,18091],{"class":53},[36,59773,59774,59777,59779,59781],{"class":38,"line":4180},[36,59775,59776],{"class":49},"      text-align",[36,59778,53931],{"class":53},[36,59780,54086],{"class":49},[36,59782,3833],{"class":53},[36,59784,59785],{"class":38,"line":4185},[36,59786,4721],{"class":53},[36,59788,59789],{"class":38,"line":4191},[36,59790,546],{"emptyLinePlaceholder":545},[36,59792,59793,59795],{"class":38,"line":4212},[36,59794,57243],{"class":4500},[36,59796,18091],{"class":53},[36,59798,59799,59801,59803,59805,59807],{"class":38,"line":4217},[36,59800,57262],{"class":49},[36,59802,53931],{"class":53},[36,59804,4077],{"class":49},[36,59806,53986],{"class":114},[36,59808,3833],{"class":53},[36,59810,59811,59813,59815,59817,59819,59821],{"class":38,"line":4231},[36,59812,57197],{"class":49},[36,59814,53931],{"class":53},[36,59816,3332],{"class":49},[36,59818,53986],{"class":114},[36,59820,54050],{"class":49},[36,59822,3833],{"class":53},[36,59824,59825,59827,59829,59831],{"class":38,"line":4236},[36,59826,57500],{"class":49},[36,59828,53931],{"class":53},[36,59830,53971],{"class":49},[36,59832,3833],{"class":53},[36,59834,59835,59837,59839,59841,59843],{"class":38,"line":4264},[36,59836,57413],{"class":49},[36,59838,53931],{"class":53},[36,59840,3501],{"class":49},[36,59842,53986],{"class":114},[36,59844,3833],{"class":53},[36,59846,59847,59850,59852,59854,59856],{"class":38,"line":4269},[36,59848,59849],{"class":49},"      line-height",[36,59851,53931],{"class":53},[36,59853,3082],{"class":49},[36,59855,53986],{"class":114},[36,59857,3833],{"class":53},[36,59859,59860],{"class":38,"line":4286},[36,59861,4721],{"class":53},[36,59863,59864],{"class":38,"line":4291},[36,59865,546],{"emptyLinePlaceholder":545},[36,59867,59868,59871],{"class":38,"line":4296},[36,59869,59870],{"class":4500},"    .qs",[36,59872,18091],{"class":53},[36,59874,59875],{"class":38,"line":4301},[36,59876,546],{"emptyLinePlaceholder":545},[36,59878,59879,59881,59883,59886,59888],{"class":38,"line":4315},[36,59880,57262],{"class":49},[36,59882,53931],{"class":53},[36,59884,59885],{"class":49},"450",[36,59887,53986],{"class":114},[36,59889,3833],{"class":53},[36,59891,59892,59894,59896,59898,59900],{"class":38,"line":4320},[36,59893,57276],{"class":49},[36,59895,53931],{"class":53},[36,59897,3082],{"class":49},[36,59899,53986],{"class":114},[36,59901,3833],{"class":53},[36,59903,59904,59907,59909,59912],{"class":38,"line":5109},[36,59905,59906],{"class":49},"      color",[36,59908,53931],{"class":53},[36,59910,59911],{"class":49},"red",[36,59913,3833],{"class":53},[36,59915,59916],{"class":38,"line":5123},[36,59917,546],{"emptyLinePlaceholder":545},[36,59919,59920],{"class":38,"line":5131},[36,59921,4721],{"class":53},[36,59923,59924],{"class":38,"line":5136},[36,59925,546],{"emptyLinePlaceholder":545},[36,59927,59928,59931],{"class":38,"line":5142},[36,59929,59930],{"class":4500},"    .btns",[36,59932,18091],{"class":53},[36,59934,59935,59937,59939,59941],{"class":38,"line":5148},[36,59936,59776],{"class":49},[36,59938,53931],{"class":53},[36,59940,54086],{"class":49},[36,59942,3833],{"class":53},[36,59944,59945],{"class":38,"line":5153},[36,59946,4721],{"class":53},[36,59948,59949],{"class":38,"line":10475},[36,59950,546],{"emptyLinePlaceholder":545},[36,59952,59953,59955,59958],{"class":38,"line":10499},[36,59954,59930],{"class":4500},[36,59956,59957],{"class":53794}," button",[36,59959,18091],{"class":53},[36,59961,59962,59964,59966,59968,59970],{"class":38,"line":10504},[36,59963,57262],{"class":49},[36,59965,53931],{"class":53},[36,59967,3493],{"class":49},[36,59969,53986],{"class":114},[36,59971,3833],{"class":53},[36,59973,59974,59976,59978,59980,59982],{"class":38,"line":10510},[36,59975,57276],{"class":49},[36,59977,53931],{"class":53},[36,59979,2957],{"class":49},[36,59981,53986],{"class":114},[36,59983,3833],{"class":53},[36,59985,59986,59988,59990,59992,59995,59997],{"class":38,"line":10537},[36,59987,57197],{"class":49},[36,59989,53931],{"class":53},[36,59991,713],{"class":49},[36,59993,59994],{"class":49}," 50",[36,59996,53986],{"class":114},[36,59998,3833],{"class":53},[36,60000,60001],{"class":38,"line":10542},[36,60002,4721],{"class":53},[36,60004,60005,60007,60009],{"class":38,"line":10548},[36,60006,54911],{"class":53},[36,60008,2602],{"class":53794},[36,60010,53801],{"class":53},[36,60012,60013,60015,60017],{"class":38,"line":10560},[36,60014,54279],{"class":53},[36,60016,53828],{"class":53794},[36,60018,53801],{"class":53},[36,60020,60021],{"class":38,"line":10572},[36,60022,546],{"emptyLinePlaceholder":545},[36,60024,60025,60027,60029],{"class":38,"line":10584},[36,60026,1507],{"class":53},[36,60028,54294],{"class":53794},[36,60030,53801],{"class":53},[36,60032,60033,60035,60037,60040,60042],{"class":38,"line":12241},[36,60034,54638],{"class":53},[36,60036,14],{"class":53794},[36,60038,60039],{"class":53},">随机点名\u003C\u002F",[36,60041,14],{"class":53794},[36,60043,53801],{"class":53},[36,60045,60046,60048,60050,60052,60054,60056],{"class":38,"line":12266},[36,60047,54638],{"class":53},[36,60049,54105],{"class":53794},[36,60051,55980],{"class":4500},[36,60053,115],{"class":53},[36,60055,55985],{"class":57},[36,60057,53801],{"class":53},[36,60059,60060,60062,60064,60067,60069],{"class":38,"line":12289},[36,60061,53835],{"class":53},[36,60063,36],{"class":53794},[36,60065,60066],{"class":53},">名字是：\u003C\u002F",[36,60068,36],{"class":53794},[36,60070,53801],{"class":53},[36,60072,60073,60075,60077,60079,60081,60084,60087,60089],{"class":38,"line":12313},[36,60074,53835],{"class":53},[36,60076,54105],{"class":53794},[36,60078,55980],{"class":4500},[36,60080,115],{"class":53},[36,60082,60083],{"class":57},"\"qs\"",[36,60085,60086],{"class":53},">这里显示姓名\u003C\u002F",[36,60088,54105],{"class":53794},[36,60090,53801],{"class":53},[36,60092,60093,60095,60097],{"class":38,"line":12318},[36,60094,54911],{"class":53},[36,60096,54105],{"class":53794},[36,60098,53801],{"class":53},[36,60100,60101,60103,60105,60107,60109,60112],{"class":38,"line":12323},[36,60102,54638],{"class":53},[36,60104,54105],{"class":53794},[36,60106,55980],{"class":4500},[36,60108,115],{"class":53},[36,60110,60111],{"class":57},"\"btns\"",[36,60113,53801],{"class":53},[36,60115,60116,60118,60120,60122,60124,60127,60130,60132],{"class":38,"line":12328},[36,60117,53835],{"class":53},[36,60119,56380],{"class":53794},[36,60121,55980],{"class":4500},[36,60123,115],{"class":53},[36,60125,60126],{"class":57},"\"start\"",[36,60128,60129],{"class":53},">开始\u003C\u002F",[36,60131,56380],{"class":53794},[36,60133,53801],{"class":53},[36,60135,60136,60138,60140,60142,60144,60147,60150,60152],{"class":38,"line":12337},[36,60137,53835],{"class":53},[36,60139,56380],{"class":53794},[36,60141,55980],{"class":4500},[36,60143,115],{"class":53},[36,60145,60146],{"class":57},"\"end\"",[36,60148,60149],{"class":53},">结束\u003C\u002F",[36,60151,56380],{"class":53794},[36,60153,53801],{"class":53},[36,60155,60156,60158,60160],{"class":38,"line":12342},[36,60157,54911],{"class":53},[36,60159,54105],{"class":53794},[36,60161,53801],{"class":53},[36,60163,60164],{"class":38,"line":12348},[36,60165,546],{"emptyLinePlaceholder":545},[36,60167,60168,60170,60172],{"class":38,"line":12369},[36,60169,54638],{"class":53},[36,60171,54307],{"class":53794},[36,60173,53801],{"class":53},[36,60175,60176],{"class":38,"line":12375},[36,60177,60178],{"class":42},"    \u002F\u002F 数据数组\n",[36,60180,60181,60183,60186,60188,60190,60193,60195,60198,60200,60203,60205,60208,60210,60213],{"class":38,"line":12389},[36,60182,13744],{"class":114},[36,60184,60185],{"class":49}," arr",[36,60187,498],{"class":114},[36,60189,54720],{"class":53},[36,60191,60192],{"class":57},"'马超'",[36,60194,14958],{"class":53},[36,60196,60197],{"class":57},"'黄忠'",[36,60199,14958],{"class":53},[36,60201,60202],{"class":57},"'赵云'",[36,60204,14958],{"class":53},[36,60206,60207],{"class":57},"'关羽'",[36,60209,14958],{"class":53},[36,60211,60212],{"class":57},"'张飞'",[36,60214,35748],{"class":53},[36,60216,60217,60219,60222,60224,60226,60228,60230,60233],{"class":38,"line":12395},[36,60218,13744],{"class":114},[36,60220,60221],{"class":49}," qs",[36,60223,498],{"class":114},[36,60225,56888],{"class":53},[36,60227,56891],{"class":4500},[36,60229,54],{"class":53},[36,60231,60232],{"class":57},"'.qs'",[36,60234,61],{"class":53},[36,60236,60237],{"class":38,"line":12422},[36,60238,60239],{"class":42},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,60241,60242,60244,60246,60248,60250,60252,60254,60257],{"class":38,"line":12431},[36,60243,13744],{"class":114},[36,60245,6715],{"class":49},[36,60247,498],{"class":114},[36,60249,56888],{"class":53},[36,60251,56891],{"class":4500},[36,60253,54],{"class":53},[36,60255,60256],{"class":57},"'.start'",[36,60258,61],{"class":53},[36,60260,60261],{"class":38,"line":12437},[36,60262,60263],{"class":42},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,60265,60266,60268,60271,60273],{"class":38,"line":12445},[36,60267,54713],{"class":114},[36,60269,60270],{"class":53}," timerId ",[36,60272,115],{"class":114},[36,60274,49830],{"class":49},[36,60276,60277],{"class":38,"line":12450},[36,60278,60279],{"class":42},"    \u002F\u002F 随机号要全局变量\n",[36,60281,60282,60284,60287,60289],{"class":38,"line":19122},[36,60283,54713],{"class":114},[36,60285,60286],{"class":53}," random ",[36,60288,115],{"class":114},[36,60290,49830],{"class":49},[36,60292,60293],{"class":38,"line":19128},[36,60294,60295],{"class":42},"    \u002F\u002F 1.1 添加点击事件\n",[36,60297,60298,60301,60304,60306,60309,60311,60313],{"class":38,"line":19151},[36,60299,60300],{"class":53},"    start.",[36,60302,60303],{"class":4500},"addEventListener",[36,60305,54],{"class":53},[36,60307,60308],{"class":57},"'click'",[36,60310,14958],{"class":53},[36,60312,56940],{"class":114},[36,60314,56943],{"class":53},[36,60316,60317,60320,60322,60324,60326,60328],{"class":38,"line":19157},[36,60318,60319],{"class":53},"      timerId ",[36,60321,115],{"class":114},[36,60323,56935],{"class":4500},[36,60325,54],{"class":53},[36,60327,56940],{"class":114},[36,60329,56943],{"class":53},[36,60331,60332],{"class":38,"line":19180},[36,60333,60334],{"class":42},"        \u002F\u002F 随机数\n",[36,60336,60337,60340,60342,60345,60348,60351,60353,60355,60357,60359],{"class":38,"line":19194},[36,60338,60339],{"class":53},"        random ",[36,60341,115],{"class":114},[36,60343,60344],{"class":4500}," parseInt",[36,60346,60347],{"class":53},"(Math.",[36,60349,60350],{"class":4500},"random",[36,60352,15573],{"class":53},[36,60354,1050],{"class":114},[36,60356,54459],{"class":53},[36,60358,54462],{"class":49},[36,60360,61],{"class":53},[36,60362,60363,60366,60368],{"class":38,"line":19214},[36,60364,60365],{"class":53},"        qs.innerHTML ",[36,60367,115],{"class":114},[36,60369,60370],{"class":53}," arr[random]\n",[36,60372,60373,60376,60378],{"class":38,"line":19220},[36,60374,60375],{"class":53},"      }, ",[36,60377,2957],{"class":49},[36,60379,61],{"class":53},[36,60381,60382],{"class":38,"line":19231},[36,60383,60384],{"class":42},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,60386,60387,60389,60392,60394,60397,60399],{"class":38,"line":19254},[36,60388,56971],{"class":114},[36,60390,60391],{"class":53}," (arr.",[36,60393,54462],{"class":49},[36,60395,60396],{"class":114}," ===",[36,60398,733],{"class":49},[36,60400,14965],{"class":53},[36,60402,60403],{"class":38,"line":19276},[36,60404,60405],{"class":42},"        \u002F\u002F start.disabled = true\n",[36,60407,60408],{"class":38,"line":19281},[36,60409,60410],{"class":42},"        \u002F\u002F end.disabled = true\n",[36,60412,60413],{"class":38,"line":19287},[36,60414,60415],{"class":42},"        \u002F\u002F 可以合起来写\n",[36,60417,60418,60421,60423,60426,60428],{"class":38,"line":19301},[36,60419,60420],{"class":53},"        start.disabled ",[36,60422,115],{"class":114},[36,60424,60425],{"class":53}," end.disabled ",[36,60427,115],{"class":114},[36,60429,60430],{"class":49}," true\n",[36,60432,60433],{"class":38,"line":19314},[36,60434,54892],{"class":53},[36,60436,60437],{"class":38,"line":19319},[36,60438,35962],{"class":53},[36,60440,60441],{"class":38,"line":19333},[36,60442,60443],{"class":42},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,60445,60446,60448,60450,60452,60454,60456,60458,60461],{"class":38,"line":19338},[36,60447,13744],{"class":114},[36,60449,6731],{"class":49},[36,60451,498],{"class":114},[36,60453,56888],{"class":53},[36,60455,56891],{"class":4500},[36,60457,54],{"class":53},[36,60459,60460],{"class":57},"'.end'",[36,60462,61],{"class":53},[36,60464,60465,60468,60470,60472,60474,60476,60478],{"class":38,"line":19344},[36,60466,60467],{"class":53},"    end.",[36,60469,60303],{"class":4500},[36,60471,54],{"class":53},[36,60473,60308],{"class":57},[36,60475,14958],{"class":53},[36,60477,56940],{"class":114},[36,60479,56943],{"class":53},[36,60481,60482,60485],{"class":38,"line":19349},[36,60483,60484],{"class":4500},"      clearInterval",[36,60486,60487],{"class":53},"(timerId)\n",[36,60489,60490],{"class":38,"line":19363},[36,60491,60492],{"class":42},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,60494,60495,60498,60501,60504,60506],{"class":38,"line":19368},[36,60496,60497],{"class":53},"      arr.",[36,60499,60500],{"class":4500},"splice",[36,60502,60503],{"class":53},"(random, ",[36,60505,707],{"class":49},[36,60507,61],{"class":53},[36,60509,60510],{"class":38,"line":19373},[36,60511,35962],{"class":53},[36,60513,60514],{"class":38,"line":19387},[36,60515,546],{"emptyLinePlaceholder":545},[36,60517,60518,60520,60522],{"class":38,"line":19399},[36,60519,54911],{"class":53},[36,60521,54307],{"class":53794},[36,60523,53801],{"class":53},[36,60525,60526,60528,60530],{"class":38,"line":19404},[36,60527,54279],{"class":53},[36,60529,54294],{"class":53794},[36,60531,53801],{"class":53},[36,60533,60534],{"class":38,"line":19417},[36,60535,546],{"emptyLinePlaceholder":545},[36,60537,60538,60540,60542],{"class":38,"line":19422},[36,60539,54279],{"class":53},[36,60541,53131],{"class":53794},[36,60543,53801],{"class":53},[19,60545,60546],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[997,60548,60550],{"id":60549},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,60552,60554],{"className":53129,"code":60553,"language":53131,"meta":31,"style":31},"\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",[33,60555,60556,60566,60580,60584,60592,60606,60626,60638,60646,60650,60658,60670,60678,60697,60714,60730,60740,60744,60752,60760,60764],{"__ignoreMap":31},[36,60557,60558,60560,60562,60564],{"class":38,"line":39},[36,60559,53791],{"class":53},[36,60561,53795],{"class":53794},[36,60563,53798],{"class":4500},[36,60565,53801],{"class":53},[36,60567,60568,60570,60572,60574,60576,60578],{"class":38,"line":46},[36,60569,1507],{"class":53},[36,60571,53131],{"class":53794},[36,60573,53810],{"class":4500},[36,60575,115],{"class":53},[36,60577,53815],{"class":57},[36,60579,53801],{"class":53},[36,60581,60582],{"class":38,"line":82},[36,60583,546],{"emptyLinePlaceholder":545},[36,60585,60586,60588,60590],{"class":38,"line":88},[36,60587,1507],{"class":53},[36,60589,53828],{"class":53794},[36,60591,53801],{"class":53},[36,60593,60594,60596,60598,60600,60602,60604],{"class":38,"line":195},[36,60595,54638],{"class":53},[36,60597,53838],{"class":53794},[36,60599,53841],{"class":4500},[36,60601,115],{"class":53},[36,60603,53846],{"class":57},[36,60605,53801],{"class":53},[36,60607,60608,60610,60612,60614,60616,60618,60620,60622,60624],{"class":38,"line":1517},[36,60609,54638],{"class":53},[36,60611,53838],{"class":53794},[36,60613,17440],{"class":4500},[36,60615,115],{"class":53},[36,60617,53885],{"class":57},[36,60619,53865],{"class":4500},[36,60621,115],{"class":53},[36,60623,53892],{"class":57},[36,60625,53801],{"class":53},[36,60627,60628,60630,60632,60634,60636],{"class":38,"line":2421},[36,60629,54638],{"class":53},[36,60631,53901],{"class":53794},[36,60633,53904],{"class":53},[36,60635,53901],{"class":53794},[36,60637,53801],{"class":53},[36,60639,60640,60642,60644],{"class":38,"line":2446},[36,60641,54279],{"class":53},[36,60643,53828],{"class":53794},[36,60645,53801],{"class":53},[36,60647,60648],{"class":38,"line":2469},[36,60649,546],{"emptyLinePlaceholder":545},[36,60651,60652,60654,60656],{"class":38,"line":2492},[36,60653,1507],{"class":53},[36,60655,54294],{"class":53794},[36,60657,53801],{"class":53},[36,60659,60660,60662,60664,60666,60668],{"class":38,"line":4150},[36,60661,54638],{"class":53},[36,60663,56380],{"class":53794},[36,60665,56386],{"class":53},[36,60667,56380],{"class":53794},[36,60669,53801],{"class":53},[36,60671,60672,60674,60676],{"class":38,"line":4155},[36,60673,54638],{"class":53},[36,60675,54307],{"class":53794},[36,60677,53801],{"class":53},[36,60679,60680,60682,60684,60686,60688,60690,60692,60695],{"class":38,"line":4161},[36,60681,13744],{"class":114},[36,60683,56883],{"class":49},[36,60685,498],{"class":114},[36,60687,56888],{"class":53},[36,60689,56891],{"class":4500},[36,60691,54],{"class":53},[36,60693,60694],{"class":57},"'button'",[36,60696,61],{"class":53},[36,60698,60699,60702,60704,60706,60708,60710,60712],{"class":38,"line":4166},[36,60700,60701],{"class":53},"    btn.",[36,60703,60303],{"class":4500},[36,60705,54],{"class":53},[36,60707,60308],{"class":57},[36,60709,14958],{"class":53},[36,60711,56940],{"class":114},[36,60713,56943],{"class":53},[36,60715,60716,60719,60721,60723,60726,60728],{"class":38,"line":4180},[36,60717,60718],{"class":114},"      const",[36,60720,4774],{"class":49},[36,60722,498],{"class":114},[36,60724,60725],{"class":53}," Math.",[36,60727,60350],{"class":4500},[36,60729,4513],{"class":53},[36,60731,60732,60735,60738],{"class":38,"line":4185},[36,60733,60734],{"class":53},"      console.",[36,60736,60737],{"class":4500},"log",[36,60739,2715],{"class":53},[36,60741,60742],{"class":38,"line":4191},[36,60743,35962],{"class":53},[36,60745,60746,60748,60750],{"class":38,"line":4212},[36,60747,54911],{"class":53},[36,60749,54307],{"class":53794},[36,60751,53801],{"class":53},[36,60753,60754,60756,60758],{"class":38,"line":4217},[36,60755,54279],{"class":53},[36,60757,54294],{"class":53794},[36,60759,53801],{"class":53},[36,60761,60762],{"class":38,"line":4231},[36,60763,546],{"emptyLinePlaceholder":545},[36,60765,60766,60768,60770],{"class":38,"line":4236},[36,60767,54279],{"class":53},[36,60769,53131],{"class":53794},[36,60771,53801],{"class":53},[19,60773,60774],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60776,60777],{},"常量不可以重新赋值",[19,60779,60780],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,60782,60784],{"className":53129,"code":60783,"language":53131,"meta":31,"style":31},"\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",[33,60785,60786,60796,60810,60814,60822,60836,60856,60868,60876,60880,60888,60900,60908,60918,60936,60952,60966,60974,60978,60986,60994,60998],{"__ignoreMap":31},[36,60787,60788,60790,60792,60794],{"class":38,"line":39},[36,60789,53791],{"class":53},[36,60791,53795],{"class":53794},[36,60793,53798],{"class":4500},[36,60795,53801],{"class":53},[36,60797,60798,60800,60802,60804,60806,60808],{"class":38,"line":46},[36,60799,1507],{"class":53},[36,60801,53131],{"class":53794},[36,60803,53810],{"class":4500},[36,60805,115],{"class":53},[36,60807,53815],{"class":57},[36,60809,53801],{"class":53},[36,60811,60812],{"class":38,"line":82},[36,60813,546],{"emptyLinePlaceholder":545},[36,60815,60816,60818,60820],{"class":38,"line":88},[36,60817,1507],{"class":53},[36,60819,53828],{"class":53794},[36,60821,53801],{"class":53},[36,60823,60824,60826,60828,60830,60832,60834],{"class":38,"line":195},[36,60825,54638],{"class":53},[36,60827,53838],{"class":53794},[36,60829,53841],{"class":4500},[36,60831,115],{"class":53},[36,60833,53846],{"class":57},[36,60835,53801],{"class":53},[36,60837,60838,60840,60842,60844,60846,60848,60850,60852,60854],{"class":38,"line":1517},[36,60839,54638],{"class":53},[36,60841,53838],{"class":53794},[36,60843,17440],{"class":4500},[36,60845,115],{"class":53},[36,60847,53885],{"class":57},[36,60849,53865],{"class":4500},[36,60851,115],{"class":53},[36,60853,53892],{"class":57},[36,60855,53801],{"class":53},[36,60857,60858,60860,60862,60864,60866],{"class":38,"line":2421},[36,60859,54638],{"class":53},[36,60861,53901],{"class":53794},[36,60863,53904],{"class":53},[36,60865,53901],{"class":53794},[36,60867,53801],{"class":53},[36,60869,60870,60872,60874],{"class":38,"line":2446},[36,60871,54279],{"class":53},[36,60873,53828],{"class":53794},[36,60875,53801],{"class":53},[36,60877,60878],{"class":38,"line":2469},[36,60879,546],{"emptyLinePlaceholder":545},[36,60881,60882,60884,60886],{"class":38,"line":2492},[36,60883,1507],{"class":53},[36,60885,54294],{"class":53794},[36,60887,53801],{"class":53},[36,60889,60890,60892,60894,60896,60898],{"class":38,"line":4150},[36,60891,54638],{"class":53},[36,60893,56380],{"class":53794},[36,60895,56386],{"class":53},[36,60897,56380],{"class":53794},[36,60899,53801],{"class":53},[36,60901,60902,60904,60906],{"class":38,"line":4155},[36,60903,54638],{"class":53},[36,60905,54307],{"class":53794},[36,60907,53801],{"class":53},[36,60909,60910,60912,60914,60916],{"class":38,"line":4161},[36,60911,13744],{"class":114},[36,60913,4774],{"class":49},[36,60915,498],{"class":114},[36,60917,1217],{"class":49},[36,60919,60920,60922,60924,60926,60928,60930,60932,60934],{"class":38,"line":4166},[36,60921,13744],{"class":114},[36,60923,56883],{"class":49},[36,60925,498],{"class":114},[36,60927,56888],{"class":53},[36,60929,56891],{"class":4500},[36,60931,54],{"class":53},[36,60933,60694],{"class":57},[36,60935,61],{"class":53},[36,60937,60938,60940,60942,60944,60946,60948,60950],{"class":38,"line":4180},[36,60939,60701],{"class":53},[36,60941,60303],{"class":4500},[36,60943,54],{"class":53},[36,60945,60308],{"class":57},[36,60947,14958],{"class":53},[36,60949,56940],{"class":114},[36,60951,56943],{"class":53},[36,60953,60954,60956,60958,60960,60962,60964],{"class":38,"line":4185},[36,60955,60718],{"class":114},[36,60957,4774],{"class":49},[36,60959,498],{"class":114},[36,60961,60725],{"class":53},[36,60963,60350],{"class":4500},[36,60965,4513],{"class":53},[36,60967,60968,60970,60972],{"class":38,"line":4191},[36,60969,60734],{"class":53},[36,60971,60737],{"class":4500},[36,60973,2715],{"class":53},[36,60975,60976],{"class":38,"line":4212},[36,60977,35962],{"class":53},[36,60979,60980,60982,60984],{"class":38,"line":4217},[36,60981,54911],{"class":53},[36,60983,54307],{"class":53794},[36,60985,53801],{"class":53},[36,60987,60988,60990,60992],{"class":38,"line":4231},[36,60989,54279],{"class":53},[36,60991,54294],{"class":53794},[36,60993,53801],{"class":53},[36,60995,60996],{"class":38,"line":4236},[36,60997,546],{"emptyLinePlaceholder":545},[36,60999,61000,61002,61004],{"class":38,"line":4264},[36,61001,54279],{"class":53},[36,61003,53131],{"class":53794},[36,61005,53801],{"class":53},[19,61007,61008],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,61010,61012],{"className":53129,"code":61011,"language":53131,"meta":31,"style":31},"\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",[33,61013,61014,61024,61038,61042,61050,61064,61084,61096,61104,61108,61116,61128,61136,61146,61164,61180,61193,61201,61205,61213,61221,61225],{"__ignoreMap":31},[36,61015,61016,61018,61020,61022],{"class":38,"line":39},[36,61017,53791],{"class":53},[36,61019,53795],{"class":53794},[36,61021,53798],{"class":4500},[36,61023,53801],{"class":53},[36,61025,61026,61028,61030,61032,61034,61036],{"class":38,"line":46},[36,61027,1507],{"class":53},[36,61029,53131],{"class":53794},[36,61031,53810],{"class":4500},[36,61033,115],{"class":53},[36,61035,53815],{"class":57},[36,61037,53801],{"class":53},[36,61039,61040],{"class":38,"line":82},[36,61041,546],{"emptyLinePlaceholder":545},[36,61043,61044,61046,61048],{"class":38,"line":88},[36,61045,1507],{"class":53},[36,61047,53828],{"class":53794},[36,61049,53801],{"class":53},[36,61051,61052,61054,61056,61058,61060,61062],{"class":38,"line":195},[36,61053,54638],{"class":53},[36,61055,53838],{"class":53794},[36,61057,53841],{"class":4500},[36,61059,115],{"class":53},[36,61061,53846],{"class":57},[36,61063,53801],{"class":53},[36,61065,61066,61068,61070,61072,61074,61076,61078,61080,61082],{"class":38,"line":1517},[36,61067,54638],{"class":53},[36,61069,53838],{"class":53794},[36,61071,17440],{"class":4500},[36,61073,115],{"class":53},[36,61075,53885],{"class":57},[36,61077,53865],{"class":4500},[36,61079,115],{"class":53},[36,61081,53892],{"class":57},[36,61083,53801],{"class":53},[36,61085,61086,61088,61090,61092,61094],{"class":38,"line":2421},[36,61087,54638],{"class":53},[36,61089,53901],{"class":53794},[36,61091,53904],{"class":53},[36,61093,53901],{"class":53794},[36,61095,53801],{"class":53},[36,61097,61098,61100,61102],{"class":38,"line":2446},[36,61099,54279],{"class":53},[36,61101,53828],{"class":53794},[36,61103,53801],{"class":53},[36,61105,61106],{"class":38,"line":2469},[36,61107,546],{"emptyLinePlaceholder":545},[36,61109,61110,61112,61114],{"class":38,"line":2492},[36,61111,1507],{"class":53},[36,61113,54294],{"class":53794},[36,61115,53801],{"class":53},[36,61117,61118,61120,61122,61124,61126],{"class":38,"line":4150},[36,61119,54638],{"class":53},[36,61121,56380],{"class":53794},[36,61123,56386],{"class":53},[36,61125,56380],{"class":53794},[36,61127,53801],{"class":53},[36,61129,61130,61132,61134],{"class":38,"line":4155},[36,61131,54638],{"class":53},[36,61133,54307],{"class":53794},[36,61135,53801],{"class":53},[36,61137,61138,61140,61142,61144],{"class":38,"line":4161},[36,61139,13744],{"class":114},[36,61141,4774],{"class":49},[36,61143,498],{"class":114},[36,61145,1217],{"class":49},[36,61147,61148,61150,61152,61154,61156,61158,61160,61162],{"class":38,"line":4166},[36,61149,13744],{"class":114},[36,61151,56883],{"class":49},[36,61153,498],{"class":114},[36,61155,56888],{"class":53},[36,61157,56891],{"class":4500},[36,61159,54],{"class":53},[36,61161,60694],{"class":57},[36,61163,61],{"class":53},[36,61165,61166,61168,61170,61172,61174,61176,61178],{"class":38,"line":4180},[36,61167,60701],{"class":53},[36,61169,60303],{"class":4500},[36,61171,54],{"class":53},[36,61173,60308],{"class":57},[36,61175,14958],{"class":53},[36,61177,56940],{"class":114},[36,61179,56943],{"class":53},[36,61181,61182,61185,61187,61189,61191],{"class":38,"line":4185},[36,61183,61184],{"class":53},"      num ",[36,61186,115],{"class":114},[36,61188,60725],{"class":53},[36,61190,60350],{"class":4500},[36,61192,4513],{"class":53},[36,61194,61195,61197,61199],{"class":38,"line":4191},[36,61196,60734],{"class":53},[36,61198,60737],{"class":4500},[36,61200,2715],{"class":53},[36,61202,61203],{"class":38,"line":4212},[36,61204,35962],{"class":53},[36,61206,61207,61209,61211],{"class":38,"line":4217},[36,61208,54911],{"class":53},[36,61210,54307],{"class":53794},[36,61212,53801],{"class":53},[36,61214,61215,61217,61219],{"class":38,"line":4231},[36,61216,54279],{"class":53},[36,61218,54294],{"class":53794},[36,61220,53801],{"class":53},[36,61222,61223],{"class":38,"line":4236},[36,61224,546],{"emptyLinePlaceholder":545},[36,61226,61227,61229,61231],{"class":38,"line":4264},[36,61228,54279],{"class":53},[36,61230,53131],{"class":53794},[36,61232,53801],{"class":53},[19,61234,61235],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[997,61237,61239],{"id":61238},"_324-事件监听版本","3.2.4 事件监听版本",[19,61241,61242],{},[4000,61243],{"alt":31,"src":61244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,61246,61247],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,61249,61250],{},"这种方式会覆盖前边的事件监听:",[26,61252,61254],{"className":53129,"code":61253,"language":53131,"meta":31,"style":31},"\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",[33,61255,61256,61266,61280,61284,61292,61306,61326,61338,61346,61350,61358,61370,61378,61396,61410,61421,61425,61437,61447,61451,61459,61467,61471],{"__ignoreMap":31},[36,61257,61258,61260,61262,61264],{"class":38,"line":39},[36,61259,53791],{"class":53},[36,61261,53795],{"class":53794},[36,61263,53798],{"class":4500},[36,61265,53801],{"class":53},[36,61267,61268,61270,61272,61274,61276,61278],{"class":38,"line":46},[36,61269,1507],{"class":53},[36,61271,53131],{"class":53794},[36,61273,53810],{"class":4500},[36,61275,115],{"class":53},[36,61277,53815],{"class":57},[36,61279,53801],{"class":53},[36,61281,61282],{"class":38,"line":82},[36,61283,546],{"emptyLinePlaceholder":545},[36,61285,61286,61288,61290],{"class":38,"line":88},[36,61287,1507],{"class":53},[36,61289,53828],{"class":53794},[36,61291,53801],{"class":53},[36,61293,61294,61296,61298,61300,61302,61304],{"class":38,"line":195},[36,61295,54638],{"class":53},[36,61297,53838],{"class":53794},[36,61299,53841],{"class":4500},[36,61301,115],{"class":53},[36,61303,53846],{"class":57},[36,61305,53801],{"class":53},[36,61307,61308,61310,61312,61314,61316,61318,61320,61322,61324],{"class":38,"line":1517},[36,61309,54638],{"class":53},[36,61311,53838],{"class":53794},[36,61313,17440],{"class":4500},[36,61315,115],{"class":53},[36,61317,53885],{"class":57},[36,61319,53865],{"class":4500},[36,61321,115],{"class":53},[36,61323,53892],{"class":57},[36,61325,53801],{"class":53},[36,61327,61328,61330,61332,61334,61336],{"class":38,"line":2421},[36,61329,54638],{"class":53},[36,61331,53901],{"class":53794},[36,61333,53904],{"class":53},[36,61335,53901],{"class":53794},[36,61337,53801],{"class":53},[36,61339,61340,61342,61344],{"class":38,"line":2446},[36,61341,54279],{"class":53},[36,61343,53828],{"class":53794},[36,61345,53801],{"class":53},[36,61347,61348],{"class":38,"line":2469},[36,61349,546],{"emptyLinePlaceholder":545},[36,61351,61352,61354,61356],{"class":38,"line":2492},[36,61353,1507],{"class":53},[36,61355,54294],{"class":53794},[36,61357,53801],{"class":53},[36,61359,61360,61362,61364,61366,61368],{"class":38,"line":4150},[36,61361,54638],{"class":53},[36,61363,56380],{"class":53794},[36,61365,56386],{"class":53},[36,61367,56380],{"class":53794},[36,61369,53801],{"class":53},[36,61371,61372,61374,61376],{"class":38,"line":4155},[36,61373,54638],{"class":53},[36,61375,54307],{"class":53794},[36,61377,53801],{"class":53},[36,61379,61380,61382,61384,61386,61388,61390,61392,61394],{"class":38,"line":4161},[36,61381,13744],{"class":114},[36,61383,56883],{"class":49},[36,61385,498],{"class":114},[36,61387,56888],{"class":53},[36,61389,56891],{"class":4500},[36,61391,54],{"class":53},[36,61393,60694],{"class":57},[36,61395,61],{"class":53},[36,61397,61398,61400,61403,61405,61408],{"class":38,"line":4166},[36,61399,60701],{"class":53},[36,61401,61402],{"class":4500},"onclick",[36,61404,498],{"class":114},[36,61406,61407],{"class":114}," function",[36,61409,56943],{"class":53},[36,61411,61412,61415,61417,61419],{"class":38,"line":4180},[36,61413,61414],{"class":4500},"      alert",[36,61416,54],{"class":53},[36,61418,3151],{"class":49},[36,61420,61],{"class":53},[36,61422,61423],{"class":38,"line":4185},[36,61424,4721],{"class":53},[36,61426,61427,61429,61431,61433,61435],{"class":38,"line":4191},[36,61428,60701],{"class":53},[36,61430,61402],{"class":4500},[36,61432,498],{"class":114},[36,61434,61407],{"class":114},[36,61436,56943],{"class":53},[36,61438,61439,61441,61443,61445],{"class":38,"line":4212},[36,61440,61414],{"class":4500},[36,61442,54],{"class":53},[36,61444,3426],{"class":49},[36,61446,61],{"class":53},[36,61448,61449],{"class":38,"line":4217},[36,61450,4721],{"class":53},[36,61452,61453,61455,61457],{"class":38,"line":4231},[36,61454,54911],{"class":53},[36,61456,54307],{"class":53794},[36,61458,53801],{"class":53},[36,61460,61461,61463,61465],{"class":38,"line":4236},[36,61462,54279],{"class":53},[36,61464,54294],{"class":53794},[36,61466,53801],{"class":53},[36,61468,61469],{"class":38,"line":4264},[36,61470,546],{"emptyLinePlaceholder":545},[36,61472,61473,61475,61477],{"class":38,"line":4269},[36,61474,54279],{"class":53},[36,61476,53131],{"class":53794},[36,61478,53801],{"class":53},[19,61480,61481],{},"只要点击就输出结果为22,前边11被覆盖了",[26,61483,61485],{"className":53129,"code":61484,"language":53131,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,61486,61487,61492,61497,61501,61506,61511],{"__ignoreMap":31},[36,61488,61489],{"class":38,"line":39},[36,61490,61491],{"class":53},"  btn.addEventListener('click', function () {\n",[36,61493,61494],{"class":38,"line":46},[36,61495,61496],{"class":53},"      alert(11)\n",[36,61498,61499],{"class":38,"line":82},[36,61500,35962],{"class":53},[36,61502,61503],{"class":38,"line":88},[36,61504,61505],{"class":53},"    btn.addEventListener('click', function () {\n",[36,61507,61508],{"class":38,"line":195},[36,61509,61510],{"class":53},"      alert(22)\n",[36,61512,61513],{"class":38,"line":1517},[36,61514,35962],{"class":53},[19,61516,61517],{},"点击第一次输出11,第二次点击为22",[997,61519,61521],{"id":61520},"_325-事件类型","3.2.5 事件类型",[19,61523,61524],{},[4000,61525],{"alt":31,"src":61526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24515,61528,61530],{"id":61529},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61532,61533],{},"补充知识:",[19,61535,61536],{},"轮播图自动播放模块,可以使用",[19,61538,61539],{},"let timerId = setInterval(function () {",[19,61541,61542],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61544,61545],{},"用js方法模拟进行点击事件,click必须加()",[19,61547,61548],{},"next.click()",[19,61550,61551],{},"}, 1000)",[19,61553,61554],{},[4000,61555],{"alt":31,"src":61556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,61558,61560],{"className":55561,"code":61559,"language":55563,"meta":31,"style":31},"\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",[33,61561,61562,61566,61576,61590,61594,61602,61617,61637,61657,61670,61678,61683,61688,61692,61696,61701,61706,61711,61716,61720,61724,61729,61734,61739,61743,61747,61752,61756,61761,61766,61770,61774,61779,61784,61789,61794,61799,61803,61807,61812,61817,61822,61827,61832,61836,61840,61845,61850,61855,61860,61865,61870,61875,61880,61885,61890,61894,61898,61903,61908,61912,61916,61921,61926,61930,61935,61940,61944,61948,61953,61957,61962,61967,61971,61976,61980,61984,61989,61994,61999,62004,62009,62014,62019,62023,62027,62031,62036,62041,62046,62051,62055,62063,62071,62075,62083,62098,62112,62133,62141,62155,62168,62183,62202,62214,62226,62238,62250,62262,62274,62286,62294,62309,62333,62357,62365,62373,62381,62389,62394,62399,62404,62409,62414,62419,62424,62429,62434,62439,62443,62448,62453,62458,62463,62468,62473,62478,62483,62488,62492,62497,62502,62507,62512,62517,62522,62527,62532,62537,62542,62547,62552,62556,62560,62565,62570,62575,62579,62584,62589,62594,62599,62604,62608,62613,62617,62621,62625,62629,62633,62637,62642,62647,62652,62657,62662,62667,62672,62677,62682,62686,62690,62695,62700,62705,62710,62715,62719,62724,62729,62734,62739,62744,62749,62753,62757,62762,62766,62771,62775,62780,62785,62790,62795,62800,62805,62809,62817,62825,62829],{"__ignoreMap":31},[36,61563,61564],{"class":38,"line":39},[36,61565,546],{"emptyLinePlaceholder":545},[36,61567,61568,61570,61572,61574],{"class":38,"line":46},[36,61569,53791],{"class":53},[36,61571,53795],{"class":114},[36,61573,53798],{"class":49},[36,61575,53801],{"class":53},[36,61577,61578,61580,61582,61584,61586,61588],{"class":38,"line":82},[36,61579,1507],{"class":53},[36,61581,53131],{"class":53794},[36,61583,53810],{"class":4500},[36,61585,115],{"class":53},[36,61587,53815],{"class":57},[36,61589,53801],{"class":53},[36,61591,61592],{"class":38,"line":88},[36,61593,546],{"emptyLinePlaceholder":545},[36,61595,61596,61598,61600],{"class":38,"line":195},[36,61597,1507],{"class":53},[36,61599,53828],{"class":53794},[36,61601,53801],{"class":53},[36,61603,61604,61606,61608,61610,61612,61614],{"class":38,"line":1517},[36,61605,54638],{"class":53},[36,61607,53838],{"class":53794},[36,61609,53841],{"class":4500},[36,61611,115],{"class":53},[36,61613,53846],{"class":57},[36,61615,61616],{"class":53}," \u002F>\n",[36,61618,61619,61621,61623,61625,61627,61629,61631,61633,61635],{"class":38,"line":2421},[36,61620,54638],{"class":53},[36,61622,53838],{"class":53794},[36,61624,53857],{"class":4500},[36,61626,115],{"class":53},[36,61628,53862],{"class":57},[36,61630,53865],{"class":4500},[36,61632,115],{"class":53},[36,61634,53870],{"class":57},[36,61636,61616],{"class":53},[36,61638,61639,61641,61643,61645,61647,61649,61651,61653,61655],{"class":38,"line":2446},[36,61640,54638],{"class":53},[36,61642,53838],{"class":53794},[36,61644,17440],{"class":4500},[36,61646,115],{"class":53},[36,61648,53885],{"class":57},[36,61650,53865],{"class":4500},[36,61652,115],{"class":53},[36,61654,53892],{"class":57},[36,61656,61616],{"class":53},[36,61658,61659,61661,61663,61666,61668],{"class":38,"line":2469},[36,61660,54638],{"class":53},[36,61662,53901],{"class":53794},[36,61664,61665],{"class":53},">轮播图点击切换\u003C\u002F",[36,61667,53901],{"class":53794},[36,61669,53801],{"class":53},[36,61671,61672,61674,61676],{"class":38,"line":2492},[36,61673,54638],{"class":53},[36,61675,2602],{"class":53794},[36,61677,53801],{"class":53},[36,61679,61680],{"class":38,"line":4150},[36,61681,61682],{"class":53},"    * {\n",[36,61684,61685],{"class":38,"line":4155},[36,61686,61687],{"class":53},"      box-sizing: border-box;\n",[36,61689,61690],{"class":38,"line":4161},[36,61691,4721],{"class":53},[36,61693,61694],{"class":38,"line":4166},[36,61695,546],{"emptyLinePlaceholder":545},[36,61697,61698],{"class":38,"line":4180},[36,61699,61700],{"class":53},"    .slider {\n",[36,61702,61703],{"class":38,"line":4185},[36,61704,61705],{"class":53},"      width: 560px;\n",[36,61707,61708],{"class":38,"line":4191},[36,61709,61710],{"class":53},"      height: 400px;\n",[36,61712,61713],{"class":38,"line":4212},[36,61714,61715],{"class":53},"      overflow: hidden;\n",[36,61717,61718],{"class":38,"line":4217},[36,61719,4721],{"class":53},[36,61721,61722],{"class":38,"line":4231},[36,61723,546],{"emptyLinePlaceholder":545},[36,61725,61726],{"class":38,"line":4236},[36,61727,61728],{"class":53},"    .slider-wrapper {\n",[36,61730,61731],{"class":38,"line":4264},[36,61732,61733],{"class":53},"      width: 100%;\n",[36,61735,61736],{"class":38,"line":4269},[36,61737,61738],{"class":53},"      height: 320px;\n",[36,61740,61741],{"class":38,"line":4286},[36,61742,4721],{"class":53},[36,61744,61745],{"class":38,"line":4291},[36,61746,546],{"emptyLinePlaceholder":545},[36,61748,61749],{"class":38,"line":4296},[36,61750,61751],{"class":53},"    .slider-wrapper img {\n",[36,61753,61754],{"class":38,"line":4301},[36,61755,61733],{"class":53},[36,61757,61758],{"class":38,"line":4315},[36,61759,61760],{"class":53},"      height: 100%;\n",[36,61762,61763],{"class":38,"line":4320},[36,61764,61765],{"class":53},"      display: block;\n",[36,61767,61768],{"class":38,"line":5109},[36,61769,4721],{"class":53},[36,61771,61772],{"class":38,"line":5123},[36,61773,546],{"emptyLinePlaceholder":545},[36,61775,61776],{"class":38,"line":5131},[36,61777,61778],{"class":53},"    .slider-footer {\n",[36,61780,61781],{"class":38,"line":5136},[36,61782,61783],{"class":53},"      height: 80px;\n",[36,61785,61786],{"class":38,"line":5142},[36,61787,61788],{"class":53},"      background-color: rgb(100, 67, 68);\n",[36,61790,61791],{"class":38,"line":5148},[36,61792,61793],{"class":53},"      padding: 12px 12px 0 12px;\n",[36,61795,61796],{"class":38,"line":5153},[36,61797,61798],{"class":53},"      position: relative;\n",[36,61800,61801],{"class":38,"line":10475},[36,61802,4721],{"class":53},[36,61804,61805],{"class":38,"line":10499},[36,61806,546],{"emptyLinePlaceholder":545},[36,61808,61809],{"class":38,"line":10504},[36,61810,61811],{"class":53},"    .slider-footer .toggle {\n",[36,61813,61814],{"class":38,"line":10510},[36,61815,61816],{"class":53},"      position: absolute;\n",[36,61818,61819],{"class":38,"line":10537},[36,61820,61821],{"class":53},"      right: 0;\n",[36,61823,61824],{"class":38,"line":10542},[36,61825,61826],{"class":53},"      top: 12px;\n",[36,61828,61829],{"class":38,"line":10548},[36,61830,61831],{"class":53},"      display: flex;\n",[36,61833,61834],{"class":38,"line":10560},[36,61835,4721],{"class":53},[36,61837,61838],{"class":38,"line":10572},[36,61839,546],{"emptyLinePlaceholder":545},[36,61841,61842],{"class":38,"line":10584},[36,61843,61844],{"class":53},"    .slider-footer .toggle button {\n",[36,61846,61847],{"class":38,"line":12241},[36,61848,61849],{"class":53},"      margin-right: 12px;\n",[36,61851,61852],{"class":38,"line":12266},[36,61853,61854],{"class":53},"      width: 28px;\n",[36,61856,61857],{"class":38,"line":12289},[36,61858,61859],{"class":53},"      height: 28px;\n",[36,61861,61862],{"class":38,"line":12313},[36,61863,61864],{"class":53},"      appearance: none;\n",[36,61866,61867],{"class":38,"line":12318},[36,61868,61869],{"class":53},"      border: none;\n",[36,61871,61872],{"class":38,"line":12323},[36,61873,61874],{"class":53},"      background: rgba(255, 255, 255, 0.1);\n",[36,61876,61877],{"class":38,"line":12328},[36,61878,61879],{"class":53},"      color: #fff;\n",[36,61881,61882],{"class":38,"line":12337},[36,61883,61884],{"class":53},"      border-radius: 4px;\n",[36,61886,61887],{"class":38,"line":12342},[36,61888,61889],{"class":53},"      cursor: pointer;\n",[36,61891,61892],{"class":38,"line":12348},[36,61893,4721],{"class":53},[36,61895,61896],{"class":38,"line":12369},[36,61897,546],{"emptyLinePlaceholder":545},[36,61899,61900],{"class":38,"line":12375},[36,61901,61902],{"class":53},"    .slider-footer .toggle button:hover {\n",[36,61904,61905],{"class":38,"line":12389},[36,61906,61907],{"class":53},"      background: rgba(255, 255, 255, 0.2);\n",[36,61909,61910],{"class":38,"line":12395},[36,61911,4721],{"class":53},[36,61913,61914],{"class":38,"line":12422},[36,61915,546],{"emptyLinePlaceholder":545},[36,61917,61918],{"class":38,"line":12431},[36,61919,61920],{"class":53},"    .slider-footer p {\n",[36,61922,61923],{"class":38,"line":12437},[36,61924,61925],{"class":53},"      margin: 0;\n",[36,61927,61928],{"class":38,"line":12445},[36,61929,61879],{"class":53},[36,61931,61932],{"class":38,"line":12450},[36,61933,61934],{"class":53},"      font-size: 18px;\n",[36,61936,61937],{"class":38,"line":19122},[36,61938,61939],{"class":53},"      margin-bottom: 10px;\n",[36,61941,61942],{"class":38,"line":19128},[36,61943,4721],{"class":53},[36,61945,61946],{"class":38,"line":19151},[36,61947,546],{"emptyLinePlaceholder":545},[36,61949,61950],{"class":38,"line":19157},[36,61951,61952],{"class":53},"    .slider-indicator {\n",[36,61954,61955],{"class":38,"line":19180},[36,61956,61925],{"class":53},[36,61958,61959],{"class":38,"line":19194},[36,61960,61961],{"class":53},"      padding: 0;\n",[36,61963,61964],{"class":38,"line":19214},[36,61965,61966],{"class":53},"      list-style: none;\n",[36,61968,61969],{"class":38,"line":19220},[36,61970,61831],{"class":53},[36,61972,61973],{"class":38,"line":19231},[36,61974,61975],{"class":53},"      align-items: center;\n",[36,61977,61978],{"class":38,"line":19254},[36,61979,4721],{"class":53},[36,61981,61982],{"class":38,"line":19276},[36,61983,546],{"emptyLinePlaceholder":545},[36,61985,61986],{"class":38,"line":19281},[36,61987,61988],{"class":53},"    .slider-indicator li {\n",[36,61990,61991],{"class":38,"line":19287},[36,61992,61993],{"class":53},"      width: 8px;\n",[36,61995,61996],{"class":38,"line":19301},[36,61997,61998],{"class":53},"      height: 8px;\n",[36,62000,62001],{"class":38,"line":19314},[36,62002,62003],{"class":53},"      margin: 4px;\n",[36,62005,62006],{"class":38,"line":19319},[36,62007,62008],{"class":53},"      border-radius: 50%;\n",[36,62010,62011],{"class":38,"line":19333},[36,62012,62013],{"class":53},"      background: #fff;\n",[36,62015,62016],{"class":38,"line":19338},[36,62017,62018],{"class":53},"      opacity: 0.4;\n",[36,62020,62021],{"class":38,"line":19344},[36,62022,61889],{"class":53},[36,62024,62025],{"class":38,"line":19349},[36,62026,4721],{"class":53},[36,62028,62029],{"class":38,"line":19363},[36,62030,546],{"emptyLinePlaceholder":545},[36,62032,62033],{"class":38,"line":19368},[36,62034,62035],{"class":53},"    .slider-indicator li.active {\n",[36,62037,62038],{"class":38,"line":19373},[36,62039,62040],{"class":53},"      width: 12px;\n",[36,62042,62043],{"class":38,"line":19387},[36,62044,62045],{"class":53},"      height: 12px;\n",[36,62047,62048],{"class":38,"line":19399},[36,62049,62050],{"class":53},"      opacity: 1;\n",[36,62052,62053],{"class":38,"line":19404},[36,62054,4721],{"class":53},[36,62056,62057,62059,62061],{"class":38,"line":19417},[36,62058,54911],{"class":53},[36,62060,2602],{"class":53794},[36,62062,53801],{"class":53},[36,62064,62065,62067,62069],{"class":38,"line":19422},[36,62066,54279],{"class":53},[36,62068,53828],{"class":53794},[36,62070,53801],{"class":53},[36,62072,62073],{"class":38,"line":19427},[36,62074,546],{"emptyLinePlaceholder":545},[36,62076,62077,62079,62081],{"class":38,"line":19432},[36,62078,1507],{"class":53},[36,62080,54294],{"class":53794},[36,62082,53801],{"class":53},[36,62084,62085,62087,62089,62091,62093,62096],{"class":38,"line":19445},[36,62086,54638],{"class":53},[36,62088,54105],{"class":53794},[36,62090,55980],{"class":4500},[36,62092,115],{"class":53},[36,62094,62095],{"class":57},"\"slider\"",[36,62097,53801],{"class":53},[36,62099,62100,62102,62104,62106,62108,62110],{"class":38,"line":19450},[36,62101,53835],{"class":53},[36,62103,54105],{"class":53794},[36,62105,55980],{"class":4500},[36,62107,115],{"class":53},[36,62109,57718],{"class":57},[36,62111,53801],{"class":53},[36,62113,62114,62116,62118,62120,62122,62125,62127,62129,62131],{"class":38,"line":35135},[36,62115,57725],{"class":53},[36,62117,4000],{"class":53794},[36,62119,57730],{"class":4500},[36,62121,115],{"class":53},[36,62123,62124],{"class":57},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,62126,57738],{"class":4500},[36,62128,115],{"class":53},[36,62130,10179],{"class":57},[36,62132,61616],{"class":53},[36,62134,62135,62137,62139],{"class":38,"line":35141},[36,62136,54270],{"class":53},[36,62138,54105],{"class":53794},[36,62140,53801],{"class":53},[36,62142,62143,62145,62147,62149,62151,62153],{"class":38,"line":35147},[36,62144,53835],{"class":53},[36,62146,54105],{"class":53794},[36,62148,55980],{"class":4500},[36,62150,115],{"class":53},[36,62152,57765],{"class":57},[36,62154,53801],{"class":53},[36,62156,62157,62159,62161,62164,62166],{"class":38,"line":35153},[36,62158,57725],{"class":53},[36,62160,19],{"class":53794},[36,62162,62163],{"class":53},">对人类来说会不会太超前了？\u003C\u002F",[36,62165,19],{"class":53794},[36,62167,53801],{"class":53},[36,62169,62170,62172,62174,62176,62178,62181],{"class":38,"line":35159},[36,62171,57725],{"class":53},[36,62173,3680],{"class":53794},[36,62175,55980],{"class":4500},[36,62177,115],{"class":53},[36,62179,62180],{"class":57},"\"slider-indicator\"",[36,62182,53801],{"class":53},[36,62184,62185,62187,62189,62191,62193,62196,62198,62200],{"class":38,"line":35170},[36,62186,57793],{"class":53},[36,62188,436],{"class":53794},[36,62190,55980],{"class":4500},[36,62192,115],{"class":53},[36,62194,62195],{"class":57},"\"active\"",[36,62197,57805],{"class":53},[36,62199,436],{"class":53794},[36,62201,53801],{"class":53},[36,62203,62204,62206,62208,62210,62212],{"class":38,"line":35176},[36,62205,57793],{"class":53},[36,62207,436],{"class":53794},[36,62209,57805],{"class":53},[36,62211,436],{"class":53794},[36,62213,53801],{"class":53},[36,62215,62216,62218,62220,62222,62224],{"class":38,"line":35196},[36,62217,57793],{"class":53},[36,62219,436],{"class":53794},[36,62221,57805],{"class":53},[36,62223,436],{"class":53794},[36,62225,53801],{"class":53},[36,62227,62228,62230,62232,62234,62236],{"class":38,"line":35202},[36,62229,57793],{"class":53},[36,62231,436],{"class":53794},[36,62233,57805],{"class":53},[36,62235,436],{"class":53794},[36,62237,53801],{"class":53},[36,62239,62240,62242,62244,62246,62248],{"class":38,"line":35213},[36,62241,57793],{"class":53},[36,62243,436],{"class":53794},[36,62245,57805],{"class":53},[36,62247,436],{"class":53794},[36,62249,53801],{"class":53},[36,62251,62252,62254,62256,62258,62260],{"class":38,"line":35219},[36,62253,57793],{"class":53},[36,62255,436],{"class":53794},[36,62257,57805],{"class":53},[36,62259,436],{"class":53794},[36,62261,53801],{"class":53},[36,62263,62264,62266,62268,62270,62272],{"class":38,"line":35225},[36,62265,57793],{"class":53},[36,62267,436],{"class":53794},[36,62269,57805],{"class":53},[36,62271,436],{"class":53794},[36,62273,53801],{"class":53},[36,62275,62276,62278,62280,62282,62284],{"class":38,"line":35231},[36,62277,57793],{"class":53},[36,62279,436],{"class":53794},[36,62281,57805],{"class":53},[36,62283,436],{"class":53794},[36,62285,53801],{"class":53},[36,62287,62288,62290,62292],{"class":38,"line":35237},[36,62289,57898],{"class":53},[36,62291,3680],{"class":53794},[36,62293,53801],{"class":53},[36,62295,62296,62298,62300,62302,62304,62307],{"class":38,"line":35243},[36,62297,57725],{"class":53},[36,62299,54105],{"class":53794},[36,62301,55980],{"class":4500},[36,62303,115],{"class":53},[36,62305,62306],{"class":57},"\"toggle\"",[36,62308,53801],{"class":53},[36,62310,62311,62313,62315,62317,62319,62322,62324,62327,62329,62331],{"class":38,"line":35249},[36,62312,57793],{"class":53},[36,62314,56380],{"class":53794},[36,62316,55980],{"class":4500},[36,62318,115],{"class":53},[36,62320,62321],{"class":57},"\"prev\"",[36,62323,3633],{"class":53},[36,62325,62326],{"class":49},"&lt;",[36,62328,54279],{"class":53},[36,62330,56380],{"class":53794},[36,62332,53801],{"class":53},[36,62334,62335,62337,62339,62341,62343,62346,62348,62351,62353,62355],{"class":38,"line":35255},[36,62336,57793],{"class":53},[36,62338,56380],{"class":53794},[36,62340,55980],{"class":4500},[36,62342,115],{"class":53},[36,62344,62345],{"class":57},"\"next\"",[36,62347,3633],{"class":53},[36,62349,62350],{"class":49},"&gt;",[36,62352,54279],{"class":53},[36,62354,56380],{"class":53794},[36,62356,53801],{"class":53},[36,62358,62359,62361,62363],{"class":38,"line":35275},[36,62360,57898],{"class":53},[36,62362,54105],{"class":53794},[36,62364,53801],{"class":53},[36,62366,62367,62369,62371],{"class":38,"line":35281},[36,62368,54270],{"class":53},[36,62370,54105],{"class":53794},[36,62372,53801],{"class":53},[36,62374,62375,62377,62379],{"class":38,"line":35297},[36,62376,54911],{"class":53},[36,62378,54105],{"class":53794},[36,62380,53801],{"class":53},[36,62382,62383,62385,62387],{"class":38,"line":35303},[36,62384,54638],{"class":53},[36,62386,54307],{"class":53794},[36,62388,53801],{"class":53},[36,62390,62391],{"class":38,"line":35317},[36,62392,62393],{"class":53},"    \u002F\u002F 1. 初始数据\n",[36,62395,62396],{"class":38,"line":35323},[36,62397,62398],{"class":53},"    const data = [\n",[36,62400,62401],{"class":38,"line":35338},[36,62402,62403],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,62405,62406],{"class":38,"line":35344},[36,62407,62408],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,62410,62411],{"class":38,"line":35353},[36,62412,62413],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,62415,62416],{"class":38,"line":35359},[36,62417,62418],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,62420,62421],{"class":38,"line":35368},[36,62422,62423],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,62425,62426],{"class":38,"line":35374},[36,62427,62428],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,62430,62431],{"class":38,"line":35380},[36,62432,62433],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,62435,62436],{"class":38,"line":35389},[36,62437,62438],{"class":53},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,62440,62441],{"class":38,"line":35395},[36,62442,55603],{"class":53},[36,62444,62445],{"class":38,"line":35406},[36,62446,62447],{"class":53},"    \u002F\u002F 获取元素\n",[36,62449,62450],{"class":38,"line":35412},[36,62451,62452],{"class":53},"    const img = document.querySelector('.slider-wrapper img')\n",[36,62454,62455],{"class":38,"line":35431},[36,62456,62457],{"class":53},"    const p = document.querySelector('.slider-footer p')\n",[36,62459,62460],{"class":38,"line":35437},[36,62461,62462],{"class":53},"    const footer = document.querySelector('.slider-footer')\n",[36,62464,62465],{"class":38,"line":35448},[36,62466,62467],{"class":53},"    \u002F\u002F 1. 右按钮业务\n",[36,62469,62470],{"class":38,"line":35454},[36,62471,62472],{"class":53},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,62474,62475],{"class":38,"line":35474},[36,62476,62477],{"class":53},"    const next = document.querySelector('.next')\n",[36,62479,62480],{"class":38,"line":35490},[36,62481,62482],{"class":53},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,62484,62485],{"class":38,"line":35496},[36,62486,62487],{"class":53},"    \u002F\u002F 1.2 注册点击事件\n",[36,62489,62490],{"class":38,"line":35510},[36,62491,546],{"emptyLinePlaceholder":545},[36,62493,62494],{"class":38,"line":35516},[36,62495,62496],{"class":53},"    next.addEventListener('click', function () {\n",[36,62498,62499],{"class":38,"line":35522},[36,62500,62501],{"class":53},"      \u002F\u002F console.log(11)\n",[36,62503,62504],{"class":38,"line":35533},[36,62505,62506],{"class":53},"      i++\n",[36,62508,62509],{"class":38,"line":35539},[36,62510,62511],{"class":53},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,62513,62514],{"class":38,"line":35545},[36,62515,62516],{"class":53},"      \u002F\u002F if (i >= 8) {\n",[36,62518,62519],{"class":38,"line":35555},[36,62520,62521],{"class":53},"      \u002F\u002F   i = 0\n",[36,62523,62524],{"class":38,"line":35561},[36,62525,62526],{"class":53},"      \u002F\u002F }\n",[36,62528,62529],{"class":38,"line":35572},[36,62530,62531],{"class":53},"      i = i >= data.length ? 0 : i\n",[36,62533,62534],{"class":38,"line":35578},[36,62535,62536],{"class":53},"      \u002F\u002F 1.3 得到对应的对象\n",[36,62538,62539],{"class":38,"line":35588},[36,62540,62541],{"class":53},"      \u002F\u002F console.log(data[i])\n",[36,62543,62544],{"class":38,"line":35593},[36,62545,62546],{"class":53},"      \u002F\u002F 调用函数\n",[36,62548,62549],{"class":38,"line":35599},[36,62550,62551],{"class":53},"      toggle()\n",[36,62553,62554],{"class":38,"line":35648},[36,62555,35962],{"class":53},[36,62557,62558],{"class":38,"line":35695},[36,62559,546],{"emptyLinePlaceholder":545},[36,62561,62562],{"class":38,"line":35700},[36,62563,62564],{"class":53},"    \u002F\u002F 2. 左侧按钮业务\n",[36,62566,62567],{"class":38,"line":35706},[36,62568,62569],{"class":53},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,62571,62572],{"class":38,"line":35725},[36,62573,62574],{"class":53},"    const prev = document.querySelector('.prev')\n",[36,62576,62577],{"class":38,"line":35731},[36,62578,62487],{"class":53},[36,62580,62581],{"class":38,"line":35751},[36,62582,62583],{"class":53},"    prev.addEventListener('click', function () {\n",[36,62585,62586],{"class":38,"line":35757},[36,62587,62588],{"class":53},"      i--\n",[36,62590,62591],{"class":38,"line":35763},[36,62592,62593],{"class":53},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,62595,62596],{"class":38,"line":35773},[36,62597,62598],{"class":53},"      \u002F\u002F if (i \u003C 0) {\n",[36,62600,62601],{"class":38,"line":35778},[36,62602,62603],{"class":53},"      \u002F\u002F   i = 7\n",[36,62605,62606],{"class":38,"line":35784},[36,62607,62526],{"class":53},[36,62609,62610],{"class":38,"line":35800},[36,62611,62612],{"class":53},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,62614,62615],{"class":38,"line":35844},[36,62616,62536],{"class":53},[36,62618,62619],{"class":38,"line":35850},[36,62620,62541],{"class":53},[36,62622,62623],{"class":38,"line":35856},[36,62624,62546],{"class":53},[36,62626,62627],{"class":38,"line":35862},[36,62628,62551],{"class":53},[36,62630,62631],{"class":38,"line":35873},[36,62632,35962],{"class":53},[36,62634,62635],{"class":38,"line":35879},[36,62636,546],{"emptyLinePlaceholder":545},[36,62638,62639],{"class":38,"line":35885},[36,62640,62641],{"class":53},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,62643,62644],{"class":38,"line":35891},[36,62645,62646],{"class":53},"    function toggle() {\n",[36,62648,62649],{"class":38,"line":35909},[36,62650,62651],{"class":53},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,62653,62654],{"class":38,"line":35923},[36,62655,62656],{"class":53},"      img.src = data[i].url\n",[36,62658,62659],{"class":38,"line":35932},[36,62660,62661],{"class":53},"      p.innerHTML = data[i].title\n",[36,62663,62664],{"class":38,"line":35941},[36,62665,62666],{"class":53},"      footer.style.backgroundColor = data[i].color\n",[36,62668,62669],{"class":38,"line":35950},[36,62670,62671],{"class":53},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,62673,62674],{"class":38,"line":35959},[36,62675,62676],{"class":53},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,62678,62679],{"class":38,"line":35965},[36,62680,62681],{"class":53},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,62683,62684],{"class":38,"line":35971},[36,62685,4721],{"class":53},[36,62687,62688],{"class":38,"line":35979},[36,62689,546],{"emptyLinePlaceholder":545},[36,62691,62692],{"class":38,"line":35984},[36,62693,62694],{"class":53},"    \u002F\u002F 3. 自动播放模块\n",[36,62696,62697],{"class":38,"line":35990},[36,62698,62699],{"class":53},"    let timerId = setInterval(function () {\n",[36,62701,62702],{"class":38,"line":36001},[36,62703,62704],{"class":53},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,62706,62707],{"class":38,"line":36007},[36,62708,62709],{"class":53},"      next.click()\n",[36,62711,62712],{"class":38,"line":36027},[36,62713,62714],{"class":53},"    }, 1000)\n",[36,62716,62717],{"class":38,"line":36033},[36,62718,546],{"emptyLinePlaceholder":545},[36,62720,62721],{"class":38,"line":36039},[36,62722,62723],{"class":53},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,62725,62726],{"class":38,"line":36045},[36,62727,62728],{"class":53},"    const slider = document.querySelector('.slider')\n",[36,62730,62731],{"class":38,"line":36062},[36,62732,62733],{"class":53},"    \u002F\u002F 注册事件\n",[36,62735,62736],{"class":38,"line":36068},[36,62737,62738],{"class":53},"    slider.addEventListener('mouseenter', function () {\n",[36,62740,62741],{"class":38,"line":36074},[36,62742,62743],{"class":53},"      \u002F\u002F 停止定时器\n",[36,62745,62746],{"class":38,"line":36080},[36,62747,62748],{"class":53},"      clearInterval(timerId)\n",[36,62750,62751],{"class":38,"line":36086},[36,62752,35962],{"class":53},[36,62754,62755],{"class":38,"line":36092},[36,62756,546],{"emptyLinePlaceholder":545},[36,62758,62759],{"class":38,"line":36119},[36,62760,62761],{"class":53},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,62763,62764],{"class":38,"line":36143},[36,62765,62733],{"class":53},[36,62767,62768],{"class":38,"line":36149},[36,62769,62770],{"class":53},"    slider.addEventListener('mouseleave', function () {\n",[36,62772,62773],{"class":38,"line":36155},[36,62774,62743],{"class":53},[36,62776,62777],{"class":38,"line":36161},[36,62778,62779],{"class":53},"      if (timerId) clearInterval(timerId)\n",[36,62781,62782],{"class":38,"line":36172},[36,62783,62784],{"class":53},"      \u002F\u002F 开启定时器\n",[36,62786,62787],{"class":38,"line":36183},[36,62788,62789],{"class":53},"      timerId = setInterval(function () {\n",[36,62791,62792],{"class":38,"line":36189},[36,62793,62794],{"class":53},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,62796,62797],{"class":38,"line":36206},[36,62798,62799],{"class":53},"        next.click()\n",[36,62801,62802],{"class":38,"line":36229},[36,62803,62804],{"class":53},"      }, 1000)\n",[36,62806,62807],{"class":38,"line":36252},[36,62808,35962],{"class":53},[36,62810,62811,62813,62815],{"class":38,"line":36258},[36,62812,54911],{"class":53},[36,62814,54307],{"class":53794},[36,62816,53801],{"class":53},[36,62818,62819,62821,62823],{"class":38,"line":36263},[36,62820,54279],{"class":53},[36,62822,54294],{"class":53794},[36,62824,53801],{"class":53},[36,62826,62827],{"class":38,"line":36272},[36,62828,546],{"emptyLinePlaceholder":545},[36,62830,62831,62833,62835],{"class":38,"line":36282},[36,62832,54279],{"class":53},[36,62834,53131],{"class":53794},[36,62836,53801],{"class":53},[24515,62838,62840],{"id":62839},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62842,62843],{},"小米搜索框案例：",[26,62845,62847],{"className":53129,"code":62846,"language":53131,"meta":31,"style":31},"\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",[33,62848,62849,62859,62873,62877,62885,62899,62919,62939,62951,62959,62965,62975,62985,62997,63001,63005,63012,63016,63027,63031,63035,63042,63053,63066,63080,63084,63088,63096,63108,63120,63134,63147,63160,63178,63189,63193,63197,63206,63223,63227,63231,63238,63248,63258,63269,63282,63294,63310,63321,63333,63337,63341,63349,63360,63377,63389,63401,63412,63416,63420,63431,63442,63446,63454,63458,63466,63470,63478,63493,63516,63531,63562,63589,63616,63643,63670,63697,63724,63733,63741,63749,63754,63774,63794,63799,63804,63822,63827,63837,63842,63856,63861,63866,63883,63892,63904,63908,63916,63924,63928],{"__ignoreMap":31},[36,62850,62851,62853,62855,62857],{"class":38,"line":39},[36,62852,53791],{"class":53},[36,62854,53795],{"class":53794},[36,62856,53798],{"class":4500},[36,62858,53801],{"class":53},[36,62860,62861,62863,62865,62867,62869,62871],{"class":38,"line":46},[36,62862,1507],{"class":53},[36,62864,53131],{"class":53794},[36,62866,53810],{"class":4500},[36,62868,115],{"class":53},[36,62870,53815],{"class":57},[36,62872,53801],{"class":53},[36,62874,62875],{"class":38,"line":82},[36,62876,546],{"emptyLinePlaceholder":545},[36,62878,62879,62881,62883],{"class":38,"line":88},[36,62880,1507],{"class":53},[36,62882,53828],{"class":53794},[36,62884,53801],{"class":53},[36,62886,62887,62889,62891,62893,62895,62897],{"class":38,"line":195},[36,62888,53835],{"class":53},[36,62890,53838],{"class":53794},[36,62892,53841],{"class":4500},[36,62894,115],{"class":53},[36,62896,53846],{"class":57},[36,62898,53801],{"class":53},[36,62900,62901,62903,62905,62907,62909,62911,62913,62915,62917],{"class":38,"line":1517},[36,62902,53835],{"class":53},[36,62904,53838],{"class":53794},[36,62906,53857],{"class":4500},[36,62908,115],{"class":53},[36,62910,53862],{"class":57},[36,62912,53865],{"class":4500},[36,62914,115],{"class":53},[36,62916,53870],{"class":57},[36,62918,53801],{"class":53},[36,62920,62921,62923,62925,62927,62929,62931,62933,62935,62937],{"class":38,"line":2421},[36,62922,53835],{"class":53},[36,62924,53838],{"class":53794},[36,62926,17440],{"class":4500},[36,62928,115],{"class":53},[36,62930,53885],{"class":57},[36,62932,53865],{"class":4500},[36,62934,115],{"class":53},[36,62936,53892],{"class":57},[36,62938,53801],{"class":53},[36,62940,62941,62943,62945,62947,62949],{"class":38,"line":2446},[36,62942,53835],{"class":53},[36,62944,53901],{"class":53794},[36,62946,53904],{"class":53},[36,62948,53901],{"class":53794},[36,62950,53801],{"class":53},[36,62952,62953,62955,62957],{"class":38,"line":2469},[36,62954,53835],{"class":53},[36,62956,2602],{"class":53794},[36,62958,53801],{"class":53},[36,62960,62961,62963],{"class":38,"line":2492},[36,62962,53921],{"class":53794},[36,62964,18091],{"class":53},[36,62966,62967,62969,62971,62973],{"class":38,"line":4150},[36,62968,53928],{"class":49},[36,62970,53931],{"class":53},[36,62972,713],{"class":49},[36,62974,3833],{"class":53},[36,62976,62977,62979,62981,62983],{"class":38,"line":4155},[36,62978,53940],{"class":49},[36,62980,53931],{"class":53},[36,62982,713],{"class":49},[36,62984,3833],{"class":53},[36,62986,62987,62990,62992,62995],{"class":38,"line":4161},[36,62988,62989],{"class":49},"            box-sizing",[36,62991,53931],{"class":53},[36,62993,62994],{"class":49},"border-box",[36,62996,3833],{"class":53},[36,62998,62999],{"class":38,"line":4166},[36,63000,5061],{"class":53},[36,63002,63003],{"class":38,"line":4180},[36,63004,546],{"emptyLinePlaceholder":545},[36,63006,63007,63010],{"class":38,"line":4185},[36,63008,63009],{"class":53794},"        ul",[36,63011,18091],{"class":53},[36,63013,63014],{"class":38,"line":4191},[36,63015,546],{"emptyLinePlaceholder":545},[36,63017,63018,63021,63023,63025],{"class":38,"line":4212},[36,63019,63020],{"class":49},"            list-style",[36,63022,53931],{"class":53},[36,63024,57228],{"class":49},[36,63026,3833],{"class":53},[36,63028,63029],{"class":38,"line":4217},[36,63030,5061],{"class":53},[36,63032,63033],{"class":38,"line":4231},[36,63034,546],{"emptyLinePlaceholder":545},[36,63036,63037,63040],{"class":38,"line":4236},[36,63038,63039],{"class":4500},"        .mi",[36,63041,18091],{"class":53},[36,63043,63044,63047,63049,63051],{"class":38,"line":4264},[36,63045,63046],{"class":49},"            position",[36,63048,53931],{"class":53},[36,63050,57255],{"class":49},[36,63052,3833],{"class":53},[36,63054,63055,63057,63059,63062,63064],{"class":38,"line":4269},[36,63056,53978],{"class":49},[36,63058,53931],{"class":53},[36,63060,63061],{"class":49},"223",[36,63063,53986],{"class":114},[36,63065,3833],{"class":53},[36,63067,63068,63070,63072,63074,63076,63078],{"class":38,"line":4286},[36,63069,53928],{"class":49},[36,63071,53931],{"class":53},[36,63073,166],{"class":49},[36,63075,53986],{"class":114},[36,63077,54050],{"class":49},[36,63079,3833],{"class":53},[36,63081,63082],{"class":38,"line":4291},[36,63083,5061],{"class":53},[36,63085,63086],{"class":38,"line":4296},[36,63087,546],{"emptyLinePlaceholder":545},[36,63089,63090,63092,63094],{"class":38,"line":4301},[36,63091,63039],{"class":4500},[36,63093,871],{"class":53794},[36,63095,18091],{"class":53},[36,63097,63098,63100,63102,63104,63106],{"class":38,"line":4315},[36,63099,53978],{"class":49},[36,63101,53931],{"class":53},[36,63103,63061],{"class":49},[36,63105,53986],{"class":114},[36,63107,3833],{"class":53},[36,63109,63110,63112,63114,63116,63118],{"class":38,"line":4320},[36,63111,53993],{"class":49},[36,63113,53931],{"class":53},[36,63115,3283],{"class":49},[36,63117,53986],{"class":114},[36,63119,3833],{"class":53},[36,63121,63122,63124,63126,63128,63130,63132],{"class":38,"line":5109},[36,63123,53940],{"class":49},[36,63125,53931],{"class":53},[36,63127,713],{"class":49},[36,63129,931],{"class":49},[36,63131,53986],{"class":114},[36,63133,3833],{"class":53},[36,63135,63136,63139,63141,63143,63145],{"class":38,"line":5123},[36,63137,63138],{"class":49},"            font-size",[36,63140,53931],{"class":53},[36,63142,3226],{"class":49},[36,63144,53986],{"class":114},[36,63146,3833],{"class":53},[36,63148,63149,63152,63154,63156,63158],{"class":38,"line":5131},[36,63150,63151],{"class":49},"            line-height",[36,63153,53931],{"class":53},[36,63155,3283],{"class":49},[36,63157,53986],{"class":114},[36,63159,3833],{"class":53},[36,63161,63162,63165,63167,63169,63171,63173,63176],{"class":38,"line":5136},[36,63163,63164],{"class":49},"            border",[36,63166,53931],{"class":53},[36,63168,707],{"class":49},[36,63170,53986],{"class":114},[36,63172,54015],{"class":49},[36,63174,63175],{"class":49}," #e0e0e0",[36,63177,3833],{"class":53},[36,63179,63180,63183,63185,63187],{"class":38,"line":5142},[36,63181,63182],{"class":49},"            outline",[36,63184,53931],{"class":53},[36,63186,57228],{"class":49},[36,63188,3833],{"class":53},[36,63190,63191],{"class":38,"line":5148},[36,63192,5061],{"class":53},[36,63194,63195],{"class":38,"line":5153},[36,63196,546],{"emptyLinePlaceholder":545},[36,63198,63199,63201,63204],{"class":38,"line":10475},[36,63200,63039],{"class":4500},[36,63202,63203],{"class":4500}," .search",[36,63205,18091],{"class":53},[36,63207,63208,63210,63212,63214,63216,63218,63221],{"class":38,"line":10499},[36,63209,63164],{"class":49},[36,63211,53931],{"class":53},[36,63213,707],{"class":49},[36,63215,53986],{"class":114},[36,63217,54015],{"class":49},[36,63219,63220],{"class":49}," #ff6700",[36,63222,3833],{"class":53},[36,63224,63225],{"class":38,"line":10504},[36,63226,5061],{"class":53},[36,63228,63229],{"class":38,"line":10510},[36,63230,546],{"emptyLinePlaceholder":545},[36,63232,63233,63236],{"class":38,"line":10537},[36,63234,63235],{"class":4500},"        .result-list",[36,63237,18091],{"class":53},[36,63239,63240,63242,63244,63246],{"class":38,"line":10542},[36,63241,53966],{"class":49},[36,63243,53931],{"class":53},[36,63245,57228],{"class":49},[36,63247,3833],{"class":53},[36,63249,63250,63252,63254,63256],{"class":38,"line":10548},[36,63251,63046],{"class":49},[36,63253,53931],{"class":53},[36,63255,57322],{"class":49},[36,63257,3833],{"class":53},[36,63259,63260,63263,63265,63267],{"class":38,"line":10560},[36,63261,63262],{"class":49},"            left",[36,63264,53931],{"class":53},[36,63266,713],{"class":49},[36,63268,3833],{"class":53},[36,63270,63271,63274,63276,63278,63280],{"class":38,"line":10572},[36,63272,63273],{"class":49},"            top",[36,63275,53931],{"class":53},[36,63277,3283],{"class":49},[36,63279,53986],{"class":114},[36,63281,3833],{"class":53},[36,63283,63284,63286,63288,63290,63292],{"class":38,"line":10584},[36,63285,53978],{"class":49},[36,63287,53931],{"class":53},[36,63289,63061],{"class":49},[36,63291,53986],{"class":114},[36,63293,3833],{"class":53},[36,63295,63296,63298,63300,63302,63304,63306,63308],{"class":38,"line":12241},[36,63297,63164],{"class":49},[36,63299,53931],{"class":53},[36,63301,707],{"class":49},[36,63303,53986],{"class":114},[36,63305,54015],{"class":49},[36,63307,63220],{"class":49},[36,63309,3833],{"class":53},[36,63311,63312,63315,63317,63319],{"class":38,"line":12266},[36,63313,63314],{"class":49},"            border-top",[36,63316,53931],{"class":53},[36,63318,713],{"class":49},[36,63320,3833],{"class":53},[36,63322,63323,63326,63328,63331],{"class":38,"line":12289},[36,63324,63325],{"class":49},"            background",[36,63327,53931],{"class":53},[36,63329,63330],{"class":49},"#fff",[36,63332,3833],{"class":53},[36,63334,63335],{"class":38,"line":12313},[36,63336,5061],{"class":53},[36,63338,63339],{"class":38,"line":12318},[36,63340,546],{"emptyLinePlaceholder":545},[36,63342,63343,63345,63347],{"class":38,"line":12323},[36,63344,63235],{"class":4500},[36,63346,3936],{"class":53794},[36,63348,18091],{"class":53},[36,63350,63351,63353,63355,63358],{"class":38,"line":12328},[36,63352,53966],{"class":49},[36,63354,53931],{"class":53},[36,63356,63357],{"class":49},"block",[36,63359,3833],{"class":53},[36,63361,63362,63364,63366,63368,63370,63373,63375],{"class":38,"line":12337},[36,63363,53940],{"class":49},[36,63365,53931],{"class":53},[36,63367,3025],{"class":49},[36,63369,53986],{"class":114},[36,63371,63372],{"class":49}," 15",[36,63374,53986],{"class":114},[36,63376,3833],{"class":53},[36,63378,63379,63381,63383,63385,63387],{"class":38,"line":12342},[36,63380,63138],{"class":49},[36,63382,53931],{"class":53},[36,63384,3176],{"class":49},[36,63386,53986],{"class":114},[36,63388,3833],{"class":53},[36,63390,63391,63394,63396,63399],{"class":38,"line":12348},[36,63392,63393],{"class":49},"            color",[36,63395,53931],{"class":53},[36,63397,63398],{"class":49},"#424242",[36,63400,3833],{"class":53},[36,63402,63403,63406,63408,63410],{"class":38,"line":12369},[36,63404,63405],{"class":49},"            text-decoration",[36,63407,53931],{"class":53},[36,63409,57228],{"class":49},[36,63411,3833],{"class":53},[36,63413,63414],{"class":38,"line":12375},[36,63415,5061],{"class":53},[36,63417,63418],{"class":38,"line":12389},[36,63419,546],{"emptyLinePlaceholder":545},[36,63421,63422,63424,63426,63429],{"class":38,"line":12395},[36,63423,63235],{"class":4500},[36,63425,3936],{"class":53794},[36,63427,63428],{"class":4500},":hover",[36,63430,18091],{"class":53},[36,63432,63433,63435,63437,63440],{"class":38,"line":12422},[36,63434,54134],{"class":49},[36,63436,53931],{"class":53},[36,63438,63439],{"class":49},"#eee",[36,63441,3833],{"class":53},[36,63443,63444],{"class":38,"line":12431},[36,63445,5061],{"class":53},[36,63447,63448,63450,63452],{"class":38,"line":12437},[36,63449,54270],{"class":53},[36,63451,2602],{"class":53794},[36,63453,53801],{"class":53},[36,63455,63456],{"class":38,"line":12445},[36,63457,546],{"emptyLinePlaceholder":545},[36,63459,63460,63462,63464],{"class":38,"line":12450},[36,63461,54279],{"class":53},[36,63463,53828],{"class":53794},[36,63465,53801],{"class":53},[36,63467,63468],{"class":38,"line":19122},[36,63469,546],{"emptyLinePlaceholder":545},[36,63471,63472,63474,63476],{"class":38,"line":19128},[36,63473,1507],{"class":53},[36,63475,54294],{"class":53794},[36,63477,53801],{"class":53},[36,63479,63480,63482,63484,63486,63488,63491],{"class":38,"line":19151},[36,63481,53835],{"class":53},[36,63483,54105],{"class":53794},[36,63485,55980],{"class":4500},[36,63487,115],{"class":53},[36,63489,63490],{"class":57},"\"mi\"",[36,63492,53801],{"class":53},[36,63494,63495,63497,63499,63501,63503,63506,63509,63511,63514],{"class":38,"line":19157},[36,63496,57793],{"class":53},[36,63498,913],{"class":53794},[36,63500,56317],{"class":4500},[36,63502,115],{"class":53},[36,63504,63505],{"class":57},"\"search\"",[36,63507,63508],{"class":4500}," placeholder",[36,63510,115],{"class":53},[36,63512,63513],{"class":57},"\"小米笔记本\"",[36,63515,53801],{"class":53},[36,63517,63518,63520,63522,63524,63526,63529],{"class":38,"line":19180},[36,63519,57793],{"class":53},[36,63521,3680],{"class":53794},[36,63523,55980],{"class":4500},[36,63525,115],{"class":53},[36,63527,63528],{"class":57},"\"result-list\"",[36,63530,53801],{"class":53},[36,63532,63533,63536,63538,63541,63543,63546,63548,63551,63554,63556,63558,63560],{"class":38,"line":19194},[36,63534,63535],{"class":53},"            \u003C",[36,63537,436],{"class":53794},[36,63539,63540],{"class":53},">\u003C",[36,63542,2923],{"class":53794},[36,63544,63545],{"class":4500}," href",[36,63547,115],{"class":53},[36,63549,63550],{"class":57},"\"#\"",[36,63552,63553],{"class":53},">全部商品\u003C\u002F",[36,63555,2923],{"class":53794},[36,63557,57805],{"class":53},[36,63559,436],{"class":53794},[36,63561,53801],{"class":53},[36,63563,63564,63566,63568,63570,63572,63574,63576,63578,63581,63583,63585,63587],{"class":38,"line":19214},[36,63565,63535],{"class":53},[36,63567,436],{"class":53794},[36,63569,63540],{"class":53},[36,63571,2923],{"class":53794},[36,63573,63545],{"class":4500},[36,63575,115],{"class":53},[36,63577,63550],{"class":57},[36,63579,63580],{"class":53},">小米11\u003C\u002F",[36,63582,2923],{"class":53794},[36,63584,57805],{"class":53},[36,63586,436],{"class":53794},[36,63588,53801],{"class":53},[36,63590,63591,63593,63595,63597,63599,63601,63603,63605,63608,63610,63612,63614],{"class":38,"line":19220},[36,63592,63535],{"class":53},[36,63594,436],{"class":53794},[36,63596,63540],{"class":53},[36,63598,2923],{"class":53794},[36,63600,63545],{"class":4500},[36,63602,115],{"class":53},[36,63604,63550],{"class":57},[36,63606,63607],{"class":53},">小米10S\u003C\u002F",[36,63609,2923],{"class":53794},[36,63611,57805],{"class":53},[36,63613,436],{"class":53794},[36,63615,53801],{"class":53},[36,63617,63618,63620,63622,63624,63626,63628,63630,63632,63635,63637,63639,63641],{"class":38,"line":19231},[36,63619,63535],{"class":53},[36,63621,436],{"class":53794},[36,63623,63540],{"class":53},[36,63625,2923],{"class":53794},[36,63627,63545],{"class":4500},[36,63629,115],{"class":53},[36,63631,63550],{"class":57},[36,63633,63634],{"class":53},">小米笔记本\u003C\u002F",[36,63636,2923],{"class":53794},[36,63638,57805],{"class":53},[36,63640,436],{"class":53794},[36,63642,53801],{"class":53},[36,63644,63645,63647,63649,63651,63653,63655,63657,63659,63662,63664,63666,63668],{"class":38,"line":19254},[36,63646,63535],{"class":53},[36,63648,436],{"class":53794},[36,63650,63540],{"class":53},[36,63652,2923],{"class":53794},[36,63654,63545],{"class":4500},[36,63656,115],{"class":53},[36,63658,63550],{"class":57},[36,63660,63661],{"class":53},">小米手机\u003C\u002F",[36,63663,2923],{"class":53794},[36,63665,57805],{"class":53},[36,63667,436],{"class":53794},[36,63669,53801],{"class":53},[36,63671,63672,63674,63676,63678,63680,63682,63684,63686,63689,63691,63693,63695],{"class":38,"line":19276},[36,63673,63535],{"class":53},[36,63675,436],{"class":53794},[36,63677,63540],{"class":53},[36,63679,2923],{"class":53794},[36,63681,63545],{"class":4500},[36,63683,115],{"class":53},[36,63685,63550],{"class":57},[36,63687,63688],{"class":53},">黑鲨4\u003C\u002F",[36,63690,2923],{"class":53794},[36,63692,57805],{"class":53},[36,63694,436],{"class":53794},[36,63696,53801],{"class":53},[36,63698,63699,63701,63703,63705,63707,63709,63711,63713,63716,63718,63720,63722],{"class":38,"line":19281},[36,63700,63535],{"class":53},[36,63702,436],{"class":53794},[36,63704,63540],{"class":53},[36,63706,2923],{"class":53794},[36,63708,63545],{"class":4500},[36,63710,115],{"class":53},[36,63712,63550],{"class":57},[36,63714,63715],{"class":53},">空调\u003C\u002F",[36,63717,2923],{"class":53794},[36,63719,57805],{"class":53},[36,63721,436],{"class":53794},[36,63723,53801],{"class":53},[36,63725,63726,63729,63731],{"class":38,"line":19287},[36,63727,63728],{"class":53},"        \u003C\u002F",[36,63730,3680],{"class":53794},[36,63732,53801],{"class":53},[36,63734,63735,63737,63739],{"class":38,"line":19301},[36,63736,54270],{"class":53},[36,63738,54105],{"class":53794},[36,63740,53801],{"class":53},[36,63742,63743,63745,63747],{"class":38,"line":19314},[36,63744,53835],{"class":53},[36,63746,54307],{"class":53794},[36,63748,53801],{"class":53},[36,63750,63751],{"class":38,"line":19319},[36,63752,63753],{"class":42},"        \u002F\u002F 1. 获取元素\n",[36,63755,63756,63759,63761,63763,63765,63767,63769,63772],{"class":38,"line":19333},[36,63757,63758],{"class":114},"        const",[36,63760,871],{"class":49},[36,63762,498],{"class":114},[36,63764,56888],{"class":53},[36,63766,56891],{"class":4500},[36,63768,54],{"class":53},[36,63770,63771],{"class":57},"'[type=search]'",[36,63773,61],{"class":53},[36,63775,63776,63778,63781,63783,63785,63787,63789,63792],{"class":38,"line":19338},[36,63777,63758],{"class":114},[36,63779,63780],{"class":49}," ul",[36,63782,498],{"class":114},[36,63784,56888],{"class":53},[36,63786,56891],{"class":4500},[36,63788,54],{"class":53},[36,63790,63791],{"class":57},"'.result-list'",[36,63793,61],{"class":53},[36,63795,63796],{"class":38,"line":19344},[36,63797,63798],{"class":42},"        \u002F\u002F console.log(input)\n",[36,63800,63801],{"class":38,"line":19349},[36,63802,63803],{"class":42},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,63805,63806,63809,63811,63813,63816,63818,63820],{"class":38,"line":19363},[36,63807,63808],{"class":53},"        input.",[36,63810,60303],{"class":4500},[36,63812,54],{"class":53},[36,63814,63815],{"class":57},"'focus'",[36,63817,14958],{"class":53},[36,63819,56940],{"class":114},[36,63821,56943],{"class":53},[36,63823,63824],{"class":38,"line":19368},[36,63825,63826],{"class":42},"            \u002F\u002F ul显示\n",[36,63828,63829,63832,63834],{"class":38,"line":19373},[36,63830,63831],{"class":53},"            ul.style.display ",[36,63833,115],{"class":114},[36,63835,63836],{"class":57}," 'block'\n",[36,63838,63839],{"class":38,"line":19387},[36,63840,63841],{"class":42},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,63843,63844,63847,63849,63851,63854],{"class":38,"line":19399},[36,63845,63846],{"class":53},"            input.classList.",[36,63848,7862],{"class":4500},[36,63850,54],{"class":53},[36,63852,63853],{"class":57},"'search'",[36,63855,61],{"class":53},[36,63857,63858],{"class":38,"line":19404},[36,63859,63860],{"class":53},"        })\n",[36,63862,63863],{"class":38,"line":19417},[36,63864,63865],{"class":42},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,63867,63868,63870,63872,63874,63877,63879,63881],{"class":38,"line":19422},[36,63869,63808],{"class":53},[36,63871,60303],{"class":4500},[36,63873,54],{"class":53},[36,63875,63876],{"class":57},"'blur'",[36,63878,14958],{"class":53},[36,63880,56940],{"class":114},[36,63882,56943],{"class":53},[36,63884,63885,63887,63889],{"class":38,"line":19427},[36,63886,63831],{"class":53},[36,63888,115],{"class":114},[36,63890,63891],{"class":57}," 'none'\n",[36,63893,63894,63896,63898,63900,63902],{"class":38,"line":19432},[36,63895,63846],{"class":53},[36,63897,59496],{"class":4500},[36,63899,54],{"class":53},[36,63901,63853],{"class":57},[36,63903,61],{"class":53},[36,63905,63906],{"class":38,"line":19445},[36,63907,63860],{"class":53},[36,63909,63910,63912,63914],{"class":38,"line":19450},[36,63911,54270],{"class":53},[36,63913,54307],{"class":53794},[36,63915,53801],{"class":53},[36,63917,63918,63920,63922],{"class":38,"line":35135},[36,63919,54279],{"class":53},[36,63921,54294],{"class":53794},[36,63923,53801],{"class":53},[36,63925,63926],{"class":38,"line":35141},[36,63927,546],{"emptyLinePlaceholder":545},[36,63929,63930,63932,63934],{"class":38,"line":35147},[36,63931,54279],{"class":53},[36,63933,53131],{"class":53794},[36,63935,53801],{"class":53},[24515,63937,63939],{"id":63938},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63941,63942],{},"评论字数统计案例",[19,63944,63945],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63947,63948],{},"牢记focus伪类选择器",[53838,63950],{"charSet":63951},"UTF-8",[53838,63953],{"name":63954,"content":63955},"viewport","width=device-width, initial-scale=1.0",[53901,63957,63958],{},"Document",[2602,63960,63961],{},"\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",[913,63963],{"type":690},[3680,63965,63966,63969],{},[436,63967,63968],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[436,63970,63971],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,63973,63975],{"className":53129,"code":63974,"language":53131,"meta":31,"style":31},"\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",[33,63976,63977,63987,64001,64005,64013,64027,64047,64067,64080,64088,64095,64108,64122,64132,64142,64146,64150,64157,64169,64181,64193,64205,64234,64247,64251,64255,64264,64275,64287,64298,64309,64321,64332,64344,64360,64372,64376,64380,64391,64402,64412,64424,64428,64432,64440,64451,64461,64472,64484,64497,64509,64521,64525,64529,64538,64550,64561,64574,64585,64599,64603,64607,64614,64626,64638,64648,64652,64656,64665,64677,64687,64691,64695,64706,64716,64735,64748,64752,64756,64766,64776,64780,64784,64795,64806,64818,64830,64834,64838,64849,64860,64874,64878,64882,64893,64903,64915,64919,64927,64935,64939,64947,64962,64981,65021,65034,65042,65056,65076,65084,65099,65122,65140,65155,65175,65195,65215,65223,65231,65239,65247,65267,65287,65292,65309,65318,65322,65327,65343,65351,65355,65360,65377,65382,65407,65411,65415,65420,65425,65433,65441,65445],{"__ignoreMap":31},[36,63978,63979,63981,63983,63985],{"class":38,"line":39},[36,63980,53791],{"class":53},[36,63982,53795],{"class":53794},[36,63984,53798],{"class":4500},[36,63986,53801],{"class":53},[36,63988,63989,63991,63993,63995,63997,63999],{"class":38,"line":46},[36,63990,1507],{"class":53},[36,63992,53131],{"class":53794},[36,63994,53810],{"class":4500},[36,63996,115],{"class":53},[36,63998,53815],{"class":57},[36,64000,53801],{"class":53},[36,64002,64003],{"class":38,"line":82},[36,64004,546],{"emptyLinePlaceholder":545},[36,64006,64007,64009,64011],{"class":38,"line":88},[36,64008,1507],{"class":53},[36,64010,53828],{"class":53794},[36,64012,53801],{"class":53},[36,64014,64015,64017,64019,64021,64023,64025],{"class":38,"line":195},[36,64016,54638],{"class":53},[36,64018,53838],{"class":53794},[36,64020,53841],{"class":4500},[36,64022,115],{"class":53},[36,64024,53846],{"class":57},[36,64026,53801],{"class":53},[36,64028,64029,64031,64033,64035,64037,64039,64041,64043,64045],{"class":38,"line":1517},[36,64030,54638],{"class":53},[36,64032,53838],{"class":53794},[36,64034,53857],{"class":4500},[36,64036,115],{"class":53},[36,64038,53862],{"class":57},[36,64040,53865],{"class":4500},[36,64042,115],{"class":53},[36,64044,53870],{"class":57},[36,64046,53801],{"class":53},[36,64048,64049,64051,64053,64055,64057,64059,64061,64063,64065],{"class":38,"line":2421},[36,64050,54638],{"class":53},[36,64052,53838],{"class":53794},[36,64054,17440],{"class":4500},[36,64056,115],{"class":53},[36,64058,53885],{"class":57},[36,64060,53865],{"class":4500},[36,64062,115],{"class":53},[36,64064,53892],{"class":57},[36,64066,53801],{"class":53},[36,64068,64069,64071,64073,64076,64078],{"class":38,"line":2446},[36,64070,54638],{"class":53},[36,64072,53901],{"class":53794},[36,64074,64075],{"class":53},">评论回车发布\u003C\u002F",[36,64077,53901],{"class":53794},[36,64079,53801],{"class":53},[36,64081,64082,64084,64086],{"class":38,"line":2469},[36,64083,54638],{"class":53},[36,64085,2602],{"class":53794},[36,64087,53801],{"class":53},[36,64089,64090,64093],{"class":38,"line":2492},[36,64091,64092],{"class":4500},"    .wrapper",[36,64094,18091],{"class":53},[36,64096,64097,64100,64102,64104,64106],{"class":38,"line":4150},[36,64098,64099],{"class":49},"      min-width",[36,64101,53931],{"class":53},[36,64103,6518],{"class":49},[36,64105,53986],{"class":114},[36,64107,3833],{"class":53},[36,64109,64110,64113,64115,64118,64120],{"class":38,"line":4155},[36,64111,64112],{"class":49},"      max-width",[36,64114,53931],{"class":53},[36,64116,64117],{"class":49},"800",[36,64119,53986],{"class":114},[36,64121,3833],{"class":53},[36,64123,64124,64126,64128,64130],{"class":38,"line":4161},[36,64125,57500],{"class":49},[36,64127,53931],{"class":53},[36,64129,53971],{"class":49},[36,64131,3833],{"class":53},[36,64133,64134,64136,64138,64140],{"class":38,"line":4166},[36,64135,57511],{"class":49},[36,64137,53931],{"class":53},[36,64139,54074],{"class":49},[36,64141,3833],{"class":53},[36,64143,64144],{"class":38,"line":4180},[36,64145,4721],{"class":53},[36,64147,64148],{"class":38,"line":4185},[36,64149,546],{"emptyLinePlaceholder":545},[36,64151,64152,64155],{"class":38,"line":4191},[36,64153,64154],{"class":4500},"    .avatar",[36,64156,18091],{"class":53},[36,64158,64159,64161,64163,64165,64167],{"class":38,"line":4212},[36,64160,57262],{"class":49},[36,64162,53931],{"class":53},[36,64164,3283],{"class":49},[36,64166,53986],{"class":114},[36,64168,3833],{"class":53},[36,64170,64171,64173,64175,64177,64179],{"class":38,"line":4217},[36,64172,57276],{"class":49},[36,64174,53931],{"class":53},[36,64176,3283],{"class":49},[36,64178,53986],{"class":114},[36,64180,3833],{"class":53},[36,64182,64183,64185,64187,64189,64191],{"class":38,"line":4231},[36,64184,57625],{"class":49},[36,64186,53931],{"class":53},[36,64188,3332],{"class":49},[36,64190,1095],{"class":114},[36,64192,3833],{"class":53},[36,64194,64195,64198,64200,64203],{"class":38,"line":4236},[36,64196,64197],{"class":49},"      overflow",[36,64199,53931],{"class":53},[36,64201,64202],{"class":49},"hidden",[36,64204,3833],{"class":53},[36,64206,64207,64210,64212,64215,64217,64220,64222,64225,64227,64229,64232],{"class":38,"line":4264},[36,64208,64209],{"class":49},"      background",[36,64211,53931],{"class":53},[36,64213,64214],{"class":49},"url",[36,64216,54],{"class":53},[36,64218,64219],{"class":1997},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,64221,16236],{"class":53},[36,64223,64224],{"class":49},"no-repeat",[36,64226,19662],{"class":49},[36,64228,27495],{"class":53},[36,64230,64231],{"class":49},"cover",[36,64233,3833],{"class":53},[36,64235,64236,64239,64241,64243,64245],{"class":38,"line":4269},[36,64237,64238],{"class":49},"      margin-right",[36,64240,53931],{"class":53},[36,64242,3376],{"class":49},[36,64244,53986],{"class":114},[36,64246,3833],{"class":53},[36,64248,64249],{"class":38,"line":4286},[36,64250,4721],{"class":53},[36,64252,64253],{"class":38,"line":4291},[36,64254,546],{"emptyLinePlaceholder":545},[36,64256,64257,64259,64262],{"class":38,"line":4296},[36,64258,64092],{"class":4500},[36,64260,64261],{"class":53794}," textarea",[36,64263,18091],{"class":53},[36,64265,64266,64269,64271,64273],{"class":38,"line":4301},[36,64267,64268],{"class":49},"      outline",[36,64270,53931],{"class":53},[36,64272,57228],{"class":49},[36,64274,3833],{"class":53},[36,64276,64277,64280,64282,64285],{"class":38,"line":4315},[36,64278,64279],{"class":49},"      border-color",[36,64281,53931],{"class":53},[36,64283,64284],{"class":49},"transparent",[36,64286,3833],{"class":53},[36,64288,64289,64292,64294,64296],{"class":38,"line":4320},[36,64290,64291],{"class":49},"      resize",[36,64293,53931],{"class":53},[36,64295,57228],{"class":49},[36,64297,3833],{"class":53},[36,64299,64300,64302,64304,64307],{"class":38,"line":5109},[36,64301,64209],{"class":49},[36,64303,53931],{"class":53},[36,64305,64306],{"class":49},"#f5f5f5",[36,64308,3833],{"class":53},[36,64310,64311,64313,64315,64317,64319],{"class":38,"line":5123},[36,64312,57625],{"class":49},[36,64314,53931],{"class":53},[36,64316,2977],{"class":49},[36,64318,53986],{"class":114},[36,64320,3833],{"class":53},[36,64322,64323,64326,64328,64330],{"class":38,"line":5131},[36,64324,64325],{"class":49},"      flex",[36,64327,53931],{"class":53},[36,64329,707],{"class":49},[36,64331,3833],{"class":53},[36,64333,64334,64336,64338,64340,64342],{"class":38,"line":5136},[36,64335,57186],{"class":49},[36,64337,53931],{"class":53},[36,64339,1317],{"class":49},[36,64341,53986],{"class":114},[36,64343,3833],{"class":53},[36,64345,64346,64349,64351,64353,64356,64358],{"class":38,"line":5142},[36,64347,64348],{"class":49},"      transition",[36,64350,53931],{"class":53},[36,64352,30632],{"class":49},[36,64354,64355],{"class":49}," 0.5",[36,64357,3371],{"class":114},[36,64359,3833],{"class":53},[36,64361,64362,64364,64366,64368,64370],{"class":38,"line":5148},[36,64363,57276],{"class":49},[36,64365,53931],{"class":53},[36,64367,3624],{"class":49},[36,64369,53986],{"class":114},[36,64371,3833],{"class":53},[36,64373,64374],{"class":38,"line":5153},[36,64375,4721],{"class":53},[36,64377,64378],{"class":38,"line":10475},[36,64379,546],{"emptyLinePlaceholder":545},[36,64381,64382,64384,64386,64389],{"class":38,"line":10499},[36,64383,64092],{"class":4500},[36,64385,64261],{"class":53794},[36,64387,64388],{"class":4500},":focus",[36,64390,18091],{"class":53},[36,64392,64393,64395,64397,64400],{"class":38,"line":10504},[36,64394,64279],{"class":49},[36,64396,53931],{"class":53},[36,64398,64399],{"class":49},"#e4e4e4",[36,64401,3833],{"class":53},[36,64403,64404,64406,64408,64410],{"class":38,"line":10510},[36,64405,64209],{"class":49},[36,64407,53931],{"class":53},[36,64409,63330],{"class":49},[36,64411,3833],{"class":53},[36,64413,64414,64416,64418,64420,64422],{"class":38,"line":10537},[36,64415,57276],{"class":49},[36,64417,53931],{"class":53},[36,64419,3332],{"class":49},[36,64421,53986],{"class":114},[36,64423,3833],{"class":53},[36,64425,64426],{"class":38,"line":10542},[36,64427,4721],{"class":53},[36,64429,64430],{"class":38,"line":10548},[36,64431,546],{"emptyLinePlaceholder":545},[36,64433,64434,64436,64438],{"class":38,"line":10560},[36,64435,64092],{"class":4500},[36,64437,59957],{"class":53794},[36,64439,18091],{"class":53},[36,64441,64442,64444,64446,64449],{"class":38,"line":10572},[36,64443,64209],{"class":49},[36,64445,53931],{"class":53},[36,64447,64448],{"class":49},"#00aeec",[36,64450,3833],{"class":53},[36,64452,64453,64455,64457,64459],{"class":38,"line":10584},[36,64454,59906],{"class":49},[36,64456,53931],{"class":53},[36,64458,63330],{"class":49},[36,64460,3833],{"class":53},[36,64462,64463,64466,64468,64470],{"class":38,"line":12241},[36,64464,64465],{"class":49},"      border",[36,64467,53931],{"class":53},[36,64469,57228],{"class":49},[36,64471,3833],{"class":53},[36,64473,64474,64476,64478,64480,64482],{"class":38,"line":12266},[36,64475,57625],{"class":49},[36,64477,53931],{"class":53},[36,64479,2977],{"class":49},[36,64481,53986],{"class":114},[36,64483,3833],{"class":53},[36,64485,64486,64489,64491,64493,64495],{"class":38,"line":12289},[36,64487,64488],{"class":49},"      margin-left",[36,64490,53931],{"class":53},[36,64492,1317],{"class":49},[36,64494,53986],{"class":114},[36,64496,3833],{"class":53},[36,64498,64499,64501,64503,64505,64507],{"class":38,"line":12313},[36,64500,57262],{"class":49},[36,64502,53931],{"class":53},[36,64504,3037],{"class":49},[36,64506,53986],{"class":114},[36,64508,3833],{"class":53},[36,64510,64511,64514,64516,64519],{"class":38,"line":12318},[36,64512,64513],{"class":49},"      cursor",[36,64515,53931],{"class":53},[36,64517,64518],{"class":49},"pointer",[36,64520,3833],{"class":53},[36,64522,64523],{"class":38,"line":12323},[36,64524,4721],{"class":53},[36,64526,64527],{"class":38,"line":12328},[36,64528,546],{"emptyLinePlaceholder":545},[36,64530,64531,64533,64536],{"class":38,"line":12337},[36,64532,64092],{"class":4500},[36,64534,64535],{"class":4500}," .total",[36,64537,18091],{"class":53},[36,64539,64540,64542,64544,64546,64548],{"class":38,"line":12342},[36,64541,64238],{"class":49},[36,64543,53931],{"class":53},[36,64545,3288],{"class":49},[36,64547,53986],{"class":114},[36,64549,3833],{"class":53},[36,64551,64552,64554,64556,64559],{"class":38,"line":12348},[36,64553,59906],{"class":49},[36,64555,53931],{"class":53},[36,64557,64558],{"class":49},"#999",[36,64560,3833],{"class":53},[36,64562,64563,64566,64568,64570,64572],{"class":38,"line":12369},[36,64564,64565],{"class":49},"      margin-top",[36,64567,53931],{"class":53},[36,64569,1134],{"class":49},[36,64571,53986],{"class":114},[36,64573,3833],{"class":53},[36,64575,64576,64579,64581,64583],{"class":38,"line":12375},[36,64577,64578],{"class":49},"      opacity",[36,64580,53931],{"class":53},[36,64582,713],{"class":49},[36,64584,3833],{"class":53},[36,64586,64587,64589,64591,64593,64595,64597],{"class":38,"line":12389},[36,64588,64348],{"class":49},[36,64590,53931],{"class":53},[36,64592,30632],{"class":49},[36,64594,64355],{"class":49},[36,64596,3371],{"class":114},[36,64598,3833],{"class":53},[36,64600,64601],{"class":38,"line":12395},[36,64602,4721],{"class":53},[36,64604,64605],{"class":38,"line":12422},[36,64606,546],{"emptyLinePlaceholder":545},[36,64608,64609,64612],{"class":38,"line":12431},[36,64610,64611],{"class":4500},"    .list",[36,64613,18091],{"class":53},[36,64615,64616,64618,64620,64622,64624],{"class":38,"line":12437},[36,64617,64099],{"class":49},[36,64619,53931],{"class":53},[36,64621,6518],{"class":49},[36,64623,53986],{"class":114},[36,64625,3833],{"class":53},[36,64627,64628,64630,64632,64634,64636],{"class":38,"line":12445},[36,64629,64112],{"class":49},[36,64631,53931],{"class":53},[36,64633,64117],{"class":49},[36,64635,53986],{"class":114},[36,64637,3833],{"class":53},[36,64639,64640,64642,64644,64646],{"class":38,"line":12450},[36,64641,57500],{"class":49},[36,64643,53931],{"class":53},[36,64645,53971],{"class":49},[36,64647,3833],{"class":53},[36,64649,64650],{"class":38,"line":19122},[36,64651,4721],{"class":53},[36,64653,64654],{"class":38,"line":19128},[36,64655,546],{"emptyLinePlaceholder":545},[36,64657,64658,64660,64663],{"class":38,"line":19151},[36,64659,64611],{"class":4500},[36,64661,64662],{"class":4500}," .item",[36,64664,18091],{"class":53},[36,64666,64667,64669,64671,64673,64675],{"class":38,"line":19157},[36,64668,57262],{"class":49},[36,64670,53931],{"class":53},[36,64672,166],{"class":49},[36,64674,1095],{"class":114},[36,64676,3833],{"class":53},[36,64678,64679,64681,64683,64685],{"class":38,"line":19180},[36,64680,57500],{"class":49},[36,64682,53931],{"class":53},[36,64684,53971],{"class":49},[36,64686,3833],{"class":53},[36,64688,64689],{"class":38,"line":19194},[36,64690,4721],{"class":53},[36,64692,64693],{"class":38,"line":19214},[36,64694,546],{"emptyLinePlaceholder":545},[36,64696,64697,64699,64701,64704],{"class":38,"line":19220},[36,64698,64611],{"class":4500},[36,64700,64662],{"class":4500},[36,64702,64703],{"class":4500}," .info",[36,64705,18091],{"class":53},[36,64707,64708,64710,64712,64714],{"class":38,"line":19231},[36,64709,64325],{"class":49},[36,64711,53931],{"class":53},[36,64713,707],{"class":49},[36,64715,3833],{"class":53},[36,64717,64718,64721,64723,64725,64727,64730,64733],{"class":38,"line":19254},[36,64719,64720],{"class":49},"      border-bottom",[36,64722,53931],{"class":53},[36,64724,707],{"class":49},[36,64726,53986],{"class":114},[36,64728,64729],{"class":49}," dashed",[36,64731,64732],{"class":49}," #e4e4e4",[36,64734,3833],{"class":53},[36,64736,64737,64740,64742,64744,64746],{"class":38,"line":19276},[36,64738,64739],{"class":49},"      padding-bottom",[36,64741,53931],{"class":53},[36,64743,1317],{"class":49},[36,64745,53986],{"class":114},[36,64747,3833],{"class":53},[36,64749,64750],{"class":38,"line":19281},[36,64751,4721],{"class":53},[36,64753,64754],{"class":38,"line":19287},[36,64755,546],{"emptyLinePlaceholder":545},[36,64757,64758,64760,64762,64764],{"class":38,"line":19301},[36,64759,64611],{"class":4500},[36,64761,64662],{"class":4500},[36,64763,9352],{"class":53794},[36,64765,18091],{"class":53},[36,64767,64768,64770,64772,64774],{"class":38,"line":19314},[36,64769,57197],{"class":49},[36,64771,53931],{"class":53},[36,64773,713],{"class":49},[36,64775,3833],{"class":53},[36,64777,64778],{"class":38,"line":19319},[36,64779,4721],{"class":53},[36,64781,64782],{"class":38,"line":19333},[36,64783,546],{"emptyLinePlaceholder":545},[36,64785,64786,64788,64790,64793],{"class":38,"line":19338},[36,64787,64611],{"class":4500},[36,64789,64662],{"class":4500},[36,64791,64792],{"class":4500}," .name",[36,64794,18091],{"class":53},[36,64796,64797,64799,64801,64804],{"class":38,"line":19344},[36,64798,59906],{"class":49},[36,64800,53931],{"class":53},[36,64802,64803],{"class":49},"#FB7299",[36,64805,3833],{"class":53},[36,64807,64808,64810,64812,64814,64816],{"class":38,"line":19349},[36,64809,57413],{"class":49},[36,64811,53931],{"class":53},[36,64813,3226],{"class":49},[36,64815,53986],{"class":114},[36,64817,3833],{"class":53},[36,64819,64820,64823,64825,64828],{"class":38,"line":19363},[36,64821,64822],{"class":49},"      font-weight",[36,64824,53931],{"class":53},[36,64826,64827],{"class":49},"bold",[36,64829,3833],{"class":53},[36,64831,64832],{"class":38,"line":19368},[36,64833,4721],{"class":53},[36,64835,64836],{"class":38,"line":19373},[36,64837,546],{"emptyLinePlaceholder":545},[36,64839,64840,64842,64844,64847],{"class":38,"line":19387},[36,64841,64611],{"class":4500},[36,64843,64662],{"class":4500},[36,64845,64846],{"class":4500}," .text",[36,64848,18091],{"class":53},[36,64850,64851,64853,64855,64858],{"class":38,"line":19399},[36,64852,59906],{"class":49},[36,64854,53931],{"class":53},[36,64856,64857],{"class":49},"#333",[36,64859,3833],{"class":53},[36,64861,64862,64864,64866,64868,64870,64872],{"class":38,"line":19404},[36,64863,57186],{"class":49},[36,64865,53931],{"class":53},[36,64867,1317],{"class":49},[36,64869,53986],{"class":114},[36,64871,6624],{"class":49},[36,64873,3833],{"class":53},[36,64875,64876],{"class":38,"line":19417},[36,64877,4721],{"class":53},[36,64879,64880],{"class":38,"line":19422},[36,64881,546],{"emptyLinePlaceholder":545},[36,64883,64884,64886,64888,64891],{"class":38,"line":19427},[36,64885,64611],{"class":4500},[36,64887,64662],{"class":4500},[36,64889,64890],{"class":4500}," .time",[36,64892,18091],{"class":53},[36,64894,64895,64897,64899,64901],{"class":38,"line":19432},[36,64896,59906],{"class":49},[36,64898,53931],{"class":53},[36,64900,64558],{"class":49},[36,64902,3833],{"class":53},[36,64904,64905,64907,64909,64911,64913],{"class":38,"line":19445},[36,64906,57413],{"class":49},[36,64908,53931],{"class":53},[36,64910,3176],{"class":49},[36,64912,53986],{"class":114},[36,64914,3833],{"class":53},[36,64916,64917],{"class":38,"line":19450},[36,64918,4721],{"class":53},[36,64920,64921,64923,64925],{"class":38,"line":35135},[36,64922,54911],{"class":53},[36,64924,2602],{"class":53794},[36,64926,53801],{"class":53},[36,64928,64929,64931,64933],{"class":38,"line":35141},[36,64930,54279],{"class":53},[36,64932,53828],{"class":53794},[36,64934,53801],{"class":53},[36,64936,64937],{"class":38,"line":35147},[36,64938,546],{"emptyLinePlaceholder":545},[36,64940,64941,64943,64945],{"class":38,"line":35153},[36,64942,1507],{"class":53},[36,64944,54294],{"class":53794},[36,64946,53801],{"class":53},[36,64948,64949,64951,64953,64955,64957,64960],{"class":38,"line":35159},[36,64950,54638],{"class":53},[36,64952,54105],{"class":53794},[36,64954,55980],{"class":4500},[36,64956,115],{"class":53},[36,64958,64959],{"class":57},"\"wrapper\"",[36,64961,53801],{"class":53},[36,64963,64964,64966,64968,64970,64972,64975,64977,64979],{"class":38,"line":35170},[36,64965,53835],{"class":53},[36,64967,3122],{"class":53794},[36,64969,55980],{"class":4500},[36,64971,115],{"class":53},[36,64973,64974],{"class":57},"\"avatar\"",[36,64976,57805],{"class":53},[36,64978,3122],{"class":53794},[36,64980,53801],{"class":53},[36,64982,64983,64985,64987,64989,64991,64994,64996,64998,65001,65003,65005,65007,65010,65012,65015,65017,65019],{"class":38,"line":35176},[36,64984,53835],{"class":53},[36,64986,56781],{"class":53794},[36,64988,17479],{"class":4500},[36,64990,115],{"class":53},[36,64992,64993],{"class":57},"\"tx\"",[36,64995,63508],{"class":4500},[36,64997,115],{"class":53},[36,64999,65000],{"class":57},"\"发一条友善的评论\"",[36,65002,56804],{"class":4500},[36,65004,115],{"class":53},[36,65006,6232],{"class":57},[36,65008,65009],{"class":4500}," maxlength",[36,65011,115],{"class":53},[36,65013,65014],{"class":57},"\"200\"",[36,65016,57805],{"class":53},[36,65018,56781],{"class":53794},[36,65020,53801],{"class":53},[36,65022,65023,65025,65027,65030,65032],{"class":38,"line":35196},[36,65024,53835],{"class":53},[36,65026,56380],{"class":53794},[36,65028,65029],{"class":53},">发布\u003C\u002F",[36,65031,56380],{"class":53794},[36,65033,53801],{"class":53},[36,65035,65036,65038,65040],{"class":38,"line":35202},[36,65037,54911],{"class":53},[36,65039,54105],{"class":53794},[36,65041,53801],{"class":53},[36,65043,65044,65046,65048,65050,65052,65054],{"class":38,"line":35213},[36,65045,54638],{"class":53},[36,65047,54105],{"class":53794},[36,65049,55980],{"class":4500},[36,65051,115],{"class":53},[36,65053,64959],{"class":57},[36,65055,53801],{"class":53},[36,65057,65058,65060,65062,65064,65066,65069,65072,65074],{"class":38,"line":35219},[36,65059,53835],{"class":53},[36,65061,36],{"class":53794},[36,65063,55980],{"class":4500},[36,65065,115],{"class":53},[36,65067,65068],{"class":57},"\"total\"",[36,65070,65071],{"class":53},">0\u002F200字\u003C\u002F",[36,65073,36],{"class":53794},[36,65075,53801],{"class":53},[36,65077,65078,65080,65082],{"class":38,"line":35225},[36,65079,54911],{"class":53},[36,65081,54105],{"class":53794},[36,65083,53801],{"class":53},[36,65085,65086,65088,65090,65092,65094,65097],{"class":38,"line":35231},[36,65087,54638],{"class":53},[36,65089,54105],{"class":53794},[36,65091,55980],{"class":4500},[36,65093,115],{"class":53},[36,65095,65096],{"class":57},"\"list\"",[36,65098,53801],{"class":53},[36,65100,65101,65103,65105,65107,65109,65112,65115,65117,65120],{"class":38,"line":35237},[36,65102,53835],{"class":53},[36,65104,54105],{"class":53794},[36,65106,55980],{"class":4500},[36,65108,115],{"class":53},[36,65110,65111],{"class":57},"\"item\"",[36,65113,65114],{"class":4500}," style",[36,65116,115],{"class":53},[36,65118,65119],{"class":57},"\"display: none;\"",[36,65121,53801],{"class":53},[36,65123,65124,65126,65128,65130,65132,65134,65136,65138],{"class":38,"line":35243},[36,65125,57725],{"class":53},[36,65127,3122],{"class":53794},[36,65129,55980],{"class":4500},[36,65131,115],{"class":53},[36,65133,64974],{"class":57},[36,65135,57805],{"class":53},[36,65137,3122],{"class":53794},[36,65139,53801],{"class":53},[36,65141,65142,65144,65146,65148,65150,65153],{"class":38,"line":35249},[36,65143,57725],{"class":53},[36,65145,54105],{"class":53794},[36,65147,55980],{"class":4500},[36,65149,115],{"class":53},[36,65151,65152],{"class":57},"\"info\"",[36,65154,53801],{"class":53},[36,65156,65157,65159,65161,65163,65165,65168,65171,65173],{"class":38,"line":35255},[36,65158,57793],{"class":53},[36,65160,19],{"class":53794},[36,65162,55980],{"class":4500},[36,65164,115],{"class":53},[36,65166,65167],{"class":57},"\"name\"",[36,65169,65170],{"class":53},">清风徐来\u003C\u002F",[36,65172,19],{"class":53794},[36,65174,53801],{"class":53},[36,65176,65177,65179,65181,65183,65185,65188,65191,65193],{"class":38,"line":35275},[36,65178,57793],{"class":53},[36,65180,19],{"class":53794},[36,65182,55980],{"class":4500},[36,65184,115],{"class":53},[36,65186,65187],{"class":57},"\"text\"",[36,65189,65190],{"class":53},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,65192,19],{"class":53794},[36,65194,53801],{"class":53},[36,65196,65197,65199,65201,65203,65205,65208,65211,65213],{"class":38,"line":35281},[36,65198,57793],{"class":53},[36,65200,19],{"class":53794},[36,65202,55980],{"class":4500},[36,65204,115],{"class":53},[36,65206,65207],{"class":57},"\"time\"",[36,65209,65210],{"class":53},">2022-10-10 20:29:21\u003C\u002F",[36,65212,19],{"class":53794},[36,65214,53801],{"class":53},[36,65216,65217,65219,65221],{"class":38,"line":35297},[36,65218,57898],{"class":53},[36,65220,54105],{"class":53794},[36,65222,53801],{"class":53},[36,65224,65225,65227,65229],{"class":38,"line":35303},[36,65226,54270],{"class":53},[36,65228,54105],{"class":53794},[36,65230,53801],{"class":53},[36,65232,65233,65235,65237],{"class":38,"line":35317},[36,65234,54911],{"class":53},[36,65236,54105],{"class":53794},[36,65238,53801],{"class":53},[36,65240,65241,65243,65245],{"class":38,"line":35323},[36,65242,54638],{"class":53},[36,65244,54307],{"class":53794},[36,65246,53801],{"class":53},[36,65248,65249,65251,65254,65256,65258,65260,65262,65265],{"class":38,"line":35338},[36,65250,13744],{"class":114},[36,65252,65253],{"class":49}," tx",[36,65255,498],{"class":114},[36,65257,56888],{"class":53},[36,65259,56891],{"class":4500},[36,65261,54],{"class":53},[36,65263,65264],{"class":57},"'#tx'",[36,65266,61],{"class":53},[36,65268,65269,65271,65274,65276,65278,65280,65282,65285],{"class":38,"line":35344},[36,65270,13744],{"class":114},[36,65272,65273],{"class":49}," total",[36,65275,498],{"class":114},[36,65277,56888],{"class":53},[36,65279,56891],{"class":4500},[36,65281,54],{"class":53},[36,65283,65284],{"class":57},"'.total'",[36,65286,61],{"class":53},[36,65288,65289],{"class":38,"line":35353},[36,65290,65291],{"class":42},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,65293,65294,65297,65299,65301,65303,65305,65307],{"class":38,"line":35359},[36,65295,65296],{"class":53},"    tx.",[36,65298,60303],{"class":4500},[36,65300,54],{"class":53},[36,65302,63815],{"class":57},[36,65304,14958],{"class":53},[36,65306,56940],{"class":114},[36,65308,56943],{"class":53},[36,65310,65311,65314,65316],{"class":38,"line":35368},[36,65312,65313],{"class":53},"      total.style.opacity ",[36,65315,115],{"class":114},[36,65317,124],{"class":49},[36,65319,65320],{"class":38,"line":35374},[36,65321,35962],{"class":53},[36,65323,65324],{"class":38,"line":35380},[36,65325,65326],{"class":42},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,65328,65329,65331,65333,65335,65337,65339,65341],{"class":38,"line":35389},[36,65330,65296],{"class":53},[36,65332,60303],{"class":4500},[36,65334,54],{"class":53},[36,65336,63876],{"class":57},[36,65338,14958],{"class":53},[36,65340,56940],{"class":114},[36,65342,56943],{"class":53},[36,65344,65345,65347,65349],{"class":38,"line":35395},[36,65346,65313],{"class":53},[36,65348,115],{"class":114},[36,65350,49830],{"class":49},[36,65352,65353],{"class":38,"line":35406},[36,65354,35962],{"class":53},[36,65356,65357],{"class":38,"line":35412},[36,65358,65359],{"class":42},"    \u002F\u002F 3. 检测用户输入\n",[36,65361,65362,65364,65366,65368,65371,65373,65375],{"class":38,"line":35431},[36,65363,65296],{"class":53},[36,65365,60303],{"class":4500},[36,65367,54],{"class":53},[36,65369,65370],{"class":57},"'input'",[36,65372,14958],{"class":53},[36,65374,56940],{"class":114},[36,65376,56943],{"class":53},[36,65378,65379],{"class":38,"line":35437},[36,65380,65381],{"class":42},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,65383,65384,65387,65389,65392,65395,65397,65400,65402,65404],{"class":38,"line":35448},[36,65385,65386],{"class":53},"      total.innerHTML ",[36,65388,115],{"class":114},[36,65390,65391],{"class":57}," `${",[36,65393,65394],{"class":53},"tx",[36,65396,3235],{"class":57},[36,65398,65399],{"class":53},"value",[36,65401,3235],{"class":57},[36,65403,54462],{"class":49},[36,65405,65406],{"class":57},"}\u002F200字`\n",[36,65408,65409],{"class":38,"line":35454},[36,65410,35962],{"class":53},[36,65412,65413],{"class":38,"line":35474},[36,65414,546],{"emptyLinePlaceholder":545},[36,65416,65417],{"class":38,"line":35490},[36,65418,65419],{"class":42},"    \u002F\u002F const str = 'andy'\n",[36,65421,65422],{"class":38,"line":35496},[36,65423,65424],{"class":42},"    \u002F\u002F console.log(str.length)\n",[36,65426,65427,65429,65431],{"class":38,"line":35510},[36,65428,54911],{"class":53},[36,65430,54307],{"class":53794},[36,65432,53801],{"class":53},[36,65434,65435,65437,65439],{"class":38,"line":35516},[36,65436,54279],{"class":53},[36,65438,54294],{"class":53794},[36,65440,53801],{"class":53},[36,65442,65443],{"class":38,"line":35522},[36,65444,546],{"emptyLinePlaceholder":545},[36,65446,65447,65449,65451],{"class":38,"line":35533},[36,65448,54279],{"class":53},[36,65450,53131],{"class":53794},[36,65452,53801],{"class":53},[24515,65454,65456],{"id":65455},"_3254-change事件","3.2.5.4 change事件",[19,65458,65459],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65461,65462],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65464,65465],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,65467,65469],{"className":53129,"code":65468,"language":53131,"meta":31,"style":31},"\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",[33,65470,65471,65481,65495,65499,65507,65521,65541,65553,65561,65565,65573,65587,65595,65613,65631,65643,65647,65655,65663,65667],{"__ignoreMap":31},[36,65472,65473,65475,65477,65479],{"class":38,"line":39},[36,65474,53791],{"class":53},[36,65476,53795],{"class":53794},[36,65478,53798],{"class":4500},[36,65480,53801],{"class":53},[36,65482,65483,65485,65487,65489,65491,65493],{"class":38,"line":46},[36,65484,1507],{"class":53},[36,65486,53131],{"class":53794},[36,65488,53810],{"class":4500},[36,65490,115],{"class":53},[36,65492,53815],{"class":57},[36,65494,53801],{"class":53},[36,65496,65497],{"class":38,"line":82},[36,65498,546],{"emptyLinePlaceholder":545},[36,65500,65501,65503,65505],{"class":38,"line":88},[36,65502,1507],{"class":53},[36,65504,53828],{"class":53794},[36,65506,53801],{"class":53},[36,65508,65509,65511,65513,65515,65517,65519],{"class":38,"line":195},[36,65510,54638],{"class":53},[36,65512,53838],{"class":53794},[36,65514,53841],{"class":4500},[36,65516,115],{"class":53},[36,65518,53846],{"class":57},[36,65520,53801],{"class":53},[36,65522,65523,65525,65527,65529,65531,65533,65535,65537,65539],{"class":38,"line":1517},[36,65524,54638],{"class":53},[36,65526,53838],{"class":53794},[36,65528,17440],{"class":4500},[36,65530,115],{"class":53},[36,65532,53885],{"class":57},[36,65534,53865],{"class":4500},[36,65536,115],{"class":53},[36,65538,53892],{"class":57},[36,65540,53801],{"class":53},[36,65542,65543,65545,65547,65549,65551],{"class":38,"line":2421},[36,65544,54638],{"class":53},[36,65546,53901],{"class":53794},[36,65548,53904],{"class":53},[36,65550,53901],{"class":53794},[36,65552,53801],{"class":53},[36,65554,65555,65557,65559],{"class":38,"line":2446},[36,65556,54279],{"class":53},[36,65558,53828],{"class":53794},[36,65560,53801],{"class":53},[36,65562,65563],{"class":38,"line":2469},[36,65564,546],{"emptyLinePlaceholder":545},[36,65566,65567,65569,65571],{"class":38,"line":2492},[36,65568,1507],{"class":53},[36,65570,54294],{"class":53794},[36,65572,53801],{"class":53},[36,65574,65575,65577,65579,65581,65583,65585],{"class":38,"line":4150},[36,65576,54638],{"class":53},[36,65578,913],{"class":53794},[36,65580,56317],{"class":4500},[36,65582,115],{"class":53},[36,65584,65187],{"class":57},[36,65586,53801],{"class":53},[36,65588,65589,65591,65593],{"class":38,"line":4155},[36,65590,54638],{"class":53},[36,65592,54307],{"class":53794},[36,65594,53801],{"class":53},[36,65596,65597,65599,65601,65603,65605,65607,65609,65611],{"class":38,"line":4161},[36,65598,13744],{"class":114},[36,65600,871],{"class":49},[36,65602,498],{"class":114},[36,65604,56888],{"class":53},[36,65606,56891],{"class":4500},[36,65608,54],{"class":53},[36,65610,65370],{"class":57},[36,65612,61],{"class":53},[36,65614,65615,65618,65620,65622,65625,65627,65629],{"class":38,"line":4166},[36,65616,65617],{"class":53},"    input.",[36,65619,60303],{"class":4500},[36,65621,54],{"class":53},[36,65623,65624],{"class":57},"'change'",[36,65626,14958],{"class":53},[36,65628,56940],{"class":114},[36,65630,56943],{"class":53},[36,65632,65633,65635,65637,65639,65641],{"class":38,"line":4180},[36,65634,60734],{"class":53},[36,65636,60737],{"class":4500},[36,65638,54],{"class":53},[36,65640,3269],{"class":49},[36,65642,61],{"class":53},[36,65644,65645],{"class":38,"line":4185},[36,65646,35962],{"class":53},[36,65648,65649,65651,65653],{"class":38,"line":4191},[36,65650,54911],{"class":53},[36,65652,54307],{"class":53794},[36,65654,53801],{"class":53},[36,65656,65657,65659,65661],{"class":38,"line":4212},[36,65658,54279],{"class":53},[36,65660,54294],{"class":53794},[36,65662,53801],{"class":53},[36,65664,65665],{"class":38,"line":4217},[36,65666,546],{"emptyLinePlaceholder":545},[36,65668,65669,65671,65673],{"class":38,"line":4231},[36,65670,54279],{"class":53},[36,65672,53131],{"class":53794},[36,65674,53801],{"class":53},[19,65676,65677],{},"总结：内容发生改变才回去触发",[997,65679,65681],{"id":65680},"_326-事件对象","3.2.6 事件对象",[24515,65683,65685],{"id":65684},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65687,65688],{},[4000,65689],{"alt":31,"src":65690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65692,65693],{},[4000,65694],{"alt":31,"src":65695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65697,65698],{},"点击一次，就输出了事件对象，它是个对象",[19,65700,65701],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65703,65704],{},[4000,65705],{"alt":31,"src":65706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24515,65708,65710],{"id":65709},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65712,65713],{},[4000,65714],{"alt":31,"src":65715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65717,65718],{},"实现按特殊字符才是实现打印输出效果：",[26,65720,65722],{"className":55561,"code":65721,"language":55563,"meta":31,"style":31},"\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",[33,65723,65724,65732,65737,65751,65759,65764,65769,65774,65779,65784,65789,65794,65799,65804,65808,65812,65820],{"__ignoreMap":31},[36,65725,65726,65728,65730],{"class":38,"line":39},[36,65727,1507],{"class":53},[36,65729,54294],{"class":53794},[36,65731,53801],{"class":53},[36,65733,65734],{"class":38,"line":46},[36,65735,65736],{"class":42},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,65738,65739,65741,65743,65745,65747,65749],{"class":38,"line":82},[36,65740,54638],{"class":53},[36,65742,913],{"class":53794},[36,65744,56317],{"class":4500},[36,65746,115],{"class":53},[36,65748,65187],{"class":57},[36,65750,53801],{"class":53},[36,65752,65753,65755,65757],{"class":38,"line":88},[36,65754,54638],{"class":53},[36,65756,54307],{"class":53794},[36,65758,53801],{"class":53},[36,65760,65761],{"class":38,"line":195},[36,65762,65763],{"class":53},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,65765,65766],{"class":38,"line":1517},[36,65767,65768],{"class":53},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,65770,65771],{"class":38,"line":2421},[36,65772,65773],{"class":53},"    \u002F\u002F   console.log(e);\n",[36,65775,65776],{"class":38,"line":2446},[36,65777,65778],{"class":53},"    \u002F\u002F })\n",[36,65780,65781],{"class":38,"line":2469},[36,65782,65783],{"class":53},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,65785,65786],{"class":38,"line":2492},[36,65787,65788],{"class":53},"    const input = document.querySelector('input')\n",[36,65790,65791],{"class":38,"line":4150},[36,65792,65793],{"class":53},"    input.addEventListener('keyup', function (e) {\n",[36,65795,65796],{"class":38,"line":4155},[36,65797,65798],{"class":53},"      if (e.key === 'Enter') {\n",[36,65800,65801],{"class":38,"line":4161},[36,65802,65803],{"class":53},"        console.log('我按下了回车键')\n",[36,65805,65806],{"class":38,"line":4166},[36,65807,54892],{"class":53},[36,65809,65810],{"class":38,"line":4180},[36,65811,35962],{"class":53},[36,65813,65814,65816,65818],{"class":38,"line":4185},[36,65815,54911],{"class":53},[36,65817,54307],{"class":53794},[36,65819,53801],{"class":53},[36,65821,65822,65824,65826],{"class":38,"line":4191},[36,65823,54279],{"class":53},[36,65825,54294],{"class":53794},[36,65827,53801],{"class":53},[24515,65829,65831],{"id":65830},"_3263-trim方法","3.2.6.3 trim方法",[19,65833,65834],{},[4000,65835],{"alt":31,"src":65836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65838,65839],{},[4000,65840],{"alt":31,"src":65841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65843,65844],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65846,65847],{},"str.trim()",[997,65849,65851],{"id":65850},"_327-环境对象","3.2.7 环境对象",[19,65853,65854],{},[4000,65855],{"alt":31,"src":65856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65858,65859],{},[4000,65860],{"alt":31,"src":65861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65863,65864],{},[4000,65865],{"alt":31,"src":65866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65868,65869],{},"实际函数调用是window.fn()",[19,65871,65872],{},"普通函数里面this指向的是window",[3680,65874,65875,65878,65881],{},[436,65876,65877],{},"在普通函数下，this指向的是window",[436,65879,65880],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[436,65882,65883],{},"箭头函数没有this",[19,65885,65886],{},"粗略记法就是：谁调用，this就指向谁",[19,65888,65889],{},[4000,65890],{"alt":31,"src":65891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65893,65894],{},[4000,65895],{"alt":31,"src":65896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65898,65899],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65901,65902],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,65904,65906],{"className":55561,"code":65905,"language":55563,"meta":31,"style":31},"\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",[33,65907,65908,65916,65928,65936,65941,65946,65951,65956,65960,65968],{"__ignoreMap":31},[36,65909,65910,65912,65914],{"class":38,"line":39},[36,65911,1507],{"class":53},[36,65913,54294],{"class":53794},[36,65915,53801],{"class":53},[36,65917,65918,65920,65922,65924,65926],{"class":38,"line":46},[36,65919,54638],{"class":53},[36,65921,56380],{"class":53794},[36,65923,56386],{"class":53},[36,65925,56380],{"class":53794},[36,65927,53801],{"class":53},[36,65929,65930,65932,65934],{"class":38,"line":82},[36,65931,54638],{"class":53},[36,65933,54307],{"class":53794},[36,65935,53801],{"class":53},[36,65937,65938],{"class":38,"line":88},[36,65939,65940],{"class":53},"    const button = document.querySelector('button')\n",[36,65942,65943],{"class":38,"line":195},[36,65944,65945],{"class":53},"    button.addEventListener('click', function () {\n",[36,65947,65948],{"class":38,"line":1517},[36,65949,65950],{"class":53},"      \u002F\u002F console.log(this);\n",[36,65952,65953],{"class":38,"line":2421},[36,65954,65955],{"class":53},"      this.style.color = 'pink'\n",[36,65957,65958],{"class":38,"line":2446},[36,65959,35962],{"class":53},[36,65961,65962,65964,65966],{"class":38,"line":2469},[36,65963,54911],{"class":53},[36,65965,54307],{"class":53794},[36,65967,53801],{"class":53},[36,65969,65970,65972,65974],{"class":38,"line":2492},[36,65971,54279],{"class":53},[36,65973,54294],{"class":53794},[36,65975,53801],{"class":53},[997,65977,65979],{"id":65978},"_328-回调函数","3.2.8 回调函数",[19,65981,65982],{},[4000,65983],{"alt":31,"src":65984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65986,65987],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65989,13855],{},[3680,65991,65992,65995,65998],{},[436,65993,65994],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[436,65996,65997],{},"回调函数本质还是函数，只不过把它当成参数使用",[436,65999,66000],{},"使用匿名函数做为回调函数比较常见",[997,66002,66004],{"id":66003},"_329-tab栏切换","3.2.9 tab栏切换",[19,66006,66007],{},[4000,66008],{"alt":31,"src":66009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,66011,66013],{"className":53129,"code":66012,"language":53131,"meta":31,"style":31},"\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",[33,66014,66015,66025,66039,66043,66051,66065,66085,66105,66118,66126,66132,66142,66152,66156,66160,66167,66180,66193,66205,66221,66225,66229,66236,66248,66260,66272,66282,66292,66296,66300,66309,66321,66332,66344,66348,66352,66360,66370,66380,66390,66394,66398,66408,66422,66434,66438,66442,66454,66465,66482,66492,66496,66500,66515,66526,66536,66540,66544,66551,66566,66570,66574,66582,66592,66596,66600,66609,66619,66623,66631,66639,66643,66651,66666,66681,66694,66702,66736,66763,66790,66817,66844,66852,66860,66875,66912,66947,66982,67017,67052,67060,67068,67076,67081,67086,67106,67111,67140,67145,67150,67168,67173,67178,67183,67205,67210,67226,67230,67235,67240,67261,67266,67295,67299,67304,67308,67316,67324,67328],{"__ignoreMap":31},[36,66016,66017,66019,66021,66023],{"class":38,"line":39},[36,66018,53791],{"class":53},[36,66020,53795],{"class":53794},[36,66022,53798],{"class":4500},[36,66024,53801],{"class":53},[36,66026,66027,66029,66031,66033,66035,66037],{"class":38,"line":46},[36,66028,1507],{"class":53},[36,66030,53131],{"class":53794},[36,66032,53810],{"class":4500},[36,66034,115],{"class":53},[36,66036,53815],{"class":57},[36,66038,53801],{"class":53},[36,66040,66041],{"class":38,"line":82},[36,66042,546],{"emptyLinePlaceholder":545},[36,66044,66045,66047,66049],{"class":38,"line":88},[36,66046,1507],{"class":53},[36,66048,53828],{"class":53794},[36,66050,53801],{"class":53},[36,66052,66053,66055,66057,66059,66061,66063],{"class":38,"line":195},[36,66054,54638],{"class":53},[36,66056,53838],{"class":53794},[36,66058,53841],{"class":4500},[36,66060,115],{"class":53},[36,66062,53846],{"class":57},[36,66064,61616],{"class":53},[36,66066,66067,66069,66071,66073,66075,66077,66079,66081,66083],{"class":38,"line":1517},[36,66068,54638],{"class":53},[36,66070,53838],{"class":53794},[36,66072,53857],{"class":4500},[36,66074,115],{"class":53},[36,66076,53862],{"class":57},[36,66078,53865],{"class":4500},[36,66080,115],{"class":53},[36,66082,53870],{"class":57},[36,66084,61616],{"class":53},[36,66086,66087,66089,66091,66093,66095,66097,66099,66101,66103],{"class":38,"line":2421},[36,66088,54638],{"class":53},[36,66090,53838],{"class":53794},[36,66092,17440],{"class":4500},[36,66094,115],{"class":53},[36,66096,53885],{"class":57},[36,66098,53865],{"class":4500},[36,66100,115],{"class":53},[36,66102,53892],{"class":57},[36,66104,61616],{"class":53},[36,66106,66107,66109,66111,66114,66116],{"class":38,"line":2446},[36,66108,54638],{"class":53},[36,66110,53901],{"class":53794},[36,66112,66113],{"class":53},">tab栏切换\u003C\u002F",[36,66115,53901],{"class":53794},[36,66117,53801],{"class":53},[36,66119,66120,66122,66124],{"class":38,"line":2469},[36,66121,54638],{"class":53},[36,66123,2602],{"class":53794},[36,66125,53801],{"class":53},[36,66127,66128,66130],{"class":38,"line":2492},[36,66129,8930],{"class":53794},[36,66131,18091],{"class":53},[36,66133,66134,66136,66138,66140],{"class":38,"line":4150},[36,66135,57197],{"class":49},[36,66137,53931],{"class":53},[36,66139,713],{"class":49},[36,66141,3833],{"class":53},[36,66143,66144,66146,66148,66150],{"class":38,"line":4155},[36,66145,57186],{"class":49},[36,66147,53931],{"class":53},[36,66149,713],{"class":49},[36,66151,3833],{"class":53},[36,66153,66154],{"class":38,"line":4161},[36,66155,4721],{"class":53},[36,66157,66158],{"class":38,"line":4166},[36,66159,546],{"emptyLinePlaceholder":545},[36,66161,66162,66165],{"class":38,"line":4180},[36,66163,66164],{"class":4500},"    .tab",[36,66166,18091],{"class":53},[36,66168,66169,66171,66173,66176,66178],{"class":38,"line":4185},[36,66170,57262],{"class":49},[36,66172,53931],{"class":53},[36,66174,66175],{"class":49},"590",[36,66177,53986],{"class":114},[36,66179,3833],{"class":53},[36,66181,66182,66184,66186,66189,66191],{"class":38,"line":4191},[36,66183,57276],{"class":49},[36,66185,53931],{"class":53},[36,66187,66188],{"class":49},"340",[36,66190,53986],{"class":114},[36,66192,3833],{"class":53},[36,66194,66195,66197,66199,66201,66203],{"class":38,"line":4212},[36,66196,57197],{"class":49},[36,66198,53931],{"class":53},[36,66200,3376],{"class":49},[36,66202,53986],{"class":114},[36,66204,3833],{"class":53},[36,66206,66207,66209,66211,66213,66215,66217,66219],{"class":38,"line":4217},[36,66208,64465],{"class":49},[36,66210,53931],{"class":53},[36,66212,707],{"class":49},[36,66214,53986],{"class":114},[36,66216,54015],{"class":49},[36,66218,64732],{"class":49},[36,66220,3833],{"class":53},[36,66222,66223],{"class":38,"line":4231},[36,66224,4721],{"class":53},[36,66226,66227],{"class":38,"line":4236},[36,66228,546],{"emptyLinePlaceholder":545},[36,66230,66231,66234],{"class":38,"line":4264},[36,66232,66233],{"class":4500},"    .tab-nav",[36,66235,18091],{"class":53},[36,66237,66238,66240,66242,66244,66246],{"class":38,"line":4269},[36,66239,57262],{"class":49},[36,66241,53931],{"class":53},[36,66243,166],{"class":49},[36,66245,1095],{"class":114},[36,66247,3833],{"class":53},[36,66249,66250,66252,66254,66256,66258],{"class":38,"line":4286},[36,66251,57276],{"class":49},[36,66253,53931],{"class":53},[36,66255,3582],{"class":49},[36,66257,53986],{"class":114},[36,66259,3833],{"class":53},[36,66261,66262,66264,66266,66268,66270],{"class":38,"line":4291},[36,66263,59849],{"class":49},[36,66265,53931],{"class":53},[36,66267,3582],{"class":49},[36,66269,53986],{"class":114},[36,66271,3833],{"class":53},[36,66273,66274,66276,66278,66280],{"class":38,"line":4296},[36,66275,57500],{"class":49},[36,66277,53931],{"class":53},[36,66279,53971],{"class":49},[36,66281,3833],{"class":53},[36,66283,66284,66286,66288,66290],{"class":38,"line":4301},[36,66285,57511],{"class":49},[36,66287,53931],{"class":53},[36,66289,54162],{"class":49},[36,66291,3833],{"class":53},[36,66293,66294],{"class":38,"line":4315},[36,66295,4721],{"class":53},[36,66297,66298],{"class":38,"line":4320},[36,66299,546],{"emptyLinePlaceholder":545},[36,66301,66302,66304,66307],{"class":38,"line":5109},[36,66303,66233],{"class":4500},[36,66305,66306],{"class":53794}," h3",[36,66308,18091],{"class":53},[36,66310,66311,66313,66315,66317,66319],{"class":38,"line":5123},[36,66312,57413],{"class":49},[36,66314,53931],{"class":53},[36,66316,3476],{"class":49},[36,66318,53986],{"class":114},[36,66320,3833],{"class":53},[36,66322,66323,66325,66327,66330],{"class":38,"line":5131},[36,66324,64822],{"class":49},[36,66326,53931],{"class":53},[36,66328,66329],{"class":49},"normal",[36,66331,3833],{"class":53},[36,66333,66334,66336,66338,66340,66342],{"class":38,"line":5136},[36,66335,64488],{"class":49},[36,66337,53931],{"class":53},[36,66339,3376],{"class":49},[36,66341,53986],{"class":114},[36,66343,3833],{"class":53},[36,66345,66346],{"class":38,"line":5142},[36,66347,4721],{"class":53},[36,66349,66350],{"class":38,"line":5148},[36,66351,546],{"emptyLinePlaceholder":545},[36,66353,66354,66356,66358],{"class":38,"line":5153},[36,66355,66233],{"class":4500},[36,66357,63780],{"class":53794},[36,66359,18091],{"class":53},[36,66361,66362,66364,66366,66368],{"class":38,"line":10475},[36,66363,57223],{"class":49},[36,66365,53931],{"class":53},[36,66367,57228],{"class":49},[36,66369,3833],{"class":53},[36,66371,66372,66374,66376,66378],{"class":38,"line":10499},[36,66373,57500],{"class":49},[36,66375,53931],{"class":53},[36,66377,53971],{"class":49},[36,66379,3833],{"class":53},[36,66381,66382,66384,66386,66388],{"class":38,"line":10504},[36,66383,57511],{"class":49},[36,66385,53931],{"class":53},[36,66387,54074],{"class":49},[36,66389,3833],{"class":53},[36,66391,66392],{"class":38,"line":10510},[36,66393,4721],{"class":53},[36,66395,66396],{"class":38,"line":10537},[36,66397,546],{"emptyLinePlaceholder":545},[36,66399,66400,66402,66404,66406],{"class":38,"line":10542},[36,66401,66233],{"class":4500},[36,66403,63780],{"class":53794},[36,66405,57566],{"class":53794},[36,66407,18091],{"class":53},[36,66409,66410,66412,66414,66416,66418,66420],{"class":38,"line":10548},[36,66411,57197],{"class":49},[36,66413,53931],{"class":53},[36,66415,713],{"class":49},[36,66417,11477],{"class":49},[36,66419,53986],{"class":114},[36,66421,3833],{"class":53},[36,66423,66424,66426,66428,66430,66432],{"class":38,"line":10560},[36,66425,57413],{"class":49},[36,66427,53931],{"class":53},[36,66429,3226],{"class":49},[36,66431,53986],{"class":114},[36,66433,3833],{"class":53},[36,66435,66436],{"class":38,"line":10572},[36,66437,4721],{"class":53},[36,66439,66440],{"class":38,"line":10584},[36,66441,546],{"emptyLinePlaceholder":545},[36,66443,66444,66446,66448,66450,66452],{"class":38,"line":12241},[36,66445,66233],{"class":4500},[36,66447,63780],{"class":53794},[36,66449,57566],{"class":53794},[36,66451,3936],{"class":53794},[36,66453,18091],{"class":53},[36,66455,66456,66459,66461,66463],{"class":38,"line":12266},[36,66457,66458],{"class":49},"      text-decoration",[36,66460,53931],{"class":53},[36,66462,57228],{"class":49},[36,66464,3833],{"class":53},[36,66466,66467,66469,66471,66473,66475,66477,66480],{"class":38,"line":12289},[36,66468,64720],{"class":49},[36,66470,53931],{"class":53},[36,66472,1188],{"class":49},[36,66474,53986],{"class":114},[36,66476,54015],{"class":49},[36,66478,66479],{"class":49}," transparent",[36,66481,3833],{"class":53},[36,66483,66484,66486,66488,66490],{"class":38,"line":12313},[36,66485,59906],{"class":49},[36,66487,53931],{"class":53},[36,66489,64857],{"class":49},[36,66491,3833],{"class":53},[36,66493,66494],{"class":38,"line":12318},[36,66495,4721],{"class":53},[36,66497,66498],{"class":38,"line":12323},[36,66499,546],{"emptyLinePlaceholder":545},[36,66501,66502,66504,66506,66508,66510,66513],{"class":38,"line":12328},[36,66503,66233],{"class":4500},[36,66505,63780],{"class":53794},[36,66507,57566],{"class":53794},[36,66509,3936],{"class":53794},[36,66511,66512],{"class":4500},".active",[36,66514,18091],{"class":53},[36,66516,66517,66519,66521,66524],{"class":38,"line":12337},[36,66518,64279],{"class":49},[36,66520,53931],{"class":53},[36,66522,66523],{"class":49},"#e1251b",[36,66525,3833],{"class":53},[36,66527,66528,66530,66532,66534],{"class":38,"line":12342},[36,66529,59906],{"class":49},[36,66531,53931],{"class":53},[36,66533,66523],{"class":49},[36,66535,3833],{"class":53},[36,66537,66538],{"class":38,"line":12348},[36,66539,4721],{"class":53},[36,66541,66542],{"class":38,"line":12369},[36,66543,546],{"emptyLinePlaceholder":545},[36,66545,66546,66549],{"class":38,"line":12375},[36,66547,66548],{"class":4500},"    .tab-content",[36,66550,18091],{"class":53},[36,66552,66553,66555,66557,66559,66562,66564],{"class":38,"line":12389},[36,66554,57186],{"class":49},[36,66556,53931],{"class":53},[36,66558,713],{"class":49},[36,66560,66561],{"class":49}," 16",[36,66563,53986],{"class":114},[36,66565,3833],{"class":53},[36,66567,66568],{"class":38,"line":12395},[36,66569,4721],{"class":53},[36,66571,66572],{"class":38,"line":12422},[36,66573,546],{"emptyLinePlaceholder":545},[36,66575,66576,66578,66580],{"class":38,"line":12431},[36,66577,66548],{"class":4500},[36,66579,64662],{"class":4500},[36,66581,18091],{"class":53},[36,66583,66584,66586,66588,66590],{"class":38,"line":12437},[36,66585,57500],{"class":49},[36,66587,53931],{"class":53},[36,66589,57228],{"class":49},[36,66591,3833],{"class":53},[36,66593,66594],{"class":38,"line":12445},[36,66595,4721],{"class":53},[36,66597,66598],{"class":38,"line":12450},[36,66599,546],{"emptyLinePlaceholder":545},[36,66601,66602,66604,66607],{"class":38,"line":19122},[36,66603,66548],{"class":4500},[36,66605,66606],{"class":4500}," .item.active",[36,66608,18091],{"class":53},[36,66610,66611,66613,66615,66617],{"class":38,"line":19128},[36,66612,57500],{"class":49},[36,66614,53931],{"class":53},[36,66616,63357],{"class":49},[36,66618,3833],{"class":53},[36,66620,66621],{"class":38,"line":19151},[36,66622,4721],{"class":53},[36,66624,66625,66627,66629],{"class":38,"line":19157},[36,66626,54911],{"class":53},[36,66628,2602],{"class":53794},[36,66630,53801],{"class":53},[36,66632,66633,66635,66637],{"class":38,"line":19180},[36,66634,54279],{"class":53},[36,66636,53828],{"class":53794},[36,66638,53801],{"class":53},[36,66640,66641],{"class":38,"line":19194},[36,66642,546],{"emptyLinePlaceholder":545},[36,66644,66645,66647,66649],{"class":38,"line":19214},[36,66646,1507],{"class":53},[36,66648,54294],{"class":53794},[36,66650,53801],{"class":53},[36,66652,66653,66655,66657,66659,66661,66664],{"class":38,"line":19220},[36,66654,54638],{"class":53},[36,66656,54105],{"class":53794},[36,66658,55980],{"class":4500},[36,66660,115],{"class":53},[36,66662,66663],{"class":57},"\"tab\"",[36,66665,53801],{"class":53},[36,66667,66668,66670,66672,66674,66676,66679],{"class":38,"line":19231},[36,66669,53835],{"class":53},[36,66671,54105],{"class":53794},[36,66673,55980],{"class":4500},[36,66675,115],{"class":53},[36,66677,66678],{"class":57},"\"tab-nav\"",[36,66680,53801],{"class":53},[36,66682,66683,66685,66687,66690,66692],{"class":38,"line":19254},[36,66684,57725],{"class":53},[36,66686,997],{"class":53794},[36,66688,66689],{"class":53},">每日特价\u003C\u002F",[36,66691,997],{"class":53794},[36,66693,53801],{"class":53},[36,66695,66696,66698,66700],{"class":38,"line":19276},[36,66697,57725],{"class":53},[36,66699,3680],{"class":53794},[36,66701,53801],{"class":53},[36,66703,66704,66706,66708,66710,66712,66714,66716,66718,66720,66722,66725,66728,66730,66732,66734],{"class":38,"line":19281},[36,66705,57793],{"class":53},[36,66707,436],{"class":53794},[36,66709,63540],{"class":53},[36,66711,2923],{"class":53794},[36,66713,55980],{"class":4500},[36,66715,115],{"class":53},[36,66717,62195],{"class":57},[36,66719,63545],{"class":4500},[36,66721,115],{"class":53},[36,66723,66724],{"class":57},"\"javascript:;\"",[36,66726,66727],{"class":53},">精选\u003C\u002F",[36,66729,2923],{"class":53794},[36,66731,57805],{"class":53},[36,66733,436],{"class":53794},[36,66735,53801],{"class":53},[36,66737,66738,66740,66742,66744,66746,66748,66750,66752,66755,66757,66759,66761],{"class":38,"line":19287},[36,66739,57793],{"class":53},[36,66741,436],{"class":53794},[36,66743,63540],{"class":53},[36,66745,2923],{"class":53794},[36,66747,63545],{"class":4500},[36,66749,115],{"class":53},[36,66751,66724],{"class":57},[36,66753,66754],{"class":53},">美食\u003C\u002F",[36,66756,2923],{"class":53794},[36,66758,57805],{"class":53},[36,66760,436],{"class":53794},[36,66762,53801],{"class":53},[36,66764,66765,66767,66769,66771,66773,66775,66777,66779,66782,66784,66786,66788],{"class":38,"line":19301},[36,66766,57793],{"class":53},[36,66768,436],{"class":53794},[36,66770,63540],{"class":53},[36,66772,2923],{"class":53794},[36,66774,63545],{"class":4500},[36,66776,115],{"class":53},[36,66778,66724],{"class":57},[36,66780,66781],{"class":53},">百货\u003C\u002F",[36,66783,2923],{"class":53794},[36,66785,57805],{"class":53},[36,66787,436],{"class":53794},[36,66789,53801],{"class":53},[36,66791,66792,66794,66796,66798,66800,66802,66804,66806,66809,66811,66813,66815],{"class":38,"line":19314},[36,66793,57793],{"class":53},[36,66795,436],{"class":53794},[36,66797,63540],{"class":53},[36,66799,2923],{"class":53794},[36,66801,63545],{"class":4500},[36,66803,115],{"class":53},[36,66805,66724],{"class":57},[36,66807,66808],{"class":53},">个护\u003C\u002F",[36,66810,2923],{"class":53794},[36,66812,57805],{"class":53},[36,66814,436],{"class":53794},[36,66816,53801],{"class":53},[36,66818,66819,66821,66823,66825,66827,66829,66831,66833,66836,66838,66840,66842],{"class":38,"line":19319},[36,66820,57793],{"class":53},[36,66822,436],{"class":53794},[36,66824,63540],{"class":53},[36,66826,2923],{"class":53794},[36,66828,63545],{"class":4500},[36,66830,115],{"class":53},[36,66832,66724],{"class":57},[36,66834,66835],{"class":53},">预告\u003C\u002F",[36,66837,2923],{"class":53794},[36,66839,57805],{"class":53},[36,66841,436],{"class":53794},[36,66843,53801],{"class":53},[36,66845,66846,66848,66850],{"class":38,"line":19333},[36,66847,57898],{"class":53},[36,66849,3680],{"class":53794},[36,66851,53801],{"class":53},[36,66853,66854,66856,66858],{"class":38,"line":19338},[36,66855,54270],{"class":53},[36,66857,54105],{"class":53794},[36,66859,53801],{"class":53},[36,66861,66862,66864,66866,66868,66870,66873],{"class":38,"line":19344},[36,66863,53835],{"class":53},[36,66865,54105],{"class":53794},[36,66867,55980],{"class":4500},[36,66869,115],{"class":53},[36,66871,66872],{"class":57},"\"tab-content\"",[36,66874,53801],{"class":53},[36,66876,66877,66879,66881,66883,66885,66888,66890,66892,66894,66896,66899,66901,66903,66905,66908,66910],{"class":38,"line":19349},[36,66878,57725],{"class":53},[36,66880,54105],{"class":53794},[36,66882,55980],{"class":4500},[36,66884,115],{"class":53},[36,66886,66887],{"class":57},"\"item active\"",[36,66889,63540],{"class":53},[36,66891,4000],{"class":53794},[36,66893,57730],{"class":4500},[36,66895,115],{"class":53},[36,66897,66898],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,66900,57738],{"class":4500},[36,66902,115],{"class":53},[36,66904,10179],{"class":57},[36,66906,66907],{"class":53}," \u002F>\u003C\u002F",[36,66909,54105],{"class":53794},[36,66911,53801],{"class":53},[36,66913,66914,66916,66918,66920,66922,66924,66926,66928,66930,66932,66935,66937,66939,66941,66943,66945],{"class":38,"line":19363},[36,66915,57725],{"class":53},[36,66917,54105],{"class":53794},[36,66919,55980],{"class":4500},[36,66921,115],{"class":53},[36,66923,65111],{"class":57},[36,66925,63540],{"class":53},[36,66927,4000],{"class":53794},[36,66929,57730],{"class":4500},[36,66931,115],{"class":53},[36,66933,66934],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,66936,57738],{"class":4500},[36,66938,115],{"class":53},[36,66940,10179],{"class":57},[36,66942,66907],{"class":53},[36,66944,54105],{"class":53794},[36,66946,53801],{"class":53},[36,66948,66949,66951,66953,66955,66957,66959,66961,66963,66965,66967,66970,66972,66974,66976,66978,66980],{"class":38,"line":19368},[36,66950,57725],{"class":53},[36,66952,54105],{"class":53794},[36,66954,55980],{"class":4500},[36,66956,115],{"class":53},[36,66958,65111],{"class":57},[36,66960,63540],{"class":53},[36,66962,4000],{"class":53794},[36,66964,57730],{"class":4500},[36,66966,115],{"class":53},[36,66968,66969],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,66971,57738],{"class":4500},[36,66973,115],{"class":53},[36,66975,10179],{"class":57},[36,66977,66907],{"class":53},[36,66979,54105],{"class":53794},[36,66981,53801],{"class":53},[36,66983,66984,66986,66988,66990,66992,66994,66996,66998,67000,67002,67005,67007,67009,67011,67013,67015],{"class":38,"line":19373},[36,66985,57725],{"class":53},[36,66987,54105],{"class":53794},[36,66989,55980],{"class":4500},[36,66991,115],{"class":53},[36,66993,65111],{"class":57},[36,66995,63540],{"class":53},[36,66997,4000],{"class":53794},[36,66999,57730],{"class":4500},[36,67001,115],{"class":53},[36,67003,67004],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,67006,57738],{"class":4500},[36,67008,115],{"class":53},[36,67010,10179],{"class":57},[36,67012,66907],{"class":53},[36,67014,54105],{"class":53794},[36,67016,53801],{"class":53},[36,67018,67019,67021,67023,67025,67027,67029,67031,67033,67035,67037,67040,67042,67044,67046,67048,67050],{"class":38,"line":19387},[36,67020,57725],{"class":53},[36,67022,54105],{"class":53794},[36,67024,55980],{"class":4500},[36,67026,115],{"class":53},[36,67028,65111],{"class":57},[36,67030,63540],{"class":53},[36,67032,4000],{"class":53794},[36,67034,57730],{"class":4500},[36,67036,115],{"class":53},[36,67038,67039],{"class":57},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,67041,57738],{"class":4500},[36,67043,115],{"class":53},[36,67045,10179],{"class":57},[36,67047,66907],{"class":53},[36,67049,54105],{"class":53794},[36,67051,53801],{"class":53},[36,67053,67054,67056,67058],{"class":38,"line":19399},[36,67055,54270],{"class":53},[36,67057,54105],{"class":53794},[36,67059,53801],{"class":53},[36,67061,67062,67064,67066],{"class":38,"line":19404},[36,67063,54911],{"class":53},[36,67065,54105],{"class":53794},[36,67067,53801],{"class":53},[36,67069,67070,67072,67074],{"class":38,"line":19417},[36,67071,54638],{"class":53},[36,67073,54307],{"class":53794},[36,67075,53801],{"class":53},[36,67077,67078],{"class":38,"line":19422},[36,67079,67080],{"class":42},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,67082,67083],{"class":38,"line":19427},[36,67084,67085],{"class":42},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,67087,67088,67090,67093,67095,67097,67099,67101,67104],{"class":38,"line":19432},[36,67089,13744],{"class":114},[36,67091,67092],{"class":49}," as",[36,67094,498],{"class":114},[36,67096,56888],{"class":53},[36,67098,58172],{"class":4500},[36,67100,54],{"class":53},[36,67102,67103],{"class":57},"'.tab-nav a'",[36,67105,61],{"class":53},[36,67107,67108],{"class":38,"line":19445},[36,67109,67110],{"class":42},"    \u002F\u002F console.log(as) \n",[36,67112,67113,67115,67117,67119,67121,67123,67125,67127,67129,67132,67134,67136,67138],{"class":38,"line":19450},[36,67114,5732],{"class":114},[36,67116,4196],{"class":53},[36,67118,54341],{"class":114},[36,67120,11964],{"class":53},[36,67122,115],{"class":114},[36,67124,6624],{"class":49},[36,67126,11971],{"class":53},[36,67128,1507],{"class":114},[36,67130,67131],{"class":53}," as.",[36,67133,54462],{"class":49},[36,67135,5745],{"class":53},[36,67137,4826],{"class":114},[36,67139,14965],{"class":53},[36,67141,67142],{"class":38,"line":35135},[36,67143,67144],{"class":42},"      \u002F\u002F console.log(as[i])\n",[36,67146,67147],{"class":38,"line":35141},[36,67148,67149],{"class":42},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,67151,67152,67155,67157,67159,67162,67164,67166],{"class":38,"line":35147},[36,67153,67154],{"class":53},"      as[i].",[36,67156,60303],{"class":4500},[36,67158,54],{"class":53},[36,67160,67161],{"class":57},"'mouseenter'",[36,67163,14958],{"class":53},[36,67165,56940],{"class":114},[36,67167,56943],{"class":53},[36,67169,67170],{"class":38,"line":35153},[36,67171,67172],{"class":42},"        \u002F\u002F console.log('鼠标经过')\n",[36,67174,67175],{"class":38,"line":35159},[36,67176,67177],{"class":42},"        \u002F\u002F 排他思想  \n",[36,67179,67180],{"class":38,"line":35170},[36,67181,67182],{"class":42},"        \u002F\u002F 干掉别人 移除类active\n",[36,67184,67185,67187,67189,67191,67194,67196,67198,67200,67203],{"class":38,"line":35176},[36,67186,54419],{"class":53},[36,67188,56891],{"class":4500},[36,67190,54],{"class":53},[36,67192,67193],{"class":57},"'.tab-nav .active'",[36,67195,59493],{"class":53},[36,67197,59496],{"class":4500},[36,67199,54],{"class":53},[36,67201,67202],{"class":57},"'active'",[36,67204,61],{"class":53},[36,67206,67207],{"class":38,"line":35196},[36,67208,67209],{"class":42},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,67211,67212,67215,67218,67220,67222,67224],{"class":38,"line":35202},[36,67213,67214],{"class":49},"        this",[36,67216,67217],{"class":53},".classList.",[36,67219,7862],{"class":4500},[36,67221,54],{"class":53},[36,67223,67202],{"class":57},[36,67225,61],{"class":53},[36,67227,67228],{"class":38,"line":35213},[36,67229,546],{"emptyLinePlaceholder":545},[36,67231,67232],{"class":38,"line":35219},[36,67233,67234],{"class":42},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,67236,67237],{"class":38,"line":35225},[36,67238,67239],{"class":42},"        \u002F\u002F 干掉别人\n",[36,67241,67242,67244,67246,67248,67251,67253,67255,67257,67259],{"class":38,"line":35231},[36,67243,54419],{"class":53},[36,67245,56891],{"class":4500},[36,67247,54],{"class":53},[36,67249,67250],{"class":57},"'.tab-content .active'",[36,67252,59493],{"class":53},[36,67254,59496],{"class":4500},[36,67256,54],{"class":53},[36,67258,67202],{"class":57},[36,67260,61],{"class":53},[36,67262,67263],{"class":38,"line":35237},[36,67264,67265],{"class":42},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,67267,67268,67270,67272,67274,67277,67279,67281,67283,67285,67287,67289,67291,67293],{"class":38,"line":35243},[36,67269,54419],{"class":53},[36,67271,56891],{"class":4500},[36,67273,54],{"class":53},[36,67275,67276],{"class":57},"`.tab-content .item:nth-child(${",[36,67278,3122],{"class":53},[36,67280,730],{"class":114},[36,67282,733],{"class":49},[36,67284,59522],{"class":57},[36,67286,59493],{"class":53},[36,67288,7862],{"class":4500},[36,67290,54],{"class":53},[36,67292,67202],{"class":57},[36,67294,61],{"class":53},[36,67296,67297],{"class":38,"line":35249},[36,67298,546],{"emptyLinePlaceholder":545},[36,67300,67301],{"class":38,"line":35255},[36,67302,67303],{"class":53},"      })\n",[36,67305,67306],{"class":38,"line":35275},[36,67307,4721],{"class":53},[36,67309,67310,67312,67314],{"class":38,"line":35281},[36,67311,54911],{"class":53},[36,67313,54307],{"class":53794},[36,67315,53801],{"class":53},[36,67317,67318,67320,67322],{"class":38,"line":35297},[36,67319,54279],{"class":53},[36,67321,54294],{"class":53794},[36,67323,53801],{"class":53},[36,67325,67326],{"class":38,"line":35303},[36,67327,546],{"emptyLinePlaceholder":545},[36,67329,67330,67332,67334],{"class":38,"line":35317},[36,67331,54279],{"class":53},[36,67333,53131],{"class":53794},[36,67335,53801],{"class":53},[19,67337,67338],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67340,67341],{},"在监听事件中，this指向的就是他的调用者",[19,67343,67344],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67346,56214],{},[19,67348,67349],{},"(function () {",[19,67351,67352],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67354,67355],{},"list.addEventListener('click', function (e) {",[19,67357,67358],{},"if (e.target.tagName === 'A') {",[19,67360,67361],{},"\u002F\u002F 排他思想",[19,67363,67364],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67366,67367],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67369,67370],{},"\u002F\u002F console.log(old);",[19,67372,67373],{},"\u002F\u002F 判断",[19,67375,67376],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67378,67379],{},"if (old) old.classList.remove('active')",[19,67381,67382],{},"e.target.classList.add('active')",[19,67384,2070],{},[19,67386,54958],{},[19,67388,67389],{},"})();",[997,67391,67393],{"id":67392},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,67395,67397],{"className":53129,"code":67396,"language":53131,"meta":31,"style":31},"\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",[33,67398,67399,67409,67413,67421,67425,67439,67453,67465,67473,67479,67489,67499,67503,67507,67514,67526,67537,67554,67567,67581,67591,67595,67599,67606,67617,67635,67645,67657,67661,67665,67672,67689,67700,67712,67716,67720,67727,67739,67743,67751,67759,67763,67771,67779,67787,67802,67846,67854,67867,67880,67893,67901,67909,67917,67945,67953,67965,67978,67991,67999,68007,68015,68041,68049,68062,68074,68087,68095,68103,68111,68137,68145,68158,68170,68183,68191,68199,68207,68212,68232,68237,68257,68262,68279,68284,68292,68297,68326,68339,68343,68347,68352,68356,68384,68389,68406,68411,68416,68421,68426,68452,68456,68460,68468,68476,68480],{"__ignoreMap":31},[36,67400,67401,67403,67405,67407],{"class":38,"line":39},[36,67402,53791],{"class":53},[36,67404,53795],{"class":53794},[36,67406,53798],{"class":4500},[36,67408,53801],{"class":53},[36,67410,67411],{"class":38,"line":46},[36,67412,546],{"emptyLinePlaceholder":545},[36,67414,67415,67417,67419],{"class":38,"line":82},[36,67416,1507],{"class":53},[36,67418,53131],{"class":53794},[36,67420,53801],{"class":53},[36,67422,67423],{"class":38,"line":88},[36,67424,546],{"emptyLinePlaceholder":545},[36,67426,67427,67429,67431,67433,67435,67437],{"class":38,"line":195},[36,67428,1507],{"class":53},[36,67430,53828],{"class":53794},[36,67432,53810],{"class":4500},[36,67434,115],{"class":53},[36,67436,53815],{"class":57},[36,67438,53801],{"class":53},[36,67440,67441,67443,67445,67447,67449,67451],{"class":38,"line":1517},[36,67442,54638],{"class":53},[36,67444,53838],{"class":53794},[36,67446,53841],{"class":4500},[36,67448,115],{"class":53},[36,67450,53846],{"class":57},[36,67452,53801],{"class":53},[36,67454,67455,67457,67459,67461,67463],{"class":38,"line":2421},[36,67456,54638],{"class":53},[36,67458,53901],{"class":53794},[36,67460,57805],{"class":53},[36,67462,53901],{"class":53794},[36,67464,53801],{"class":53},[36,67466,67467,67469,67471],{"class":38,"line":2446},[36,67468,54638],{"class":53},[36,67470,2602],{"class":53794},[36,67472,53801],{"class":53},[36,67474,67475,67477],{"class":38,"line":2469},[36,67476,8930],{"class":53794},[36,67478,18091],{"class":53},[36,67480,67481,67483,67485,67487],{"class":38,"line":2492},[36,67482,57197],{"class":49},[36,67484,53931],{"class":53},[36,67486,713],{"class":49},[36,67488,3833],{"class":53},[36,67490,67491,67493,67495,67497],{"class":38,"line":4150},[36,67492,57186],{"class":49},[36,67494,53931],{"class":53},[36,67496,713],{"class":49},[36,67498,3833],{"class":53},[36,67500,67501],{"class":38,"line":4155},[36,67502,4721],{"class":53},[36,67504,67505],{"class":38,"line":4161},[36,67506,546],{"emptyLinePlaceholder":545},[36,67508,67509,67512],{"class":38,"line":4166},[36,67510,67511],{"class":53794},"    table",[36,67513,18091],{"class":53},[36,67515,67516,67519,67521,67524],{"class":38,"line":4180},[36,67517,67518],{"class":49},"      border-collapse",[36,67520,53931],{"class":53},[36,67522,67523],{"class":49},"collapse",[36,67525,3833],{"class":53},[36,67527,67528,67531,67533,67535],{"class":38,"line":4185},[36,67529,67530],{"class":49},"      border-spacing",[36,67532,53931],{"class":53},[36,67534,713],{"class":49},[36,67536,3833],{"class":53},[36,67538,67539,67541,67543,67545,67547,67549,67552],{"class":38,"line":4191},[36,67540,64465],{"class":49},[36,67542,53931],{"class":53},[36,67544,707],{"class":49},[36,67546,53986],{"class":114},[36,67548,54015],{"class":49},[36,67550,67551],{"class":49}," #c0c0c0",[36,67553,3833],{"class":53},[36,67555,67556,67558,67560,67563,67565],{"class":38,"line":4212},[36,67557,57262],{"class":49},[36,67559,53931],{"class":53},[36,67561,67562],{"class":49},"500",[36,67564,53986],{"class":114},[36,67566,3833],{"class":53},[36,67568,67569,67571,67573,67575,67577,67579],{"class":38,"line":4217},[36,67570,57197],{"class":49},[36,67572,53931],{"class":53},[36,67574,166],{"class":49},[36,67576,53986],{"class":114},[36,67578,54050],{"class":49},[36,67580,3833],{"class":53},[36,67582,67583,67585,67587,67589],{"class":38,"line":4231},[36,67584,59776],{"class":49},[36,67586,53931],{"class":53},[36,67588,54086],{"class":49},[36,67590,3833],{"class":53},[36,67592,67593],{"class":38,"line":4236},[36,67594,4721],{"class":53},[36,67596,67597],{"class":38,"line":4264},[36,67598,546],{"emptyLinePlaceholder":545},[36,67600,67601,67604],{"class":38,"line":4269},[36,67602,67603],{"class":53794},"    th",[36,67605,18091],{"class":53},[36,67607,67608,67610,67612,67615],{"class":38,"line":4286},[36,67609,57375],{"class":49},[36,67611,53931],{"class":53},[36,67613,67614],{"class":49},"#09c",[36,67616,3833],{"class":53},[36,67618,67619,67622,67624,67626,67628,67630,67633],{"class":38,"line":4291},[36,67620,67621],{"class":49},"      font",[36,67623,53931],{"class":53},[36,67625,64827],{"class":49},[36,67627,66561],{"class":49},[36,67629,53986],{"class":114},[36,67631,67632],{"class":57}," \"微软雅黑\"",[36,67634,3833],{"class":53},[36,67636,67637,67639,67641,67643],{"class":38,"line":4296},[36,67638,59906],{"class":49},[36,67640,53931],{"class":53},[36,67642,63330],{"class":49},[36,67644,3833],{"class":53},[36,67646,67647,67649,67651,67653,67655],{"class":38,"line":4301},[36,67648,57276],{"class":49},[36,67650,53931],{"class":53},[36,67652,3476],{"class":49},[36,67654,53986],{"class":114},[36,67656,3833],{"class":53},[36,67658,67659],{"class":38,"line":4315},[36,67660,4721],{"class":53},[36,67662,67663],{"class":38,"line":4320},[36,67664,546],{"emptyLinePlaceholder":545},[36,67666,67667,67670],{"class":38,"line":5109},[36,67668,67669],{"class":53794},"    td",[36,67671,18091],{"class":53},[36,67673,67674,67676,67678,67680,67682,67684,67687],{"class":38,"line":5123},[36,67675,64465],{"class":49},[36,67677,53931],{"class":53},[36,67679,707],{"class":49},[36,67681,53986],{"class":114},[36,67683,54015],{"class":49},[36,67685,67686],{"class":49}," #d0d0d0",[36,67688,3833],{"class":53},[36,67690,67691,67693,67695,67698],{"class":38,"line":5131},[36,67692,59906],{"class":49},[36,67694,53931],{"class":53},[36,67696,67697],{"class":49},"#404060",[36,67699,3833],{"class":53},[36,67701,67702,67704,67706,67708,67710],{"class":38,"line":5136},[36,67703,57186],{"class":49},[36,67705,53931],{"class":53},[36,67707,1317],{"class":49},[36,67709,53986],{"class":114},[36,67711,3833],{"class":53},[36,67713,67714],{"class":38,"line":5142},[36,67715,4721],{"class":53},[36,67717,67718],{"class":38,"line":5148},[36,67719,546],{"emptyLinePlaceholder":545},[36,67721,67722,67725],{"class":38,"line":5153},[36,67723,67724],{"class":4500},"    .allCheck",[36,67726,18091],{"class":53},[36,67728,67729,67731,67733,67735,67737],{"class":38,"line":10475},[36,67730,57262],{"class":49},[36,67732,53931],{"class":53},[36,67734,3288],{"class":49},[36,67736,53986],{"class":114},[36,67738,3833],{"class":53},[36,67740,67741],{"class":38,"line":10499},[36,67742,4721],{"class":53},[36,67744,67745,67747,67749],{"class":38,"line":10504},[36,67746,54911],{"class":53},[36,67748,2602],{"class":53794},[36,67750,53801],{"class":53},[36,67752,67753,67755,67757],{"class":38,"line":10510},[36,67754,54279],{"class":53},[36,67756,53828],{"class":53794},[36,67758,53801],{"class":53},[36,67760,67761],{"class":38,"line":10537},[36,67762,546],{"emptyLinePlaceholder":545},[36,67764,67765,67767,67769],{"class":38,"line":10542},[36,67766,1507],{"class":53},[36,67768,54294],{"class":53794},[36,67770,53801],{"class":53},[36,67772,67773,67775,67777],{"class":38,"line":10548},[36,67774,54638],{"class":53},[36,67776,206],{"class":53794},[36,67778,53801],{"class":53},[36,67780,67781,67783,67785],{"class":38,"line":10560},[36,67782,53835],{"class":53},[36,67784,212],{"class":53794},[36,67786,53801],{"class":53},[36,67788,67789,67791,67793,67795,67797,67800],{"class":38,"line":10572},[36,67790,57725],{"class":53},[36,67792,215],{"class":53794},[36,67794,55980],{"class":4500},[36,67796,115],{"class":53},[36,67798,67799],{"class":57},"\"allCheck\"",[36,67801,53801],{"class":53},[36,67803,67804,67806,67808,67810,67812,67814,67816,67818,67820,67822,67824,67827,67830,67832,67834,67836,67839,67842,67844],{"class":38,"line":10584},[36,67805,57793],{"class":53},[36,67807,913],{"class":53794},[36,67809,56317],{"class":4500},[36,67811,115],{"class":53},[36,67813,56322],{"class":57},[36,67815,17440],{"class":4500},[36,67817,115],{"class":53},[36,67819,10179],{"class":57},[36,67821,17479],{"class":4500},[36,67823,115],{"class":53},[36,67825,67826],{"class":57},"\"checkAll\"",[36,67828,67829],{"class":53},"> \u003C",[36,67831,36],{"class":53794},[36,67833,55980],{"class":4500},[36,67835,115],{"class":53},[36,67837,67838],{"class":57},"\"all\"",[36,67840,67841],{"class":53},">全选\u003C\u002F",[36,67843,36],{"class":53794},[36,67845,53801],{"class":53},[36,67847,67848,67850,67852],{"class":38,"line":12241},[36,67849,57898],{"class":53},[36,67851,215],{"class":53794},[36,67853,53801],{"class":53},[36,67855,67856,67858,67860,67863,67865],{"class":38,"line":12266},[36,67857,57725],{"class":53},[36,67859,215],{"class":53794},[36,67861,67862],{"class":53},">商品\u003C\u002F",[36,67864,215],{"class":53794},[36,67866,53801],{"class":53},[36,67868,67869,67871,67873,67876,67878],{"class":38,"line":12289},[36,67870,57725],{"class":53},[36,67872,215],{"class":53794},[36,67874,67875],{"class":53},">商家\u003C\u002F",[36,67877,215],{"class":53794},[36,67879,53801],{"class":53},[36,67881,67882,67884,67886,67889,67891],{"class":38,"line":12313},[36,67883,57725],{"class":53},[36,67885,215],{"class":53794},[36,67887,67888],{"class":53},">价格\u003C\u002F",[36,67890,215],{"class":53794},[36,67892,53801],{"class":53},[36,67894,67895,67897,67899],{"class":38,"line":12318},[36,67896,54270],{"class":53},[36,67898,212],{"class":53794},[36,67900,53801],{"class":53},[36,67902,67903,67905,67907],{"class":38,"line":12323},[36,67904,53835],{"class":53},[36,67906,212],{"class":53794},[36,67908,53801],{"class":53},[36,67910,67911,67913,67915],{"class":38,"line":12328},[36,67912,57725],{"class":53},[36,67914,230],{"class":53794},[36,67916,53801],{"class":53},[36,67918,67919,67921,67923,67925,67927,67929,67931,67933,67936,67938,67940,67943],{"class":38,"line":12337},[36,67920,57793],{"class":53},[36,67922,913],{"class":53794},[36,67924,56317],{"class":4500},[36,67926,115],{"class":53},[36,67928,56322],{"class":57},[36,67930,17440],{"class":4500},[36,67932,115],{"class":53},[36,67934,67935],{"class":57},"\"check\"",[36,67937,55980],{"class":4500},[36,67939,115],{"class":53},[36,67941,67942],{"class":57},"\"ck\"",[36,67944,53801],{"class":53},[36,67946,67947,67949,67951],{"class":38,"line":12342},[36,67948,57898],{"class":53},[36,67950,230],{"class":53794},[36,67952,53801],{"class":53},[36,67954,67955,67957,67959,67961,67963],{"class":38,"line":12348},[36,67956,57725],{"class":53},[36,67958,230],{"class":53794},[36,67960,63661],{"class":53},[36,67962,230],{"class":53794},[36,67964,53801],{"class":53},[36,67966,67967,67969,67971,67974,67976],{"class":38,"line":12369},[36,67968,57725],{"class":53},[36,67970,230],{"class":53794},[36,67972,67973],{"class":53},">小米\u003C\u002F",[36,67975,230],{"class":53794},[36,67977,53801],{"class":53},[36,67979,67980,67982,67984,67987,67989],{"class":38,"line":12375},[36,67981,57725],{"class":53},[36,67983,230],{"class":53794},[36,67985,67986],{"class":53},">￥1999\u003C\u002F",[36,67988,230],{"class":53794},[36,67990,53801],{"class":53},[36,67992,67993,67995,67997],{"class":38,"line":12389},[36,67994,54270],{"class":53},[36,67996,212],{"class":53794},[36,67998,53801],{"class":53},[36,68000,68001,68003,68005],{"class":38,"line":12395},[36,68002,53835],{"class":53},[36,68004,212],{"class":53794},[36,68006,53801],{"class":53},[36,68008,68009,68011,68013],{"class":38,"line":12422},[36,68010,57725],{"class":53},[36,68012,230],{"class":53794},[36,68014,53801],{"class":53},[36,68016,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039],{"class":38,"line":12431},[36,68018,57793],{"class":53},[36,68020,913],{"class":53794},[36,68022,56317],{"class":4500},[36,68024,115],{"class":53},[36,68026,56322],{"class":57},[36,68028,17440],{"class":4500},[36,68030,115],{"class":53},[36,68032,67935],{"class":57},[36,68034,55980],{"class":4500},[36,68036,115],{"class":53},[36,68038,67942],{"class":57},[36,68040,53801],{"class":53},[36,68042,68043,68045,68047],{"class":38,"line":12437},[36,68044,57898],{"class":53},[36,68046,230],{"class":53794},[36,68048,53801],{"class":53},[36,68050,68051,68053,68055,68058,68060],{"class":38,"line":12445},[36,68052,57725],{"class":53},[36,68054,230],{"class":53794},[36,68056,68057],{"class":53},">小米净水器\u003C\u002F",[36,68059,230],{"class":53794},[36,68061,53801],{"class":53},[36,68063,68064,68066,68068,68070,68072],{"class":38,"line":12450},[36,68065,57725],{"class":53},[36,68067,230],{"class":53794},[36,68069,67973],{"class":53},[36,68071,230],{"class":53794},[36,68073,53801],{"class":53},[36,68075,68076,68078,68080,68083,68085],{"class":38,"line":19122},[36,68077,57725],{"class":53},[36,68079,230],{"class":53794},[36,68081,68082],{"class":53},">￥4999\u003C\u002F",[36,68084,230],{"class":53794},[36,68086,53801],{"class":53},[36,68088,68089,68091,68093],{"class":38,"line":19128},[36,68090,54270],{"class":53},[36,68092,212],{"class":53794},[36,68094,53801],{"class":53},[36,68096,68097,68099,68101],{"class":38,"line":19151},[36,68098,53835],{"class":53},[36,68100,212],{"class":53794},[36,68102,53801],{"class":53},[36,68104,68105,68107,68109],{"class":38,"line":19157},[36,68106,57725],{"class":53},[36,68108,230],{"class":53794},[36,68110,53801],{"class":53},[36,68112,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135],{"class":38,"line":19180},[36,68114,57793],{"class":53},[36,68116,913],{"class":53794},[36,68118,56317],{"class":4500},[36,68120,115],{"class":53},[36,68122,56322],{"class":57},[36,68124,17440],{"class":4500},[36,68126,115],{"class":53},[36,68128,67935],{"class":57},[36,68130,55980],{"class":4500},[36,68132,115],{"class":53},[36,68134,67942],{"class":57},[36,68136,53801],{"class":53},[36,68138,68139,68141,68143],{"class":38,"line":19194},[36,68140,57898],{"class":53},[36,68142,230],{"class":53794},[36,68144,53801],{"class":53},[36,68146,68147,68149,68151,68154,68156],{"class":38,"line":19214},[36,68148,57725],{"class":53},[36,68150,230],{"class":53794},[36,68152,68153],{"class":53},">小米电视\u003C\u002F",[36,68155,230],{"class":53794},[36,68157,53801],{"class":53},[36,68159,68160,68162,68164,68166,68168],{"class":38,"line":19220},[36,68161,57725],{"class":53},[36,68163,230],{"class":53794},[36,68165,67973],{"class":53},[36,68167,230],{"class":53794},[36,68169,53801],{"class":53},[36,68171,68172,68174,68176,68179,68181],{"class":38,"line":19231},[36,68173,57725],{"class":53},[36,68175,230],{"class":53794},[36,68177,68178],{"class":53},">￥5999\u003C\u002F",[36,68180,230],{"class":53794},[36,68182,53801],{"class":53},[36,68184,68185,68187,68189],{"class":38,"line":19254},[36,68186,54270],{"class":53},[36,68188,212],{"class":53794},[36,68190,53801],{"class":53},[36,68192,68193,68195,68197],{"class":38,"line":19276},[36,68194,54911],{"class":53},[36,68196,206],{"class":53794},[36,68198,53801],{"class":53},[36,68200,68201,68203,68205],{"class":38,"line":19281},[36,68202,54638],{"class":53},[36,68204,54307],{"class":53794},[36,68206,53801],{"class":53},[36,68208,68209],{"class":38,"line":19287},[36,68210,68211],{"class":42},"    \u002F\u002F 1. 获取大复选框\n",[36,68213,68214,68216,68219,68221,68223,68225,68227,68230],{"class":38,"line":19301},[36,68215,13744],{"class":114},[36,68217,68218],{"class":49}," checkAll",[36,68220,498],{"class":114},[36,68222,56888],{"class":53},[36,68224,56891],{"class":4500},[36,68226,54],{"class":53},[36,68228,68229],{"class":57},"'#checkAll'",[36,68231,61],{"class":53},[36,68233,68234],{"class":38,"line":19314},[36,68235,68236],{"class":42},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,68238,68239,68241,68244,68246,68248,68250,68252,68255],{"class":38,"line":19319},[36,68240,13744],{"class":114},[36,68242,68243],{"class":49}," cks",[36,68245,498],{"class":114},[36,68247,56888],{"class":53},[36,68249,58172],{"class":4500},[36,68251,54],{"class":53},[36,68253,68254],{"class":57},"'.ck'",[36,68256,61],{"class":53},[36,68258,68259],{"class":38,"line":19333},[36,68260,68261],{"class":42},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,68263,68264,68267,68269,68271,68273,68275,68277],{"class":38,"line":19338},[36,68265,68266],{"class":53},"    checkAll.",[36,68268,60303],{"class":4500},[36,68270,54],{"class":53},[36,68272,60308],{"class":57},[36,68274,14958],{"class":53},[36,68276,56940],{"class":114},[36,68278,56943],{"class":53},[36,68280,68281],{"class":38,"line":19344},[36,68282,68283],{"class":42},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,68285,68286,68289],{"class":38,"line":19349},[36,68287,68288],{"class":42},"      \u002F\u002F console.log(checkAll.checked)",[36,68290,68291],{"class":42},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,68293,68294],{"class":38,"line":19363},[36,68295,68296],{"class":42},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,68298,68299,68301,68303,68305,68307,68309,68311,68313,68315,68318,68320,68322,68324],{"class":38,"line":19368},[36,68300,54778],{"class":114},[36,68302,4196],{"class":53},[36,68304,54341],{"class":114},[36,68306,11964],{"class":53},[36,68308,115],{"class":114},[36,68310,6624],{"class":49},[36,68312,11971],{"class":53},[36,68314,1507],{"class":114},[36,68316,68317],{"class":53}," cks.",[36,68319,54462],{"class":49},[36,68321,5745],{"class":53},[36,68323,4826],{"class":114},[36,68325,14965],{"class":53},[36,68327,68328,68331,68333,68336],{"class":38,"line":19373},[36,68329,68330],{"class":53},"        cks[i].checked ",[36,68332,115],{"class":114},[36,68334,68335],{"class":49}," this",[36,68337,68338],{"class":53},".checked\n",[36,68340,68341],{"class":38,"line":19387},[36,68342,54892],{"class":53},[36,68344,68345],{"class":38,"line":19399},[36,68346,35962],{"class":53},[36,68348,68349],{"class":38,"line":19404},[36,68350,68351],{"class":42},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,68353,68354],{"class":38,"line":19417},[36,68355,546],{"emptyLinePlaceholder":545},[36,68357,68358,68360,68362,68364,68366,68368,68370,68372,68374,68376,68378,68380,68382],{"class":38,"line":19422},[36,68359,5732],{"class":114},[36,68361,4196],{"class":53},[36,68363,54341],{"class":114},[36,68365,11964],{"class":53},[36,68367,115],{"class":114},[36,68369,6624],{"class":49},[36,68371,11971],{"class":53},[36,68373,1507],{"class":114},[36,68375,68317],{"class":53},[36,68377,54462],{"class":49},[36,68379,5745],{"class":53},[36,68381,4826],{"class":114},[36,68383,14965],{"class":53},[36,68385,68386],{"class":38,"line":19427},[36,68387,68388],{"class":42},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,68390,68391,68394,68396,68398,68400,68402,68404],{"class":38,"line":19432},[36,68392,68393],{"class":53},"      cks[i].",[36,68395,60303],{"class":4500},[36,68397,54],{"class":53},[36,68399,60308],{"class":57},[36,68401,14958],{"class":53},[36,68403,56940],{"class":114},[36,68405,56943],{"class":53},[36,68407,68408],{"class":38,"line":19445},[36,68409,68410],{"class":42},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,68412,68413],{"class":38,"line":19450},[36,68414,68415],{"class":42},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,68417,68418],{"class":38,"line":35135},[36,68419,68420],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,68422,68423],{"class":38,"line":35141},[36,68424,68425],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,68427,68428,68431,68433,68435,68437,68439,68442,68444,68446,68448,68450],{"class":38,"line":35147},[36,68429,68430],{"class":53},"        checkAll.checked ",[36,68432,115],{"class":114},[36,68434,56888],{"class":53},[36,68436,58172],{"class":4500},[36,68438,54],{"class":53},[36,68440,68441],{"class":57},"'.ck:checked'",[36,68443,33330],{"class":53},[36,68445,54462],{"class":49},[36,68447,60396],{"class":114},[36,68449,68317],{"class":53},[36,68451,58321],{"class":49},[36,68453,68454],{"class":38,"line":35153},[36,68455,67303],{"class":53},[36,68457,68458],{"class":38,"line":35159},[36,68459,4721],{"class":53},[36,68461,68462,68464,68466],{"class":38,"line":35170},[36,68463,54911],{"class":53},[36,68465,54307],{"class":53794},[36,68467,53801],{"class":53},[36,68469,68470,68472,68474],{"class":38,"line":35176},[36,68471,54279],{"class":53},[36,68473,54294],{"class":53794},[36,68475,53801],{"class":53},[36,68477,68478],{"class":38,"line":35196},[36,68479,546],{"emptyLinePlaceholder":545},[36,68481,68482,68484,68486],{"class":38,"line":35202},[36,68483,54279],{"class":53},[36,68485,53131],{"class":53794},[36,68487,53801],{"class":53},[19,68489,68490],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68492,68493],{},"用好之间比较得到的布尔值！！！",[19,68495,68496,68497,68500,68501,4196,68503,1065,68505,68508],{},"在 JS 里访问的时候，",[33,68498,68499],{},"checkbox.checked"," 是一个 ",[2839,68502,279],{},[33,68504,3900],{},[33,68506,68507],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68510,68511,68512,68515,68516],{},"HTML 的 ",[33,68513,68514],{},"checked=\"checked\""," 只是 ",[2839,68517,68518,68519,68522],{},"初始值；JS 的 ",[33,68520,68521],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68524,68525],{},"：checked是一个伪类选择器",[19,68527,68528],{},[4000,68529],{"alt":31,"src":68530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68532,68533,68536],{},[68534,68535],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68538,68539],{},[4000,68540],{"alt":31,"src":68541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68543,68545],{"id":68544},"_33-dom事件进阶","3.3 DOM事件进阶",[997,68547,68549],{"id":68548},"_331-事件流","3.3.1 事件流",[19,68551,68552],{},[4000,68553],{"alt":31,"src":68554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24515,68556,68558],{"id":68557},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68560,68561],{},[4000,68562],{"alt":31,"src":68563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,68565,68567],{"className":53129,"code":68566,"language":53131,"meta":31,"style":31},"\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",[33,68568,68569,68579,68593,68597,68605,68619,68639,68651,68659,68666,68678,68690,68700,68704,68708,68715,68727,68739,68749,68753,68761,68769,68773,68781,68796,68815,68823,68831,68851,68871,68887,68898,68906,68923,68934,68942,68959,68970,68978,68986,68994,68998],{"__ignoreMap":31},[36,68570,68571,68573,68575,68577],{"class":38,"line":39},[36,68572,53791],{"class":53},[36,68574,53795],{"class":53794},[36,68576,53798],{"class":4500},[36,68578,53801],{"class":53},[36,68580,68581,68583,68585,68587,68589,68591],{"class":38,"line":46},[36,68582,1507],{"class":53},[36,68584,53131],{"class":53794},[36,68586,53810],{"class":4500},[36,68588,115],{"class":53},[36,68590,53815],{"class":57},[36,68592,53801],{"class":53},[36,68594,68595],{"class":38,"line":82},[36,68596,546],{"emptyLinePlaceholder":545},[36,68598,68599,68601,68603],{"class":38,"line":88},[36,68600,1507],{"class":53},[36,68602,53828],{"class":53794},[36,68604,53801],{"class":53},[36,68606,68607,68609,68611,68613,68615,68617],{"class":38,"line":195},[36,68608,54638],{"class":53},[36,68610,53838],{"class":53794},[36,68612,53841],{"class":4500},[36,68614,115],{"class":53},[36,68616,53846],{"class":57},[36,68618,53801],{"class":53},[36,68620,68621,68623,68625,68627,68629,68631,68633,68635,68637],{"class":38,"line":1517},[36,68622,54638],{"class":53},[36,68624,53838],{"class":53794},[36,68626,17440],{"class":4500},[36,68628,115],{"class":53},[36,68630,53885],{"class":57},[36,68632,53865],{"class":4500},[36,68634,115],{"class":53},[36,68636,53892],{"class":57},[36,68638,53801],{"class":53},[36,68640,68641,68643,68645,68647,68649],{"class":38,"line":2421},[36,68642,54638],{"class":53},[36,68644,53901],{"class":53794},[36,68646,53904],{"class":53},[36,68648,53901],{"class":53794},[36,68650,53801],{"class":53},[36,68652,68653,68655,68657],{"class":38,"line":2446},[36,68654,54638],{"class":53},[36,68656,2602],{"class":53794},[36,68658,53801],{"class":53},[36,68660,68661,68664],{"class":38,"line":2469},[36,68662,68663],{"class":4500},"    .father",[36,68665,18091],{"class":53},[36,68667,68668,68670,68672,68674,68676],{"class":38,"line":2492},[36,68669,57262],{"class":49},[36,68671,53931],{"class":53},[36,68673,67562],{"class":49},[36,68675,53986],{"class":114},[36,68677,3833],{"class":53},[36,68679,68680,68682,68684,68686,68688],{"class":38,"line":4150},[36,68681,57276],{"class":49},[36,68683,53931],{"class":53},[36,68685,67562],{"class":49},[36,68687,53986],{"class":114},[36,68689,3833],{"class":53},[36,68691,68692,68694,68696,68698],{"class":38,"line":4155},[36,68693,57375],{"class":49},[36,68695,53931],{"class":53},[36,68697,54139],{"class":49},[36,68699,3833],{"class":53},[36,68701,68702],{"class":38,"line":4161},[36,68703,4721],{"class":53},[36,68705,68706],{"class":38,"line":4166},[36,68707,546],{"emptyLinePlaceholder":545},[36,68709,68710,68713],{"class":38,"line":4180},[36,68711,68712],{"class":4500},"    .son",[36,68714,18091],{"class":53},[36,68716,68717,68719,68721,68723,68725],{"class":38,"line":4185},[36,68718,57262],{"class":49},[36,68720,53931],{"class":53},[36,68722,4259],{"class":49},[36,68724,53986],{"class":114},[36,68726,3833],{"class":53},[36,68728,68729,68731,68733,68735,68737],{"class":38,"line":4191},[36,68730,57276],{"class":49},[36,68732,53931],{"class":53},[36,68734,4259],{"class":49},[36,68736,53986],{"class":114},[36,68738,3833],{"class":53},[36,68740,68741,68743,68745,68747],{"class":38,"line":4212},[36,68742,57375],{"class":49},[36,68744,53931],{"class":53},[36,68746,57380],{"class":49},[36,68748,3833],{"class":53},[36,68750,68751],{"class":38,"line":4217},[36,68752,4721],{"class":53},[36,68754,68755,68757,68759],{"class":38,"line":4231},[36,68756,54911],{"class":53},[36,68758,2602],{"class":53794},[36,68760,53801],{"class":53},[36,68762,68763,68765,68767],{"class":38,"line":4236},[36,68764,54279],{"class":53},[36,68766,53828],{"class":53794},[36,68768,53801],{"class":53},[36,68770,68771],{"class":38,"line":4264},[36,68772,546],{"emptyLinePlaceholder":545},[36,68774,68775,68777,68779],{"class":38,"line":4269},[36,68776,1507],{"class":53},[36,68778,54294],{"class":53794},[36,68780,53801],{"class":53},[36,68782,68783,68785,68787,68789,68791,68794],{"class":38,"line":4286},[36,68784,54638],{"class":53},[36,68786,54105],{"class":53794},[36,68788,55980],{"class":4500},[36,68790,115],{"class":53},[36,68792,68793],{"class":57},"\"father\"",[36,68795,53801],{"class":53},[36,68797,68798,68800,68802,68804,68806,68809,68811,68813],{"class":38,"line":4291},[36,68799,53835],{"class":53},[36,68801,54105],{"class":53794},[36,68803,55980],{"class":4500},[36,68805,115],{"class":53},[36,68807,68808],{"class":57},"\"son\"",[36,68810,57805],{"class":53},[36,68812,54105],{"class":53794},[36,68814,53801],{"class":53},[36,68816,68817,68819,68821],{"class":38,"line":4296},[36,68818,54911],{"class":53},[36,68820,54105],{"class":53794},[36,68822,53801],{"class":53},[36,68824,68825,68827,68829],{"class":38,"line":4301},[36,68826,54638],{"class":53},[36,68828,54307],{"class":53794},[36,68830,53801],{"class":53},[36,68832,68833,68835,68838,68840,68842,68844,68846,68849],{"class":38,"line":4315},[36,68834,13744],{"class":114},[36,68836,68837],{"class":49}," fa",[36,68839,498],{"class":114},[36,68841,56888],{"class":53},[36,68843,56891],{"class":4500},[36,68845,54],{"class":53},[36,68847,68848],{"class":57},"'.father'",[36,68850,61],{"class":53},[36,68852,68853,68855,68858,68860,68862,68864,68866,68869],{"class":38,"line":4320},[36,68854,13744],{"class":114},[36,68856,68857],{"class":49}," son",[36,68859,498],{"class":114},[36,68861,56888],{"class":53},[36,68863,56891],{"class":4500},[36,68865,54],{"class":53},[36,68867,68868],{"class":57},"'.son'",[36,68870,61],{"class":53},[36,68872,68873,68875,68877,68879,68881,68883,68885],{"class":38,"line":5109},[36,68874,54901],{"class":53},[36,68876,60303],{"class":4500},[36,68878,54],{"class":53},[36,68880,60308],{"class":57},[36,68882,14958],{"class":53},[36,68884,56940],{"class":114},[36,68886,56943],{"class":53},[36,68888,68889,68891,68893,68896],{"class":38,"line":5123},[36,68890,61414],{"class":4500},[36,68892,54],{"class":53},[36,68894,68895],{"class":57},"'woshiu1'",[36,68897,61],{"class":53},[36,68899,68900,68902,68904],{"class":38,"line":5131},[36,68901,57026],{"class":53},[36,68903,3900],{"class":49},[36,68905,61],{"class":53},[36,68907,68908,68911,68913,68915,68917,68919,68921],{"class":38,"line":5136},[36,68909,68910],{"class":53},"    fa.",[36,68912,60303],{"class":4500},[36,68914,54],{"class":53},[36,68916,60308],{"class":57},[36,68918,14958],{"class":53},[36,68920,56940],{"class":114},[36,68922,56943],{"class":53},[36,68924,68925,68927,68929,68932],{"class":38,"line":5142},[36,68926,61414],{"class":4500},[36,68928,54],{"class":53},[36,68930,68931],{"class":57},"'1'",[36,68933,61],{"class":53},[36,68935,68936,68938,68940],{"class":38,"line":5148},[36,68937,57026],{"class":53},[36,68939,3900],{"class":49},[36,68941,61],{"class":53},[36,68943,68944,68947,68949,68951,68953,68955,68957],{"class":38,"line":5153},[36,68945,68946],{"class":53},"    son.",[36,68948,60303],{"class":4500},[36,68950,54],{"class":53},[36,68952,60308],{"class":57},[36,68954,14958],{"class":53},[36,68956,56940],{"class":114},[36,68958,56943],{"class":53},[36,68960,68961,68963,68965,68968],{"class":38,"line":10475},[36,68962,61414],{"class":4500},[36,68964,54],{"class":53},[36,68966,68967],{"class":57},"'2'",[36,68969,61],{"class":53},[36,68971,68972,68974,68976],{"class":38,"line":10499},[36,68973,57026],{"class":53},[36,68975,3900],{"class":49},[36,68977,61],{"class":53},[36,68979,68980,68982,68984],{"class":38,"line":10504},[36,68981,54911],{"class":53},[36,68983,54307],{"class":53794},[36,68985,53801],{"class":53},[36,68987,68988,68990,68992],{"class":38,"line":10510},[36,68989,54279],{"class":53},[36,68991,54294],{"class":53794},[36,68993,53801],{"class":53},[36,68995,68996],{"class":38,"line":10537},[36,68997,546],{"emptyLinePlaceholder":545},[36,68999,69000,69002,69004],{"class":38,"line":10542},[36,69001,54279],{"class":53},[36,69003,53131],{"class":53794},[36,69005,53801],{"class":53},[19,69007,69008],{},[4000,69009],{"alt":31,"src":69010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,69012,69013],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24515,69015,69017],{"id":69016},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,69019,69020],{},[4000,69021],{"alt":31,"src":69022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,69024,69025],{},"反着来",[19,69027,69028],{},"注意是同名事件，比如都是‘click’",[24515,69030,69032],{"id":69031},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,69034,69035],{},[4000,69036],{"alt":31,"src":69037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24515,69039,69041],{"id":69040},"_3314-解绑事件","3.3.1.4 解绑事件",[19,69043,69044],{},[4000,69045],{"alt":31,"src":69046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,69048,69049],{},[4000,69050],{"alt":31,"src":69051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24515,69053,69055],{"id":69054},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[433,69057,69058],{},[436,69059,69060],{},"事件类型的区别",[19,69062,69063],{},[4000,69064],{"alt":31,"src":69065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,69067,69068],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[433,69070,69071],{"start":46},[436,69072,69073],{},"注册事件的区别",[19,69075,69076],{},[4000,69077],{"alt":31,"src":69078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24515,69080,69082],{"id":69081},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,69084,69085],{},[4000,69086],{"alt":31,"src":69087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69089,69090],{},[4000,69091],{"alt":31,"src":69092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,69094,69096],{"className":55561,"code":69095,"language":55563,"meta":31,"style":31},"\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",[33,69097,69098,69106,69123,69146,69154,69159,69164,69169,69173,69181,69189],{"__ignoreMap":31},[36,69099,69100,69102,69104],{"class":38,"line":39},[36,69101,1507],{"class":53},[36,69103,54294],{"class":53794},[36,69105,53801],{"class":53},[36,69107,69108,69110,69113,69116,69118,69121],{"class":38,"line":46},[36,69109,54638],{"class":53},[36,69111,69112],{"class":53794},"form",[36,69114,69115],{"class":4500}," action",[36,69117,115],{"class":53},[36,69119,69120],{"class":57},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,69122,53801],{"class":53},[36,69124,69125,69127,69129,69131,69133,69136,69139,69141,69144],{"class":38,"line":82},[36,69126,53835],{"class":53},[36,69128,913],{"class":53794},[36,69130,56317],{"class":4500},[36,69132,115],{"class":53},[36,69134,69135],{"class":57},"\"submit\"",[36,69137,69138],{"class":4500}," value",[36,69140,115],{"class":53},[36,69142,69143],{"class":57},"\"免费注册\"",[36,69145,53801],{"class":53},[36,69147,69148,69150,69152],{"class":38,"line":88},[36,69149,53835],{"class":53},[36,69151,54307],{"class":53794},[36,69153,53801],{"class":53},[36,69155,69156],{"class":38,"line":195},[36,69157,69158],{"class":53},"      const form = document.querySelector('form')\n",[36,69160,69161],{"class":38,"line":1517},[36,69162,69163],{"class":53},"      form.addEventListener('submit', function (e) {\n",[36,69165,69166],{"class":38,"line":2421},[36,69167,69168],{"class":53},"        e.preventDefault()\n",[36,69170,69171],{"class":38,"line":2446},[36,69172,67303],{"class":53},[36,69174,69175,69177,69179],{"class":38,"line":2469},[36,69176,54270],{"class":53},[36,69178,54307],{"class":53794},[36,69180,53801],{"class":53},[36,69182,69183,69185,69187],{"class":38,"line":2492},[36,69184,54911],{"class":53},[36,69186,69112],{"class":53794},[36,69188,53801],{"class":53},[36,69190,69191,69193,69195],{"class":38,"line":4150},[36,69192,54279],{"class":53},[36,69194,54294],{"class":53794},[36,69196,53801],{"class":53},[19,69198,69199],{},"点击不在跳转！！！",[997,69201,69203],{"id":69202},"_332-事件委托","3.3.2 事件委托",[19,69205,69206],{},[4000,69207],{"alt":31,"src":69208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,69210,69212],{"className":53129,"code":69211,"language":53131,"meta":31,"style":31},"\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",[33,69213,69214,69224,69238,69242,69250,69264,69284,69296,69304,69308,69316,69324,69336,69348,69360,69372,69384,69397,69405,69413,69418,69437,69458,69463,69468,69473,69478,69487,69491,69501,69505,69510,69515,69529,69539,69543,69547,69555,69563,69567],{"__ignoreMap":31},[36,69215,69216,69218,69220,69222],{"class":38,"line":39},[36,69217,53791],{"class":53},[36,69219,53795],{"class":53794},[36,69221,53798],{"class":4500},[36,69223,53801],{"class":53},[36,69225,69226,69228,69230,69232,69234,69236],{"class":38,"line":46},[36,69227,1507],{"class":53},[36,69229,53131],{"class":53794},[36,69231,53810],{"class":4500},[36,69233,115],{"class":53},[36,69235,53815],{"class":57},[36,69237,53801],{"class":53},[36,69239,69240],{"class":38,"line":82},[36,69241,546],{"emptyLinePlaceholder":545},[36,69243,69244,69246,69248],{"class":38,"line":88},[36,69245,1507],{"class":53},[36,69247,53828],{"class":53794},[36,69249,53801],{"class":53},[36,69251,69252,69254,69256,69258,69260,69262],{"class":38,"line":195},[36,69253,54638],{"class":53},[36,69255,53838],{"class":53794},[36,69257,53841],{"class":4500},[36,69259,115],{"class":53},[36,69261,53846],{"class":57},[36,69263,53801],{"class":53},[36,69265,69266,69268,69270,69272,69274,69276,69278,69280,69282],{"class":38,"line":1517},[36,69267,54638],{"class":53},[36,69269,53838],{"class":53794},[36,69271,17440],{"class":4500},[36,69273,115],{"class":53},[36,69275,53885],{"class":57},[36,69277,53865],{"class":4500},[36,69279,115],{"class":53},[36,69281,53892],{"class":57},[36,69283,53801],{"class":53},[36,69285,69286,69288,69290,69292,69294],{"class":38,"line":2421},[36,69287,54638],{"class":53},[36,69289,53901],{"class":53794},[36,69291,53904],{"class":53},[36,69293,53901],{"class":53794},[36,69295,53801],{"class":53},[36,69297,69298,69300,69302],{"class":38,"line":2446},[36,69299,54279],{"class":53},[36,69301,53828],{"class":53794},[36,69303,53801],{"class":53},[36,69305,69306],{"class":38,"line":2469},[36,69307,546],{"emptyLinePlaceholder":545},[36,69309,69310,69312,69314],{"class":38,"line":2492},[36,69311,1507],{"class":53},[36,69313,54294],{"class":53794},[36,69315,53801],{"class":53},[36,69317,69318,69320,69322],{"class":38,"line":4150},[36,69319,54638],{"class":53},[36,69321,3680],{"class":53794},[36,69323,53801],{"class":53},[36,69325,69326,69328,69330,69332,69334],{"class":38,"line":4155},[36,69327,53835],{"class":53},[36,69329,436],{"class":53794},[36,69331,56459],{"class":53},[36,69333,436],{"class":53794},[36,69335,53801],{"class":53},[36,69337,69338,69340,69342,69344,69346],{"class":38,"line":4161},[36,69339,53835],{"class":53},[36,69341,436],{"class":53794},[36,69343,56478],{"class":53},[36,69345,436],{"class":53794},[36,69347,53801],{"class":53},[36,69349,69350,69352,69354,69356,69358],{"class":38,"line":4166},[36,69351,53835],{"class":53},[36,69353,436],{"class":53794},[36,69355,56497],{"class":53},[36,69357,436],{"class":53794},[36,69359,53801],{"class":53},[36,69361,69362,69364,69366,69368,69370],{"class":38,"line":4180},[36,69363,53835],{"class":53},[36,69365,436],{"class":53794},[36,69367,56516],{"class":53},[36,69369,436],{"class":53794},[36,69371,53801],{"class":53},[36,69373,69374,69376,69378,69380,69382],{"class":38,"line":4185},[36,69375,53835],{"class":53},[36,69377,436],{"class":53794},[36,69379,56535],{"class":53},[36,69381,436],{"class":53794},[36,69383,53801],{"class":53},[36,69385,69386,69388,69390,69393,69395],{"class":38,"line":4191},[36,69387,53835],{"class":53},[36,69389,19],{"class":53794},[36,69391,69392],{"class":53},">我不需要变色\u003C\u002F",[36,69394,19],{"class":53794},[36,69396,53801],{"class":53},[36,69398,69399,69401,69403],{"class":38,"line":4212},[36,69400,54911],{"class":53},[36,69402,3680],{"class":53794},[36,69404,53801],{"class":53},[36,69406,69407,69409,69411],{"class":38,"line":4217},[36,69408,54638],{"class":53},[36,69410,54307],{"class":53794},[36,69412,53801],{"class":53},[36,69414,69415],{"class":38,"line":4231},[36,69416,69417],{"class":42},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,69419,69420,69422,69424,69426,69428,69430,69432,69435],{"class":38,"line":4236},[36,69421,13744],{"class":114},[36,69423,63780],{"class":49},[36,69425,498],{"class":114},[36,69427,56888],{"class":53},[36,69429,56891],{"class":4500},[36,69431,54],{"class":53},[36,69433,69434],{"class":57},"'ul'",[36,69436,61],{"class":53},[36,69438,69439,69442,69444,69446,69448,69450,69452,69454,69456],{"class":38,"line":4264},[36,69440,69441],{"class":53},"    ul.",[36,69443,60303],{"class":4500},[36,69445,54],{"class":53},[36,69447,60308],{"class":57},[36,69449,14958],{"class":53},[36,69451,56940],{"class":114},[36,69453,4196],{"class":53},[36,69455,2770],{"class":1997},[36,69457,14965],{"class":53},[36,69459,69460],{"class":38,"line":4269},[36,69461,69462],{"class":42},"      \u002F\u002F alert(1)\n",[36,69464,69465],{"class":38,"line":4286},[36,69466,69467],{"class":42},"      \u002F\u002F e.target就是我们点击的对象\n",[36,69469,69470],{"class":38,"line":4291},[36,69471,69472],{"class":42},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,69474,69475],{"class":38,"line":4296},[36,69476,69477],{"class":42},"      \u002F\u002F e.target.style.color = 'red'\n",[36,69479,69480,69482,69484],{"class":38,"line":4301},[36,69481,60734],{"class":53},[36,69483,60737],{"class":4500},[36,69485,69486],{"class":53},"(e)\n",[36,69488,69489],{"class":38,"line":4315},[36,69490,546],{"emptyLinePlaceholder":545},[36,69492,69493,69495,69498],{"class":38,"line":4320},[36,69494,60734],{"class":53},[36,69496,69497],{"class":4500},"dir",[36,69499,69500],{"class":53},"(e.target)\n",[36,69502,69503],{"class":38,"line":5109},[36,69504,546],{"emptyLinePlaceholder":545},[36,69506,69507],{"class":38,"line":5123},[36,69508,69509],{"class":42},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,69511,69512],{"class":38,"line":5131},[36,69513,69514],{"class":42},"      \u002F\u002F 通过tagName来进行判断\n",[36,69516,69517,69519,69522,69524,69527],{"class":38,"line":5136},[36,69518,56971],{"class":114},[36,69520,69521],{"class":53}," (e.target.tagName ",[36,69523,56977],{"class":114},[36,69525,69526],{"class":57}," 'LI'",[36,69528,14965],{"class":53},[36,69530,69531,69534,69536],{"class":38,"line":5142},[36,69532,69533],{"class":53},"        e.target.style.color ",[36,69535,115],{"class":114},[36,69537,69538],{"class":57}," 'red'\n",[36,69540,69541],{"class":38,"line":5148},[36,69542,54892],{"class":53},[36,69544,69545],{"class":38,"line":5153},[36,69546,35962],{"class":53},[36,69548,69549,69551,69553],{"class":38,"line":10475},[36,69550,54911],{"class":53},[36,69552,54307],{"class":53794},[36,69554,53801],{"class":53},[36,69556,69557,69559,69561],{"class":38,"line":10499},[36,69558,54279],{"class":53},[36,69560,54294],{"class":53794},[36,69562,53801],{"class":53},[36,69564,69565],{"class":38,"line":10504},[36,69566,546],{"emptyLinePlaceholder":545},[36,69568,69569,69571,69573],{"class":38,"line":10510},[36,69570,54279],{"class":53},[36,69572,53131],{"class":53794},[36,69574,53801],{"class":53},[19,69576,69577],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69579,69580],{},"if(e.target.ragName==='P') {}",[19,69582,69583],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69585,69586],{},"通过事件委托的方式实现tab栏切换改造：",[19,69588,69589],{},"一定要记住自定义属性！！！！！！",[19,69591,69592],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69594,69595],{},"id是自定义的属性名",[19,69597,69598],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,69600,69602],{"className":53129,"code":69601,"language":53131,"meta":31,"style":31},"\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",[33,69603,69604,69614,69628,69632,69640,69654,69674,69694,69706,69714,69720,69730,69740,69744,69748,69754,69766,69778,69790,69806,69810,69814,69820,69832,69844,69856,69866,69876,69880,69884,69892,69904,69914,69926,69930,69934,69942,69952,69962,69972,69976,69980,69990,70004,70016,70020,70024,70036,70046,70062,70072,70076,70080,70094,70104,70114,70118,70122,70128,70142,70146,70150,70158,70168,70172,70176,70185,70195,70199,70207,70215,70219,70227,70241,70255,70267,70275,70314,70346,70378,70410,70442,70450,70458,70472,70506,70540,70574,70608,70642,70650,70658,70666,70671,70676,70695,70700,70720,70728,70733,70746,70767,70780,70784,70789,70794,70807,70827,70855,70859,70863,70867,70875,70883,70887],{"__ignoreMap":31},[36,69605,69606,69608,69610,69612],{"class":38,"line":39},[36,69607,53791],{"class":53},[36,69609,53795],{"class":53794},[36,69611,53798],{"class":4500},[36,69613,53801],{"class":53},[36,69615,69616,69618,69620,69622,69624,69626],{"class":38,"line":46},[36,69617,1507],{"class":53},[36,69619,53131],{"class":53794},[36,69621,53810],{"class":4500},[36,69623,115],{"class":53},[36,69625,53815],{"class":57},[36,69627,53801],{"class":53},[36,69629,69630],{"class":38,"line":82},[36,69631,546],{"emptyLinePlaceholder":545},[36,69633,69634,69636,69638],{"class":38,"line":88},[36,69635,1507],{"class":53},[36,69637,53828],{"class":53794},[36,69639,53801],{"class":53},[36,69641,69642,69644,69646,69648,69650,69652],{"class":38,"line":195},[36,69643,54638],{"class":53},[36,69645,53838],{"class":53794},[36,69647,53841],{"class":4500},[36,69649,115],{"class":53},[36,69651,53846],{"class":57},[36,69653,61616],{"class":53},[36,69655,69656,69658,69660,69662,69664,69666,69668,69670,69672],{"class":38,"line":1517},[36,69657,54638],{"class":53},[36,69659,53838],{"class":53794},[36,69661,53857],{"class":4500},[36,69663,115],{"class":53},[36,69665,53862],{"class":57},[36,69667,53865],{"class":4500},[36,69669,115],{"class":53},[36,69671,53870],{"class":57},[36,69673,61616],{"class":53},[36,69675,69676,69678,69680,69682,69684,69686,69688,69690,69692],{"class":38,"line":2421},[36,69677,54638],{"class":53},[36,69679,53838],{"class":53794},[36,69681,17440],{"class":4500},[36,69683,115],{"class":53},[36,69685,53885],{"class":57},[36,69687,53865],{"class":4500},[36,69689,115],{"class":53},[36,69691,53892],{"class":57},[36,69693,61616],{"class":53},[36,69695,69696,69698,69700,69702,69704],{"class":38,"line":2446},[36,69697,54638],{"class":53},[36,69699,53901],{"class":53794},[36,69701,66113],{"class":53},[36,69703,53901],{"class":53794},[36,69705,53801],{"class":53},[36,69707,69708,69710,69712],{"class":38,"line":2469},[36,69709,54638],{"class":53},[36,69711,2602],{"class":53794},[36,69713,53801],{"class":53},[36,69715,69716,69718],{"class":38,"line":2492},[36,69717,8930],{"class":53794},[36,69719,18091],{"class":53},[36,69721,69722,69724,69726,69728],{"class":38,"line":4150},[36,69723,57197],{"class":49},[36,69725,53931],{"class":53},[36,69727,713],{"class":49},[36,69729,3833],{"class":53},[36,69731,69732,69734,69736,69738],{"class":38,"line":4155},[36,69733,57186],{"class":49},[36,69735,53931],{"class":53},[36,69737,713],{"class":49},[36,69739,3833],{"class":53},[36,69741,69742],{"class":38,"line":4161},[36,69743,4721],{"class":53},[36,69745,69746],{"class":38,"line":4166},[36,69747,546],{"emptyLinePlaceholder":545},[36,69749,69750,69752],{"class":38,"line":4180},[36,69751,66164],{"class":4500},[36,69753,18091],{"class":53},[36,69755,69756,69758,69760,69762,69764],{"class":38,"line":4185},[36,69757,57262],{"class":49},[36,69759,53931],{"class":53},[36,69761,66175],{"class":49},[36,69763,53986],{"class":114},[36,69765,3833],{"class":53},[36,69767,69768,69770,69772,69774,69776],{"class":38,"line":4191},[36,69769,57276],{"class":49},[36,69771,53931],{"class":53},[36,69773,66188],{"class":49},[36,69775,53986],{"class":114},[36,69777,3833],{"class":53},[36,69779,69780,69782,69784,69786,69788],{"class":38,"line":4212},[36,69781,57197],{"class":49},[36,69783,53931],{"class":53},[36,69785,3376],{"class":49},[36,69787,53986],{"class":114},[36,69789,3833],{"class":53},[36,69791,69792,69794,69796,69798,69800,69802,69804],{"class":38,"line":4217},[36,69793,64465],{"class":49},[36,69795,53931],{"class":53},[36,69797,707],{"class":49},[36,69799,53986],{"class":114},[36,69801,54015],{"class":49},[36,69803,64732],{"class":49},[36,69805,3833],{"class":53},[36,69807,69808],{"class":38,"line":4231},[36,69809,4721],{"class":53},[36,69811,69812],{"class":38,"line":4236},[36,69813,546],{"emptyLinePlaceholder":545},[36,69815,69816,69818],{"class":38,"line":4264},[36,69817,66233],{"class":4500},[36,69819,18091],{"class":53},[36,69821,69822,69824,69826,69828,69830],{"class":38,"line":4269},[36,69823,57262],{"class":49},[36,69825,53931],{"class":53},[36,69827,166],{"class":49},[36,69829,1095],{"class":114},[36,69831,3833],{"class":53},[36,69833,69834,69836,69838,69840,69842],{"class":38,"line":4286},[36,69835,57276],{"class":49},[36,69837,53931],{"class":53},[36,69839,3582],{"class":49},[36,69841,53986],{"class":114},[36,69843,3833],{"class":53},[36,69845,69846,69848,69850,69852,69854],{"class":38,"line":4291},[36,69847,59849],{"class":49},[36,69849,53931],{"class":53},[36,69851,3582],{"class":49},[36,69853,53986],{"class":114},[36,69855,3833],{"class":53},[36,69857,69858,69860,69862,69864],{"class":38,"line":4296},[36,69859,57500],{"class":49},[36,69861,53931],{"class":53},[36,69863,53971],{"class":49},[36,69865,3833],{"class":53},[36,69867,69868,69870,69872,69874],{"class":38,"line":4301},[36,69869,57511],{"class":49},[36,69871,53931],{"class":53},[36,69873,54162],{"class":49},[36,69875,3833],{"class":53},[36,69877,69878],{"class":38,"line":4315},[36,69879,4721],{"class":53},[36,69881,69882],{"class":38,"line":4320},[36,69883,546],{"emptyLinePlaceholder":545},[36,69885,69886,69888,69890],{"class":38,"line":5109},[36,69887,66233],{"class":4500},[36,69889,66306],{"class":53794},[36,69891,18091],{"class":53},[36,69893,69894,69896,69898,69900,69902],{"class":38,"line":5123},[36,69895,57413],{"class":49},[36,69897,53931],{"class":53},[36,69899,3476],{"class":49},[36,69901,53986],{"class":114},[36,69903,3833],{"class":53},[36,69905,69906,69908,69910,69912],{"class":38,"line":5131},[36,69907,64822],{"class":49},[36,69909,53931],{"class":53},[36,69911,66329],{"class":49},[36,69913,3833],{"class":53},[36,69915,69916,69918,69920,69922,69924],{"class":38,"line":5136},[36,69917,64488],{"class":49},[36,69919,53931],{"class":53},[36,69921,3376],{"class":49},[36,69923,53986],{"class":114},[36,69925,3833],{"class":53},[36,69927,69928],{"class":38,"line":5142},[36,69929,4721],{"class":53},[36,69931,69932],{"class":38,"line":5148},[36,69933,546],{"emptyLinePlaceholder":545},[36,69935,69936,69938,69940],{"class":38,"line":5153},[36,69937,66233],{"class":4500},[36,69939,63780],{"class":53794},[36,69941,18091],{"class":53},[36,69943,69944,69946,69948,69950],{"class":38,"line":10475},[36,69945,57223],{"class":49},[36,69947,53931],{"class":53},[36,69949,57228],{"class":49},[36,69951,3833],{"class":53},[36,69953,69954,69956,69958,69960],{"class":38,"line":10499},[36,69955,57500],{"class":49},[36,69957,53931],{"class":53},[36,69959,53971],{"class":49},[36,69961,3833],{"class":53},[36,69963,69964,69966,69968,69970],{"class":38,"line":10504},[36,69965,57511],{"class":49},[36,69967,53931],{"class":53},[36,69969,54074],{"class":49},[36,69971,3833],{"class":53},[36,69973,69974],{"class":38,"line":10510},[36,69975,4721],{"class":53},[36,69977,69978],{"class":38,"line":10537},[36,69979,546],{"emptyLinePlaceholder":545},[36,69981,69982,69984,69986,69988],{"class":38,"line":10542},[36,69983,66233],{"class":4500},[36,69985,63780],{"class":53794},[36,69987,57566],{"class":53794},[36,69989,18091],{"class":53},[36,69991,69992,69994,69996,69998,70000,70002],{"class":38,"line":10548},[36,69993,57197],{"class":49},[36,69995,53931],{"class":53},[36,69997,713],{"class":49},[36,69999,11477],{"class":49},[36,70001,53986],{"class":114},[36,70003,3833],{"class":53},[36,70005,70006,70008,70010,70012,70014],{"class":38,"line":10560},[36,70007,57413],{"class":49},[36,70009,53931],{"class":53},[36,70011,3226],{"class":49},[36,70013,53986],{"class":114},[36,70015,3833],{"class":53},[36,70017,70018],{"class":38,"line":10572},[36,70019,4721],{"class":53},[36,70021,70022],{"class":38,"line":10584},[36,70023,546],{"emptyLinePlaceholder":545},[36,70025,70026,70028,70030,70032,70034],{"class":38,"line":12241},[36,70027,66233],{"class":4500},[36,70029,63780],{"class":53794},[36,70031,57566],{"class":53794},[36,70033,3936],{"class":53794},[36,70035,18091],{"class":53},[36,70037,70038,70040,70042,70044],{"class":38,"line":12266},[36,70039,66458],{"class":49},[36,70041,53931],{"class":53},[36,70043,57228],{"class":49},[36,70045,3833],{"class":53},[36,70047,70048,70050,70052,70054,70056,70058,70060],{"class":38,"line":12289},[36,70049,64720],{"class":49},[36,70051,53931],{"class":53},[36,70053,1188],{"class":49},[36,70055,53986],{"class":114},[36,70057,54015],{"class":49},[36,70059,66479],{"class":49},[36,70061,3833],{"class":53},[36,70063,70064,70066,70068,70070],{"class":38,"line":12313},[36,70065,59906],{"class":49},[36,70067,53931],{"class":53},[36,70069,64857],{"class":49},[36,70071,3833],{"class":53},[36,70073,70074],{"class":38,"line":12318},[36,70075,4721],{"class":53},[36,70077,70078],{"class":38,"line":12323},[36,70079,546],{"emptyLinePlaceholder":545},[36,70081,70082,70084,70086,70088,70090,70092],{"class":38,"line":12328},[36,70083,66233],{"class":4500},[36,70085,63780],{"class":53794},[36,70087,57566],{"class":53794},[36,70089,3936],{"class":53794},[36,70091,66512],{"class":4500},[36,70093,18091],{"class":53},[36,70095,70096,70098,70100,70102],{"class":38,"line":12337},[36,70097,64279],{"class":49},[36,70099,53931],{"class":53},[36,70101,66523],{"class":49},[36,70103,3833],{"class":53},[36,70105,70106,70108,70110,70112],{"class":38,"line":12342},[36,70107,59906],{"class":49},[36,70109,53931],{"class":53},[36,70111,66523],{"class":49},[36,70113,3833],{"class":53},[36,70115,70116],{"class":38,"line":12348},[36,70117,4721],{"class":53},[36,70119,70120],{"class":38,"line":12369},[36,70121,546],{"emptyLinePlaceholder":545},[36,70123,70124,70126],{"class":38,"line":12375},[36,70125,66548],{"class":4500},[36,70127,18091],{"class":53},[36,70129,70130,70132,70134,70136,70138,70140],{"class":38,"line":12389},[36,70131,57186],{"class":49},[36,70133,53931],{"class":53},[36,70135,713],{"class":49},[36,70137,66561],{"class":49},[36,70139,53986],{"class":114},[36,70141,3833],{"class":53},[36,70143,70144],{"class":38,"line":12395},[36,70145,4721],{"class":53},[36,70147,70148],{"class":38,"line":12422},[36,70149,546],{"emptyLinePlaceholder":545},[36,70151,70152,70154,70156],{"class":38,"line":12431},[36,70153,66548],{"class":4500},[36,70155,64662],{"class":4500},[36,70157,18091],{"class":53},[36,70159,70160,70162,70164,70166],{"class":38,"line":12437},[36,70161,57500],{"class":49},[36,70163,53931],{"class":53},[36,70165,57228],{"class":49},[36,70167,3833],{"class":53},[36,70169,70170],{"class":38,"line":12445},[36,70171,4721],{"class":53},[36,70173,70174],{"class":38,"line":12450},[36,70175,546],{"emptyLinePlaceholder":545},[36,70177,70178,70180,70183],{"class":38,"line":19122},[36,70179,66548],{"class":4500},[36,70181,70182],{"class":4500}," .active",[36,70184,18091],{"class":53},[36,70186,70187,70189,70191,70193],{"class":38,"line":19128},[36,70188,57500],{"class":49},[36,70190,53931],{"class":53},[36,70192,63357],{"class":49},[36,70194,3833],{"class":53},[36,70196,70197],{"class":38,"line":19151},[36,70198,4721],{"class":53},[36,70200,70201,70203,70205],{"class":38,"line":19157},[36,70202,54911],{"class":53},[36,70204,2602],{"class":53794},[36,70206,53801],{"class":53},[36,70208,70209,70211,70213],{"class":38,"line":19180},[36,70210,54279],{"class":53},[36,70212,53828],{"class":53794},[36,70214,53801],{"class":53},[36,70216,70217],{"class":38,"line":19194},[36,70218,546],{"emptyLinePlaceholder":545},[36,70220,70221,70223,70225],{"class":38,"line":19214},[36,70222,1507],{"class":53},[36,70224,54294],{"class":53794},[36,70226,53801],{"class":53},[36,70228,70229,70231,70233,70235,70237,70239],{"class":38,"line":19220},[36,70230,54638],{"class":53},[36,70232,54105],{"class":53794},[36,70234,55980],{"class":4500},[36,70236,115],{"class":53},[36,70238,66663],{"class":57},[36,70240,53801],{"class":53},[36,70242,70243,70245,70247,70249,70251,70253],{"class":38,"line":19231},[36,70244,53835],{"class":53},[36,70246,54105],{"class":53794},[36,70248,55980],{"class":4500},[36,70250,115],{"class":53},[36,70252,66678],{"class":57},[36,70254,53801],{"class":53},[36,70256,70257,70259,70261,70263,70265],{"class":38,"line":19254},[36,70258,57725],{"class":53},[36,70260,997],{"class":53794},[36,70262,66689],{"class":53},[36,70264,997],{"class":53794},[36,70266,53801],{"class":53},[36,70268,70269,70271,70273],{"class":38,"line":19276},[36,70270,57725],{"class":53},[36,70272,3680],{"class":53794},[36,70274,53801],{"class":53},[36,70276,70277,70279,70281,70283,70285,70287,70289,70291,70293,70295,70297,70299,70301,70304,70306,70308,70310,70312],{"class":38,"line":19281},[36,70278,57793],{"class":53},[36,70280,436],{"class":53794},[36,70282,63540],{"class":53},[36,70284,2923],{"class":53794},[36,70286,55980],{"class":4500},[36,70288,115],{"class":53},[36,70290,62195],{"class":57},[36,70292,63545],{"class":4500},[36,70294,115],{"class":53},[36,70296,66724],{"class":57},[36,70298,56444],{"class":4500},[36,70300,115],{"class":53},[36,70302,70303],{"class":57},"\"0\"",[36,70305,66727],{"class":53},[36,70307,2923],{"class":53794},[36,70309,57805],{"class":53},[36,70311,436],{"class":53794},[36,70313,53801],{"class":53},[36,70315,70316,70318,70320,70322,70324,70326,70328,70330,70332,70334,70336,70338,70340,70342,70344],{"class":38,"line":19287},[36,70317,57793],{"class":53},[36,70319,436],{"class":53794},[36,70321,63540],{"class":53},[36,70323,2923],{"class":53794},[36,70325,63545],{"class":4500},[36,70327,115],{"class":53},[36,70329,66724],{"class":57},[36,70331,56444],{"class":4500},[36,70333,115],{"class":53},[36,70335,6209],{"class":57},[36,70337,66754],{"class":53},[36,70339,2923],{"class":53794},[36,70341,57805],{"class":53},[36,70343,436],{"class":53794},[36,70345,53801],{"class":53},[36,70347,70348,70350,70352,70354,70356,70358,70360,70362,70364,70366,70368,70370,70372,70374,70376],{"class":38,"line":19301},[36,70349,57793],{"class":53},[36,70351,436],{"class":53794},[36,70353,63540],{"class":53},[36,70355,2923],{"class":53794},[36,70357,63545],{"class":4500},[36,70359,115],{"class":53},[36,70361,66724],{"class":57},[36,70363,56444],{"class":4500},[36,70365,115],{"class":53},[36,70367,6232],{"class":57},[36,70369,66781],{"class":53},[36,70371,2923],{"class":53794},[36,70373,57805],{"class":53},[36,70375,436],{"class":53794},[36,70377,53801],{"class":53},[36,70379,70380,70382,70384,70386,70388,70390,70392,70394,70396,70398,70400,70402,70404,70406,70408],{"class":38,"line":19314},[36,70381,57793],{"class":53},[36,70383,436],{"class":53794},[36,70385,63540],{"class":53},[36,70387,2923],{"class":53794},[36,70389,63545],{"class":4500},[36,70391,115],{"class":53},[36,70393,66724],{"class":57},[36,70395,56444],{"class":4500},[36,70397,115],{"class":53},[36,70399,6245],{"class":57},[36,70401,66808],{"class":53},[36,70403,2923],{"class":53794},[36,70405,57805],{"class":53},[36,70407,436],{"class":53794},[36,70409,53801],{"class":53},[36,70411,70412,70414,70416,70418,70420,70422,70424,70426,70428,70430,70432,70434,70436,70438,70440],{"class":38,"line":19319},[36,70413,57793],{"class":53},[36,70415,436],{"class":53794},[36,70417,63540],{"class":53},[36,70419,2923],{"class":53794},[36,70421,63545],{"class":4500},[36,70423,115],{"class":53},[36,70425,66724],{"class":57},[36,70427,56444],{"class":4500},[36,70429,115],{"class":53},[36,70431,6258],{"class":57},[36,70433,66835],{"class":53},[36,70435,2923],{"class":53794},[36,70437,57805],{"class":53},[36,70439,436],{"class":53794},[36,70441,53801],{"class":53},[36,70443,70444,70446,70448],{"class":38,"line":19333},[36,70445,57898],{"class":53},[36,70447,3680],{"class":53794},[36,70449,53801],{"class":53},[36,70451,70452,70454,70456],{"class":38,"line":19338},[36,70453,54270],{"class":53},[36,70455,54105],{"class":53794},[36,70457,53801],{"class":53},[36,70459,70460,70462,70464,70466,70468,70470],{"class":38,"line":19344},[36,70461,53835],{"class":53},[36,70463,54105],{"class":53794},[36,70465,55980],{"class":4500},[36,70467,115],{"class":53},[36,70469,66872],{"class":57},[36,70471,53801],{"class":53},[36,70473,70474,70476,70478,70480,70482,70484,70486,70488,70490,70492,70494,70496,70498,70500,70502,70504],{"class":38,"line":19349},[36,70475,57725],{"class":53},[36,70477,54105],{"class":53794},[36,70479,55980],{"class":4500},[36,70481,115],{"class":53},[36,70483,66887],{"class":57},[36,70485,63540],{"class":53},[36,70487,4000],{"class":53794},[36,70489,57730],{"class":4500},[36,70491,115],{"class":53},[36,70493,66898],{"class":57},[36,70495,57738],{"class":4500},[36,70497,115],{"class":53},[36,70499,10179],{"class":57},[36,70501,66907],{"class":53},[36,70503,54105],{"class":53794},[36,70505,53801],{"class":53},[36,70507,70508,70510,70512,70514,70516,70518,70520,70522,70524,70526,70528,70530,70532,70534,70536,70538],{"class":38,"line":19363},[36,70509,57725],{"class":53},[36,70511,54105],{"class":53794},[36,70513,55980],{"class":4500},[36,70515,115],{"class":53},[36,70517,65111],{"class":57},[36,70519,63540],{"class":53},[36,70521,4000],{"class":53794},[36,70523,57730],{"class":4500},[36,70525,115],{"class":53},[36,70527,66934],{"class":57},[36,70529,57738],{"class":4500},[36,70531,115],{"class":53},[36,70533,10179],{"class":57},[36,70535,66907],{"class":53},[36,70537,54105],{"class":53794},[36,70539,53801],{"class":53},[36,70541,70542,70544,70546,70548,70550,70552,70554,70556,70558,70560,70562,70564,70566,70568,70570,70572],{"class":38,"line":19368},[36,70543,57725],{"class":53},[36,70545,54105],{"class":53794},[36,70547,55980],{"class":4500},[36,70549,115],{"class":53},[36,70551,65111],{"class":57},[36,70553,63540],{"class":53},[36,70555,4000],{"class":53794},[36,70557,57730],{"class":4500},[36,70559,115],{"class":53},[36,70561,66969],{"class":57},[36,70563,57738],{"class":4500},[36,70565,115],{"class":53},[36,70567,10179],{"class":57},[36,70569,66907],{"class":53},[36,70571,54105],{"class":53794},[36,70573,53801],{"class":53},[36,70575,70576,70578,70580,70582,70584,70586,70588,70590,70592,70594,70596,70598,70600,70602,70604,70606],{"class":38,"line":19373},[36,70577,57725],{"class":53},[36,70579,54105],{"class":53794},[36,70581,55980],{"class":4500},[36,70583,115],{"class":53},[36,70585,65111],{"class":57},[36,70587,63540],{"class":53},[36,70589,4000],{"class":53794},[36,70591,57730],{"class":4500},[36,70593,115],{"class":53},[36,70595,67004],{"class":57},[36,70597,57738],{"class":4500},[36,70599,115],{"class":53},[36,70601,10179],{"class":57},[36,70603,66907],{"class":53},[36,70605,54105],{"class":53794},[36,70607,53801],{"class":53},[36,70609,70610,70612,70614,70616,70618,70620,70622,70624,70626,70628,70630,70632,70634,70636,70638,70640],{"class":38,"line":19387},[36,70611,57725],{"class":53},[36,70613,54105],{"class":53794},[36,70615,55980],{"class":4500},[36,70617,115],{"class":53},[36,70619,65111],{"class":57},[36,70621,63540],{"class":53},[36,70623,4000],{"class":53794},[36,70625,57730],{"class":4500},[36,70627,115],{"class":53},[36,70629,67039],{"class":57},[36,70631,57738],{"class":4500},[36,70633,115],{"class":53},[36,70635,10179],{"class":57},[36,70637,66907],{"class":53},[36,70639,54105],{"class":53794},[36,70641,53801],{"class":53},[36,70643,70644,70646,70648],{"class":38,"line":19399},[36,70645,54270],{"class":53},[36,70647,54105],{"class":53794},[36,70649,53801],{"class":53},[36,70651,70652,70654,70656],{"class":38,"line":19404},[36,70653,54911],{"class":53},[36,70655,54105],{"class":53794},[36,70657,53801],{"class":53},[36,70659,70660,70662,70664],{"class":38,"line":19417},[36,70661,54638],{"class":53},[36,70663,54307],{"class":53794},[36,70665,53801],{"class":53},[36,70667,70668],{"class":38,"line":19422},[36,70669,70670],{"class":42},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,70672,70673],{"class":38,"line":19427},[36,70674,70675],{"class":42},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,70677,70678,70680,70682,70684,70686,70688,70690,70693],{"class":38,"line":19432},[36,70679,13744],{"class":114},[36,70681,63780],{"class":49},[36,70683,498],{"class":114},[36,70685,56888],{"class":53},[36,70687,56891],{"class":4500},[36,70689,54],{"class":53},[36,70691,70692],{"class":57},"'.tab-nav ul'",[36,70694,61],{"class":53},[36,70696,70697],{"class":38,"line":19445},[36,70698,70699],{"class":42},"    \u002F\u002F 2.添加事件\n",[36,70701,70702,70704,70706,70708,70710,70712,70714,70716,70718],{"class":38,"line":19450},[36,70703,69441],{"class":53},[36,70705,60303],{"class":4500},[36,70707,54],{"class":53},[36,70709,60308],{"class":57},[36,70711,14958],{"class":53},[36,70713,56940],{"class":114},[36,70715,4196],{"class":53},[36,70717,2770],{"class":1997},[36,70719,14965],{"class":53},[36,70721,70722,70724,70726],{"class":38,"line":35135},[36,70723,60734],{"class":53},[36,70725,69497],{"class":4500},[36,70727,69500],{"class":53},[36,70729,70730],{"class":38,"line":35141},[36,70731,70732],{"class":42},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,70734,70735,70737,70739,70741,70744],{"class":38,"line":35147},[36,70736,56971],{"class":114},[36,70738,69521],{"class":53},[36,70740,56977],{"class":114},[36,70742,70743],{"class":57}," 'A'",[36,70745,14965],{"class":53},[36,70747,70748,70750,70752,70754,70757,70759,70761,70763,70765],{"class":38,"line":35153},[36,70749,54419],{"class":53},[36,70751,56891],{"class":4500},[36,70753,54],{"class":53},[36,70755,70756],{"class":57},"'.active'",[36,70758,59493],{"class":53},[36,70760,59496],{"class":4500},[36,70762,54],{"class":53},[36,70764,67202],{"class":57},[36,70766,61],{"class":53},[36,70768,70769,70772,70774,70776,70778],{"class":38,"line":35159},[36,70770,70771],{"class":53},"        e.target.classList.",[36,70773,7862],{"class":4500},[36,70775,54],{"class":53},[36,70777,67202],{"class":57},[36,70779,61],{"class":53},[36,70781,70782],{"class":38,"line":35170},[36,70783,546],{"emptyLinePlaceholder":545},[36,70785,70786],{"class":38,"line":35176},[36,70787,70788],{"class":42},"        \u002F\u002F 下面大盒子模块\n",[36,70790,70791],{"class":38,"line":35196},[36,70792,70793],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,70795,70796,70798,70800,70802,70804],{"class":38,"line":35202},[36,70797,63758],{"class":114},[36,70799,5563],{"class":49},[36,70801,498],{"class":114},[36,70803,730],{"class":114},[36,70805,70806],{"class":53},"e.target.dataset.id\n",[36,70808,70809,70811,70813,70815,70817,70819,70821,70823,70825],{"class":38,"line":35213},[36,70810,54419],{"class":53},[36,70812,56891],{"class":4500},[36,70814,54],{"class":53},[36,70816,67250],{"class":57},[36,70818,59493],{"class":53},[36,70820,59496],{"class":4500},[36,70822,54],{"class":53},[36,70824,67202],{"class":57},[36,70826,61],{"class":53},[36,70828,70829,70831,70833,70835,70837,70839,70841,70843,70845,70847,70849,70851,70853],{"class":38,"line":35219},[36,70830,54419],{"class":53},[36,70832,56891],{"class":4500},[36,70834,54],{"class":53},[36,70836,67276],{"class":57},[36,70838,3122],{"class":53},[36,70840,730],{"class":114},[36,70842,733],{"class":49},[36,70844,59522],{"class":57},[36,70846,59493],{"class":53},[36,70848,7862],{"class":4500},[36,70850,54],{"class":53},[36,70852,67202],{"class":57},[36,70854,61],{"class":53},[36,70856,70857],{"class":38,"line":35225},[36,70858,546],{"emptyLinePlaceholder":545},[36,70860,70861],{"class":38,"line":35231},[36,70862,54892],{"class":53},[36,70864,70865],{"class":38,"line":35237},[36,70866,35962],{"class":53},[36,70868,70869,70871,70873],{"class":38,"line":35243},[36,70870,54911],{"class":53},[36,70872,54307],{"class":53794},[36,70874,53801],{"class":53},[36,70876,70877,70879,70881],{"class":38,"line":35249},[36,70878,54279],{"class":53},[36,70880,54294],{"class":53794},[36,70882,53801],{"class":53},[36,70884,70885],{"class":38,"line":35255},[36,70886,546],{"emptyLinePlaceholder":545},[36,70888,70889,70891,70893],{"class":38,"line":35275},[36,70890,54279],{"class":53},[36,70892,53131],{"class":53794},[36,70894,53801],{"class":53},[997,70896,70898],{"id":70897},"_333-页面加载事件","3.3.3 页面加载事件",[433,70900,70901],{},[436,70902,70903],{},"load",[19,70905,70906],{},[4000,70907],{"alt":31,"src":70908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70910,70911],{},"window代表整个窗口，比document还要大",[19,70913,70914],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70916,70917],{},"img.addEventListener('load', function () {",[19,70919,70920],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70922,54958],{},[433,70924,70925],{"start":46},[436,70926,70927],{},"DOMContentLoaded",[19,70929,70930],{},[4000,70931],{"alt":31,"src":70932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70934,70935],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[997,70937,70939],{"id":70938},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70941,70942],{},[4000,70943],{"alt":31,"src":70944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70946,70947],{},[4000,70948],{"alt":31,"src":70949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70951,70952],{},[4000,70953],{"alt":31,"src":70954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70956,70957],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70959,70960],{},"获得的是数字型数据，不带单位",[19,70962,70963],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70965,70966],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70968,70969],{},"它是通过document.documentElement来获取",[19,70971,70972],{},[4000,70973],{"alt":31,"src":70974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70976,70977],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[997,70979,70981],{"id":70980},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70983,70984],{},[4000,70985],{"alt":31,"src":70986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70988,70989],{},[4000,70990],{"alt":31,"src":70991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[997,70993,70995],{"id":70994},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70997,70998],{},[4000,70999],{"alt":31,"src":71000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,71002,71003],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,71005,71006],{},[4000,71007],{"alt":31,"src":71008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,71010,71011],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,71013,71014],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,71016,71017],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,71019,71020],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,71022,71023],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,71025,71026],{},[4000,71027],{"alt":31,"src":71028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,71030,71031],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,71033,71034],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,71036,71037],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,71039,71040],{},"e.pageX-box.getBoundingClientRect()",[997,71042,71044],{"id":71043},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,71046,71047],{},[4000,71048],{"alt":31,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,71051,71052],{},"这个是相对于视口来说的，它是个方法，不是属性值",[997,71054,71056],{"id":71055},"_338-总结","3.3.8 总结",[19,71058,71059],{},[4000,71060],{"alt":31,"src":71061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,71063,71064],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,71066,71067],{},"修改盒子的宽高只能通过width和height来实现",[997,71069,71071],{"id":71070},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,71073,71075],{"className":53129,"code":71074,"language":53131,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,71076,71077,71082,71087,71092,71097],{"__ignoreMap":31},[36,71078,71079],{"class":38,"line":39},[36,71080,71081],{"class":53},"\u002F* 页面滑动 *\u002F\n",[36,71083,71084],{"class":38,"line":46},[36,71085,71086],{"class":53},"html {\n",[36,71088,71089],{"class":38,"line":82},[36,71090,71091],{"class":53},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,71093,71094],{"class":38,"line":88},[36,71095,71096],{"class":53},"  scroll-behavior: smooth;\n",[36,71098,71099],{"class":38,"line":195},[36,71100,4103],{"class":53},[19,71102,71103],{},"默认是auto",[997,71105,71107],{"id":71106},"_3310-日期对象","3.3.10 日期对象",[24515,71109,71111],{"id":71110},"_33101-实例化","3.3.10.1 实例化",[19,71113,71114],{},[4000,71115],{"alt":31,"src":71116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24515,71118,71120],{"id":71119},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,71122,71123],{},[4000,71124],{"alt":31,"src":71125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,71127,71128],{},"月份+1",[19,71130,71131],{},"老外认为第一天为0，星期天",[19,71133,71134],{},"方法使用的时候必须要跟括号",[19,71136,71137],{},"快速获得日期",[19,71139,71140],{},"\u002F\u002F 得到年月日",[19,71142,71143],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71145,71146],{},"\u002F\u002F 得到当地日期",[19,71148,71149],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71151,71152],{},"\u002F\u002F 得到当地时间",[19,71154,71155],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71157,71158],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71160,71161],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54307,71163,71164],{},"\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,71166,71167],{},"学会去封装函数！",[24515,71169,71171],{"id":71170},"_33103-时间戳","3.3.10.3 时间戳",[19,71173,71174],{},[4000,71175],{"alt":31,"src":71176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71178,71179],{},[4000,71180],{"alt":31,"src":71181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71183,71184],{},"三种方法记住一个就可以",[997,71186,71188],{"id":71187},"_3311-节点操作","3.3.11 节点操作",[24515,71190,71192],{"id":71191},"_33111-dom节点","3.3.11.1 DOM节点",[19,71194,71195],{},[4000,71196],{"alt":31,"src":71197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,71199,71200],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24515,71202,71204],{"id":71203},"_33112-查找节点","3.3.11.2 查找节点",[19,71206,71207],{},"前边的document.querySelector()是获取的元素",[19,71209,71210],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,71212,71213],{},[4000,71214],{"alt":31,"src":71215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[433,71217,71218],{},[436,71219,71220],{},"父节点",[19,71222,71223],{},[4000,71224],{"alt":31,"src":71225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[433,71227,71228],{"start":46},[436,71229,71230],{},"子节点",[19,71232,71233],{},[4000,71234],{"alt":31,"src":71235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,71237,71238],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,71240,71241],{},"children获得的是伪数组，是亲儿子",[433,71243,71244],{"start":82},[436,71245,71246],{},"兄弟节点",[19,71248,71249],{},[4000,71250],{"alt":31,"src":71251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24515,71253,71255],{"id":71254},"_33113-增加节点","3.3.11.3 增加节点",[19,71257,71258],{},[4000,71259],{"alt":31,"src":71260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71262,71263],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71265,71266],{},[4000,71267],{"alt":31,"src":71268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71270,71271],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71273,71274],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71276,71277],{},"例：",[54307,71279,71280],{},"\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,71282,71283],{},[4000,71284],{"alt":31,"src":71285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71287,71288],{},"false只克隆标签，里边的内容不会克隆过来",[26,71290,71292],{"className":53129,"code":71291,"language":53131,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,71293,71294],{"__ignoreMap":31},[36,71295,71296],{"class":38,"line":39},[36,71297,71291],{"class":53},[24515,71299,71301],{"id":71300},"_33114-删除节点","3.3.11.4 删除节点",[19,71303,71304],{},[4000,71305],{"alt":31,"src":71306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71308,71309],{},"父亲删儿子",[19,71311,71312],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[997,71314,71316],{"id":71315},"_3312-m端事件","3.3.12 M端事件",[19,71318,71319],{},"M端就是移动端",[19,71321,71322],{},[4000,71323],{"alt":31,"src":71324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[997,71326,71328],{"id":71327},"_3313-插件","3.3.13 插件",[19,71330,71331],{},"要熟悉官网！！！",[19,71333,71334],{},[2923,71335,71336],{"href":71336,"rel":71337},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26381],[19,71339,71340],{},[2923,71341,71342],{"href":71342,"rel":71343},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26381],[997,71345,71347],{"id":71346},"_3314-学生信息表","3.3.14 学生信息表",[433,71349,71350,71353,71356,71359,71362,71365,71368,71371],{},[436,71351,71352],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[436,71354,71355],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[436,71357,71358],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[436,71360,71361],{},"用好表单元素自带的属性，value,name等",[436,71363,71364],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[436,71366,71367],{},"不要忘记事件对象",[436,71369,71370],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[436,71372,71373],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71375,71376],{},"结构：",[26,71378,71380],{"className":53129,"code":71379,"language":53131,"meta":31,"style":31},"\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",[33,71381,71382,71392,71406,71410,71418,71432,71452,71473,71486,71510,71518,71522,71530,71543,71564,71592,71620,71625,71647,71667,71686,71694,71722,71744,71764,71784,71804,71824,71844,71852,71872,71880,71884,71897,71905,71913,71921,71934,71947,71960,71973,71986,71999,72012,72020,72028,72036,72041,72046,72051,72056,72061,72066,72071,72076,72081,72086,72091,72096,72101,72109,72117,72125,72129,72149,72168,72188,72208,72228,72248,72252,72257,72277,72282,72292,72297,72302,72322,72344,72349,72359,72363,72367,72372,72377,72406,72420,72435,72439,72443,72447,72452,72463,72476,72481,72486,72491,72496,72501,72505,72510,72515,72524,72529,72534,72546,72551,72558,72562,72567,72577,72582,72592,72597,72625,72646,72656,72676,72694,72710,72727,72744,72761,72765,72775,72780,72785,72790,72801,72805,72809,72813,72818,72823,72844,72856,72861,72866,72871,72885,72890,72897,72901,72905,72913,72917,72925,72929],{"__ignoreMap":31},[36,71383,71384,71386,71388,71390],{"class":38,"line":39},[36,71385,53791],{"class":53},[36,71387,53795],{"class":53794},[36,71389,53798],{"class":4500},[36,71391,53801],{"class":53},[36,71393,71394,71396,71398,71400,71402,71404],{"class":38,"line":46},[36,71395,1507],{"class":53},[36,71397,53131],{"class":53794},[36,71399,53810],{"class":4500},[36,71401,115],{"class":53},[36,71403,53815],{"class":57},[36,71405,53801],{"class":53},[36,71407,71408],{"class":38,"line":82},[36,71409,546],{"emptyLinePlaceholder":545},[36,71411,71412,71414,71416],{"class":38,"line":88},[36,71413,1507],{"class":53},[36,71415,53828],{"class":53794},[36,71417,53801],{"class":53},[36,71419,71420,71422,71424,71426,71428,71430],{"class":38,"line":195},[36,71421,54638],{"class":53},[36,71423,53838],{"class":53794},[36,71425,53841],{"class":4500},[36,71427,115],{"class":53},[36,71429,53846],{"class":57},[36,71431,61616],{"class":53},[36,71433,71434,71436,71438,71440,71442,71444,71446,71448,71450],{"class":38,"line":1517},[36,71435,54638],{"class":53},[36,71437,53838],{"class":53794},[36,71439,17440],{"class":4500},[36,71441,115],{"class":53},[36,71443,53885],{"class":57},[36,71445,53865],{"class":4500},[36,71447,115],{"class":53},[36,71449,53892],{"class":57},[36,71451,61616],{"class":53},[36,71453,71454,71456,71458,71460,71462,71464,71466,71468,71471],{"class":38,"line":2421},[36,71455,54638],{"class":53},[36,71457,53838],{"class":53794},[36,71459,53857],{"class":4500},[36,71461,115],{"class":53},[36,71463,53862],{"class":57},[36,71465,53865],{"class":4500},[36,71467,115],{"class":53},[36,71469,71470],{"class":57},"\"ie=edge\"",[36,71472,61616],{"class":53},[36,71474,71475,71477,71479,71482,71484],{"class":38,"line":2446},[36,71476,54638],{"class":53},[36,71478,53901],{"class":53794},[36,71480,71481],{"class":53},">学生信息管理\u003C\u002F",[36,71483,53901],{"class":53794},[36,71485,53801],{"class":53},[36,71487,71488,71490,71493,71496,71498,71501,71503,71505,71508],{"class":38,"line":2469},[36,71489,54638],{"class":53},[36,71491,71492],{"class":53794},"link",[36,71494,71495],{"class":4500}," rel",[36,71497,115],{"class":53},[36,71499,71500],{"class":57},"\"stylesheet\"",[36,71502,63545],{"class":4500},[36,71504,115],{"class":53},[36,71506,71507],{"class":57},"\"css\u002Findex.css\"",[36,71509,61616],{"class":53},[36,71511,71512,71514,71516],{"class":38,"line":2492},[36,71513,54279],{"class":53},[36,71515,53828],{"class":53794},[36,71517,53801],{"class":53},[36,71519,71520],{"class":38,"line":4150},[36,71521,546],{"emptyLinePlaceholder":545},[36,71523,71524,71526,71528],{"class":38,"line":4155},[36,71525,1507],{"class":53},[36,71527,54294],{"class":53794},[36,71529,53801],{"class":53},[36,71531,71532,71534,71536,71539,71541],{"class":38,"line":4161},[36,71533,54638],{"class":53},[36,71535,10],{"class":53794},[36,71537,71538],{"class":53},">新增学员\u003C\u002F",[36,71540,10],{"class":53794},[36,71542,53801],{"class":53},[36,71544,71545,71547,71549,71551,71553,71555,71558,71560,71562],{"class":38,"line":4166},[36,71546,54638],{"class":53},[36,71548,69112],{"class":53794},[36,71550,55980],{"class":4500},[36,71552,115],{"class":53},[36,71554,65152],{"class":57},[36,71556,71557],{"class":4500}," autocomplete",[36,71559,115],{"class":53},[36,71561,34279],{"class":57},[36,71563,53801],{"class":53},[36,71565,71566,71569,71571,71573,71575,71577,71579,71581,71584,71586,71588,71590],{"class":38,"line":4180},[36,71567,71568],{"class":53},"    姓名：\u003C",[36,71570,913],{"class":53794},[36,71572,56317],{"class":4500},[36,71574,115],{"class":53},[36,71576,65187],{"class":57},[36,71578,55980],{"class":4500},[36,71580,115],{"class":53},[36,71582,71583],{"class":57},"\"uname\"",[36,71585,17440],{"class":4500},[36,71587,115],{"class":53},[36,71589,71583],{"class":57},[36,71591,61616],{"class":53},[36,71593,71594,71597,71599,71601,71603,71605,71607,71609,71612,71614,71616,71618],{"class":38,"line":4185},[36,71595,71596],{"class":53},"    年龄：\u003C",[36,71598,913],{"class":53794},[36,71600,56317],{"class":4500},[36,71602,115],{"class":53},[36,71604,65187],{"class":57},[36,71606,55980],{"class":4500},[36,71608,115],{"class":53},[36,71610,71611],{"class":57},"\"age\"",[36,71613,17440],{"class":4500},[36,71615,115],{"class":53},[36,71617,71611],{"class":57},[36,71619,61616],{"class":53},[36,71621,71622],{"class":38,"line":4191},[36,71623,71624],{"class":53},"    性别:\n",[36,71626,71627,71629,71632,71634,71636,71639,71641,71643,71645],{"class":38,"line":4212},[36,71628,53835],{"class":53},[36,71630,71631],{"class":53794},"select",[36,71633,17440],{"class":4500},[36,71635,115],{"class":53},[36,71637,71638],{"class":57},"\"gender\"",[36,71640,55980],{"class":4500},[36,71642,115],{"class":53},[36,71644,71638],{"class":57},[36,71646,53801],{"class":53},[36,71648,71649,71651,71654,71656,71658,71660,71663,71665],{"class":38,"line":4217},[36,71650,57725],{"class":53},[36,71652,71653],{"class":53794},"option",[36,71655,69138],{"class":4500},[36,71657,115],{"class":53},[36,71659,12486],{"class":57},[36,71661,71662],{"class":53},">男\u003C\u002F",[36,71664,71653],{"class":53794},[36,71666,53801],{"class":53},[36,71668,71669,71671,71673,71675,71677,71679,71682,71684],{"class":38,"line":4231},[36,71670,57725],{"class":53},[36,71672,71653],{"class":53794},[36,71674,69138],{"class":4500},[36,71676,115],{"class":53},[36,71678,12555],{"class":57},[36,71680,71681],{"class":53},">女\u003C\u002F",[36,71683,71653],{"class":53794},[36,71685,53801],{"class":53},[36,71687,71688,71690,71692],{"class":38,"line":4236},[36,71689,54270],{"class":53},[36,71691,71631],{"class":53794},[36,71693,53801],{"class":53},[36,71695,71696,71699,71701,71703,71705,71707,71709,71711,71714,71716,71718,71720],{"class":38,"line":4264},[36,71697,71698],{"class":53},"    薪资：\u003C",[36,71700,913],{"class":53794},[36,71702,56317],{"class":4500},[36,71704,115],{"class":53},[36,71706,65187],{"class":57},[36,71708,55980],{"class":4500},[36,71710,115],{"class":53},[36,71712,71713],{"class":57},"\"salary\"",[36,71715,17440],{"class":4500},[36,71717,115],{"class":53},[36,71719,71713],{"class":57},[36,71721,61616],{"class":53},[36,71723,71724,71727,71729,71731,71733,71736,71738,71740,71742],{"class":38,"line":4269},[36,71725,71726],{"class":53},"    就业城市：\u003C",[36,71728,71631],{"class":53794},[36,71730,17440],{"class":4500},[36,71732,115],{"class":53},[36,71734,71735],{"class":57},"\"city\"",[36,71737,55980],{"class":4500},[36,71739,115],{"class":53},[36,71741,71735],{"class":57},[36,71743,53801],{"class":53},[36,71745,71746,71748,71750,71752,71754,71757,71760,71762],{"class":38,"line":4286},[36,71747,57725],{"class":53},[36,71749,71653],{"class":53794},[36,71751,69138],{"class":4500},[36,71753,115],{"class":53},[36,71755,71756],{"class":57},"\"北京\"",[36,71758,71759],{"class":53},">北京\u003C\u002F",[36,71761,71653],{"class":53794},[36,71763,53801],{"class":53},[36,71765,71766,71768,71770,71772,71774,71777,71780,71782],{"class":38,"line":4291},[36,71767,57725],{"class":53},[36,71769,71653],{"class":53794},[36,71771,69138],{"class":4500},[36,71773,115],{"class":53},[36,71775,71776],{"class":57},"\"上海\"",[36,71778,71779],{"class":53},">上海\u003C\u002F",[36,71781,71653],{"class":53794},[36,71783,53801],{"class":53},[36,71785,71786,71788,71790,71792,71794,71797,71800,71802],{"class":38,"line":4296},[36,71787,57725],{"class":53},[36,71789,71653],{"class":53794},[36,71791,69138],{"class":4500},[36,71793,115],{"class":53},[36,71795,71796],{"class":57},"\"广州\"",[36,71798,71799],{"class":53},">广州\u003C\u002F",[36,71801,71653],{"class":53794},[36,71803,53801],{"class":53},[36,71805,71806,71808,71810,71812,71814,71817,71820,71822],{"class":38,"line":4301},[36,71807,57725],{"class":53},[36,71809,71653],{"class":53794},[36,71811,69138],{"class":4500},[36,71813,115],{"class":53},[36,71815,71816],{"class":57},"\"深圳\"",[36,71818,71819],{"class":53},">深圳\u003C\u002F",[36,71821,71653],{"class":53794},[36,71823,53801],{"class":53},[36,71825,71826,71828,71830,71832,71834,71837,71840,71842],{"class":38,"line":4315},[36,71827,57725],{"class":53},[36,71829,71653],{"class":53794},[36,71831,69138],{"class":4500},[36,71833,115],{"class":53},[36,71835,71836],{"class":57},"\"曹县\"",[36,71838,71839],{"class":53},">曹县\u003C\u002F",[36,71841,71653],{"class":53794},[36,71843,53801],{"class":53},[36,71845,71846,71848,71850],{"class":38,"line":4320},[36,71847,54270],{"class":53},[36,71849,71631],{"class":53794},[36,71851,53801],{"class":53},[36,71853,71854,71856,71858,71860,71862,71865,71868,71870],{"class":38,"line":5109},[36,71855,53835],{"class":53},[36,71857,56380],{"class":53794},[36,71859,55980],{"class":4500},[36,71861,115],{"class":53},[36,71863,71864],{"class":57},"\"add\"",[36,71866,71867],{"class":53},">录入\u003C\u002F",[36,71869,56380],{"class":53794},[36,71871,53801],{"class":53},[36,71873,71874,71876,71878],{"class":38,"line":5123},[36,71875,54911],{"class":53},[36,71877,69112],{"class":53794},[36,71879,53801],{"class":53},[36,71881,71882],{"class":38,"line":5131},[36,71883,546],{"emptyLinePlaceholder":545},[36,71885,71886,71888,71890,71893,71895],{"class":38,"line":5136},[36,71887,54638],{"class":53},[36,71889,10],{"class":53794},[36,71891,71892],{"class":53},">就业榜\u003C\u002F",[36,71894,10],{"class":53794},[36,71896,53801],{"class":53},[36,71898,71899,71901,71903],{"class":38,"line":5142},[36,71900,54638],{"class":53},[36,71902,206],{"class":53794},[36,71904,53801],{"class":53},[36,71906,71907,71909,71911],{"class":38,"line":5148},[36,71908,53835],{"class":53},[36,71910,209],{"class":53794},[36,71912,53801],{"class":53},[36,71914,71915,71917,71919],{"class":38,"line":5153},[36,71916,57725],{"class":53},[36,71918,212],{"class":53794},[36,71920,53801],{"class":53},[36,71922,71923,71925,71927,71930,71932],{"class":38,"line":10475},[36,71924,57793],{"class":53},[36,71926,215],{"class":53794},[36,71928,71929],{"class":53},">序号\u003C\u002F",[36,71931,215],{"class":53794},[36,71933,53801],{"class":53},[36,71935,71936,71938,71940,71943,71945],{"class":38,"line":10499},[36,71937,57793],{"class":53},[36,71939,215],{"class":53794},[36,71941,71942],{"class":53},">姓名\u003C\u002F",[36,71944,215],{"class":53794},[36,71946,53801],{"class":53},[36,71948,71949,71951,71953,71956,71958],{"class":38,"line":10504},[36,71950,57793],{"class":53},[36,71952,215],{"class":53794},[36,71954,71955],{"class":53},">年龄\u003C\u002F",[36,71957,215],{"class":53794},[36,71959,53801],{"class":53},[36,71961,71962,71964,71966,71969,71971],{"class":38,"line":10510},[36,71963,57793],{"class":53},[36,71965,215],{"class":53794},[36,71967,71968],{"class":53},">性别\u003C\u002F",[36,71970,215],{"class":53794},[36,71972,53801],{"class":53},[36,71974,71975,71977,71979,71982,71984],{"class":38,"line":10537},[36,71976,57793],{"class":53},[36,71978,215],{"class":53794},[36,71980,71981],{"class":53},">薪资\u003C\u002F",[36,71983,215],{"class":53794},[36,71985,53801],{"class":53},[36,71987,71988,71990,71992,71995,71997],{"class":38,"line":10542},[36,71989,57793],{"class":53},[36,71991,215],{"class":53794},[36,71993,71994],{"class":53},">就业城市\u003C\u002F",[36,71996,215],{"class":53794},[36,71998,53801],{"class":53},[36,72000,72001,72003,72005,72008,72010],{"class":38,"line":10548},[36,72002,57793],{"class":53},[36,72004,215],{"class":53794},[36,72006,72007],{"class":53},">操作\u003C\u002F",[36,72009,215],{"class":53794},[36,72011,53801],{"class":53},[36,72013,72014,72016,72018],{"class":38,"line":10560},[36,72015,57898],{"class":53},[36,72017,212],{"class":53794},[36,72019,53801],{"class":53},[36,72021,72022,72024,72026],{"class":38,"line":10572},[36,72023,54270],{"class":53},[36,72025,209],{"class":53794},[36,72027,53801],{"class":53},[36,72029,72030,72032,72034],{"class":38,"line":10584},[36,72031,53835],{"class":53},[36,72033,225],{"class":53794},[36,72035,53801],{"class":53},[36,72037,72038],{"class":38,"line":12241},[36,72039,72040],{"class":42},"      \u003C!-- \n",[36,72042,72043],{"class":38,"line":12266},[36,72044,72045],{"class":42},"        \u003Ctr>\n",[36,72047,72048],{"class":38,"line":12289},[36,72049,72050],{"class":42},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,72052,72053],{"class":38,"line":12313},[36,72054,72055],{"class":42},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,72057,72058],{"class":38,"line":12318},[36,72059,72060],{"class":42},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,72062,72063],{"class":38,"line":12323},[36,72064,72065],{"class":42},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,72067,72068],{"class":38,"line":12328},[36,72069,72070],{"class":42},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,72072,72073],{"class":38,"line":12337},[36,72074,72075],{"class":42},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,72077,72078],{"class":38,"line":12342},[36,72079,72080],{"class":42},"          \u003Ctd>\n",[36,72082,72083],{"class":38,"line":12348},[36,72084,72085],{"class":42},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,72087,72088],{"class":38,"line":12369},[36,72089,72090],{"class":42},"          \u003C\u002Ftd>\n",[36,72092,72093],{"class":38,"line":12375},[36,72094,72095],{"class":42},"        \u003C\u002Ftr> \n",[36,72097,72098],{"class":38,"line":12389},[36,72099,72100],{"class":42},"        -->\n",[36,72102,72103,72105,72107],{"class":38,"line":12395},[36,72104,54270],{"class":53},[36,72106,225],{"class":53794},[36,72108,53801],{"class":53},[36,72110,72111,72113,72115],{"class":38,"line":12422},[36,72112,54911],{"class":53},[36,72114,206],{"class":53794},[36,72116,53801],{"class":53},[36,72118,72119,72121,72123],{"class":38,"line":12431},[36,72120,54638],{"class":53},[36,72122,54307],{"class":53794},[36,72124,53801],{"class":53},[36,72126,72127],{"class":38,"line":12437},[36,72128,62447],{"class":42},[36,72130,72131,72133,72136,72138,72140,72142,72144,72147],{"class":38,"line":12445},[36,72132,13744],{"class":114},[36,72134,72135],{"class":49}," uname",[36,72137,498],{"class":114},[36,72139,56888],{"class":53},[36,72141,56891],{"class":4500},[36,72143,54],{"class":53},[36,72145,72146],{"class":57},"'.uname'",[36,72148,61],{"class":53},[36,72150,72151,72153,72155,72157,72159,72161,72163,72166],{"class":38,"line":12450},[36,72152,13744],{"class":114},[36,72154,18208],{"class":49},[36,72156,498],{"class":114},[36,72158,56888],{"class":53},[36,72160,56891],{"class":4500},[36,72162,54],{"class":53},[36,72164,72165],{"class":57},"'.age'",[36,72167,61],{"class":53},[36,72169,72170,72172,72175,72177,72179,72181,72183,72186],{"class":38,"line":19122},[36,72171,13744],{"class":114},[36,72173,72174],{"class":49}," gender",[36,72176,498],{"class":114},[36,72178,56888],{"class":53},[36,72180,56891],{"class":4500},[36,72182,54],{"class":53},[36,72184,72185],{"class":57},"'.gender'",[36,72187,61],{"class":53},[36,72189,72190,72192,72195,72197,72199,72201,72203,72206],{"class":38,"line":19128},[36,72191,13744],{"class":114},[36,72193,72194],{"class":49}," salary",[36,72196,498],{"class":114},[36,72198,56888],{"class":53},[36,72200,56891],{"class":4500},[36,72202,54],{"class":53},[36,72204,72205],{"class":57},"'.salary'",[36,72207,61],{"class":53},[36,72209,72210,72212,72215,72217,72219,72221,72223,72226],{"class":38,"line":19151},[36,72211,13744],{"class":114},[36,72213,72214],{"class":49}," city",[36,72216,498],{"class":114},[36,72218,56888],{"class":53},[36,72220,56891],{"class":4500},[36,72222,54],{"class":53},[36,72224,72225],{"class":57},"'.city'",[36,72227,61],{"class":53},[36,72229,72230,72232,72235,72237,72239,72241,72243,72246],{"class":38,"line":19157},[36,72231,13744],{"class":114},[36,72233,72234],{"class":49}," tbody",[36,72236,498],{"class":114},[36,72238,56888],{"class":53},[36,72240,56891],{"class":4500},[36,72242,54],{"class":53},[36,72244,72245],{"class":57},"'tbody'",[36,72247,61],{"class":53},[36,72249,72250],{"class":38,"line":19180},[36,72251,546],{"emptyLinePlaceholder":545},[36,72253,72254],{"class":38,"line":19194},[36,72255,72256],{"class":42},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,72258,72259,72261,72264,72266,72268,72270,72272,72275],{"class":38,"line":19214},[36,72260,13744],{"class":114},[36,72262,72263],{"class":49}," items",[36,72265,498],{"class":114},[36,72267,56888],{"class":53},[36,72269,58172],{"class":4500},[36,72271,54],{"class":53},[36,72273,72274],{"class":57},"'[name]'",[36,72276,61],{"class":53},[36,72278,72279],{"class":38,"line":19220},[36,72280,72281],{"class":42},"    \u002F\u002F 声明一个空的数组\n",[36,72283,72284,72286,72288,72290],{"class":38,"line":19231},[36,72285,13744],{"class":114},[36,72287,60185],{"class":49},[36,72289,498],{"class":114},[36,72291,54332],{"class":53},[36,72293,72294],{"class":38,"line":19254},[36,72295,72296],{"class":42},"    \u002F\u002F 1.录入模块\n",[36,72298,72299],{"class":38,"line":19276},[36,72300,72301],{"class":42},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,72303,72304,72306,72309,72311,72313,72315,72317,72320],{"class":38,"line":19281},[36,72305,13744],{"class":114},[36,72307,72308],{"class":49}," info",[36,72310,498],{"class":114},[36,72312,56888],{"class":53},[36,72314,56891],{"class":4500},[36,72316,54],{"class":53},[36,72318,72319],{"class":57},"'.info'",[36,72321,61],{"class":53},[36,72323,72324,72327,72329,72331,72334,72336,72338,72340,72342],{"class":38,"line":19287},[36,72325,72326],{"class":53},"    info.",[36,72328,60303],{"class":4500},[36,72330,54],{"class":53},[36,72332,72333],{"class":57},"'submit'",[36,72335,14958],{"class":53},[36,72337,56940],{"class":114},[36,72339,4196],{"class":53},[36,72341,2770],{"class":1997},[36,72343,14965],{"class":53},[36,72345,72346],{"class":38,"line":19301},[36,72347,72348],{"class":42},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,72350,72351,72354,72357],{"class":38,"line":19314},[36,72352,72353],{"class":53},"      e.",[36,72355,72356],{"class":4500},"preventDefault",[36,72358,4513],{"class":53},[36,72360,72361],{"class":38,"line":19319},[36,72362,62501],{"class":42},[36,72364,72365],{"class":38,"line":19333},[36,72366,546],{"emptyLinePlaceholder":545},[36,72368,72369],{"class":38,"line":19338},[36,72370,72371],{"class":42},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,72373,72374],{"class":38,"line":19344},[36,72375,72376],{"class":42},"      \u002F\u002F 先遍历循环\n",[36,72378,72379,72381,72383,72385,72387,72389,72391,72393,72395,72398,72400,72402,72404],{"class":38,"line":19349},[36,72380,54778],{"class":114},[36,72382,4196],{"class":53},[36,72384,54341],{"class":114},[36,72386,11964],{"class":53},[36,72388,115],{"class":114},[36,72390,6624],{"class":49},[36,72392,11971],{"class":53},[36,72394,1507],{"class":114},[36,72396,72397],{"class":53}," items.",[36,72399,54462],{"class":49},[36,72401,5745],{"class":53},[36,72403,4826],{"class":114},[36,72405,14965],{"class":53},[36,72407,72408,72410,72413,72415,72418],{"class":38,"line":19363},[36,72409,5029],{"class":114},[36,72411,72412],{"class":53}," (items[i].value ",[36,72414,56977],{"class":114},[36,72416,72417],{"class":57}," ''",[36,72419,14965],{"class":53},[36,72421,72422,72425,72428,72430,72433],{"class":38,"line":19368},[36,72423,72424],{"class":114},"          return",[36,72426,72427],{"class":4500}," alert",[36,72429,54],{"class":53},[36,72431,72432],{"class":57},"'输入内容不能为空'",[36,72434,61],{"class":53},[36,72436,72437],{"class":38,"line":19373},[36,72438,5061],{"class":53},[36,72440,72441],{"class":38,"line":19387},[36,72442,54892],{"class":53},[36,72444,72445],{"class":38,"line":19399},[36,72446,546],{"emptyLinePlaceholder":545},[36,72448,72449],{"class":38,"line":19404},[36,72450,72451],{"class":42},"      \u002F\u002F 创建新的对象\n",[36,72453,72454,72456,72459,72461],{"class":38,"line":19417},[36,72455,60718],{"class":114},[36,72457,72458],{"class":49}," obj",[36,72460,498],{"class":114},[36,72462,18091],{"class":53},[36,72464,72465,72468,72470,72472,72474],{"class":38,"line":19422},[36,72466,72467],{"class":53},"        stuID: arr.",[36,72469,54462],{"class":49},[36,72471,730],{"class":114},[36,72473,733],{"class":49},[36,72475,33970],{"class":53},[36,72477,72478],{"class":38,"line":19427},[36,72479,72480],{"class":53},"        uname: uname.value,\n",[36,72482,72483],{"class":38,"line":19432},[36,72484,72485],{"class":53},"        age: age.value,\n",[36,72487,72488],{"class":38,"line":19445},[36,72489,72490],{"class":53},"        gender: gender.value,\n",[36,72492,72493],{"class":38,"line":19450},[36,72494,72495],{"class":53},"        salary: salary.value,\n",[36,72497,72498],{"class":38,"line":35135},[36,72499,72500],{"class":53},"        city: city.value\n",[36,72502,72503],{"class":38,"line":35141},[36,72504,54892],{"class":53},[36,72506,72507],{"class":38,"line":35147},[36,72508,72509],{"class":42},"      \u002F\u002F console.log(obj);\n",[36,72511,72512],{"class":38,"line":35153},[36,72513,72514],{"class":42},"      \u002F\u002F 追加到数组里面\n",[36,72516,72517,72519,72521],{"class":38,"line":35159},[36,72518,60497],{"class":53},[36,72520,54378],{"class":4500},[36,72522,72523],{"class":53},"(obj)\n",[36,72525,72526],{"class":38,"line":35170},[36,72527,72528],{"class":42},"      \u002F\u002F console.log(arr);\n",[36,72530,72531],{"class":38,"line":35176},[36,72532,72533],{"class":42},"      \u002F\u002F 清空表单  reset重置表单\n",[36,72535,72536,72539,72541,72544],{"class":38,"line":35196},[36,72537,72538],{"class":49},"      this",[36,72540,3235],{"class":53},[36,72542,72543],{"class":4500},"reset",[36,72545,4513],{"class":53},[36,72547,72548],{"class":38,"line":35202},[36,72549,72550],{"class":42},"      \u002F\u002F 调用渲染函数\n",[36,72552,72553,72556],{"class":38,"line":35213},[36,72554,72555],{"class":4500},"      render",[36,72557,4513],{"class":53},[36,72559,72560],{"class":38,"line":35219},[36,72561,35962],{"class":53},[36,72563,72564],{"class":38,"line":35225},[36,72565,72566],{"class":42},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,72568,72569,72572,72575],{"class":38,"line":35231},[36,72570,72571],{"class":114},"    function",[36,72573,72574],{"class":4500}," render",[36,72576,13376],{"class":53},[36,72578,72579],{"class":38,"line":35237},[36,72580,72581],{"class":42},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,72583,72584,72587,72589],{"class":38,"line":35243},[36,72585,72586],{"class":53},"      tbody.innerHTML ",[36,72588,115],{"class":114},[36,72590,72591],{"class":57}," ''\n",[36,72593,72594],{"class":38,"line":35249},[36,72595,72596],{"class":42},"      \u002F\u002F 遍历数组\n",[36,72598,72599,72601,72603,72605,72607,72609,72611,72613,72615,72617,72619,72621,72623],{"class":38,"line":35255},[36,72600,54778],{"class":114},[36,72602,4196],{"class":53},[36,72604,54341],{"class":114},[36,72606,11964],{"class":53},[36,72608,115],{"class":114},[36,72610,6624],{"class":49},[36,72612,11971],{"class":53},[36,72614,1507],{"class":114},[36,72616,54459],{"class":53},[36,72618,54462],{"class":49},[36,72620,5745],{"class":53},[36,72622,4826],{"class":114},[36,72624,14965],{"class":53},[36,72626,72627,72629,72632,72634,72636,72639,72641,72644],{"class":38,"line":35275},[36,72628,63758],{"class":114},[36,72630,72631],{"class":49}," tr",[36,72633,498],{"class":114},[36,72635,56888],{"class":53},[36,72637,72638],{"class":4500},"createElement",[36,72640,54],{"class":53},[36,72642,72643],{"class":57},"'tr'",[36,72645,61],{"class":53},[36,72647,72648,72651,72653],{"class":38,"line":35281},[36,72649,72650],{"class":53},"        tr.innerHTML ",[36,72652,115],{"class":114},[36,72654,72655],{"class":57}," `\n",[36,72657,72658,72661,72663,72665,72667,72670,72673],{"class":38,"line":35297},[36,72659,72660],{"class":57},"        \u003Ctd>${",[36,72662,6411],{"class":53},[36,72664,3566],{"class":57},[36,72666,3122],{"class":53},[36,72668,72669],{"class":57},"].",[36,72671,72672],{"class":53},"stuID",[36,72674,72675],{"class":57},"}\u003C\u002Ftd>\n",[36,72677,72678,72681,72683,72685,72687,72689,72692],{"class":38,"line":35303},[36,72679,72680],{"class":57},"          \u003Ctd>${",[36,72682,6411],{"class":53},[36,72684,3566],{"class":57},[36,72686,3122],{"class":53},[36,72688,72669],{"class":57},[36,72690,72691],{"class":53},"uname",[36,72693,72675],{"class":57},[36,72695,72696,72698,72700,72702,72704,72706,72708],{"class":38,"line":35317},[36,72697,72680],{"class":57},[36,72699,6411],{"class":53},[36,72701,3566],{"class":57},[36,72703,3122],{"class":53},[36,72705,72669],{"class":57},[36,72707,2006],{"class":53},[36,72709,72675],{"class":57},[36,72711,72712,72714,72716,72718,72720,72722,72725],{"class":38,"line":35323},[36,72713,72680],{"class":57},[36,72715,6411],{"class":53},[36,72717,3566],{"class":57},[36,72719,3122],{"class":53},[36,72721,72669],{"class":57},[36,72723,72724],{"class":53},"gender",[36,72726,72675],{"class":57},[36,72728,72729,72731,72733,72735,72737,72739,72742],{"class":38,"line":35338},[36,72730,72680],{"class":57},[36,72732,6411],{"class":53},[36,72734,3566],{"class":57},[36,72736,3122],{"class":53},[36,72738,72669],{"class":57},[36,72740,72741],{"class":53},"salary",[36,72743,72675],{"class":57},[36,72745,72746,72748,72750,72752,72754,72756,72759],{"class":38,"line":35344},[36,72747,72680],{"class":57},[36,72749,6411],{"class":53},[36,72751,3566],{"class":57},[36,72753,3122],{"class":53},[36,72755,72669],{"class":57},[36,72757,72758],{"class":53},"city",[36,72760,72675],{"class":57},[36,72762,72763],{"class":38,"line":35353},[36,72764,72080],{"class":57},[36,72766,72767,72770,72772],{"class":38,"line":35359},[36,72768,72769],{"class":57},"            \u003Ca href=\"javascript:\" data-id=${",[36,72771,3122],{"class":53},[36,72773,72774],{"class":57},"}>删除\u003C\u002Fa>\n",[36,72776,72777],{"class":38,"line":35368},[36,72778,72779],{"class":57},"          \u003C\u002Ftd> \n",[36,72781,72782],{"class":38,"line":35374},[36,72783,72784],{"class":57},"          `\n",[36,72786,72787],{"class":38,"line":35380},[36,72788,72789],{"class":42},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,72791,72792,72795,72798],{"class":38,"line":35389},[36,72793,72794],{"class":53},"        tbody.",[36,72796,72797],{"class":4500},"appendChild",[36,72799,72800],{"class":53},"(tr)\n",[36,72802,72803],{"class":38,"line":35395},[36,72804,54892],{"class":53},[36,72806,72807],{"class":38,"line":35406},[36,72808,4721],{"class":53},[36,72810,72811],{"class":38,"line":35412},[36,72812,546],{"emptyLinePlaceholder":545},[36,72814,72815],{"class":38,"line":35431},[36,72816,72817],{"class":42},"    \u002F\u002F 3.删除委托\n",[36,72819,72820],{"class":38,"line":35437},[36,72821,72822],{"class":42},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,72824,72825,72828,72830,72832,72834,72836,72838,72840,72842],{"class":38,"line":35448},[36,72826,72827],{"class":53},"    tbody.",[36,72829,60303],{"class":4500},[36,72831,54],{"class":53},[36,72833,60308],{"class":57},[36,72835,14958],{"class":53},[36,72837,56940],{"class":114},[36,72839,4196],{"class":53},[36,72841,2770],{"class":1997},[36,72843,14965],{"class":53},[36,72845,72846,72848,72850,72852,72854],{"class":38,"line":35454},[36,72847,56971],{"class":114},[36,72849,69521],{"class":53},[36,72851,56977],{"class":114},[36,72853,70743],{"class":57},[36,72855,14965],{"class":53},[36,72857,72858],{"class":38,"line":35474},[36,72859,72860],{"class":42},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,72862,72863],{"class":38,"line":35490},[36,72864,72865],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,72867,72868],{"class":38,"line":35496},[36,72869,72870],{"class":42},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,72872,72873,72876,72878,72881,72883],{"class":38,"line":35510},[36,72874,72875],{"class":53},"        arr.",[36,72877,60500],{"class":4500},[36,72879,72880],{"class":53},"(e.target.dataset.id, ",[36,72882,707],{"class":49},[36,72884,61],{"class":53},[36,72886,72887],{"class":38,"line":35516},[36,72888,72889],{"class":42},"        \u002F\u002F 重新渲染一次\n",[36,72891,72892,72895],{"class":38,"line":35522},[36,72893,72894],{"class":4500},"        render",[36,72896,4513],{"class":53},[36,72898,72899],{"class":38,"line":35533},[36,72900,54892],{"class":53},[36,72902,72903],{"class":38,"line":35539},[36,72904,35962],{"class":53},[36,72906,72907,72909,72911],{"class":38,"line":35545},[36,72908,54911],{"class":53},[36,72910,54307],{"class":53794},[36,72912,53801],{"class":53},[36,72914,72915],{"class":38,"line":35555},[36,72916,546],{"emptyLinePlaceholder":545},[36,72918,72919,72921,72923],{"class":38,"line":35561},[36,72920,54279],{"class":53},[36,72922,54294],{"class":53794},[36,72924,53801],{"class":53},[36,72926,72927],{"class":38,"line":35572},[36,72928,546],{"emptyLinePlaceholder":545},[36,72930,72931,72933,72935],{"class":38,"line":35578},[36,72932,54279],{"class":53},[36,72934,53131],{"class":53794},[36,72936,53801],{"class":53},[19,72938,72939],{},"样式：",[26,72941,72945],{"className":72942,"code":72943,"language":72944,"meta":31,"style":31},"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",[33,72946,72947,72952,72962,72971,72975,72979,72984,72994,72999,73003,73008,73018,73023,73032,73036,73040,73045,73050,73060,73070,73075,73079,73084,73093,73103,73108,73118,73128,73132,73137,73145,73149,73154,73159,73164,73172,73181,73185,73190,73199,73203,73208,73217,73221,73226,73235,73244,73252,73256,73261,73270,73280,73289,73299,73305,73314,73324,73334,73338,73343,73352,73360,73370,73378,73387,73396,73406,73414,73418,73423,73432],{"__ignoreMap":31},[36,72948,72949],{"class":38,"line":39},[36,72950,72951],{"class":53},"* {\n",[36,72953,72954,72957,72959],{"class":38,"line":46},[36,72955,72956],{"class":53794},"  margin",[36,72958,53931],{"class":53},[36,72960,72961],{"class":57},"0;\n",[36,72963,72964,72967,72969],{"class":38,"line":82},[36,72965,72966],{"class":57},"  padding",[36,72968,53931],{"class":53},[36,72970,72961],{"class":57},[36,72972,72973],{"class":38,"line":88},[36,72974,4103],{"class":53},[36,72976,72977],{"class":38,"line":195},[36,72978,546],{"emptyLinePlaceholder":545},[36,72980,72981],{"class":38,"line":1517},[36,72982,72983],{"class":57},"a {\n",[36,72985,72986,72989,72991],{"class":38,"line":2421},[36,72987,72988],{"class":53794},"  text-decoration",[36,72990,53931],{"class":53},[36,72992,72993],{"class":57},"none;\n",[36,72995,72996],{"class":38,"line":2446},[36,72997,72998],{"class":57},"  color:#721c24;\n",[36,73000,73001],{"class":38,"line":2469},[36,73002,4103],{"class":53},[36,73004,73005],{"class":38,"line":2492},[36,73006,73007],{"class":57},"h1 {\n",[36,73009,73010,73013,73015],{"class":38,"line":4150},[36,73011,73012],{"class":53794},"  text-align",[36,73014,53931],{"class":53},[36,73016,73017],{"class":57},"center;\n",[36,73019,73020],{"class":38,"line":4155},[36,73021,73022],{"class":57},"  color:#333;\n",[36,73024,73025,73027,73029],{"class":38,"line":4161},[36,73026,72956],{"class":53794},[36,73028,53931],{"class":53},[36,73030,73031],{"class":57},"20px 0;\n",[36,73033,73034],{"class":38,"line":4166},[36,73035,5206],{"class":53},[36,73037,73038],{"class":38,"line":4180},[36,73039,4103],{"class":53},[36,73041,73042],{"class":38,"line":4185},[36,73043,73044],{"class":57},"table {\n",[36,73046,73047],{"class":38,"line":4191},[36,73048,73049],{"class":57},"  margin:0 auto;\n",[36,73051,73052,73055,73057],{"class":38,"line":4212},[36,73053,73054],{"class":53794},"  width",[36,73056,53931],{"class":53},[36,73058,73059],{"class":57},"800px;\n",[36,73061,73062,73065,73067],{"class":38,"line":4217},[36,73063,73064],{"class":53794},"  border-collapse",[36,73066,53931],{"class":53},[36,73068,73069],{"class":57},"collapse;\n",[36,73071,73072],{"class":38,"line":4231},[36,73073,73074],{"class":57},"  color:#004085;\n",[36,73076,73077],{"class":38,"line":4236},[36,73078,4103],{"class":53},[36,73080,73081],{"class":38,"line":4264},[36,73082,73083],{"class":57},"th {\n",[36,73085,73086,73088,73090],{"class":38,"line":4269},[36,73087,72966],{"class":53794},[36,73089,53931],{"class":53},[36,73091,73092],{"class":57},"10px;\n",[36,73094,73095,73098,73100],{"class":38,"line":4286},[36,73096,73097],{"class":53794},"  background",[36,73099,53931],{"class":53},[36,73101,73102],{"class":42},"#cfe5ff;\n",[36,73104,73105],{"class":38,"line":4291},[36,73106,73107],{"class":53},"  \n",[36,73109,73110,73113,73115],{"class":38,"line":4296},[36,73111,73112],{"class":53794},"  font-size",[36,73114,53931],{"class":53},[36,73116,73117],{"class":57},"20px;\n",[36,73119,73120,73123,73125],{"class":38,"line":4301},[36,73121,73122],{"class":53794},"  font-weight",[36,73124,53931],{"class":53},[36,73126,73127],{"class":57},"400;\n",[36,73129,73130],{"class":38,"line":4315},[36,73131,4103],{"class":53},[36,73133,73134],{"class":38,"line":4320},[36,73135,73136],{"class":57},"td,th {\n",[36,73138,73139,73142],{"class":38,"line":5109},[36,73140,73141],{"class":57},"  border:1px solid",[36,73143,73144],{"class":42}," #b8daff;\n",[36,73146,73147],{"class":38,"line":5123},[36,73148,4103],{"class":53},[36,73150,73151],{"class":38,"line":5131},[36,73152,73153],{"class":57},"td {\n",[36,73155,73156],{"class":38,"line":5136},[36,73157,73158],{"class":57},"  padding:10px;\n",[36,73160,73161],{"class":38,"line":5142},[36,73162,73163],{"class":57},"  color:#666;\n",[36,73165,73166,73168,73170],{"class":38,"line":5148},[36,73167,73012],{"class":53794},[36,73169,53931],{"class":53},[36,73171,73017],{"class":57},[36,73173,73174,73176,73178],{"class":38,"line":5153},[36,73175,73112],{"class":53794},[36,73177,53931],{"class":53},[36,73179,73180],{"class":57},"16px;\n",[36,73182,73183],{"class":38,"line":10475},[36,73184,4103],{"class":53},[36,73186,73187],{"class":38,"line":10499},[36,73188,73189],{"class":57},"tbody tr {\n",[36,73191,73192,73194,73196],{"class":38,"line":10504},[36,73193,73097],{"class":53794},[36,73195,53931],{"class":53},[36,73197,73198],{"class":42},"#fff;\n",[36,73200,73201],{"class":38,"line":10510},[36,73202,4103],{"class":53},[36,73204,73205],{"class":38,"line":10537},[36,73206,73207],{"class":57},"tbody tr:hover {\n",[36,73209,73210,73212,73214],{"class":38,"line":10542},[36,73211,73097],{"class":53794},[36,73213,53931],{"class":53},[36,73215,73216],{"class":42},"#e1ecf8;\n",[36,73218,73219],{"class":38,"line":10548},[36,73220,4103],{"class":53},[36,73222,73223],{"class":38,"line":10560},[36,73224,73225],{"class":57},".info {\n",[36,73227,73228,73230,73232],{"class":38,"line":10572},[36,73229,73054],{"class":53794},[36,73231,53931],{"class":53},[36,73233,73234],{"class":57},"900px;\n",[36,73236,73237,73239,73241],{"class":38,"line":10584},[36,73238,72956],{"class":53794},[36,73240,53931],{"class":53},[36,73242,73243],{"class":57},"50px auto;\n",[36,73245,73246,73248,73250],{"class":38,"line":12241},[36,73247,73012],{"class":53794},[36,73249,53931],{"class":53},[36,73251,73017],{"class":57},[36,73253,73254],{"class":38,"line":12266},[36,73255,4103],{"class":53},[36,73257,73258],{"class":38,"line":12289},[36,73259,73260],{"class":57},".info  input, .info select {\n",[36,73262,73263,73265,73267],{"class":38,"line":12313},[36,73264,73054],{"class":53794},[36,73266,53931],{"class":53},[36,73268,73269],{"class":57},"80px;\n",[36,73271,73272,73275,73277],{"class":38,"line":12318},[36,73273,73274],{"class":53794},"  height",[36,73276,53931],{"class":53},[36,73278,73279],{"class":57},"27px;\n",[36,73281,73282,73285,73287],{"class":38,"line":12323},[36,73283,73284],{"class":53794},"  outline",[36,73286,53931],{"class":53},[36,73288,72993],{"class":57},[36,73290,73291,73294,73296],{"class":38,"line":12328},[36,73292,73293],{"class":53794},"  border-radius",[36,73295,53931],{"class":53},[36,73297,73298],{"class":57},"5px;\n",[36,73300,73301,73303],{"class":38,"line":12337},[36,73302,73141],{"class":57},[36,73304,73144],{"class":42},[36,73306,73307,73310,73312],{"class":38,"line":12342},[36,73308,73309],{"class":53794},"  padding-left",[36,73311,53931],{"class":53},[36,73313,73298],{"class":57},[36,73315,73316,73319,73321],{"class":38,"line":12348},[36,73317,73318],{"class":53794},"  box-sizing",[36,73320,53931],{"class":53},[36,73322,73323],{"class":57},"border-box;\n",[36,73325,73326,73329,73331],{"class":38,"line":12369},[36,73327,73328],{"class":53794},"  margin-right",[36,73330,53931],{"class":53},[36,73332,73333],{"class":57},"15px;\n",[36,73335,73336],{"class":38,"line":12375},[36,73337,4103],{"class":53},[36,73339,73340],{"class":38,"line":12389},[36,73341,73342],{"class":57},".info button {\n",[36,73344,73345,73347,73349],{"class":38,"line":12395},[36,73346,73054],{"class":53794},[36,73348,53931],{"class":53},[36,73350,73351],{"class":57},"60px;\n",[36,73353,73354,73356,73358],{"class":38,"line":12422},[36,73355,73274],{"class":53794},[36,73357,53931],{"class":53},[36,73359,73279],{"class":57},[36,73361,73362,73365,73367],{"class":38,"line":12431},[36,73363,73364],{"class":53794},"  background-color",[36,73366,53931],{"class":53},[36,73368,73369],{"class":42},"#004085;\n",[36,73371,73372,73374,73376],{"class":38,"line":12437},[36,73373,73284],{"class":53794},[36,73375,53931],{"class":53},[36,73377,72993],{"class":57},[36,73379,73380,73383,73385],{"class":38,"line":12445},[36,73381,73382],{"class":53794},"  border",[36,73384,53931],{"class":53},[36,73386,72961],{"class":57},[36,73388,73389,73392,73394],{"class":38,"line":12450},[36,73390,73391],{"class":53794},"  color",[36,73393,53931],{"class":53},[36,73395,73198],{"class":42},[36,73397,73398,73401,73403],{"class":38,"line":19122},[36,73399,73400],{"class":53794},"  cursor",[36,73402,53931],{"class":53},[36,73404,73405],{"class":57},"pointer;\n",[36,73407,73408,73410,73412],{"class":38,"line":19128},[36,73409,73293],{"class":53794},[36,73411,53931],{"class":53},[36,73413,73298],{"class":57},[36,73415,73416],{"class":38,"line":19151},[36,73417,4103],{"class":53},[36,73419,73420],{"class":38,"line":19157},[36,73421,73422],{"class":57},".info .age {\n",[36,73424,73425,73427,73429],{"class":38,"line":19180},[36,73426,73054],{"class":53794},[36,73428,53931],{"class":53},[36,73430,73431],{"class":57},"50px;\n",[36,73433,73434],{"class":38,"line":19194},[36,73435,4103],{"class":53},[19,73437,73438],{},"思路：",[19,73440,73441],{},[4000,73442],{"alt":31,"src":73443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73445,73446],{},[4000,73447],{"alt":31,"src":73448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73450,73451],{},[4000,73452],{"alt":31,"src":73453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[997,73455,73457],{"id":73456},"_3315-重绘回流","3.3.15 重绘回流",[19,73459,73460],{},[4000,73461],{"alt":31,"src":73462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73464,73465],{},[4000,73466],{"alt":31,"src":73467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73469,73470],{},[4000,73471],{"alt":31,"src":73472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73474,73476],{"id":73475},"_34-bom","3.4 BOM",[19,73478,73479],{},[4000,73480],{"alt":31,"src":73481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73483,73484],{},"平时写的document省略了window而已，实际上是window.document",[19,73486,73487],{},"函数也是这样，调用的时候实际为window.fn()",[19,73489,73490],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73492,73493],{},"window大部分情况下可以省略",[997,73495,73497],{"id":73496},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73499,73500],{},"只执行一次",[19,73502,73503],{},[4000,73504],{"alt":31,"src":73505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73507,73508],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73510,73511],{},[4000,73512],{"alt":31,"src":73513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[997,73515,73517],{"id":73516},"_342-js执行机制","3.4.2 JS执行机制",[19,73519,73520],{},[4000,73521],{"alt":31,"src":73522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73524,73525],{},"两个的结果都是1111 3333 2222",[19,73527,73528],{},[4000,73529],{"alt":31,"src":73530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73532,73533],{},[4000,73534],{"alt":31,"src":73535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73537,73538],{},[4000,73539],{"alt":31,"src":73540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73542,73543],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73545,73546],{},"工作流程：",[19,73548,73549],{},[4000,73550],{"alt":31,"src":73551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73553,73554],{},[4000,73555],{"alt":31,"src":73556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73558,73559],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73561,73562],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[997,73564,73566],{"id":73565},"_343-location对象","3.4.3 location对象",[19,73568,73569],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73571,73572],{},[4000,73573],{"alt":31,"src":73574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73576,73577],{},"href可以跳转页面",[433,73579,73580],{},[436,73581,73582],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73584,73585],{},"search得到提交信息之后网站后边的地址",[19,73587,73588],{},[4000,73589],{"alt":31,"src":73590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73592,73593],{},[4000,73594],{"alt":31,"src":73595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[433,73597,73598],{"start":46},[436,73599,73600],{},"hash:这个获取单页面应用#后边的地址",[19,73602,73603],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73605,73606],{},[4000,73607],{"alt":31,"src":73608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,73610,73612],{"className":55561,"code":73611,"language":55563,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,73613,73614,73634,73654],{"__ignoreMap":31},[36,73615,73616,73618,73620,73622,73624,73627,73630,73632],{"class":38,"line":39},[36,73617,54638],{"class":53},[36,73619,2923],{"class":53794},[36,73621,63545],{"class":4500},[36,73623,115],{"class":53},[36,73625,73626],{"class":57},"\"#\u002Fmy\"",[36,73628,73629],{"class":53},">我的\u003C\u002F",[36,73631,2923],{"class":53794},[36,73633,53801],{"class":53},[36,73635,73636,73638,73640,73642,73644,73647,73650,73652],{"class":38,"line":46},[36,73637,54638],{"class":53},[36,73639,2923],{"class":53794},[36,73641,63545],{"class":4500},[36,73643,115],{"class":53},[36,73645,73646],{"class":57},"\"#\u002Ffriend\"",[36,73648,73649],{"class":53},">关注\u003C\u002F",[36,73651,2923],{"class":53794},[36,73653,53801],{"class":53},[36,73655,73656,73658,73660,73662,73664,73667,73670,73672],{"class":38,"line":82},[36,73657,54638],{"class":53},[36,73659,2923],{"class":53794},[36,73661,63545],{"class":4500},[36,73663,115],{"class":53},[36,73665,73666],{"class":57},"\"#\u002Fdownload\"",[36,73668,73669],{"class":53},">下载\u003C\u002F",[36,73671,2923],{"class":53794},[36,73673,53801],{"class":53},[19,73675,73676],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[433,73678,73679],{"start":82},[436,73680,73681,73682,73684,73685,73687],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56210,73683],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56210,73686],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[997,73689,73691],{"id":73690},"_345-navigator对象","3.4.5 navigator对象",[19,73693,73694],{},[4000,73695],{"alt":31,"src":73696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,73698,73702],{"className":73699,"code":73700,"language":73701,"meta":31,"style":31},"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",[33,73703,73704,73709,73720,73732,73737,73788,73829,73834,73847,73859,73864],{"__ignoreMap":31},[36,73705,73706],{"class":38,"line":39},[36,73707,73708],{"class":42},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,73710,73711,73713,73715,73717],{"class":38,"line":46},[36,73712,2911],{"class":114},[36,73714,54],{"class":53},[36,73716,56940],{"class":114},[36,73718,73719],{"class":53}," () { \n",[36,73721,73722,73724,73727,73729],{"class":38,"line":82},[36,73723,9319],{"class":114},[36,73725,73726],{"class":49}," userAgent",[36,73728,498],{"class":114},[36,73730,73731],{"class":53}," navigator.userAgent \n",[36,73733,73734],{"class":38,"line":88},[36,73735,73736],{"class":42},"\u002F\u002F 验证是否为Android或iPhone \n",[36,73738,73739,73741,73744,73746,73749,73752,73754,73756,73759,73761,73764,73768,73770,73772,73774,73777,73779,73781,73783,73785],{"class":38,"line":195},[36,73740,9319],{"class":114},[36,73742,73743],{"class":49}," android",[36,73745,498],{"class":114},[36,73747,73748],{"class":53}," userAgent.",[36,73750,73751],{"class":4500},"match",[36,73753,54],{"class":53},[36,73755,1065],{"class":57},[36,73757,73758],{"class":50473},"(Android);",[36,73760,3659],{"class":114},[36,73762,73763],{"class":49},"[\\s",[36,73765,73767],{"class":73766},"snhLl","\\\u002F",[36,73769,3614],{"class":49},[36,73771,121],{"class":114},[36,73773,54],{"class":50473},[36,73775,73776],{"class":49},"[\\d.]",[36,73778,121],{"class":114},[36,73780,3110],{"class":50473},[36,73782,3659],{"class":114},[36,73784,1065],{"class":57},[36,73786,73787],{"class":53},") \n",[36,73789,73790,73792,73795,73797,73799,73801,73803,73805,73808,73811,73814,73816,73818,73821,73823,73825,73827],{"class":38,"line":1517},[36,73791,9319],{"class":114},[36,73793,73794],{"class":49}," iphone",[36,73796,498],{"class":114},[36,73798,73748],{"class":53},[36,73800,73751],{"class":4500},[36,73802,54],{"class":53},[36,73804,1065],{"class":57},[36,73806,73807],{"class":50473},"(iPhone",[36,73809,73810],{"class":49},"\\s",[36,73812,73813],{"class":50473},"OS)",[36,73815,73810],{"class":49},[36,73817,54],{"class":50473},[36,73819,73820],{"class":49},"[\\d_]",[36,73822,121],{"class":114},[36,73824,3110],{"class":50473},[36,73826,1065],{"class":57},[36,73828,73787],{"class":53},[36,73830,73831],{"class":38,"line":2421},[36,73832,73833],{"class":42},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,73835,73836,73838,73841,73844],{"class":38,"line":2446},[36,73837,4069],{"class":114},[36,73839,73840],{"class":53}," (android ",[36,73842,73843],{"class":114},"||",[36,73845,73846],{"class":53}," iphone) { \n",[36,73848,73849,73852,73854,73857],{"class":38,"line":2469},[36,73850,73851],{"class":53},"location.href ",[36,73853,115],{"class":114},[36,73855,73856],{"class":57}," 'http:\u002F\u002Fm.itcast.cn'",[36,73858,5206],{"class":53},[36,73860,73861],{"class":38,"line":2492},[36,73862,73863],{"class":53},"} \n",[36,73865,73866],{"class":38,"line":4150},[36,73867,73868],{"class":53},"})()\n",[997,73870,73872],{"id":73871},"_346-histroy对象","3.4.6 histroy对象",[19,73874,73875],{},[4000,73876],{"alt":31,"src":73877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73879,73880],{},"浏览器地址的前进与后退!!!",[19,73882,73883],{},"history.back() 等效于 history.go(-1)",[19,73885,73886],{},"history.forward() 等效于 history.go(1)",[14,73888,73890],{"id":73889},"_35-本地存储","3.5 本地存储",[433,73892,73893,73896,73899],{},[436,73894,73895],{},"数据存储在用户浏览器中",[436,73897,73898],{},"设置、读取方便、甚至页面刷新不丢失数据",[436,73900,73901],{},"容量较大，sessionStorage和localStorage约 5M 左右",[997,73903,73905],{"id":73904},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73907,73908],{},"只能存储字符串",[19,73910,73911],{},[4000,73912],{"alt":31,"src":73913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73915,73916],{},[4000,73917],{"alt":31,"src":73918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73920,73921],{},"键值对要加引号,不然就会当变量来看了",[19,73923,73924],{},"localStorage.setItem('uname', 'pink')",[19,73926,73927],{},"刷新之后信息不再丢失",[19,73929,73930],{},"操作key,value会跟着变",[19,73932,73933],{},"删除只删除键就可以,即名字",[19,73935,73924],{},[19,73937,73938],{},"改:",[19,73940,73941],{},"localStorage.setItem('uname','red')",[19,73943,73944],{},"有这个键就是改,没有这个键就是改",[19,73946,73947],{},[4000,73948],{"alt":31,"src":73949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73951,73952],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73954,73955],{},[4000,73956],{"alt":31,"src":73957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73959,73960],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[997,73962,73964],{"id":73963},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73966,73967],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73969,73970],{},"特性:",[433,73972,73973,73976,73979,73982],{},[436,73974,73975],{},"生命周期为关闭浏览器窗口",[436,73977,73978],{},"在同一个窗口(页面)下数据可以共享",[436,73980,73981],{},"以键值对的形式存储使用",[436,73983,73984],{},"用法跟localStorage 基本相同",[997,73986,73988],{"id":73987},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73990,73991],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,73993,73995],{"className":55561,"code":73994,"language":55563,"meta":31,"style":31},"\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",[33,73996,73997,74005,74010,74015,74020,74025,74029,74034,74039],{"__ignoreMap":31},[36,73998,73999,74001,74003],{"class":38,"line":39},[36,74000,1507],{"class":53},[36,74002,54307],{"class":53794},[36,74004,53801],{"class":53},[36,74006,74007],{"class":38,"line":46},[36,74008,74009],{"class":53},"    const obj = {\n",[36,74011,74012],{"class":38,"line":82},[36,74013,74014],{"class":53},"      uname: 'pink老师',\n",[36,74016,74017],{"class":38,"line":88},[36,74018,74019],{"class":53},"      age: 18,\n",[36,74021,74022],{"class":38,"line":195},[36,74023,74024],{"class":53},"      gender: '女'\n",[36,74026,74027],{"class":38,"line":1517},[36,74028,4721],{"class":53},[36,74030,74031],{"class":38,"line":2421},[36,74032,74033],{"class":53},"    \u002F\u002F 存储复杂数据类型\n",[36,74035,74036],{"class":38,"line":2446},[36,74037,74038],{"class":53},"    localStorage.setItem('obj', obj)\n",[36,74040,74041,74043,74045],{"class":38,"line":2469},[36,74042,54911],{"class":53},[36,74044,54307],{"class":53794},[36,74046,53801],{"class":53},[19,74048,74049],{},[4000,74050],{"alt":31,"src":74051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,74053,74054],{},"如果获取一下数据:",[19,74056,74057],{},"log(localStorage.getItem('obj'))",[19,74059,74060],{},[4000,74061],{"alt":31,"src":74062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,74064,74065],{},"发现直接存对象是使用不了的!!!",[24515,74067,74069],{"id":74068},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,74071,74072],{},[4000,74073],{"alt":31,"src":74074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,74076,74078],{"className":53129,"code":74077,"language":53131,"meta":31,"style":31},"\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",[33,74079,74080,74088,74098,74108,74117,74125,74129,74133,74159,74178,74186,74190,74195,74200],{"__ignoreMap":31},[36,74081,74082,74084,74086],{"class":38,"line":39},[36,74083,1507],{"class":53},[36,74085,54307],{"class":53794},[36,74087,53801],{"class":53},[36,74089,74090,74092,74094,74096],{"class":38,"line":46},[36,74091,13744],{"class":114},[36,74093,72458],{"class":49},[36,74095,498],{"class":114},[36,74097,18091],{"class":53},[36,74099,74100,74103,74106],{"class":38,"line":82},[36,74101,74102],{"class":53},"      uname: ",[36,74104,74105],{"class":57},"'pink老师'",[36,74107,33970],{"class":53},[36,74109,74110,74113,74115],{"class":38,"line":88},[36,74111,74112],{"class":53},"      age: ",[36,74114,3326],{"class":49},[36,74116,33970],{"class":53},[36,74118,74119,74122],{"class":38,"line":195},[36,74120,74121],{"class":53},"      gender: ",[36,74123,74124],{"class":57},"'女'\n",[36,74126,74127],{"class":38,"line":1517},[36,74128,4721],{"class":53},[36,74130,74131],{"class":38,"line":2421},[36,74132,74033],{"class":42},[36,74134,74135,74138,74141,74143,74146,74148,74151,74153,74156],{"class":38,"line":2446},[36,74136,74137],{"class":53},"  localStorage.",[36,74139,74140],{"class":4500},"setItem",[36,74142,54],{"class":53},[36,74144,74145],{"class":57},"'obj'",[36,74147,14958],{"class":53},[36,74149,74150],{"class":49},"JSON",[36,74152,3235],{"class":53},[36,74154,74155],{"class":4500},"stringify",[36,74157,74158],{"class":53},"(obj))\n",[36,74160,74161,74164,74166,74169,74172,74174,74176],{"class":38,"line":2469},[36,74162,74163],{"class":53},"  console.",[36,74165,60737],{"class":4500},[36,74167,74168],{"class":53},"(localStorage.",[36,74170,74171],{"class":4500},"getItem",[36,74173,54],{"class":53},[36,74175,74145],{"class":57},[36,74177,625],{"class":53},[36,74179,74180,74182,74184],{"class":38,"line":2492},[36,74181,54911],{"class":53},[36,74183,54307],{"class":53794},[36,74185,53801],{"class":53},[36,74187,74188],{"class":38,"line":4150},[36,74189,73107],{"class":53},[36,74191,74192],{"class":38,"line":4155},[36,74193,74194],{"class":53},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,74196,74197],{"class":38,"line":4161},[36,74198,74199],{"class":53},"  类型是字符串的\n",[36,74201,74202],{"class":38,"line":4166},[36,74203,74204],{"class":53},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24515,74206,74208],{"id":74207},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,74210,74211],{},[4000,74212],{"alt":31,"src":74213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,74215,74216],{},[4000,74217],{"alt":31,"src":74218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,74220,74222],{"className":55561,"code":74221,"language":55563,"meta":31,"style":31},"  \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",[33,74223,74224,74232,74236,74240,74244,74248,74252,74257,74262,74267,74272,74277,74282,74287,74292],{"__ignoreMap":31},[36,74225,74226,74228,74230],{"class":38,"line":39},[36,74227,54638],{"class":53},[36,74229,54307],{"class":53794},[36,74231,53801],{"class":53},[36,74233,74234],{"class":38,"line":46},[36,74235,74009],{"class":53},[36,74237,74238],{"class":38,"line":82},[36,74239,74014],{"class":53},[36,74241,74242],{"class":38,"line":88},[36,74243,74019],{"class":53},[36,74245,74246],{"class":38,"line":195},[36,74247,74024],{"class":53},[36,74249,74250],{"class":38,"line":1517},[36,74251,4721],{"class":53},[36,74253,74254],{"class":38,"line":2421},[36,74255,74256],{"class":53},"    \u002F\u002F 1.存储复杂数据类型\n",[36,74258,74259],{"class":38,"line":2446},[36,74260,74261],{"class":53},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,74263,74264],{"class":38,"line":2469},[36,74265,74266],{"class":53},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,74268,74269],{"class":38,"line":2492},[36,74270,74271],{"class":53},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,74273,74274],{"class":38,"line":4150},[36,74275,74276],{"class":53},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,74278,74279],{"class":38,"line":4155},[36,74280,74281],{"class":53},"    \u002F\u002F 取\n",[36,74283,74284],{"class":38,"line":4161},[36,74285,74286],{"class":53},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,74288,74289],{"class":38,"line":4166},[36,74290,74291],{"class":53},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,74293,74294,74296,74298],{"class":38,"line":4180},[36,74295,54911],{"class":53},[36,74297,54307],{"class":53794},[36,74299,53801],{"class":53},[19,74301,74302],{},[4000,74303],{"alt":31,"src":74304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[997,74306,74308],{"id":74307},"_356-数组map方法","3.5.6 数组map方法",[19,74310,74311],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74313,74314],{},[4000,74315],{"alt":31,"src":74316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74318,74319],{},[4000,74320],{"alt":31,"src":74321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74323,74324,74327],{},[2839,74325,74326],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74329,74330],{},"map有返回值，但是forEach没有返回值",[19,74332,74333],{},"map是个方法。用的时候要加 ()",[19,74335,74336],{},"map返回的是一个数组",[997,74338,74340],{"id":74339},"_357-数组中join方法","3.5.7 数组中join方法",[19,74342,74343],{},[4000,74344],{"alt":31,"src":74345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74347,74348],{},"类似于python中拼接字符串一样！",[433,74350,74351,74354,74357],{},[436,74352,74353],{},"小括号为空则逗号分开",[436,74355,74356],{},"小括号为空字符串 ''，则元素之间没有分隔符",[436,74358,74359],{},"小括号用啥符号就用进行分割",[997,74361,74363],{"id":74362},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[433,74365,74366,74369,74372,74375,74378],{},[436,74367,74368],{},"记住本地时间获取快速方式：new Date().toDateString()",[436,74370,74371],{},"尽量减少DOM操作，用好map+join的渲染方式",[436,74373,74374],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[436,74376,74377],{},"return可以实现函数的结束",[436,74379,74380],{},"禁止跳转是 preventDefault() 不要忘记",[26,74382,74384],{"className":53129,"code":74383,"language":53131,"meta":31,"style":31},"\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",[33,74385,74386,74396,74410,74414,74422,74436,74456,74468,74476,74482,74492,74502,74506,74510,74516,74526,74538,74542,74546,74553,74565,74579,74589,74593,74597,74604,74611,74618,74630,74642,74652,74664,74668,74672,74679,74686,74698,74710,74720,74732,74762,74766,74770,74777,74789,74801,74825,74835,74845,74849,74853,74861,74872,74884,74896,74908,74925,74937,74949,74953,74957,74964,74976,74988,75000,75011,75029,75042,75054,75078,75089,75093,75097,75105,75115,75119,75123,75129,75141,75152,75162,75166,75170,75176,75198,75202,75206,75212,75218,75230,75240,75252,75282,75295,75312,75316,75320,75331,75353,75363,75367,75371,75384,75394,75406,75418,75430,75442,75452,75462,75472,75483,75496,75500,75508,75516,75520,75528,75541,75561,75594,75627,75660,75686,75704,75722,75730,75756,75774,75792,75810,75828,75846,75854,75862,75880,75888,75917,75925,75933,75941,75954,75966,75978,75990,76002,76014,76027,76039,76047,76055,76063,76068,76073,76077,76081,76085,76089,76093,76097,76102,76107,76112,76117,76125,76133,76141,76146,76151,76156,76161,76166,76171,76176,76181,76186,76191,76196,76201,76206,76211,76215,76220,76225,76235,76244,76248,76253,76262,76278,76320,76360,76399,76463,76471,76475,76480,76498,76506,76511,76516,76546,76552,76557,76570,76582,76594,76606,76618,76630,76642,76646,76656,76660,76665,76670,76674,76683,76687,76692,76697,76716,76721,76741,76745,76750,76754,76759,76777,76795,76813,76832,76851,76870,76875,76881,76902,76908,76917,76923,76929,76935,76962,76975,76980,76990,76996,77002,77008,77014,77019,77025,77031,77037,77043,77076,77081,77086,77091,77096,77102,77108,77114,77125,77130,77136,77143,77157,77163,77187,77192,77197,77203,77209,77230,77236,77249,77255,77261,77267,77273,77278,77284,77290,77296,77314,77328,77334,77342,77348,77370,77375,77380,77385,77390,77395,77404,77413,77418],{"__ignoreMap":31},[36,74387,74388,74390,74392,74394],{"class":38,"line":39},[36,74389,53791],{"class":53},[36,74391,53795],{"class":53794},[36,74393,53798],{"class":4500},[36,74395,53801],{"class":53},[36,74397,74398,74400,74402,74404,74406,74408],{"class":38,"line":46},[36,74399,1507],{"class":53},[36,74401,53131],{"class":53794},[36,74403,53810],{"class":4500},[36,74405,115],{"class":53},[36,74407,53815],{"class":57},[36,74409,53801],{"class":53},[36,74411,74412],{"class":38,"line":82},[36,74413,546],{"emptyLinePlaceholder":545},[36,74415,74416,74418,74420],{"class":38,"line":88},[36,74417,1507],{"class":53},[36,74419,53828],{"class":53794},[36,74421,53801],{"class":53},[36,74423,74424,74426,74428,74430,74432,74434],{"class":38,"line":195},[36,74425,54638],{"class":53},[36,74427,53838],{"class":53794},[36,74429,53841],{"class":4500},[36,74431,115],{"class":53},[36,74433,53846],{"class":57},[36,74435,53801],{"class":53},[36,74437,74438,74440,74442,74444,74446,74448,74450,74452,74454],{"class":38,"line":1517},[36,74439,54638],{"class":53},[36,74441,53838],{"class":53794},[36,74443,17440],{"class":4500},[36,74445,115],{"class":53},[36,74447,53885],{"class":57},[36,74449,53865],{"class":4500},[36,74451,115],{"class":53},[36,74453,53892],{"class":57},[36,74455,53801],{"class":53},[36,74457,74458,74460,74462,74464,74466],{"class":38,"line":2421},[36,74459,54638],{"class":53},[36,74461,53901],{"class":53794},[36,74463,53904],{"class":53},[36,74465,53901],{"class":53794},[36,74467,53801],{"class":53},[36,74469,74470,74472,74474],{"class":38,"line":2446},[36,74471,54638],{"class":53},[36,74473,2602],{"class":53794},[36,74475,53801],{"class":53},[36,74477,74478,74480],{"class":38,"line":2469},[36,74479,8930],{"class":53794},[36,74481,18091],{"class":53},[36,74483,74484,74486,74488,74490],{"class":38,"line":2492},[36,74485,57186],{"class":49},[36,74487,53931],{"class":53},[36,74489,713],{"class":49},[36,74491,3833],{"class":53},[36,74493,74494,74496,74498,74500],{"class":38,"line":4150},[36,74495,57197],{"class":49},[36,74497,53931],{"class":53},[36,74499,713],{"class":49},[36,74501,3833],{"class":53},[36,74503,74504],{"class":38,"line":4155},[36,74505,4721],{"class":53},[36,74507,74508],{"class":38,"line":4161},[36,74509,546],{"emptyLinePlaceholder":545},[36,74511,74512,74514],{"class":38,"line":4166},[36,74513,59769],{"class":53794},[36,74515,18091],{"class":53},[36,74517,74518,74520,74522,74524],{"class":38,"line":4180},[36,74519,59776],{"class":49},[36,74521,53931],{"class":53},[36,74523,54086],{"class":49},[36,74525,3833],{"class":53},[36,74527,74528,74530,74532,74534,74536],{"class":38,"line":4185},[36,74529,64565],{"class":49},[36,74531,53931],{"class":53},[36,74533,3376],{"class":49},[36,74535,53986],{"class":114},[36,74537,3833],{"class":53},[36,74539,74540],{"class":38,"line":4191},[36,74541,4721],{"class":53},[36,74543,74544],{"class":38,"line":4212},[36,74545,546],{"emptyLinePlaceholder":545},[36,74547,74548,74551],{"class":38,"line":4217},[36,74549,74550],{"class":4500},"    .info",[36,74552,18091],{"class":53},[36,74554,74555,74557,74559,74561,74563],{"class":38,"line":4231},[36,74556,57262],{"class":49},[36,74558,53931],{"class":53},[36,74560,53983],{"class":49},[36,74562,53986],{"class":114},[36,74564,3833],{"class":53},[36,74566,74567,74569,74571,74573,74575,74577],{"class":38,"line":4236},[36,74568,57197],{"class":49},[36,74570,53931],{"class":53},[36,74572,1317],{"class":49},[36,74574,53986],{"class":114},[36,74576,54050],{"class":49},[36,74578,3833],{"class":53},[36,74580,74581,74583,74585,74587],{"class":38,"line":4264},[36,74582,59776],{"class":49},[36,74584,53931],{"class":53},[36,74586,54086],{"class":49},[36,74588,3833],{"class":53},[36,74590,74591],{"class":38,"line":4269},[36,74592,4721],{"class":53},[36,74594,74595],{"class":38,"line":4286},[36,74596,546],{"emptyLinePlaceholder":545},[36,74598,74599,74602],{"class":38,"line":4291},[36,74600,74601],{"class":4500},"    .uname",[36,74603,33970],{"class":53},[36,74605,74606,74609],{"class":38,"line":4296},[36,74607,74608],{"class":4500},"    .age",[36,74610,33970],{"class":53},[36,74612,74613,74616],{"class":38,"line":4301},[36,74614,74615],{"class":4500},"    .salary",[36,74617,18091],{"class":53},[36,74619,74620,74622,74624,74626,74628],{"class":38,"line":4315},[36,74621,57262],{"class":49},[36,74623,53931],{"class":53},[36,74625,166],{"class":49},[36,74627,53986],{"class":114},[36,74629,3833],{"class":53},[36,74631,74632,74634,74636,74638,74640],{"class":38,"line":4320},[36,74633,57276],{"class":49},[36,74635,53931],{"class":53},[36,74637,3376],{"class":49},[36,74639,53986],{"class":114},[36,74641,3833],{"class":53},[36,74643,74644,74646,74648,74650],{"class":38,"line":5109},[36,74645,64268],{"class":49},[36,74647,53931],{"class":53},[36,74649,57228],{"class":49},[36,74651,3833],{"class":53},[36,74653,74654,74656,74658,74660,74662],{"class":38,"line":5123},[36,74655,64238],{"class":49},[36,74657,53931],{"class":53},[36,74659,3252],{"class":49},[36,74661,53986],{"class":114},[36,74663,3833],{"class":53},[36,74665,74666],{"class":38,"line":5131},[36,74667,4721],{"class":53},[36,74669,74670],{"class":38,"line":5136},[36,74671,546],{"emptyLinePlaceholder":545},[36,74673,74674,74677],{"class":38,"line":5142},[36,74675,74676],{"class":4500},"    .gender",[36,74678,33970],{"class":53},[36,74680,74681,74684],{"class":38,"line":5148},[36,74682,74683],{"class":4500},"    .city",[36,74685,18091],{"class":53},[36,74687,74688,74690,74692,74694,74696],{"class":38,"line":5153},[36,74689,57262],{"class":49},[36,74691,53931],{"class":53},[36,74693,166],{"class":49},[36,74695,53986],{"class":114},[36,74697,3833],{"class":53},[36,74699,74700,74702,74704,74706,74708],{"class":38,"line":10475},[36,74701,57276],{"class":49},[36,74703,53931],{"class":53},[36,74705,3501],{"class":49},[36,74707,53986],{"class":114},[36,74709,3833],{"class":53},[36,74711,74712,74714,74716,74718],{"class":38,"line":10499},[36,74713,64268],{"class":49},[36,74715,53931],{"class":53},[36,74717,57228],{"class":49},[36,74719,3833],{"class":53},[36,74721,74722,74724,74726,74728,74730],{"class":38,"line":10504},[36,74723,64238],{"class":49},[36,74725,53931],{"class":53},[36,74727,3252],{"class":49},[36,74729,53986],{"class":114},[36,74731,3833],{"class":53},[36,74733,74734,74736,74738,74740,74742,74744,74747,74749,74751,74753,74756,74758,74760],{"class":38,"line":10510},[36,74735,64465],{"class":49},[36,74737,53931],{"class":53},[36,74739,707],{"class":49},[36,74741,53986],{"class":114},[36,74743,54015],{"class":49},[36,74745,74746],{"class":49}," rgb",[36,74748,54],{"class":53},[36,74750,4259],{"class":49},[36,74752,14958],{"class":53},[36,74754,74755],{"class":49},"197",[36,74757,14958],{"class":53},[36,74759,74755],{"class":49},[36,74761,5251],{"class":53},[36,74763,74764],{"class":38,"line":10537},[36,74765,4721],{"class":53},[36,74767,74768],{"class":38,"line":10542},[36,74769,546],{"emptyLinePlaceholder":545},[36,74771,74772,74775],{"class":38,"line":10548},[36,74773,74774],{"class":53794},"    button",[36,74776,18091],{"class":53},[36,74778,74779,74781,74783,74785,74787],{"class":38,"line":10560},[36,74780,57276],{"class":49},[36,74782,53931],{"class":53},[36,74784,3501],{"class":49},[36,74786,53986],{"class":114},[36,74788,3833],{"class":53},[36,74790,74791,74793,74795,74797,74799],{"class":38,"line":10572},[36,74792,57262],{"class":49},[36,74794,53931],{"class":53},[36,74796,3162],{"class":49},[36,74798,53986],{"class":114},[36,74800,3833],{"class":53},[36,74802,74803,74805,74807,74810,74812,74814,74816,74819,74821,74823],{"class":38,"line":10584},[36,74804,57375],{"class":49},[36,74806,53931],{"class":53},[36,74808,74809],{"class":49},"rgb",[36,74811,54],{"class":53},[36,74813,3642],{"class":49},[36,74815,14958],{"class":53},[36,74817,74818],{"class":49},"187",[36,74820,14958],{"class":53},[36,74822,2983],{"class":49},[36,74824,5251],{"class":53},[36,74826,74827,74829,74831,74833],{"class":38,"line":12241},[36,74828,59906],{"class":49},[36,74830,53931],{"class":53},[36,74832,63330],{"class":49},[36,74834,3833],{"class":53},[36,74836,74837,74839,74841,74843],{"class":38,"line":12266},[36,74838,64465],{"class":49},[36,74840,53931],{"class":53},[36,74842,713],{"class":49},[36,74844,3833],{"class":53},[36,74846,74847],{"class":38,"line":12289},[36,74848,4721],{"class":53},[36,74850,74851],{"class":38,"line":12313},[36,74852,546],{"emptyLinePlaceholder":545},[36,74854,74855,74857,74859],{"class":38,"line":12318},[36,74856,74774],{"class":53794},[36,74858,54182],{"class":53794},[36,74860,18091],{"class":53},[36,74862,74863,74865,74867,74870],{"class":38,"line":12323},[36,74864,57500],{"class":49},[36,74866,53931],{"class":53},[36,74868,74869],{"class":49},"inline-block",[36,74871,3833],{"class":53},[36,74873,74874,74876,74878,74880,74882],{"class":38,"line":12328},[36,74875,57262],{"class":49},[36,74877,53931],{"class":53},[36,74879,1317],{"class":49},[36,74881,53986],{"class":114},[36,74883,3833],{"class":53},[36,74885,74886,74888,74890,74892,74894],{"class":38,"line":12337},[36,74887,57276],{"class":49},[36,74889,53931],{"class":53},[36,74891,1317],{"class":49},[36,74893,53986],{"class":114},[36,74895,3833],{"class":53},[36,74897,74898,74900,74902,74904,74906],{"class":38,"line":12342},[36,74899,59849],{"class":49},[36,74901,53931],{"class":53},[36,74903,3151],{"class":49},[36,74905,53986],{"class":114},[36,74907,3833],{"class":53},[36,74909,74910,74912,74914,74916,74918,74920,74923],{"class":38,"line":12348},[36,74911,64465],{"class":49},[36,74913,53931],{"class":53},[36,74915,707],{"class":49},[36,74917,53986],{"class":114},[36,74919,54015],{"class":49},[36,74921,74922],{"class":49}," #fff",[36,74924,3833],{"class":53},[36,74926,74927,74929,74931,74933,74935],{"class":38,"line":12369},[36,74928,57625],{"class":49},[36,74930,53931],{"class":53},[36,74932,1134],{"class":49},[36,74934,53986],{"class":114},[36,74936,3833],{"class":53},[36,74938,74939,74941,74943,74945,74947],{"class":38,"line":12375},[36,74940,64238],{"class":49},[36,74942,53931],{"class":53},[36,74944,707],{"class":49},[36,74946,53986],{"class":114},[36,74948,3833],{"class":53},[36,74950,74951],{"class":38,"line":12389},[36,74952,4721],{"class":53},[36,74954,74955],{"class":38,"line":12395},[36,74956,546],{"emptyLinePlaceholder":545},[36,74958,74959,74962],{"class":38,"line":12422},[36,74960,74961],{"class":4500},"    .total",[36,74963,18091],{"class":53},[36,74965,74966,74968,74970,74972,74974],{"class":38,"line":12431},[36,74967,57262],{"class":49},[36,74969,53931],{"class":53},[36,74971,64117],{"class":49},[36,74973,53986],{"class":114},[36,74975,3833],{"class":53},[36,74977,74978,74980,74982,74984,74986],{"class":38,"line":12437},[36,74979,57276],{"class":49},[36,74981,53931],{"class":53},[36,74983,3082],{"class":49},[36,74985,53986],{"class":114},[36,74987,3833],{"class":53},[36,74989,74990,74992,74994,74996,74998],{"class":38,"line":12445},[36,74991,59849],{"class":49},[36,74993,53931],{"class":53},[36,74995,3082],{"class":49},[36,74997,53986],{"class":114},[36,74999,3833],{"class":53},[36,75001,75002,75004,75006,75009],{"class":38,"line":12450},[36,75003,59776],{"class":49},[36,75005,53931],{"class":53},[36,75007,75008],{"class":49},"right",[36,75010,3833],{"class":53},[36,75012,75013,75015,75017,75019,75021,75023,75025,75027],{"class":38,"line":19122},[36,75014,57197],{"class":49},[36,75016,53931],{"class":53},[36,75018,3082],{"class":49},[36,75020,53986],{"class":114},[36,75022,54050],{"class":49},[36,75024,931],{"class":49},[36,75026,53986],{"class":114},[36,75028,3833],{"class":53},[36,75030,75031,75034,75036,75038,75040],{"class":38,"line":19128},[36,75032,75033],{"class":49},"      padding-right",[36,75035,53931],{"class":53},[36,75037,1317],{"class":49},[36,75039,53986],{"class":114},[36,75041,3833],{"class":53},[36,75043,75044,75046,75048,75050,75052],{"class":38,"line":19151},[36,75045,57413],{"class":49},[36,75047,53931],{"class":53},[36,75049,3201],{"class":49},[36,75051,53986],{"class":114},[36,75053,3833],{"class":53},[36,75055,75056,75058,75060,75062,75064,75067,75069,75072,75074,75076],{"class":38,"line":19157},[36,75057,57375],{"class":49},[36,75059,53931],{"class":53},[36,75061,74809],{"class":49},[36,75063,54],{"class":53},[36,75065,75066],{"class":49},"237",[36,75068,14958],{"class":53},[36,75070,75071],{"class":49},"235",[36,75073,14958],{"class":53},[36,75075,75071],{"class":49},[36,75077,5251],{"class":53},[36,75079,75080,75083,75085,75087],{"class":38,"line":19180},[36,75081,75082],{"class":49},"      box-sizing",[36,75084,53931],{"class":53},[36,75086,62994],{"class":49},[36,75088,3833],{"class":53},[36,75090,75091],{"class":38,"line":19194},[36,75092,4721],{"class":53},[36,75094,75095],{"class":38,"line":19214},[36,75096,546],{"emptyLinePlaceholder":545},[36,75098,75099,75101,75103],{"class":38,"line":19220},[36,75100,74961],{"class":4500},[36,75102,54182],{"class":53794},[36,75104,18091],{"class":53},[36,75106,75107,75109,75111,75113],{"class":38,"line":19231},[36,75108,59906],{"class":49},[36,75110,53931],{"class":53},[36,75112,59911],{"class":49},[36,75114,3833],{"class":53},[36,75116,75117],{"class":38,"line":19254},[36,75118,4721],{"class":53},[36,75120,75121],{"class":38,"line":19276},[36,75122,546],{"emptyLinePlaceholder":545},[36,75124,75125,75127],{"class":38,"line":19281},[36,75126,67511],{"class":53794},[36,75128,18091],{"class":53},[36,75130,75131,75133,75135,75137,75139],{"class":38,"line":19287},[36,75132,57262],{"class":49},[36,75134,53931],{"class":53},[36,75136,64117],{"class":49},[36,75138,53986],{"class":114},[36,75140,3833],{"class":53},[36,75142,75143,75145,75147,75150],{"class":38,"line":19301},[36,75144,57197],{"class":49},[36,75146,53931],{"class":53},[36,75148,75149],{"class":49},"auto",[36,75151,3833],{"class":53},[36,75153,75154,75156,75158,75160],{"class":38,"line":19314},[36,75155,67518],{"class":49},[36,75157,53931],{"class":53},[36,75159,67523],{"class":49},[36,75161,3833],{"class":53},[36,75163,75164],{"class":38,"line":19319},[36,75165,4721],{"class":53},[36,75167,75168],{"class":38,"line":19333},[36,75169,546],{"emptyLinePlaceholder":545},[36,75171,75172,75174],{"class":38,"line":19338},[36,75173,67603],{"class":53794},[36,75175,18091],{"class":53},[36,75177,75178,75180,75182,75184,75186,75188,75190,75192,75194,75196],{"class":38,"line":19344},[36,75179,57375],{"class":49},[36,75181,53931],{"class":53},[36,75183,74809],{"class":49},[36,75185,54],{"class":53},[36,75187,75066],{"class":49},[36,75189,14958],{"class":53},[36,75191,75071],{"class":49},[36,75193,14958],{"class":53},[36,75195,75071],{"class":49},[36,75197,5251],{"class":53},[36,75199,75200],{"class":38,"line":19349},[36,75201,4721],{"class":53},[36,75203,75204],{"class":38,"line":19363},[36,75205,546],{"emptyLinePlaceholder":545},[36,75207,75208,75210],{"class":38,"line":19368},[36,75209,67603],{"class":53794},[36,75211,33970],{"class":53},[36,75213,75214,75216],{"class":38,"line":19373},[36,75215,67669],{"class":53794},[36,75217,18091],{"class":53},[36,75219,75220,75222,75224,75226,75228],{"class":38,"line":19387},[36,75221,57276],{"class":49},[36,75223,53931],{"class":53},[36,75225,2957],{"class":49},[36,75227,53986],{"class":114},[36,75229,3833],{"class":53},[36,75231,75232,75234,75236,75238],{"class":38,"line":19399},[36,75233,59776],{"class":49},[36,75235,53931],{"class":53},[36,75237,26253],{"class":49},[36,75239,3833],{"class":53},[36,75241,75242,75244,75246,75248,75250],{"class":38,"line":19404},[36,75243,57413],{"class":49},[36,75245,53931],{"class":53},[36,75247,3226],{"class":49},[36,75249,53986],{"class":114},[36,75251,3833],{"class":53},[36,75253,75254,75256,75258,75260,75262,75264,75266,75268,75271,75273,75276,75278,75280],{"class":38,"line":19417},[36,75255,64465],{"class":49},[36,75257,53931],{"class":53},[36,75259,707],{"class":49},[36,75261,53986],{"class":114},[36,75263,54015],{"class":49},[36,75265,74746],{"class":49},[36,75267,54],{"class":53},[36,75269,75270],{"class":49},"228",[36,75272,14958],{"class":53},[36,75274,75275],{"class":49},"225",[36,75277,14958],{"class":53},[36,75279,75275],{"class":49},[36,75281,5251],{"class":53},[36,75283,75284,75287,75289,75291,75293],{"class":38,"line":19422},[36,75285,75286],{"class":49},"      padding-left",[36,75288,53931],{"class":53},[36,75290,1134],{"class":49},[36,75292,53986],{"class":114},[36,75294,3833],{"class":53},[36,75296,75297,75299,75301,75303,75306,75308,75310],{"class":38,"line":19427},[36,75298,64348],{"class":49},[36,75300,53931],{"class":53},[36,75302,30632],{"class":49},[36,75304,75305],{"class":49}," linear",[36,75307,64355],{"class":49},[36,75309,3371],{"class":114},[36,75311,3833],{"class":53},[36,75313,75314],{"class":38,"line":19432},[36,75315,4721],{"class":53},[36,75317,75318],{"class":38,"line":19445},[36,75319,546],{"emptyLinePlaceholder":545},[36,75321,75322,75325,75327,75329],{"class":38,"line":19450},[36,75323,75324],{"class":53794},"    tbody",[36,75326,72631],{"class":53794},[36,75328,63428],{"class":4500},[36,75330,18091],{"class":53},[36,75332,75333,75335,75337,75339,75341,75343,75345,75347,75349,75351],{"class":38,"line":35135},[36,75334,57375],{"class":49},[36,75336,53931],{"class":53},[36,75338,74809],{"class":49},[36,75340,54],{"class":53},[36,75342,75066],{"class":49},[36,75344,14958],{"class":53},[36,75346,75071],{"class":49},[36,75348,14958],{"class":53},[36,75350,75071],{"class":49},[36,75352,5251],{"class":53},[36,75354,75355,75357,75359,75361],{"class":38,"line":35141},[36,75356,64513],{"class":49},[36,75358,53931],{"class":53},[36,75360,64518],{"class":49},[36,75362,3833],{"class":53},[36,75364,75365],{"class":38,"line":35147},[36,75366,4721],{"class":53},[36,75368,75369],{"class":38,"line":35153},[36,75370,546],{"emptyLinePlaceholder":545},[36,75372,75373,75375,75377,75380,75382],{"class":38,"line":35159},[36,75374,75324],{"class":53794},[36,75376,72631],{"class":53794},[36,75378,75379],{"class":53794}," td",[36,75381,3936],{"class":53794},[36,75383,18091],{"class":53},[36,75385,75386,75388,75390,75392],{"class":38,"line":35170},[36,75387,57500],{"class":49},[36,75389,53931],{"class":53},[36,75391,63357],{"class":49},[36,75393,3833],{"class":53},[36,75395,75396,75398,75400,75402,75404],{"class":38,"line":35176},[36,75397,57262],{"class":49},[36,75399,53931],{"class":53},[36,75401,3582],{"class":49},[36,75403,53986],{"class":114},[36,75405,3833],{"class":53},[36,75407,75408,75410,75412,75414,75416],{"class":38,"line":35196},[36,75409,57276],{"class":49},[36,75411,53931],{"class":53},[36,75413,3501],{"class":49},[36,75415,53986],{"class":114},[36,75417,3833],{"class":53},[36,75419,75420,75422,75424,75426,75428],{"class":38,"line":35202},[36,75421,59849],{"class":49},[36,75423,53931],{"class":53},[36,75425,3501],{"class":49},[36,75427,53986],{"class":114},[36,75429,3833],{"class":53},[36,75431,75432,75434,75436,75438,75440],{"class":38,"line":35213},[36,75433,64565],{"class":49},[36,75435,53931],{"class":53},[36,75437,1188],{"class":49},[36,75439,53986],{"class":114},[36,75441,3833],{"class":53},[36,75443,75444,75446,75448,75450],{"class":38,"line":35219},[36,75445,59906],{"class":49},[36,75447,53931],{"class":53},[36,75449,63330],{"class":49},[36,75451,3833],{"class":53},[36,75453,75454,75456,75458,75460],{"class":38,"line":35225},[36,75455,59776],{"class":49},[36,75457,53931],{"class":53},[36,75459,54086],{"class":49},[36,75461,3833],{"class":53},[36,75463,75464,75466,75468,75470],{"class":38,"line":35231},[36,75465,66458],{"class":49},[36,75467,53931],{"class":53},[36,75469,57228],{"class":49},[36,75471,3833],{"class":53},[36,75473,75474,75476,75478,75481],{"class":38,"line":35237},[36,75475,57375],{"class":49},[36,75477,53931],{"class":53},[36,75479,75480],{"class":49},"orange",[36,75482,3833],{"class":53},[36,75484,75485,75487,75489,75492,75494],{"class":38,"line":35243},[36,75486,57625],{"class":49},[36,75488,53931],{"class":53},[36,75490,75491],{"class":49},"12.5",[36,75493,53986],{"class":114},[36,75495,3833],{"class":53},[36,75497,75498],{"class":38,"line":35249},[36,75499,4721],{"class":53},[36,75501,75502,75504,75506],{"class":38,"line":35255},[36,75503,54911],{"class":53},[36,75505,2602],{"class":53794},[36,75507,53801],{"class":53},[36,75509,75510,75512,75514],{"class":38,"line":35275},[36,75511,54279],{"class":53},[36,75513,53828],{"class":53794},[36,75515,53801],{"class":53},[36,75517,75518],{"class":38,"line":35281},[36,75519,546],{"emptyLinePlaceholder":545},[36,75521,75522,75524,75526],{"class":38,"line":35297},[36,75523,1507],{"class":53},[36,75525,54294],{"class":53794},[36,75527,53801],{"class":53},[36,75529,75530,75532,75534,75537,75539],{"class":38,"line":35303},[36,75531,54638],{"class":53},[36,75533,14],{"class":53794},[36,75535,75536],{"class":53},">学生就业统计表\u003C\u002F",[36,75538,14],{"class":53794},[36,75540,53801],{"class":53},[36,75542,75543,75545,75547,75549,75551,75553,75555,75557,75559],{"class":38,"line":35317},[36,75544,54638],{"class":53},[36,75546,69112],{"class":53794},[36,75548,55980],{"class":4500},[36,75550,115],{"class":53},[36,75552,65152],{"class":57},[36,75554,71557],{"class":4500},[36,75556,115],{"class":53},[36,75558,34279],{"class":57},[36,75560,53801],{"class":53},[36,75562,75563,75565,75567,75569,75571,75573,75575,75577,75579,75581,75583,75586,75588,75590,75592],{"class":38,"line":35323},[36,75564,53835],{"class":53},[36,75566,913],{"class":53794},[36,75568,56317],{"class":4500},[36,75570,115],{"class":53},[36,75572,65187],{"class":57},[36,75574,17440],{"class":4500},[36,75576,115],{"class":53},[36,75578,71583],{"class":57},[36,75580,63508],{"class":4500},[36,75582,115],{"class":53},[36,75584,75585],{"class":57},"\"姓名\"",[36,75587,55980],{"class":4500},[36,75589,115],{"class":53},[36,75591,71583],{"class":57},[36,75593,53801],{"class":53},[36,75595,75596,75598,75600,75602,75604,75606,75608,75610,75612,75614,75616,75619,75621,75623,75625],{"class":38,"line":35338},[36,75597,53835],{"class":53},[36,75599,913],{"class":53794},[36,75601,56317],{"class":4500},[36,75603,115],{"class":53},[36,75605,65187],{"class":57},[36,75607,17440],{"class":4500},[36,75609,115],{"class":53},[36,75611,71611],{"class":57},[36,75613,63508],{"class":4500},[36,75615,115],{"class":53},[36,75617,75618],{"class":57},"\"年龄\"",[36,75620,55980],{"class":4500},[36,75622,115],{"class":53},[36,75624,71611],{"class":57},[36,75626,53801],{"class":53},[36,75628,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75652,75654,75656,75658],{"class":38,"line":35344},[36,75630,53835],{"class":53},[36,75632,913],{"class":53794},[36,75634,56317],{"class":4500},[36,75636,115],{"class":53},[36,75638,65187],{"class":57},[36,75640,17440],{"class":4500},[36,75642,115],{"class":53},[36,75644,71713],{"class":57},[36,75646,63508],{"class":4500},[36,75648,115],{"class":53},[36,75650,75651],{"class":57},"\"薪资\"",[36,75653,55980],{"class":4500},[36,75655,115],{"class":53},[36,75657,71713],{"class":57},[36,75659,53801],{"class":53},[36,75661,75662,75664,75666,75668,75670,75672,75674,75676,75678,75680,75682,75684],{"class":38,"line":35353},[36,75663,53835],{"class":53},[36,75665,71631],{"class":53794},[36,75667,17440],{"class":4500},[36,75669,115],{"class":53},[36,75671,71638],{"class":57},[36,75673,17479],{"class":4500},[36,75675,115],{"class":53},[36,75677,10179],{"class":57},[36,75679,55980],{"class":4500},[36,75681,115],{"class":53},[36,75683,71638],{"class":57},[36,75685,53801],{"class":53},[36,75687,75688,75690,75692,75694,75696,75698,75700,75702],{"class":38,"line":35359},[36,75689,57725],{"class":53},[36,75691,71653],{"class":53794},[36,75693,69138],{"class":4500},[36,75695,115],{"class":53},[36,75697,12486],{"class":57},[36,75699,71662],{"class":53},[36,75701,71653],{"class":53794},[36,75703,53801],{"class":53},[36,75705,75706,75708,75710,75712,75714,75716,75718,75720],{"class":38,"line":35368},[36,75707,57725],{"class":53},[36,75709,71653],{"class":53794},[36,75711,69138],{"class":4500},[36,75713,115],{"class":53},[36,75715,12555],{"class":57},[36,75717,71681],{"class":53},[36,75719,71653],{"class":53794},[36,75721,53801],{"class":53},[36,75723,75724,75726,75728],{"class":38,"line":35374},[36,75725,54270],{"class":53},[36,75727,71631],{"class":53794},[36,75729,53801],{"class":53},[36,75731,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754],{"class":38,"line":35380},[36,75733,53835],{"class":53},[36,75735,71631],{"class":53794},[36,75737,17440],{"class":4500},[36,75739,115],{"class":53},[36,75741,71735],{"class":57},[36,75743,17479],{"class":4500},[36,75745,115],{"class":53},[36,75747,10179],{"class":57},[36,75749,55980],{"class":4500},[36,75751,115],{"class":53},[36,75753,71735],{"class":57},[36,75755,53801],{"class":53},[36,75757,75758,75760,75762,75764,75766,75768,75770,75772],{"class":38,"line":35389},[36,75759,57725],{"class":53},[36,75761,71653],{"class":53794},[36,75763,69138],{"class":4500},[36,75765,115],{"class":53},[36,75767,71756],{"class":57},[36,75769,71759],{"class":53},[36,75771,71653],{"class":53794},[36,75773,53801],{"class":53},[36,75775,75776,75778,75780,75782,75784,75786,75788,75790],{"class":38,"line":35395},[36,75777,57725],{"class":53},[36,75779,71653],{"class":53794},[36,75781,69138],{"class":4500},[36,75783,115],{"class":53},[36,75785,71776],{"class":57},[36,75787,71779],{"class":53},[36,75789,71653],{"class":53794},[36,75791,53801],{"class":53},[36,75793,75794,75796,75798,75800,75802,75804,75806,75808],{"class":38,"line":35406},[36,75795,57725],{"class":53},[36,75797,71653],{"class":53794},[36,75799,69138],{"class":4500},[36,75801,115],{"class":53},[36,75803,71796],{"class":57},[36,75805,71799],{"class":53},[36,75807,71653],{"class":53794},[36,75809,53801],{"class":53},[36,75811,75812,75814,75816,75818,75820,75822,75824,75826],{"class":38,"line":35412},[36,75813,57725],{"class":53},[36,75815,71653],{"class":53794},[36,75817,69138],{"class":4500},[36,75819,115],{"class":53},[36,75821,71816],{"class":57},[36,75823,71819],{"class":53},[36,75825,71653],{"class":53794},[36,75827,53801],{"class":53},[36,75829,75830,75832,75834,75836,75838,75840,75842,75844],{"class":38,"line":35431},[36,75831,57725],{"class":53},[36,75833,71653],{"class":53794},[36,75835,69138],{"class":4500},[36,75837,115],{"class":53},[36,75839,71836],{"class":57},[36,75841,71839],{"class":53},[36,75843,71653],{"class":53794},[36,75845,53801],{"class":53},[36,75847,75848,75850,75852],{"class":38,"line":35437},[36,75849,54270],{"class":53},[36,75851,71631],{"class":53794},[36,75853,53801],{"class":53},[36,75855,75856,75858,75860],{"class":38,"line":35448},[36,75857,53835],{"class":53},[36,75859,56380],{"class":53794},[36,75861,53801],{"class":53},[36,75863,75864,75866,75868,75871,75873,75876,75878],{"class":38,"line":35454},[36,75865,57725],{"class":53},[36,75867,36],{"class":53794},[36,75869,75870],{"class":53},">+\u003C\u002F",[36,75872,36],{"class":53794},[36,75874,75875],{"class":53},">添加\u003C\u002F",[36,75877,56380],{"class":53794},[36,75879,53801],{"class":53},[36,75881,75882,75884,75886],{"class":38,"line":35474},[36,75883,54911],{"class":53},[36,75885,69112],{"class":53794},[36,75887,53801],{"class":53},[36,75889,75890,75892,75894,75896,75898,75900,75903,75905,75908,75910,75913,75915],{"class":38,"line":35490},[36,75891,54638],{"class":53},[36,75893,54105],{"class":53794},[36,75895,55980],{"class":4500},[36,75897,115],{"class":53},[36,75899,65068],{"class":57},[36,75901,75902],{"class":53},">共有数据 \u003C",[36,75904,36],{"class":53794},[36,75906,75907],{"class":53},">0\u003C\u002F",[36,75909,36],{"class":53794},[36,75911,75912],{"class":53},"> 条\u003C\u002F",[36,75914,54105],{"class":53794},[36,75916,53801],{"class":53},[36,75918,75919,75921,75923],{"class":38,"line":35496},[36,75920,54638],{"class":53},[36,75922,206],{"class":53794},[36,75924,53801],{"class":53},[36,75926,75927,75929,75931],{"class":38,"line":35510},[36,75928,53835],{"class":53},[36,75930,209],{"class":53794},[36,75932,53801],{"class":53},[36,75934,75935,75937,75939],{"class":38,"line":35516},[36,75936,57725],{"class":53},[36,75938,212],{"class":53794},[36,75940,53801],{"class":53},[36,75942,75943,75945,75947,75950,75952],{"class":38,"line":35522},[36,75944,57793],{"class":53},[36,75946,215],{"class":53794},[36,75948,75949],{"class":53},">ID\u003C\u002F",[36,75951,215],{"class":53794},[36,75953,53801],{"class":53},[36,75955,75956,75958,75960,75962,75964],{"class":38,"line":35533},[36,75957,57793],{"class":53},[36,75959,215],{"class":53794},[36,75961,71942],{"class":53},[36,75963,215],{"class":53794},[36,75965,53801],{"class":53},[36,75967,75968,75970,75972,75974,75976],{"class":38,"line":35539},[36,75969,57793],{"class":53},[36,75971,215],{"class":53794},[36,75973,71955],{"class":53},[36,75975,215],{"class":53794},[36,75977,53801],{"class":53},[36,75979,75980,75982,75984,75986,75988],{"class":38,"line":35545},[36,75981,57793],{"class":53},[36,75983,215],{"class":53794},[36,75985,71968],{"class":53},[36,75987,215],{"class":53794},[36,75989,53801],{"class":53},[36,75991,75992,75994,75996,75998,76000],{"class":38,"line":35555},[36,75993,57793],{"class":53},[36,75995,215],{"class":53794},[36,75997,71981],{"class":53},[36,75999,215],{"class":53794},[36,76001,53801],{"class":53},[36,76003,76004,76006,76008,76010,76012],{"class":38,"line":35561},[36,76005,57793],{"class":53},[36,76007,215],{"class":53794},[36,76009,71994],{"class":53},[36,76011,215],{"class":53794},[36,76013,53801],{"class":53},[36,76015,76016,76018,76020,76023,76025],{"class":38,"line":35572},[36,76017,57793],{"class":53},[36,76019,215],{"class":53794},[36,76021,76022],{"class":53},">录入时间\u003C\u002F",[36,76024,215],{"class":53794},[36,76026,53801],{"class":53},[36,76028,76029,76031,76033,76035,76037],{"class":38,"line":35578},[36,76030,57793],{"class":53},[36,76032,215],{"class":53794},[36,76034,72007],{"class":53},[36,76036,215],{"class":53794},[36,76038,53801],{"class":53},[36,76040,76041,76043,76045],{"class":38,"line":35588},[36,76042,57898],{"class":53},[36,76044,212],{"class":53794},[36,76046,53801],{"class":53},[36,76048,76049,76051,76053],{"class":38,"line":35593},[36,76050,54270],{"class":53},[36,76052,209],{"class":53794},[36,76054,53801],{"class":53},[36,76056,76057,76059,76061],{"class":38,"line":35599},[36,76058,53835],{"class":53},[36,76060,225],{"class":53794},[36,76062,53801],{"class":53},[36,76064,76065],{"class":38,"line":35648},[36,76066,76067],{"class":42},"      \u003C!-- \u003Ctr>\n",[36,76069,76070],{"class":38,"line":35695},[36,76071,76072],{"class":42},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,76074,76075],{"class":38,"line":35700},[36,76076,76072],{"class":42},[36,76078,76079],{"class":38,"line":35706},[36,76080,76072],{"class":42},[36,76082,76083],{"class":38,"line":35725},[36,76084,76072],{"class":42},[36,76086,76087],{"class":38,"line":35731},[36,76088,76072],{"class":42},[36,76090,76091],{"class":38,"line":35751},[36,76092,76072],{"class":42},[36,76094,76095],{"class":38,"line":35757},[36,76096,76072],{"class":42},[36,76098,76099],{"class":38,"line":35763},[36,76100,76101],{"class":42},"        \u003Ctd>\n",[36,76103,76104],{"class":38,"line":35773},[36,76105,76106],{"class":42},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,76108,76109],{"class":38,"line":35778},[36,76110,76111],{"class":42},"        \u003C\u002Ftd>\n",[36,76113,76114],{"class":38,"line":35784},[36,76115,76116],{"class":42},"      \u003C\u002Ftr> -->\n",[36,76118,76119,76121,76123],{"class":38,"line":35800},[36,76120,54270],{"class":53},[36,76122,225],{"class":53794},[36,76124,53801],{"class":53},[36,76126,76127,76129,76131],{"class":38,"line":35844},[36,76128,54911],{"class":53},[36,76130,206],{"class":53794},[36,76132,53801],{"class":53},[36,76134,76135,76137,76139],{"class":38,"line":35850},[36,76136,54638],{"class":53},[36,76138,54307],{"class":53794},[36,76140,53801],{"class":53},[36,76142,76143],{"class":38,"line":35856},[36,76144,76145],{"class":42},"    \u002F\u002F const initData = [{\n",[36,76147,76148],{"class":38,"line":35862},[36,76149,76150],{"class":42},"    \u002F\u002F   unameId: 1,\n",[36,76152,76153],{"class":38,"line":35873},[36,76154,76155],{"class":42},"    \u002F\u002F   uname: '华晨宇',\n",[36,76157,76158],{"class":38,"line":35879},[36,76159,76160],{"class":42},"    \u002F\u002F   age: 22,\n",[36,76162,76163],{"class":38,"line":35885},[36,76164,76165],{"class":42},"    \u002F\u002F   salary: 12000,\n",[36,76167,76168],{"class":38,"line":35891},[36,76169,76170],{"class":42},"    \u002F\u002F   gender: '男',\n",[36,76172,76173],{"class":38,"line":35909},[36,76174,76175],{"class":42},"    \u002F\u002F   city: '北京',\n",[36,76177,76178],{"class":38,"line":35923},[36,76179,76180],{"class":42},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,76182,76183],{"class":38,"line":35932},[36,76184,76185],{"class":42},"    \u002F\u002F }]\n",[36,76187,76188],{"class":38,"line":35941},[36,76189,76190],{"class":42},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,76192,76193],{"class":38,"line":35950},[36,76194,76195],{"class":42},"    \u002F\u002F 1.渲染业务\n",[36,76197,76198],{"class":38,"line":35959},[36,76199,76200],{"class":42},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,76202,76203],{"class":38,"line":35965},[36,76204,76205],{"class":42},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,76207,76208],{"class":38,"line":35971},[36,76209,76210],{"class":42},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,76212,76213],{"class":38,"line":35979},[36,76214,546],{"emptyLinePlaceholder":545},[36,76216,76217],{"class":38,"line":35984},[36,76218,76219],{"class":42},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,76221,76222],{"class":38,"line":35990},[36,76223,76224],{"class":42},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,76226,76227,76229,76231,76233],{"class":38,"line":36001},[36,76228,13744],{"class":114},[36,76230,60185],{"class":49},[36,76232,498],{"class":114},[36,76234,54332],{"class":53},[36,76236,76237,76240,76242],{"class":38,"line":36007},[36,76238,76239],{"class":53},"    console.",[36,76241,60737],{"class":4500},[36,76243,54906],{"class":53},[36,76245,76246],{"class":38,"line":36027},[36,76247,546],{"emptyLinePlaceholder":545},[36,76249,76250],{"class":38,"line":36033},[36,76251,76252],{"class":42},"    \u002F\u002F 时间函数\n",[36,76254,76255,76257,76260],{"class":38,"line":36039},[36,76256,72571],{"class":114},[36,76258,76259],{"class":4500}," getTime",[36,76261,13376],{"class":53},[36,76263,76264,76266,76269,76271,76273,76276],{"class":38,"line":36045},[36,76265,60718],{"class":114},[36,76267,76268],{"class":49}," date",[36,76270,498],{"class":114},[36,76272,14101],{"class":114},[36,76274,76275],{"class":4500}," Date",[36,76277,4513],{"class":53},[36,76279,76280,76282,76284,76286,76289,76292,76294,76296,76298,76301,76304,76306,76308,76310,76312,76314,76316,76318],{"class":38,"line":36062},[36,76281,60718],{"class":114},[36,76283,18609],{"class":49},[36,76285,498],{"class":114},[36,76287,76288],{"class":53}," date.",[36,76290,76291],{"class":4500},"getHours",[36,76293,15573],{"class":53},[36,76295,1507],{"class":114},[36,76297,931],{"class":49},[36,76299,76300],{"class":114}," ?",[36,76302,76303],{"class":57}," '0'",[36,76305,730],{"class":114},[36,76307,76288],{"class":53},[36,76309,76291],{"class":4500},[36,76311,15573],{"class":53},[36,76313,3535],{"class":114},[36,76315,76288],{"class":53},[36,76317,76291],{"class":4500},[36,76319,4513],{"class":53},[36,76321,76322,76324,76327,76329,76331,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76354,76356,76358],{"class":38,"line":36068},[36,76323,60718],{"class":114},[36,76325,76326],{"class":49}," m",[36,76328,498],{"class":114},[36,76330,76288],{"class":53},[36,76332,76333],{"class":4500},"getMinutes",[36,76335,15573],{"class":53},[36,76337,1507],{"class":114},[36,76339,931],{"class":49},[36,76341,76300],{"class":114},[36,76343,76303],{"class":57},[36,76345,730],{"class":114},[36,76347,76288],{"class":53},[36,76349,76333],{"class":4500},[36,76351,15573],{"class":53},[36,76353,3535],{"class":114},[36,76355,76288],{"class":53},[36,76357,76333],{"class":4500},[36,76359,4513],{"class":53},[36,76361,76362,76364,76366,76368,76370,76373,76375,76377,76379,76381,76383,76385,76387,76389,76391,76393,76395,76397],{"class":38,"line":36074},[36,76363,60718],{"class":114},[36,76365,10955],{"class":49},[36,76367,498],{"class":114},[36,76369,76288],{"class":53},[36,76371,76372],{"class":4500},"getSeconds",[36,76374,15573],{"class":53},[36,76376,1507],{"class":114},[36,76378,931],{"class":49},[36,76380,76300],{"class":114},[36,76382,76303],{"class":57},[36,76384,730],{"class":114},[36,76386,76288],{"class":53},[36,76388,76372],{"class":4500},[36,76390,15573],{"class":53},[36,76392,3535],{"class":114},[36,76394,76288],{"class":53},[36,76396,76372],{"class":4500},[36,76398,4513],{"class":53},[36,76400,76401,76403,76405,76407,76409,76412,76414,76417,76419,76422,76424,76426,76429,76431,76433,76435,76437,76439,76441,76444,76446,76449,76451,76454,76456,76458,76460],{"class":38,"line":36080},[36,76402,60718],{"class":114},[36,76404,1747],{"class":49},[36,76406,498],{"class":114},[36,76408,65391],{"class":57},[36,76410,76411],{"class":53},"date",[36,76413,3235],{"class":57},[36,76415,76416],{"class":4500},"getFullYear",[36,76418,4959],{"class":57},[36,76420,76421],{"class":57},"}\u002F${",[36,76423,76411],{"class":53},[36,76425,3235],{"class":57},[36,76427,76428],{"class":4500},"getMonth",[36,76430,15573],{"class":57},[36,76432,121],{"class":114},[36,76434,733],{"class":49},[36,76436,76421],{"class":57},[36,76438,76411],{"class":53},[36,76440,3235],{"class":57},[36,76442,76443],{"class":4500},"getDate",[36,76445,4959],{"class":57},[36,76447,76448],{"class":57},"} ${",[36,76450,3096],{"class":53},[36,76452,76453],{"class":57},"}:${",[36,76455,3221],{"class":53},[36,76457,76453],{"class":57},[36,76459,3371],{"class":53},[36,76461,76462],{"class":57},"}`\n",[36,76464,76465,76468],{"class":38,"line":36086},[36,76466,76467],{"class":114},"      return",[36,76469,76470],{"class":53}," str\n",[36,76472,76473],{"class":38,"line":36092},[36,76474,4721],{"class":53},[36,76476,76477],{"class":38,"line":36119},[36,76478,76479],{"class":42},"    \u002F\u002F 渲染函数\n",[36,76481,76482,76484,76486,76488,76490,76492,76494,76496],{"class":38,"line":36143},[36,76483,13744],{"class":114},[36,76485,72234],{"class":49},[36,76487,498],{"class":114},[36,76489,56888],{"class":53},[36,76491,56891],{"class":4500},[36,76493,54],{"class":53},[36,76495,72245],{"class":57},[36,76497,61],{"class":53},[36,76499,76500,76502,76504],{"class":38,"line":36149},[36,76501,72571],{"class":114},[36,76503,72574],{"class":4500},[36,76505,13376],{"class":53},[36,76507,76508],{"class":38,"line":36155},[36,76509,76510],{"class":42},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,76512,76513],{"class":38,"line":36161},[36,76514,76515],{"class":42},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,76517,76518,76520,76523,76525,76527,76530,76532,76534,76536,76539,76541,76544],{"class":38,"line":36172},[36,76519,60718],{"class":114},[36,76521,76522],{"class":49}," trArr",[36,76524,498],{"class":114},[36,76526,54459],{"class":53},[36,76528,76529],{"class":4500},"map",[36,76531,54],{"class":53},[36,76533,56940],{"class":114},[36,76535,4196],{"class":53},[36,76537,76538],{"class":1997},"ele",[36,76540,14958],{"class":53},[36,76542,76543],{"class":1997},"index",[36,76545,14965],{"class":53},[36,76547,76548,76550],{"class":38,"line":36183},[36,76549,17273],{"class":114},[36,76551,72655],{"class":57},[36,76553,76554],{"class":38,"line":36189},[36,76555,76556],{"class":57},"      \u003Ctr>\n",[36,76558,76559,76561,76563,76565,76568],{"class":38,"line":36206},[36,76560,72660],{"class":57},[36,76562,76538],{"class":53},[36,76564,3235],{"class":57},[36,76566,76567],{"class":53},"unameId",[36,76569,72675],{"class":57},[36,76571,76572,76574,76576,76578,76580],{"class":38,"line":36229},[36,76573,72660],{"class":57},[36,76575,76538],{"class":53},[36,76577,3235],{"class":57},[36,76579,72691],{"class":53},[36,76581,72675],{"class":57},[36,76583,76584,76586,76588,76590,76592],{"class":38,"line":36252},[36,76585,72660],{"class":57},[36,76587,76538],{"class":53},[36,76589,3235],{"class":57},[36,76591,2006],{"class":53},[36,76593,72675],{"class":57},[36,76595,76596,76598,76600,76602,76604],{"class":38,"line":36258},[36,76597,72660],{"class":57},[36,76599,76538],{"class":53},[36,76601,3235],{"class":57},[36,76603,72724],{"class":53},[36,76605,72675],{"class":57},[36,76607,76608,76610,76612,76614,76616],{"class":38,"line":36263},[36,76609,72660],{"class":57},[36,76611,76538],{"class":53},[36,76613,3235],{"class":57},[36,76615,72741],{"class":53},[36,76617,72675],{"class":57},[36,76619,76620,76622,76624,76626,76628],{"class":38,"line":36272},[36,76621,72660],{"class":57},[36,76623,76538],{"class":53},[36,76625,3235],{"class":57},[36,76627,72758],{"class":53},[36,76629,72675],{"class":57},[36,76631,76632,76634,76636,76638,76640],{"class":38,"line":36282},[36,76633,72660],{"class":57},[36,76635,76538],{"class":53},[36,76637,3235],{"class":57},[36,76639,4920],{"class":53},[36,76641,72675],{"class":57},[36,76643,76644],{"class":38,"line":36288},[36,76645,76101],{"class":57},[36,76647,76648,76651,76653],{"class":38,"line":36293},[36,76649,76650],{"class":57},"          \u003Ca href=\"#\" data-id=\"${",[36,76652,76543],{"class":53},[36,76654,76655],{"class":57},"}\">删除\u003C\u002Fa>\n",[36,76657,76658],{"class":38,"line":36299},[36,76659,76111],{"class":57},[36,76661,76662],{"class":38,"line":36312},[36,76663,76664],{"class":57},"      \u003C\u002Ftr>\n",[36,76666,76667],{"class":38,"line":36318},[36,76668,76669],{"class":57},"  `\n",[36,76671,76672],{"class":38,"line":36329},[36,76673,67303],{"class":53},[36,76675,76676,76678,76680],{"class":38,"line":36340},[36,76677,60734],{"class":53},[36,76679,60737],{"class":4500},[36,76681,76682],{"class":53},"(trArr)\n",[36,76684,76685],{"class":38,"line":36359},[36,76686,546],{"emptyLinePlaceholder":545},[36,76688,76689],{"class":38,"line":52014},[36,76690,76691],{"class":42},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,76693,76694],{"class":38,"line":52019},[36,76695,76696],{"class":42},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,76698,76699,76701,76703,76706,76709,76711,76714],{"class":38,"line":52028},[36,76700,72586],{"class":53},[36,76702,115],{"class":114},[36,76704,76705],{"class":53}," trArr.",[36,76707,76708],{"class":4500},"join",[36,76710,54],{"class":53},[36,76712,76713],{"class":57},"''",[36,76715,61],{"class":53},[36,76717,76718],{"class":38,"line":52037},[36,76719,76720],{"class":42},"      \u002F\u002F 显示共有几条\n",[36,76722,76723,76725,76727,76729,76732,76735,76737,76739],{"class":38,"line":52042},[36,76724,58261],{"class":53},[36,76726,56891],{"class":4500},[36,76728,54],{"class":53},[36,76730,76731],{"class":57},"'.total span'",[36,76733,76734],{"class":53},").innerHTML ",[36,76736,115],{"class":114},[36,76738,54459],{"class":53},[36,76740,58321],{"class":49},[36,76742,76743],{"class":38,"line":52047},[36,76744,4721],{"class":53},[36,76746,76747],{"class":38,"line":52052},[36,76748,76749],{"class":42},"    \u002F\u002F render()\n",[36,76751,76752],{"class":38,"line":52065},[36,76753,546],{"emptyLinePlaceholder":545},[36,76755,76756],{"class":38,"line":52070},[36,76757,76758],{"class":42},"    \u002F\u002F 获取DOM对象\n",[36,76760,76761,76763,76765,76767,76769,76771,76773,76775],{"class":38,"line":52079},[36,76762,13744],{"class":114},[36,76764,72308],{"class":49},[36,76766,498],{"class":114},[36,76768,56888],{"class":53},[36,76770,56891],{"class":4500},[36,76772,54],{"class":53},[36,76774,72319],{"class":57},[36,76776,61],{"class":53},[36,76778,76779,76781,76783,76785,76787,76789,76791,76793],{"class":38,"line":52088},[36,76780,13744],{"class":114},[36,76782,72135],{"class":49},[36,76784,498],{"class":114},[36,76786,56888],{"class":53},[36,76788,56891],{"class":4500},[36,76790,54],{"class":53},[36,76792,72146],{"class":57},[36,76794,61],{"class":53},[36,76796,76797,76799,76801,76803,76805,76807,76809,76811],{"class":38,"line":52105},[36,76798,13744],{"class":114},[36,76800,18208],{"class":49},[36,76802,498],{"class":114},[36,76804,56888],{"class":53},[36,76806,56891],{"class":4500},[36,76808,54],{"class":53},[36,76810,72165],{"class":57},[36,76812,61],{"class":53},[36,76814,76816,76818,76820,76822,76824,76826,76828,76830],{"class":38,"line":76815},231,[36,76817,13744],{"class":114},[36,76819,72194],{"class":49},[36,76821,498],{"class":114},[36,76823,56888],{"class":53},[36,76825,56891],{"class":4500},[36,76827,54],{"class":53},[36,76829,72205],{"class":57},[36,76831,61],{"class":53},[36,76833,76835,76837,76839,76841,76843,76845,76847,76849],{"class":38,"line":76834},232,[36,76836,13744],{"class":114},[36,76838,72174],{"class":49},[36,76840,498],{"class":114},[36,76842,56888],{"class":53},[36,76844,56891],{"class":4500},[36,76846,54],{"class":53},[36,76848,72185],{"class":57},[36,76850,61],{"class":53},[36,76852,76854,76856,76858,76860,76862,76864,76866,76868],{"class":38,"line":76853},233,[36,76855,13744],{"class":114},[36,76857,72214],{"class":49},[36,76859,498],{"class":114},[36,76861,56888],{"class":53},[36,76863,56891],{"class":4500},[36,76865,54],{"class":53},[36,76867,72225],{"class":57},[36,76869,61],{"class":53},[36,76871,76873],{"class":38,"line":76872},234,[36,76874,546],{"emptyLinePlaceholder":545},[36,76876,76878],{"class":38,"line":76877},235,[36,76879,76880],{"class":42},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,76882,76884,76886,76888,76890,76892,76894,76896,76898,76900],{"class":38,"line":76883},236,[36,76885,72326],{"class":53},[36,76887,60303],{"class":4500},[36,76889,54],{"class":53},[36,76891,72333],{"class":57},[36,76893,14958],{"class":53},[36,76895,56940],{"class":114},[36,76897,4196],{"class":53},[36,76899,2770],{"class":1997},[36,76901,14965],{"class":53},[36,76903,76905],{"class":38,"line":76904},237,[36,76906,76907],{"class":42},"      \u002F\u002F 禁止浏览器跳转\n",[36,76909,76911,76913,76915],{"class":38,"line":76910},238,[36,76912,72353],{"class":53},[36,76914,72356],{"class":4500},[36,76916,4513],{"class":53},[36,76918,76920],{"class":38,"line":76919},239,[36,76921,76922],{"class":42},"      \u002F\u002F 非空判断\n",[36,76924,76926],{"class":38,"line":76925},240,[36,76927,76928],{"class":42},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,76930,76932],{"class":38,"line":76931},241,[36,76933,76934],{"class":42},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,76936,76938,76940,76942,76944,76947,76949,76952,76955,76957,76959],{"class":38,"line":76937},242,[36,76939,56971],{"class":114},[36,76941,4196],{"class":53},[36,76943,2911],{"class":114},[36,76945,76946],{"class":53},"uname.value ",[36,76948,73843],{"class":114},[36,76950,76951],{"class":114}," !",[36,76953,76954],{"class":53},"age.value ",[36,76956,73843],{"class":114},[36,76958,76951],{"class":114},[36,76960,76961],{"class":53},"salary.value) {\n",[36,76963,76965,76967,76969,76971,76973],{"class":38,"line":76964},243,[36,76966,17273],{"class":114},[36,76968,72427],{"class":4500},[36,76970,54],{"class":53},[36,76972,72432],{"class":57},[36,76974,61],{"class":53},[36,76976,76978],{"class":38,"line":76977},244,[36,76979,54892],{"class":53},[36,76981,76983,76985,76987],{"class":38,"line":76982},245,[36,76984,60497],{"class":53},[36,76986,54378],{"class":4500},[36,76988,76989],{"class":53},"({\n",[36,76991,76993],{"class":38,"line":76992},246,[36,76994,76995],{"class":42},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,76997,76999],{"class":38,"line":76998},247,[36,77000,77001],{"class":42},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,77003,77005],{"class":38,"line":77004},248,[36,77006,77007],{"class":42},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,77009,77011],{"class":38,"line":77010},249,[36,77012,77013],{"class":42},"        \u002F\u002F unameId: arr.length + 1,\n",[36,77015,77017],{"class":38,"line":77016},250,[36,77018,546],{"emptyLinePlaceholder":545},[36,77020,77022],{"class":38,"line":77021},251,[36,77023,77024],{"class":42},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,77026,77028],{"class":38,"line":77027},252,[36,77029,77030],{"class":42},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,77032,77034],{"class":38,"line":77033},253,[36,77035,77036],{"class":42},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,77038,77040],{"class":38,"line":77039},254,[36,77041,77042],{"class":42},"        \u002F\u002F 0当假看\n",[36,77044,77046,77049,77051,77053,77056,77058,77060,77062,77065,77067,77069,77072,77074],{"class":38,"line":77045},255,[36,77047,77048],{"class":53},"        unameId: arr.",[36,77050,54462],{"class":49},[36,77052,76300],{"class":114},[36,77054,77055],{"class":53}," arr[arr.",[36,77057,54462],{"class":49},[36,77059,54765],{"class":114},[36,77061,733],{"class":49},[36,77063,77064],{"class":53},"].unameId ",[36,77066,121],{"class":114},[36,77068,733],{"class":49},[36,77070,77071],{"class":114}," :",[36,77073,733],{"class":49},[36,77075,33970],{"class":53},[36,77077,77079],{"class":38,"line":77078},256,[36,77080,72480],{"class":53},[36,77082,77084],{"class":38,"line":77083},257,[36,77085,72485],{"class":53},[36,77087,77089],{"class":38,"line":77088},258,[36,77090,72495],{"class":53},[36,77092,77094],{"class":38,"line":77093},259,[36,77095,72490],{"class":53},[36,77097,77099],{"class":38,"line":77098},260,[36,77100,77101],{"class":53},"        city: city.value,\n",[36,77103,77105],{"class":38,"line":77104},261,[36,77106,77107],{"class":42},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,77109,77111],{"class":38,"line":77110},262,[36,77112,77113],{"class":42},"        \u002F\u002F time: new Date().toDateString()\n",[36,77115,77117,77120,77123],{"class":38,"line":77116},263,[36,77118,77119],{"class":53},"        time: ",[36,77121,77122],{"class":4500},"getTime",[36,77124,4513],{"class":53},[36,77126,77128],{"class":38,"line":77127},264,[36,77129,67303],{"class":53},[36,77131,77133],{"class":38,"line":77132},265,[36,77134,77135],{"class":42},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,77137,77139,77141],{"class":38,"line":77138},266,[36,77140,72555],{"class":4500},[36,77142,4513],{"class":53},[36,77144,77146,77148,77150,77152,77154],{"class":38,"line":77145},267,[36,77147,72538],{"class":49},[36,77149,3235],{"class":53},[36,77151,72543],{"class":4500},[36,77153,15573],{"class":53},[36,77155,77156],{"class":42},"\u002F\u002F重置表单\n",[36,77158,77160],{"class":38,"line":77159},268,[36,77161,77162],{"class":42},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,77164,77166,77169,77171,77173,77176,77178,77180,77182,77184],{"class":38,"line":77165},269,[36,77167,77168],{"class":53},"      localStorage.",[36,77170,74140],{"class":4500},[36,77172,54],{"class":53},[36,77174,77175],{"class":57},"'data'",[36,77177,14958],{"class":53},[36,77179,74150],{"class":49},[36,77181,3235],{"class":53},[36,77183,74155],{"class":4500},[36,77185,77186],{"class":53},"(arr))\n",[36,77188,77190],{"class":38,"line":77189},270,[36,77191,35962],{"class":53},[36,77193,77195],{"class":38,"line":77194},271,[36,77196,546],{"emptyLinePlaceholder":545},[36,77198,77200],{"class":38,"line":77199},272,[36,77201,77202],{"class":42},"    \u002F\u002F 3.删除业务\n",[36,77204,77206],{"class":38,"line":77205},273,[36,77207,77208],{"class":42},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,77210,77212,77214,77216,77218,77220,77222,77224,77226,77228],{"class":38,"line":77211},274,[36,77213,72827],{"class":53},[36,77215,60303],{"class":4500},[36,77217,54],{"class":53},[36,77219,60308],{"class":57},[36,77221,14958],{"class":53},[36,77223,56940],{"class":114},[36,77225,4196],{"class":53},[36,77227,2770],{"class":1997},[36,77229,14965],{"class":53},[36,77231,77233],{"class":38,"line":77232},275,[36,77234,77235],{"class":42},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,77237,77239,77241,77243,77245,77247],{"class":38,"line":77238},276,[36,77240,56971],{"class":114},[36,77242,69521],{"class":53},[36,77244,56977],{"class":114},[36,77246,70743],{"class":57},[36,77248,14965],{"class":53},[36,77250,77252],{"class":38,"line":77251},277,[36,77253,77254],{"class":42},"        \u002F\u002F alert(1)\n",[36,77256,77258],{"class":38,"line":77257},278,[36,77259,77260],{"class":42},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,77262,77264],{"class":38,"line":77263},279,[36,77265,77266],{"class":42},"        \u002F\u002F console.log(e.target)\n",[36,77268,77270],{"class":38,"line":77269},280,[36,77271,77272],{"class":42},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,77274,77276],{"class":38,"line":77275},281,[36,77277,546],{"emptyLinePlaceholder":545},[36,77279,77281],{"class":38,"line":77280},282,[36,77282,77283],{"class":42},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,77285,77287],{"class":38,"line":77286},283,[36,77288,77289],{"class":42},"        \u002F\u002F confirm()为确认框\n",[36,77291,77293],{"class":38,"line":77292},284,[36,77294,77295],{"class":42},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,77297,77299,77301,77303,77306,77308,77311],{"class":38,"line":77298},285,[36,77300,5029],{"class":114},[36,77302,4196],{"class":53},[36,77304,77305],{"class":4500},"confirm",[36,77307,54],{"class":53},[36,77309,77310],{"class":57},"'您确定要删除这条数据吗？'",[36,77312,77313],{"class":53},")) {\n",[36,77315,77317,77320,77322,77324,77326],{"class":38,"line":77316},286,[36,77318,77319],{"class":53},"          arr.",[36,77321,60500],{"class":4500},[36,77323,72880],{"class":53},[36,77325,707],{"class":49},[36,77327,61],{"class":53},[36,77329,77331],{"class":38,"line":77330},287,[36,77332,77333],{"class":42},"          \u002F\u002F 3.4 重新渲染页面\n",[36,77335,77337,77340],{"class":38,"line":77336},288,[36,77338,77339],{"class":4500},"          render",[36,77341,4513],{"class":53},[36,77343,77345],{"class":38,"line":77344},289,[36,77346,77347],{"class":42},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,77349,77351,77354,77356,77358,77360,77362,77364,77366,77368],{"class":38,"line":77350},290,[36,77352,77353],{"class":53},"          localStorage.",[36,77355,74140],{"class":4500},[36,77357,54],{"class":53},[36,77359,77175],{"class":57},[36,77361,14958],{"class":53},[36,77363,74150],{"class":49},[36,77365,3235],{"class":53},[36,77367,74155],{"class":4500},[36,77369,77186],{"class":53},[36,77371,77373],{"class":38,"line":77372},291,[36,77374,5061],{"class":53},[36,77376,77378],{"class":38,"line":77377},292,[36,77379,54892],{"class":53},[36,77381,77383],{"class":38,"line":77382},293,[36,77384,546],{"emptyLinePlaceholder":545},[36,77386,77388],{"class":38,"line":77387},294,[36,77389,35962],{"class":53},[36,77391,77393],{"class":38,"line":77392},295,[36,77394,546],{"emptyLinePlaceholder":545},[36,77396,77398,77400,77402],{"class":38,"line":77397},296,[36,77399,54911],{"class":53},[36,77401,54307],{"class":53794},[36,77403,53801],{"class":53},[36,77405,77407,77409,77411],{"class":38,"line":77406},297,[36,77408,54279],{"class":53},[36,77410,54294],{"class":53794},[36,77412,53801],{"class":53},[36,77414,77416],{"class":38,"line":77415},298,[36,77417,546],{"emptyLinePlaceholder":545},[36,77419,77421,77423,77425],{"class":38,"line":77420},299,[36,77422,54279],{"class":53},[36,77424,53131],{"class":53794},[36,77426,53801],{"class":53},[14,77428,77430],{"id":77429},"_36-正则表达式","3.6 正则表达式",[19,77432,77433],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77435,77436],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77438,77439],{},"正则表达式的作用：",[3680,77441,77442,77449,77455],{},[436,77443,77444,77445,77448],{},"表单验证（ ",[2839,77446,77447],{},"匹配"," ）",[436,77450,77451,77452,77448],{},"过滤敏感词（ ",[2839,77453,77454],{},"替换",[436,77456,77457,77458,77448],{},"字符串中提取我们想要的部分（ ",[2839,77459,77460],{},"提取",[997,77462,77464],{"id":77463},"_361-语法","3.6.1 语法",[19,77466,77467],{},"正则表达式使用步骤：",[433,77469,77470,77473],{},[436,77471,77472],{},"定义规则",[436,77474,77475],{},"查找是否匹配",[19,77477,77478],{},"正则表达式里边不需要写引号",[19,77480,77481],{},[4000,77482],{"alt":31,"src":77483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77485,77486],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77488,77489],{},"reg.test(str)",[19,77491,77492],{},[4000,77493],{"alt":31,"src":77494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77496,77497],{},[4000,77498],{"alt":31,"src":77499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[997,77501,77503],{"id":77502},"_362-元字符","3.6.2 元字符",[433,77505,77506,77509,77512,77515,77522],{},[436,77507,77508],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[436,77510,77511],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[436,77513,77514],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[436,77516,77517,77518],{},"正则验证工具：",[2923,77519,77520],{"href":77520,"rel":77521},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26381],[436,77523,77524],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24515,77526,77528],{"id":77527},"_3621-边界符","3.6.2.1 边界符",[19,77530,77531],{},[4000,77532],{"alt":31,"src":77533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77535,77536],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77538,77539],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77541,77542],{},"只匹配一次",[19,77544,77545],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24515,77547,77549],{"id":77548},"_3622-量词","3.6.2.2 量词",[19,77551,77552],{},[4000,77553],{"alt":31,"src":77554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77556,77557],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24515,77559,77561],{"id":77560},"_3623-元字符","3.6.2.3 元字符",[19,77563,77564],{},[4000,77565],{"alt":31,"src":77566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77568,77569],{},"匹配的是a或b或c []只选一个",[19,77571,77572],{},[4000,77573],{"alt":31,"src":77574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77576,77577],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77579,77580],{},[4000,77581],{"alt":31,"src":77582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77584,77585],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77587,77588],{},[4000,77589],{"alt":31,"src":77590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,77592,77594],{"className":53129,"code":77593,"language":53131,"meta":31,"style":31},"\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",[33,77595,77596,77606,77620,77624,77632,77646,77666,77678,77686,77690,77698,77706,77711,77742,77769,77797,77801,77806,77834,77865,77870,77875,77906,77938,77970,77974,77979,78010,78040,78070,78074,78079,78110,78141,78171,78201,78205,78210,78243,78247,78252,78283,78314,78318,78323,78354,78384,78415,78419,78424,78456,78487,78518,78545,78576,78608,78641,78672,78703,78735,78766,78774,78782,78786],{"__ignoreMap":31},[36,77597,77598,77600,77602,77604],{"class":38,"line":39},[36,77599,53791],{"class":53},[36,77601,53795],{"class":53794},[36,77603,53798],{"class":4500},[36,77605,53801],{"class":53},[36,77607,77608,77610,77612,77614,77616,77618],{"class":38,"line":46},[36,77609,1507],{"class":53},[36,77611,53131],{"class":53794},[36,77613,53810],{"class":4500},[36,77615,115],{"class":53},[36,77617,53815],{"class":57},[36,77619,53801],{"class":53},[36,77621,77622],{"class":38,"line":82},[36,77623,546],{"emptyLinePlaceholder":545},[36,77625,77626,77628,77630],{"class":38,"line":88},[36,77627,1507],{"class":53},[36,77629,53828],{"class":53794},[36,77631,53801],{"class":53},[36,77633,77634,77636,77638,77640,77642,77644],{"class":38,"line":195},[36,77635,54638],{"class":53},[36,77637,53838],{"class":53794},[36,77639,53841],{"class":4500},[36,77641,115],{"class":53},[36,77643,53846],{"class":57},[36,77645,53801],{"class":53},[36,77647,77648,77650,77652,77654,77656,77658,77660,77662,77664],{"class":38,"line":1517},[36,77649,54638],{"class":53},[36,77651,53838],{"class":53794},[36,77653,17440],{"class":4500},[36,77655,115],{"class":53},[36,77657,53885],{"class":57},[36,77659,53865],{"class":4500},[36,77661,115],{"class":53},[36,77663,53892],{"class":57},[36,77665,53801],{"class":53},[36,77667,77668,77670,77672,77674,77676],{"class":38,"line":2421},[36,77669,54638],{"class":53},[36,77671,53901],{"class":53794},[36,77673,53904],{"class":53},[36,77675,53901],{"class":53794},[36,77677,53801],{"class":53},[36,77679,77680,77682,77684],{"class":38,"line":2446},[36,77681,54279],{"class":53},[36,77683,53828],{"class":53794},[36,77685,53801],{"class":53},[36,77687,77688],{"class":38,"line":2469},[36,77689,546],{"emptyLinePlaceholder":545},[36,77691,77692,77694,77696],{"class":38,"line":2492},[36,77693,1507],{"class":53},[36,77695,54294],{"class":53794},[36,77697,53801],{"class":53},[36,77699,77700,77702,77704],{"class":38,"line":4150},[36,77701,54638],{"class":53},[36,77703,54307],{"class":53794},[36,77705,53801],{"class":53},[36,77707,77708],{"class":38,"line":4155},[36,77709,77710],{"class":42},"    \u002F\u002F 元字符中\n",[36,77712,77713,77715,77717,77719,77721,77724,77726,77728,77731,77733,77736,77739],{"class":38,"line":4161},[36,77714,76239],{"class":53},[36,77716,60737],{"class":4500},[36,77718,54],{"class":53},[36,77720,1065],{"class":57},[36,77722,77723],{"class":50473},"哈",[36,77725,1065],{"class":57},[36,77727,3235],{"class":53},[36,77729,77730],{"class":4500},"test",[36,77732,54],{"class":53},[36,77734,77735],{"class":57},"'哈'",[36,77737,77738],{"class":53},"))  ",[36,77740,77741],{"class":42},"\u002F\u002Ftrue\n",[36,77743,77744,77746,77748,77750,77752,77754,77756,77758,77760,77762,77765,77767],{"class":38,"line":4166},[36,77745,76239],{"class":53},[36,77747,60737],{"class":4500},[36,77749,54],{"class":53},[36,77751,1065],{"class":57},[36,77753,77723],{"class":50473},[36,77755,1065],{"class":57},[36,77757,3235],{"class":53},[36,77759,77730],{"class":4500},[36,77761,54],{"class":53},[36,77763,77764],{"class":57},"'哈哈'",[36,77766,77738],{"class":53},[36,77768,77741],{"class":42},[36,77770,77771,77773,77775,77777,77779,77781,77783,77785,77787,77789,77792,77795],{"class":38,"line":4180},[36,77772,76239],{"class":53},[36,77774,60737],{"class":4500},[36,77776,54],{"class":53},[36,77778,1065],{"class":57},[36,77780,77723],{"class":50473},[36,77782,1065],{"class":57},[36,77784,3235],{"class":53},[36,77786,77730],{"class":4500},[36,77788,54],{"class":53},[36,77790,77791],{"class":57},"'二哈'",[36,77793,77794],{"class":53},"))   ",[36,77796,77741],{"class":42},[36,77798,77799],{"class":38,"line":4185},[36,77800,546],{"emptyLinePlaceholder":545},[36,77802,77803],{"class":38,"line":4191},[36,77804,77805],{"class":42},"    \u002F\u002F 1.边界符\n",[36,77807,77808,77810,77812,77814,77816,77818,77820,77822,77824,77826,77828,77830,77832],{"class":38,"line":4212},[36,77809,76239],{"class":53},[36,77811,60737],{"class":4500},[36,77813,54],{"class":53},[36,77815,1065],{"class":57},[36,77817,3639],{"class":114},[36,77819,77723],{"class":50473},[36,77821,1065],{"class":57},[36,77823,3235],{"class":53},[36,77825,77730],{"class":4500},[36,77827,54],{"class":53},[36,77829,77735],{"class":57},[36,77831,77738],{"class":53},[36,77833,77741],{"class":42},[36,77835,77836,77838,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77860,77862],{"class":38,"line":4217},[36,77837,76239],{"class":53},[36,77839,60737],{"class":4500},[36,77841,54],{"class":53},[36,77843,1065],{"class":57},[36,77845,3639],{"class":114},[36,77847,77723],{"class":50473},[36,77849,2986],{"class":114},[36,77851,1065],{"class":57},[36,77853,3235],{"class":53},[36,77855,77730],{"class":4500},[36,77857,54],{"class":53},[36,77859,77764],{"class":57},[36,77861,77738],{"class":53},[36,77863,77864],{"class":42},"\u002F\u002Ffalse\n",[36,77866,77867],{"class":38,"line":4231},[36,77868,77869],{"class":42},"    \u002F\u002F 2.量词\n",[36,77871,77872],{"class":38,"line":4236},[36,77873,77874],{"class":42},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,77876,77877,77879,77881,77883,77885,77887,77889,77892,77894,77896,77898,77900,77902,77904],{"class":38,"line":4264},[36,77878,76239],{"class":53},[36,77880,60737],{"class":4500},[36,77882,54],{"class":53},[36,77884,1065],{"class":57},[36,77886,3639],{"class":114},[36,77888,77723],{"class":50473},[36,77890,77891],{"class":114},"*$",[36,77893,1065],{"class":57},[36,77895,3235],{"class":53},[36,77897,77730],{"class":4500},[36,77899,54],{"class":53},[36,77901,77764],{"class":57},[36,77903,77738],{"class":53},[36,77905,77741],{"class":42},[36,77907,77908,77910,77912,77914,77916,77918,77920,77922,77924,77926,77928,77930,77933,77935],{"class":38,"line":4269},[36,77909,76239],{"class":53},[36,77911,60737],{"class":4500},[36,77913,54],{"class":53},[36,77915,1065],{"class":57},[36,77917,3639],{"class":114},[36,77919,77723],{"class":50473},[36,77921,77891],{"class":114},[36,77923,1065],{"class":57},[36,77925,3235],{"class":53},[36,77927,77730],{"class":4500},[36,77929,54],{"class":53},[36,77931,77932],{"class":57},"'二哈好傻'",[36,77934,77738],{"class":53},[36,77936,77937],{"class":42},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,77939,77940,77942,77944,77946,77948,77950,77952,77954,77956,77958,77960,77962,77965,77967],{"class":38,"line":4286},[36,77941,76239],{"class":53},[36,77943,60737],{"class":4500},[36,77945,54],{"class":53},[36,77947,1065],{"class":57},[36,77949,3639],{"class":114},[36,77951,77723],{"class":50473},[36,77953,77891],{"class":114},[36,77955,1065],{"class":57},[36,77957,3235],{"class":53},[36,77959,77730],{"class":4500},[36,77961,54],{"class":53},[36,77963,77964],{"class":57},"'哈好哈'",[36,77966,77794],{"class":53},[36,77968,77969],{"class":42},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,77971,77972],{"class":38,"line":4291},[36,77973,546],{"emptyLinePlaceholder":545},[36,77975,77976],{"class":38,"line":4296},[36,77977,77978],{"class":42},"    \u002F\u002F +类似于>=1\n",[36,77980,77981,77983,77985,77987,77989,77991,77993,77996,77998,78000,78002,78004,78006,78008],{"class":38,"line":4301},[36,77982,76239],{"class":53},[36,77984,60737],{"class":4500},[36,77986,54],{"class":53},[36,77988,1065],{"class":57},[36,77990,3639],{"class":114},[36,77992,77723],{"class":50473},[36,77994,77995],{"class":114},"+$",[36,77997,1065],{"class":57},[36,77999,3235],{"class":53},[36,78001,77730],{"class":4500},[36,78003,54],{"class":53},[36,78005,77764],{"class":57},[36,78007,77738],{"class":53},[36,78009,77741],{"class":42},[36,78011,78012,78014,78016,78018,78020,78022,78024,78026,78028,78030,78032,78034,78036,78038],{"class":38,"line":4315},[36,78013,76239],{"class":53},[36,78015,60737],{"class":4500},[36,78017,54],{"class":53},[36,78019,1065],{"class":57},[36,78021,3639],{"class":114},[36,78023,77723],{"class":50473},[36,78025,77995],{"class":114},[36,78027,1065],{"class":57},[36,78029,3235],{"class":53},[36,78031,77730],{"class":4500},[36,78033,54],{"class":53},[36,78035,77932],{"class":57},[36,78037,77738],{"class":53},[36,78039,77937],{"class":42},[36,78041,78042,78044,78046,78048,78050,78052,78054,78056,78058,78060,78062,78064,78066,78068],{"class":38,"line":4320},[36,78043,76239],{"class":53},[36,78045,60737],{"class":4500},[36,78047,54],{"class":53},[36,78049,1065],{"class":57},[36,78051,3639],{"class":114},[36,78053,77723],{"class":50473},[36,78055,77995],{"class":114},[36,78057,1065],{"class":57},[36,78059,3235],{"class":53},[36,78061,77730],{"class":4500},[36,78063,54],{"class":53},[36,78065,77964],{"class":57},[36,78067,77794],{"class":53},[36,78069,77864],{"class":42},[36,78071,78072],{"class":38,"line":5109},[36,78073,546],{"emptyLinePlaceholder":545},[36,78075,78076],{"class":38,"line":5123},[36,78077,78078],{"class":42},"    \u002F\u002F ?类似于0次或一次\n",[36,78080,78081,78083,78085,78087,78089,78091,78094,78096,78098,78100,78102,78104,78106,78108],{"class":38,"line":5131},[36,78082,76239],{"class":53},[36,78084,60737],{"class":4500},[36,78086,54],{"class":53},[36,78088,1065],{"class":57},[36,78090,3639],{"class":114},[36,78092,78093],{"class":50473},"哈？",[36,78095,2986],{"class":114},[36,78097,1065],{"class":57},[36,78099,3235],{"class":53},[36,78101,77730],{"class":4500},[36,78103,54],{"class":53},[36,78105,76713],{"class":57},[36,78107,77794],{"class":53},[36,78109,77741],{"class":42},[36,78111,78112,78114,78116,78118,78120,78122,78124,78127,78129,78131,78133,78135,78137,78139],{"class":38,"line":5136},[36,78113,76239],{"class":53},[36,78115,60737],{"class":4500},[36,78117,54],{"class":53},[36,78119,1065],{"class":57},[36,78121,3639],{"class":114},[36,78123,77723],{"class":50473},[36,78125,78126],{"class":114},"?$",[36,78128,1065],{"class":57},[36,78130,3235],{"class":53},[36,78132,77730],{"class":4500},[36,78134,54],{"class":53},[36,78136,77764],{"class":57},[36,78138,77738],{"class":53},[36,78140,77864],{"class":42},[36,78142,78143,78145,78147,78149,78151,78153,78155,78157,78159,78161,78163,78165,78167,78169],{"class":38,"line":5142},[36,78144,76239],{"class":53},[36,78146,60737],{"class":4500},[36,78148,54],{"class":53},[36,78150,1065],{"class":57},[36,78152,3639],{"class":114},[36,78154,77723],{"class":50473},[36,78156,78126],{"class":114},[36,78158,1065],{"class":57},[36,78160,3235],{"class":53},[36,78162,77730],{"class":4500},[36,78164,54],{"class":53},[36,78166,77932],{"class":57},[36,78168,77738],{"class":53},[36,78170,77937],{"class":42},[36,78172,78173,78175,78177,78179,78181,78183,78185,78187,78189,78191,78193,78195,78197,78199],{"class":38,"line":5148},[36,78174,76239],{"class":53},[36,78176,60737],{"class":4500},[36,78178,54],{"class":53},[36,78180,1065],{"class":57},[36,78182,3639],{"class":114},[36,78184,77723],{"class":50473},[36,78186,78126],{"class":114},[36,78188,1065],{"class":57},[36,78190,3235],{"class":53},[36,78192,77730],{"class":4500},[36,78194,54],{"class":53},[36,78196,77964],{"class":57},[36,78198,77738],{"class":53},[36,78200,77864],{"class":42},[36,78202,78203],{"class":38,"line":5153},[36,78204,546],{"emptyLinePlaceholder":545},[36,78206,78207],{"class":38,"line":10475},[36,78208,78209],{"class":42},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,78211,78212,78214,78216,78218,78220,78222,78224,78227,78229,78231,78233,78235,78238,78241],{"class":38,"line":10499},[36,78213,76239],{"class":53},[36,78215,60737],{"class":4500},[36,78217,54],{"class":53},[36,78219,1065],{"class":57},[36,78221,3639],{"class":114},[36,78223,77723],{"class":50473},[36,78225,78226],{"class":114},"{4}$",[36,78228,1065],{"class":57},[36,78230,3235],{"class":53},[36,78232,77730],{"class":4500},[36,78234,54],{"class":53},[36,78236,78237],{"class":57},"'哈哈哈哈'",[36,78239,78240],{"class":53},")) ",[36,78242,77741],{"class":42},[36,78244,78245],{"class":38,"line":10504},[36,78246,546],{"emptyLinePlaceholder":545},[36,78248,78249],{"class":38,"line":10510},[36,78250,78251],{"class":42},"    \u002F\u002F {n,}大于等于n次\n",[36,78253,78254,78256,78258,78260,78262,78264,78266,78269,78271,78273,78275,78277,78279,78281],{"class":38,"line":10537},[36,78255,76239],{"class":53},[36,78257,60737],{"class":4500},[36,78259,54],{"class":53},[36,78261,1065],{"class":57},[36,78263,3639],{"class":114},[36,78265,77723],{"class":50473},[36,78267,78268],{"class":114},"{4,}$",[36,78270,1065],{"class":57},[36,78272,3235],{"class":53},[36,78274,77730],{"class":4500},[36,78276,54],{"class":53},[36,78278,78237],{"class":57},[36,78280,78240],{"class":53},[36,78282,77741],{"class":42},[36,78284,78285,78287,78289,78291,78293,78295,78297,78299,78301,78303,78305,78307,78310,78312],{"class":38,"line":10542},[36,78286,76239],{"class":53},[36,78288,60737],{"class":4500},[36,78290,54],{"class":53},[36,78292,1065],{"class":57},[36,78294,3639],{"class":114},[36,78296,77723],{"class":50473},[36,78298,78268],{"class":114},[36,78300,1065],{"class":57},[36,78302,3235],{"class":53},[36,78304,77730],{"class":4500},[36,78306,54],{"class":53},[36,78308,78309],{"class":57},"'哈哈哈哈哈'",[36,78311,78240],{"class":53},[36,78313,77741],{"class":42},[36,78315,78316],{"class":38,"line":10548},[36,78317,546],{"emptyLinePlaceholder":545},[36,78319,78320],{"class":38,"line":10560},[36,78321,78322],{"class":42},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,78324,78325,78327,78329,78331,78333,78335,78337,78340,78342,78344,78346,78348,78350,78352],{"class":38,"line":10572},[36,78326,76239],{"class":53},[36,78328,60737],{"class":4500},[36,78330,54],{"class":53},[36,78332,1065],{"class":57},[36,78334,3639],{"class":114},[36,78336,77723],{"class":50473},[36,78338,78339],{"class":114},"{4,6}$",[36,78341,1065],{"class":57},[36,78343,3235],{"class":53},[36,78345,77730],{"class":4500},[36,78347,54],{"class":53},[36,78349,78237],{"class":57},[36,78351,78240],{"class":53},[36,78353,77741],{"class":42},[36,78355,78356,78358,78360,78362,78364,78366,78368,78370,78372,78374,78376,78378,78380,78382],{"class":38,"line":10584},[36,78357,76239],{"class":53},[36,78359,60737],{"class":4500},[36,78361,54],{"class":53},[36,78363,1065],{"class":57},[36,78365,3639],{"class":114},[36,78367,77723],{"class":50473},[36,78369,78339],{"class":114},[36,78371,1065],{"class":57},[36,78373,3235],{"class":53},[36,78375,77730],{"class":4500},[36,78377,54],{"class":53},[36,78379,78309],{"class":57},[36,78381,78240],{"class":53},[36,78383,77741],{"class":42},[36,78385,78386,78388,78390,78392,78394,78396,78398,78400,78402,78404,78406,78408,78411,78413],{"class":38,"line":12241},[36,78387,76239],{"class":53},[36,78389,60737],{"class":4500},[36,78391,54],{"class":53},[36,78393,1065],{"class":57},[36,78395,3639],{"class":114},[36,78397,77723],{"class":50473},[36,78399,78339],{"class":114},[36,78401,1065],{"class":57},[36,78403,3235],{"class":53},[36,78405,77730],{"class":4500},[36,78407,54],{"class":53},[36,78409,78410],{"class":57},"'哈哈哈哈哈哈哈'",[36,78412,78240],{"class":53},[36,78414,77864],{"class":42},[36,78416,78417],{"class":38,"line":12266},[36,78418,546],{"emptyLinePlaceholder":545},[36,78420,78421],{"class":38,"line":12289},[36,78422,78423],{"class":42},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,78425,78426,78428,78430,78432,78434,78436,78439,78441,78443,78445,78447,78449,78452,78454],{"class":38,"line":12313},[36,78427,76239],{"class":53},[36,78429,60737],{"class":4500},[36,78431,54],{"class":53},[36,78433,1065],{"class":57},[36,78435,3639],{"class":114},[36,78437,78438],{"class":49},"[abc]",[36,78440,2986],{"class":114},[36,78442,1065],{"class":57},[36,78444,3235],{"class":53},[36,78446,77730],{"class":4500},[36,78448,54],{"class":53},[36,78450,78451],{"class":57},"'a'",[36,78453,77738],{"class":53},[36,78455,77741],{"class":42},[36,78457,78458,78460,78462,78464,78466,78468,78470,78472,78474,78476,78478,78480,78483,78485],{"class":38,"line":12318},[36,78459,76239],{"class":53},[36,78461,60737],{"class":4500},[36,78463,54],{"class":53},[36,78465,1065],{"class":57},[36,78467,3639],{"class":114},[36,78469,78438],{"class":49},[36,78471,2986],{"class":114},[36,78473,1065],{"class":57},[36,78475,3235],{"class":53},[36,78477,77730],{"class":4500},[36,78479,54],{"class":53},[36,78481,78482],{"class":57},"'b'",[36,78484,77738],{"class":53},[36,78486,77741],{"class":42},[36,78488,78489,78491,78493,78495,78497,78499,78501,78503,78505,78507,78509,78511,78514,78516],{"class":38,"line":12323},[36,78490,76239],{"class":53},[36,78492,60737],{"class":4500},[36,78494,54],{"class":53},[36,78496,1065],{"class":57},[36,78498,3639],{"class":114},[36,78500,78438],{"class":49},[36,78502,2986],{"class":114},[36,78504,1065],{"class":57},[36,78506,3235],{"class":53},[36,78508,77730],{"class":4500},[36,78510,54],{"class":53},[36,78512,78513],{"class":57},"'c'",[36,78515,77738],{"class":53},[36,78517,77741],{"class":42},[36,78519,78520,78522,78524,78526,78528,78530,78532,78534,78536,78538,78541,78543],{"class":38,"line":12328},[36,78521,76239],{"class":53},[36,78523,60737],{"class":4500},[36,78525,54],{"class":53},[36,78527,1065],{"class":57},[36,78529,78438],{"class":49},[36,78531,1065],{"class":57},[36,78533,3235],{"class":53},[36,78535,77730],{"class":4500},[36,78537,54],{"class":53},[36,78539,78540],{"class":57},"'ab'",[36,78542,77738],{"class":53},[36,78544,77741],{"class":42},[36,78546,78547,78549,78551,78553,78555,78557,78559,78561,78563,78565,78567,78569,78571,78573],{"class":38,"line":12337},[36,78548,76239],{"class":53},[36,78550,60737],{"class":4500},[36,78552,54],{"class":53},[36,78554,1065],{"class":57},[36,78556,3639],{"class":114},[36,78558,78438],{"class":49},[36,78560,2986],{"class":114},[36,78562,1065],{"class":57},[36,78564,3235],{"class":53},[36,78566,77730],{"class":4500},[36,78568,54],{"class":53},[36,78570,78540],{"class":57},[36,78572,77738],{"class":53},[36,78574,78575],{"class":42},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,78577,78578,78580,78582,78584,78586,78588,78590,78593,78595,78597,78599,78601,78603,78605],{"class":38,"line":12342},[36,78579,76239],{"class":53},[36,78581,60737],{"class":4500},[36,78583,54],{"class":53},[36,78585,1065],{"class":57},[36,78587,3639],{"class":114},[36,78589,78438],{"class":49},[36,78591,78592],{"class":114},"{2}$",[36,78594,1065],{"class":57},[36,78596,3235],{"class":53},[36,78598,77730],{"class":4500},[36,78600,54],{"class":53},[36,78602,78540],{"class":57},[36,78604,77738],{"class":53},[36,78606,78607],{"class":42},"\u002F\u002Ftrue   可以选两个\n",[36,78609,78610,78612,78614,78616,78618,78620,78623,78625,78627,78629,78631,78633,78636,78638],{"class":38,"line":12348},[36,78611,76239],{"class":53},[36,78613,60737],{"class":4500},[36,78615,54],{"class":53},[36,78617,1065],{"class":57},[36,78619,3639],{"class":114},[36,78621,78622],{"class":49},"[a-z]",[36,78624,2986],{"class":114},[36,78626,1065],{"class":57},[36,78628,3235],{"class":53},[36,78630,77730],{"class":4500},[36,78632,54],{"class":53},[36,78634,78635],{"class":57},"'p'",[36,78637,77794],{"class":53},[36,78639,78640],{"class":42},"\u002F\u002Ftrue   依然只能选一个\n",[36,78642,78643,78645,78647,78649,78651,78653,78656,78658,78660,78662,78664,78666,78668,78670],{"class":38,"line":12369},[36,78644,76239],{"class":53},[36,78646,60737],{"class":4500},[36,78648,54],{"class":53},[36,78650,1065],{"class":57},[36,78652,3639],{"class":114},[36,78654,78655],{"class":49},"[A-Z]",[36,78657,2986],{"class":114},[36,78659,1065],{"class":57},[36,78661,3235],{"class":53},[36,78663,77730],{"class":4500},[36,78665,54],{"class":53},[36,78667,78635],{"class":57},[36,78669,77794],{"class":53},[36,78671,77864],{"class":42},[36,78673,78674,78676,78678,78680,78682,78684,78686,78688,78690,78692,78694,78696,78699,78701],{"class":38,"line":12375},[36,78675,76239],{"class":53},[36,78677,60737],{"class":4500},[36,78679,54],{"class":53},[36,78681,1065],{"class":57},[36,78683,3639],{"class":114},[36,78685,78655],{"class":49},[36,78687,2986],{"class":114},[36,78689,1065],{"class":57},[36,78691,3235],{"class":53},[36,78693,77730],{"class":4500},[36,78695,54],{"class":53},[36,78697,78698],{"class":57},"'P'",[36,78700,77794],{"class":53},[36,78702,77741],{"class":42},[36,78704,78705,78707,78709,78711,78713,78715,78718,78720,78722,78724,78726,78728,78731,78733],{"class":38,"line":12389},[36,78706,76239],{"class":53},[36,78708,60737],{"class":4500},[36,78710,54],{"class":53},[36,78712,1065],{"class":57},[36,78714,3639],{"class":114},[36,78716,78717],{"class":49},"[0-9]",[36,78719,2986],{"class":114},[36,78721,1065],{"class":57},[36,78723,3235],{"class":53},[36,78725,77730],{"class":4500},[36,78727,54],{"class":53},[36,78729,78730],{"class":57},"'0'",[36,78732,77794],{"class":53},[36,78734,77741],{"class":42},[36,78736,78737,78739,78741,78743,78745,78747,78750,78752,78754,78756,78758,78760,78762,78764],{"class":38,"line":12395},[36,78738,76239],{"class":53},[36,78740,60737],{"class":4500},[36,78742,54],{"class":53},[36,78744,1065],{"class":57},[36,78746,3639],{"class":114},[36,78748,78749],{"class":49},"[a-zA-Z0-9]",[36,78751,2986],{"class":114},[36,78753,1065],{"class":57},[36,78755,3235],{"class":53},[36,78757,77730],{"class":4500},[36,78759,54],{"class":53},[36,78761,78635],{"class":57},[36,78763,77738],{"class":53},[36,78765,77741],{"class":42},[36,78767,78768,78770,78772],{"class":38,"line":12422},[36,78769,54911],{"class":53},[36,78771,54307],{"class":53794},[36,78773,53801],{"class":53},[36,78775,78776,78778,78780],{"class":38,"line":12431},[36,78777,54279],{"class":53},[36,78779,54294],{"class":53794},[36,78781,53801],{"class":53},[36,78783,78784],{"class":38,"line":12437},[36,78785,546],{"emptyLinePlaceholder":545},[36,78787,78788,78790,78792],{"class":38,"line":12445},[36,78789,54279],{"class":53},[36,78791,53131],{"class":53794},[36,78793,53801],{"class":53},[24515,78795,78797],{"id":78796},"_3624-修饰符","3.6.2.4 修饰符",[19,78799,78800],{},[4000,78801],{"alt":31,"src":78802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78804,78805],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78807,78808],{},[4000,78809],{"alt":31,"src":78810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,78812,78814],{"className":53129,"code":78813,"language":53131,"meta":31,"style":31},"\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",[33,78815,78816,78826,78840,78848,78862,78882,78894,78902,78910,78918,78950,78981,78986,79018,79029,79062,79071,79079,79087],{"__ignoreMap":31},[36,78817,78818,78820,78822,78824],{"class":38,"line":39},[36,78819,53791],{"class":53},[36,78821,53795],{"class":53794},[36,78823,53798],{"class":4500},[36,78825,53801],{"class":53},[36,78827,78828,78830,78832,78834,78836,78838],{"class":38,"line":46},[36,78829,1507],{"class":53},[36,78831,53131],{"class":53794},[36,78833,53810],{"class":4500},[36,78835,115],{"class":53},[36,78837,53815],{"class":57},[36,78839,53801],{"class":53},[36,78841,78842,78844,78846],{"class":38,"line":82},[36,78843,1507],{"class":53},[36,78845,53828],{"class":53794},[36,78847,53801],{"class":53},[36,78849,78850,78852,78854,78856,78858,78860],{"class":38,"line":88},[36,78851,54638],{"class":53},[36,78853,53838],{"class":53794},[36,78855,53841],{"class":4500},[36,78857,115],{"class":53},[36,78859,53846],{"class":57},[36,78861,53801],{"class":53},[36,78863,78864,78866,78868,78870,78872,78874,78876,78878,78880],{"class":38,"line":195},[36,78865,54638],{"class":53},[36,78867,53838],{"class":53794},[36,78869,17440],{"class":4500},[36,78871,115],{"class":53},[36,78873,53885],{"class":57},[36,78875,53865],{"class":4500},[36,78877,115],{"class":53},[36,78879,53892],{"class":57},[36,78881,53801],{"class":53},[36,78883,78884,78886,78888,78890,78892],{"class":38,"line":1517},[36,78885,54638],{"class":53},[36,78887,53901],{"class":53794},[36,78889,53904],{"class":53},[36,78891,53901],{"class":53794},[36,78893,53801],{"class":53},[36,78895,78896,78898,78900],{"class":38,"line":2421},[36,78897,54279],{"class":53},[36,78899,53828],{"class":53794},[36,78901,53801],{"class":53},[36,78903,78904,78906,78908],{"class":38,"line":2446},[36,78905,1507],{"class":53},[36,78907,54294],{"class":53794},[36,78909,53801],{"class":53},[36,78911,78912,78914,78916],{"class":38,"line":2469},[36,78913,54638],{"class":53},[36,78915,54307],{"class":53794},[36,78917,53801],{"class":53},[36,78919,78920,78922,78924,78926,78928,78930,78933,78935,78937,78939,78941,78943,78946,78948],{"class":38,"line":2492},[36,78921,76239],{"class":53},[36,78923,60737],{"class":4500},[36,78925,54],{"class":53},[36,78927,1065],{"class":57},[36,78929,3639],{"class":114},[36,78931,78932],{"class":50473},"java",[36,78934,2986],{"class":114},[36,78936,1065],{"class":57},[36,78938,3235],{"class":53},[36,78940,77730],{"class":4500},[36,78942,54],{"class":53},[36,78944,78945],{"class":57},"'java'",[36,78947,78240],{"class":53},[36,78949,77741],{"class":42},[36,78951,78952,78954,78956,78958,78960,78962,78964,78966,78968,78970,78972,78974,78977,78979],{"class":38,"line":4150},[36,78953,76239],{"class":53},[36,78955,60737],{"class":4500},[36,78957,54],{"class":53},[36,78959,1065],{"class":57},[36,78961,3639],{"class":114},[36,78963,78932],{"class":50473},[36,78965,2986],{"class":114},[36,78967,1065],{"class":57},[36,78969,3235],{"class":53},[36,78971,77730],{"class":4500},[36,78973,54],{"class":53},[36,78975,78976],{"class":57},"'Java'",[36,78978,78240],{"class":53},[36,78980,77864],{"class":42},[36,78982,78983],{"class":38,"line":4155},[36,78984,78985],{"class":42},"    \u002F\u002F 不区分大小写、\n",[36,78987,78988,78990,78992,78994,78996,78998,79000,79002,79004,79006,79008,79010,79012,79014,79016],{"class":38,"line":4161},[36,78989,76239],{"class":53},[36,78991,60737],{"class":4500},[36,78993,54],{"class":53},[36,78995,1065],{"class":57},[36,78997,3639],{"class":114},[36,78999,78932],{"class":50473},[36,79001,2986],{"class":114},[36,79003,1065],{"class":57},[36,79005,3122],{"class":114},[36,79007,3235],{"class":53},[36,79009,77730],{"class":4500},[36,79011,54],{"class":53},[36,79013,78976],{"class":57},[36,79015,78240],{"class":53},[36,79017,77741],{"class":42},[36,79019,79020,79022,79024,79026],{"class":38,"line":4166},[36,79021,13744],{"class":114},[36,79023,1747],{"class":49},[36,79025,498],{"class":114},[36,79027,79028],{"class":57}," 'java是一门编程语言，学完java工资很高'\n",[36,79030,79031,79033,79036,79038,79041,79044,79046,79048,79050,79052,79055,79057,79060],{"class":38,"line":4180},[36,79032,13744],{"class":114},[36,79034,79035],{"class":49}," result",[36,79037,498],{"class":114},[36,79039,79040],{"class":53}," str.",[36,79042,79043],{"class":4500},"replace",[36,79045,54],{"class":53},[36,79047,1065],{"class":57},[36,79049,78932],{"class":50473},[36,79051,1065],{"class":57},[36,79053,79054],{"class":114},"ig",[36,79056,14958],{"class":53},[36,79058,79059],{"class":57},"'前端'",[36,79061,61],{"class":53},[36,79063,79064,79066,79068],{"class":38,"line":4185},[36,79065,76239],{"class":53},[36,79067,60737],{"class":4500},[36,79069,79070],{"class":53},"(result)\n",[36,79072,79073,79075,79077],{"class":38,"line":4191},[36,79074,54911],{"class":53},[36,79076,54307],{"class":53794},[36,79078,53801],{"class":53},[36,79080,79081,79083,79085],{"class":38,"line":4212},[36,79082,54279],{"class":53},[36,79084,54294],{"class":53794},[36,79086,53801],{"class":53},[36,79088,79089,79091,79093],{"class":38,"line":4217},[36,79090,54279],{"class":53},[36,79092,53131],{"class":53794},[36,79094,53801],{"class":53},[2602,79096,79097],{},"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":31,"searchDepth":46,"depth":46,"links":79099},[79100,79110,79122,79139,79146,79154],{"id":55854,"depth":46,"text":55855,"children":79101},[79102,79103,79104,79105,79106,79107,79108,79109],{"id":55858,"depth":82,"text":55859},{"id":55891,"depth":82,"text":55892},{"id":55930,"depth":82,"text":55931},{"id":56088,"depth":82,"text":56089},{"id":56136,"depth":82,"text":56137},{"id":56273,"depth":82,"text":56274},{"id":56594,"depth":82,"text":56595},{"id":59579,"depth":82,"text":59580},{"id":59607,"depth":46,"text":59608,"children":79111},[79112,79113,79114,79115,79116,79117,79118,79119,79120,79121],{"id":59611,"depth":82,"text":59612},{"id":59634,"depth":82,"text":59635},{"id":60549,"depth":82,"text":60550},{"id":61238,"depth":82,"text":61239},{"id":61520,"depth":82,"text":61521},{"id":65680,"depth":82,"text":65681},{"id":65850,"depth":82,"text":65851},{"id":65978,"depth":82,"text":65979},{"id":66003,"depth":82,"text":66004},{"id":67392,"depth":82,"text":67393},{"id":68544,"depth":46,"text":68545,"children":79123},[79124,79125,79126,79127,79128,79129,79130,79131,79132,79133,79134,79135,79136,79137,79138],{"id":68548,"depth":82,"text":68549},{"id":69202,"depth":82,"text":69203},{"id":70897,"depth":82,"text":70898},{"id":70938,"depth":82,"text":70939},{"id":70980,"depth":82,"text":70981},{"id":70994,"depth":82,"text":70995},{"id":71043,"depth":82,"text":71044},{"id":71055,"depth":82,"text":71056},{"id":71070,"depth":82,"text":71071},{"id":71106,"depth":82,"text":71107},{"id":71187,"depth":82,"text":71188},{"id":71315,"depth":82,"text":71316},{"id":71327,"depth":82,"text":71328},{"id":71346,"depth":82,"text":71347},{"id":73456,"depth":82,"text":73457},{"id":73475,"depth":46,"text":73476,"children":79140},[79141,79142,79143,79144,79145],{"id":73496,"depth":82,"text":73497},{"id":73516,"depth":82,"text":73517},{"id":73565,"depth":82,"text":73566},{"id":73690,"depth":82,"text":73691},{"id":73871,"depth":82,"text":73872},{"id":73889,"depth":46,"text":73890,"children":79147},[79148,79149,79150,79151,79152,79153],{"id":73904,"depth":82,"text":73905},{"id":73963,"depth":82,"text":73964},{"id":73987,"depth":82,"text":73988},{"id":74307,"depth":82,"text":74308},{"id":74339,"depth":82,"text":74340},{"id":74362,"depth":82,"text":74363},{"id":77429,"depth":46,"text":77430,"children":79155},[79156,79157],{"id":77463,"depth":82,"text":77464},{"id":77502,"depth":82,"text":77503},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55826,"description":2630},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79164,"title":79165,"body":79166,"description":2630,"extension":2631,"meta":95296,"navigation":545,"path":95297,"seo":95298,"stem":95299,"__hash__":95300},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79167,"toc":95232},[79168,79171,79174,79178,79182,79187,79192,79203,79207,79212,79215,79219,79222,79227,79231,79235,79238,79243,79246,79250,79253,79261,79264,79268,79273,79278,79281,79285,79290,79295,79298,79302,79307,79310,79315,79318,79323,79326,79331,79336,79339,79342,79346,79351,79356,79359,79363,79367,79370,79373,79376,79380,79384,79389,79394,79397,79401,79406,79411,79414,79417,79420,79423,79426,79429,79432,79435,79438,79443,79447,79452,79457,79460,79463,79466,79469,79472,79475,79478,79481,79485,79489,79492,79495,79498,79503,79505,79508,79511,79514,79517,79520,79523,79526,79529,79532,79535,79538,79541,79544,79549,79554,79559,79562,79566,79569,79574,79578,79580,79591,79596,79697,79700,79703,79706,79709,79712,79715,79718,79721,79723,79726,79729,79732,79735,79738,79740,79743,79746,79749,79752,79755,79758,79760,79763,79765,79767,79770,79774,79778,79781,79784,79787,79790,79793,79796,79799,79802,79805,79810,79929,79932,79935,79940,79943,79946,79949,79952,79957,79960,79963,79966,79969,79974,79977,80077,80142,80216,80220,80223,80226,80230,80233,80247,80276,80279,80282,80285,80288,80291,80294,80297,80299,80302,80305,80308,80311,80315,80320,80324,80329,80404,80407,80589,80592,80595,80598,80601,80604,80606,80609,80612,80615,80618,80621,80624,80626,80630,80633,80638,80641,80644,80647,80650,80652,80657,80660,80663,80666,80669,80671,80676,80679,80682,80684,80686,80689,80693,80696,80699,80704,80707,80710,80713,80763,80768,80772,80777,80780,80849,80852,80861,80865,80870,80873,80876,80884,80887,80904,82704,82708,82712,82717,82720,82724,82730,82736,82888,82893,82898,82901,82904,82907,82910,82913,82916,82919,82922,82925,82928,82931,82934,82939,82943,82946,82957,82961,82966,82969,82972,82975,82978,82981,82983,82986,82989,82992,82995,82997,83014,83017,83021,83024,83029,83034,83037,83040,83044,83047,83050,83059,83062,83066,83069,83074,83079,83146,83150,83153,83156,83161,83166,83252,83257,83261,83264,83267,83282,83285,83290,83294,83299,83408,83411,83422,83572,83576,83581,83690,83694,83699,83704,83709,83712,83719,83739,83775,83939,83944,83947,83952,83959,83962,83965,83968,84027,84083,84139,84143,84148,84463,84466,84470,84473,84478,84587,84592,84596,84601,84605,84676,84680,84682,84685,84688,84726,85002,85006,85023,85089,85123,85127,85130,85135,85164,85171,85180,85185,85200,85205,85214,85217,85354,85358,85420,85424,85429,85674,85678,85683,85686,85689,85692,85695,85699,85704,87284,87288,87292,87298,87301,87306,87310,87313,87318,87321,87332,87336,87341,87345,87350,87355,87358,87363,87367,87371,87374,87379,87384,87387,87390,87393,87515,87520,87622,87625,87628,87632,87637,87809,87814,87818,87821,87826,87892,87897,87900,88031,88034,88039,88042,88045,88136,88141,88144,88147,88150,88153,88158,88163,88166,88171,88176,88181,88185,88188,88191,88196,88201,88206,88211,88265,88268,88271,88276,88279,88282,88287,88292,88297,88301,88306,88320,88325,88328,88333,88337,88342,88347,88352,88357,88362,88367,88372,88377,88380,88384,88389,88392,88395,88398,88403,88408,88411,88414,88418,88421,88424,88429,88434,88439,88444,88447,88452,88457,88518,88523,88526,88531,89771,89776,89780,89784,89789,89792,89797,89802,89805,89810,89812,89817,89821,89824,89827,89838,89842,89847,89852,89907,89912,89917,89922,90133,90138,90142,90147,90150,90152,90155,90158,90604,90609,90616,90622,90625,90628,90892,90897,90901,91166,91171,91175,91180,91185,91190,91195,91526,91529,91534,91539,91542,91546,91550,91555,91560,91565,91570,91575,91580,91584,91587,91592,91597,91600,91674,91679,91684,91689,91691,91694,92064,92069,92074,92079,92082,92085,92187,92192,92197,92300,92304,92309,92313,92317,92322,92327,92330,92335,92338,92341,92734,92739,92742,92745,92748,92751,93271,93275,93280,93285,93290,93293,93298,93301,93304,93686,93691,93693,93695,93698,93701,94213,94217,94278,94281,94284,94287,94291,94294,94299,94304,95229],[10,79169,79165],{"id":79170},"_4js进阶",[19,79172,79173],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79175,79177],{"id":79176},"_41-作用域","4.1 作用域",[997,79179,79181],{"id":79180},"_411-局部作用域","4.1.1 局部作用域",[19,79183,79184],{},[4000,79185],{"alt":31,"src":79186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79188,79189],{},[4000,79190],{"alt":31,"src":79191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3680,79193,79194,79197,79200],{},[436,79195,79196],{},"函数作用域在函数内部",[436,79198,79199],{},"块级作用域在{}",[436,79201,79202],{},"对象的那个{}不是作用域，不是块作用域",[997,79204,79206],{"id":79205},"_412-全局作用域","4.1.2 全局作用域",[19,79208,79209],{},[4000,79210],{"alt":31,"src":79211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,79213,79214],{},"window.a=10不要这样写",[997,79216,79218],{"id":79217},"_413-作用域链","4.1.3 作用域链",[19,79220,79221],{},"变量查找机制",[19,79223,79224],{},[4000,79225],{"alt":31,"src":79226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79228,79230],{"id":79229},"_42-垃圾回收机制","4.2 垃圾回收机制",[997,79232,79234],{"id":79233},"_421-大体介绍","4.2.1 大体介绍",[19,79236,79237],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,79239,79240],{},[4000,79241],{"alt":31,"src":79242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,79244,79245],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[997,79247,79249],{"id":79248},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,79251,79252],{},"堆栈空间分配区别：",[433,79254,79255,79258],{},[436,79256,79257],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[436,79259,79260],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79262,79263],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24515,79265,79267],{"id":79266},"_4221-引用计数","4.2.2.1 引用计数",[19,79269,79270],{},[4000,79271],{"alt":31,"src":79272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79274,79275],{},[4000,79276],{"alt":31,"src":79277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79279,79280],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24515,79282,79284],{"id":79283},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79286,79287],{},[4000,79288],{"alt":31,"src":79289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79291,79292],{},[4000,79293],{"alt":31,"src":79294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79296,79297],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79299,79301],{"id":79300},"_43-闭包","4.3 闭包",[19,79303,79304],{},[4000,79305],{"alt":31,"src":79306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79308,79309],{},"闭包：内层函数+外层函数的变量",[19,79311,79312],{},[4000,79313],{"alt":31,"src":79314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79316,79317],{},"closure就是闭包",[19,79319,79320],{},[4000,79321],{"alt":31,"src":79322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79324,79325],{},"内层函数必须包含外层函数的变量才是闭包",[19,79327,79328],{},[4000,79329],{"alt":31,"src":79330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79332,79333],{},[4000,79334],{"alt":31,"src":79335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79337,79338],{},"闭包可能会引起内存泄漏",[19,79340,79341],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79343,79345],{"id":79344},"_44-变量提升","4.4 变量提升",[19,79347,79348],{},[4000,79349],{"alt":31,"src":79350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79352,79353],{},[4000,79354],{"alt":31,"src":79355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79357,79358],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79360,79362],{"id":79361},"_45-函数进阶","4.5 函数进阶",[997,79364,79366],{"id":79365},"_451-函数提升","4.5.1 函数提升",[19,79368,79369],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79371,79372],{},"只提升函数声明，不提升函数调用",[54307,79374,79375],{},"\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",[997,79377,79379],{"id":79378},"_452-函数参数","4.5.2 函数参数",[24515,79381,79383],{"id":79382},"_4521-动态参数","4.5.2.1 动态参数",[19,79385,79386],{},[4000,79387],{"alt":31,"src":79388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79390,79391],{},[4000,79392],{"alt":31,"src":79393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79395,79396],{},"箭头函数里边没有arguments",[24515,79398,79400],{"id":79399},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79402,79403],{},[4000,79404],{"alt":31,"src":79405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79407,79408],{},[4000,79409],{"alt":31,"src":79410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79412,79413],{},"剩余参数使用的时候不需要写...",[19,79415,79416],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79418,79419],{},"  function getSum(a,b,...arr) {",[19,79421,79422],{},"  console.log(11)",[19,79424,79425],{},"  }",[19,79427,79428],{},"  getSum(1,2,3,4)",[19,79430,79431],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79433,79434],{},"  getSum(1,2)",[19,79436,79437],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79439,79440],{},[4000,79441],{"alt":31,"src":79442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24515,79444,79446],{"id":79445},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79448,79449],{},[4000,79450],{"alt":31,"src":79451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79453,79454],{},[4000,79455],{"alt":31,"src":79456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79458,79459],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79461,79462],{},"展开运算符可以用于数组之间的合并：",[19,79464,79465],{},"const arr1 = [1, 2, 3]",[19,79467,79468],{},"const arr2 = [3, 4, 5]",[19,79470,79471],{},"const arr = [...arr1, ...arr2]",[19,79473,79474],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79476,79477],{},"剩余参数：函数参数使用，得到真数组",[19,79479,79480],{},"展开运算符：数组中使用，数组展开",[997,79482,79484],{"id":79483},"_453-箭头函数","4.5.3 箭头函数",[24515,79486,79488],{"id":79487},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79490,79491],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79493,79494],{},"它不是万能的！！！",[19,79496,79497],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79499,79500],{},[4000,79501],{"alt":31,"src":79502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79504,2731],{},[19,79506,79507],{},"① 只有一个形参的时候，可以省略小括号：",[19,79509,79510],{},"const fn=x=>{console.log(x)}",[19,79512,79513],{},"② 只有一行代码时可以省略大括号：",[19,79515,79516],{},"const fn=x=>console.log(11)",[19,79518,79519],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79521,79522],{},"const fn=x=>x+x",[19,79524,79525],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79527,79528],{},"⑤ 阻止表单默认提交：",[19,79530,79531],{},"const form = document.querySelector('form')",[19,79533,79534],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79536,79537],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79539,79540],{},"const fn=uname=>({uname:uname})",[19,79542,79543],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79545,79546],{},[4000,79547],{"alt":31,"src":79548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79550,79551],{},[4000,79552],{"alt":31,"src":79553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79555,79556],{},[4000,79557],{"alt":31,"src":79558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79560,79561],{},"一定不要忘记用()，有()就理解为自带return",[24515,79563,79565],{"id":79564},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79567,79568],{},"箭头函数是没有动态参数的arguments",[19,79570,79571],{},[4000,79572],{"alt":31,"src":79573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24515,79575,79577],{"id":79576},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79579,13855],{},[433,79581,79582,79585,79588],{},[436,79583,79584],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[436,79586,79587],{},"事件回调函数使用箭头函数时，this 为全局的 window",[436,79589,79590],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79592,79593],{},[4000,79594],{"alt":31,"src":79595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,79597,79599],{"className":55561,"code":79598,"language":55563,"meta":31,"style":31},"  \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",[33,79600,79601,79609,79614,79619,79624,79629,79634,79638,79643,79647,79651,79656,79661,79666,79670,79674,79679,79684,79689],{"__ignoreMap":31},[36,79602,79603,79605,79607],{"class":38,"line":39},[36,79604,54638],{"class":53},[36,79606,54307],{"class":53794},[36,79608,53801],{"class":53},[36,79610,79611],{"class":38,"line":46},[36,79612,79613],{"class":53},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,79615,79616],{"class":38,"line":82},[36,79617,79618],{"class":53},"    console.log(this) \u002F\u002F指向window\n",[36,79620,79621],{"class":38,"line":88},[36,79622,79623],{"class":53},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,79625,79626],{"class":38,"line":195},[36,79627,79628],{"class":53},"    function fn() {\n",[36,79630,79631],{"class":38,"line":1517},[36,79632,79633],{"class":53},"      console.log(this)  \u002F\u002F指向window\n",[36,79635,79636],{"class":38,"line":2421},[36,79637,4721],{"class":53},[36,79639,79640],{"class":38,"line":2446},[36,79641,79642],{"class":53},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,79644,79645],{"class":38,"line":2469},[36,79646,546],{"emptyLinePlaceholder":545},[36,79648,79649],{"class":38,"line":2492},[36,79650,74009],{"class":53},[36,79652,79653],{"class":38,"line":4150},[36,79654,79655],{"class":53},"      name: 'andy',\n",[36,79657,79658],{"class":38,"line":4155},[36,79659,79660],{"class":53},"      sayHai: function () {\n",[36,79662,79663],{"class":38,"line":4161},[36,79664,79665],{"class":53},"        console.log(this)\n",[36,79667,79668],{"class":38,"line":4166},[36,79669,54892],{"class":53},[36,79671,79672],{"class":38,"line":4180},[36,79673,4721],{"class":53},[36,79675,79676],{"class":38,"line":4185},[36,79677,79678],{"class":53},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,79680,79681],{"class":38,"line":4191},[36,79682,79683],{"class":53},"    \u002F\u002F 2.箭头函数的this\n",[36,79685,79686],{"class":38,"line":4212},[36,79687,79688],{"class":53},"    const fn = () => console.log(this)\n",[36,79690,79691,79693,79695],{"class":38,"line":4217},[36,79692,54911],{"class":53},[36,79694,54307],{"class":53794},[36,79696,53801],{"class":53},[19,79698,79699],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79701,79702],{},"const fn = () => console.log(this)",[19,79704,79705],{},"fn() \u002F\u002F指向window",[19,79707,79708],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79710,79711],{},"①",[19,79713,79714],{},"const obj = {",[19,79716,79717],{},"uname: 'pink老师',",[19,79719,79720],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79722,2070],{},[19,79724,79725],{},"调用对象里边的函数",[19,79727,79728],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79730,79731],{},"obj.sayHai()",[19,79733,79734],{},"②",[19,79736,79737],{},"const obj1 = {",[19,79739,79717],{},[19,79741,79742],{},"sayHai: function () {",[19,79744,79745],{},"let i = 10",[19,79747,79748],{},"const count = () => {",[19,79750,79751],{},"console.log(this)",[19,79753,79754],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79756,79757],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79759,2070],{},[19,79761,79762],{},"count()",[19,79764,2070],{},[19,79766,2070],{},[19,79768,79769],{},"obj1.sayHai()",[14,79771,79773],{"id":79772},"_46-解构赋值","4.6 解构赋值",[997,79775,79777],{"id":79776},"_461-数组解构","4.6.1 数组解构",[19,79779,79780],{},"以前要是使用数组中的值的话：",[19,79782,79783],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79785,79786],{},"const arr=[100,60,80]",[19,79788,79789],{},"const max=arr[0]",[19,79791,79792],{},"const min=arr[1]",[19,79794,79795],{},"const avg=arr[2]",[19,79797,79798],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79800,79801],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79803,79804],{},"这个写法就类似于上边的那种用很多const的方法",[19,79806,79807],{},[4000,79808],{"alt":31,"src":79809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,79811,79813],{"className":53129,"code":79812,"language":53131,"meta":31,"style":31},"①变量之间交换值:\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",[33,79814,79815,79820,79825,79830,79835,79840,79844,79848,79853,79857,79862,79867,79871,79876,79881,79891,79901,79906,79911,79916,79920,79924],{"__ignoreMap":31},[36,79816,79817],{"class":38,"line":39},[36,79818,79819],{"class":53},"①变量之间交换值:\n",[36,79821,79822],{"class":38,"line":46},[36,79823,79824],{"class":53},"let a=1\n",[36,79826,79827],{"class":38,"line":82},[36,79828,79829],{"class":53},"let b=2;\n",[36,79831,79832],{"class":38,"line":88},[36,79833,79834],{"class":53},"必须加这行代码，不然就会报错\n",[36,79836,79837],{"class":38,"line":195},[36,79838,79839],{"class":53},"[b,a]=[a,b]\n",[36,79841,79842],{"class":38,"line":1517},[36,79843,546],{"emptyLinePlaceholder":545},[36,79845,79846],{"class":38,"line":2421},[36,79847,546],{"emptyLinePlaceholder":545},[36,79849,79850],{"class":38,"line":2446},[36,79851,79852],{"class":53},"可以写成下面的方式：\n",[36,79854,79855],{"class":38,"line":2469},[36,79856,79824],{"class":53},[36,79858,79859],{"class":38,"line":2492},[36,79860,79861],{"class":53},"let b=2\n",[36,79863,79864],{"class":38,"line":4150},[36,79865,79866],{"class":53},";[b,a]=[a,b]\n",[36,79868,79869],{"class":38,"line":4155},[36,79870,546],{"emptyLinePlaceholder":545},[36,79872,79873],{"class":38,"line":4161},[36,79874,79875],{"class":53},"②排序\n",[36,79877,79878],{"class":38,"line":4166},[36,79879,79880],{"class":53},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,79882,79883,79886,79888],{"class":38,"line":4180},[36,79884,79885],{"class":53},"for (let i = 0; i ",[36,79887,1507],{"class":494},[36,79889,79890],{"class":53}," arr1.length; i++) {\n",[36,79892,79893,79896,79898],{"class":38,"line":4185},[36,79894,79895],{"class":53},"   for (let j = 0; j ",[36,79897,1507],{"class":494},[36,79899,79900],{"class":53}," arr1.length - 1; j++) {\n",[36,79902,79903],{"class":38,"line":4191},[36,79904,79905],{"class":53},"      if (arr1[j] > arr1[j + 1]) {\n",[36,79907,79908],{"class":38,"line":4212},[36,79909,79910],{"class":53},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,79912,79913],{"class":38,"line":4217},[36,79914,79915],{"class":53},"       }\n",[36,79917,79918],{"class":38,"line":4231},[36,79919,6840],{"class":53},[36,79921,79922],{"class":38,"line":4236},[36,79923,4103],{"class":53},[36,79925,79926],{"class":38,"line":4264},[36,79927,79928],{"class":53},"console.log(arr1)\n",[19,79930,79931],{},"数组解构的细节：",[19,79933,79934],{},"①变量多，单元值少",[19,79936,79937],{},[4000,79938],{"alt":31,"src":79939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79941,79942],{},"防止出现undefined的方法：",[19,79944,79945],{},"const [a=0,b=0] =[1]",[19,79947,79948],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79950,79951],{},"②变量少，单元值多",[19,79953,79954],{},[4000,79955],{"alt":31,"src":79956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79958,79959],{},"此时可以使用剩余参数来接收多余的值",[19,79961,79962],{},"const [a,b,...c]=[1,2,3,4]",[19,79964,79965],{},"console.log(c) 输出[3,4]",[19,79967,79968],{},"③可以按需导入，忽略某些返回值",[19,79970,79971],{},[4000,79972],{"alt":31,"src":79973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79975,79976],{},"④支持多维数组的结构",[26,79978,79982],{"className":79979,"code":79980,"language":79981,"meta":31,"style":31},"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",[33,79983,79984,80012,80028,80043,80058],{"__ignoreMap":31},[36,79985,79986,79988,79990,79992,79994,79996,79998,80000,80003,80005,80007,80009],{"class":38,"line":39},[36,79987,9319],{"class":114},[36,79989,54327],{"class":53},[36,79991,115],{"class":114},[36,79993,54720],{"class":53},[36,79995,707],{"class":49},[36,79997,14958],{"class":53},[36,79999,1188],{"class":49},[36,80001,80002],{"class":53},", [",[36,80004,2767],{"class":49},[36,80006,14958],{"class":53},[36,80008,2977],{"class":49},[36,80010,80011],{"class":53},"]]\n",[36,80013,80014,80017,80019,80021,80023,80025],{"class":38,"line":46},[36,80015,80016],{"class":53},"console.",[36,80018,60737],{"class":4500},[36,80020,6382],{"class":53},[36,80022,713],{"class":49},[36,80024,6747],{"class":53},[36,80026,80027],{"class":42},"  \u002F\u002F1\n",[36,80029,80030,80032,80034,80036,80038,80040],{"class":38,"line":82},[36,80031,80016],{"class":53},[36,80033,60737],{"class":4500},[36,80035,6382],{"class":53},[36,80037,707],{"class":49},[36,80039,6747],{"class":53},[36,80041,80042],{"class":42},"  \u002F\u002F2\n",[36,80044,80045,80047,80049,80051,80053,80055],{"class":38,"line":88},[36,80046,80016],{"class":53},[36,80048,60737],{"class":4500},[36,80050,6382],{"class":53},[36,80052,1188],{"class":49},[36,80054,6747],{"class":53},[36,80056,80057],{"class":42},"  \u002F\u002F[3,4]\n",[36,80059,80060,80062,80064,80066,80068,80070,80072,80074],{"class":38,"line":195},[36,80061,80016],{"class":53},[36,80063,60737],{"class":4500},[36,80065,6382],{"class":53},[36,80067,1188],{"class":49},[36,80069,7432],{"class":53},[36,80071,713],{"class":49},[36,80073,6747],{"class":53},[36,80075,80076],{"class":42},"  \u002F\u002F3\n",[26,80078,80080],{"className":79979,"code":80079,"language":79981,"meta":31,"style":31},"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",[33,80081,80082,80109,80120,80131],{"__ignoreMap":31},[36,80083,80084,80086,80089,80091,80093,80095,80097,80099,80101,80103,80105,80107],{"class":38,"line":39},[36,80085,9319],{"class":114},[36,80087,80088],{"class":53}," [a, b, c] ",[36,80090,115],{"class":114},[36,80092,54720],{"class":53},[36,80094,707],{"class":49},[36,80096,14958],{"class":53},[36,80098,1188],{"class":49},[36,80100,80002],{"class":53},[36,80102,2767],{"class":49},[36,80104,14958],{"class":53},[36,80106,2977],{"class":49},[36,80108,80011],{"class":53},[36,80110,80111,80113,80115,80118],{"class":38,"line":46},[36,80112,80016],{"class":53},[36,80114,60737],{"class":4500},[36,80116,80117],{"class":53},"(a)",[36,80119,80027],{"class":42},[36,80121,80122,80124,80126,80129],{"class":38,"line":82},[36,80123,80016],{"class":53},[36,80125,60737],{"class":4500},[36,80127,80128],{"class":53},"(b)",[36,80130,80042],{"class":42},[36,80132,80133,80135,80137,80140],{"class":38,"line":88},[36,80134,80016],{"class":53},[36,80136,60737],{"class":4500},[36,80138,80139],{"class":53},"(c)",[36,80141,80057],{"class":42},[26,80143,80145],{"className":79979,"code":80144,"language":79981,"meta":31,"style":31},"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",[33,80146,80147,80174,80184,80194,80204],{"__ignoreMap":31},[36,80148,80149,80151,80154,80156,80158,80160,80162,80164,80166,80168,80170,80172],{"class":38,"line":39},[36,80150,9319],{"class":114},[36,80152,80153],{"class":53}," [a, b, [c, d]] ",[36,80155,115],{"class":114},[36,80157,54720],{"class":53},[36,80159,707],{"class":49},[36,80161,14958],{"class":53},[36,80163,1188],{"class":49},[36,80165,80002],{"class":53},[36,80167,2767],{"class":49},[36,80169,14958],{"class":53},[36,80171,2977],{"class":49},[36,80173,80011],{"class":53},[36,80175,80176,80178,80180,80182],{"class":38,"line":46},[36,80177,80016],{"class":53},[36,80179,60737],{"class":4500},[36,80181,80117],{"class":53},[36,80183,80027],{"class":42},[36,80185,80186,80188,80190,80192],{"class":38,"line":82},[36,80187,80016],{"class":53},[36,80189,60737],{"class":4500},[36,80191,80128],{"class":53},[36,80193,80042],{"class":42},[36,80195,80196,80198,80200,80202],{"class":38,"line":88},[36,80197,80016],{"class":53},[36,80199,60737],{"class":4500},[36,80201,80139],{"class":53},[36,80203,80076],{"class":42},[36,80205,80206,80208,80210,80213],{"class":38,"line":195},[36,80207,80016],{"class":53},[36,80209,60737],{"class":4500},[36,80211,80212],{"class":53},"(d)",[36,80214,80215],{"class":42},"  \u002F\u002F4\n",[997,80217,80219],{"id":80218},"_462-对象解构","4.6.2 对象解构",[19,80221,80222],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,80224,80225],{},"用的非常非常多！！！！！！",[24515,80227,80229],{"id":80228},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,80231,80232],{},"基本语法：",[433,80234,80235,80238,80241,80244],{},[436,80236,80237],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[436,80239,80240],{},"对象属性的值将被赋值给与属性名相同的变量",[436,80242,80243],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[436,80245,80246],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,80248,80250],{"className":53129,"code":80249,"language":53131,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,80251,80252,80257,80262,80267,80271],{"__ignoreMap":31},[36,80253,80254],{"class":38,"line":39},[36,80255,80256],{"class":53},"const obj = {\n",[36,80258,80259],{"class":38,"line":46},[36,80260,80261],{"class":53},"   uname: 'pink老师',\n",[36,80263,80264],{"class":38,"line":82},[36,80265,80266],{"class":53},"   age: 18,\n",[36,80268,80269],{"class":38,"line":88},[36,80270,4103],{"class":53},[36,80272,80273],{"class":38,"line":195},[36,80274,80275],{"class":53},"const { uname, age } = obj\n",[19,80277,80278],{},"上方代码这样写等价于：",[19,80280,80281],{},"const uname等价于obj.uname",[19,80283,80284],{},"变量名可以重新改名：",[19,80286,80287],{},"const uname='red老师'",[19,80289,80290],{},"const user={",[19,80292,80293],{},"  uname:'pink老师',",[19,80295,80296],{},"  age:18",[19,80298,2070],{},[19,80300,80301],{},"const {uname,age}=user",[19,80303,80304],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80306,80307],{},"const {旧变量名：新变量名}=对象",[19,80309,80310],{},"const {uname:username,age}=user",[24515,80312,80314],{"id":80313},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80316,80317],{},[4000,80318],{"alt":31,"src":80319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24515,80321,80323],{"id":80322},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80325,80326],{},[4000,80327],{"alt":31,"src":80328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,80330,80332],{"className":55561,"code":80331,"language":55563,"meta":31,"style":31},"  \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",[33,80333,80334,80342,80347,80352,80357,80362,80367,80372,80377,80382,80386,80391,80396],{"__ignoreMap":31},[36,80335,80336,80338,80340],{"class":38,"line":39},[36,80337,54638],{"class":53},[36,80339,54307],{"class":53794},[36,80341,53801],{"class":53},[36,80343,80344],{"class":38,"line":46},[36,80345,80346],{"class":53},"    const pig = {\n",[36,80348,80349],{"class":38,"line":82},[36,80350,80351],{"class":53},"      name: '佩奇',\n",[36,80353,80354],{"class":38,"line":88},[36,80355,80356],{"class":53},"      family: {\n",[36,80358,80359],{"class":38,"line":195},[36,80360,80361],{"class":53},"        mother: '猪妈妈',\n",[36,80363,80364],{"class":38,"line":1517},[36,80365,80366],{"class":53},"        father: '猪爸爸',\n",[36,80368,80369],{"class":38,"line":2421},[36,80370,80371],{"class":53},"        sister: '乔治'\n",[36,80373,80374],{"class":38,"line":2446},[36,80375,80376],{"class":53},"      },\n",[36,80378,80379],{"class":38,"line":2469},[36,80380,80381],{"class":53},"      age: 6\n",[36,80383,80384],{"class":38,"line":2492},[36,80385,4721],{"class":53},[36,80387,80388],{"class":38,"line":4150},[36,80389,80390],{"class":53},"    \u002F\u002F 多级对象解构\n",[36,80392,80393],{"class":38,"line":4155},[36,80394,80395],{"class":53},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,80397,80398,80400,80402],{"class":38,"line":4161},[36,80399,54911],{"class":53},[36,80401,54307],{"class":53794},[36,80403,53801],{"class":53},[19,80405,80406],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,80408,80411],{"className":80409,"code":80410,"language":78932,"meta":31,"style":31},"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",[33,80412,80413,80418,80429,80441,80453,80462,80466,80477,80489,80499,80504,80508,80518,80529,80538,80542,80546,80556,80567,80576,80580,80585],{"__ignoreMap":31},[36,80414,80415],{"class":38,"line":39},[36,80416,80417],{"class":42},"    \u002F\u002F 这是后台传递过来的数据\n",[36,80419,80420,80422,80425,80427],{"class":38,"line":46},[36,80421,13744],{"class":114},[36,80423,80424],{"class":53}," msg ",[36,80426,115],{"class":114},[36,80428,18091],{"class":53},[36,80430,80431,80434,80436,80439],{"class":38,"line":82},[36,80432,80433],{"class":57},"      \"code\"",[36,80435,3535],{"class":114},[36,80437,80438],{"class":49}," 200",[36,80440,33970],{"class":53},[36,80442,80443,80446,80448,80451],{"class":38,"line":88},[36,80444,80445],{"class":57},"      \"msg\"",[36,80447,3535],{"class":114},[36,80449,80450],{"class":57}," \"获取新闻列表成功\"",[36,80452,33970],{"class":53},[36,80454,80455,80458,80460],{"class":38,"line":195},[36,80456,80457],{"class":57},"      \"data\"",[36,80459,3535],{"class":114},[36,80461,57938],{"class":53},[36,80463,80464],{"class":38,"line":1517},[36,80465,5042],{"class":53},[36,80467,80468,80471,80473,80475],{"class":38,"line":2421},[36,80469,80470],{"class":57},"          \"id\"",[36,80472,3535],{"class":114},[36,80474,733],{"class":49},[36,80476,33970],{"class":53},[36,80478,80479,80482,80484,80487],{"class":38,"line":2446},[36,80480,80481],{"class":57},"          \"title\"",[36,80483,3535],{"class":114},[36,80485,80486],{"class":57}," \"5G商用自己，三大运用商收入下降\"",[36,80488,33970],{"class":53},[36,80490,80491,80494,80496],{"class":38,"line":2469},[36,80492,80493],{"class":57},"          \"count\"",[36,80495,3535],{"class":114},[36,80497,80498],{"class":49}," 58\n",[36,80500,80501],{"class":38,"line":2492},[36,80502,80503],{"class":53},"        },\n",[36,80505,80506],{"class":38,"line":4150},[36,80507,5042],{"class":53},[36,80509,80510,80512,80514,80516],{"class":38,"line":4155},[36,80511,80470],{"class":57},[36,80513,3535],{"class":114},[36,80515,1140],{"class":49},[36,80517,33970],{"class":53},[36,80519,80520,80522,80524,80527],{"class":38,"line":4161},[36,80521,80481],{"class":57},[36,80523,3535],{"class":114},[36,80525,80526],{"class":57}," \"国际媒体头条速览\"",[36,80528,33970],{"class":53},[36,80530,80531,80533,80535],{"class":38,"line":4166},[36,80532,80493],{"class":57},[36,80534,3535],{"class":114},[36,80536,80537],{"class":49}," 56\n",[36,80539,80540],{"class":38,"line":4180},[36,80541,80503],{"class":53},[36,80543,80544],{"class":38,"line":4185},[36,80545,5042],{"class":53},[36,80547,80548,80550,80552,80554],{"class":38,"line":4191},[36,80549,80470],{"class":57},[36,80551,3535],{"class":114},[36,80553,1194],{"class":49},[36,80555,33970],{"class":53},[36,80557,80558,80560,80562,80565],{"class":38,"line":4212},[36,80559,80481],{"class":57},[36,80561,3535],{"class":114},[36,80563,80564],{"class":57}," \"乌克兰和俄罗斯持续冲突\"",[36,80566,33970],{"class":53},[36,80568,80569,80571,80573],{"class":38,"line":4217},[36,80570,80493],{"class":57},[36,80572,3535],{"class":114},[36,80574,80575],{"class":49}," 1669\n",[36,80577,80578],{"class":38,"line":4231},[36,80579,80503],{"class":53},[36,80581,80582],{"class":38,"line":4236},[36,80583,80584],{"class":53},"      ]\n",[36,80586,80587],{"class":38,"line":4264},[36,80588,4721],{"class":53},[19,80590,80591],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80593,80594],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80596,80597],{},"\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,80599,80600],{},"function({data}) {",[19,80602,80603],{},"console.log(data)",[19,80605,2070],{},[19,80607,80608],{},"render(msg)",[19,80610,80611],{},"实参传递给形参的时候解构了",[19,80613,80614],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80616,80617],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80619,80620],{},"function render({data:mydata}) {",[19,80622,80623],{},"  console.log(data)",[19,80625,2070],{},[997,80627,80629],{"id":80628},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80631,80632],{},"有两种情况：一个是数组结构，一个是立即执行函数",[433,80634,80635],{},[436,80636,80637],{},"如果对一个数组进行遍历，有两种方式：",[19,80639,80640],{},"①法1",[19,80642,80643],{},"const arr=[1,2,3]",[19,80645,80646],{},"arr.map(function(item,index) {",[19,80648,80649],{},"  console.log(item)",[19,80651,54958],{},[19,80653,80654],{},[4000,80655],{"alt":31,"src":80656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80658,80659],{},"②法2",[19,80661,80662],{},"const str='pink'",[19,80664,80665],{},"[1,2,3].map(function(item,index) {",[19,80667,80668],{},"console.log(item)",[19,80670,54958],{},[19,80672,80673],{},[4000,80674],{"alt":31,"src":80675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80677,80678],{},"此时会报错",[19,80680,80681],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80683,80668],{},[19,80685,54958],{},[19,80687,80688],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80690,80692],{"id":80691},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80694,80695],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80697,80698],{},"可以理解为加强版的for循环",[19,80700,80701],{},[4000,80702],{"alt":31,"src":80703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80705,80706],{},"里边不写return，不返回数组，只遍历不返回",[19,80708,80709],{},"map是返回数组",[19,80711,80712],{},"forEach主要用于遍历数组对象",[26,80714,80716],{"className":55561,"code":80715,"language":55563,"meta":31,"style":31},"  \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",[33,80717,80718,80726,80731,80736,80741,80746,80750,80755],{"__ignoreMap":31},[36,80719,80720,80722,80724],{"class":38,"line":39},[36,80721,54638],{"class":53},[36,80723,54307],{"class":53794},[36,80725,53801],{"class":53},[36,80727,80728],{"class":38,"line":46},[36,80729,80730],{"class":53},"    const arr = ['red', 'green', 'pink']\n",[36,80732,80733],{"class":38,"line":82},[36,80734,80735],{"class":53},"    const result = arr.forEach(function (item, index) {\n",[36,80737,80738],{"class":38,"line":88},[36,80739,80740],{"class":53},"      console.log(item)\n",[36,80742,80743],{"class":38,"line":195},[36,80744,80745],{"class":53},"      console.log(index)\n",[36,80747,80748],{"class":38,"line":1517},[36,80749,35962],{"class":53},[36,80751,80752],{"class":38,"line":2421},[36,80753,80754],{"class":53},"    console.log(result)\n",[36,80756,80757,80759,80761],{"class":38,"line":2446},[36,80758,54911],{"class":53},[36,80760,54307],{"class":53794},[36,80762,53801],{"class":53},[19,80764,80765],{},[4000,80766],{"alt":31,"src":80767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80769,80771],{"id":80770},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80773,80774],{},[4000,80775],{"alt":31,"src":80776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80778,80779],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,80781,80783],{"className":55561,"code":80782,"language":55563,"meta":31,"style":31},"\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",[33,80784,80785,80793,80801,80806,80811,80815,80819,80824,80828,80833,80841],{"__ignoreMap":31},[36,80786,80787,80789,80791],{"class":38,"line":39},[36,80788,1507],{"class":53},[36,80790,54294],{"class":53794},[36,80792,53801],{"class":53},[36,80794,80795,80797,80799],{"class":38,"line":46},[36,80796,54638],{"class":53},[36,80798,54307],{"class":53794},[36,80800,53801],{"class":53},[36,80802,80803],{"class":38,"line":82},[36,80804,80805],{"class":53},"    const arr = [10, 20, 30]\n",[36,80807,80808],{"class":38,"line":88},[36,80809,80810],{"class":53},"    const newArr = arr.filter(function (item, index) {\n",[36,80812,80813],{"class":38,"line":195},[36,80814,80740],{"class":53},[36,80816,80817],{"class":38,"line":1517},[36,80818,80745],{"class":53},[36,80820,80821],{"class":38,"line":2421},[36,80822,80823],{"class":53},"      return item >= 20\n",[36,80825,80826],{"class":38,"line":2446},[36,80827,35962],{"class":53},[36,80829,80830],{"class":38,"line":2469},[36,80831,80832],{"class":53},"    console.log(newArr)\n",[36,80834,80835,80837,80839],{"class":38,"line":2492},[36,80836,54911],{"class":53},[36,80838,54307],{"class":53794},[36,80840,53801],{"class":53},[36,80842,80843,80845,80847],{"class":38,"line":4150},[36,80844,54279],{"class":53},[36,80846,54294],{"class":53794},[36,80848,53801],{"class":53},[19,80850,80851],{},"这个也可以写成箭头函数：",[26,80853,80855],{"className":53129,"code":80854,"language":53131,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,80856,80857],{"__ignoreMap":31},[36,80858,80859],{"class":38,"line":39},[36,80860,80854],{"class":53},[14,80862,80864],{"id":80863},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80866,80867],{},[4000,80868],{"alt":31,"src":80869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80871,80872],{},"步骤：",[19,80874,80875],{},"①：渲染页面模块",[3680,80877,80878,80881],{},[436,80879,80880],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[436,80882,80883],{},"用forEach+字符串的形式",[19,80885,80886],{},"②：点击不同需求，显示不同页面内容",[3680,80888,80889,80892,80895,80898,80901],{},[436,80890,80891],{},"点击采取事件委托方式 .filter",[436,80893,80894],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[436,80896,80897],{},"筛选条件是根据点击的 data-index 来判断",[436,80899,80900],{},"可以使用对象解构，把事件对象解构",[436,80902,80903],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,80905,80907],{"className":53129,"code":80906,"language":53131,"meta":31,"style":31},"\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",[33,80908,80909,80919,80933,80937,80945,80959,80979,80991,80999,81005,81015,81025,81035,81039,81043,81049,81062,81074,81084,81096,81100,81104,81111,81124,81136,81153,81171,81184,81188,81192,81204,81214,81218,81222,81229,81270,81297,81307,81311,81315,81323,81335,81339,81343,81351,81363,81375,81386,81390,81394,81403,81415,81426,81430,81434,81443,81455,81467,81471,81475,81482,81492,81504,81516,81531,81535,81539,81547,81563,81573,81583,81593,81605,81609,81613,81623,81634,81644,81648,81656,81664,81668,81676,81691,81717,81742,81767,81786,81794,81808,81813,81818,81823,81828,81833,81841,81849,81854,81865,81870,81880,81890,81900,81910,81914,81918,81927,81936,81945,81954,81958,81962,81971,81980,81989,81998,82002,82006,82015,82024,82033,82042,82046,82050,82059,82068,82077,82086,82090,82094,82103,82112,82121,82130,82134,82138,82147,82156,82165,82174,82178,82182,82191,82200,82208,82217,82221,82225,82229,82234,82246,82251,82263,82267,82284,82310,82319,82324,82334,82344,82353,82358,82363,82367,82372,82389,82393,82398,82406,82411,82438,82443,82463,82468,82480,82485,82490,82495,82506,82520,82557,82575,82608,82625,82649,82653,82658,82664,82668,82672,82676,82684,82692,82696],{"__ignoreMap":31},[36,80910,80911,80913,80915,80917],{"class":38,"line":39},[36,80912,53791],{"class":53},[36,80914,53795],{"class":53794},[36,80916,53798],{"class":4500},[36,80918,53801],{"class":53},[36,80920,80921,80923,80925,80927,80929,80931],{"class":38,"line":46},[36,80922,1507],{"class":53},[36,80924,53131],{"class":53794},[36,80926,53810],{"class":4500},[36,80928,115],{"class":53},[36,80930,53815],{"class":57},[36,80932,53801],{"class":53},[36,80934,80935],{"class":38,"line":82},[36,80936,546],{"emptyLinePlaceholder":545},[36,80938,80939,80941,80943],{"class":38,"line":88},[36,80940,1507],{"class":53},[36,80942,53828],{"class":53794},[36,80944,53801],{"class":53},[36,80946,80947,80949,80951,80953,80955,80957],{"class":38,"line":195},[36,80948,54638],{"class":53},[36,80950,53838],{"class":53794},[36,80952,53841],{"class":4500},[36,80954,115],{"class":53},[36,80956,53846],{"class":57},[36,80958,53801],{"class":53},[36,80960,80961,80963,80965,80967,80969,80971,80973,80975,80977],{"class":38,"line":1517},[36,80962,54638],{"class":53},[36,80964,53838],{"class":53794},[36,80966,17440],{"class":4500},[36,80968,115],{"class":53},[36,80970,53885],{"class":57},[36,80972,53865],{"class":4500},[36,80974,115],{"class":53},[36,80976,53892],{"class":57},[36,80978,53801],{"class":53},[36,80980,80981,80983,80985,80987,80989],{"class":38,"line":2421},[36,80982,54638],{"class":53},[36,80984,53901],{"class":53794},[36,80986,53904],{"class":53},[36,80988,53901],{"class":53794},[36,80990,53801],{"class":53},[36,80992,80993,80995,80997],{"class":38,"line":2446},[36,80994,54638],{"class":53},[36,80996,2602],{"class":53794},[36,80998,53801],{"class":53},[36,81000,81001,81003],{"class":38,"line":2469},[36,81002,8930],{"class":53794},[36,81004,18091],{"class":53},[36,81006,81007,81009,81011,81013],{"class":38,"line":2492},[36,81008,57186],{"class":49},[36,81010,53931],{"class":53},[36,81012,713],{"class":49},[36,81014,3833],{"class":53},[36,81016,81017,81019,81021,81023],{"class":38,"line":4150},[36,81018,57197],{"class":49},[36,81020,53931],{"class":53},[36,81022,713],{"class":49},[36,81024,3833],{"class":53},[36,81026,81027,81029,81031,81033],{"class":38,"line":4155},[36,81028,75082],{"class":49},[36,81030,53931],{"class":53},[36,81032,62994],{"class":49},[36,81034,3833],{"class":53},[36,81036,81037],{"class":38,"line":4161},[36,81038,4721],{"class":53},[36,81040,81041],{"class":38,"line":4166},[36,81042,546],{"emptyLinePlaceholder":545},[36,81044,81045,81047],{"class":38,"line":4180},[36,81046,64611],{"class":4500},[36,81048,18091],{"class":53},[36,81050,81051,81053,81055,81058,81060],{"class":38,"line":4185},[36,81052,57262],{"class":49},[36,81054,53931],{"class":53},[36,81056,81057],{"class":49},"990",[36,81059,53986],{"class":114},[36,81061,3833],{"class":53},[36,81063,81064,81066,81068,81070,81072],{"class":38,"line":4191},[36,81065,57197],{"class":49},[36,81067,53931],{"class":53},[36,81069,713],{"class":49},[36,81071,54050],{"class":49},[36,81073,3833],{"class":53},[36,81075,81076,81078,81080,81082],{"class":38,"line":4212},[36,81077,57500],{"class":49},[36,81079,53931],{"class":53},[36,81081,53971],{"class":49},[36,81083,3833],{"class":53},[36,81085,81086,81089,81091,81094],{"class":38,"line":4217},[36,81087,81088],{"class":49},"      flex-wrap",[36,81090,53931],{"class":53},[36,81092,81093],{"class":49},"wrap",[36,81095,3833],{"class":53},[36,81097,81098],{"class":38,"line":4231},[36,81099,4721],{"class":53},[36,81101,81102],{"class":38,"line":4236},[36,81103,546],{"emptyLinePlaceholder":545},[36,81105,81106,81109],{"class":38,"line":4264},[36,81107,81108],{"class":4500},"    .item",[36,81110,18091],{"class":53},[36,81112,81113,81115,81117,81120,81122],{"class":38,"line":4269},[36,81114,57262],{"class":49},[36,81116,53931],{"class":53},[36,81118,81119],{"class":49},"240",[36,81121,53986],{"class":114},[36,81123,3833],{"class":53},[36,81125,81126,81128,81130,81132,81134],{"class":38,"line":4286},[36,81127,64488],{"class":49},[36,81129,53931],{"class":53},[36,81131,1317],{"class":49},[36,81133,53986],{"class":114},[36,81135,3833],{"class":53},[36,81137,81138,81140,81142,81144,81146,81149,81151],{"class":38,"line":4291},[36,81139,57186],{"class":49},[36,81141,53931],{"class":53},[36,81143,3376],{"class":49},[36,81145,53986],{"class":114},[36,81147,81148],{"class":49}," 30",[36,81150,53986],{"class":114},[36,81152,3833],{"class":53},[36,81154,81155,81157,81159,81161,81164,81167,81169],{"class":38,"line":4296},[36,81156,64348],{"class":49},[36,81158,53931],{"class":53},[36,81160,30632],{"class":49},[36,81162,81163],{"class":49}," ease",[36,81165,81166],{"class":49}," .5",[36,81168,3371],{"class":114},[36,81170,3833],{"class":53},[36,81172,81173,81176,81178,81180,81182],{"class":38,"line":4301},[36,81174,81175],{"class":49},"      margin-bottom",[36,81177,53931],{"class":53},[36,81179,3376],{"class":49},[36,81181,53986],{"class":114},[36,81183,3833],{"class":53},[36,81185,81186],{"class":38,"line":4315},[36,81187,4721],{"class":53},[36,81189,81190],{"class":38,"line":4320},[36,81191,546],{"emptyLinePlaceholder":545},[36,81193,81194,81197,81199,81202],{"class":38,"line":5109},[36,81195,81196],{"class":4500},"    .item:nth-child",[36,81198,54],{"class":53},[36,81200,81201],{"class":49},"4n",[36,81203,14965],{"class":53},[36,81205,81206,81208,81210,81212],{"class":38,"line":5123},[36,81207,64488],{"class":49},[36,81209,53931],{"class":53},[36,81211,713],{"class":49},[36,81213,3833],{"class":53},[36,81215,81216],{"class":38,"line":5131},[36,81217,4721],{"class":53},[36,81219,81220],{"class":38,"line":5136},[36,81221,546],{"emptyLinePlaceholder":545},[36,81223,81224,81227],{"class":38,"line":5142},[36,81225,81226],{"class":4500},"    .item:hover",[36,81228,18091],{"class":53},[36,81230,81231,81234,81236,81238,81240,81242,81244,81246,81248,81251,81253,81255,81257,81259,81261,81263,81265,81268],{"class":38,"line":5148},[36,81232,81233],{"class":49},"      box-shadow",[36,81235,53931],{"class":53},[36,81237,713],{"class":49},[36,81239,53986],{"class":114},[36,81241,6624],{"class":49},[36,81243,53986],{"class":114},[36,81245,1323],{"class":49},[36,81247,53986],{"class":114},[36,81249,81250],{"class":49}," rgba",[36,81252,54],{"class":53},[36,81254,713],{"class":49},[36,81256,14958],{"class":53},[36,81258,713],{"class":49},[36,81260,14958],{"class":53},[36,81262,713],{"class":49},[36,81264,14958],{"class":53},[36,81266,81267],{"class":49},".2",[36,81269,5251],{"class":53},[36,81271,81272,81275,81277,81280,81282,81284,81286,81289,81291,81293,81295],{"class":38,"line":5153},[36,81273,81274],{"class":49},"      transform",[36,81276,53931],{"class":53},[36,81278,81279],{"class":49},"translate3d",[36,81281,54],{"class":53},[36,81283,713],{"class":49},[36,81285,14958],{"class":53},[36,81287,81288],{"class":49},"-4",[36,81290,53986],{"class":114},[36,81292,14958],{"class":53},[36,81294,713],{"class":49},[36,81296,5251],{"class":53},[36,81298,81299,81301,81303,81305],{"class":38,"line":10475},[36,81300,64513],{"class":49},[36,81302,53931],{"class":53},[36,81304,64518],{"class":49},[36,81306,3833],{"class":53},[36,81308,81309],{"class":38,"line":10499},[36,81310,4721],{"class":53},[36,81312,81313],{"class":38,"line":10504},[36,81314,546],{"emptyLinePlaceholder":545},[36,81316,81317,81319,81321],{"class":38,"line":10510},[36,81318,81108],{"class":4500},[36,81320,58106],{"class":53794},[36,81322,18091],{"class":53},[36,81324,81325,81327,81329,81331,81333],{"class":38,"line":10537},[36,81326,57262],{"class":49},[36,81328,53931],{"class":53},[36,81330,166],{"class":49},[36,81332,1095],{"class":114},[36,81334,3833],{"class":53},[36,81336,81337],{"class":38,"line":10542},[36,81338,4721],{"class":53},[36,81340,81341],{"class":38,"line":10548},[36,81342,546],{"emptyLinePlaceholder":545},[36,81344,81345,81347,81349],{"class":38,"line":10560},[36,81346,81108],{"class":4500},[36,81348,64792],{"class":4500},[36,81350,18091],{"class":53},[36,81352,81353,81355,81357,81359,81361],{"class":38,"line":10572},[36,81354,57413],{"class":49},[36,81356,53931],{"class":53},[36,81358,3326],{"class":49},[36,81360,53986],{"class":114},[36,81362,3833],{"class":53},[36,81364,81365,81367,81369,81371,81373],{"class":38,"line":10584},[36,81366,81175],{"class":49},[36,81368,53931],{"class":53},[36,81370,1317],{"class":49},[36,81372,53986],{"class":114},[36,81374,3833],{"class":53},[36,81376,81377,81379,81381,81384],{"class":38,"line":12241},[36,81378,59906],{"class":49},[36,81380,53931],{"class":53},[36,81382,81383],{"class":49},"#666",[36,81385,3833],{"class":53},[36,81387,81388],{"class":38,"line":12266},[36,81389,4721],{"class":53},[36,81391,81392],{"class":38,"line":12289},[36,81393,546],{"emptyLinePlaceholder":545},[36,81395,81396,81398,81401],{"class":38,"line":12313},[36,81397,81108],{"class":4500},[36,81399,81400],{"class":4500}," .price",[36,81402,18091],{"class":53},[36,81404,81405,81407,81409,81411,81413],{"class":38,"line":12318},[36,81406,57413],{"class":49},[36,81408,53931],{"class":53},[36,81410,3426],{"class":49},[36,81412,53986],{"class":114},[36,81414,3833],{"class":53},[36,81416,81417,81419,81421,81424],{"class":38,"line":12323},[36,81418,59906],{"class":49},[36,81420,53931],{"class":53},[36,81422,81423],{"class":49},"firebrick",[36,81425,3833],{"class":53},[36,81427,81428],{"class":38,"line":12328},[36,81429,4721],{"class":53},[36,81431,81432],{"class":38,"line":12337},[36,81433,546],{"emptyLinePlaceholder":545},[36,81435,81436,81438,81441],{"class":38,"line":12342},[36,81437,81108],{"class":4500},[36,81439,81440],{"class":4500}," .price::before",[36,81442,18091],{"class":53},[36,81444,81445,81448,81450,81453],{"class":38,"line":12348},[36,81446,81447],{"class":49},"      content",[36,81449,53931],{"class":53},[36,81451,81452],{"class":57},"'￥'",[36,81454,3833],{"class":53},[36,81456,81457,81459,81461,81463,81465],{"class":38,"line":12369},[36,81458,57413],{"class":49},[36,81460,53931],{"class":53},[36,81462,3226],{"class":49},[36,81464,53986],{"class":114},[36,81466,3833],{"class":53},[36,81468,81469],{"class":38,"line":12375},[36,81470,4721],{"class":53},[36,81472,81473],{"class":38,"line":12389},[36,81474,546],{"emptyLinePlaceholder":545},[36,81476,81477,81480],{"class":38,"line":12395},[36,81478,81479],{"class":4500},"    .filter",[36,81481,18091],{"class":53},[36,81483,81484,81486,81488,81490],{"class":38,"line":12422},[36,81485,57500],{"class":49},[36,81487,53931],{"class":53},[36,81489,53971],{"class":49},[36,81491,3833],{"class":53},[36,81493,81494,81496,81498,81500,81502],{"class":38,"line":12431},[36,81495,57262],{"class":49},[36,81497,53931],{"class":53},[36,81499,81057],{"class":49},[36,81501,53986],{"class":114},[36,81503,3833],{"class":53},[36,81505,81506,81508,81510,81512,81514],{"class":38,"line":12437},[36,81507,57197],{"class":49},[36,81509,53931],{"class":53},[36,81511,713],{"class":49},[36,81513,54050],{"class":49},[36,81515,3833],{"class":53},[36,81517,81518,81520,81522,81524,81526,81528],{"class":38,"line":12445},[36,81519,57186],{"class":49},[36,81521,53931],{"class":53},[36,81523,3332],{"class":49},[36,81525,53986],{"class":114},[36,81527,81148],{"class":49},[36,81529,81530],{"class":114},"px\n",[36,81532,81533],{"class":38,"line":12450},[36,81534,4721],{"class":53},[36,81536,81537],{"class":38,"line":19122},[36,81538,546],{"emptyLinePlaceholder":545},[36,81540,81541,81543,81545],{"class":38,"line":19128},[36,81542,81479],{"class":4500},[36,81544,3936],{"class":53794},[36,81546,18091],{"class":53},[36,81548,81549,81551,81553,81555,81557,81559,81561],{"class":38,"line":19151},[36,81550,57186],{"class":49},[36,81552,53931],{"class":53},[36,81554,1317],{"class":49},[36,81556,53986],{"class":114},[36,81558,11477],{"class":49},[36,81560,53986],{"class":114},[36,81562,3833],{"class":53},[36,81564,81565,81567,81569,81571],{"class":38,"line":19157},[36,81566,64209],{"class":49},[36,81568,53931],{"class":53},[36,81570,64306],{"class":49},[36,81572,3833],{"class":53},[36,81574,81575,81577,81579,81581],{"class":38,"line":19180},[36,81576,59906],{"class":49},[36,81578,53931],{"class":53},[36,81580,81383],{"class":49},[36,81582,3833],{"class":53},[36,81584,81585,81587,81589,81591],{"class":38,"line":19194},[36,81586,66458],{"class":49},[36,81588,53931],{"class":53},[36,81590,57228],{"class":49},[36,81592,3833],{"class":53},[36,81594,81595,81597,81599,81601,81603],{"class":38,"line":19214},[36,81596,64238],{"class":49},[36,81598,53931],{"class":53},[36,81600,3376],{"class":49},[36,81602,53986],{"class":114},[36,81604,3833],{"class":53},[36,81606,81607],{"class":38,"line":19220},[36,81608,4721],{"class":53},[36,81610,81611],{"class":38,"line":19231},[36,81612,546],{"emptyLinePlaceholder":545},[36,81614,81615,81617,81619,81621],{"class":38,"line":19254},[36,81616,81479],{"class":4500},[36,81618,3936],{"class":53794},[36,81620,64388],{"class":4500},[36,81622,18091],{"class":53},[36,81624,81625,81627,81629,81632],{"class":38,"line":19276},[36,81626,57375],{"class":49},[36,81628,53931],{"class":53},[36,81630,81631],{"class":49},"#05943c",[36,81633,3833],{"class":53},[36,81635,81636,81638,81640,81642],{"class":38,"line":19281},[36,81637,59906],{"class":49},[36,81639,53931],{"class":53},[36,81641,63330],{"class":49},[36,81643,3833],{"class":53},[36,81645,81646],{"class":38,"line":19287},[36,81647,4721],{"class":53},[36,81649,81650,81652,81654],{"class":38,"line":19301},[36,81651,54911],{"class":53},[36,81653,2602],{"class":53794},[36,81655,53801],{"class":53},[36,81657,81658,81660,81662],{"class":38,"line":19314},[36,81659,54279],{"class":53},[36,81661,53828],{"class":53794},[36,81663,53801],{"class":53},[36,81665,81666],{"class":38,"line":19319},[36,81667,546],{"emptyLinePlaceholder":545},[36,81669,81670,81672,81674],{"class":38,"line":19333},[36,81671,1507],{"class":53},[36,81673,54294],{"class":53794},[36,81675,53801],{"class":53},[36,81677,81678,81680,81682,81684,81686,81689],{"class":38,"line":19338},[36,81679,54638],{"class":53},[36,81681,54105],{"class":53794},[36,81683,55980],{"class":4500},[36,81685,115],{"class":53},[36,81687,81688],{"class":57},"\"filter\"",[36,81690,53801],{"class":53},[36,81692,81693,81695,81697,81699,81701,81703,81706,81708,81710,81713,81715],{"class":38,"line":19344},[36,81694,53835],{"class":53},[36,81696,2923],{"class":53794},[36,81698,63545],{"class":4500},[36,81700,115],{"class":53},[36,81702,63550],{"class":57},[36,81704,81705],{"class":4500}," data-index",[36,81707,115],{"class":53},[36,81709,6209],{"class":57},[36,81711,81712],{"class":53},">0-100元\u003C\u002F",[36,81714,2923],{"class":53794},[36,81716,53801],{"class":53},[36,81718,81719,81721,81723,81725,81727,81729,81731,81733,81735,81738,81740],{"class":38,"line":19349},[36,81720,53835],{"class":53},[36,81722,2923],{"class":53794},[36,81724,63545],{"class":4500},[36,81726,115],{"class":53},[36,81728,63550],{"class":57},[36,81730,81705],{"class":4500},[36,81732,115],{"class":53},[36,81734,6232],{"class":57},[36,81736,81737],{"class":53},">100-300元\u003C\u002F",[36,81739,2923],{"class":53794},[36,81741,53801],{"class":53},[36,81743,81744,81746,81748,81750,81752,81754,81756,81758,81760,81763,81765],{"class":38,"line":19363},[36,81745,53835],{"class":53},[36,81747,2923],{"class":53794},[36,81749,63545],{"class":4500},[36,81751,115],{"class":53},[36,81753,63550],{"class":57},[36,81755,81705],{"class":4500},[36,81757,115],{"class":53},[36,81759,6245],{"class":57},[36,81761,81762],{"class":53},">300元以上\u003C\u002F",[36,81764,2923],{"class":53794},[36,81766,53801],{"class":53},[36,81768,81769,81771,81773,81775,81777,81779,81782,81784],{"class":38,"line":19368},[36,81770,53835],{"class":53},[36,81772,2923],{"class":53794},[36,81774,63545],{"class":4500},[36,81776,115],{"class":53},[36,81778,63550],{"class":57},[36,81780,81781],{"class":53},">全部区间\u003C\u002F",[36,81783,2923],{"class":53794},[36,81785,53801],{"class":53},[36,81787,81788,81790,81792],{"class":38,"line":19373},[36,81789,54911],{"class":53},[36,81791,54105],{"class":53794},[36,81793,53801],{"class":53},[36,81795,81796,81798,81800,81802,81804,81806],{"class":38,"line":19387},[36,81797,54638],{"class":53},[36,81799,54105],{"class":53794},[36,81801,55980],{"class":4500},[36,81803,115],{"class":53},[36,81805,65096],{"class":57},[36,81807,53801],{"class":53},[36,81809,81810],{"class":38,"line":19399},[36,81811,81812],{"class":42},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,81814,81815],{"class":38,"line":19404},[36,81816,81817],{"class":42},"      \u003Cimg src=\"\" alt=\"\">\n",[36,81819,81820],{"class":38,"line":19417},[36,81821,81822],{"class":42},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,81824,81825],{"class":38,"line":19422},[36,81826,81827],{"class":42},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,81829,81830],{"class":38,"line":19427},[36,81831,81832],{"class":42},"    \u003C\u002Fdiv> -->\n",[36,81834,81835,81837,81839],{"class":38,"line":19432},[36,81836,54911],{"class":53},[36,81838,54105],{"class":53794},[36,81840,53801],{"class":53},[36,81842,81843,81845,81847],{"class":38,"line":19445},[36,81844,54638],{"class":53},[36,81846,54307],{"class":53794},[36,81848,53801],{"class":53},[36,81850,81851],{"class":38,"line":19450},[36,81852,81853],{"class":42},"    \u002F\u002F 2. 初始化数据\n",[36,81855,81856,81858,81861,81863],{"class":38,"line":35135},[36,81857,13744],{"class":114},[36,81859,81860],{"class":49}," goodsList",[36,81862,498],{"class":114},[36,81864,57938],{"class":53},[36,81866,81867],{"class":38,"line":35141},[36,81868,81869],{"class":53},"      {\n",[36,81871,81872,81875,81878],{"class":38,"line":35147},[36,81873,81874],{"class":53},"        id: ",[36,81876,81877],{"class":57},"'4001172'",[36,81879,33970],{"class":53},[36,81881,81882,81885,81888],{"class":38,"line":35153},[36,81883,81884],{"class":53},"        name: ",[36,81886,81887],{"class":57},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,81889,33970],{"class":53},[36,81891,81892,81895,81898],{"class":38,"line":35159},[36,81893,81894],{"class":53},"        price: ",[36,81896,81897],{"class":57},"'289.00'",[36,81899,33970],{"class":53},[36,81901,81902,81905,81908],{"class":38,"line":35170},[36,81903,81904],{"class":53},"        picture: ",[36,81906,81907],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,81909,33970],{"class":53},[36,81911,81912],{"class":38,"line":35176},[36,81913,80376],{"class":53},[36,81915,81916],{"class":38,"line":35196},[36,81917,81869],{"class":53},[36,81919,81920,81922,81925],{"class":38,"line":35202},[36,81921,81874],{"class":53},[36,81923,81924],{"class":57},"'4001594'",[36,81926,33970],{"class":53},[36,81928,81929,81931,81934],{"class":38,"line":35213},[36,81930,81884],{"class":53},[36,81932,81933],{"class":57},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,81935,33970],{"class":53},[36,81937,81938,81940,81943],{"class":38,"line":35219},[36,81939,81894],{"class":53},[36,81941,81942],{"class":57},"'288.00'",[36,81944,33970],{"class":53},[36,81946,81947,81949,81952],{"class":38,"line":35225},[36,81948,81904],{"class":53},[36,81950,81951],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,81953,33970],{"class":53},[36,81955,81956],{"class":38,"line":35231},[36,81957,80376],{"class":53},[36,81959,81960],{"class":38,"line":35237},[36,81961,81869],{"class":53},[36,81963,81964,81966,81969],{"class":38,"line":35243},[36,81965,81874],{"class":53},[36,81967,81968],{"class":57},"'4001009'",[36,81970,33970],{"class":53},[36,81972,81973,81975,81978],{"class":38,"line":35249},[36,81974,81884],{"class":53},[36,81976,81977],{"class":57},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,81979,33970],{"class":53},[36,81981,81982,81984,81987],{"class":38,"line":35255},[36,81983,81894],{"class":53},[36,81985,81986],{"class":57},"'109.00'",[36,81988,33970],{"class":53},[36,81990,81991,81993,81996],{"class":38,"line":35275},[36,81992,81904],{"class":53},[36,81994,81995],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,81997,33970],{"class":53},[36,81999,82000],{"class":38,"line":35281},[36,82001,80376],{"class":53},[36,82003,82004],{"class":38,"line":35297},[36,82005,81869],{"class":53},[36,82007,82008,82010,82013],{"class":38,"line":35303},[36,82009,81874],{"class":53},[36,82011,82012],{"class":57},"'4001874'",[36,82014,33970],{"class":53},[36,82016,82017,82019,82022],{"class":38,"line":35317},[36,82018,81884],{"class":53},[36,82020,82021],{"class":57},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,82023,33970],{"class":53},[36,82025,82026,82028,82031],{"class":38,"line":35323},[36,82027,81894],{"class":53},[36,82029,82030],{"class":57},"'488.00'",[36,82032,33970],{"class":53},[36,82034,82035,82037,82040],{"class":38,"line":35338},[36,82036,81904],{"class":53},[36,82038,82039],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,82041,33970],{"class":53},[36,82043,82044],{"class":38,"line":35344},[36,82045,80376],{"class":53},[36,82047,82048],{"class":38,"line":35353},[36,82049,81869],{"class":53},[36,82051,82052,82054,82057],{"class":38,"line":35359},[36,82053,81874],{"class":53},[36,82055,82056],{"class":57},"'4001649'",[36,82058,33970],{"class":53},[36,82060,82061,82063,82066],{"class":38,"line":35368},[36,82062,81884],{"class":53},[36,82064,82065],{"class":57},"'大师监制龙泉青瓷茶叶罐'",[36,82067,33970],{"class":53},[36,82069,82070,82072,82075],{"class":38,"line":35374},[36,82071,81894],{"class":53},[36,82073,82074],{"class":57},"'139.00'",[36,82076,33970],{"class":53},[36,82078,82079,82081,82084],{"class":38,"line":35380},[36,82080,81904],{"class":53},[36,82082,82083],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,82085,33970],{"class":53},[36,82087,82088],{"class":38,"line":35389},[36,82089,80376],{"class":53},[36,82091,82092],{"class":38,"line":35395},[36,82093,81869],{"class":53},[36,82095,82096,82098,82101],{"class":38,"line":35406},[36,82097,81874],{"class":53},[36,82099,82100],{"class":57},"'3997185'",[36,82102,33970],{"class":53},[36,82104,82105,82107,82110],{"class":38,"line":35412},[36,82106,81884],{"class":53},[36,82108,82109],{"class":57},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,82111,33970],{"class":53},[36,82113,82114,82116,82119],{"class":38,"line":35431},[36,82115,81894],{"class":53},[36,82117,82118],{"class":57},"'108.00'",[36,82120,33970],{"class":53},[36,82122,82123,82125,82128],{"class":38,"line":35437},[36,82124,81904],{"class":53},[36,82126,82127],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,82129,33970],{"class":53},[36,82131,82132],{"class":38,"line":35448},[36,82133,80376],{"class":53},[36,82135,82136],{"class":38,"line":35454},[36,82137,81869],{"class":53},[36,82139,82140,82142,82145],{"class":38,"line":35474},[36,82141,81874],{"class":53},[36,82143,82144],{"class":57},"'3997403'",[36,82146,33970],{"class":53},[36,82148,82149,82151,82154],{"class":38,"line":35490},[36,82150,81884],{"class":53},[36,82152,82153],{"class":57},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,82155,33970],{"class":53},[36,82157,82158,82160,82163],{"class":38,"line":35496},[36,82159,81894],{"class":53},[36,82161,82162],{"class":57},"'100.00'",[36,82164,33970],{"class":53},[36,82166,82167,82169,82172],{"class":38,"line":35510},[36,82168,81904],{"class":53},[36,82170,82171],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,82173,33970],{"class":53},[36,82175,82176],{"class":38,"line":35516},[36,82177,80376],{"class":53},[36,82179,82180],{"class":38,"line":35522},[36,82181,81869],{"class":53},[36,82183,82184,82186,82189],{"class":38,"line":35533},[36,82185,81874],{"class":53},[36,82187,82188],{"class":57},"'3998274'",[36,82190,33970],{"class":53},[36,82192,82193,82195,82198],{"class":38,"line":35539},[36,82194,81884],{"class":53},[36,82196,82197],{"class":57},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,82199,33970],{"class":53},[36,82201,82202,82204,82206],{"class":38,"line":35545},[36,82203,81894],{"class":53},[36,82205,82074],{"class":57},[36,82207,33970],{"class":53},[36,82209,82210,82212,82215],{"class":38,"line":35555},[36,82211,81904],{"class":53},[36,82213,82214],{"class":57},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,82216,33970],{"class":53},[36,82218,82219],{"class":38,"line":35561},[36,82220,80376],{"class":53},[36,82222,82223],{"class":38,"line":35572},[36,82224,55603],{"class":53},[36,82226,82227],{"class":38,"line":35578},[36,82228,546],{"emptyLinePlaceholder":545},[36,82230,82231],{"class":38,"line":35588},[36,82232,82233],{"class":42},"    \u002F\u002F 1.渲染函数\n",[36,82235,82236,82238,82240,82242,82244],{"class":38,"line":35593},[36,82237,72571],{"class":114},[36,82239,72574],{"class":4500},[36,82241,54],{"class":53},[36,82243,6411],{"class":1997},[36,82245,14965],{"class":53},[36,82247,82248],{"class":38,"line":35599},[36,82249,82250],{"class":42},"      \u002F\u002F 声明空字符串\n",[36,82252,82253,82256,82259,82261],{"class":38,"line":35648},[36,82254,82255],{"class":114},"      let",[36,82257,82258],{"class":53}," str ",[36,82260,115],{"class":114},[36,82262,72591],{"class":57},[36,82264,82265],{"class":38,"line":35695},[36,82266,72596],{"class":42},[36,82268,82269,82271,82274,82276,82279,82282],{"class":38,"line":35700},[36,82270,60497],{"class":53},[36,82272,82273],{"class":4500},"forEach",[36,82275,54],{"class":53},[36,82277,82278],{"class":1997},"item",[36,82280,82281],{"class":114}," =>",[36,82283,18091],{"class":53},[36,82285,82286,82288,82291,82293,82295,82297,82299,82302,82305,82307],{"class":38,"line":35706},[36,82287,63758],{"class":114},[36,82289,82290],{"class":53}," { ",[36,82292,1998],{"class":49},[36,82294,14958],{"class":53},[36,82296,2435],{"class":49},[36,82298,14958],{"class":53},[36,82300,82301],{"class":49},"picture",[36,82303,82304],{"class":53}," } ",[36,82306,115],{"class":114},[36,82308,82309],{"class":53}," item\n",[36,82311,82312,82315,82317],{"class":38,"line":35725},[36,82313,82314],{"class":53},"        str ",[36,82316,1224],{"class":114},[36,82318,72655],{"class":57},[36,82320,82321],{"class":38,"line":35731},[36,82322,82323],{"class":57},"          \u003Cdiv class=\"item\">\n",[36,82325,82326,82329,82331],{"class":38,"line":35751},[36,82327,82328],{"class":57},"            \u003Cimg src=\"${",[36,82330,82301],{"class":53},[36,82332,82333],{"class":57},"}\" alt=\"\">\n",[36,82335,82336,82339,82341],{"class":38,"line":35757},[36,82337,82338],{"class":57},"            \u003Cp class=\"name\">${",[36,82340,1998],{"class":53},[36,82342,82343],{"class":57},"}\u003C\u002Fp>\n",[36,82345,82346,82349,82351],{"class":38,"line":35763},[36,82347,82348],{"class":57},"            \u003Cp class=\"price\">${",[36,82350,2435],{"class":53},[36,82352,82343],{"class":57},[36,82354,82355],{"class":38,"line":35773},[36,82356,82357],{"class":57},"          \u003C\u002Fdiv>\n",[36,82359,82360],{"class":38,"line":35778},[36,82361,82362],{"class":57},"        `\n",[36,82364,82365],{"class":38,"line":35784},[36,82366,67303],{"class":53},[36,82368,82369],{"class":38,"line":35800},[36,82370,82371],{"class":42},"      \u002F\u002F 追加给List\n",[36,82373,82374,82376,82378,82380,82383,82385,82387],{"class":38,"line":35844},[36,82375,58261],{"class":53},[36,82377,56891],{"class":4500},[36,82379,54],{"class":53},[36,82381,82382],{"class":57},"'.list'",[36,82384,76734],{"class":53},[36,82386,115],{"class":114},[36,82388,76470],{"class":53},[36,82390,82391],{"class":38,"line":35850},[36,82392,4721],{"class":53},[36,82394,82395],{"class":38,"line":35856},[36,82396,82397],{"class":42},"    \u002F\u002F 页面一打开就需要渲染\n",[36,82399,82400,82403],{"class":38,"line":35862},[36,82401,82402],{"class":4500},"    render",[36,82404,82405],{"class":53},"(goodsList)\n",[36,82407,82408],{"class":38,"line":35873},[36,82409,82410],{"class":42},"    \u002F\u002F 2.过滤筛选\n",[36,82412,82413,82415,82417,82419,82422,82424,82426,82428,82430,82432,82434,82436],{"class":38,"line":35879},[36,82414,54901],{"class":53},[36,82416,56891],{"class":4500},[36,82418,54],{"class":53},[36,82420,82421],{"class":57},"'.filter'",[36,82423,33330],{"class":53},[36,82425,60303],{"class":4500},[36,82427,54],{"class":53},[36,82429,60308],{"class":57},[36,82431,14958],{"class":53},[36,82433,2770],{"class":1997},[36,82435,82281],{"class":114},[36,82437,18091],{"class":53},[36,82439,82440],{"class":38,"line":35885},[36,82441,82442],{"class":42},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,82444,82445,82447,82449,82452,82454,82456,82458,82460],{"class":38,"line":35891},[36,82446,60718],{"class":114},[36,82448,82290],{"class":53},[36,82450,82451],{"class":49},"tagName",[36,82453,14958],{"class":53},[36,82455,34040],{"class":49},[36,82457,82304],{"class":53},[36,82459,115],{"class":114},[36,82461,82462],{"class":53}," e.target\n",[36,82464,82465],{"class":38,"line":35909},[36,82466,82467],{"class":42},"      \u002F\u002F 判断\n",[36,82469,82470,82472,82474,82476,82478],{"class":38,"line":35923},[36,82471,56971],{"class":114},[36,82473,69521],{"class":53},[36,82475,56977],{"class":114},[36,82477,70743],{"class":57},[36,82479,14965],{"class":53},[36,82481,82482],{"class":38,"line":35932},[36,82483,82484],{"class":42},"        \u002F\u002F console.log(11)\n",[36,82486,82487],{"class":38,"line":35941},[36,82488,82489],{"class":42},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,82491,82492],{"class":38,"line":35950},[36,82493,82494],{"class":42},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,82496,82497,82499,82501,82503],{"class":38,"line":35959},[36,82498,54324],{"class":114},[36,82500,54327],{"class":53},[36,82502,115],{"class":114},[36,82504,82505],{"class":53}," goodsList\n",[36,82507,82508,82510,82513,82515,82518],{"class":38,"line":35965},[36,82509,5029],{"class":114},[36,82511,82512],{"class":53}," (dataset.index ",[36,82514,56977],{"class":114},[36,82516,82517],{"class":57}," '1'",[36,82519,14965],{"class":53},[36,82521,82522,82525,82527,82530,82533,82535,82537,82539,82542,82544,82546,82549,82551,82553,82555],{"class":38,"line":35971},[36,82523,82524],{"class":53},"          arr ",[36,82526,115],{"class":114},[36,82528,82529],{"class":53}," goodsList.",[36,82531,82532],{"class":4500},"filter",[36,82534,54],{"class":53},[36,82536,82278],{"class":1997},[36,82538,82281],{"class":114},[36,82540,82541],{"class":53}," item.price ",[36,82543,1490],{"class":114},[36,82545,6624],{"class":49},[36,82547,82548],{"class":114}," &&",[36,82550,82541],{"class":53},[36,82552,4126],{"class":114},[36,82554,8282],{"class":49},[36,82556,61],{"class":53},[36,82558,82559,82562,82564,82566,82568,82570,82573],{"class":38,"line":35979},[36,82560,82561],{"class":53},"        } ",[36,82563,4239],{"class":114},[36,82565,4242],{"class":114},[36,82567,82512],{"class":53},[36,82569,56977],{"class":114},[36,82571,82572],{"class":57}," '2'",[36,82574,14965],{"class":53},[36,82576,82577,82579,82581,82583,82585,82587,82589,82591,82593,82595,82597,82599,82601,82603,82606],{"class":38,"line":35984},[36,82578,82524],{"class":53},[36,82580,115],{"class":114},[36,82582,82529],{"class":53},[36,82584,82532],{"class":4500},[36,82586,54],{"class":53},[36,82588,82278],{"class":1997},[36,82590,82281],{"class":114},[36,82592,82541],{"class":53},[36,82594,1490],{"class":114},[36,82596,8282],{"class":49},[36,82598,82548],{"class":114},[36,82600,82541],{"class":53},[36,82602,4126],{"class":114},[36,82604,82605],{"class":49}," 300",[36,82607,61],{"class":53},[36,82609,82610,82612,82614,82616,82618,82620,82623],{"class":38,"line":35990},[36,82611,82561],{"class":53},[36,82613,4239],{"class":114},[36,82615,4242],{"class":114},[36,82617,82512],{"class":53},[36,82619,56977],{"class":114},[36,82621,82622],{"class":57}," '3'",[36,82624,14965],{"class":53},[36,82626,82627,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647],{"class":38,"line":36001},[36,82628,82524],{"class":53},[36,82630,115],{"class":114},[36,82632,82529],{"class":53},[36,82634,82532],{"class":4500},[36,82636,54],{"class":53},[36,82638,82278],{"class":1997},[36,82640,82281],{"class":114},[36,82642,82541],{"class":53},[36,82644,1490],{"class":114},[36,82646,82605],{"class":49},[36,82648,61],{"class":53},[36,82650,82651],{"class":38,"line":36007},[36,82652,5061],{"class":53},[36,82654,82655],{"class":38,"line":36027},[36,82656,82657],{"class":42},"        \u002F\u002F 渲染函数\n",[36,82659,82660,82662],{"class":38,"line":36033},[36,82661,72894],{"class":4500},[36,82663,54906],{"class":53},[36,82665,82666],{"class":38,"line":36039},[36,82667,54892],{"class":53},[36,82669,82670],{"class":38,"line":36045},[36,82671,546],{"emptyLinePlaceholder":545},[36,82673,82674],{"class":38,"line":36062},[36,82675,35962],{"class":53},[36,82677,82678,82680,82682],{"class":38,"line":36068},[36,82679,54911],{"class":53},[36,82681,54307],{"class":53794},[36,82683,53801],{"class":53},[36,82685,82686,82688,82690],{"class":38,"line":36074},[36,82687,54279],{"class":53},[36,82689,54294],{"class":53794},[36,82691,53801],{"class":53},[36,82693,82694],{"class":38,"line":36080},[36,82695,546],{"emptyLinePlaceholder":545},[36,82697,82698,82700,82702],{"class":38,"line":36086},[36,82699,54279],{"class":53},[36,82701,53131],{"class":53794},[36,82703,53801],{"class":53},[14,82705,82707],{"id":82706},"_410-深入了解对象","4.10 深入了解对象",[997,82709,82711],{"id":82710},"_4101-创建对象","4.10.1 创建对象",[19,82713,82714],{},[4000,82715],{"alt":31,"src":82716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82718,82719],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[997,82721,82723],{"id":82722},"_4102-构造函数","4.10.2 构造函数",[19,82725,82726,82729],{},[2839,82727,82728],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82731,82732,82735],{},[2839,82733,82734],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,82737,82739],{"className":53129,"code":82738,"language":53131,"meta":31,"style":31},"\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",[33,82740,82741,82749,82754,82775,82788,82800,82812,82816,82821,82848,82853,82880],{"__ignoreMap":31},[36,82742,82743,82745,82747],{"class":38,"line":39},[36,82744,1507],{"class":53},[36,82746,54307],{"class":53794},[36,82748,53801],{"class":53},[36,82750,82751],{"class":38,"line":46},[36,82752,82753],{"class":42},"\u002F\u002F例：\n",[36,82755,82756,82758,82761,82763,82765,82767,82769,82771,82773],{"class":38,"line":82},[36,82757,56940],{"class":114},[36,82759,82760],{"class":4500}," Pig",[36,82762,54],{"class":53},[36,82764,1998],{"class":1997},[36,82766,3059],{"class":53},[36,82768,2006],{"class":1997},[36,82770,3059],{"class":53},[36,82772,72724],{"class":1997},[36,82774,14965],{"class":53},[36,82776,82777,82780,82783,82785],{"class":38,"line":88},[36,82778,82779],{"class":49},"    this",[36,82781,82782],{"class":53},".name",[36,82784,115],{"class":114},[36,82786,82787],{"class":53},"name\n",[36,82789,82790,82792,82795,82797],{"class":38,"line":195},[36,82791,82779],{"class":49},[36,82793,82794],{"class":53},".age",[36,82796,115],{"class":114},[36,82798,82799],{"class":53},"age\n",[36,82801,82802,82804,82807,82809],{"class":38,"line":1517},[36,82803,82779],{"class":49},[36,82805,82806],{"class":53},".gender",[36,82808,115],{"class":114},[36,82810,82811],{"class":53},"gender    \n",[36,82813,82814],{"class":38,"line":2421},[36,82815,4103],{"class":53},[36,82817,82818],{"class":38,"line":2446},[36,82819,82820],{"class":42},"\u002F\u002F创建佩奇对象\n",[36,82822,82823,82825,82828,82830,82832,82834,82837,82839,82841,82843,82846],{"class":38,"line":2469},[36,82824,9319],{"class":114},[36,82826,82827],{"class":49}," Peppa",[36,82829,14240],{"class":114},[36,82831,82760],{"class":4500},[36,82833,54],{"class":53},[36,82835,82836],{"class":57},"'佩奇'",[36,82838,3059],{"class":53},[36,82840,3025],{"class":49},[36,82842,3059],{"class":53},[36,82844,82845],{"class":57},"'女'",[36,82847,61],{"class":53},[36,82849,82850],{"class":38,"line":2492},[36,82851,82852],{"class":42},"\u002F\u002F创建乔治对象\n",[36,82854,82855,82857,82860,82862,82864,82866,82869,82871,82873,82875,82878],{"class":38,"line":4150},[36,82856,9319],{"class":114},[36,82858,82859],{"class":49}," George",[36,82861,14240],{"class":114},[36,82863,82760],{"class":4500},[36,82865,54],{"class":53},[36,82867,82868],{"class":57},"'乔治'",[36,82870,3059],{"class":53},[36,82872,2767],{"class":49},[36,82874,3059],{"class":53},[36,82876,82877],{"class":57},"'男'",[36,82879,61],{"class":53},[36,82881,82882,82884,82886],{"class":38,"line":4155},[36,82883,54279],{"class":53},[36,82885,54307],{"class":53794},[36,82887,53801],{"class":53},[19,82889,82890],{},[4000,82891],{"alt":31,"src":82892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82894,82895],{},[4000,82896],{"alt":31,"src":82897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82899,82900],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82902,82903],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82905,82906],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82908,82909],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82911,82912],{},"这里用等号是因为：对象.属性=值",[19,82914,82915],{},"①利用对象字面量创建对象",[19,82917,82918],{},"const o={",[19,82920,82921],{},"name:'pink'",[19,82923,82924],{},"} ②利用new Object创建对象",[19,82926,82927],{},"const o=new Object({name:'pink'})",[19,82929,82930],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82932,82933],{},"构造函数创建对象的执行过程：",[19,82935,82936],{},[4000,82937],{"alt":31,"src":82938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[997,82940,82942],{"id":82941},"_4103-实例成员","4.10.3 实例成员",[19,82944,82945],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[433,82947,82948,82951,82954],{},[436,82949,82950],{},"实例对象的属性和方法即为实例成员",[436,82952,82953],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[436,82955,82956],{},"构造函数创建的实例对象彼此独立互不影响",[997,82958,82960],{"id":82959},"_4104-静态成员","4.10.4 静态成员",[19,82962,82963],{},[4000,82964],{"alt":31,"src":82965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82967,82968],{},"静态成员有Date.now() Math.PI Math.random()",[19,82970,82971],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82973,82974],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82976,82977],{},"function Pig(name) n {",[19,82979,82980],{},"this.name=name",[19,82982,2070],{},[19,82984,82985],{},"Pig.eyes=2",[19,82987,82988],{},"Pig.sayHai=function () { console.log(this) }",[19,82990,82991],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82993,82994],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82996,13855],{},[433,82998,82999,83002,83005,83008,83011],{},[436,83000,83001],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[436,83003,83004],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[436,83006,83007],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[436,83009,83010],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[436,83012,83013],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,83015,83016],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[997,83018,83020],{"id":83019},"_4105-内置构造函数","4.10.5 内置构造函数",[19,83022,83023],{},"内置构造函数包含：",[19,83025,83026],{},[4000,83027],{"alt":31,"src":83028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,83030,83031],{},[4000,83032],{"alt":31,"src":83033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,83035,83036],{},"这些基本数据类型，js对他们进行了包装",[54307,83038,83039],{},"\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",[24515,83041,83043],{"id":83042},"_41051-object","4.10.5.1 Object",[19,83045,83046],{},"Object 是内置的构造函数，用于创建普通对象",[19,83048,83049],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,83051,83053],{"className":53129,"code":83052,"language":53131,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,83054,83055],{"__ignoreMap":31},[36,83056,83057],{"class":38,"line":39},[36,83058,83052],{"class":53},[19,83060,83061],{},"三个常用的静态方法：",[25427,83063,83065],{"id":83064},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,83067,83068],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,83070,83071],{},[4000,83072],{"alt":31,"src":83073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,83075,83076],{},[4000,83077],{"alt":31,"src":83078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,83080,83082],{"className":55561,"code":83081,"language":55563,"meta":31,"style":31},"\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",[33,83083,83084,83092,83100,83105,83110,83115,83120,83125,83130,83138],{"__ignoreMap":31},[36,83085,83086,83088,83090],{"class":38,"line":39},[36,83087,1507],{"class":53},[36,83089,54294],{"class":53794},[36,83091,53801],{"class":53},[36,83093,83094,83096,83098],{"class":38,"line":46},[36,83095,54638],{"class":53},[36,83097,54307],{"class":53794},[36,83099,53801],{"class":53},[36,83101,83102],{"class":38,"line":82},[36,83103,83104],{"class":53},"    const o = { name: 'pink', age: 6 }\n",[36,83106,83107],{"class":38,"line":88},[36,83108,83109],{"class":53},"    \u002F\u002F 获得所有属性名\n",[36,83111,83112],{"class":38,"line":195},[36,83113,83114],{"class":53},"    const arr = Object.keys(o)\n",[36,83116,83117],{"class":38,"line":1517},[36,83118,83119],{"class":53},"    console.log(arr)\n",[36,83121,83122],{"class":38,"line":2421},[36,83123,83124],{"class":53},"    \u002F\u002F 获得所有属性值\n",[36,83126,83127],{"class":38,"line":2446},[36,83128,83129],{"class":53},"    console.log(Object.values(o))\n",[36,83131,83132,83134,83136],{"class":38,"line":2469},[36,83133,54911],{"class":53},[36,83135,54307],{"class":53794},[36,83137,53801],{"class":53},[36,83139,83140,83142,83144],{"class":38,"line":2492},[36,83141,54279],{"class":53},[36,83143,54294],{"class":53794},[36,83145,53801],{"class":53},[25427,83147,83149],{"id":83148},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83151,83152],{},"Object.assign(oo,o)",[19,83154,83155],{},"后的东西添加给前 是追加",[19,83157,83158],{},[4000,83159],{"alt":31,"src":83160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83162,83163],{},[4000,83164],{"alt":31,"src":83165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,83167,83169],{"className":55561,"code":83168,"language":55563,"meta":31,"style":31},"\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",[33,83170,83171,83179,83187,83191,83195,83199,83203,83207,83211,83216,83221,83226,83231,83236,83244],{"__ignoreMap":31},[36,83172,83173,83175,83177],{"class":38,"line":39},[36,83174,1507],{"class":53},[36,83176,54294],{"class":53794},[36,83178,53801],{"class":53},[36,83180,83181,83183,83185],{"class":38,"line":46},[36,83182,54638],{"class":53},[36,83184,54307],{"class":53794},[36,83186,53801],{"class":53},[36,83188,83189],{"class":38,"line":82},[36,83190,83104],{"class":53},[36,83192,83193],{"class":38,"line":88},[36,83194,83109],{"class":53},[36,83196,83197],{"class":38,"line":195},[36,83198,83114],{"class":53},[36,83200,83201],{"class":38,"line":1517},[36,83202,83119],{"class":53},[36,83204,83205],{"class":38,"line":2421},[36,83206,83124],{"class":53},[36,83208,83209],{"class":38,"line":2446},[36,83210,83129],{"class":53},[36,83212,83213],{"class":38,"line":2469},[36,83214,83215],{"class":53},"    const oo = {}\n",[36,83217,83218],{"class":38,"line":2492},[36,83219,83220],{"class":53},"    Object.assign(oo, o)\n",[36,83222,83223],{"class":38,"line":4150},[36,83224,83225],{"class":53},"    console.log(oo)\n",[36,83227,83228],{"class":38,"line":4155},[36,83229,83230],{"class":53},"    Object.assign(o, { gender: '女' })\n",[36,83232,83233],{"class":38,"line":4161},[36,83234,83235],{"class":53},"    console.log(o)\n",[36,83237,83238,83240,83242],{"class":38,"line":4166},[36,83239,54911],{"class":53},[36,83241,54307],{"class":53794},[36,83243,53801],{"class":53},[36,83245,83246,83248,83250],{"class":38,"line":4180},[36,83247,54279],{"class":53},[36,83249,54294],{"class":53794},[36,83251,53801],{"class":53},[19,83253,83254],{},[4000,83255],{"alt":31,"src":83256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24515,83258,83260],{"id":83259},"_41052-array","4.10.5.2 Array",[19,83262,83263],{},"Array 是内置的构造函数，用于创建数组",[19,83265,83266],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,83268,83270],{"className":53129,"code":83269,"language":53131,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,83271,83272,83277],{"__ignoreMap":31},[36,83273,83274],{"class":38,"line":39},[36,83275,83276],{"class":53},"const arr=new Array(3,5)\n",[36,83278,83279],{"class":38,"line":46},[36,83280,83281],{"class":53},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83283,83284],{},"Array的实例方法，这个方法是实例成员",[19,83286,83287],{},[4000,83288],{"alt":31,"src":83289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25427,83291,83293],{"id":83292},"_410521-reduce","4.10.5.2.1 reduce",[19,83295,83296],{},[4000,83297],{"alt":31,"src":83298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,83300,83302],{"className":55561,"code":83301,"language":55563,"meta":31,"style":31},"\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",[33,83303,83304,83312,83320,83325,83330,83335,83340,83344,83349,83354,83359,83363,83368,83373,83377,83382,83387,83392,83400],{"__ignoreMap":31},[36,83305,83306,83308,83310],{"class":38,"line":39},[36,83307,1507],{"class":53},[36,83309,54294],{"class":53794},[36,83311,53801],{"class":53},[36,83313,83314,83316,83318],{"class":38,"line":46},[36,83315,54638],{"class":53},[36,83317,54307],{"class":53794},[36,83319,53801],{"class":53},[36,83321,83322],{"class":38,"line":82},[36,83323,83324],{"class":53},"    const arr = [1, 5, 8]\n",[36,83326,83327],{"class":38,"line":88},[36,83328,83329],{"class":53},"    \u002F\u002F 1.没有初始值\n",[36,83331,83332],{"class":38,"line":195},[36,83333,83334],{"class":53},"    const total = arr.reduce(function (prev, current) {\n",[36,83336,83337],{"class":38,"line":1517},[36,83338,83339],{"class":53},"      return prev + current\n",[36,83341,83342],{"class":38,"line":2421},[36,83343,35962],{"class":53},[36,83345,83346],{"class":38,"line":2446},[36,83347,83348],{"class":53},"    console.log(total)   \u002F\u002F14\n",[36,83350,83351],{"class":38,"line":2469},[36,83352,83353],{"class":53},"    \u002F\u002F 2.有初始值\n",[36,83355,83356],{"class":38,"line":2492},[36,83357,83358],{"class":53},"    const total1 = arr.reduce(function (prev, current) {\n",[36,83360,83361],{"class":38,"line":4150},[36,83362,83339],{"class":53},[36,83364,83365],{"class":38,"line":4155},[36,83366,83367],{"class":53},"    }, 10)\n",[36,83369,83370],{"class":38,"line":4161},[36,83371,83372],{"class":53},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,83374,83375],{"class":38,"line":4166},[36,83376,546],{"emptyLinePlaceholder":545},[36,83378,83379],{"class":38,"line":4180},[36,83380,83381],{"class":53},"    \u002F\u002F 3.箭头函数写法\n",[36,83383,83384],{"class":38,"line":4185},[36,83385,83386],{"class":53},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,83388,83389],{"class":38,"line":4191},[36,83390,83391],{"class":53},"    console.log(total2)   \u002F\u002F24\n",[36,83393,83394,83396,83398],{"class":38,"line":4212},[36,83395,54911],{"class":53},[36,83397,54307],{"class":53794},[36,83399,53801],{"class":53},[36,83401,83402,83404,83406],{"class":38,"line":4217},[36,83403,54279],{"class":53},[36,83405,54294],{"class":53794},[36,83407,53801],{"class":53},[19,83409,83410],{},"执行过程：",[433,83412,83413,83416,83419],{},[436,83414,83415],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[436,83417,83418],{},"每一次循环，把返回值给作为下一次循环的上一次值",[436,83420,83421],{},"如果有起始值，则起始值作为上一次值",[26,83423,83425],{"className":55561,"code":83424,"language":55563,"meta":31,"style":31},"\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",[33,83426,83427,83435,83443,83447,83451,83455,83459,83463,83467,83472,83477,83482,83487,83492,83496,83500,83504,83508,83512,83516,83521,83525,83530,83534,83539,83544,83548,83552,83556,83564],{"__ignoreMap":31},[36,83428,83429,83431,83433],{"class":38,"line":39},[36,83430,1507],{"class":53},[36,83432,54294],{"class":53794},[36,83434,53801],{"class":53},[36,83436,83437,83439,83441],{"class":38,"line":46},[36,83438,54638],{"class":53},[36,83440,54307],{"class":53794},[36,83442,53801],{"class":53},[36,83444,83445],{"class":38,"line":82},[36,83446,83324],{"class":53},[36,83448,83449],{"class":38,"line":88},[36,83450,83329],{"class":53},[36,83452,83453],{"class":38,"line":195},[36,83454,83334],{"class":53},[36,83456,83457],{"class":38,"line":1517},[36,83458,83339],{"class":53},[36,83460,83461],{"class":38,"line":2421},[36,83462,35962],{"class":53},[36,83464,83465],{"class":38,"line":2446},[36,83466,83348],{"class":53},[36,83468,83469],{"class":38,"line":2469},[36,83470,83471],{"class":53},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,83473,83474],{"class":38,"line":2492},[36,83475,83476],{"class":53},"    \u002F\u002F     1              5                    6\n",[36,83478,83479],{"class":38,"line":4150},[36,83480,83481],{"class":53},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,83483,83484],{"class":38,"line":4155},[36,83485,83486],{"class":53},"    \u002F\u002F     6              8                    14\n",[36,83488,83489],{"class":38,"line":4161},[36,83490,83491],{"class":53},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,83493,83494],{"class":38,"line":4166},[36,83495,83353],{"class":53},[36,83497,83498],{"class":38,"line":4180},[36,83499,83358],{"class":53},[36,83501,83502],{"class":38,"line":4185},[36,83503,83339],{"class":53},[36,83505,83506],{"class":38,"line":4191},[36,83507,83367],{"class":53},[36,83509,83510],{"class":38,"line":4212},[36,83511,83372],{"class":53},[36,83513,83514],{"class":38,"line":4217},[36,83515,83471],{"class":53},[36,83517,83518],{"class":38,"line":4231},[36,83519,83520],{"class":53},"    \u002F\u002F     10             1                     11\n",[36,83522,83523],{"class":38,"line":4236},[36,83524,83481],{"class":53},[36,83526,83527],{"class":38,"line":4264},[36,83528,83529],{"class":53},"    \u002F\u002F     11             5                    16\n",[36,83531,83532],{"class":38,"line":4269},[36,83533,83481],{"class":53},[36,83535,83536],{"class":38,"line":4286},[36,83537,83538],{"class":53},"    \u002F\u002F     16             8                    24\n",[36,83540,83541],{"class":38,"line":4291},[36,83542,83543],{"class":53},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,83545,83546],{"class":38,"line":4296},[36,83547,83381],{"class":53},[36,83549,83550],{"class":38,"line":4301},[36,83551,83386],{"class":53},[36,83553,83554],{"class":38,"line":4315},[36,83555,83391],{"class":53},[36,83557,83558,83560,83562],{"class":38,"line":4320},[36,83559,54911],{"class":53},[36,83561,54307],{"class":53794},[36,83563,53801],{"class":53},[36,83565,83566,83568,83570],{"class":38,"line":5109},[36,83567,54279],{"class":53},[36,83569,54294],{"class":53794},[36,83571,53801],{"class":53},[25427,83573,83575],{"id":83574},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83577,83578],{},[4000,83579],{"alt":31,"src":83580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,83582,83584],{"className":55561,"code":83583,"language":55563,"meta":31,"style":31},"\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",[33,83585,83586,83594,83602,83607,83612,83617,83622,83626,83631,83636,83641,83646,83651,83656,83660,83665,83669,83674,83682],{"__ignoreMap":31},[36,83587,83588,83590,83592],{"class":38,"line":39},[36,83589,1507],{"class":53},[36,83591,54294],{"class":53794},[36,83593,53801],{"class":53},[36,83595,83596,83598,83600],{"class":38,"line":46},[36,83597,54638],{"class":53},[36,83599,54307],{"class":53794},[36,83601,53801],{"class":53},[36,83603,83604],{"class":38,"line":82},[36,83605,83606],{"class":53},"    const arr = [\n",[36,83608,83609],{"class":38,"line":88},[36,83610,83611],{"class":53},"      { name: '张三', salary: 10000 },\n",[36,83613,83614],{"class":38,"line":195},[36,83615,83616],{"class":53},"      { name: '李四', salary: 10000 },\n",[36,83618,83619],{"class":38,"line":1517},[36,83620,83621],{"class":53},"      { name: '王五', salary: 10000 }\n",[36,83623,83624],{"class":38,"line":2421},[36,83625,55603],{"class":53},[36,83627,83628],{"class":38,"line":2446},[36,83629,83630],{"class":53},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,83632,83633],{"class":38,"line":2469},[36,83634,83635],{"class":53},"    \u002F\u002F prev是累计值\n",[36,83637,83638],{"class":38,"line":2492},[36,83639,83640],{"class":53},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,83642,83643],{"class":38,"line":4150},[36,83644,83645],{"class":53},"    console.log(total)\n",[36,83647,83648],{"class":38,"line":4155},[36,83649,83650],{"class":53},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,83652,83653],{"class":38,"line":4161},[36,83654,83655],{"class":53},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,83657,83658],{"class":38,"line":4166},[36,83659,83650],{"class":53},[36,83661,83662],{"class":38,"line":4180},[36,83663,83664],{"class":53},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,83666,83667],{"class":38,"line":4185},[36,83668,83650],{"class":53},[36,83670,83671],{"class":38,"line":4191},[36,83672,83673],{"class":53},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,83675,83676,83678,83680],{"class":38,"line":4212},[36,83677,54911],{"class":53},[36,83679,54307],{"class":53794},[36,83681,53801],{"class":53},[36,83683,83684,83686,83688],{"class":38,"line":4217},[36,83685,54279],{"class":53},[36,83687,54294],{"class":53794},[36,83689,53801],{"class":53},[25427,83691,83693],{"id":83692},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83695,83696],{},[4000,83697],{"alt":31,"src":83698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83700,83701],{},[4000,83702],{"alt":31,"src":83703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[433,83705,83706],{},[436,83707,83708],{},"find()",[19,83710,83711],{},"循环查找，找到第一个就ok",[19,83713,83714],{},[2923,83715,83718],{"href":83716,"rel":83717},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26381],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,83720,83722],{"className":53129,"code":83721,"language":53131,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,83723,83724,83729,83734],{"__ignoreMap":31},[36,83725,83726],{"class":38,"line":39},[36,83727,83728],{"class":53},"const array1 = [5, 12, 8, 130, 44]\n",[36,83730,83731],{"class":38,"line":46},[36,83732,83733],{"class":53},"const found = array1.find((element) => element > 10)\n",[36,83735,83736],{"class":38,"line":82},[36,83737,83738],{"class":53},"console.log(found)  \u002F\u002F12\n",[19,83740,83741,83743,83744,83749,83750,83753,83754,83756,83757,83762,83763,83765,83766,83768,83769,83771,83772],{},[33,83742,83708],{}," 方法是一个",[2923,83745,83748],{"href":83746,"rel":83747},"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",[26381],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,83751,83752],{},"callbackFn"," 函数，直到 ",[33,83755,83752],{}," 返回一个",[2923,83758,83761],{"href":83759,"rel":83760},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26381],"真值","。然后 ",[33,83764,83708],{}," 返回该元素并停止迭代数组。如果 ",[33,83767,83752],{}," 从未返回真值，则 ",[33,83770,83708],{}," 返回 ",[33,83773,83774],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,83776,83778],{"className":55561,"code":83777,"language":55563,"meta":31,"style":31},"\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",[33,83779,83780,83788,83796,83801,83806,83811,83815,83820,83825,83829,83834,83839,83843,83847,83852,83857,83861,83865,83870,83875,83880,83885,83890,83894,83899,83904,83909,83914,83918,83923,83931],{"__ignoreMap":31},[36,83781,83782,83784,83786],{"class":38,"line":39},[36,83783,1507],{"class":53},[36,83785,54294],{"class":53794},[36,83787,53801],{"class":53},[36,83789,83790,83792,83794],{"class":38,"line":46},[36,83791,54638],{"class":53},[36,83793,54307],{"class":53794},[36,83795,53801],{"class":53},[36,83797,83798],{"class":38,"line":82},[36,83799,83800],{"class":53},"    const arr = ['red', 'blue', 'green']\n",[36,83802,83803],{"class":38,"line":88},[36,83804,83805],{"class":53},"    const found = arr.find(item => item === 'pink')\n",[36,83807,83808],{"class":38,"line":195},[36,83809,83810],{"class":53},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,83812,83813],{"class":38,"line":1517},[36,83814,546],{"emptyLinePlaceholder":545},[36,83816,83817],{"class":38,"line":2421},[36,83818,83819],{"class":53},"    \u002F\u002F 使用场景，用于查找数据\n",[36,83821,83822],{"class":38,"line":2446},[36,83823,83824],{"class":53},"    const arr1 = [\n",[36,83826,83827],{"class":38,"line":2469},[36,83828,81869],{"class":53},[36,83830,83831],{"class":38,"line":2492},[36,83832,83833],{"class":53},"        name: '小米',\n",[36,83835,83836],{"class":38,"line":4150},[36,83837,83838],{"class":53},"        price: 1999\n",[36,83840,83841],{"class":38,"line":4155},[36,83842,80376],{"class":53},[36,83844,83845],{"class":38,"line":4161},[36,83846,81869],{"class":53},[36,83848,83849],{"class":38,"line":4166},[36,83850,83851],{"class":53},"        name: '华为',\n",[36,83853,83854],{"class":38,"line":4180},[36,83855,83856],{"class":53},"        price: 3999\n",[36,83858,83859],{"class":38,"line":4185},[36,83860,54892],{"class":53},[36,83862,83863],{"class":38,"line":4191},[36,83864,55603],{"class":53},[36,83866,83867],{"class":38,"line":4212},[36,83868,83869],{"class":53},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,83871,83872],{"class":38,"line":4217},[36,83873,83874],{"class":53},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,83876,83877],{"class":38,"line":4231},[36,83878,83879],{"class":53},"    \u002F\u002F   if (item.name === '小米') {\n",[36,83881,83882],{"class":38,"line":4236},[36,83883,83884],{"class":53},"    \u002F\u002F     return item\n",[36,83886,83887],{"class":38,"line":4264},[36,83888,83889],{"class":53},"    \u002F\u002F   }\n",[36,83891,83892],{"class":38,"line":4269},[36,83893,65778],{"class":53},[36,83895,83896],{"class":38,"line":4286},[36,83897,83898],{"class":53},"    \u002F\u002F 另一种写法\n",[36,83900,83901],{"class":38,"line":4291},[36,83902,83903],{"class":53},"    const found1 = arr1.find(item => {\n",[36,83905,83906],{"class":38,"line":4296},[36,83907,83908],{"class":53},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,83910,83911],{"class":38,"line":4301},[36,83912,83913],{"class":53},"      return item.name = '小米'\n",[36,83915,83916],{"class":38,"line":4315},[36,83917,35962],{"class":53},[36,83919,83920],{"class":38,"line":4320},[36,83921,83922],{"class":53},"    console.log(found1)\n",[36,83924,83925,83927,83929],{"class":38,"line":5109},[36,83926,54911],{"class":53},[36,83928,54307],{"class":53794},[36,83930,53801],{"class":53},[36,83932,83933,83935,83937],{"class":38,"line":5123},[36,83934,54279],{"class":53},[36,83936,54294],{"class":53794},[36,83938,53801],{"class":53},[19,83940,83941],{},[4000,83942],{"alt":31,"src":83943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83945,83946],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[433,83948,83949],{"start":46},[436,83950,83951],{},"every()返回的是布尔值",[19,83953,83954],{},[2923,83955,83958],{"href":83956,"rel":83957},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26381],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83960,83961],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83963,83964],{},"some是只有有一个就没问题",[19,83966,83967],{},"every是必须全是才行",[26,83969,83973],{"className":83970,"code":83971,"language":83972,"meta":31,"style":31},"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",[33,83974,83975,83991,84005,84009,84018],{"__ignoreMap":31},[36,83976,83977,83979,83982,83984,83986,83989],{"class":38,"line":39},[36,83978,56940],{"class":114},[36,83980,83981],{"class":53}," isBigEnough(element, ",[36,83983,76543],{"class":114},[36,83985,14958],{"class":53},[36,83987,83988],{"class":114},"array",[36,83990,14965],{"class":53},[36,83992,83993,83996,83999,84001,84003],{"class":38,"line":46},[36,83994,83995],{"class":114},"  return",[36,83997,83998],{"class":53}," element ",[36,84000,1490],{"class":114},[36,84002,931],{"class":49},[36,84004,3833],{"class":53},[36,84006,84007],{"class":38,"line":82},[36,84008,4103],{"class":53},[36,84010,84011,84014,84016],{"class":38,"line":88},[36,84012,84013],{"class":53},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,84015,1080],{"class":114},[36,84017,57007],{"class":53},[36,84019,84020,84023,84025],{"class":38,"line":195},[36,84021,84022],{"class":53},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,84024,1080],{"class":114},[36,84026,60430],{"class":53},[26,84028,84030],{"className":55561,"code":84029,"language":55563,"meta":31,"style":31},"\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",[33,84031,84032,84040,84048,84053,84057,84062,84067,84075],{"__ignoreMap":31},[36,84033,84034,84036,84038],{"class":38,"line":39},[36,84035,1507],{"class":53},[36,84037,54294],{"class":53794},[36,84039,53801],{"class":53},[36,84041,84042,84044,84046],{"class":38,"line":46},[36,84043,54638],{"class":53},[36,84045,54307],{"class":53794},[36,84047,53801],{"class":53},[36,84049,84050],{"class":38,"line":82},[36,84051,84052],{"class":53},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,84054,84055],{"class":38,"line":88},[36,84056,80805],{"class":53},[36,84058,84059],{"class":38,"line":195},[36,84060,84061],{"class":53},"    const flag = arr.every(item => item >= 10)\n",[36,84063,84064],{"class":38,"line":1517},[36,84065,84066],{"class":53},"    console.log(flag)    \u002F\u002Ftrue\n",[36,84068,84069,84071,84073],{"class":38,"line":2421},[36,84070,54911],{"class":53},[36,84072,54307],{"class":53794},[36,84074,53801],{"class":53},[36,84076,84077,84079,84081],{"class":38,"line":2446},[36,84078,54279],{"class":53},[36,84080,54294],{"class":53794},[36,84082,53801],{"class":53},[26,84084,84086],{"className":55561,"code":84085,"language":55563,"meta":31,"style":31},"\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",[33,84087,84088,84096,84104,84108,84113,84118,84123,84131],{"__ignoreMap":31},[36,84089,84090,84092,84094],{"class":38,"line":39},[36,84091,1507],{"class":53},[36,84093,54294],{"class":53794},[36,84095,53801],{"class":53},[36,84097,84098,84100,84102],{"class":38,"line":46},[36,84099,54638],{"class":53},[36,84101,54307],{"class":53794},[36,84103,53801],{"class":53},[36,84105,84106],{"class":38,"line":82},[36,84107,84052],{"class":53},[36,84109,84110],{"class":38,"line":88},[36,84111,84112],{"class":53},"    const arr = [10, 0, 5]\n",[36,84114,84115],{"class":38,"line":195},[36,84116,84117],{"class":53},"    const flag = arr.some(item => item >= 10)\n",[36,84119,84120],{"class":38,"line":1517},[36,84121,84122],{"class":53},"    console.log(flag)   \u002F\u002Ftrue\n",[36,84124,84125,84127,84129],{"class":38,"line":2421},[36,84126,54911],{"class":53},[36,84128,54307],{"class":53794},[36,84130,53801],{"class":53},[36,84132,84133,84135,84137],{"class":38,"line":2446},[36,84134,54279],{"class":53},[36,84136,54294],{"class":53794},[36,84138,53801],{"class":53},[25427,84140,84142],{"id":84141},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84144,84145],{},[4000,84146],{"alt":31,"src":84147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,84149,84151],{"className":53129,"code":84150,"language":53131,"meta":31,"style":31},"\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",[33,84152,84153,84163,84177,84181,84189,84203,84223,84235,84243,84250,84262,84274,84286,84298,84308,84318,84322,84330,84338,84342,84350,84362,84370,84392,84397,84402,84435,84443,84451,84455],{"__ignoreMap":31},[36,84154,84155,84157,84159,84161],{"class":38,"line":39},[36,84156,53791],{"class":53},[36,84158,53795],{"class":53794},[36,84160,53798],{"class":4500},[36,84162,53801],{"class":53},[36,84164,84165,84167,84169,84171,84173,84175],{"class":38,"line":46},[36,84166,1507],{"class":53},[36,84168,53131],{"class":53794},[36,84170,53810],{"class":4500},[36,84172,115],{"class":53},[36,84174,53815],{"class":57},[36,84176,53801],{"class":53},[36,84178,84179],{"class":38,"line":82},[36,84180,546],{"emptyLinePlaceholder":545},[36,84182,84183,84185,84187],{"class":38,"line":88},[36,84184,1507],{"class":53},[36,84186,53828],{"class":53794},[36,84188,53801],{"class":53},[36,84190,84191,84193,84195,84197,84199,84201],{"class":38,"line":195},[36,84192,54638],{"class":53},[36,84194,53838],{"class":53794},[36,84196,53841],{"class":4500},[36,84198,115],{"class":53},[36,84200,53846],{"class":57},[36,84202,53801],{"class":53},[36,84204,84205,84207,84209,84211,84213,84215,84217,84219,84221],{"class":38,"line":1517},[36,84206,54638],{"class":53},[36,84208,53838],{"class":53794},[36,84210,17440],{"class":4500},[36,84212,115],{"class":53},[36,84214,53885],{"class":57},[36,84216,53865],{"class":4500},[36,84218,115],{"class":53},[36,84220,53892],{"class":57},[36,84222,53801],{"class":53},[36,84224,84225,84227,84229,84231,84233],{"class":38,"line":2421},[36,84226,54638],{"class":53},[36,84228,53901],{"class":53794},[36,84230,53904],{"class":53},[36,84232,53901],{"class":53794},[36,84234,53801],{"class":53},[36,84236,84237,84239,84241],{"class":38,"line":2446},[36,84238,54638],{"class":53},[36,84240,2602],{"class":53794},[36,84242,53801],{"class":53},[36,84244,84245,84248],{"class":38,"line":2469},[36,84246,84247],{"class":53794},"    div",[36,84249,18091],{"class":53},[36,84251,84252,84254,84256,84258,84260],{"class":38,"line":2492},[36,84253,57262],{"class":49},[36,84255,53931],{"class":53},[36,84257,4259],{"class":49},[36,84259,53986],{"class":114},[36,84261,3833],{"class":53},[36,84263,84264,84266,84268,84270,84272],{"class":38,"line":4150},[36,84265,57276],{"class":49},[36,84267,53931],{"class":53},[36,84269,3082],{"class":49},[36,84271,53986],{"class":114},[36,84273,3833],{"class":53},[36,84275,84276,84278,84280,84282,84284],{"class":38,"line":4155},[36,84277,59849],{"class":49},[36,84279,53931],{"class":53},[36,84281,3082],{"class":49},[36,84283,53986],{"class":114},[36,84285,3833],{"class":53},[36,84287,84288,84290,84292,84294,84296],{"class":38,"line":4161},[36,84289,67621],{"class":49},[36,84291,53931],{"class":53},[36,84293,3176],{"class":49},[36,84295,53986],{"class":114},[36,84297,3833],{"class":53},[36,84299,84300,84302,84304,84306],{"class":38,"line":4166},[36,84301,59776],{"class":49},[36,84303,53931],{"class":53},[36,84305,54086],{"class":49},[36,84307,3833],{"class":53},[36,84309,84310,84312,84314,84316],{"class":38,"line":4180},[36,84311,57375],{"class":49},[36,84313,53931],{"class":53},[36,84315,54139],{"class":49},[36,84317,3833],{"class":53},[36,84319,84320],{"class":38,"line":4185},[36,84321,4721],{"class":53},[36,84323,84324,84326,84328],{"class":38,"line":4191},[36,84325,54911],{"class":53},[36,84327,2602],{"class":53794},[36,84329,53801],{"class":53},[36,84331,84332,84334,84336],{"class":38,"line":4212},[36,84333,54279],{"class":53},[36,84335,53828],{"class":53794},[36,84337,53801],{"class":53},[36,84339,84340],{"class":38,"line":4217},[36,84341,546],{"emptyLinePlaceholder":545},[36,84343,84344,84346,84348],{"class":38,"line":4231},[36,84345,1507],{"class":53},[36,84347,54294],{"class":53794},[36,84349,53801],{"class":53},[36,84351,84352,84354,84356,84358,84360],{"class":38,"line":4236},[36,84353,54638],{"class":53},[36,84355,54105],{"class":53794},[36,84357,57805],{"class":53},[36,84359,54105],{"class":53794},[36,84361,53801],{"class":53},[36,84363,84364,84366,84368],{"class":38,"line":4264},[36,84365,54638],{"class":53},[36,84367,54307],{"class":53794},[36,84369,53801],{"class":53},[36,84371,84372,84374,84377,84379,84382,84385,84387,84390],{"class":38,"line":4269},[36,84373,13744],{"class":114},[36,84375,84376],{"class":49}," spec",[36,84378,498],{"class":114},[36,84380,84381],{"class":53}," { size: ",[36,84383,84384],{"class":57},"'40cm*40cm'",[36,84386,57955],{"class":53},[36,84388,84389],{"class":57},"'黑色'",[36,84391,58095],{"class":53},[36,84393,84394],{"class":38,"line":4286},[36,84395,84396],{"class":42},"    \u002F\u002F const arr = Object.values(spec)\n",[36,84398,84399],{"class":38,"line":4291},[36,84400,84401],{"class":42},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,84403,84404,84406,84408,84410,84413,84415,84417,84420,84423,84426,84428,84430,84433],{"class":38,"line":4296},[36,84405,54901],{"class":53},[36,84407,56891],{"class":4500},[36,84409,54],{"class":53},[36,84411,84412],{"class":57},"'div'",[36,84414,76734],{"class":53},[36,84416,115],{"class":114},[36,84418,84419],{"class":53}," Object.",[36,84421,84422],{"class":4500},"values",[36,84424,84425],{"class":53},"(spec).",[36,84427,76708],{"class":4500},[36,84429,54],{"class":53},[36,84431,84432],{"class":57},"'\u002F'",[36,84434,61],{"class":53},[36,84436,84437,84439,84441],{"class":38,"line":4301},[36,84438,54911],{"class":53},[36,84440,54307],{"class":53794},[36,84442,53801],{"class":53},[36,84444,84445,84447,84449],{"class":38,"line":4315},[36,84446,54279],{"class":53},[36,84448,54294],{"class":53794},[36,84450,53801],{"class":53},[36,84452,84453],{"class":38,"line":4320},[36,84454,546],{"emptyLinePlaceholder":545},[36,84456,84457,84459,84461],{"class":38,"line":5109},[36,84458,54279],{"class":53},[36,84460,53131],{"class":53794},[36,84462,53801],{"class":53},[19,84464,84465],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25427,84467,84469],{"id":84468},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84471,84472],{},"静态方法，将伪数组转换为真数组",[19,84474,84475],{},[4000,84476],{"alt":31,"src":84477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,84479,84481],{"className":55561,"code":84480,"language":55563,"meta":31,"style":31},"\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",[33,84482,84483,84491,84499,84511,84523,84535,84543,84551,84556,84561,84566,84571,84579],{"__ignoreMap":31},[36,84484,84485,84487,84489],{"class":38,"line":39},[36,84486,1507],{"class":53},[36,84488,54294],{"class":53794},[36,84490,53801],{"class":53},[36,84492,84493,84495,84497],{"class":38,"line":46},[36,84494,54638],{"class":53},[36,84496,3680],{"class":53794},[36,84498,53801],{"class":53},[36,84500,84501,84503,84505,84507,84509],{"class":38,"line":82},[36,84502,53835],{"class":53},[36,84504,436],{"class":53794},[36,84506,57805],{"class":53},[36,84508,436],{"class":53794},[36,84510,53801],{"class":53},[36,84512,84513,84515,84517,84519,84521],{"class":38,"line":88},[36,84514,53835],{"class":53},[36,84516,436],{"class":53794},[36,84518,57805],{"class":53},[36,84520,436],{"class":53794},[36,84522,53801],{"class":53},[36,84524,84525,84527,84529,84531,84533],{"class":38,"line":195},[36,84526,53835],{"class":53},[36,84528,436],{"class":53794},[36,84530,57805],{"class":53},[36,84532,436],{"class":53794},[36,84534,53801],{"class":53},[36,84536,84537,84539,84541],{"class":38,"line":1517},[36,84538,54911],{"class":53},[36,84540,3680],{"class":53794},[36,84542,53801],{"class":53},[36,84544,84545,84547,84549],{"class":38,"line":2421},[36,84546,54638],{"class":53},[36,84548,54307],{"class":53794},[36,84550,53801],{"class":53},[36,84552,84553],{"class":38,"line":2446},[36,84554,84555],{"class":53},"    const lis = document.querySelectorAll('li')\n",[36,84557,84558],{"class":38,"line":2469},[36,84559,84560],{"class":53},"    const liss = Array.from(lis)\n",[36,84562,84563],{"class":38,"line":2492},[36,84564,84565],{"class":53},"    liss.pop()\n",[36,84567,84568],{"class":38,"line":4150},[36,84569,84570],{"class":53},"    console.log(liss)\n",[36,84572,84573,84575,84577],{"class":38,"line":4155},[36,84574,54911],{"class":53},[36,84576,54307],{"class":53794},[36,84578,53801],{"class":53},[36,84580,84581,84583,84585],{"class":38,"line":4161},[36,84582,54279],{"class":53},[36,84584,54294],{"class":53794},[36,84586,53801],{"class":53},[19,84588,84589],{},[4000,84590],{"alt":31,"src":84591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24515,84593,84595],{"id":84594},"_41053-string","4.10.5.3 String",[19,84597,84598],{},[4000,84599],{"alt":31,"src":84600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25427,84602,84604],{"id":84603},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,84606,84608],{"className":55561,"code":84607,"language":55563,"meta":31,"style":31},"\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",[33,84609,84610,84618,84626,84631,84636,84641,84645,84650,84655,84660,84668],{"__ignoreMap":31},[36,84611,84612,84614,84616],{"class":38,"line":39},[36,84613,1507],{"class":53},[36,84615,54294],{"class":53794},[36,84617,53801],{"class":53},[36,84619,84620,84622,84624],{"class":38,"line":46},[36,84621,54638],{"class":53},[36,84623,54307],{"class":53794},[36,84625,53801],{"class":53},[36,84627,84628],{"class":38,"line":82},[36,84629,84630],{"class":53},"    \u002F\u002F 把字符串转化为数组\n",[36,84632,84633],{"class":38,"line":88},[36,84634,84635],{"class":53},"    const str = 'pink,red'\n",[36,84637,84638],{"class":38,"line":195},[36,84639,84640],{"class":53},"    const arr = str.split(',')\n",[36,84642,84643],{"class":38,"line":1517},[36,84644,83119],{"class":53},[36,84646,84647],{"class":38,"line":2421},[36,84648,84649],{"class":53},"    const str1 = '2025-8-25'\n",[36,84651,84652],{"class":38,"line":2446},[36,84653,84654],{"class":53},"    const arr1 = str1.split('-')\n",[36,84656,84657],{"class":38,"line":2469},[36,84658,84659],{"class":53},"    console.log(arr1)\n",[36,84661,84662,84664,84666],{"class":38,"line":2492},[36,84663,54911],{"class":53},[36,84665,54307],{"class":53794},[36,84667,53801],{"class":53},[36,84669,84670,84672,84674],{"class":38,"line":4150},[36,84671,54279],{"class":53},[36,84673,54294],{"class":53794},[36,84675,53801],{"class":53},[25427,84677,84679],{"id":84678},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84681,7712],{},[19,84683,84684],{},"substring(indexStart)",[19,84686,84687],{},"substring(indexStart, indexEnd)",[3680,84689,84690,84701,84713,84723],{},[436,84691,84692,84693,84696,84697,84700],{},"如果省略了 ",[33,84694,84695],{},"indexEnd","，则 ",[33,84698,84699],{},"substring()"," 提取字符直到字符串的末尾",[436,84702,84703,84704,84707,84708,84696,84710,84712],{},"如果 ",[33,84705,84706],{},"indexStart"," 等于 ",[33,84709,84695],{},[33,84711,84699],{}," 返回一个空字符串",[436,84714,84703,84715,84717,84718,84696,84720,84722],{},[33,84716,84706],{}," 大于 ",[33,84719,84695],{},[33,84721,84699],{}," 的效果就像交换了这两个参数一样",[436,84724,84725],{},"结束的索引号不包含想要截取的部分",[26,84727,84729],{"className":83970,"code":84728,"language":83972,"meta":31,"style":31},"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",[33,84730,84731,84743,84747,84781,84811,84815,84846,84850,84877,84907,84937,84941,84972],{"__ignoreMap":31},[36,84732,84733,84736,84738,84741],{"class":38,"line":39},[36,84734,84735],{"class":53},"const anyString ",[36,84737,115],{"class":114},[36,84739,84740],{"class":57}," \"Mozilla\"",[36,84742,3833],{"class":53},[36,84744,84745],{"class":38,"line":46},[36,84746,546],{"emptyLinePlaceholder":545},[36,84748,84749,84752,84754,84756,84758,84761,84763,84766,84768,84770,84772,84774,84776,84778],{"class":38,"line":82},[36,84750,84751],{"class":49},"console",[36,84753,3235],{"class":53},[36,84755,60737],{"class":49},[36,84757,54],{"class":53},[36,84759,84760],{"class":49},"anyString",[36,84762,3235],{"class":53},[36,84764,84765],{"class":49},"substring",[36,84767,54],{"class":53},[36,84769,713],{"class":49},[36,84771,14958],{"class":53},[36,84773,707],{"class":49},[36,84775,77738],{"class":53},[36,84777,1080],{"class":114},[36,84779,84780],{"class":57}," 'M'\n",[36,84782,84783,84785,84787,84789,84791,84793,84795,84797,84799,84801,84803,84805,84807,84809],{"class":38,"line":88},[36,84784,84751],{"class":49},[36,84786,3235],{"class":53},[36,84788,60737],{"class":49},[36,84790,54],{"class":53},[36,84792,84760],{"class":49},[36,84794,3235],{"class":53},[36,84796,84765],{"class":49},[36,84798,54],{"class":53},[36,84800,707],{"class":49},[36,84802,14958],{"class":53},[36,84804,713],{"class":49},[36,84806,77738],{"class":53},[36,84808,1080],{"class":114},[36,84810,84780],{"class":57},[36,84812,84813],{"class":38,"line":195},[36,84814,546],{"emptyLinePlaceholder":545},[36,84816,84817,84819,84821,84823,84825,84827,84829,84831,84833,84835,84837,84839,84841,84843],{"class":38,"line":1517},[36,84818,84751],{"class":49},[36,84820,3235],{"class":53},[36,84822,60737],{"class":49},[36,84824,54],{"class":53},[36,84826,84760],{"class":49},[36,84828,3235],{"class":53},[36,84830,84765],{"class":49},[36,84832,54],{"class":53},[36,84834,713],{"class":49},[36,84836,14958],{"class":53},[36,84838,3025],{"class":49},[36,84840,77738],{"class":53},[36,84842,1080],{"class":114},[36,84844,84845],{"class":57}," 'Mozill'\n",[36,84847,84848],{"class":38,"line":2421},[36,84849,546],{"emptyLinePlaceholder":545},[36,84851,84852,84854,84856,84858,84860,84862,84864,84866,84868,84870,84872,84874],{"class":38,"line":2446},[36,84853,84751],{"class":49},[36,84855,3235],{"class":53},[36,84857,60737],{"class":49},[36,84859,54],{"class":53},[36,84861,84760],{"class":49},[36,84863,3235],{"class":53},[36,84865,84765],{"class":49},[36,84867,54],{"class":53},[36,84869,2977],{"class":49},[36,84871,77738],{"class":53},[36,84873,1080],{"class":114},[36,84875,84876],{"class":57}," 'lla'\n",[36,84878,84879,84881,84883,84885,84887,84889,84891,84893,84895,84897,84899,84901,84903,84905],{"class":38,"line":2469},[36,84880,84751],{"class":49},[36,84882,3235],{"class":53},[36,84884,60737],{"class":49},[36,84886,54],{"class":53},[36,84888,84760],{"class":49},[36,84890,3235],{"class":53},[36,84892,84765],{"class":49},[36,84894,54],{"class":53},[36,84896,2977],{"class":49},[36,84898,14958],{"class":53},[36,84900,3050],{"class":49},[36,84902,77794],{"class":53},[36,84904,1080],{"class":114},[36,84906,84876],{"class":57},[36,84908,84909,84911,84913,84915,84917,84919,84921,84923,84925,84927,84929,84931,84933,84935],{"class":38,"line":2492},[36,84910,84751],{"class":49},[36,84912,3235],{"class":53},[36,84914,60737],{"class":49},[36,84916,54],{"class":53},[36,84918,84760],{"class":49},[36,84920,3235],{"class":53},[36,84922,84765],{"class":49},[36,84924,54],{"class":53},[36,84926,3050],{"class":49},[36,84928,14958],{"class":53},[36,84930,2977],{"class":49},[36,84932,77738],{"class":53},[36,84934,1080],{"class":114},[36,84936,84876],{"class":57},[36,84938,84939],{"class":38,"line":4150},[36,84940,546],{"emptyLinePlaceholder":545},[36,84942,84943,84945,84947,84949,84951,84953,84955,84957,84959,84961,84963,84965,84967,84969],{"class":38,"line":4155},[36,84944,84751],{"class":49},[36,84946,3235],{"class":53},[36,84948,60737],{"class":49},[36,84950,54],{"class":53},[36,84952,84760],{"class":49},[36,84954,3235],{"class":53},[36,84956,84765],{"class":49},[36,84958,54],{"class":53},[36,84960,713],{"class":49},[36,84962,14958],{"class":53},[36,84964,3050],{"class":49},[36,84966,77738],{"class":53},[36,84968,1080],{"class":114},[36,84970,84971],{"class":57}," 'Mozilla'\n",[36,84973,84974,84976,84978,84980,84982,84984,84986,84988,84990,84992,84994,84996,84998,85000],{"class":38,"line":4161},[36,84975,84751],{"class":49},[36,84977,3235],{"class":53},[36,84979,60737],{"class":49},[36,84981,54],{"class":53},[36,84983,84760],{"class":49},[36,84985,3235],{"class":53},[36,84987,84765],{"class":49},[36,84989,54],{"class":53},[36,84991,713],{"class":49},[36,84993,14958],{"class":53},[36,84995,1317],{"class":49},[36,84997,77738],{"class":53},[36,84999,1080],{"class":114},[36,85001,84971],{"class":57},[25427,85003,85005],{"id":85004},"_410533-startswith","4.10.5.3.3 startsWith",[19,85007,85008,85011,85012,85017,85018,85020,85021],{},[33,85009,85010],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2839,85013,85014],{},[33,85015,85016],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,85019,3900],{}," 或 ",[33,85022,68507],{},[26,85024,85026],{"className":79979,"code":85025,"language":79981,"meta":31,"style":31},"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",[33,85027,85028,85040,85059,85064,85084],{"__ignoreMap":31},[36,85029,85030,85032,85035,85037],{"class":38,"line":39},[36,85031,9319],{"class":114},[36,85033,85034],{"class":53}," str1 ",[36,85036,115],{"class":114},[36,85038,85039],{"class":57}," \"Saturday night plans\"\n",[36,85041,85042,85044,85046,85049,85052,85054,85057],{"class":38,"line":46},[36,85043,80016],{"class":53},[36,85045,60737],{"class":4500},[36,85047,85048],{"class":53},"(str1.",[36,85050,85051],{"class":4500},"startsWith",[36,85053,54],{"class":53},[36,85055,85056],{"class":57},"\"Sat\"",[36,85058,625],{"class":53},[36,85060,85061],{"class":38,"line":82},[36,85062,85063],{"class":42},"\u002F\u002F Expected output: true\n",[36,85065,85066,85068,85070,85072,85074,85076,85078,85080,85082],{"class":38,"line":88},[36,85067,80016],{"class":53},[36,85069,60737],{"class":4500},[36,85071,85048],{"class":53},[36,85073,85051],{"class":4500},[36,85075,54],{"class":53},[36,85077,85056],{"class":57},[36,85079,14958],{"class":53},[36,85081,2767],{"class":49},[36,85083,625],{"class":53},[36,85085,85086],{"class":38,"line":195},[36,85087,85088],{"class":42},"\u002F\u002F Expected output: false\n",[26,85090,85092],{"className":53129,"code":85091,"language":53131,"meta":31,"style":31},"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",[33,85093,85094,85099,85104,85108,85113,85118],{"__ignoreMap":31},[36,85095,85096],{"class":38,"line":39},[36,85097,85098],{"class":53},"startsWith(searchString)\n",[36,85100,85101],{"class":38,"line":46},[36,85102,85103],{"class":53},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,85105,85106],{"class":38,"line":82},[36,85107,546],{"emptyLinePlaceholder":545},[36,85109,85110],{"class":38,"line":88},[36,85111,85112],{"class":53},"const str3 = 'pink老师上课中'\n",[36,85114,85115],{"class":38,"line":195},[36,85116,85117],{"class":53},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,85119,85120],{"class":38,"line":1517},[36,85121,85122],{"class":53},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25427,85124,85126],{"id":85125},"_410534-includes","4.10.5.3.4 includes",[19,85128,85129],{},"includes(searchString) includes(searchString, position)",[433,85131,85132],{},[436,85133,85134],{},"searchString:",[19,85136,85137,85138,85140,85141,85146,85147,85152,85153,708,85156,85159,85160,85163],{},"一个要在 ",[33,85139,256],{}," 中查找的字符串。",[2923,85142,85145],{"href":85143,"rel":85144},"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",[26381],"不能是正则表达式","。所有非正则表达式的值都会被",[2923,85148,85151],{"href":85149,"rel":85150},"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",[26381],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,85154,85155],{},"undefined",[33,85157,85158],{},"includes()"," 方法会在字符串中搜索 ",[33,85161,85162],{},"\"undefined\"","，这通常不是你想要的",[433,85165,85166],{"start":46},[436,85167,85168,3535],{},[33,85169,85170],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85172,85173,85174,85177,85178],{},"在字符串中开始搜索 ",[33,85175,85176],{},"searchString"," 的位置。默认值为 ",[33,85179,713],{},[433,85181,85182],{"start":82},[436,85183,85184],{},"返回值：",[19,85186,85187,85188,85190,85191,85195,85196],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,85189,85176],{}," 为空字符串的情况），则返回 ",[2839,85192,85193],{},[33,85194,3900],{}," ，否则返回 ",[2839,85197,85198],{},[33,85199,68507],{},[433,85201,85202],{"start":88},[436,85203,85204],{},"异常：",[19,85206,84703,85207,16317,85209,85213],{},[33,85208,85176],{},[2923,85210,85212],{"href":85143,"rel":85211},[26381],"是一个正则表达式","，则会抛出",[19,85215,85216],{},"只要是有就是true，不需要非得以谁开头结尾",[26,85218,85220],{"className":79979,"code":85219,"language":79981,"meta":31,"style":31},"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",[33,85221,85222,85233,85256,85275,85295,85317,85336],{"__ignoreMap":31},[36,85223,85224,85226,85228,85230],{"class":38,"line":39},[36,85225,9319],{"class":114},[36,85227,82258],{"class":53},[36,85229,115],{"class":114},[36,85231,85232],{"class":57}," \"To be, or not to be, that is the question.\"\n",[36,85234,85235,85237,85239,85242,85245,85247,85250,85253],{"class":38,"line":46},[36,85236,80016],{"class":53},[36,85238,60737],{"class":4500},[36,85240,85241],{"class":53},"(str.",[36,85243,85244],{"class":4500},"includes",[36,85246,54],{"class":53},[36,85248,85249],{"class":57},"\"To be\"",[36,85251,85252],{"class":53},"))",[36,85254,85255],{"class":42},"  \u002F\u002F true\n",[36,85257,85258,85260,85262,85264,85266,85268,85271,85273],{"class":38,"line":82},[36,85259,80016],{"class":53},[36,85261,60737],{"class":4500},[36,85263,85241],{"class":53},[36,85265,85244],{"class":4500},[36,85267,54],{"class":53},[36,85269,85270],{"class":57},"\"question\"",[36,85272,85252],{"class":53},[36,85274,85255],{"class":42},[36,85276,85277,85279,85281,85283,85285,85287,85290,85292],{"class":38,"line":88},[36,85278,80016],{"class":53},[36,85280,60737],{"class":4500},[36,85282,85241],{"class":53},[36,85284,85244],{"class":4500},[36,85286,54],{"class":53},[36,85288,85289],{"class":57},"\"nonexistent\"",[36,85291,85252],{"class":53},[36,85293,85294],{"class":42},"  \u002F\u002F false\n",[36,85296,85297,85299,85301,85303,85305,85307,85309,85311,85313,85315],{"class":38,"line":195},[36,85298,80016],{"class":53},[36,85300,60737],{"class":4500},[36,85302,85241],{"class":53},[36,85304,85244],{"class":4500},[36,85306,54],{"class":53},[36,85308,85249],{"class":57},[36,85310,14958],{"class":53},[36,85312,707],{"class":49},[36,85314,85252],{"class":53},[36,85316,85294],{"class":42},[36,85318,85319,85321,85323,85325,85327,85329,85332,85334],{"class":38,"line":1517},[36,85320,80016],{"class":53},[36,85322,60737],{"class":4500},[36,85324,85241],{"class":53},[36,85326,85244],{"class":4500},[36,85328,54],{"class":53},[36,85330,85331],{"class":57},"\"TO BE\"",[36,85333,85252],{"class":53},[36,85335,85294],{"class":42},[36,85337,85338,85340,85342,85344,85346,85348,85350,85352],{"class":38,"line":2421},[36,85339,80016],{"class":53},[36,85341,60737],{"class":4500},[36,85343,85241],{"class":53},[36,85345,85244],{"class":4500},[36,85347,54],{"class":53},[36,85349,10179],{"class":57},[36,85351,85252],{"class":53},[36,85353,85255],{"class":42},[25427,85355,85357],{"id":85356},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,85359,85361],{"className":55561,"code":85360,"language":55563,"meta":31,"style":31},"\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",[33,85362,85363,85371,85379,85384,85389,85394,85399,85404,85412],{"__ignoreMap":31},[36,85364,85365,85367,85369],{"class":38,"line":39},[36,85366,1507],{"class":53},[36,85368,54294],{"class":53794},[36,85370,53801],{"class":53},[36,85372,85373,85375,85377],{"class":38,"line":46},[36,85374,54638],{"class":53},[36,85376,54307],{"class":53794},[36,85378,53801],{"class":53},[36,85380,85381],{"class":38,"line":82},[36,85382,85383],{"class":53},"    const num = 10\n",[36,85385,85386],{"class":38,"line":88},[36,85387,85388],{"class":53},"    \u002F\u002F 强制转换\n",[36,85390,85391],{"class":38,"line":195},[36,85392,85393],{"class":53},"    console.log(String(num))\n",[36,85395,85396],{"class":38,"line":1517},[36,85397,85398],{"class":53},"    \u002F\u002F toString()方法转换\n",[36,85400,85401],{"class":38,"line":2421},[36,85402,85403],{"class":53},"    console.log(num.toString())\n",[36,85405,85406,85408,85410],{"class":38,"line":2446},[36,85407,54911],{"class":53},[36,85409,54307],{"class":53794},[36,85411,53801],{"class":53},[36,85413,85414,85416,85418],{"class":38,"line":2469},[36,85415,54279],{"class":53},[36,85417,54294],{"class":53794},[36,85419,53801],{"class":53},[25427,85421,85423],{"id":85422},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85425,85426],{},[4000,85427],{"alt":31,"src":85428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,85430,85432],{"className":53129,"code":85431,"language":53131,"meta":31,"style":31},"\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",[33,85433,85434,85444,85458,85462,85470,85484,85504,85516,85524,85528,85536,85548,85556,85568,85573,85578,85583,85630,85646,85654,85662,85666],{"__ignoreMap":31},[36,85435,85436,85438,85440,85442],{"class":38,"line":39},[36,85437,53791],{"class":53},[36,85439,53795],{"class":53794},[36,85441,53798],{"class":4500},[36,85443,53801],{"class":53},[36,85445,85446,85448,85450,85452,85454,85456],{"class":38,"line":46},[36,85447,1507],{"class":53},[36,85449,53131],{"class":53794},[36,85451,53810],{"class":4500},[36,85453,115],{"class":53},[36,85455,53815],{"class":57},[36,85457,53801],{"class":53},[36,85459,85460],{"class":38,"line":82},[36,85461,546],{"emptyLinePlaceholder":545},[36,85463,85464,85466,85468],{"class":38,"line":88},[36,85465,1507],{"class":53},[36,85467,53828],{"class":53794},[36,85469,53801],{"class":53},[36,85471,85472,85474,85476,85478,85480,85482],{"class":38,"line":195},[36,85473,54638],{"class":53},[36,85475,53838],{"class":53794},[36,85477,53841],{"class":4500},[36,85479,115],{"class":53},[36,85481,53846],{"class":57},[36,85483,53801],{"class":53},[36,85485,85486,85488,85490,85492,85494,85496,85498,85500,85502],{"class":38,"line":1517},[36,85487,54638],{"class":53},[36,85489,53838],{"class":53794},[36,85491,17440],{"class":4500},[36,85493,115],{"class":53},[36,85495,53885],{"class":57},[36,85497,53865],{"class":4500},[36,85499,115],{"class":53},[36,85501,53892],{"class":57},[36,85503,53801],{"class":53},[36,85505,85506,85508,85510,85512,85514],{"class":38,"line":2421},[36,85507,54638],{"class":53},[36,85509,53901],{"class":53794},[36,85511,53904],{"class":53},[36,85513,53901],{"class":53794},[36,85515,53801],{"class":53},[36,85517,85518,85520,85522],{"class":38,"line":2446},[36,85519,54279],{"class":53},[36,85521,53828],{"class":53794},[36,85523,53801],{"class":53},[36,85525,85526],{"class":38,"line":2469},[36,85527,546],{"emptyLinePlaceholder":545},[36,85529,85530,85532,85534],{"class":38,"line":2492},[36,85531,1507],{"class":53},[36,85533,54294],{"class":53794},[36,85535,53801],{"class":53},[36,85537,85538,85540,85542,85544,85546],{"class":38,"line":4150},[36,85539,54638],{"class":53},[36,85541,54105],{"class":53794},[36,85543,57805],{"class":53},[36,85545,54105],{"class":53794},[36,85547,53801],{"class":53},[36,85549,85550,85552,85554],{"class":38,"line":4155},[36,85551,54638],{"class":53},[36,85553,54307],{"class":53794},[36,85555,53801],{"class":53},[36,85557,85558,85560,85563,85565],{"class":38,"line":4161},[36,85559,13744],{"class":114},[36,85561,85562],{"class":49}," gift",[36,85564,498],{"class":114},[36,85566,85567],{"class":57}," '50g的茶叶，清洗球'\n",[36,85569,85570],{"class":38,"line":4166},[36,85571,85572],{"class":42},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,85574,85575],{"class":38,"line":4180},[36,85576,85577],{"class":42},"    \u002F\u002F console.log(gift.split(','))\n",[36,85579,85580],{"class":38,"line":4185},[36,85581,85582],{"class":42},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,85584,85585,85587,85589,85591,85594,85597,85599,85602,85604,85606,85608,85610,85612,85615,85617,85620,85622,85624,85626,85628],{"class":38,"line":4191},[36,85586,13744],{"class":114},[36,85588,1747],{"class":49},[36,85590,498],{"class":114},[36,85592,85593],{"class":53}," gift.",[36,85595,85596],{"class":4500},"split",[36,85598,54],{"class":53},[36,85600,85601],{"class":57},"'，'",[36,85603,33330],{"class":53},[36,85605,76529],{"class":4500},[36,85607,54],{"class":53},[36,85609,82278],{"class":1997},[36,85611,82281],{"class":114},[36,85613,85614],{"class":57}," `\u003Cspan>【赠品】${",[36,85616,82278],{"class":53},[36,85618,85619],{"class":57},"}\u003C\u002Fspan>\u003Cbr>`",[36,85621,33330],{"class":53},[36,85623,76708],{"class":4500},[36,85625,54],{"class":53},[36,85627,76713],{"class":57},[36,85629,61],{"class":53},[36,85631,85632,85634,85636,85638,85640,85642,85644],{"class":38,"line":4212},[36,85633,54901],{"class":53},[36,85635,56891],{"class":4500},[36,85637,54],{"class":53},[36,85639,84412],{"class":57},[36,85641,76734],{"class":53},[36,85643,115],{"class":114},[36,85645,76470],{"class":53},[36,85647,85648,85650,85652],{"class":38,"line":4217},[36,85649,54911],{"class":53},[36,85651,54307],{"class":53794},[36,85653,53801],{"class":53},[36,85655,85656,85658,85660],{"class":38,"line":4231},[36,85657,54279],{"class":53},[36,85659,54294],{"class":53794},[36,85661,53801],{"class":53},[36,85663,85664],{"class":38,"line":4236},[36,85665,546],{"emptyLinePlaceholder":545},[36,85667,85668,85670,85672],{"class":38,"line":4264},[36,85669,54279],{"class":53},[36,85671,53131],{"class":53794},[36,85673,53801],{"class":53},[24515,85675,85677],{"id":85676},"_41054-number","4.10.5.4 Number",[19,85679,85680],{},[4000,85681],{"alt":31,"src":85682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85684,85685],{},"整数也可以进行toFixed来保留小数",[19,85687,85688],{},"比如：",[19,85690,85691],{},"const price=10",[19,85693,85694],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24515,85696,85698],{"id":85697},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85700,85701],{},[4000,85702],{"alt":31,"src":85703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,85705,85707],{"className":53129,"code":85706,"language":53131,"meta":31,"style":31},"\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",[33,85708,85709,85719,85733,85737,85745,85759,85779,85791,85799,85805,85815,85825,85835,85839,85843,85849,85861,85875,85879,85883,85889,85901,85917,85927,85943,85947,85951,85957,85967,85977,85981,85985,85993,86005,86017,86029,86033,86037,86045,86057,86061,86065,86076,86086,86098,86110,86120,86124,86128,86136,86145,86157,86167,86177,86181,86185,86193,86202,86209,86219,86231,86235,86239,86248,86258,86269,86281,86293,86297,86301,86310,86320,86331,86335,86339,86345,86357,86369,86379,86389,86407,86419,86423,86427,86436,86448,86458,86468,86480,86484,86492,86500,86504,86512,86526,86534,86548,86576,86584,86592,86602,86606,86614,86622,86631,86639,86648,86658,86662,86666,86674,86682,86691,86699,86707,86720,86724,86728,86736,86744,86753,86761,86769,86784,86788,86792,86800,86808,86817,86825,86833,86847,86855,86859,86863,86868,86894,86899,86935,86940,86963,86968,87022,87027,87063,87067,87073,87078,87087,87101,87110,87129,87138,87148,87153,87158,87171,87176,87230,87256,87264,87272,87276],{"__ignoreMap":31},[36,85710,85711,85713,85715,85717],{"class":38,"line":39},[36,85712,53791],{"class":53},[36,85714,53795],{"class":53794},[36,85716,53798],{"class":4500},[36,85718,53801],{"class":53},[36,85720,85721,85723,85725,85727,85729,85731],{"class":38,"line":46},[36,85722,1507],{"class":53},[36,85724,53131],{"class":53794},[36,85726,53810],{"class":4500},[36,85728,115],{"class":53},[36,85730,53815],{"class":57},[36,85732,53801],{"class":53},[36,85734,85735],{"class":38,"line":82},[36,85736,546],{"emptyLinePlaceholder":545},[36,85738,85739,85741,85743],{"class":38,"line":88},[36,85740,1507],{"class":53},[36,85742,53828],{"class":53794},[36,85744,53801],{"class":53},[36,85746,85747,85749,85751,85753,85755,85757],{"class":38,"line":195},[36,85748,54638],{"class":53},[36,85750,53838],{"class":53794},[36,85752,53841],{"class":4500},[36,85754,115],{"class":53},[36,85756,53846],{"class":57},[36,85758,53801],{"class":53},[36,85760,85761,85763,85765,85767,85769,85771,85773,85775,85777],{"class":38,"line":1517},[36,85762,54638],{"class":53},[36,85764,53838],{"class":53794},[36,85766,17440],{"class":4500},[36,85768,115],{"class":53},[36,85770,53885],{"class":57},[36,85772,53865],{"class":4500},[36,85774,115],{"class":53},[36,85776,53892],{"class":57},[36,85778,53801],{"class":53},[36,85780,85781,85783,85785,85787,85789],{"class":38,"line":2421},[36,85782,54638],{"class":53},[36,85784,53901],{"class":53794},[36,85786,53904],{"class":53},[36,85788,53901],{"class":53794},[36,85790,53801],{"class":53},[36,85792,85793,85795,85797],{"class":38,"line":2446},[36,85794,54638],{"class":53},[36,85796,2602],{"class":53794},[36,85798,53801],{"class":53},[36,85800,85801,85803],{"class":38,"line":2469},[36,85802,8930],{"class":53794},[36,85804,18091],{"class":53},[36,85806,85807,85809,85811,85813],{"class":38,"line":2492},[36,85808,57186],{"class":49},[36,85810,53931],{"class":53},[36,85812,713],{"class":49},[36,85814,3833],{"class":53},[36,85816,85817,85819,85821,85823],{"class":38,"line":4150},[36,85818,57197],{"class":49},[36,85820,53931],{"class":53},[36,85822,713],{"class":49},[36,85824,3833],{"class":53},[36,85826,85827,85829,85831,85833],{"class":38,"line":4155},[36,85828,75082],{"class":49},[36,85830,53931],{"class":53},[36,85832,62994],{"class":49},[36,85834,3833],{"class":53},[36,85836,85837],{"class":38,"line":4161},[36,85838,4721],{"class":53},[36,85840,85841],{"class":38,"line":4166},[36,85842,546],{"emptyLinePlaceholder":545},[36,85844,85845,85847],{"class":38,"line":4180},[36,85846,64611],{"class":4500},[36,85848,18091],{"class":53},[36,85850,85851,85853,85855,85857,85859],{"class":38,"line":4185},[36,85852,57262],{"class":49},[36,85854,53931],{"class":53},[36,85856,81057],{"class":49},[36,85858,53986],{"class":114},[36,85860,3833],{"class":53},[36,85862,85863,85865,85867,85869,85871,85873],{"class":38,"line":4191},[36,85864,57197],{"class":49},[36,85866,53931],{"class":53},[36,85868,166],{"class":49},[36,85870,53986],{"class":114},[36,85872,54050],{"class":49},[36,85874,3833],{"class":53},[36,85876,85877],{"class":38,"line":4212},[36,85878,4721],{"class":53},[36,85880,85881],{"class":38,"line":4217},[36,85882,546],{"emptyLinePlaceholder":545},[36,85884,85885,85887],{"class":38,"line":4231},[36,85886,81108],{"class":4500},[36,85888,18091],{"class":53},[36,85890,85891,85893,85895,85897,85899],{"class":38,"line":4236},[36,85892,57186],{"class":49},[36,85894,53931],{"class":53},[36,85896,3252],{"class":49},[36,85898,53986],{"class":114},[36,85900,3833],{"class":53},[36,85902,85903,85905,85907,85909,85911,85913,85915],{"class":38,"line":4264},[36,85904,64348],{"class":49},[36,85906,53931],{"class":53},[36,85908,30632],{"class":49},[36,85910,81163],{"class":49},[36,85912,81166],{"class":49},[36,85914,3371],{"class":114},[36,85916,3833],{"class":53},[36,85918,85919,85921,85923,85925],{"class":38,"line":4269},[36,85920,57500],{"class":49},[36,85922,53931],{"class":53},[36,85924,53971],{"class":49},[36,85926,3833],{"class":53},[36,85928,85929,85931,85933,85935,85937,85939,85941],{"class":38,"line":4286},[36,85930,64465],{"class":49},[36,85932,53931],{"class":53},[36,85934,707],{"class":49},[36,85936,53986],{"class":114},[36,85938,54015],{"class":49},[36,85940,64732],{"class":49},[36,85942,3833],{"class":53},[36,85944,85945],{"class":38,"line":4291},[36,85946,4721],{"class":53},[36,85948,85949],{"class":38,"line":4296},[36,85950,546],{"emptyLinePlaceholder":545},[36,85952,85953,85955],{"class":38,"line":4301},[36,85954,81226],{"class":4500},[36,85956,18091],{"class":53},[36,85958,85959,85961,85963,85965],{"class":38,"line":4315},[36,85960,64513],{"class":49},[36,85962,53931],{"class":53},[36,85964,64518],{"class":49},[36,85966,3833],{"class":53},[36,85968,85969,85971,85973,85975],{"class":38,"line":4320},[36,85970,57375],{"class":49},[36,85972,53931],{"class":53},[36,85974,64306],{"class":49},[36,85976,3833],{"class":53},[36,85978,85979],{"class":38,"line":5109},[36,85980,4721],{"class":53},[36,85982,85983],{"class":38,"line":5123},[36,85984,546],{"emptyLinePlaceholder":545},[36,85986,85987,85989,85991],{"class":38,"line":5131},[36,85988,81108],{"class":4500},[36,85990,58106],{"class":53794},[36,85992,18091],{"class":53},[36,85994,85995,85997,85999,86001,86003],{"class":38,"line":5136},[36,85996,57262],{"class":49},[36,85998,53931],{"class":53},[36,86000,3288],{"class":49},[36,86002,53986],{"class":114},[36,86004,3833],{"class":53},[36,86006,86007,86009,86011,86013,86015],{"class":38,"line":5142},[36,86008,57276],{"class":49},[36,86010,53931],{"class":53},[36,86012,3288],{"class":49},[36,86014,53986],{"class":114},[36,86016,3833],{"class":53},[36,86018,86019,86021,86023,86025,86027],{"class":38,"line":5148},[36,86020,64238],{"class":49},[36,86022,53931],{"class":53},[36,86024,1134],{"class":49},[36,86026,53986],{"class":114},[36,86028,3833],{"class":53},[36,86030,86031],{"class":38,"line":5153},[36,86032,4721],{"class":53},[36,86034,86035],{"class":38,"line":10475},[36,86036,546],{"emptyLinePlaceholder":545},[36,86038,86039,86041,86043],{"class":38,"line":10499},[36,86040,81108],{"class":4500},[36,86042,64792],{"class":4500},[36,86044,18091],{"class":53},[36,86046,86047,86049,86051,86053,86055],{"class":38,"line":10504},[36,86048,57262],{"class":49},[36,86050,53931],{"class":53},[36,86052,4259],{"class":49},[36,86054,53986],{"class":114},[36,86056,3833],{"class":53},[36,86058,86059],{"class":38,"line":10510},[36,86060,4721],{"class":53},[36,86062,86063],{"class":38,"line":10537},[36,86064,546],{"emptyLinePlaceholder":545},[36,86066,86067,86069,86071,86074],{"class":38,"line":10542},[36,86068,81108],{"class":4500},[36,86070,64792],{"class":4500},[36,86072,86073],{"class":4500}," .tag",[36,86075,18091],{"class":53},[36,86077,86078,86080,86082,86084],{"class":38,"line":10548},[36,86079,57500],{"class":49},[36,86081,53931],{"class":53},[36,86083,63357],{"class":49},[36,86085,3833],{"class":53},[36,86087,86088,86090,86092,86094,86096],{"class":38,"line":10560},[36,86089,57186],{"class":49},[36,86091,53931],{"class":53},[36,86093,1188],{"class":49},[36,86095,53986],{"class":114},[36,86097,3833],{"class":53},[36,86099,86100,86102,86104,86106,86108],{"class":38,"line":10572},[36,86101,57413],{"class":49},[36,86103,53931],{"class":53},[36,86105,3176],{"class":49},[36,86107,53986],{"class":114},[36,86109,3833],{"class":53},[36,86111,86112,86114,86116,86118],{"class":38,"line":10584},[36,86113,59906],{"class":49},[36,86115,53931],{"class":53},[36,86117,64558],{"class":49},[36,86119,3833],{"class":53},[36,86121,86122],{"class":38,"line":12241},[36,86123,4721],{"class":53},[36,86125,86126],{"class":38,"line":12266},[36,86127,546],{"emptyLinePlaceholder":545},[36,86129,86130,86132,86134],{"class":38,"line":12289},[36,86131,81108],{"class":4500},[36,86133,81400],{"class":4500},[36,86135,33970],{"class":53},[36,86137,86138,86140,86143],{"class":38,"line":12313},[36,86139,81108],{"class":4500},[36,86141,86142],{"class":4500}," .sub-total",[36,86144,18091],{"class":53},[36,86146,86147,86149,86151,86153,86155],{"class":38,"line":12318},[36,86148,57413],{"class":49},[36,86150,53931],{"class":53},[36,86152,3326],{"class":49},[36,86154,53986],{"class":114},[36,86156,3833],{"class":53},[36,86158,86159,86161,86163,86165],{"class":38,"line":12323},[36,86160,59906],{"class":49},[36,86162,53931],{"class":53},[36,86164,81423],{"class":49},[36,86166,3833],{"class":53},[36,86168,86169,86171,86173,86175],{"class":38,"line":12328},[36,86170,64325],{"class":49},[36,86172,53931],{"class":53},[36,86174,707],{"class":49},[36,86176,3833],{"class":53},[36,86178,86179],{"class":38,"line":12337},[36,86180,4721],{"class":53},[36,86182,86183],{"class":38,"line":12342},[36,86184,546],{"emptyLinePlaceholder":545},[36,86186,86187,86189,86191],{"class":38,"line":12348},[36,86188,81108],{"class":4500},[36,86190,81440],{"class":4500},[36,86192,33970],{"class":53},[36,86194,86195,86197,86200],{"class":38,"line":12369},[36,86196,81108],{"class":4500},[36,86198,86199],{"class":4500}," .sub-total::before",[36,86201,33970],{"class":53},[36,86203,86204,86207],{"class":38,"line":12375},[36,86205,86206],{"class":4500},"    .amount::before",[36,86208,18091],{"class":53},[36,86210,86211,86213,86215,86217],{"class":38,"line":12389},[36,86212,81447],{"class":49},[36,86214,53931],{"class":53},[36,86216,81452],{"class":57},[36,86218,3833],{"class":53},[36,86220,86221,86223,86225,86227,86229],{"class":38,"line":12395},[36,86222,57413],{"class":49},[36,86224,53931],{"class":53},[36,86226,3176],{"class":49},[36,86228,53986],{"class":114},[36,86230,3833],{"class":53},[36,86232,86233],{"class":38,"line":12422},[36,86234,4721],{"class":53},[36,86236,86237],{"class":38,"line":12431},[36,86238,546],{"emptyLinePlaceholder":545},[36,86240,86241,86243,86246],{"class":38,"line":12437},[36,86242,81108],{"class":4500},[36,86244,86245],{"class":4500}," .spec",[36,86247,18091],{"class":53},[36,86249,86250,86252,86254,86256],{"class":38,"line":12445},[36,86251,64325],{"class":49},[36,86253,53931],{"class":53},[36,86255,1188],{"class":49},[36,86257,3833],{"class":53},[36,86259,86260,86262,86264,86267],{"class":38,"line":12450},[36,86261,59906],{"class":49},[36,86263,53931],{"class":53},[36,86265,86266],{"class":49},"#888",[36,86268,3833],{"class":53},[36,86270,86271,86273,86275,86277,86279],{"class":38,"line":19122},[36,86272,57413],{"class":49},[36,86274,53931],{"class":53},[36,86276,3226],{"class":49},[36,86278,53986],{"class":114},[36,86280,3833],{"class":53},[36,86282,86283,86285,86287,86289,86291],{"class":38,"line":19128},[36,86284,64488],{"class":49},[36,86286,53931],{"class":53},[36,86288,3376],{"class":49},[36,86290,53986],{"class":114},[36,86292,3833],{"class":53},[36,86294,86295],{"class":38,"line":19151},[36,86296,4721],{"class":53},[36,86298,86299],{"class":38,"line":19157},[36,86300,546],{"emptyLinePlaceholder":545},[36,86302,86303,86305,86308],{"class":38,"line":19180},[36,86304,81108],{"class":4500},[36,86306,86307],{"class":4500}," .count",[36,86309,18091],{"class":53},[36,86311,86312,86314,86316,86318],{"class":38,"line":19194},[36,86313,64325],{"class":49},[36,86315,53931],{"class":53},[36,86317,707],{"class":49},[36,86319,3833],{"class":53},[36,86321,86322,86324,86326,86329],{"class":38,"line":19214},[36,86323,59906],{"class":49},[36,86325,53931],{"class":53},[36,86327,86328],{"class":49},"#aaa",[36,86330,3833],{"class":53},[36,86332,86333],{"class":38,"line":19220},[36,86334,4721],{"class":53},[36,86336,86337],{"class":38,"line":19231},[36,86338,546],{"emptyLinePlaceholder":545},[36,86340,86341,86343],{"class":38,"line":19254},[36,86342,74961],{"class":4500},[36,86344,18091],{"class":53},[36,86346,86347,86349,86351,86353,86355],{"class":38,"line":19276},[36,86348,57262],{"class":49},[36,86350,53931],{"class":53},[36,86352,81057],{"class":49},[36,86354,53986],{"class":114},[36,86356,3833],{"class":53},[36,86358,86359,86361,86363,86365,86367],{"class":38,"line":19281},[36,86360,57197],{"class":49},[36,86362,53931],{"class":53},[36,86364,713],{"class":49},[36,86366,54050],{"class":49},[36,86368,3833],{"class":53},[36,86370,86371,86373,86375,86377],{"class":38,"line":19287},[36,86372,57500],{"class":49},[36,86374,53931],{"class":53},[36,86376,53971],{"class":49},[36,86378,3833],{"class":53},[36,86380,86381,86383,86385,86387],{"class":38,"line":19301},[36,86382,57511],{"class":49},[36,86384,53931],{"class":53},[36,86386,54074],{"class":49},[36,86388,3833],{"class":53},[36,86390,86391,86394,86396,86398,86400,86402,86405],{"class":38,"line":19314},[36,86392,86393],{"class":49},"      border-top",[36,86395,53931],{"class":53},[36,86397,707],{"class":49},[36,86399,53986],{"class":114},[36,86401,54015],{"class":49},[36,86403,86404],{"class":49}," #4e4e4e",[36,86406,3833],{"class":53},[36,86408,86409,86411,86413,86415,86417],{"class":38,"line":19319},[36,86410,57186],{"class":49},[36,86412,53931],{"class":53},[36,86414,3376],{"class":49},[36,86416,53986],{"class":114},[36,86418,3833],{"class":53},[36,86420,86421],{"class":38,"line":19333},[36,86422,4721],{"class":53},[36,86424,86425],{"class":38,"line":19338},[36,86426,546],{"emptyLinePlaceholder":545},[36,86428,86429,86431,86434],{"class":38,"line":19344},[36,86430,74961],{"class":4500},[36,86432,86433],{"class":4500}," .amount",[36,86435,18091],{"class":53},[36,86437,86438,86440,86442,86444,86446],{"class":38,"line":19349},[36,86439,57413],{"class":49},[36,86441,53931],{"class":53},[36,86443,3326],{"class":49},[36,86445,53986],{"class":114},[36,86447,3833],{"class":53},[36,86449,86450,86452,86454,86456],{"class":38,"line":19363},[36,86451,59906],{"class":49},[36,86453,53931],{"class":53},[36,86455,81423],{"class":49},[36,86457,3833],{"class":53},[36,86459,86460,86462,86464,86466],{"class":38,"line":19368},[36,86461,64822],{"class":49},[36,86463,53931],{"class":53},[36,86465,53983],{"class":49},[36,86467,3833],{"class":53},[36,86469,86470,86472,86474,86476,86478],{"class":38,"line":19373},[36,86471,64238],{"class":49},[36,86473,53931],{"class":53},[36,86475,3332],{"class":49},[36,86477,53986],{"class":114},[36,86479,3833],{"class":53},[36,86481,86482],{"class":38,"line":19387},[36,86483,4721],{"class":53},[36,86485,86486,86488,86490],{"class":38,"line":19399},[36,86487,54911],{"class":53},[36,86489,2602],{"class":53794},[36,86491,53801],{"class":53},[36,86493,86494,86496,86498],{"class":38,"line":19404},[36,86495,54279],{"class":53},[36,86497,53828],{"class":53794},[36,86499,53801],{"class":53},[36,86501,86502],{"class":38,"line":19417},[36,86503,546],{"emptyLinePlaceholder":545},[36,86505,86506,86508,86510],{"class":38,"line":19422},[36,86507,1507],{"class":53},[36,86509,54294],{"class":53794},[36,86511,53801],{"class":53},[36,86513,86514,86516,86518,86520,86522,86524],{"class":38,"line":19427},[36,86515,54638],{"class":53},[36,86517,54105],{"class":53794},[36,86519,55980],{"class":4500},[36,86521,115],{"class":53},[36,86523,65096],{"class":57},[36,86525,53801],{"class":53},[36,86527,86528,86530,86532],{"class":38,"line":19432},[36,86529,54911],{"class":53},[36,86531,54105],{"class":53794},[36,86533,53801],{"class":53},[36,86535,86536,86538,86540,86542,86544,86546],{"class":38,"line":19445},[36,86537,54638],{"class":53},[36,86539,54105],{"class":53794},[36,86541,55980],{"class":4500},[36,86543,115],{"class":53},[36,86545,65068],{"class":57},[36,86547,53801],{"class":53},[36,86549,86550,86552,86554,86557,86559,86561,86563,86566,86568,86570,86572,86574],{"class":38,"line":19450},[36,86551,53835],{"class":53},[36,86553,54105],{"class":53794},[36,86555,86556],{"class":53},">合计：\u003C",[36,86558,36],{"class":53794},[36,86560,55980],{"class":4500},[36,86562,115],{"class":53},[36,86564,86565],{"class":57},"\"amount\"",[36,86567,57805],{"class":53},[36,86569,36],{"class":53794},[36,86571,57805],{"class":53},[36,86573,54105],{"class":53794},[36,86575,53801],{"class":53},[36,86577,86578,86580,86582],{"class":38,"line":35135},[36,86579,54911],{"class":53},[36,86581,54105],{"class":53794},[36,86583,53801],{"class":53},[36,86585,86586,86588,86590],{"class":38,"line":35141},[36,86587,54638],{"class":53},[36,86589,54307],{"class":53794},[36,86591,53801],{"class":53},[36,86593,86594,86596,86598,86600],{"class":38,"line":35147},[36,86595,13744],{"class":114},[36,86597,81860],{"class":49},[36,86599,498],{"class":114},[36,86601,57938],{"class":53},[36,86603,86604],{"class":38,"line":35153},[36,86605,81869],{"class":53},[36,86607,86608,86610,86612],{"class":38,"line":35159},[36,86609,81874],{"class":53},[36,86611,81877],{"class":57},[36,86613,33970],{"class":53},[36,86615,86616,86618,86620],{"class":38,"line":35170},[36,86617,81884],{"class":53},[36,86619,81887],{"class":57},[36,86621,33970],{"class":53},[36,86623,86624,86626,86629],{"class":38,"line":35176},[36,86625,81894],{"class":53},[36,86627,86628],{"class":49},"289.9",[36,86630,33970],{"class":53},[36,86632,86633,86635,86637],{"class":38,"line":35196},[36,86634,81904],{"class":53},[36,86636,81907],{"class":57},[36,86638,33970],{"class":53},[36,86640,86641,86644,86646],{"class":38,"line":35202},[36,86642,86643],{"class":53},"        count: ",[36,86645,1188],{"class":49},[36,86647,33970],{"class":53},[36,86649,86650,86653,86656],{"class":38,"line":35213},[36,86651,86652],{"class":53},"        spec: { color: ",[36,86654,86655],{"class":57},"'白色'",[36,86657,58095],{"class":53},[36,86659,86660],{"class":38,"line":35219},[36,86661,80376],{"class":53},[36,86663,86664],{"class":38,"line":35225},[36,86665,81869],{"class":53},[36,86667,86668,86670,86672],{"class":38,"line":35231},[36,86669,81874],{"class":53},[36,86671,81968],{"class":57},[36,86673,33970],{"class":53},[36,86675,86676,86678,86680],{"class":38,"line":35237},[36,86677,81884],{"class":53},[36,86679,81977],{"class":57},[36,86681,33970],{"class":53},[36,86683,86684,86686,86689],{"class":38,"line":35243},[36,86685,81894],{"class":53},[36,86687,86688],{"class":49},"109.8",[36,86690,33970],{"class":53},[36,86692,86693,86695,86697],{"class":38,"line":35249},[36,86694,81904],{"class":53},[36,86696,81995],{"class":57},[36,86698,33970],{"class":53},[36,86700,86701,86703,86705],{"class":38,"line":35255},[36,86702,86643],{"class":53},[36,86704,2767],{"class":49},[36,86706,33970],{"class":53},[36,86708,86709,86712,86714,86716,86718],{"class":38,"line":35275},[36,86710,86711],{"class":53},"        spec: { size: ",[36,86713,84384],{"class":57},[36,86715,57955],{"class":53},[36,86717,84389],{"class":57},[36,86719,58095],{"class":53},[36,86721,86722],{"class":38,"line":35281},[36,86723,80376],{"class":53},[36,86725,86726],{"class":38,"line":35297},[36,86727,81869],{"class":53},[36,86729,86730,86732,86734],{"class":38,"line":35303},[36,86731,81874],{"class":53},[36,86733,82012],{"class":57},[36,86735,33970],{"class":53},[36,86737,86738,86740,86742],{"class":38,"line":35317},[36,86739,81884],{"class":53},[36,86741,82021],{"class":57},[36,86743,33970],{"class":53},[36,86745,86746,86748,86751],{"class":38,"line":35323},[36,86747,81894],{"class":53},[36,86749,86750],{"class":49},"488",[36,86752,33970],{"class":53},[36,86754,86755,86757,86759],{"class":38,"line":35338},[36,86756,81904],{"class":53},[36,86758,82039],{"class":57},[36,86760,33970],{"class":53},[36,86762,86763,86765,86767],{"class":38,"line":35344},[36,86764,86643],{"class":53},[36,86766,707],{"class":49},[36,86768,33970],{"class":53},[36,86770,86771,86773,86776,86779,86782],{"class":38,"line":35353},[36,86772,86652],{"class":53},[36,86774,86775],{"class":57},"'青色'",[36,86777,86778],{"class":53},", sum: ",[36,86780,86781],{"class":57},"'一大四小'",[36,86783,58095],{"class":53},[36,86785,86786],{"class":38,"line":35359},[36,86787,80376],{"class":53},[36,86789,86790],{"class":38,"line":35368},[36,86791,81869],{"class":53},[36,86793,86794,86796,86798],{"class":38,"line":35374},[36,86795,81874],{"class":53},[36,86797,82056],{"class":57},[36,86799,33970],{"class":53},[36,86801,86802,86804,86806],{"class":38,"line":35380},[36,86803,81884],{"class":53},[36,86805,82065],{"class":57},[36,86807,33970],{"class":53},[36,86809,86810,86812,86815],{"class":38,"line":35389},[36,86811,81894],{"class":53},[36,86813,86814],{"class":49},"139",[36,86816,33970],{"class":53},[36,86818,86819,86821,86823],{"class":38,"line":35395},[36,86820,81904],{"class":53},[36,86822,82083],{"class":57},[36,86824,33970],{"class":53},[36,86826,86827,86829,86831],{"class":38,"line":35406},[36,86828,86643],{"class":53},[36,86830,707],{"class":49},[36,86832,33970],{"class":53},[36,86834,86835,86837,86840,86842,86845],{"class":38,"line":35412},[36,86836,86711],{"class":53},[36,86838,86839],{"class":57},"'小号'",[36,86841,57955],{"class":53},[36,86843,86844],{"class":57},"'紫色'",[36,86846,57961],{"class":53},[36,86848,86849,86852],{"class":38,"line":35431},[36,86850,86851],{"class":53},"        gift: ",[36,86853,86854],{"class":57},"'50g茶叶,清洗球'\n",[36,86856,86857],{"class":38,"line":35437},[36,86858,54892],{"class":53},[36,86860,86861],{"class":38,"line":35448},[36,86862,55603],{"class":53},[36,86864,86865],{"class":38,"line":35454},[36,86866,86867],{"class":42},"    \u002F\u002F  1.根据数据渲染页面\n",[36,86869,86870,86872,86874,86876,86878,86880,86882,86884,86886,86888,86890,86892],{"class":38,"line":35474},[36,86871,54901],{"class":53},[36,86873,56891],{"class":4500},[36,86875,54],{"class":53},[36,86877,82382],{"class":57},[36,86879,76734],{"class":53},[36,86881,115],{"class":114},[36,86883,82529],{"class":53},[36,86885,76529],{"class":4500},[36,86887,54],{"class":53},[36,86889,82278],{"class":1997},[36,86891,82281],{"class":114},[36,86893,18091],{"class":53},[36,86895,86896],{"class":38,"line":35490},[36,86897,86898],{"class":42},"      \u002F\u002F 对象解构\n",[36,86900,86901,86903,86905,86907,86909,86911,86913,86915,86917,86919,86921,86924,86926,86929,86931,86933],{"class":38,"line":35496},[36,86902,60718],{"class":114},[36,86904,82290],{"class":53},[36,86906,82301],{"class":49},[36,86908,14958],{"class":53},[36,86910,1998],{"class":49},[36,86912,14958],{"class":53},[36,86914,2460],{"class":49},[36,86916,14958],{"class":53},[36,86918,2435],{"class":49},[36,86920,14958],{"class":53},[36,86922,86923],{"class":49},"spec",[36,86925,14958],{"class":53},[36,86927,86928],{"class":49},"gift",[36,86930,82304],{"class":53},[36,86932,115],{"class":114},[36,86934,82309],{"class":53},[36,86936,86937],{"class":38,"line":35510},[36,86938,86939],{"class":42},"      \u002F\u002F 规格文字模块处理\n",[36,86941,86942,86944,86947,86949,86951,86953,86955,86957,86959,86961],{"class":38,"line":35516},[36,86943,60718],{"class":114},[36,86945,86946],{"class":49}," text",[36,86948,498],{"class":114},[36,86950,84419],{"class":53},[36,86952,84422],{"class":4500},[36,86954,84425],{"class":53},[36,86956,76708],{"class":4500},[36,86958,54],{"class":53},[36,86960,84432],{"class":57},[36,86962,61],{"class":53},[36,86964,86965],{"class":38,"line":35522},[36,86966,86967],{"class":42},"      \u002F\u002F 处理赠品模块\n",[36,86969,86970,86972,86974,86976,86979,86981,86983,86985,86987,86990,86992,86994,86996,86998,87000,87003,87005,87008,87010,87012,87014,87016,87018,87020],{"class":38,"line":35533},[36,86971,60718],{"class":114},[36,86973,1747],{"class":49},[36,86975,498],{"class":114},[36,86977,86978],{"class":53}," gift ",[36,86980,3659],{"class":114},[36,86982,85593],{"class":53},[36,86984,85596],{"class":4500},[36,86986,54],{"class":53},[36,86988,86989],{"class":57},"','",[36,86991,33330],{"class":53},[36,86993,76529],{"class":4500},[36,86995,54],{"class":53},[36,86997,82278],{"class":1997},[36,86999,82281],{"class":114},[36,87001,87002],{"class":57}," `\u003Cspan class=\"tag\">【赠品】${",[36,87004,82278],{"class":53},[36,87006,87007],{"class":57},"}\u003C\u002Fspan>`",[36,87009,33330],{"class":53},[36,87011,76708],{"class":4500},[36,87013,54],{"class":53},[36,87015,76713],{"class":57},[36,87017,16236],{"class":53},[36,87019,3535],{"class":114},[36,87021,72591],{"class":57},[36,87023,87024],{"class":38,"line":35539},[36,87025,87026],{"class":42},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,87028,87029,87031,87034,87036,87039,87041,87043,87045,87048,87050,87052,87054,87057,87059,87061],{"class":38,"line":35545},[36,87030,60718],{"class":114},[36,87032,87033],{"class":49}," subtotal",[36,87035,498],{"class":114},[36,87037,87038],{"class":53}," ((price ",[36,87040,1050],{"class":114},[36,87042,8282],{"class":49},[36,87044,9045],{"class":114},[36,87046,87047],{"class":53}," count) ",[36,87049,1065],{"class":114},[36,87051,8282],{"class":49},[36,87053,33330],{"class":53},[36,87055,87056],{"class":4500},"toFixed",[36,87058,54],{"class":53},[36,87060,1188],{"class":49},[36,87062,61],{"class":53},[36,87064,87065],{"class":38,"line":35555},[36,87066,546],{"emptyLinePlaceholder":545},[36,87068,87069,87071],{"class":38,"line":35561},[36,87070,76467],{"class":114},[36,87072,72655],{"class":57},[36,87074,87075],{"class":38,"line":35572},[36,87076,87077],{"class":57},"        \u003Cdiv class=\"item\">\n",[36,87079,87080,87083,87085],{"class":38,"line":35578},[36,87081,87082],{"class":57},"          \u003Cimg src=\"${",[36,87084,82301],{"class":53},[36,87086,82333],{"class":57},[36,87088,87089,87092,87094,87097,87099],{"class":38,"line":35588},[36,87090,87091],{"class":57},"          \u003Cp class=\"name\">${",[36,87093,1998],{"class":53},[36,87095,87096],{"class":57},"}${",[36,87098,256],{"class":53},[36,87100,82343],{"class":57},[36,87102,87103,87106,87108],{"class":38,"line":35593},[36,87104,87105],{"class":57},"          \u003Cp class=\"spec\">${",[36,87107,690],{"class":53},[36,87109,82343],{"class":57},[36,87111,87112,87115,87117,87119,87121,87123,87125,87127],{"class":38,"line":35599},[36,87113,87114],{"class":57},"          \u003Cp class=\"price\">${",[36,87116,2435],{"class":53},[36,87118,3235],{"class":57},[36,87120,87056],{"class":4500},[36,87122,54],{"class":57},[36,87124,1188],{"class":49},[36,87126,3110],{"class":57},[36,87128,82343],{"class":57},[36,87130,87131,87134,87136],{"class":38,"line":35648},[36,87132,87133],{"class":57},"          \u003Cp class=\"count\">x${",[36,87135,2460],{"class":53},[36,87137,82343],{"class":57},[36,87139,87140,87143,87146],{"class":38,"line":35695},[36,87141,87142],{"class":57},"          \u003Cp class=\"sub-total\">${",[36,87144,87145],{"class":53},"subtotal",[36,87147,82343],{"class":57},[36,87149,87150],{"class":38,"line":35700},[36,87151,87152],{"class":57},"        \u003C\u002Fdiv> \n",[36,87154,87155],{"class":38,"line":35706},[36,87156,87157],{"class":57},"             `\n",[36,87159,87160,87163,87165,87167,87169],{"class":38,"line":35725},[36,87161,87162],{"class":53},"    }).",[36,87164,76708],{"class":4500},[36,87166,54],{"class":53},[36,87168,76713],{"class":57},[36,87170,61],{"class":53},[36,87172,87173],{"class":38,"line":35731},[36,87174,87175],{"class":42},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,87177,87178,87180,87182,87184,87186,87189,87191,87194,87196,87198,87200,87203,87206,87208,87211,87213,87215,87217,87220,87222,87224,87226,87228],{"class":38,"line":35751},[36,87179,13744],{"class":114},[36,87181,65273],{"class":49},[36,87183,498],{"class":114},[36,87185,82529],{"class":53},[36,87187,87188],{"class":4500},"reduce",[36,87190,4910],{"class":53},[36,87192,87193],{"class":1997},"prev",[36,87195,14958],{"class":53},[36,87197,82278],{"class":1997},[36,87199,16236],{"class":53},[36,87201,87202],{"class":114},"=>",[36,87204,87205],{"class":53}," prev ",[36,87207,121],{"class":114},[36,87209,87210],{"class":53}," (item.price ",[36,87212,1050],{"class":114},[36,87214,8282],{"class":49},[36,87216,9045],{"class":114},[36,87218,87219],{"class":53}," item.count) ",[36,87221,1065],{"class":114},[36,87223,8282],{"class":49},[36,87225,14958],{"class":53},[36,87227,713],{"class":49},[36,87229,61],{"class":53},[36,87231,87232,87234,87236,87238,87241,87243,87245,87248,87250,87252,87254],{"class":38,"line":35757},[36,87233,54901],{"class":53},[36,87235,56891],{"class":4500},[36,87237,54],{"class":53},[36,87239,87240],{"class":57},"'.amount'",[36,87242,76734],{"class":53},[36,87244,115],{"class":114},[36,87246,87247],{"class":53}," total.",[36,87249,87056],{"class":4500},[36,87251,54],{"class":53},[36,87253,1188],{"class":49},[36,87255,61],{"class":53},[36,87257,87258,87260,87262],{"class":38,"line":35763},[36,87259,54911],{"class":53},[36,87261,54307],{"class":53794},[36,87263,53801],{"class":53},[36,87265,87266,87268,87270],{"class":38,"line":35773},[36,87267,54279],{"class":53},[36,87269,54294],{"class":53794},[36,87271,53801],{"class":53},[36,87273,87274],{"class":38,"line":35778},[36,87275,546],{"emptyLinePlaceholder":545},[36,87277,87278,87280,87282],{"class":38,"line":35784},[36,87279,54279],{"class":53},[36,87281,53131],{"class":53794},[36,87283,53801],{"class":53},[14,87285,87287],{"id":87286},"_411-编程思想","4.11 编程思想",[997,87289,87291],{"id":87290},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87293,87294,87297],{},[2839,87295,87296],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87299,87300],{},"调用就可以了",[19,87302,87303],{},[4000,87304],{"alt":31,"src":87305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[997,87307,87309],{"id":87308},"_4112-面向对象","4.11.2 面向对象",[19,87311,87312],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87314,87315],{},[4000,87316],{"alt":31,"src":87317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87319,87320],{},"面向对象的特性：",[3680,87322,87323,87326,87329],{},[436,87324,87325],{},"封装性",[436,87327,87328],{},"继承性",[436,87330,87331],{},"多态性",[997,87333,87335],{"id":87334},"_4113-两者比较","4.11.3 两者比较",[19,87337,87338],{},[4000,87339],{"alt":31,"src":87340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87342,87344],{"id":87343},"_412-构造函数回顾","4.12 构造函数回顾",[19,87346,87347],{},[4000,87348],{"alt":31,"src":87349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87351,87352],{},[4000,87353],{"alt":31,"src":87354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87356,87357],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87359,87360],{},[4000,87361],{"alt":31,"src":87362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87364,87366],{"id":87365},"_413-原型","4.13 原型",[997,87368,87370],{"id":87369},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87372,87373],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87375,87376],{},[4000,87377],{"alt":31,"src":87378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87380,87381],{},[4000,87382],{"alt":31,"src":87383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87385,87386],{},"原型是构造函数的属性，它也是一个对象",[19,87388,87389],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87391,87392],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,87394,87396],{"className":55561,"code":87395,"language":55563,"meta":31,"style":31},"\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",[33,87397,87398,87406,87411,87419,87424,87429,87434,87439,87444,87448,87452,87456,87461,87466,87470,87475,87480,87485,87490,87495,87499,87507],{"__ignoreMap":31},[36,87399,87400,87402,87404],{"class":38,"line":39},[36,87401,1507],{"class":53},[36,87403,54294],{"class":53794},[36,87405,53801],{"class":53},[36,87407,87408],{"class":38,"line":46},[36,87409,87410],{"class":42},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,87412,87413,87415,87417],{"class":38,"line":82},[36,87414,54638],{"class":53},[36,87416,54307],{"class":53794},[36,87418,53801],{"class":53},[36,87420,87421],{"class":38,"line":88},[36,87422,87423],{"class":53},"    function Star(uname, age) {\n",[36,87425,87426],{"class":38,"line":195},[36,87427,87428],{"class":53},"      this.uname = uname,\n",[36,87430,87431],{"class":38,"line":1517},[36,87432,87433],{"class":53},"        this.age = age\n",[36,87435,87436],{"class":38,"line":2421},[36,87437,87438],{"class":53},"      \u002F\u002F this.sing = function () {\n",[36,87440,87441],{"class":38,"line":2446},[36,87442,87443],{"class":53},"      \u002F\u002F   console.log('唱歌')\n",[36,87445,87446],{"class":38,"line":2469},[36,87447,546],{"emptyLinePlaceholder":545},[36,87449,87450],{"class":38,"line":2492},[36,87451,62526],{"class":53},[36,87453,87454],{"class":38,"line":4150},[36,87455,4721],{"class":53},[36,87457,87458],{"class":38,"line":4155},[36,87459,87460],{"class":53},"    Star.prototype.sing = function () {\n",[36,87462,87463],{"class":38,"line":4161},[36,87464,87465],{"class":53},"      console.log('唱歌')\n",[36,87467,87468],{"class":38,"line":4166},[36,87469,4721],{"class":53},[36,87471,87472],{"class":38,"line":4180},[36,87473,87474],{"class":53},"    \u002F\u002F console.dir(Star.prototype)\n",[36,87476,87477],{"class":38,"line":4185},[36,87478,87479],{"class":53},"    const pink = new Star('pink', 18)\n",[36,87481,87482],{"class":38,"line":4191},[36,87483,87484],{"class":53},"    const red = new Star('red', 20)\n",[36,87486,87487],{"class":38,"line":4212},[36,87488,87489],{"class":53},"    pink.sing()\n",[36,87491,87492],{"class":38,"line":4217},[36,87493,87494],{"class":53},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,87496,87497],{"class":38,"line":4231},[36,87498,546],{"emptyLinePlaceholder":545},[36,87500,87501,87503,87505],{"class":38,"line":4236},[36,87502,54911],{"class":53},[36,87504,54307],{"class":53794},[36,87506,53801],{"class":53},[36,87508,87509,87511,87513],{"class":38,"line":4264},[36,87510,54279],{"class":53},[36,87512,54294],{"class":53794},[36,87514,53801],{"class":53},[19,87516,87517],{},[4000,87518],{"alt":31,"src":87519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,87521,87523],{"className":55561,"code":87522,"language":55563,"meta":31,"style":31},"\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",[33,87524,87525,87533,87541,87546,87551,87556,87561,87565,87570,87575,87580,87584,87589,87593,87597,87602,87606,87614],{"__ignoreMap":31},[36,87526,87527,87529,87531],{"class":38,"line":39},[36,87528,1507],{"class":53},[36,87530,54294],{"class":53794},[36,87532,53801],{"class":53},[36,87534,87535,87537,87539],{"class":38,"line":46},[36,87536,54638],{"class":53},[36,87538,54307],{"class":53794},[36,87540,53801],{"class":53},[36,87542,87543],{"class":38,"line":82},[36,87544,87545],{"class":53},"    let that\n",[36,87547,87548],{"class":38,"line":88},[36,87549,87550],{"class":53},"    function Star(uname) {\n",[36,87552,87553],{"class":38,"line":195},[36,87554,87555],{"class":53},"      this.uname = uname\n",[36,87557,87558],{"class":38,"line":1517},[36,87559,87560],{"class":53},"      that = this\n",[36,87562,87563],{"class":38,"line":2421},[36,87564,4721],{"class":53},[36,87566,87567],{"class":38,"line":2446},[36,87568,87569],{"class":53},"    \u002F\u002F 实例对象是 ldh\n",[36,87571,87572],{"class":38,"line":2469},[36,87573,87574],{"class":53},"    const ldh = new Star('刘德华')\n",[36,87576,87577],{"class":38,"line":2492},[36,87578,87579],{"class":53},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,87581,87582],{"class":38,"line":4150},[36,87583,546],{"emptyLinePlaceholder":545},[36,87585,87586],{"class":38,"line":4155},[36,87587,87588],{"class":53},"    Star.sing = function () {\n",[36,87590,87591],{"class":38,"line":4161},[36,87592,87465],{"class":53},[36,87594,87595],{"class":38,"line":4166},[36,87596,4721],{"class":53},[36,87598,87599],{"class":38,"line":4180},[36,87600,87601],{"class":53},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,87603,87604],{"class":38,"line":4185},[36,87605,546],{"emptyLinePlaceholder":545},[36,87607,87608,87610,87612],{"class":38,"line":4191},[36,87609,54911],{"class":53},[36,87611,54307],{"class":53794},[36,87613,53801],{"class":53},[36,87615,87616,87618,87620],{"class":38,"line":4212},[36,87617,54279],{"class":53},[36,87619,54294],{"class":53794},[36,87621,53801],{"class":53},[19,87623,87624],{},"构造函数的this指向的是实例对象；",[19,87626,87627],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[997,87629,87631],{"id":87630},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87633,87634],{},[4000,87635],{"alt":31,"src":87636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,87638,87640],{"className":55561,"code":87639,"language":55563,"meta":31,"style":31},"\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",[33,87641,87642,87650,87658,87663,87668,87673,87678,87683,87688,87693,87698,87703,87708,87712,87717,87722,87727,87732,87736,87741,87746,87751,87756,87760,87765,87770,87775,87780,87784,87789,87793,87801],{"__ignoreMap":31},[36,87643,87644,87646,87648],{"class":38,"line":39},[36,87645,1507],{"class":53},[36,87647,54294],{"class":53794},[36,87649,53801],{"class":53},[36,87651,87652,87654,87656],{"class":38,"line":46},[36,87653,54638],{"class":53},[36,87655,54307],{"class":53794},[36,87657,53801],{"class":53},[36,87659,87660],{"class":38,"line":82},[36,87661,87662],{"class":53},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,87664,87665],{"class":38,"line":88},[36,87666,87667],{"class":53},"    const arr = [1, 2, 3]\n",[36,87669,87670],{"class":38,"line":195},[36,87671,87672],{"class":53},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,87674,87675],{"class":38,"line":1517},[36,87676,87677],{"class":53},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,87679,87680],{"class":38,"line":2421},[36,87681,87682],{"class":53},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,87684,87685],{"class":38,"line":2446},[36,87686,87687],{"class":53},"    \u002F\u002F ①.最大值\n",[36,87689,87690],{"class":38,"line":2469},[36,87691,87692],{"class":53},"    Array.prototype.max = function () {\n",[36,87694,87695],{"class":38,"line":2492},[36,87696,87697],{"class":53},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,87699,87700],{"class":38,"line":4150},[36,87701,87702],{"class":53},"      return Math.max(...this)\n",[36,87704,87705],{"class":38,"line":4155},[36,87706,87707],{"class":53},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,87709,87710],{"class":38,"line":4161},[36,87711,4721],{"class":53},[36,87713,87714],{"class":38,"line":4166},[36,87715,87716],{"class":53},"    console.log(arr.max())\n",[36,87718,87719],{"class":38,"line":4180},[36,87720,87721],{"class":53},"    \u002F\u002F ②最小值\n",[36,87723,87724],{"class":38,"line":4185},[36,87725,87726],{"class":53},"    Array.prototype.min = function () {\n",[36,87728,87729],{"class":38,"line":4191},[36,87730,87731],{"class":53},"      return Math.min(...this)\n",[36,87733,87734],{"class":38,"line":4212},[36,87735,4721],{"class":53},[36,87737,87738],{"class":38,"line":4217},[36,87739,87740],{"class":53},"    console.log(arr.min())\n",[36,87742,87743],{"class":38,"line":4231},[36,87744,87745],{"class":53},"    \u002F\u002F③求和\n",[36,87747,87748],{"class":38,"line":4236},[36,87749,87750],{"class":53},"    Array.prototype.sum = function () {\n",[36,87752,87753],{"class":38,"line":4264},[36,87754,87755],{"class":53},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,87757,87758],{"class":38,"line":4269},[36,87759,4721],{"class":53},[36,87761,87762],{"class":38,"line":4286},[36,87763,87764],{"class":53},"    console.log(arr.sum())\n",[36,87766,87767],{"class":38,"line":4291},[36,87768,87769],{"class":53},"    \u002F\u002F ③排序\n",[36,87771,87772],{"class":38,"line":4296},[36,87773,87774],{"class":53},"    Array.prototype.rever = function () {\n",[36,87776,87777],{"class":38,"line":4301},[36,87778,87779],{"class":53},"      return this.reverse()\n",[36,87781,87782],{"class":38,"line":4315},[36,87783,4721],{"class":53},[36,87785,87786],{"class":38,"line":4320},[36,87787,87788],{"class":53},"    console.log(arr.rever())\n",[36,87790,87791],{"class":38,"line":5109},[36,87792,546],{"emptyLinePlaceholder":545},[36,87794,87795,87797,87799],{"class":38,"line":5123},[36,87796,54911],{"class":53},[36,87798,54307],{"class":53794},[36,87800,53801],{"class":53},[36,87802,87803,87805,87807],{"class":38,"line":5131},[36,87804,54279],{"class":53},[36,87806,54294],{"class":53794},[36,87808,53801],{"class":53},[19,87810,87811],{},[4000,87812],{"alt":31,"src":87813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[997,87815,87817],{"id":87816},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87819,87820],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87822,87823],{},[4000,87824],{"alt":31,"src":87825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,87827,87829],{"className":55561,"code":87828,"language":55563,"meta":31,"style":31},"\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",[33,87830,87831,87839,87847,87852,87857,87861,87866,87871,87876,87884],{"__ignoreMap":31},[36,87832,87833,87835,87837],{"class":38,"line":39},[36,87834,1507],{"class":53},[36,87836,54294],{"class":53794},[36,87838,53801],{"class":53},[36,87840,87841,87843,87845],{"class":38,"line":46},[36,87842,54638],{"class":53},[36,87844,54307],{"class":53794},[36,87846,53801],{"class":53},[36,87848,87849],{"class":38,"line":82},[36,87850,87851],{"class":53},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,87853,87854],{"class":38,"line":88},[36,87855,87856],{"class":53},"    function Star() {\n",[36,87858,87859],{"class":38,"line":195},[36,87860,4721],{"class":53},[36,87862,87863],{"class":38,"line":1517},[36,87864,87865],{"class":53},"    const ldh = new Star()\n",[36,87867,87868],{"class":38,"line":2421},[36,87869,87870],{"class":53},"    console.log(Star.prototype)\n",[36,87872,87873],{"class":38,"line":2446},[36,87874,87875],{"class":53},"    console.log(Star.prototype.constructor === Star)\n",[36,87877,87878,87880,87882],{"class":38,"line":2469},[36,87879,54911],{"class":53},[36,87881,54307],{"class":53794},[36,87883,53801],{"class":53},[36,87885,87886,87888,87890],{"class":38,"line":2492},[36,87887,54279],{"class":53},[36,87889,54294],{"class":53794},[36,87891,53801],{"class":53},[19,87893,87894],{},[4000,87895],{"alt":31,"src":87896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87898,87899],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,87901,87903],{"className":55561,"code":87902,"language":55563,"meta":31,"style":31},"  \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",[33,87904,87905,87913,87917,87921,87925,87930,87935,87940,87944,87949,87954,87959,87964,87969,87974,87978,87982,87987,87992,87997,88001,88006,88011,88015,88019,88023],{"__ignoreMap":31},[36,87906,87907,87909,87911],{"class":38,"line":39},[36,87908,54638],{"class":53},[36,87910,54307],{"class":53794},[36,87912,53801],{"class":53},[36,87914,87915],{"class":38,"line":46},[36,87916,87851],{"class":53},[36,87918,87919],{"class":38,"line":82},[36,87920,87856],{"class":53},[36,87922,87923],{"class":38,"line":88},[36,87924,4721],{"class":53},[36,87926,87927],{"class":38,"line":195},[36,87928,87929],{"class":53},"    \u002F\u002F const ldh = new Star()\n",[36,87931,87932],{"class":38,"line":1517},[36,87933,87934],{"class":53},"    \u002F\u002F console.log(Star.prototype)\n",[36,87936,87937],{"class":38,"line":2421},[36,87938,87939],{"class":53},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,87941,87942],{"class":38,"line":2446},[36,87943,546],{"emptyLinePlaceholder":545},[36,87945,87946],{"class":38,"line":2469},[36,87947,87948],{"class":53},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,87950,87951],{"class":38,"line":2492},[36,87952,87953],{"class":53},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,87955,87956],{"class":38,"line":4150},[36,87957,87958],{"class":53},"    \u002F\u002F   console.log('唱歌')\n",[36,87960,87961],{"class":38,"line":4155},[36,87962,87963],{"class":53},"    \u002F\u002F }\n",[36,87965,87966],{"class":38,"line":4161},[36,87967,87968],{"class":53},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,87970,87971],{"class":38,"line":4166},[36,87972,87973],{"class":53},"    \u002F\u002F   console.log('跳舞')\n",[36,87975,87976],{"class":38,"line":4180},[36,87977,87963],{"class":53},[36,87979,87980],{"class":38,"line":4185},[36,87981,87870],{"class":53},[36,87983,87984],{"class":38,"line":4191},[36,87985,87986],{"class":53},"    Star.prototype = {\n",[36,87988,87989],{"class":38,"line":4212},[36,87990,87991],{"class":53},"      sing: function () {\n",[36,87993,87994],{"class":38,"line":4217},[36,87995,87996],{"class":53},"        console.log('唱歌')\n",[36,87998,87999],{"class":38,"line":4231},[36,88000,80376],{"class":53},[36,88002,88003],{"class":38,"line":4236},[36,88004,88005],{"class":53},"      dance: function () {\n",[36,88007,88008],{"class":38,"line":4264},[36,88009,88010],{"class":53},"        console.log('跳舞')\n",[36,88012,88013],{"class":38,"line":4269},[36,88014,54892],{"class":53},[36,88016,88017],{"class":38,"line":4286},[36,88018,4721],{"class":53},[36,88020,88021],{"class":38,"line":4291},[36,88022,87870],{"class":53},[36,88024,88025,88027,88029],{"class":38,"line":4296},[36,88026,54911],{"class":53},[36,88028,54307],{"class":53794},[36,88030,53801],{"class":53},[19,88032,88033],{},"进行输出结果后会发现：",[19,88035,88036],{},[4000,88037],{"alt":31,"src":88038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,88040,88041],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,88043,88044],{},"所以，要重新指回创造这个原型对象的构造函数",[26,88046,88048],{"className":73699,"code":88047,"language":73701,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,88049,88050,88064,88069,88074,88085,88098,88103,88114,88128,88132],{"__ignoreMap":31},[36,88051,88052,88055,88057,88060,88062],{"class":38,"line":39},[36,88053,88054],{"class":49},"Star",[36,88056,3235],{"class":53},[36,88058,88059],{"class":49},"prototype",[36,88061,498],{"class":114},[36,88063,18091],{"class":53},[36,88065,88066],{"class":38,"line":46},[36,88067,88068],{"class":42},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,88070,88071],{"class":38,"line":82},[36,88072,88073],{"class":53},"  constructor: Star,\n",[36,88075,88076,88079,88081,88083],{"class":38,"line":88},[36,88077,88078],{"class":4500},"  sing",[36,88080,53931],{"class":53},[36,88082,56940],{"class":114},[36,88084,56943],{"class":53},[36,88086,88087,88089,88091,88093,88096],{"class":38,"line":195},[36,88088,76239],{"class":53},[36,88090,60737],{"class":4500},[36,88092,54],{"class":53},[36,88094,88095],{"class":57},"'唱歌'",[36,88097,61],{"class":53},[36,88099,88100],{"class":38,"line":1517},[36,88101,88102],{"class":53},"   },\n",[36,88104,88105,88108,88110,88112],{"class":38,"line":2421},[36,88106,88107],{"class":4500},"   dance",[36,88109,53931],{"class":53},[36,88111,56940],{"class":114},[36,88113,56943],{"class":53},[36,88115,88116,88119,88121,88123,88126],{"class":38,"line":2446},[36,88117,88118],{"class":53},"     console.",[36,88120,60737],{"class":4500},[36,88122,54],{"class":53},[36,88124,88125],{"class":57},"'跳舞'",[36,88127,61],{"class":53},[36,88129,88130],{"class":38,"line":2469},[36,88131,6840],{"class":53},[36,88133,88134],{"class":38,"line":2492},[36,88135,4103],{"class":53},[19,88137,88138],{},[4000,88139],{"alt":31,"src":88140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88142,88143],{},"总结1：",[19,88145,88146],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88148,88149],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88151,88152],{},"constructor指的是他的来源",[19,88154,88155],{},[4000,88156],{"alt":31,"src":88157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88159,88160],{},[4000,88161],{"alt":31,"src":88162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88164,88165],{},"总结2：",[19,88167,88168],{},[4000,88169],{"alt":31,"src":88170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88172,88173],{},[4000,88174],{"alt":31,"src":88175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88177,88178],{},[4000,88179],{"alt":31,"src":88180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[997,88182,88184],{"id":88183},"_4134-对象原型","4.13.4 对象原型",[19,88186,88187],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,88189,88190],{},"对象原型就是__proto__这个属性",[19,88192,88193],{},[4000,88194],{"alt":31,"src":88195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,88197,88198],{},[4000,88199],{"alt":31,"src":88200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,88202,88203],{},[4000,88204],{"alt":31,"src":88205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,88207,88208],{},[4000,88209],{"alt":31,"src":88210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,88212,88214],{"className":55561,"code":88213,"language":55563,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,88215,88216,88224,88232,88236,88240,88244,88249,88257],{"__ignoreMap":31},[36,88217,88218,88220,88222],{"class":38,"line":39},[36,88219,1507],{"class":53},[36,88221,54294],{"class":53794},[36,88223,53801],{"class":53},[36,88225,88226,88228,88230],{"class":38,"line":46},[36,88227,54638],{"class":53},[36,88229,54307],{"class":53794},[36,88231,53801],{"class":53},[36,88233,88234],{"class":38,"line":82},[36,88235,87856],{"class":53},[36,88237,88238],{"class":38,"line":88},[36,88239,4721],{"class":53},[36,88241,88242],{"class":38,"line":195},[36,88243,87865],{"class":53},[36,88245,88246],{"class":38,"line":1517},[36,88247,88248],{"class":53},"    console.log(ldh)\n",[36,88250,88251,88253,88255],{"class":38,"line":2421},[36,88252,54911],{"class":53},[36,88254,54307],{"class":53794},[36,88256,53801],{"class":53},[36,88258,88259,88261,88263],{"class":38,"line":2446},[36,88260,54279],{"class":53},[36,88262,54294],{"class":53794},[36,88264,53801],{"class":53},[19,88266,88267],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88269,88270],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88272,88273],{},[4000,88274],{"alt":31,"src":88275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88277,88278],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88280,88281],{},"对象原型指向原型对象",[19,88283,88284],{},[4000,88285],{"alt":31,"src":88286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88288,88289],{},[4000,88290],{"alt":31,"src":88291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88293,88294],{},[4000,88295],{"alt":31,"src":88296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[997,88298,88300],{"id":88299},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88302,88303],{},[4000,88304],{"alt":31,"src":88305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[433,88307,88308,88311,88314,88317],{},[436,88309,88310],{},"构造函数通过new的形式实例化得到实例对象",[436,88312,88313],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[436,88315,88316],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[436,88318,88319],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88321,88322],{},[4000,88323],{"alt":31,"src":88324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88326,88327],{},"题目梳理：",[19,88329,88330],{},[4000,88331],{"alt":31,"src":88332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[997,88334,88336],{"id":88335},"_4136-原型继承","4.13.6 原型继承",[19,88338,88339],{},[4000,88340],{"alt":31,"src":88341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88343,88344],{},[4000,88345],{"alt":31,"src":88346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88348,88349],{},[4000,88350],{"alt":31,"src":88351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88353,88354],{},[4000,88355],{"alt":31,"src":88356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88358,88359],{},[4000,88360],{"alt":31,"src":88361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88363,88364],{},[4000,88365],{"alt":31,"src":88366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88368,88369],{},[4000,88370],{"alt":31,"src":88371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88373,88374],{},[4000,88375],{"alt":31,"src":88376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88378,88379],{},"回顾：构造函数每次new得到对象都是不同的",[997,88381,88383],{"id":88382},"_4137-原型链","4.13.7 原型链",[19,88385,88386],{},[4000,88387],{"alt":31,"src":88388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88390,88391],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88393,88394],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88396,88397],{},"大哥是Object",[19,88399,88400],{},[4000,88401],{"alt":31,"src":88402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88404,88405],{},[4000,88406],{"alt":31,"src":88407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88409,88410],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88412,88413],{},"万物皆对象",[997,88415,88417],{"id":88416},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88419,88420],{},"模态框",[19,88422,88423],{},"以后遇见这个效果直接使用这个就行",[19,88425,88426],{},[4000,88427],{"alt":31,"src":88428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88430,88431],{},[4000,88432],{"alt":31,"src":88433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88435,88436],{},[4000,88437],{"alt":31,"src":88438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88440,88441],{},[4000,88442],{"alt":31,"src":88443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88445,88446],{},"补充知识点：",[433,88448,88449],{},[436,88450,88451],{},"append()",[19,88453,88454],{},[4000,88455],{"alt":31,"src":88456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,88458,88460],{"className":53129,"code":88459,"language":53131,"meta":31,"style":31},"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",[33,88461,88462,88467,88472,88477,88481,88485,88489,88494,88499,88504,88508],{"__ignoreMap":31},[36,88463,88464],{"class":38,"line":39},[36,88465,88466],{"class":53},"append(param1)\n",[36,88468,88469],{"class":38,"line":46},[36,88470,88471],{"class":53},"append(param1, param2)\n",[36,88473,88474],{"class":38,"line":82},[36,88475,88476],{"class":53},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,88478,88479],{"class":38,"line":88},[36,88480,546],{"emptyLinePlaceholder":545},[36,88482,88483],{"class":38,"line":195},[36,88484,546],{"emptyLinePlaceholder":545},[36,88486,88487],{"class":38,"line":1517},[36,88488,546],{"emptyLinePlaceholder":545},[36,88490,88491],{"class":38,"line":2421},[36,88492,88493],{"class":53},"let div = document.createElement(\"div\");\n",[36,88495,88496],{"class":38,"line":2446},[36,88497,88498],{"class":53},"let p = document.createElement(\"p\");\n",[36,88500,88501],{"class":38,"line":2469},[36,88502,88503],{"class":53},"div.append(p);\n",[36,88505,88506],{"class":38,"line":2492},[36,88507,546],{"emptyLinePlaceholder":545},[36,88509,88510,88513,88515],{"class":38,"line":4150},[36,88511,88512],{"class":53},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,88514,19],{"class":53794},[36,88516,88517],{"class":53},"> ]\n",[433,88519,88520],{"start":46},[436,88521,88522],{},"remove()",[19,88524,88525],{},"自己删自己",[19,88527,88528],{},[4000,88529],{"alt":31,"src":88530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,88532,88534],{"className":53129,"code":88533,"language":53131,"meta":31,"style":31},"\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",[33,88535,88536,88546,88560,88564,88572,88586,88606,88618,88626,88633,88645,88658,88692,88704,88715,88727,88739,88751,88778,88788,88792,88796,88805,88817,88831,88841,88853,88857,88861,88871,88882,88892,88902,88915,88928,88938,88942,88946,88955,88965,88977,88981,88985,88994,89004,89014,89026,89030,89034,89044,89060,89071,89081,89091,89103,89115,89127,89131,89135,89148,89159,89163,89171,89179,89183,89191,89211,89231,89239,89244,89270,89275,89280,89299,89304,89316,89321,89332,89342,89352,89357,89362,89366,89371,89376,89381,89401,89406,89426,89431,89445,89450,89455,89460,89476,89480,89485,89514,89519,89524,89529,89540,89544,89548,89552,89557,89582,89587,89612,89617,89626,89630,89635,89660,89664,89689,89693,89702,89706,89711,89729,89739,89743,89751,89759,89763],{"__ignoreMap":31},[36,88537,88538,88540,88542,88544],{"class":38,"line":39},[36,88539,53791],{"class":53},[36,88541,53795],{"class":53794},[36,88543,53798],{"class":4500},[36,88545,53801],{"class":53},[36,88547,88548,88550,88552,88554,88556,88558],{"class":38,"line":46},[36,88549,1507],{"class":53},[36,88551,53131],{"class":53794},[36,88553,53810],{"class":4500},[36,88555,115],{"class":53},[36,88557,53815],{"class":57},[36,88559,53801],{"class":53},[36,88561,88562],{"class":38,"line":82},[36,88563,546],{"emptyLinePlaceholder":545},[36,88565,88566,88568,88570],{"class":38,"line":88},[36,88567,1507],{"class":53},[36,88569,53828],{"class":53794},[36,88571,53801],{"class":53},[36,88573,88574,88576,88578,88580,88582,88584],{"class":38,"line":195},[36,88575,54638],{"class":53},[36,88577,53838],{"class":53794},[36,88579,53841],{"class":4500},[36,88581,115],{"class":53},[36,88583,53846],{"class":57},[36,88585,53801],{"class":53},[36,88587,88588,88590,88592,88594,88596,88598,88600,88602,88604],{"class":38,"line":1517},[36,88589,54638],{"class":53},[36,88591,53838],{"class":53794},[36,88593,17440],{"class":4500},[36,88595,115],{"class":53},[36,88597,53885],{"class":57},[36,88599,53865],{"class":4500},[36,88601,115],{"class":53},[36,88603,53892],{"class":57},[36,88605,53801],{"class":53},[36,88607,88608,88610,88612,88614,88616],{"class":38,"line":2421},[36,88609,54638],{"class":53},[36,88611,53901],{"class":53794},[36,88613,53904],{"class":53},[36,88615,53901],{"class":53794},[36,88617,53801],{"class":53},[36,88619,88620,88622,88624],{"class":38,"line":2446},[36,88621,54638],{"class":53},[36,88623,2602],{"class":53794},[36,88625,53801],{"class":53},[36,88627,88628,88631],{"class":38,"line":2469},[36,88629,88630],{"class":4500},"    .modal",[36,88632,18091],{"class":53},[36,88634,88635,88637,88639,88641,88643],{"class":38,"line":2492},[36,88636,57262],{"class":49},[36,88638,53931],{"class":53},[36,88640,6504],{"class":49},[36,88642,53986],{"class":114},[36,88644,3833],{"class":53},[36,88646,88647,88650,88652,88654,88656],{"class":38,"line":4150},[36,88648,88649],{"class":49},"      min-height",[36,88651,53931],{"class":53},[36,88653,166],{"class":49},[36,88655,53986],{"class":114},[36,88657,3833],{"class":53},[36,88659,88660,88662,88664,88666,88668,88670,88672,88674,88676,88678,88680,88682,88684,88686,88688,88690],{"class":38,"line":4155},[36,88661,81233],{"class":49},[36,88663,53931],{"class":53},[36,88665,713],{"class":49},[36,88667,6624],{"class":49},[36,88669,931],{"class":49},[36,88671,53986],{"class":114},[36,88673,81250],{"class":49},[36,88675,54],{"class":53},[36,88677,713],{"class":49},[36,88679,14958],{"class":53},[36,88681,713],{"class":49},[36,88683,14958],{"class":53},[36,88685,713],{"class":49},[36,88687,14958],{"class":53},[36,88689,2559],{"class":49},[36,88691,5251],{"class":53},[36,88693,88694,88696,88698,88700,88702],{"class":38,"line":4161},[36,88695,57625],{"class":49},[36,88697,53931],{"class":53},[36,88699,2977],{"class":49},[36,88701,53986],{"class":114},[36,88703,3833],{"class":53},[36,88705,88706,88708,88710,88713],{"class":38,"line":4166},[36,88707,57250],{"class":49},[36,88709,53931],{"class":53},[36,88711,88712],{"class":49},"fixed",[36,88714,3833],{"class":53},[36,88716,88717,88720,88722,88725],{"class":38,"line":4180},[36,88718,88719],{"class":49},"      z-index",[36,88721,53931],{"class":53},[36,88723,88724],{"class":49},"999",[36,88726,3833],{"class":53},[36,88728,88729,88731,88733,88735,88737],{"class":38,"line":4185},[36,88730,57329],{"class":49},[36,88732,53931],{"class":53},[36,88734,3332],{"class":49},[36,88736,1095],{"class":114},[36,88738,3833],{"class":53},[36,88740,88741,88743,88745,88747,88749],{"class":38,"line":4191},[36,88742,57438],{"class":49},[36,88744,53931],{"class":53},[36,88746,3332],{"class":49},[36,88748,1095],{"class":114},[36,88750,3833],{"class":53},[36,88752,88753,88755,88757,88759,88761,88764,88766,88768,88770,88772,88774,88776],{"class":38,"line":4212},[36,88754,81274],{"class":49},[36,88756,53931],{"class":53},[36,88758,81279],{"class":49},[36,88760,54],{"class":53},[36,88762,88763],{"class":49},"-50",[36,88765,1095],{"class":114},[36,88767,14958],{"class":53},[36,88769,88763],{"class":49},[36,88771,1095],{"class":114},[36,88773,14958],{"class":53},[36,88775,713],{"class":49},[36,88777,5251],{"class":53},[36,88779,88780,88782,88784,88786],{"class":38,"line":4217},[36,88781,57375],{"class":49},[36,88783,53931],{"class":53},[36,88785,63330],{"class":49},[36,88787,3833],{"class":53},[36,88789,88790],{"class":38,"line":4231},[36,88791,4721],{"class":53},[36,88793,88794],{"class":38,"line":4236},[36,88795,546],{"emptyLinePlaceholder":545},[36,88797,88798,88800,88803],{"class":38,"line":4264},[36,88799,88630],{"class":4500},[36,88801,88802],{"class":4500}," .header",[36,88804,18091],{"class":53},[36,88806,88807,88809,88811,88813,88815],{"class":38,"line":4269},[36,88808,59849],{"class":49},[36,88810,53931],{"class":53},[36,88812,3082],{"class":49},[36,88814,53986],{"class":114},[36,88816,3833],{"class":53},[36,88818,88819,88821,88823,88825,88827,88829],{"class":38,"line":4286},[36,88820,57186],{"class":49},[36,88822,53931],{"class":53},[36,88824,713],{"class":49},[36,88826,931],{"class":49},[36,88828,53986],{"class":114},[36,88830,3833],{"class":53},[36,88832,88833,88835,88837,88839],{"class":38,"line":4291},[36,88834,57250],{"class":49},[36,88836,53931],{"class":53},[36,88838,57255],{"class":49},[36,88840,3833],{"class":53},[36,88842,88843,88845,88847,88849,88851],{"class":38,"line":4296},[36,88844,57413],{"class":49},[36,88846,53931],{"class":53},[36,88848,3376],{"class":49},[36,88850,53986],{"class":114},[36,88852,3833],{"class":53},[36,88854,88855],{"class":38,"line":4301},[36,88856,4721],{"class":53},[36,88858,88859],{"class":38,"line":4315},[36,88860,546],{"emptyLinePlaceholder":545},[36,88862,88863,88865,88867,88869],{"class":38,"line":4320},[36,88864,88630],{"class":4500},[36,88866,88802],{"class":4500},[36,88868,5563],{"class":53794},[36,88870,18091],{"class":53},[36,88872,88873,88876,88878,88880],{"class":38,"line":5109},[36,88874,88875],{"class":49},"      font-style",[36,88877,53931],{"class":53},[36,88879,66329],{"class":49},[36,88881,3833],{"class":53},[36,88883,88884,88886,88888,88890],{"class":38,"line":5123},[36,88885,59906],{"class":49},[36,88887,53931],{"class":53},[36,88889,64558],{"class":49},[36,88891,3833],{"class":53},[36,88893,88894,88896,88898,88900],{"class":38,"line":5131},[36,88895,57250],{"class":49},[36,88897,53931],{"class":53},[36,88899,57322],{"class":49},[36,88901,3833],{"class":53},[36,88903,88904,88907,88909,88911,88913],{"class":38,"line":5136},[36,88905,88906],{"class":49},"      right",[36,88908,53931],{"class":53},[36,88910,3252],{"class":49},[36,88912,53986],{"class":114},[36,88914,3833],{"class":53},[36,88916,88917,88919,88921,88924,88926],{"class":38,"line":5142},[36,88918,57438],{"class":49},[36,88920,53931],{"class":53},[36,88922,88923],{"class":49},"-2",[36,88925,53986],{"class":114},[36,88927,3833],{"class":53},[36,88929,88930,88932,88934,88936],{"class":38,"line":5148},[36,88931,64513],{"class":49},[36,88933,53931],{"class":53},[36,88935,64518],{"class":49},[36,88937,3833],{"class":53},[36,88939,88940],{"class":38,"line":5153},[36,88941,4721],{"class":53},[36,88943,88944],{"class":38,"line":10475},[36,88945,546],{"emptyLinePlaceholder":545},[36,88947,88948,88950,88953],{"class":38,"line":10499},[36,88949,88630],{"class":4500},[36,88951,88952],{"class":4500}," .body",[36,88954,18091],{"class":53},[36,88956,88957,88959,88961,88963],{"class":38,"line":10504},[36,88958,59776],{"class":49},[36,88960,53931],{"class":53},[36,88962,54086],{"class":49},[36,88964,3833],{"class":53},[36,88966,88967,88969,88971,88973,88975],{"class":38,"line":10510},[36,88968,57186],{"class":49},[36,88970,53931],{"class":53},[36,88972,1317],{"class":49},[36,88974,53986],{"class":114},[36,88976,3833],{"class":53},[36,88978,88979],{"class":38,"line":10537},[36,88980,4721],{"class":53},[36,88982,88983],{"class":38,"line":10542},[36,88984,546],{"emptyLinePlaceholder":545},[36,88986,88987,88989,88992],{"class":38,"line":10548},[36,88988,88630],{"class":4500},[36,88990,88991],{"class":4500}," .footer",[36,88993,18091],{"class":53},[36,88995,88996,88998,89000,89002],{"class":38,"line":10560},[36,88997,57500],{"class":49},[36,88999,53931],{"class":53},[36,89001,53971],{"class":49},[36,89003,3833],{"class":53},[36,89005,89006,89008,89010,89012],{"class":38,"line":10572},[36,89007,57511],{"class":49},[36,89009,53931],{"class":53},[36,89011,54074],{"class":49},[36,89013,3833],{"class":53},[36,89015,89016,89018,89020,89022,89024],{"class":38,"line":10584},[36,89017,57186],{"class":49},[36,89019,53931],{"class":53},[36,89021,1317],{"class":49},[36,89023,53986],{"class":114},[36,89025,3833],{"class":53},[36,89027,89028],{"class":38,"line":12241},[36,89029,4721],{"class":53},[36,89031,89032],{"class":38,"line":12266},[36,89033,546],{"emptyLinePlaceholder":545},[36,89035,89036,89038,89040,89042],{"class":38,"line":12289},[36,89037,88630],{"class":4500},[36,89039,88991],{"class":4500},[36,89041,3936],{"class":53794},[36,89043,18091],{"class":53},[36,89045,89046,89048,89050,89052,89054,89056,89058],{"class":38,"line":12313},[36,89047,57186],{"class":49},[36,89049,53931],{"class":53},[36,89051,2767],{"class":49},[36,89053,53986],{"class":114},[36,89055,1354],{"class":49},[36,89057,53986],{"class":114},[36,89059,3833],{"class":53},[36,89061,89062,89064,89066,89069],{"class":38,"line":12318},[36,89063,64209],{"class":49},[36,89065,53931],{"class":53},[36,89067,89068],{"class":49},"#ccc",[36,89070,3833],{"class":53},[36,89072,89073,89075,89077,89079],{"class":38,"line":12323},[36,89074,66458],{"class":49},[36,89076,53931],{"class":53},[36,89078,57228],{"class":49},[36,89080,3833],{"class":53},[36,89082,89083,89085,89087,89089],{"class":38,"line":12328},[36,89084,59906],{"class":49},[36,89086,53931],{"class":53},[36,89088,63330],{"class":49},[36,89090,3833],{"class":53},[36,89092,89093,89095,89097,89099,89101],{"class":38,"line":12337},[36,89094,57625],{"class":49},[36,89096,53931],{"class":53},[36,89098,1188],{"class":49},[36,89100,53986],{"class":114},[36,89102,3833],{"class":53},[36,89104,89105,89107,89109,89111,89113],{"class":38,"line":12342},[36,89106,64238],{"class":49},[36,89108,53931],{"class":53},[36,89110,1317],{"class":49},[36,89112,53986],{"class":114},[36,89114,3833],{"class":53},[36,89116,89117,89119,89121,89123,89125],{"class":38,"line":12348},[36,89118,57413],{"class":49},[36,89120,53931],{"class":53},[36,89122,3226],{"class":49},[36,89124,53986],{"class":114},[36,89126,3833],{"class":53},[36,89128,89129],{"class":38,"line":12369},[36,89130,4721],{"class":53},[36,89132,89133],{"class":38,"line":12375},[36,89134,546],{"emptyLinePlaceholder":545},[36,89136,89137,89139,89141,89143,89146],{"class":38,"line":12389},[36,89138,88630],{"class":4500},[36,89140,88991],{"class":4500},[36,89142,3936],{"class":53794},[36,89144,89145],{"class":4500},".submit",[36,89147,18091],{"class":53},[36,89149,89150,89152,89154,89157],{"class":38,"line":12395},[36,89151,57375],{"class":49},[36,89153,53931],{"class":53},[36,89155,89156],{"class":49},"#369",[36,89158,3833],{"class":53},[36,89160,89161],{"class":38,"line":12422},[36,89162,4721],{"class":53},[36,89164,89165,89167,89169],{"class":38,"line":12431},[36,89166,54911],{"class":53},[36,89168,2602],{"class":53794},[36,89170,53801],{"class":53},[36,89172,89173,89175,89177],{"class":38,"line":12437},[36,89174,54279],{"class":53},[36,89176,53828],{"class":53794},[36,89178,53801],{"class":53},[36,89180,89181],{"class":38,"line":12445},[36,89182,546],{"emptyLinePlaceholder":545},[36,89184,89185,89187,89189],{"class":38,"line":12450},[36,89186,1507],{"class":53},[36,89188,54294],{"class":53794},[36,89190,53801],{"class":53},[36,89192,89193,89195,89197,89199,89201,89204,89207,89209],{"class":38,"line":19122},[36,89194,54638],{"class":53},[36,89196,56380],{"class":53794},[36,89198,17479],{"class":4500},[36,89200,115],{"class":53},[36,89202,89203],{"class":57},"\"delete\"",[36,89205,89206],{"class":53},">删除\u003C\u002F",[36,89208,56380],{"class":53794},[36,89210,53801],{"class":53},[36,89212,89213,89215,89217,89219,89221,89224,89227,89229],{"class":38,"line":19128},[36,89214,54638],{"class":53},[36,89216,56380],{"class":53794},[36,89218,17479],{"class":4500},[36,89220,115],{"class":53},[36,89222,89223],{"class":57},"\"login\"",[36,89225,89226],{"class":53},">登录\u003C\u002F",[36,89228,56380],{"class":53794},[36,89230,53801],{"class":53},[36,89232,89233,89235,89237],{"class":38,"line":19151},[36,89234,54638],{"class":53},[36,89236,54307],{"class":53794},[36,89238,53801],{"class":53},[36,89240,89241],{"class":38,"line":19157},[36,89242,89243],{"class":42},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,89245,89246,89248,89251,89253,89255,89257,89259,89261,89264,89266,89268],{"class":38,"line":19180},[36,89247,72571],{"class":114},[36,89249,89250],{"class":4500}," Modal",[36,89252,54],{"class":53},[36,89254,53901],{"class":1997},[36,89256,498],{"class":114},[36,89258,72417],{"class":57},[36,89260,14958],{"class":53},[36,89262,89263],{"class":1997},"message",[36,89265,498],{"class":114},[36,89267,72417],{"class":57},[36,89269,14965],{"class":53},[36,89271,89272],{"class":38,"line":19194},[36,89273,89274],{"class":42},"      \u002F\u002F 创建Model 模态框盒子\n",[36,89276,89277],{"class":38,"line":19214},[36,89278,89279],{"class":42},"      \u002F\u002F 1.1 创建div标签\n",[36,89281,89282,89284,89287,89289,89291,89293,89295,89297],{"class":38,"line":19220},[36,89283,72538],{"class":49},[36,89285,89286],{"class":53},".modalBox ",[36,89288,115],{"class":114},[36,89290,56888],{"class":53},[36,89292,72638],{"class":4500},[36,89294,54],{"class":53},[36,89296,84412],{"class":57},[36,89298,61],{"class":53},[36,89300,89301],{"class":38,"line":19231},[36,89302,89303],{"class":42},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,89305,89306,89308,89311,89313],{"class":38,"line":19254},[36,89307,72538],{"class":49},[36,89309,89310],{"class":53},".modalBox.className ",[36,89312,115],{"class":114},[36,89314,89315],{"class":57}," 'modal'\n",[36,89317,89318],{"class":38,"line":19276},[36,89319,89320],{"class":42},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,89322,89323,89325,89328,89330],{"class":38,"line":19281},[36,89324,72538],{"class":49},[36,89326,89327],{"class":53},".modalBox.innerHTML ",[36,89329,115],{"class":114},[36,89331,72655],{"class":57},[36,89333,89334,89337,89339],{"class":38,"line":19287},[36,89335,89336],{"class":57},"        \u003Cdiv class=\"header\">${",[36,89338,53901],{"class":53},[36,89340,89341],{"class":57},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,89343,89344,89347,89349],{"class":38,"line":19301},[36,89345,89346],{"class":57},"        \u003Cdiv class=\"body\">${",[36,89348,89263],{"class":53},[36,89350,89351],{"class":57},"}\u003C\u002Fdiv>\n",[36,89353,89354],{"class":38,"line":19314},[36,89355,89356],{"class":57},"      `\n",[36,89358,89359],{"class":38,"line":19319},[36,89360,89361],{"class":42},"      \u002F\u002F console.log(this.modalBox)\n",[36,89363,89364],{"class":38,"line":19333},[36,89365,4721],{"class":53},[36,89367,89368],{"class":38,"line":19338},[36,89369,89370],{"class":42},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,89372,89373],{"class":38,"line":19344},[36,89374,89375],{"class":42},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,89377,89378],{"class":38,"line":19349},[36,89379,89380],{"class":42},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,89382,89383,89386,89388,89390,89392,89395,89397,89399],{"class":38,"line":19363},[36,89384,89385],{"class":49},"    Modal",[36,89387,3235],{"class":53},[36,89389,88059],{"class":49},[36,89391,3235],{"class":53},[36,89393,89394],{"class":4500},"open",[36,89396,498],{"class":114},[36,89398,61407],{"class":114},[36,89400,56943],{"class":53},[36,89402,89403],{"class":38,"line":19368},[36,89404,89405],{"class":42},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,89407,89408,89410,89413,89415,89417,89419,89421,89424],{"class":38,"line":19373},[36,89409,60718],{"class":114},[36,89411,89412],{"class":49}," box",[36,89414,498],{"class":114},[36,89416,56888],{"class":53},[36,89418,56891],{"class":4500},[36,89420,54],{"class":53},[36,89422,89423],{"class":57},"'.modal'",[36,89425,61],{"class":53},[36,89427,89428],{"class":38,"line":19387},[36,89429,89430],{"class":42},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,89432,89433,89436,89438,89441,89443],{"class":38,"line":19399},[36,89434,89435],{"class":53},"      box ",[36,89437,4252],{"class":114},[36,89439,89440],{"class":53}," box.",[36,89442,59496],{"class":4500},[36,89444,4513],{"class":53},[36,89446,89447],{"class":38,"line":19404},[36,89448,89449],{"class":42},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,89451,89452],{"class":38,"line":19417},[36,89453,89454],{"class":42},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,89456,89457],{"class":38,"line":19422},[36,89458,89459],{"class":42},"      \u002F\u002F append可以增加对象\n",[36,89461,89462,89465,89468,89470,89473],{"class":38,"line":19427},[36,89463,89464],{"class":53},"      document.body.",[36,89466,89467],{"class":4500},"append",[36,89469,54],{"class":53},[36,89471,89472],{"class":49},"this",[36,89474,89475],{"class":53},".modalBox)\n",[36,89477,89478],{"class":38,"line":19432},[36,89479,546],{"emptyLinePlaceholder":545},[36,89481,89482],{"class":38,"line":19445},[36,89483,89484],{"class":42},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,89486,89487,89489,89492,89494,89496,89499,89501,89503,89505,89507,89510,89512],{"class":38,"line":19450},[36,89488,72538],{"class":49},[36,89490,89491],{"class":53},".modalBox.",[36,89493,56891],{"class":4500},[36,89495,54],{"class":53},[36,89497,89498],{"class":57},"'i'",[36,89500,33330],{"class":53},[36,89502,60303],{"class":4500},[36,89504,54],{"class":53},[36,89506,60308],{"class":57},[36,89508,89509],{"class":53},", () ",[36,89511,87202],{"class":114},[36,89513,18091],{"class":53},[36,89515,89516],{"class":38,"line":35135},[36,89517,89518],{"class":42},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,89520,89521],{"class":38,"line":35141},[36,89522,89523],{"class":42},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,89525,89526],{"class":38,"line":35147},[36,89527,89528],{"class":42},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,89530,89531,89533,89535,89538],{"class":38,"line":35153},[36,89532,67214],{"class":49},[36,89534,3235],{"class":53},[36,89536,89537],{"class":4500},"close",[36,89539,4513],{"class":53},[36,89541,89542],{"class":38,"line":35159},[36,89543,67303],{"class":53},[36,89545,89546],{"class":38,"line":35170},[36,89547,4721],{"class":53},[36,89549,89550],{"class":38,"line":35176},[36,89551,546],{"emptyLinePlaceholder":545},[36,89553,89554],{"class":38,"line":35196},[36,89555,89556],{"class":42},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,89558,89559,89561,89563,89565,89568,89570,89572,89574,89576,89578,89580],{"class":38,"line":35202},[36,89560,54901],{"class":53},[36,89562,56891],{"class":4500},[36,89564,54],{"class":53},[36,89566,89567],{"class":57},"'#delete'",[36,89569,33330],{"class":53},[36,89571,60303],{"class":4500},[36,89573,54],{"class":53},[36,89575,60308],{"class":57},[36,89577,89509],{"class":53},[36,89579,87202],{"class":114},[36,89581,18091],{"class":53},[36,89583,89584],{"class":38,"line":35213},[36,89585,89586],{"class":42},"      \u002F\u002F 先调用Model构造函数\n",[36,89588,89589,89591,89594,89596,89598,89600,89602,89605,89607,89610],{"class":38,"line":35219},[36,89590,60718],{"class":114},[36,89592,89593],{"class":49}," del",[36,89595,498],{"class":114},[36,89597,14101],{"class":114},[36,89599,89250],{"class":4500},[36,89601,54],{"class":53},[36,89603,89604],{"class":57},"'温馨的提示'",[36,89606,14958],{"class":53},[36,89608,89609],{"class":57},"'您没有删除权限操作'",[36,89611,61],{"class":53},[36,89613,89614],{"class":38,"line":35225},[36,89615,89616],{"class":42},"      \u002F\u002F 实例对象调用open方法\n",[36,89618,89619,89622,89624],{"class":38,"line":35231},[36,89620,89621],{"class":53},"      del.",[36,89623,89394],{"class":4500},[36,89625,4513],{"class":53},[36,89627,89628],{"class":38,"line":35237},[36,89629,35962],{"class":53},[36,89631,89632],{"class":38,"line":35243},[36,89633,89634],{"class":42},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,89636,89637,89639,89641,89643,89646,89648,89650,89652,89654,89656,89658],{"class":38,"line":35249},[36,89638,54901],{"class":53},[36,89640,56891],{"class":4500},[36,89642,54],{"class":53},[36,89644,89645],{"class":57},"'#login'",[36,89647,33330],{"class":53},[36,89649,60303],{"class":4500},[36,89651,54],{"class":53},[36,89653,60308],{"class":57},[36,89655,89509],{"class":53},[36,89657,87202],{"class":114},[36,89659,18091],{"class":53},[36,89661,89662],{"class":38,"line":35255},[36,89663,89586],{"class":42},[36,89665,89666,89668,89671,89673,89675,89677,89679,89682,89684,89687],{"class":38,"line":35275},[36,89667,60718],{"class":114},[36,89669,89670],{"class":49}," log",[36,89672,498],{"class":114},[36,89674,14101],{"class":114},[36,89676,89250],{"class":4500},[36,89678,54],{"class":53},[36,89680,89681],{"class":57},"'友情提示'",[36,89683,14958],{"class":53},[36,89685,89686],{"class":57},"'您还没有登录呢'",[36,89688,61],{"class":53},[36,89690,89691],{"class":38,"line":35281},[36,89692,89616],{"class":42},[36,89694,89695,89698,89700],{"class":38,"line":35297},[36,89696,89697],{"class":53},"      log.",[36,89699,89394],{"class":4500},[36,89701,4513],{"class":53},[36,89703,89704],{"class":38,"line":35303},[36,89705,35962],{"class":53},[36,89707,89708],{"class":38,"line":35317},[36,89709,89710],{"class":42},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,89712,89713,89715,89717,89719,89721,89723,89725,89727],{"class":38,"line":35323},[36,89714,89385],{"class":49},[36,89716,3235],{"class":53},[36,89718,88059],{"class":49},[36,89720,3235],{"class":53},[36,89722,89537],{"class":4500},[36,89724,498],{"class":114},[36,89726,61407],{"class":114},[36,89728,56943],{"class":53},[36,89730,89731,89733,89735,89737],{"class":38,"line":35338},[36,89732,72538],{"class":49},[36,89734,89491],{"class":53},[36,89736,59496],{"class":4500},[36,89738,4513],{"class":53},[36,89740,89741],{"class":38,"line":35344},[36,89742,4721],{"class":53},[36,89744,89745,89747,89749],{"class":38,"line":35353},[36,89746,54911],{"class":53},[36,89748,54307],{"class":53794},[36,89750,53801],{"class":53},[36,89752,89753,89755,89757],{"class":38,"line":35359},[36,89754,54279],{"class":53},[36,89756,54294],{"class":53794},[36,89758,53801],{"class":53},[36,89760,89761],{"class":38,"line":35368},[36,89762,546],{"emptyLinePlaceholder":545},[36,89764,89765,89767,89769],{"class":38,"line":35374},[36,89766,54279],{"class":53},[36,89768,53131],{"class":53794},[36,89770,53801],{"class":53},[19,89772,89773],{},[4000,89774],{"alt":31,"src":89775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89777,89779],{"id":89778},"_414-深浅拷贝","4.14 深浅拷贝",[997,89781,89783],{"id":89782},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89785,89786],{},[4000,89787],{"alt":31,"src":89788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89790,89791],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89793,89794],{},[4000,89795],{"alt":31,"src":89796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89798,89799],{},[4000,89800],{"alt":31,"src":89801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89803,89804],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89806,89807],{},[4000,89808],{"alt":31,"src":89809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89811,13855],{},[19,89813,89814],{},[4000,89815],{"alt":31,"src":89816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[997,89818,89820],{"id":89819},"_4142-深拷贝","4.14.2 深拷贝",[19,89822,89823],{},"深拷贝：拷贝的是对象，不是地址",[19,89825,89826],{},"常用的三种方法：",[433,89828,89829,89832,89835],{},[436,89830,89831],{},"通过递归实现深拷贝",[436,89833,89834],{},"lodash\u002FcloneDeep",[436,89836,89837],{},"通过JSON.stringify()实现",[24515,89839,89841],{"id":89840},"_41421-递归函数","4.14.2.1 递归函数",[19,89843,89844],{},[4000,89845],{"alt":31,"src":89846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[433,89848,89849],{},[436,89850,89851],{},"死递归占溢出：",[26,89853,89855],{"className":55561,"code":89854,"language":55563,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,89856,89857,89865,89873,89877,89882,89886,89891,89899],{"__ignoreMap":31},[36,89858,89859,89861,89863],{"class":38,"line":39},[36,89860,1507],{"class":53},[36,89862,54294],{"class":53794},[36,89864,53801],{"class":53},[36,89866,89867,89869,89871],{"class":38,"line":46},[36,89868,54638],{"class":53},[36,89870,54307],{"class":53794},[36,89872,53801],{"class":53},[36,89874,89875],{"class":38,"line":82},[36,89876,79628],{"class":53},[36,89878,89879],{"class":38,"line":88},[36,89880,89881],{"class":53},"      fn()\n",[36,89883,89884],{"class":38,"line":195},[36,89885,4721],{"class":53},[36,89887,89888],{"class":38,"line":1517},[36,89889,89890],{"class":53},"    fn()\n",[36,89892,89893,89895,89897],{"class":38,"line":2421},[36,89894,54911],{"class":53},[36,89896,54307],{"class":53794},[36,89898,53801],{"class":53},[36,89900,89901,89903,89905],{"class":38,"line":2446},[36,89902,54279],{"class":53},[36,89904,54294],{"class":53794},[36,89906,53801],{"class":53},[433,89908,89909],{"start":46},[436,89910,89911],{},"递归函数要加判断条件：",[19,89913,89914],{},[4000,89915],{"alt":31,"src":89916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[433,89918,89919],{"start":82},[436,89920,89921],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,89923,89925],{"className":53129,"code":89924,"language":53131,"meta":31,"style":31},"\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",[33,89926,89927,89937,89951,89955,89963,89977,89997,90009,90017,90021,90029,90041,90049,90057,90082,90094,90098,90105,90113,90121,90125],{"__ignoreMap":31},[36,89928,89929,89931,89933,89935],{"class":38,"line":39},[36,89930,53791],{"class":53},[36,89932,53795],{"class":53794},[36,89934,53798],{"class":4500},[36,89936,53801],{"class":53},[36,89938,89939,89941,89943,89945,89947,89949],{"class":38,"line":46},[36,89940,1507],{"class":53},[36,89942,53131],{"class":53794},[36,89944,53810],{"class":4500},[36,89946,115],{"class":53},[36,89948,53815],{"class":57},[36,89950,53801],{"class":53},[36,89952,89953],{"class":38,"line":82},[36,89954,546],{"emptyLinePlaceholder":545},[36,89956,89957,89959,89961],{"class":38,"line":88},[36,89958,1507],{"class":53},[36,89960,53828],{"class":53794},[36,89962,53801],{"class":53},[36,89964,89965,89967,89969,89971,89973,89975],{"class":38,"line":195},[36,89966,54638],{"class":53},[36,89968,53838],{"class":53794},[36,89970,53841],{"class":4500},[36,89972,115],{"class":53},[36,89974,53846],{"class":57},[36,89976,53801],{"class":53},[36,89978,89979,89981,89983,89985,89987,89989,89991,89993,89995],{"class":38,"line":1517},[36,89980,54638],{"class":53},[36,89982,53838],{"class":53794},[36,89984,17440],{"class":4500},[36,89986,115],{"class":53},[36,89988,53885],{"class":57},[36,89990,53865],{"class":4500},[36,89992,115],{"class":53},[36,89994,53892],{"class":57},[36,89996,53801],{"class":53},[36,89998,89999,90001,90003,90005,90007],{"class":38,"line":2421},[36,90000,54638],{"class":53},[36,90002,53901],{"class":53794},[36,90004,53904],{"class":53},[36,90006,53901],{"class":53794},[36,90008,53801],{"class":53},[36,90010,90011,90013,90015],{"class":38,"line":2446},[36,90012,54279],{"class":53},[36,90014,53828],{"class":53794},[36,90016,53801],{"class":53},[36,90018,90019],{"class":38,"line":2469},[36,90020,546],{"emptyLinePlaceholder":545},[36,90022,90023,90025,90027],{"class":38,"line":2492},[36,90024,1507],{"class":53},[36,90026,54294],{"class":53794},[36,90028,53801],{"class":53},[36,90030,90031,90033,90035,90037,90039],{"class":38,"line":4150},[36,90032,54638],{"class":53},[36,90034,54105],{"class":53794},[36,90036,57805],{"class":53},[36,90038,54105],{"class":53794},[36,90040,53801],{"class":53},[36,90042,90043,90045,90047],{"class":38,"line":4155},[36,90044,54638],{"class":53},[36,90046,54307],{"class":53794},[36,90048,53801],{"class":53},[36,90050,90051,90053,90055],{"class":38,"line":4161},[36,90052,72571],{"class":114},[36,90054,76259],{"class":4500},[36,90056,13376],{"class":53},[36,90058,90059,90061,90063,90065,90067,90069,90071,90073,90075,90077,90080],{"class":38,"line":4166},[36,90060,58261],{"class":53},[36,90062,56891],{"class":4500},[36,90064,54],{"class":53},[36,90066,84412],{"class":57},[36,90068,76734],{"class":53},[36,90070,115],{"class":114},[36,90072,14101],{"class":114},[36,90074,76275],{"class":4500},[36,90076,19779],{"class":53},[36,90078,90079],{"class":4500},"toLocaleString",[36,90081,4513],{"class":53},[36,90083,90084,90087,90090,90092],{"class":38,"line":4180},[36,90085,90086],{"class":4500},"      setTimeout",[36,90088,90089],{"class":53},"(getTime, ",[36,90091,8937],{"class":49},[36,90093,61],{"class":53},[36,90095,90096],{"class":38,"line":4185},[36,90097,4721],{"class":53},[36,90099,90100,90103],{"class":38,"line":4191},[36,90101,90102],{"class":4500},"    getTime",[36,90104,4513],{"class":53},[36,90106,90107,90109,90111],{"class":38,"line":4212},[36,90108,54911],{"class":53},[36,90110,54307],{"class":53794},[36,90112,53801],{"class":53},[36,90114,90115,90117,90119],{"class":38,"line":4217},[36,90116,54279],{"class":53},[36,90118,54294],{"class":53794},[36,90120,53801],{"class":53},[36,90122,90123],{"class":38,"line":4231},[36,90124,546],{"emptyLinePlaceholder":545},[36,90126,90127,90129,90131],{"class":38,"line":4236},[36,90128,54279],{"class":53},[36,90130,53131],{"class":53794},[36,90132,53801],{"class":53},[19,90134,90135],{},[4000,90136],{"alt":31,"src":90137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[433,90139,90140],{"start":88},[436,90141,89831],{},[19,90143,90144],{},[4000,90145],{"alt":31,"src":90146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90148,90149],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90151,41689],{},[19,90153,90154],{},"这个是简易版的递归函数深拷贝",[19,90156,90157],{},"一定要注意先数组再对象，因为万物皆可对象",[26,90159,90161],{"className":53129,"code":90160,"language":53131,"meta":31,"style":31},"\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",[33,90162,90163,90173,90187,90191,90199,90213,90233,90245,90253,90257,90265,90273,90283,90292,90300,90316,90320,90328,90332,90336,90348,90353,90372,90388,90393,90398,90403,90418,90423,90428,90437,90445,90462,90470,90476,90484,90489,90494,90503,90507,90511,90515,90526,90535,90544,90558,90568,90576,90584,90592,90596],{"__ignoreMap":31},[36,90164,90165,90167,90169,90171],{"class":38,"line":39},[36,90166,53791],{"class":53},[36,90168,53795],{"class":53794},[36,90170,53798],{"class":4500},[36,90172,53801],{"class":53},[36,90174,90175,90177,90179,90181,90183,90185],{"class":38,"line":46},[36,90176,1507],{"class":53},[36,90178,53131],{"class":53794},[36,90180,53810],{"class":4500},[36,90182,115],{"class":53},[36,90184,53815],{"class":57},[36,90186,53801],{"class":53},[36,90188,90189],{"class":38,"line":82},[36,90190,546],{"emptyLinePlaceholder":545},[36,90192,90193,90195,90197],{"class":38,"line":88},[36,90194,1507],{"class":53},[36,90196,53828],{"class":53794},[36,90198,53801],{"class":53},[36,90200,90201,90203,90205,90207,90209,90211],{"class":38,"line":195},[36,90202,54638],{"class":53},[36,90204,53838],{"class":53794},[36,90206,53841],{"class":4500},[36,90208,115],{"class":53},[36,90210,53846],{"class":57},[36,90212,53801],{"class":53},[36,90214,90215,90217,90219,90221,90223,90225,90227,90229,90231],{"class":38,"line":1517},[36,90216,54638],{"class":53},[36,90218,53838],{"class":53794},[36,90220,17440],{"class":4500},[36,90222,115],{"class":53},[36,90224,53885],{"class":57},[36,90226,53865],{"class":4500},[36,90228,115],{"class":53},[36,90230,53892],{"class":57},[36,90232,53801],{"class":53},[36,90234,90235,90237,90239,90241,90243],{"class":38,"line":2421},[36,90236,54638],{"class":53},[36,90238,53901],{"class":53794},[36,90240,53904],{"class":53},[36,90242,53901],{"class":53794},[36,90244,53801],{"class":53},[36,90246,90247,90249,90251],{"class":38,"line":2446},[36,90248,54279],{"class":53},[36,90250,53828],{"class":53794},[36,90252,53801],{"class":53},[36,90254,90255],{"class":38,"line":2469},[36,90256,546],{"emptyLinePlaceholder":545},[36,90258,90259,90261,90263],{"class":38,"line":2492},[36,90260,1507],{"class":53},[36,90262,54294],{"class":53794},[36,90264,53801],{"class":53},[36,90266,90267,90269,90271],{"class":38,"line":4150},[36,90268,54638],{"class":53},[36,90270,54307],{"class":53794},[36,90272,53801],{"class":53},[36,90274,90275,90277,90279,90281],{"class":38,"line":4155},[36,90276,13744],{"class":114},[36,90278,72458],{"class":49},[36,90280,498],{"class":114},[36,90282,18091],{"class":53},[36,90284,90285,90287,90290],{"class":38,"line":4161},[36,90286,74102],{"class":53},[36,90288,90289],{"class":57},"'pink'",[36,90291,33970],{"class":53},[36,90293,90294,90296,90298],{"class":38,"line":4166},[36,90295,74112],{"class":53},[36,90297,3326],{"class":49},[36,90299,33970],{"class":53},[36,90301,90302,90305,90308,90310,90313],{"class":38,"line":4180},[36,90303,90304],{"class":53},"      hobby: [",[36,90306,90307],{"class":57},"'乒乓球'",[36,90309,14958],{"class":53},[36,90311,90312],{"class":57},"'足球'",[36,90314,90315],{"class":53},"],\n",[36,90317,90318],{"class":38,"line":4185},[36,90319,80356],{"class":53},[36,90321,90322,90325],{"class":38,"line":4191},[36,90323,90324],{"class":53},"        baby: ",[36,90326,90327],{"class":57},"'小pink'\n",[36,90329,90330],{"class":38,"line":4212},[36,90331,54892],{"class":53},[36,90333,90334],{"class":38,"line":4217},[36,90335,4721],{"class":53},[36,90337,90338,90340,90343,90345],{"class":38,"line":4231},[36,90339,13744],{"class":114},[36,90341,90342],{"class":49}," o",[36,90344,498],{"class":114},[36,90346,90347],{"class":53}," {}\n",[36,90349,90350],{"class":38,"line":4236},[36,90351,90352],{"class":42},"    \u002F\u002F 拷贝函数\n",[36,90354,90355,90357,90360,90362,90365,90367,90370],{"class":38,"line":4264},[36,90356,72571],{"class":114},[36,90358,90359],{"class":4500}," deepCopy",[36,90361,54],{"class":53},[36,90363,90364],{"class":1997},"newObj",[36,90366,14958],{"class":53},[36,90368,90369],{"class":1997},"oldObj",[36,90371,14965],{"class":53},[36,90373,90374,90376,90378,90380,90383,90385],{"class":38,"line":4269},[36,90375,54778],{"class":114},[36,90377,4196],{"class":53},[36,90379,54341],{"class":114},[36,90381,90382],{"class":53}," k ",[36,90384,28556],{"class":114},[36,90386,90387],{"class":53}," oldObj) {\n",[36,90389,90390],{"class":38,"line":4286},[36,90391,90392],{"class":42},"        \u002F\u002F 处理数组的问题\n",[36,90394,90395],{"class":38,"line":4291},[36,90396,90397],{"class":42},"        \u002F\u002F 判断是否属于数组\n",[36,90399,90400],{"class":38,"line":4296},[36,90401,90402],{"class":42},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,90404,90405,90407,90410,90413,90416],{"class":38,"line":4301},[36,90406,5029],{"class":114},[36,90408,90409],{"class":53}," (oldObj[k] ",[36,90411,90412],{"class":114},"instanceof",[36,90414,90415],{"class":4500}," Array",[36,90417,14965],{"class":53},[36,90419,90420],{"class":38,"line":4315},[36,90421,90422],{"class":42},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,90424,90425],{"class":38,"line":4320},[36,90426,90427],{"class":42},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,90429,90430,90433,90435],{"class":38,"line":5109},[36,90431,90432],{"class":53},"          newObj[k] ",[36,90434,115],{"class":114},[36,90436,54332],{"class":53},[36,90438,90439,90442],{"class":38,"line":5123},[36,90440,90441],{"class":4500},"          deepCopy",[36,90443,90444],{"class":53},"(newObj[k], oldObj[k])\n",[36,90446,90447,90449,90451,90453,90455,90457,90460],{"class":38,"line":5131},[36,90448,82561],{"class":53},[36,90450,4239],{"class":114},[36,90452,4242],{"class":114},[36,90454,90409],{"class":53},[36,90456,90412],{"class":114},[36,90458,90459],{"class":4500}," Object",[36,90461,14965],{"class":53},[36,90463,90464,90466,90468],{"class":38,"line":5136},[36,90465,90432],{"class":53},[36,90467,115],{"class":114},[36,90469,90347],{"class":53},[36,90471,90472,90474],{"class":38,"line":5142},[36,90473,90441],{"class":4500},[36,90475,90444],{"class":53},[36,90477,90478,90480,90482],{"class":38,"line":5148},[36,90479,82561],{"class":53},[36,90481,4239],{"class":114},[36,90483,18091],{"class":53},[36,90485,90486],{"class":38,"line":5153},[36,90487,90488],{"class":42},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,90490,90491],{"class":38,"line":10475},[36,90492,90493],{"class":42},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,90495,90496,90498,90500],{"class":38,"line":10499},[36,90497,90432],{"class":53},[36,90499,115],{"class":114},[36,90501,90502],{"class":53}," oldObj[k]\n",[36,90504,90505],{"class":38,"line":10504},[36,90506,5061],{"class":53},[36,90508,90509],{"class":38,"line":10510},[36,90510,54892],{"class":53},[36,90512,90513],{"class":38,"line":10537},[36,90514,4721],{"class":53},[36,90516,90517,90520,90523],{"class":38,"line":10542},[36,90518,90519],{"class":4500},"    deepCopy",[36,90521,90522],{"class":53},"(o, obj) ",[36,90524,90525],{"class":42},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,90527,90528,90530,90532],{"class":38,"line":10548},[36,90529,76239],{"class":53},[36,90531,60737],{"class":4500},[36,90533,90534],{"class":53},"(o)\n",[36,90536,90537,90540,90542],{"class":38,"line":10560},[36,90538,90539],{"class":53},"    o.age ",[36,90541,115],{"class":114},[36,90543,1468],{"class":49},[36,90545,90546,90549,90551,90553,90555],{"class":38,"line":10572},[36,90547,90548],{"class":53},"    o.hobby[",[36,90550,713],{"class":49},[36,90552,6974],{"class":53},[36,90554,115],{"class":114},[36,90556,90557],{"class":57}," '篮球'\n",[36,90559,90560,90563,90565],{"class":38,"line":10584},[36,90561,90562],{"class":53},"    o.family ",[36,90564,115],{"class":114},[36,90566,90567],{"class":57}," '老pink'\n",[36,90569,90570,90572,90574],{"class":38,"line":12241},[36,90571,76239],{"class":53},[36,90573,60737],{"class":4500},[36,90575,72523],{"class":53},[36,90577,90578,90580,90582],{"class":38,"line":12266},[36,90579,54911],{"class":53},[36,90581,54307],{"class":53794},[36,90583,53801],{"class":53},[36,90585,90586,90588,90590],{"class":38,"line":12289},[36,90587,54279],{"class":53},[36,90589,54294],{"class":53794},[36,90591,53801],{"class":53},[36,90593,90594],{"class":38,"line":12313},[36,90595,546],{"emptyLinePlaceholder":545},[36,90597,90598,90600,90602],{"class":38,"line":12318},[36,90599,54279],{"class":53},[36,90601,53131],{"class":53794},[36,90603,53801],{"class":53},[19,90605,90606],{},[4000,90607],{"alt":31,"src":90608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24515,90610,90612,90613],{"id":90611},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2839,90614,90615],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90617,90618],{},[2923,90619,90620],{"href":90620,"rel":90621},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26381],[19,90623,90624],{},"lodash里边的方法都要加上一个下划线_",[19,90626,90627],{},"_.cloneDeep()",[26,90629,90631],{"className":53129,"code":90630,"language":53131,"meta":31,"style":31},"\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",[33,90632,90633,90643,90657,90661,90669,90683,90703,90715,90723,90727,90735,90740,90759,90767,90777,90785,90793,90805,90809,90815,90819,90823,90839,90847,90856,90864,90872,90880,90884],{"__ignoreMap":31},[36,90634,90635,90637,90639,90641],{"class":38,"line":39},[36,90636,53791],{"class":53},[36,90638,53795],{"class":53794},[36,90640,53798],{"class":4500},[36,90642,53801],{"class":53},[36,90644,90645,90647,90649,90651,90653,90655],{"class":38,"line":46},[36,90646,1507],{"class":53},[36,90648,53131],{"class":53794},[36,90650,53810],{"class":4500},[36,90652,115],{"class":53},[36,90654,53815],{"class":57},[36,90656,53801],{"class":53},[36,90658,90659],{"class":38,"line":82},[36,90660,546],{"emptyLinePlaceholder":545},[36,90662,90663,90665,90667],{"class":38,"line":88},[36,90664,1507],{"class":53},[36,90666,53828],{"class":53794},[36,90668,53801],{"class":53},[36,90670,90671,90673,90675,90677,90679,90681],{"class":38,"line":195},[36,90672,54638],{"class":53},[36,90674,53838],{"class":53794},[36,90676,53841],{"class":4500},[36,90678,115],{"class":53},[36,90680,53846],{"class":57},[36,90682,53801],{"class":53},[36,90684,90685,90687,90689,90691,90693,90695,90697,90699,90701],{"class":38,"line":1517},[36,90686,54638],{"class":53},[36,90688,53838],{"class":53794},[36,90690,17440],{"class":4500},[36,90692,115],{"class":53},[36,90694,53885],{"class":57},[36,90696,53865],{"class":4500},[36,90698,115],{"class":53},[36,90700,53892],{"class":57},[36,90702,53801],{"class":53},[36,90704,90705,90707,90709,90711,90713],{"class":38,"line":2421},[36,90706,54638],{"class":53},[36,90708,53901],{"class":53794},[36,90710,53904],{"class":53},[36,90712,53901],{"class":53794},[36,90714,53801],{"class":53},[36,90716,90717,90719,90721],{"class":38,"line":2446},[36,90718,54279],{"class":53},[36,90720,53828],{"class":53794},[36,90722,53801],{"class":53},[36,90724,90725],{"class":38,"line":2469},[36,90726,546],{"emptyLinePlaceholder":545},[36,90728,90729,90731,90733],{"class":38,"line":2492},[36,90730,1507],{"class":53},[36,90732,54294],{"class":53794},[36,90734,53801],{"class":53},[36,90736,90737],{"class":38,"line":4150},[36,90738,90739],{"class":42},"  \u003C!-- 先引用这个库 -->\n",[36,90741,90742,90744,90746,90748,90750,90753,90755,90757],{"class":38,"line":4155},[36,90743,54638],{"class":53},[36,90745,54307],{"class":53794},[36,90747,57730],{"class":4500},[36,90749,115],{"class":53},[36,90751,90752],{"class":57},"\"lodash.min.js\"",[36,90754,57805],{"class":53},[36,90756,54307],{"class":53794},[36,90758,53801],{"class":53},[36,90760,90761,90763,90765],{"class":38,"line":4161},[36,90762,54638],{"class":53},[36,90764,54307],{"class":53794},[36,90766,53801],{"class":53},[36,90768,90769,90771,90773,90775],{"class":38,"line":4166},[36,90770,13744],{"class":114},[36,90772,72458],{"class":49},[36,90774,498],{"class":114},[36,90776,18091],{"class":53},[36,90778,90779,90781,90783],{"class":38,"line":4180},[36,90780,74102],{"class":53},[36,90782,90289],{"class":57},[36,90784,33970],{"class":53},[36,90786,90787,90789,90791],{"class":38,"line":4185},[36,90788,74112],{"class":53},[36,90790,3326],{"class":49},[36,90792,33970],{"class":53},[36,90794,90795,90797,90799,90801,90803],{"class":38,"line":4191},[36,90796,90304],{"class":53},[36,90798,90307],{"class":57},[36,90800,14958],{"class":53},[36,90802,90312],{"class":57},[36,90804,90315],{"class":53},[36,90806,90807],{"class":38,"line":4212},[36,90808,80356],{"class":53},[36,90810,90811,90813],{"class":38,"line":4217},[36,90812,90324],{"class":53},[36,90814,90327],{"class":57},[36,90816,90817],{"class":38,"line":4231},[36,90818,54892],{"class":53},[36,90820,90821],{"class":38,"line":4236},[36,90822,4721],{"class":53},[36,90824,90825,90827,90829,90831,90834,90837],{"class":38,"line":4264},[36,90826,13744],{"class":114},[36,90828,90342],{"class":49},[36,90830,498],{"class":114},[36,90832,90833],{"class":53}," _.",[36,90835,90836],{"class":4500},"cloneDeep",[36,90838,72523],{"class":53},[36,90840,90841,90843,90845],{"class":38,"line":4269},[36,90842,76239],{"class":53},[36,90844,60737],{"class":4500},[36,90846,90534],{"class":53},[36,90848,90849,90852,90854],{"class":38,"line":4286},[36,90850,90851],{"class":53},"    o.family.baby ",[36,90853,115],{"class":114},[36,90855,90567],{"class":57},[36,90857,90858,90860,90862],{"class":38,"line":4291},[36,90859,76239],{"class":53},[36,90861,60737],{"class":4500},[36,90863,72523],{"class":53},[36,90865,90866,90868,90870],{"class":38,"line":4296},[36,90867,54911],{"class":53},[36,90869,54307],{"class":53794},[36,90871,53801],{"class":53},[36,90873,90874,90876,90878],{"class":38,"line":4301},[36,90875,54279],{"class":53},[36,90877,54294],{"class":53794},[36,90879,53801],{"class":53},[36,90881,90882],{"class":38,"line":4315},[36,90883,546],{"emptyLinePlaceholder":545},[36,90885,90886,90888,90890],{"class":38,"line":4320},[36,90887,54279],{"class":53},[36,90889,53131],{"class":53794},[36,90891,53801],{"class":53},[19,90893,90894],{},[4000,90895],{"alt":31,"src":90896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24515,90898,90900],{"id":90899},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,90902,90904],{"className":53129,"code":90903,"language":53131,"meta":31,"style":31},"\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",[33,90905,90906,90916,90930,90934,90942,90956,90976,90988,90996,91000,91008,91016,91026,91034,91042,91054,91058,91064,91068,91072,91077,91082,91087,91113,91121,91130,91138,91146,91154,91158],{"__ignoreMap":31},[36,90907,90908,90910,90912,90914],{"class":38,"line":39},[36,90909,53791],{"class":53},[36,90911,53795],{"class":53794},[36,90913,53798],{"class":4500},[36,90915,53801],{"class":53},[36,90917,90918,90920,90922,90924,90926,90928],{"class":38,"line":46},[36,90919,1507],{"class":53},[36,90921,53131],{"class":53794},[36,90923,53810],{"class":4500},[36,90925,115],{"class":53},[36,90927,53815],{"class":57},[36,90929,53801],{"class":53},[36,90931,90932],{"class":38,"line":82},[36,90933,546],{"emptyLinePlaceholder":545},[36,90935,90936,90938,90940],{"class":38,"line":88},[36,90937,1507],{"class":53},[36,90939,53828],{"class":53794},[36,90941,53801],{"class":53},[36,90943,90944,90946,90948,90950,90952,90954],{"class":38,"line":195},[36,90945,54638],{"class":53},[36,90947,53838],{"class":53794},[36,90949,53841],{"class":4500},[36,90951,115],{"class":53},[36,90953,53846],{"class":57},[36,90955,53801],{"class":53},[36,90957,90958,90960,90962,90964,90966,90968,90970,90972,90974],{"class":38,"line":1517},[36,90959,54638],{"class":53},[36,90961,53838],{"class":53794},[36,90963,17440],{"class":4500},[36,90965,115],{"class":53},[36,90967,53885],{"class":57},[36,90969,53865],{"class":4500},[36,90971,115],{"class":53},[36,90973,53892],{"class":57},[36,90975,53801],{"class":53},[36,90977,90978,90980,90982,90984,90986],{"class":38,"line":2421},[36,90979,54638],{"class":53},[36,90981,53901],{"class":53794},[36,90983,53904],{"class":53},[36,90985,53901],{"class":53794},[36,90987,53801],{"class":53},[36,90989,90990,90992,90994],{"class":38,"line":2446},[36,90991,54279],{"class":53},[36,90993,53828],{"class":53794},[36,90995,53801],{"class":53},[36,90997,90998],{"class":38,"line":2469},[36,90999,546],{"emptyLinePlaceholder":545},[36,91001,91002,91004,91006],{"class":38,"line":2492},[36,91003,1507],{"class":53},[36,91005,54294],{"class":53794},[36,91007,53801],{"class":53},[36,91009,91010,91012,91014],{"class":38,"line":4150},[36,91011,54638],{"class":53},[36,91013,54307],{"class":53794},[36,91015,53801],{"class":53},[36,91017,91018,91020,91022,91024],{"class":38,"line":4155},[36,91019,13744],{"class":114},[36,91021,72458],{"class":49},[36,91023,498],{"class":114},[36,91025,18091],{"class":53},[36,91027,91028,91030,91032],{"class":38,"line":4161},[36,91029,74102],{"class":53},[36,91031,90289],{"class":57},[36,91033,33970],{"class":53},[36,91035,91036,91038,91040],{"class":38,"line":4166},[36,91037,74112],{"class":53},[36,91039,3326],{"class":49},[36,91041,33970],{"class":53},[36,91043,91044,91046,91048,91050,91052],{"class":38,"line":4180},[36,91045,90304],{"class":53},[36,91047,90307],{"class":57},[36,91049,14958],{"class":53},[36,91051,90312],{"class":57},[36,91053,90315],{"class":53},[36,91055,91056],{"class":38,"line":4185},[36,91057,80356],{"class":53},[36,91059,91060,91062],{"class":38,"line":4191},[36,91061,90324],{"class":53},[36,91063,90327],{"class":57},[36,91065,91066],{"class":38,"line":4212},[36,91067,54892],{"class":53},[36,91069,91070],{"class":38,"line":4217},[36,91071,4721],{"class":53},[36,91073,91074],{"class":38,"line":4231},[36,91075,91076],{"class":42},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,91078,91079],{"class":38,"line":4236},[36,91080,91081],{"class":42},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,91083,91084],{"class":38,"line":4264},[36,91085,91086],{"class":42},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,91088,91089,91091,91093,91095,91098,91100,91103,91105,91107,91109,91111],{"class":38,"line":4269},[36,91090,13744],{"class":114},[36,91092,90342],{"class":49},[36,91094,498],{"class":114},[36,91096,91097],{"class":49}," JSON",[36,91099,3235],{"class":53},[36,91101,91102],{"class":4500},"parse",[36,91104,54],{"class":53},[36,91106,74150],{"class":49},[36,91108,3235],{"class":53},[36,91110,74155],{"class":4500},[36,91112,74158],{"class":53},[36,91114,91115,91117,91119],{"class":38,"line":4286},[36,91116,76239],{"class":53},[36,91118,60737],{"class":4500},[36,91120,90534],{"class":53},[36,91122,91123,91125,91127],{"class":38,"line":4291},[36,91124,90851],{"class":53},[36,91126,115],{"class":114},[36,91128,91129],{"class":57}," '123'\n",[36,91131,91132,91134,91136],{"class":38,"line":4296},[36,91133,76239],{"class":53},[36,91135,60737],{"class":4500},[36,91137,72523],{"class":53},[36,91139,91140,91142,91144],{"class":38,"line":4301},[36,91141,54911],{"class":53},[36,91143,54307],{"class":53794},[36,91145,53801],{"class":53},[36,91147,91148,91150,91152],{"class":38,"line":4315},[36,91149,54279],{"class":53},[36,91151,54294],{"class":53794},[36,91153,53801],{"class":53},[36,91155,91156],{"class":38,"line":4320},[36,91157,546],{"emptyLinePlaceholder":545},[36,91159,91160,91162,91164],{"class":38,"line":5109},[36,91161,54279],{"class":53},[36,91163,53131],{"class":53794},[36,91165,53801],{"class":53},[19,91167,91168],{},[4000,91169],{"alt":31,"src":91170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91172,91174],{"id":91173},"_415-异常处理","4.15 异常处理",[433,91176,91177],{},[436,91178,91179],{},"throw抛异常",[19,91181,91182],{},[4000,91183],{"alt":31,"src":91184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[433,91186,91187],{"start":46},[436,91188,91189],{},"try\u002Fcatch 捕获错误信息",[19,91191,91192],{},[4000,91193],{"alt":31,"src":91194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,91196,91198],{"className":53129,"code":91197,"language":53131,"meta":31,"style":31},"\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",[33,91199,91200,91210,91224,91228,91236,91250,91270,91282,91290,91294,91302,91314,91322,91331,91338,91343,91362,91371,91382,91387,91397,91402,91407,91412,91429,91433,91438,91445,91457,91461,91473,91477,91481,91486,91491,91498,91506,91514,91518],{"__ignoreMap":31},[36,91201,91202,91204,91206,91208],{"class":38,"line":39},[36,91203,53791],{"class":53},[36,91205,53795],{"class":53794},[36,91207,53798],{"class":4500},[36,91209,53801],{"class":53},[36,91211,91212,91214,91216,91218,91220,91222],{"class":38,"line":46},[36,91213,1507],{"class":53},[36,91215,53131],{"class":53794},[36,91217,53810],{"class":4500},[36,91219,115],{"class":53},[36,91221,53815],{"class":57},[36,91223,53801],{"class":53},[36,91225,91226],{"class":38,"line":82},[36,91227,546],{"emptyLinePlaceholder":545},[36,91229,91230,91232,91234],{"class":38,"line":88},[36,91231,1507],{"class":53},[36,91233,53828],{"class":53794},[36,91235,53801],{"class":53},[36,91237,91238,91240,91242,91244,91246,91248],{"class":38,"line":195},[36,91239,54638],{"class":53},[36,91241,53838],{"class":53794},[36,91243,53841],{"class":4500},[36,91245,115],{"class":53},[36,91247,53846],{"class":57},[36,91249,53801],{"class":53},[36,91251,91252,91254,91256,91258,91260,91262,91264,91266,91268],{"class":38,"line":1517},[36,91253,54638],{"class":53},[36,91255,53838],{"class":53794},[36,91257,17440],{"class":4500},[36,91259,115],{"class":53},[36,91261,53885],{"class":57},[36,91263,53865],{"class":4500},[36,91265,115],{"class":53},[36,91267,53892],{"class":57},[36,91269,53801],{"class":53},[36,91271,91272,91274,91276,91278,91280],{"class":38,"line":2421},[36,91273,54638],{"class":53},[36,91275,53901],{"class":53794},[36,91277,53904],{"class":53},[36,91279,53901],{"class":53794},[36,91281,53801],{"class":53},[36,91283,91284,91286,91288],{"class":38,"line":2446},[36,91285,54279],{"class":53},[36,91287,53828],{"class":53794},[36,91289,53801],{"class":53},[36,91291,91292],{"class":38,"line":2469},[36,91293,546],{"emptyLinePlaceholder":545},[36,91295,91296,91298,91300],{"class":38,"line":2492},[36,91297,1507],{"class":53},[36,91299,54294],{"class":53794},[36,91301,53801],{"class":53},[36,91303,91304,91306,91308,91310,91312],{"class":38,"line":4150},[36,91305,54638],{"class":53},[36,91307,19],{"class":53794},[36,91309,55988],{"class":53},[36,91311,19],{"class":53794},[36,91313,53801],{"class":53},[36,91315,91316,91318,91320],{"class":38,"line":4155},[36,91317,54638],{"class":53},[36,91319,54307],{"class":53794},[36,91321,53801],{"class":53},[36,91323,91324,91326,91329],{"class":38,"line":4161},[36,91325,72571],{"class":114},[36,91327,91328],{"class":4500}," fn",[36,91330,13376],{"class":53},[36,91332,91333,91336],{"class":38,"line":4166},[36,91334,91335],{"class":114},"      try",[36,91337,18091],{"class":53},[36,91339,91340],{"class":38,"line":4180},[36,91341,91342],{"class":42},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,91344,91345,91347,91349,91351,91353,91355,91357,91360],{"class":38,"line":4185},[36,91346,63758],{"class":114},[36,91348,9352],{"class":49},[36,91350,498],{"class":114},[36,91352,56888],{"class":53},[36,91354,56891],{"class":4500},[36,91356,54],{"class":53},[36,91358,91359],{"class":57},"'.p'",[36,91361,61],{"class":53},[36,91363,91364,91367,91369],{"class":38,"line":4191},[36,91365,91366],{"class":53},"        p.style.color ",[36,91368,115],{"class":114},[36,91370,69538],{"class":57},[36,91372,91373,91376,91379],{"class":38,"line":4212},[36,91374,91375],{"class":53},"      } ",[36,91377,91378],{"class":114},"catch",[36,91380,91381],{"class":53}," (err) {\n",[36,91383,91384],{"class":38,"line":4217},[36,91385,91386],{"class":42},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,91388,91389,91392,91394],{"class":38,"line":4231},[36,91390,91391],{"class":53},"        console.",[36,91393,60737],{"class":4500},[36,91395,91396],{"class":53},"(err.message)\n",[36,91398,91399],{"class":38,"line":4236},[36,91400,91401],{"class":42},"        \u002F\u002F 想要中断程序，需要加return\n",[36,91403,91404],{"class":38,"line":4264},[36,91405,91406],{"class":42},"        \u002F\u002F return\n",[36,91408,91409],{"class":38,"line":4269},[36,91410,91411],{"class":42},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,91413,91414,91417,91419,91422,91424,91427],{"class":38,"line":4286},[36,91415,91416],{"class":114},"        throw",[36,91418,14101],{"class":114},[36,91420,91421],{"class":4500}," Error",[36,91423,54],{"class":53},[36,91425,91426],{"class":57},"'你看看，选择器错误了吧'",[36,91428,61],{"class":53},[36,91430,91431],{"class":38,"line":4291},[36,91432,54892],{"class":53},[36,91434,91435],{"class":38,"line":4296},[36,91436,91437],{"class":42},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,91439,91440,91443],{"class":38,"line":4301},[36,91441,91442],{"class":114},"      finally",[36,91444,18091],{"class":53},[36,91446,91447,91450,91452,91455],{"class":38,"line":4315},[36,91448,91449],{"class":4500},"        alert",[36,91451,54],{"class":53},[36,91453,91454],{"class":57},"'弹出对话框'",[36,91456,61],{"class":53},[36,91458,91459],{"class":38,"line":4320},[36,91460,54892],{"class":53},[36,91462,91463,91465,91467,91469,91471],{"class":38,"line":5109},[36,91464,60734],{"class":53},[36,91466,60737],{"class":4500},[36,91468,54],{"class":53},[36,91470,3151],{"class":49},[36,91472,61],{"class":53},[36,91474,91475],{"class":38,"line":5123},[36,91476,546],{"emptyLinePlaceholder":545},[36,91478,91479],{"class":38,"line":5131},[36,91480,4721],{"class":53},[36,91482,91483],{"class":38,"line":5136},[36,91484,91485],{"class":42},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,91487,91488],{"class":38,"line":5142},[36,91489,91490],{"class":42},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,91492,91493,91496],{"class":38,"line":5148},[36,91494,91495],{"class":4500},"    fn",[36,91497,4513],{"class":53},[36,91499,91500,91502,91504],{"class":38,"line":5153},[36,91501,54911],{"class":53},[36,91503,54307],{"class":53794},[36,91505,53801],{"class":53},[36,91507,91508,91510,91512],{"class":38,"line":10475},[36,91509,54279],{"class":53},[36,91511,54294],{"class":53794},[36,91513,53801],{"class":53},[36,91515,91516],{"class":38,"line":10499},[36,91517,546],{"emptyLinePlaceholder":545},[36,91519,91520,91522,91524],{"class":38,"line":10504},[36,91521,54279],{"class":53},[36,91523,53131],{"class":53794},[36,91525,53801],{"class":53},[19,91527,91528],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[433,91530,91531],{"start":82},[436,91532,91533],{},"debugger",[19,91535,91536],{},[4000,91537],{"alt":31,"src":91538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91540,91541],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91543,91545],{"id":91544},"_416-处理this","4.16 处理this",[997,91547,91549],{"id":91548},"_4161-this的指向","4.16.1 this的指向",[433,91551,91552],{},[436,91553,91554],{},"普通函数的this",[19,91556,91557],{},[4000,91558],{"alt":31,"src":91559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[433,91561,91562],{"start":46},[436,91563,91564],{},"箭头函数的this",[19,91566,91567],{},[4000,91568],{"alt":31,"src":91569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91571,91572],{},[4000,91573],{"alt":31,"src":91574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91576,91577],{},[4000,91578],{"alt":31,"src":91579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[997,91581,91583],{"id":91582},"_4162-this的改变","4.16.2 this的改变",[19,91585,91586],{},"call() apply() bind()",[433,91588,91589],{},[436,91590,91591],{},"call()",[19,91593,91594],{},[4000,91595],{"alt":31,"src":91596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91598,91599],{},"两个作用：①调用函数；②改变this指向",[26,91601,91603],{"className":55561,"code":91602,"language":55563,"meta":31,"style":31},"\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",[33,91604,91605,91613,91621,91625,91630,91634,91639,91644,91649,91653,91658,91666],{"__ignoreMap":31},[36,91606,91607,91609,91611],{"class":38,"line":39},[36,91608,1507],{"class":53},[36,91610,54294],{"class":53794},[36,91612,53801],{"class":53},[36,91614,91615,91617,91619],{"class":38,"line":46},[36,91616,54638],{"class":53},[36,91618,54307],{"class":53794},[36,91620,53801],{"class":53},[36,91622,91623],{"class":38,"line":82},[36,91624,74009],{"class":53},[36,91626,91627],{"class":38,"line":88},[36,91628,91629],{"class":53},"      uname: 'pink'\n",[36,91631,91632],{"class":38,"line":195},[36,91633,4721],{"class":53},[36,91635,91636],{"class":38,"line":1517},[36,91637,91638],{"class":53},"    function fn(x, y) {\n",[36,91640,91641],{"class":38,"line":2421},[36,91642,91643],{"class":53},"      console.log(this)  \u002F\u002Fwindow\n",[36,91645,91646],{"class":38,"line":2446},[36,91647,91648],{"class":53},"      console.log(x + y)\n",[36,91650,91651],{"class":38,"line":2469},[36,91652,4721],{"class":53},[36,91654,91655],{"class":38,"line":2492},[36,91656,91657],{"class":53},"    fn.call(obj, 1, 2)\n",[36,91659,91660,91662,91664],{"class":38,"line":4150},[36,91661,54911],{"class":53},[36,91663,54307],{"class":53794},[36,91665,53801],{"class":53},[36,91667,91668,91670,91672],{"class":38,"line":4155},[36,91669,54279],{"class":53},[36,91671,54294],{"class":53794},[36,91673,53801],{"class":53},[19,91675,91676],{},[4000,91677],{"alt":31,"src":91678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[433,91680,91681],{"start":46},[436,91682,91683],{},"apply()",[19,91685,91686],{},[4000,91687],{"alt":31,"src":91688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91690,91599],{},[19,91692,91693],{},"call传递的是普通参数，而apply必须传递的是数组",[26,91695,91697],{"className":53129,"code":91696,"language":53131,"meta":31,"style":31},"\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",[33,91698,91699,91709,91723,91727,91735,91749,91769,91781,91789,91793,91801,91809,91819,91826,91830,91835,91851,91863,91877,91881,91886,91905,91910,91914,91919,91924,91932,91937,91959,91964,91980,91996,92008,92012,92017,92036,92044,92052,92056],{"__ignoreMap":31},[36,91700,91701,91703,91705,91707],{"class":38,"line":39},[36,91702,53791],{"class":53},[36,91704,53795],{"class":53794},[36,91706,53798],{"class":4500},[36,91708,53801],{"class":53},[36,91710,91711,91713,91715,91717,91719,91721],{"class":38,"line":46},[36,91712,1507],{"class":53},[36,91714,53131],{"class":53794},[36,91716,53810],{"class":4500},[36,91718,115],{"class":53},[36,91720,53815],{"class":57},[36,91722,53801],{"class":53},[36,91724,91725],{"class":38,"line":82},[36,91726,546],{"emptyLinePlaceholder":545},[36,91728,91729,91731,91733],{"class":38,"line":88},[36,91730,1507],{"class":53},[36,91732,53828],{"class":53794},[36,91734,53801],{"class":53},[36,91736,91737,91739,91741,91743,91745,91747],{"class":38,"line":195},[36,91738,54638],{"class":53},[36,91740,53838],{"class":53794},[36,91742,53841],{"class":4500},[36,91744,115],{"class":53},[36,91746,53846],{"class":57},[36,91748,53801],{"class":53},[36,91750,91751,91753,91755,91757,91759,91761,91763,91765,91767],{"class":38,"line":1517},[36,91752,54638],{"class":53},[36,91754,53838],{"class":53794},[36,91756,17440],{"class":4500},[36,91758,115],{"class":53},[36,91760,53885],{"class":57},[36,91762,53865],{"class":4500},[36,91764,115],{"class":53},[36,91766,53892],{"class":57},[36,91768,53801],{"class":53},[36,91770,91771,91773,91775,91777,91779],{"class":38,"line":2421},[36,91772,54638],{"class":53},[36,91774,53901],{"class":53794},[36,91776,53904],{"class":53},[36,91778,53901],{"class":53794},[36,91780,53801],{"class":53},[36,91782,91783,91785,91787],{"class":38,"line":2446},[36,91784,54279],{"class":53},[36,91786,53828],{"class":53794},[36,91788,53801],{"class":53},[36,91790,91791],{"class":38,"line":2469},[36,91792,546],{"emptyLinePlaceholder":545},[36,91794,91795,91797,91799],{"class":38,"line":2492},[36,91796,1507],{"class":53},[36,91798,54294],{"class":53794},[36,91800,53801],{"class":53},[36,91802,91803,91805,91807],{"class":38,"line":4150},[36,91804,54638],{"class":53},[36,91806,54307],{"class":53794},[36,91808,53801],{"class":53},[36,91810,91811,91813,91815,91817],{"class":38,"line":4155},[36,91812,13744],{"class":114},[36,91814,72458],{"class":49},[36,91816,498],{"class":114},[36,91818,18091],{"class":53},[36,91820,91821,91823],{"class":38,"line":4161},[36,91822,74112],{"class":53},[36,91824,91825],{"class":49},"18\n",[36,91827,91828],{"class":38,"line":4166},[36,91829,4721],{"class":53},[36,91831,91832],{"class":38,"line":4180},[36,91833,91834],{"class":42},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,91836,91837,91839,91841,91843,91845,91847,91849],{"class":38,"line":4185},[36,91838,72571],{"class":114},[36,91840,91328],{"class":4500},[36,91842,54],{"class":53},[36,91844,3496],{"class":1997},[36,91846,14958],{"class":53},[36,91848,3521],{"class":1997},[36,91850,14965],{"class":53},[36,91852,91853,91855,91857,91859,91861],{"class":38,"line":4191},[36,91854,60734],{"class":53},[36,91856,60737],{"class":4500},[36,91858,54],{"class":53},[36,91860,89472],{"class":49},[36,91862,61],{"class":53},[36,91864,91865,91867,91869,91872,91874],{"class":38,"line":4212},[36,91866,60734],{"class":53},[36,91868,60737],{"class":4500},[36,91870,91871],{"class":53},"(x ",[36,91873,121],{"class":114},[36,91875,91876],{"class":53}," y)\n",[36,91878,91879],{"class":38,"line":4217},[36,91880,4721],{"class":53},[36,91882,91883],{"class":38,"line":4231},[36,91884,91885],{"class":42},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,91887,91888,91891,91894,91897,91899,91901,91903],{"class":38,"line":4236},[36,91889,91890],{"class":53},"    fn.",[36,91892,91893],{"class":4500},"apply",[36,91895,91896],{"class":53},"(obj, [",[36,91898,707],{"class":49},[36,91900,14958],{"class":53},[36,91902,1188],{"class":49},[36,91904,7188],{"class":53},[36,91906,91907],{"class":38,"line":4264},[36,91908,91909],{"class":42},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,91911,91912],{"class":38,"line":4269},[36,91913,546],{"emptyLinePlaceholder":545},[36,91915,91916],{"class":38,"line":4286},[36,91917,91918],{"class":42},"    \u002F\u002F 使用场景：求数组最大值\n",[36,91920,91921],{"class":38,"line":4291},[36,91922,91923],{"class":42},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,91925,91926,91929],{"class":38,"line":4296},[36,91927,91928],{"class":42},"    \u002F\u002F console.log(max)",[36,91930,91931],{"class":42},"   \u002F\u002F3\n",[36,91933,91934],{"class":38,"line":4301},[36,91935,91936],{"class":42},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,91938,91939,91941,91943,91945,91947,91949,91951,91953,91955,91957],{"class":38,"line":4315},[36,91940,13744],{"class":114},[36,91942,60185],{"class":49},[36,91944,498],{"class":114},[36,91946,54720],{"class":53},[36,91948,166],{"class":49},[36,91950,14958],{"class":53},[36,91952,3182],{"class":49},[36,91954,14958],{"class":53},[36,91956,3212],{"class":49},[36,91958,35748],{"class":53},[36,91960,91961],{"class":38,"line":4320},[36,91962,91963],{"class":42},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,91965,91966,91968,91970,91972,91975,91977],{"class":38,"line":5109},[36,91967,13744],{"class":114},[36,91969,8478],{"class":49},[36,91971,498],{"class":114},[36,91973,91974],{"class":53}," Math.max.",[36,91976,91893],{"class":4500},[36,91978,91979],{"class":53},"(Math, arr)\n",[36,91981,91982,91984,91987,91989,91992,91994],{"class":38,"line":5123},[36,91983,13744],{"class":114},[36,91985,91986],{"class":49}," min",[36,91988,498],{"class":114},[36,91990,91991],{"class":53}," Math.min.",[36,91993,91893],{"class":4500},[36,91995,91979],{"class":53},[36,91997,91998,92000,92002,92005],{"class":38,"line":5131},[36,91999,76239],{"class":53},[36,92001,60737],{"class":4500},[36,92003,92004],{"class":53},"(max, min)     ",[36,92006,92007],{"class":42},"\u002F\u002F100,4\n",[36,92009,92010],{"class":38,"line":5136},[36,92011,546],{"emptyLinePlaceholder":545},[36,92013,92014],{"class":38,"line":5142},[36,92015,92016],{"class":42},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,92018,92019,92021,92023,92026,92028,92030,92033],{"class":38,"line":5148},[36,92020,76239],{"class":53},[36,92022,60737],{"class":4500},[36,92024,92025],{"class":53},"(Max.",[36,92027,8542],{"class":4500},[36,92029,54],{"class":53},[36,92031,92032],{"class":114},"...",[36,92034,92035],{"class":53},"arr))\n",[36,92037,92038,92040,92042],{"class":38,"line":5153},[36,92039,54911],{"class":53},[36,92041,54307],{"class":53794},[36,92043,53801],{"class":53},[36,92045,92046,92048,92050],{"class":38,"line":10475},[36,92047,54279],{"class":53},[36,92049,54294],{"class":53794},[36,92051,53801],{"class":53},[36,92053,92054],{"class":38,"line":10499},[36,92055,546],{"emptyLinePlaceholder":545},[36,92057,92058,92060,92062],{"class":38,"line":10504},[36,92059,54279],{"class":53},[36,92061,53131],{"class":53794},[36,92063,53801],{"class":53},[19,92065,92066],{},[4000,92067],{"alt":31,"src":92068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[433,92070,92071],{"start":82},[436,92072,92073],{},"bind()",[19,92075,92076],{},[4000,92077],{"alt":31,"src":92078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,92080,92081],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92083,92084],{},"bind的语法跟call很相似",[26,92086,92088],{"className":55561,"code":92087,"language":55563,"meta":31,"style":31},"\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",[33,92089,92090,92098,92106,92110,92115,92119,92123,92128,92132,92137,92142,92147,92152,92157,92162,92167,92171,92179],{"__ignoreMap":31},[36,92091,92092,92094,92096],{"class":38,"line":39},[36,92093,1507],{"class":53},[36,92095,54294],{"class":53794},[36,92097,53801],{"class":53},[36,92099,92100,92102,92104],{"class":38,"line":46},[36,92101,54638],{"class":53},[36,92103,54307],{"class":53794},[36,92105,53801],{"class":53},[36,92107,92108],{"class":38,"line":82},[36,92109,74009],{"class":53},[36,92111,92112],{"class":38,"line":88},[36,92113,92114],{"class":53},"      age: 18\n",[36,92116,92117],{"class":38,"line":195},[36,92118,4721],{"class":53},[36,92120,92121],{"class":38,"line":1517},[36,92122,79628],{"class":53},[36,92124,92125],{"class":38,"line":2421},[36,92126,92127],{"class":53},"      console.log(this)\n",[36,92129,92130],{"class":38,"line":2446},[36,92131,4721],{"class":53},[36,92133,92134],{"class":38,"line":2469},[36,92135,92136],{"class":53},"    \u002F\u002F 1.bind 不会调用函数\n",[36,92138,92139],{"class":38,"line":2492},[36,92140,92141],{"class":53},"    \u002F\u002F 2.bind能改变this的指向\n",[36,92143,92144],{"class":38,"line":4150},[36,92145,92146],{"class":53},"    fn.bind()\n",[36,92148,92149],{"class":38,"line":4155},[36,92150,92151],{"class":53},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,92153,92154],{"class":38,"line":4161},[36,92155,92156],{"class":53},"    const fun = fn.bind(obj)\n",[36,92158,92159],{"class":38,"line":4166},[36,92160,92161],{"class":53},"    \u002F\u002F console.log(fun)\n",[36,92163,92164],{"class":38,"line":4180},[36,92165,92166],{"class":53},"    \u002F\u002F 调用,查看this的指向\n",[36,92168,92169],{"class":38,"line":4185},[36,92170,55145],{"class":53},[36,92172,92173,92175,92177],{"class":38,"line":4191},[36,92174,54911],{"class":53},[36,92176,54307],{"class":53794},[36,92178,53801],{"class":53},[36,92180,92181,92183,92185],{"class":38,"line":4212},[36,92182,54279],{"class":53},[36,92184,54294],{"class":53794},[36,92186,53801],{"class":53},[19,92188,92189],{},[4000,92190],{"alt":31,"src":92191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[433,92193,92194],{"start":88},[436,92195,92196],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,92198,92200],{"className":55561,"code":92199,"language":55563,"meta":31,"style":31},"\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",[33,92201,92202,92210,92223,92231,92236,92240,92245,92250,92255,92260,92265,92270,92275,92280,92284,92292],{"__ignoreMap":31},[36,92203,92204,92206,92208],{"class":38,"line":39},[36,92205,1507],{"class":53},[36,92207,54294],{"class":53794},[36,92209,53801],{"class":53},[36,92211,92212,92214,92216,92219,92221],{"class":38,"line":46},[36,92213,54638],{"class":53},[36,92215,56380],{"class":53794},[36,92217,92218],{"class":53},">禁用\u003C\u002F",[36,92220,56380],{"class":53794},[36,92222,53801],{"class":53},[36,92224,92225,92227,92229],{"class":38,"line":82},[36,92226,54638],{"class":53},[36,92228,54307],{"class":53794},[36,92230,53801],{"class":53},[36,92232,92233],{"class":38,"line":88},[36,92234,92235],{"class":53},"    const btn = document.querySelector('button')\n",[36,92237,92238],{"class":38,"line":195},[36,92239,61505],{"class":53},[36,92241,92242],{"class":38,"line":1517},[36,92243,92244],{"class":53},"      this.disabled = true\n",[36,92246,92247],{"class":38,"line":2421},[36,92248,92249],{"class":53},"      \u002F\u002F 定时器是window进行调用的\n",[36,92251,92252],{"class":38,"line":2446},[36,92253,92254],{"class":53},"      setTimeout(function () {\n",[36,92256,92257],{"class":38,"line":2469},[36,92258,92259],{"class":53},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,92261,92262],{"class":38,"line":2492},[36,92263,92264],{"class":53},"        this.disabled = false\n",[36,92266,92267],{"class":38,"line":4150},[36,92268,92269],{"class":53},"      }.bind(this), 2000)\n",[36,92271,92272],{"class":38,"line":4155},[36,92273,92274],{"class":53},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,92276,92277],{"class":38,"line":4161},[36,92278,92279],{"class":53},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,92281,92282],{"class":38,"line":4166},[36,92283,35962],{"class":53},[36,92285,92286,92288,92290],{"class":38,"line":4180},[36,92287,54911],{"class":53},[36,92289,54307],{"class":53794},[36,92291,53801],{"class":53},[36,92293,92294,92296,92298],{"class":38,"line":4185},[36,92295,54279],{"class":53},[36,92297,54294],{"class":53794},[36,92299,53801],{"class":53},[433,92301,92302],{"start":195},[436,92303,24470],{},[19,92305,92306],{},[4000,92307],{"alt":31,"src":92308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92310,92312],{"id":92311},"_417-性能优化","4.17 性能优化",[997,92314,92316],{"id":92315},"_4171-防抖","4.17.1 防抖",[19,92318,92319],{},[4000,92320],{"alt":31,"src":92321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92323,92324],{},[2839,92325,92326],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92328,92329],{},"防抖实现方式：",[3680,92331,92332],{},[436,92333,92334],{},"lodash 提供了防抖处理",[19,92336,92337],{},"_.debounce(func,[wait=0],[options={}])",[19,92339,92340],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,92342,92344],{"className":53129,"code":92343,"language":53131,"meta":31,"style":31},"\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",[33,92345,92346,92356,92370,92374,92382,92396,92416,92428,92436,92442,92452,92464,92476,92487,92499,92509,92519,92532,92536,92544,92552,92556,92564,92582,92600,92608,92627,92637,92646,92657,92662,92666,92671,92676,92681,92706,92714,92722,92726],{"__ignoreMap":31},[36,92347,92348,92350,92352,92354],{"class":38,"line":39},[36,92349,53791],{"class":53},[36,92351,53795],{"class":53794},[36,92353,53798],{"class":4500},[36,92355,53801],{"class":53},[36,92357,92358,92360,92362,92364,92366,92368],{"class":38,"line":46},[36,92359,1507],{"class":53},[36,92361,53131],{"class":53794},[36,92363,53810],{"class":4500},[36,92365,115],{"class":53},[36,92367,53815],{"class":57},[36,92369,53801],{"class":53},[36,92371,92372],{"class":38,"line":82},[36,92373,546],{"emptyLinePlaceholder":545},[36,92375,92376,92378,92380],{"class":38,"line":88},[36,92377,1507],{"class":53},[36,92379,53828],{"class":53794},[36,92381,53801],{"class":53},[36,92383,92384,92386,92388,92390,92392,92394],{"class":38,"line":195},[36,92385,54638],{"class":53},[36,92387,53838],{"class":53794},[36,92389,53841],{"class":4500},[36,92391,115],{"class":53},[36,92393,53846],{"class":57},[36,92395,53801],{"class":53},[36,92397,92398,92400,92402,92404,92406,92408,92410,92412,92414],{"class":38,"line":1517},[36,92399,54638],{"class":53},[36,92401,53838],{"class":53794},[36,92403,17440],{"class":4500},[36,92405,115],{"class":53},[36,92407,53885],{"class":57},[36,92409,53865],{"class":4500},[36,92411,115],{"class":53},[36,92413,53892],{"class":57},[36,92415,53801],{"class":53},[36,92417,92418,92420,92422,92424,92426],{"class":38,"line":2421},[36,92419,54638],{"class":53},[36,92421,53901],{"class":53794},[36,92423,53904],{"class":53},[36,92425,53901],{"class":53794},[36,92427,53801],{"class":53},[36,92429,92430,92432,92434],{"class":38,"line":2446},[36,92431,54638],{"class":53},[36,92433,2602],{"class":53794},[36,92435,53801],{"class":53},[36,92437,92438,92440],{"class":38,"line":2469},[36,92439,57243],{"class":4500},[36,92441,18091],{"class":53},[36,92443,92444,92446,92448,92450],{"class":38,"line":2492},[36,92445,75082],{"class":49},[36,92447,53931],{"class":53},[36,92449,62994],{"class":49},[36,92451,3833],{"class":53},[36,92453,92454,92456,92458,92460,92462],{"class":38,"line":4150},[36,92455,57262],{"class":49},[36,92457,53931],{"class":53},[36,92459,4259],{"class":49},[36,92461,53986],{"class":114},[36,92463,3833],{"class":53},[36,92465,92466,92468,92470,92472,92474],{"class":38,"line":4155},[36,92467,57276],{"class":49},[36,92469,53931],{"class":53},[36,92471,4259],{"class":49},[36,92473,53986],{"class":114},[36,92475,3833],{"class":53},[36,92477,92478,92480,92482,92485],{"class":38,"line":4161},[36,92479,57375],{"class":49},[36,92481,53931],{"class":53},[36,92483,92484],{"class":49},"gray",[36,92486,3833],{"class":53},[36,92488,92489,92491,92493,92495,92497],{"class":38,"line":4166},[36,92490,57413],{"class":49},[36,92492,53931],{"class":53},[36,92494,3501],{"class":49},[36,92496,53986],{"class":114},[36,92498,3833],{"class":53},[36,92500,92501,92503,92505,92507],{"class":38,"line":4180},[36,92502,59906],{"class":49},[36,92504,53931],{"class":53},[36,92506,63330],{"class":49},[36,92508,3833],{"class":53},[36,92510,92511,92513,92515,92517],{"class":38,"line":4185},[36,92512,59776],{"class":49},[36,92514,53931],{"class":53},[36,92516,54086],{"class":49},[36,92518,3833],{"class":53},[36,92520,92521,92524,92526,92528,92530],{"class":38,"line":4191},[36,92522,92523],{"class":49},"      padding-top",[36,92525,53931],{"class":53},[36,92527,1134],{"class":49},[36,92529,53986],{"class":114},[36,92531,3833],{"class":53},[36,92533,92534],{"class":38,"line":4212},[36,92535,4721],{"class":53},[36,92537,92538,92540,92542],{"class":38,"line":4217},[36,92539,54911],{"class":53},[36,92541,2602],{"class":53794},[36,92543,53801],{"class":53},[36,92545,92546,92548,92550],{"class":38,"line":4231},[36,92547,54279],{"class":53},[36,92549,53828],{"class":53794},[36,92551,53801],{"class":53},[36,92553,92554],{"class":38,"line":4236},[36,92555,546],{"emptyLinePlaceholder":545},[36,92557,92558,92560,92562],{"class":38,"line":4264},[36,92559,1507],{"class":53},[36,92561,54294],{"class":53794},[36,92563,53801],{"class":53},[36,92565,92566,92568,92570,92572,92574,92576,92578,92580],{"class":38,"line":4269},[36,92567,54638],{"class":53},[36,92569,54105],{"class":53794},[36,92571,55980],{"class":4500},[36,92573,115],{"class":53},[36,92575,55985],{"class":57},[36,92577,57805],{"class":53},[36,92579,54105],{"class":53794},[36,92581,53801],{"class":53},[36,92583,92584,92586,92588,92590,92592,92594,92596,92598],{"class":38,"line":4286},[36,92585,54638],{"class":53},[36,92587,54307],{"class":53794},[36,92589,57730],{"class":4500},[36,92591,115],{"class":53},[36,92593,90752],{"class":57},[36,92595,57805],{"class":53},[36,92597,54307],{"class":53794},[36,92599,53801],{"class":53},[36,92601,92602,92604,92606],{"class":38,"line":4291},[36,92603,54638],{"class":53},[36,92605,54307],{"class":53794},[36,92607,53801],{"class":53},[36,92609,92610,92612,92614,92616,92618,92620,92622,92625],{"class":38,"line":4296},[36,92611,13744],{"class":114},[36,92613,89412],{"class":49},[36,92615,498],{"class":114},[36,92617,56888],{"class":53},[36,92619,56891],{"class":4500},[36,92621,54],{"class":53},[36,92623,92624],{"class":57},"'.box'",[36,92626,61],{"class":53},[36,92628,92629,92631,92633,92635],{"class":38,"line":4301},[36,92630,54713],{"class":114},[36,92632,11964],{"class":53},[36,92634,115],{"class":114},[36,92636,49830],{"class":49},[36,92638,92639,92641,92644],{"class":38,"line":4315},[36,92640,72571],{"class":114},[36,92642,92643],{"class":4500}," mouseMove",[36,92645,13376],{"class":53},[36,92647,92648,92651,92653,92655],{"class":38,"line":4320},[36,92649,92650],{"class":53},"      box.innerHTML ",[36,92652,115],{"class":114},[36,92654,5563],{"class":53},[36,92656,5234],{"class":114},[36,92658,92659],{"class":38,"line":5109},[36,92660,92661],{"class":42},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,92663,92664],{"class":38,"line":5123},[36,92665,4721],{"class":53},[36,92667,92668],{"class":38,"line":5131},[36,92669,92670],{"class":42},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,92672,92673],{"class":38,"line":5136},[36,92674,92675],{"class":42},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,92677,92678],{"class":38,"line":5142},[36,92679,92680],{"class":42},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,92682,92683,92686,92688,92690,92693,92696,92699,92702,92704],{"class":38,"line":5148},[36,92684,92685],{"class":53},"    box.",[36,92687,60303],{"class":4500},[36,92689,54],{"class":53},[36,92691,92692],{"class":57},"'mousemove'",[36,92694,92695],{"class":53},", _.",[36,92697,92698],{"class":4500},"debounce",[36,92700,92701],{"class":53},"(mouseMove, ",[36,92703,67562],{"class":49},[36,92705,625],{"class":53},[36,92707,92708,92710,92712],{"class":38,"line":5153},[36,92709,54911],{"class":53},[36,92711,54307],{"class":53794},[36,92713,53801],{"class":53},[36,92715,92716,92718,92720],{"class":38,"line":10475},[36,92717,54279],{"class":53},[36,92719,54294],{"class":53794},[36,92721,53801],{"class":53},[36,92723,92724],{"class":38,"line":10499},[36,92725,546],{"emptyLinePlaceholder":545},[36,92727,92728,92730,92732],{"class":38,"line":10504},[36,92729,54279],{"class":53},[36,92731,53131],{"class":53794},[36,92733,53801],{"class":53},[3680,92735,92736],{},[436,92737,92738],{},"手写一个防抖函数来处理",[19,92740,92741],{},"防抖的核心就是利用定时器来实现的：",[19,92743,92744],{},"①声明一个定时器变量",[19,92746,92747],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92749,92750],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,92752,92754],{"className":53129,"code":92753,"language":53131,"meta":31,"style":31},"\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",[33,92755,92756,92766,92780,92784,92792,92806,92826,92838,92846,92852,92862,92874,92886,92896,92908,92918,92928,92940,92944,92952,92960,92964,92972,92990,93008,93016,93034,93044,93052,93062,93066,93070,93074,93079,93084,93089,93094,93099,93104,93122,93129,93134,93142,93147,93160,93176,93186,93191,93195,93199,93219,93223,93228,93233,93238,93243,93251,93259,93263],{"__ignoreMap":31},[36,92757,92758,92760,92762,92764],{"class":38,"line":39},[36,92759,53791],{"class":53},[36,92761,53795],{"class":53794},[36,92763,53798],{"class":4500},[36,92765,53801],{"class":53},[36,92767,92768,92770,92772,92774,92776,92778],{"class":38,"line":46},[36,92769,1507],{"class":53},[36,92771,53131],{"class":53794},[36,92773,53810],{"class":4500},[36,92775,115],{"class":53},[36,92777,53815],{"class":57},[36,92779,53801],{"class":53},[36,92781,92782],{"class":38,"line":82},[36,92783,546],{"emptyLinePlaceholder":545},[36,92785,92786,92788,92790],{"class":38,"line":88},[36,92787,1507],{"class":53},[36,92789,53828],{"class":53794},[36,92791,53801],{"class":53},[36,92793,92794,92796,92798,92800,92802,92804],{"class":38,"line":195},[36,92795,54638],{"class":53},[36,92797,53838],{"class":53794},[36,92799,53841],{"class":4500},[36,92801,115],{"class":53},[36,92803,53846],{"class":57},[36,92805,53801],{"class":53},[36,92807,92808,92810,92812,92814,92816,92818,92820,92822,92824],{"class":38,"line":1517},[36,92809,54638],{"class":53},[36,92811,53838],{"class":53794},[36,92813,17440],{"class":4500},[36,92815,115],{"class":53},[36,92817,53885],{"class":57},[36,92819,53865],{"class":4500},[36,92821,115],{"class":53},[36,92823,53892],{"class":57},[36,92825,53801],{"class":53},[36,92827,92828,92830,92832,92834,92836],{"class":38,"line":2421},[36,92829,54638],{"class":53},[36,92831,53901],{"class":53794},[36,92833,53904],{"class":53},[36,92835,53901],{"class":53794},[36,92837,53801],{"class":53},[36,92839,92840,92842,92844],{"class":38,"line":2446},[36,92841,54638],{"class":53},[36,92843,2602],{"class":53794},[36,92845,53801],{"class":53},[36,92847,92848,92850],{"class":38,"line":2469},[36,92849,57243],{"class":4500},[36,92851,18091],{"class":53},[36,92853,92854,92856,92858,92860],{"class":38,"line":2492},[36,92855,75082],{"class":49},[36,92857,53931],{"class":53},[36,92859,62994],{"class":49},[36,92861,3833],{"class":53},[36,92863,92864,92866,92868,92870,92872],{"class":38,"line":4150},[36,92865,57262],{"class":49},[36,92867,53931],{"class":53},[36,92869,4259],{"class":49},[36,92871,53986],{"class":114},[36,92873,3833],{"class":53},[36,92875,92876,92878,92880,92882,92884],{"class":38,"line":4155},[36,92877,57276],{"class":49},[36,92879,53931],{"class":53},[36,92881,4259],{"class":49},[36,92883,53986],{"class":114},[36,92885,3833],{"class":53},[36,92887,92888,92890,92892,92894],{"class":38,"line":4161},[36,92889,57375],{"class":49},[36,92891,53931],{"class":53},[36,92893,92484],{"class":49},[36,92895,3833],{"class":53},[36,92897,92898,92900,92902,92904,92906],{"class":38,"line":4166},[36,92899,57413],{"class":49},[36,92901,53931],{"class":53},[36,92903,3501],{"class":49},[36,92905,53986],{"class":114},[36,92907,3833],{"class":53},[36,92909,92910,92912,92914,92916],{"class":38,"line":4180},[36,92911,59906],{"class":49},[36,92913,53931],{"class":53},[36,92915,63330],{"class":49},[36,92917,3833],{"class":53},[36,92919,92920,92922,92924,92926],{"class":38,"line":4185},[36,92921,59776],{"class":49},[36,92923,53931],{"class":53},[36,92925,54086],{"class":49},[36,92927,3833],{"class":53},[36,92929,92930,92932,92934,92936,92938],{"class":38,"line":4191},[36,92931,92523],{"class":49},[36,92933,53931],{"class":53},[36,92935,1134],{"class":49},[36,92937,53986],{"class":114},[36,92939,3833],{"class":53},[36,92941,92942],{"class":38,"line":4212},[36,92943,4721],{"class":53},[36,92945,92946,92948,92950],{"class":38,"line":4217},[36,92947,54911],{"class":53},[36,92949,2602],{"class":53794},[36,92951,53801],{"class":53},[36,92953,92954,92956,92958],{"class":38,"line":4231},[36,92955,54279],{"class":53},[36,92957,53828],{"class":53794},[36,92959,53801],{"class":53},[36,92961,92962],{"class":38,"line":4236},[36,92963,546],{"emptyLinePlaceholder":545},[36,92965,92966,92968,92970],{"class":38,"line":4264},[36,92967,1507],{"class":53},[36,92969,54294],{"class":53794},[36,92971,53801],{"class":53},[36,92973,92974,92976,92978,92980,92982,92984,92986,92988],{"class":38,"line":4269},[36,92975,54638],{"class":53},[36,92977,54105],{"class":53794},[36,92979,55980],{"class":4500},[36,92981,115],{"class":53},[36,92983,55985],{"class":57},[36,92985,57805],{"class":53},[36,92987,54105],{"class":53794},[36,92989,53801],{"class":53},[36,92991,92992,92994,92996,92998,93000,93002,93004,93006],{"class":38,"line":4286},[36,92993,54638],{"class":53},[36,92995,54307],{"class":53794},[36,92997,57730],{"class":4500},[36,92999,115],{"class":53},[36,93001,90752],{"class":57},[36,93003,57805],{"class":53},[36,93005,54307],{"class":53794},[36,93007,53801],{"class":53},[36,93009,93010,93012,93014],{"class":38,"line":4291},[36,93011,54638],{"class":53},[36,93013,54307],{"class":53794},[36,93015,53801],{"class":53},[36,93017,93018,93020,93022,93024,93026,93028,93030,93032],{"class":38,"line":4296},[36,93019,13744],{"class":114},[36,93021,89412],{"class":49},[36,93023,498],{"class":114},[36,93025,56888],{"class":53},[36,93027,56891],{"class":4500},[36,93029,54],{"class":53},[36,93031,92624],{"class":57},[36,93033,61],{"class":53},[36,93035,93036,93038,93040,93042],{"class":38,"line":4301},[36,93037,54713],{"class":114},[36,93039,11964],{"class":53},[36,93041,115],{"class":114},[36,93043,49830],{"class":49},[36,93045,93046,93048,93050],{"class":38,"line":4315},[36,93047,72571],{"class":114},[36,93049,92643],{"class":4500},[36,93051,13376],{"class":53},[36,93053,93054,93056,93058,93060],{"class":38,"line":4320},[36,93055,92650],{"class":53},[36,93057,115],{"class":114},[36,93059,5563],{"class":53},[36,93061,5234],{"class":114},[36,93063,93064],{"class":38,"line":5109},[36,93065,92661],{"class":42},[36,93067,93068],{"class":38,"line":5123},[36,93069,4721],{"class":53},[36,93071,93072],{"class":38,"line":5131},[36,93073,92670],{"class":42},[36,93075,93076],{"class":38,"line":5136},[36,93077,93078],{"class":42},"    \u002F\u002F 手写防抖函数\n",[36,93080,93081],{"class":38,"line":5142},[36,93082,93083],{"class":42},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,93085,93086],{"class":38,"line":5148},[36,93087,93088],{"class":42},"    \u002F\u002F 1.声明定时器变量\n",[36,93090,93091],{"class":38,"line":5153},[36,93092,93093],{"class":42},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,93095,93096],{"class":38,"line":10475},[36,93097,93098],{"class":42},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,93100,93101],{"class":38,"line":10499},[36,93102,93103],{"class":42},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,93105,93106,93108,93111,93113,93116,93118,93120],{"class":38,"line":10504},[36,93107,72571],{"class":114},[36,93109,93110],{"class":4500}," debounce",[36,93112,54],{"class":53},[36,93114,93115],{"class":1997},"fn",[36,93117,14958],{"class":53},[36,93119,3396],{"class":1997},[36,93121,14965],{"class":53},[36,93123,93124,93126],{"class":38,"line":10510},[36,93125,82255],{"class":114},[36,93127,93128],{"class":53}," timer\n",[36,93130,93131],{"class":38,"line":10537},[36,93132,93133],{"class":42},"      \u002F\u002F return 返回一个匿名函数\n",[36,93135,93136,93138,93140],{"class":38,"line":10542},[36,93137,76467],{"class":114},[36,93139,61407],{"class":114},[36,93141,56943],{"class":53},[36,93143,93144],{"class":38,"line":10548},[36,93145,93146],{"class":42},"        \u002F\u002F 这里边写第二三四步\n",[36,93148,93149,93151,93154,93157],{"class":38,"line":10560},[36,93150,5029],{"class":114},[36,93152,93153],{"class":53}," (timer) ",[36,93155,93156],{"class":4500},"clearTimeout",[36,93158,93159],{"class":53},"(timer)\n",[36,93161,93162,93165,93167,93170,93172,93174],{"class":38,"line":10572},[36,93163,93164],{"class":53},"        timer ",[36,93166,115],{"class":114},[36,93168,93169],{"class":4500}," setTimeout",[36,93171,54],{"class":53},[36,93173,56940],{"class":114},[36,93175,56943],{"class":53},[36,93177,93178,93181,93183],{"class":38,"line":10584},[36,93179,93180],{"class":4500},"          fn",[36,93182,15573],{"class":53},[36,93184,93185],{"class":42},"\u002F\u002F加小括号调用fn }, t)\n",[36,93187,93188],{"class":38,"line":12241},[36,93189,93190],{"class":53},"        }, t)\n",[36,93192,93193],{"class":38,"line":12266},[36,93194,54892],{"class":53},[36,93196,93197],{"class":38,"line":12289},[36,93198,4721],{"class":53},[36,93200,93201,93203,93205,93207,93209,93211,93213,93215,93217],{"class":38,"line":12313},[36,93202,92685],{"class":53},[36,93204,60303],{"class":4500},[36,93206,54],{"class":53},[36,93208,92692],{"class":57},[36,93210,14958],{"class":53},[36,93212,92698],{"class":4500},[36,93214,92701],{"class":53},[36,93216,67562],{"class":49},[36,93218,625],{"class":53},[36,93220,93221],{"class":38,"line":12318},[36,93222,546],{"emptyLinePlaceholder":545},[36,93224,93225],{"class":38,"line":12323},[36,93226,93227],{"class":42},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,93229,93230],{"class":38,"line":12328},[36,93231,93232],{"class":42},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,93234,93235],{"class":38,"line":12337},[36,93236,93237],{"class":42},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,93239,93240],{"class":38,"line":12342},[36,93241,93242],{"class":42},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,93244,93245,93247,93249],{"class":38,"line":12348},[36,93246,54911],{"class":53},[36,93248,54307],{"class":53794},[36,93250,53801],{"class":53},[36,93252,93253,93255,93257],{"class":38,"line":12369},[36,93254,54279],{"class":53},[36,93256,54294],{"class":53794},[36,93258,53801],{"class":53},[36,93260,93261],{"class":38,"line":12375},[36,93262,546],{"emptyLinePlaceholder":545},[36,93264,93265,93267,93269],{"class":38,"line":12389},[36,93266,54279],{"class":53},[36,93268,53131],{"class":53794},[36,93270,53801],{"class":53},[997,93272,93274],{"id":93273},"_4172-节流","4.17.2 节流",[19,93276,93277],{},[4000,93278],{"alt":31,"src":93279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93281,93282],{},[4000,93283],{"alt":31,"src":93284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93286,93287],{},[2839,93288,93289],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93291,93292],{},"实现方式：",[3680,93294,93295],{},[436,93296,93297],{},"lodash 提供的节流函数来处理",[19,93299,93300],{},"_.throttle(func,[wait=0],[options=])",[19,93302,93303],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,93305,93307],{"className":53129,"code":93306,"language":53131,"meta":31,"style":31},"\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",[33,93308,93309,93319,93333,93337,93345,93359,93379,93391,93399,93405,93415,93427,93439,93449,93461,93471,93481,93493,93497,93505,93513,93517,93525,93543,93561,93569,93587,93597,93605,93615,93619,93623,93627,93632,93637,93658,93666,93674,93678],{"__ignoreMap":31},[36,93310,93311,93313,93315,93317],{"class":38,"line":39},[36,93312,53791],{"class":53},[36,93314,53795],{"class":53794},[36,93316,53798],{"class":4500},[36,93318,53801],{"class":53},[36,93320,93321,93323,93325,93327,93329,93331],{"class":38,"line":46},[36,93322,1507],{"class":53},[36,93324,53131],{"class":53794},[36,93326,53810],{"class":4500},[36,93328,115],{"class":53},[36,93330,53815],{"class":57},[36,93332,53801],{"class":53},[36,93334,93335],{"class":38,"line":82},[36,93336,546],{"emptyLinePlaceholder":545},[36,93338,93339,93341,93343],{"class":38,"line":88},[36,93340,1507],{"class":53},[36,93342,53828],{"class":53794},[36,93344,53801],{"class":53},[36,93346,93347,93349,93351,93353,93355,93357],{"class":38,"line":195},[36,93348,54638],{"class":53},[36,93350,53838],{"class":53794},[36,93352,53841],{"class":4500},[36,93354,115],{"class":53},[36,93356,53846],{"class":57},[36,93358,53801],{"class":53},[36,93360,93361,93363,93365,93367,93369,93371,93373,93375,93377],{"class":38,"line":1517},[36,93362,54638],{"class":53},[36,93364,53838],{"class":53794},[36,93366,17440],{"class":4500},[36,93368,115],{"class":53},[36,93370,53885],{"class":57},[36,93372,53865],{"class":4500},[36,93374,115],{"class":53},[36,93376,53892],{"class":57},[36,93378,53801],{"class":53},[36,93380,93381,93383,93385,93387,93389],{"class":38,"line":2421},[36,93382,54638],{"class":53},[36,93384,53901],{"class":53794},[36,93386,53904],{"class":53},[36,93388,53901],{"class":53794},[36,93390,53801],{"class":53},[36,93392,93393,93395,93397],{"class":38,"line":2446},[36,93394,54638],{"class":53},[36,93396,2602],{"class":53794},[36,93398,53801],{"class":53},[36,93400,93401,93403],{"class":38,"line":2469},[36,93402,57243],{"class":4500},[36,93404,18091],{"class":53},[36,93406,93407,93409,93411,93413],{"class":38,"line":2492},[36,93408,75082],{"class":49},[36,93410,53931],{"class":53},[36,93412,62994],{"class":49},[36,93414,3833],{"class":53},[36,93416,93417,93419,93421,93423,93425],{"class":38,"line":4150},[36,93418,57262],{"class":49},[36,93420,53931],{"class":53},[36,93422,4259],{"class":49},[36,93424,53986],{"class":114},[36,93426,3833],{"class":53},[36,93428,93429,93431,93433,93435,93437],{"class":38,"line":4155},[36,93430,57276],{"class":49},[36,93432,53931],{"class":53},[36,93434,4259],{"class":49},[36,93436,53986],{"class":114},[36,93438,3833],{"class":53},[36,93440,93441,93443,93445,93447],{"class":38,"line":4161},[36,93442,57375],{"class":49},[36,93444,53931],{"class":53},[36,93446,92484],{"class":49},[36,93448,3833],{"class":53},[36,93450,93451,93453,93455,93457,93459],{"class":38,"line":4166},[36,93452,57413],{"class":49},[36,93454,53931],{"class":53},[36,93456,3501],{"class":49},[36,93458,53986],{"class":114},[36,93460,3833],{"class":53},[36,93462,93463,93465,93467,93469],{"class":38,"line":4180},[36,93464,59906],{"class":49},[36,93466,53931],{"class":53},[36,93468,63330],{"class":49},[36,93470,3833],{"class":53},[36,93472,93473,93475,93477,93479],{"class":38,"line":4185},[36,93474,59776],{"class":49},[36,93476,53931],{"class":53},[36,93478,54086],{"class":49},[36,93480,3833],{"class":53},[36,93482,93483,93485,93487,93489,93491],{"class":38,"line":4191},[36,93484,92523],{"class":49},[36,93486,53931],{"class":53},[36,93488,1134],{"class":49},[36,93490,53986],{"class":114},[36,93492,3833],{"class":53},[36,93494,93495],{"class":38,"line":4212},[36,93496,4721],{"class":53},[36,93498,93499,93501,93503],{"class":38,"line":4217},[36,93500,54911],{"class":53},[36,93502,2602],{"class":53794},[36,93504,53801],{"class":53},[36,93506,93507,93509,93511],{"class":38,"line":4231},[36,93508,54279],{"class":53},[36,93510,53828],{"class":53794},[36,93512,53801],{"class":53},[36,93514,93515],{"class":38,"line":4236},[36,93516,546],{"emptyLinePlaceholder":545},[36,93518,93519,93521,93523],{"class":38,"line":4264},[36,93520,1507],{"class":53},[36,93522,54294],{"class":53794},[36,93524,53801],{"class":53},[36,93526,93527,93529,93531,93533,93535,93537,93539,93541],{"class":38,"line":4269},[36,93528,54638],{"class":53},[36,93530,54105],{"class":53794},[36,93532,55980],{"class":4500},[36,93534,115],{"class":53},[36,93536,55985],{"class":57},[36,93538,57805],{"class":53},[36,93540,54105],{"class":53794},[36,93542,53801],{"class":53},[36,93544,93545,93547,93549,93551,93553,93555,93557,93559],{"class":38,"line":4286},[36,93546,54638],{"class":53},[36,93548,54307],{"class":53794},[36,93550,57730],{"class":4500},[36,93552,115],{"class":53},[36,93554,90752],{"class":57},[36,93556,57805],{"class":53},[36,93558,54307],{"class":53794},[36,93560,53801],{"class":53},[36,93562,93563,93565,93567],{"class":38,"line":4291},[36,93564,54638],{"class":53},[36,93566,54307],{"class":53794},[36,93568,53801],{"class":53},[36,93570,93571,93573,93575,93577,93579,93581,93583,93585],{"class":38,"line":4296},[36,93572,13744],{"class":114},[36,93574,89412],{"class":49},[36,93576,498],{"class":114},[36,93578,56888],{"class":53},[36,93580,56891],{"class":4500},[36,93582,54],{"class":53},[36,93584,92624],{"class":57},[36,93586,61],{"class":53},[36,93588,93589,93591,93593,93595],{"class":38,"line":4301},[36,93590,54713],{"class":114},[36,93592,11964],{"class":53},[36,93594,115],{"class":114},[36,93596,49830],{"class":49},[36,93598,93599,93601,93603],{"class":38,"line":4315},[36,93600,72571],{"class":114},[36,93602,92643],{"class":4500},[36,93604,13376],{"class":53},[36,93606,93607,93609,93611,93613],{"class":38,"line":4320},[36,93608,92650],{"class":53},[36,93610,115],{"class":114},[36,93612,5563],{"class":53},[36,93614,5234],{"class":114},[36,93616,93617],{"class":38,"line":5109},[36,93618,92661],{"class":42},[36,93620,93621],{"class":38,"line":5123},[36,93622,4721],{"class":53},[36,93624,93625],{"class":38,"line":5131},[36,93626,92670],{"class":42},[36,93628,93629],{"class":38,"line":5136},[36,93630,93631],{"class":42},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,93633,93634],{"class":38,"line":5142},[36,93635,93636],{"class":42},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,93638,93639,93641,93643,93645,93647,93649,93652,93654,93656],{"class":38,"line":5148},[36,93640,92685],{"class":53},[36,93642,60303],{"class":4500},[36,93644,54],{"class":53},[36,93646,92692],{"class":57},[36,93648,92695],{"class":53},[36,93650,93651],{"class":4500},"throttle",[36,93653,92701],{"class":53},[36,93655,67562],{"class":49},[36,93657,625],{"class":53},[36,93659,93660,93662,93664],{"class":38,"line":5153},[36,93661,54911],{"class":53},[36,93663,54307],{"class":53794},[36,93665,53801],{"class":53},[36,93667,93668,93670,93672],{"class":38,"line":10475},[36,93669,54279],{"class":53},[36,93671,54294],{"class":53794},[36,93673,53801],{"class":53},[36,93675,93676],{"class":38,"line":10499},[36,93677,546],{"emptyLinePlaceholder":545},[36,93679,93680,93682,93684],{"class":38,"line":10504},[36,93681,54279],{"class":53},[36,93683,53131],{"class":53794},[36,93685,53801],{"class":53},[3680,93687,93688],{},[436,93689,93690],{},"手写一个节流函数来处理",[19,93692,73438],{},[19,93694,92744],{},[19,93696,93697],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93699,93700],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,93702,93704],{"className":53129,"code":93703,"language":53131,"meta":31,"style":31},"\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",[33,93705,93706,93716,93730,93734,93742,93756,93776,93788,93796,93802,93812,93824,93836,93846,93858,93868,93878,93890,93894,93902,93910,93914,93922,93940,93958,93966,93984,93994,94002,94012,94016,94020,94024,94029,94034,94039,94044,94049,94054,94071,94077,94085,94096,94111,94118,94123,94128,94138,94143,94148,94153,94157,94161,94165,94185,94193,94201,94205],{"__ignoreMap":31},[36,93707,93708,93710,93712,93714],{"class":38,"line":39},[36,93709,53791],{"class":53},[36,93711,53795],{"class":53794},[36,93713,53798],{"class":4500},[36,93715,53801],{"class":53},[36,93717,93718,93720,93722,93724,93726,93728],{"class":38,"line":46},[36,93719,1507],{"class":53},[36,93721,53131],{"class":53794},[36,93723,53810],{"class":4500},[36,93725,115],{"class":53},[36,93727,53815],{"class":57},[36,93729,53801],{"class":53},[36,93731,93732],{"class":38,"line":82},[36,93733,546],{"emptyLinePlaceholder":545},[36,93735,93736,93738,93740],{"class":38,"line":88},[36,93737,1507],{"class":53},[36,93739,53828],{"class":53794},[36,93741,53801],{"class":53},[36,93743,93744,93746,93748,93750,93752,93754],{"class":38,"line":195},[36,93745,54638],{"class":53},[36,93747,53838],{"class":53794},[36,93749,53841],{"class":4500},[36,93751,115],{"class":53},[36,93753,53846],{"class":57},[36,93755,53801],{"class":53},[36,93757,93758,93760,93762,93764,93766,93768,93770,93772,93774],{"class":38,"line":1517},[36,93759,54638],{"class":53},[36,93761,53838],{"class":53794},[36,93763,17440],{"class":4500},[36,93765,115],{"class":53},[36,93767,53885],{"class":57},[36,93769,53865],{"class":4500},[36,93771,115],{"class":53},[36,93773,53892],{"class":57},[36,93775,53801],{"class":53},[36,93777,93778,93780,93782,93784,93786],{"class":38,"line":2421},[36,93779,54638],{"class":53},[36,93781,53901],{"class":53794},[36,93783,53904],{"class":53},[36,93785,53901],{"class":53794},[36,93787,53801],{"class":53},[36,93789,93790,93792,93794],{"class":38,"line":2446},[36,93791,54638],{"class":53},[36,93793,2602],{"class":53794},[36,93795,53801],{"class":53},[36,93797,93798,93800],{"class":38,"line":2469},[36,93799,57243],{"class":4500},[36,93801,18091],{"class":53},[36,93803,93804,93806,93808,93810],{"class":38,"line":2492},[36,93805,75082],{"class":49},[36,93807,53931],{"class":53},[36,93809,62994],{"class":49},[36,93811,3833],{"class":53},[36,93813,93814,93816,93818,93820,93822],{"class":38,"line":4150},[36,93815,57262],{"class":49},[36,93817,53931],{"class":53},[36,93819,4259],{"class":49},[36,93821,53986],{"class":114},[36,93823,3833],{"class":53},[36,93825,93826,93828,93830,93832,93834],{"class":38,"line":4155},[36,93827,57276],{"class":49},[36,93829,53931],{"class":53},[36,93831,4259],{"class":49},[36,93833,53986],{"class":114},[36,93835,3833],{"class":53},[36,93837,93838,93840,93842,93844],{"class":38,"line":4161},[36,93839,57375],{"class":49},[36,93841,53931],{"class":53},[36,93843,92484],{"class":49},[36,93845,3833],{"class":53},[36,93847,93848,93850,93852,93854,93856],{"class":38,"line":4166},[36,93849,57413],{"class":49},[36,93851,53931],{"class":53},[36,93853,3501],{"class":49},[36,93855,53986],{"class":114},[36,93857,3833],{"class":53},[36,93859,93860,93862,93864,93866],{"class":38,"line":4180},[36,93861,59906],{"class":49},[36,93863,53931],{"class":53},[36,93865,63330],{"class":49},[36,93867,3833],{"class":53},[36,93869,93870,93872,93874,93876],{"class":38,"line":4185},[36,93871,59776],{"class":49},[36,93873,53931],{"class":53},[36,93875,54086],{"class":49},[36,93877,3833],{"class":53},[36,93879,93880,93882,93884,93886,93888],{"class":38,"line":4191},[36,93881,92523],{"class":49},[36,93883,53931],{"class":53},[36,93885,1134],{"class":49},[36,93887,53986],{"class":114},[36,93889,3833],{"class":53},[36,93891,93892],{"class":38,"line":4212},[36,93893,4721],{"class":53},[36,93895,93896,93898,93900],{"class":38,"line":4217},[36,93897,54911],{"class":53},[36,93899,2602],{"class":53794},[36,93901,53801],{"class":53},[36,93903,93904,93906,93908],{"class":38,"line":4231},[36,93905,54279],{"class":53},[36,93907,53828],{"class":53794},[36,93909,53801],{"class":53},[36,93911,93912],{"class":38,"line":4236},[36,93913,546],{"emptyLinePlaceholder":545},[36,93915,93916,93918,93920],{"class":38,"line":4264},[36,93917,1507],{"class":53},[36,93919,54294],{"class":53794},[36,93921,53801],{"class":53},[36,93923,93924,93926,93928,93930,93932,93934,93936,93938],{"class":38,"line":4269},[36,93925,54638],{"class":53},[36,93927,54105],{"class":53794},[36,93929,55980],{"class":4500},[36,93931,115],{"class":53},[36,93933,55985],{"class":57},[36,93935,57805],{"class":53},[36,93937,54105],{"class":53794},[36,93939,53801],{"class":53},[36,93941,93942,93944,93946,93948,93950,93952,93954,93956],{"class":38,"line":4286},[36,93943,54638],{"class":53},[36,93945,54307],{"class":53794},[36,93947,57730],{"class":4500},[36,93949,115],{"class":53},[36,93951,90752],{"class":57},[36,93953,57805],{"class":53},[36,93955,54307],{"class":53794},[36,93957,53801],{"class":53},[36,93959,93960,93962,93964],{"class":38,"line":4291},[36,93961,54638],{"class":53},[36,93963,54307],{"class":53794},[36,93965,53801],{"class":53},[36,93967,93968,93970,93972,93974,93976,93978,93980,93982],{"class":38,"line":4296},[36,93969,13744],{"class":114},[36,93971,89412],{"class":49},[36,93973,498],{"class":114},[36,93975,56888],{"class":53},[36,93977,56891],{"class":4500},[36,93979,54],{"class":53},[36,93981,92624],{"class":57},[36,93983,61],{"class":53},[36,93985,93986,93988,93990,93992],{"class":38,"line":4301},[36,93987,54713],{"class":114},[36,93989,11964],{"class":53},[36,93991,115],{"class":114},[36,93993,49830],{"class":49},[36,93995,93996,93998,94000],{"class":38,"line":4315},[36,93997,72571],{"class":114},[36,93999,92643],{"class":4500},[36,94001,13376],{"class":53},[36,94003,94004,94006,94008,94010],{"class":38,"line":4320},[36,94005,92650],{"class":53},[36,94007,115],{"class":114},[36,94009,5563],{"class":53},[36,94011,5234],{"class":114},[36,94013,94014],{"class":38,"line":5109},[36,94015,92661],{"class":42},[36,94017,94018],{"class":38,"line":5123},[36,94019,4721],{"class":53},[36,94021,94022],{"class":38,"line":5131},[36,94023,92670],{"class":42},[36,94025,94026],{"class":38,"line":5136},[36,94027,94028],{"class":42},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,94030,94031],{"class":38,"line":5142},[36,94032,94033],{"class":42},"    \u002F\u002F 1.声明一个定时器变量\n",[36,94035,94036],{"class":38,"line":5148},[36,94037,94038],{"class":42},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,94040,94041],{"class":38,"line":5153},[36,94042,94043],{"class":42},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,94045,94046],{"class":38,"line":10475},[36,94047,94048],{"class":42},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,94050,94051],{"class":38,"line":10499},[36,94052,94053],{"class":42},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,94055,94056,94058,94061,94063,94065,94067,94069],{"class":38,"line":10504},[36,94057,72571],{"class":114},[36,94059,94060],{"class":4500}," throttle",[36,94062,54],{"class":53},[36,94064,93115],{"class":1997},[36,94066,14958],{"class":53},[36,94068,3396],{"class":1997},[36,94070,14965],{"class":53},[36,94072,94073,94075],{"class":38,"line":10510},[36,94074,82255],{"class":114},[36,94076,93128],{"class":53},[36,94078,94079,94081,94083],{"class":38,"line":10537},[36,94080,76467],{"class":114},[36,94082,61407],{"class":114},[36,94084,56943],{"class":53},[36,94086,94087,94089,94091,94093],{"class":38,"line":10542},[36,94088,5029],{"class":114},[36,94090,4196],{"class":53},[36,94092,2911],{"class":114},[36,94094,94095],{"class":53},"timer) {\n",[36,94097,94098,94101,94103,94105,94107,94109],{"class":38,"line":10548},[36,94099,94100],{"class":53},"          timer ",[36,94102,115],{"class":114},[36,94104,93169],{"class":4500},[36,94106,54],{"class":53},[36,94108,56940],{"class":114},[36,94110,56943],{"class":53},[36,94112,94113,94116],{"class":38,"line":10560},[36,94114,94115],{"class":4500},"            fn",[36,94117,4513],{"class":53},[36,94119,94120],{"class":38,"line":10572},[36,94121,94122],{"class":42},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,94124,94125],{"class":38,"line":10584},[36,94126,94127],{"class":42},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,94129,94130,94133,94135],{"class":38,"line":12241},[36,94131,94132],{"class":53},"            timer ",[36,94134,115],{"class":114},[36,94136,94137],{"class":49}," null\n",[36,94139,94140],{"class":38,"line":12266},[36,94141,94142],{"class":42},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,94144,94145],{"class":38,"line":12289},[36,94146,94147],{"class":42},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,94149,94150],{"class":38,"line":12313},[36,94151,94152],{"class":53},"          }, t)\n",[36,94154,94155],{"class":38,"line":12318},[36,94156,5061],{"class":53},[36,94158,94159],{"class":38,"line":12323},[36,94160,54892],{"class":53},[36,94162,94163],{"class":38,"line":12328},[36,94164,4721],{"class":53},[36,94166,94167,94169,94171,94173,94175,94177,94179,94181,94183],{"class":38,"line":12337},[36,94168,92685],{"class":53},[36,94170,60303],{"class":4500},[36,94172,54],{"class":53},[36,94174,92692],{"class":57},[36,94176,14958],{"class":53},[36,94178,93651],{"class":4500},[36,94180,92701],{"class":53},[36,94182,67562],{"class":49},[36,94184,625],{"class":53},[36,94186,94187,94189,94191],{"class":38,"line":12342},[36,94188,54911],{"class":53},[36,94190,54307],{"class":53794},[36,94192,53801],{"class":53},[36,94194,94195,94197,94199],{"class":38,"line":12348},[36,94196,54279],{"class":53},[36,94198,54294],{"class":53794},[36,94200,53801],{"class":53},[36,94202,94203],{"class":38,"line":12369},[36,94204,546],{"emptyLinePlaceholder":545},[36,94206,94207,94209,94211],{"class":38,"line":12375},[36,94208,54279],{"class":53},[36,94210,53131],{"class":53794},[36,94212,53801],{"class":53},[997,94214,94216],{"id":94215},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,94218,94220],{"className":55561,"code":94219,"language":55563,"meta":31,"style":31},"\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",[33,94221,94222,94230,94238,94243,94248,94253,94258,94262,94270],{"__ignoreMap":31},[36,94223,94224,94226,94228],{"class":38,"line":39},[36,94225,1507],{"class":53},[36,94227,54294],{"class":53794},[36,94229,53801],{"class":53},[36,94231,94232,94234,94236],{"class":38,"line":46},[36,94233,54638],{"class":53},[36,94235,54307],{"class":53794},[36,94237,53801],{"class":53},[36,94239,94240],{"class":38,"line":82},[36,94241,94242],{"class":53},"    let timer = null\n",[36,94244,94245],{"class":38,"line":88},[36,94246,94247],{"class":53},"    timer = setTimeout(() => {\n",[36,94249,94250],{"class":38,"line":195},[36,94251,94252],{"class":53},"      clearTimeout(timer)\n",[36,94254,94255],{"class":38,"line":1517},[36,94256,94257],{"class":53},"      console.log(timer)\n",[36,94259,94260],{"class":38,"line":2421},[36,94261,62714],{"class":53},[36,94263,94264,94266,94268],{"class":38,"line":2446},[36,94265,54911],{"class":53},[36,94267,54307],{"class":53794},[36,94269,53801],{"class":53},[36,94271,94272,94274,94276],{"class":38,"line":2469},[36,94273,54279],{"class":53},[36,94275,54294],{"class":53794},[36,94277,53801],{"class":53},[19,94279,94280],{},"输出为1",[19,94282,94283],{},"在开启的定时器里边写清除定时器",[19,94285,94286],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[997,94288,94290],{"id":94289},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94292,94293],{},"页面打开，可以记录上一次的视频播放位置",[19,94295,94296],{},[4000,94297],{"alt":31,"src":94298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94300,94301],{},[4000,94302],{"alt":31,"src":94303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,94305,94307],{"className":53129,"code":94306,"language":53131,"meta":31,"style":31},"\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",[33,94308,94309,94319,94333,94337,94345,94359,94379,94399,94421,94434,94442,94448,94458,94468,94478,94482,94486,94493,94506,94518,94522,94526,94536,94548,94562,94566,94570,94577,94587,94600,94612,94622,94632,94648,94660,94664,94668,94676,94686,94698,94708,94718,94728,94732,94736,94746,94757,94761,94769,94777,94781,94789,94804,94819,94834,94855,94863,94871,94886,94908,94916,94931,94957,94983,95009,95017,95025,95044,95052,95057,95076,95081,95099,95104,95109,95117,95122,95136,95144,95149,95166,95170,95175,95197,95201,95209,95217,95221],{"__ignoreMap":31},[36,94310,94311,94313,94315,94317],{"class":38,"line":39},[36,94312,53791],{"class":53},[36,94314,53795],{"class":53794},[36,94316,53798],{"class":4500},[36,94318,53801],{"class":53},[36,94320,94321,94323,94325,94327,94329,94331],{"class":38,"line":46},[36,94322,1507],{"class":53},[36,94324,53131],{"class":53794},[36,94326,53810],{"class":4500},[36,94328,115],{"class":53},[36,94330,53815],{"class":57},[36,94332,53801],{"class":53},[36,94334,94335],{"class":38,"line":82},[36,94336,546],{"emptyLinePlaceholder":545},[36,94338,94339,94341,94343],{"class":38,"line":88},[36,94340,1507],{"class":53},[36,94342,53828],{"class":53794},[36,94344,53801],{"class":53},[36,94346,94347,94349,94351,94353,94355,94357],{"class":38,"line":195},[36,94348,54638],{"class":53},[36,94350,53838],{"class":53794},[36,94352,53841],{"class":4500},[36,94354,115],{"class":53},[36,94356,53846],{"class":57},[36,94358,61616],{"class":53},[36,94360,94361,94363,94365,94367,94369,94371,94373,94375,94377],{"class":38,"line":1517},[36,94362,54638],{"class":53},[36,94364,53838],{"class":53794},[36,94366,53857],{"class":4500},[36,94368,115],{"class":53},[36,94370,53862],{"class":57},[36,94372,53865],{"class":4500},[36,94374,115],{"class":53},[36,94376,53870],{"class":57},[36,94378,61616],{"class":53},[36,94380,94381,94383,94385,94387,94389,94391,94393,94395,94397],{"class":38,"line":2421},[36,94382,54638],{"class":53},[36,94384,53838],{"class":53794},[36,94386,17440],{"class":4500},[36,94388,115],{"class":53},[36,94390,53885],{"class":57},[36,94392,53865],{"class":4500},[36,94394,115],{"class":53},[36,94396,53892],{"class":57},[36,94398,61616],{"class":53},[36,94400,94401,94403,94405,94407,94409,94412,94414,94416,94419],{"class":38,"line":2446},[36,94402,54638],{"class":53},[36,94404,53838],{"class":53794},[36,94406,17440],{"class":4500},[36,94408,115],{"class":53},[36,94410,94411],{"class":57},"\"referrer\"",[36,94413,53865],{"class":4500},[36,94415,115],{"class":53},[36,94417,94418],{"class":57},"\"never\"",[36,94420,61616],{"class":53},[36,94422,94423,94425,94427,94430,94432],{"class":38,"line":2469},[36,94424,54638],{"class":53},[36,94426,53901],{"class":53794},[36,94428,94429],{"class":53},">综合案例\u003C\u002F",[36,94431,53901],{"class":53794},[36,94433,53801],{"class":53},[36,94435,94436,94438,94440],{"class":38,"line":2492},[36,94437,54638],{"class":53},[36,94439,2602],{"class":53794},[36,94441,53801],{"class":53},[36,94443,94444,94446],{"class":38,"line":4150},[36,94445,8930],{"class":53794},[36,94447,18091],{"class":53},[36,94449,94450,94452,94454,94456],{"class":38,"line":4155},[36,94451,57186],{"class":49},[36,94453,53931],{"class":53},[36,94455,713],{"class":49},[36,94457,3833],{"class":53},[36,94459,94460,94462,94464,94466],{"class":38,"line":4161},[36,94461,57197],{"class":49},[36,94463,53931],{"class":53},[36,94465,713],{"class":49},[36,94467,3833],{"class":53},[36,94469,94470,94472,94474,94476],{"class":38,"line":4166},[36,94471,75082],{"class":49},[36,94473,53931],{"class":53},[36,94475,62994],{"class":49},[36,94477,3833],{"class":53},[36,94479,94480],{"class":38,"line":4180},[36,94481,4721],{"class":53},[36,94483,94484],{"class":38,"line":4185},[36,94485,546],{"emptyLinePlaceholder":545},[36,94487,94488,94491],{"class":38,"line":4191},[36,94489,94490],{"class":4500},"    .container",[36,94492,18091],{"class":53},[36,94494,94495,94497,94499,94502,94504],{"class":38,"line":4212},[36,94496,57262],{"class":49},[36,94498,53931],{"class":53},[36,94500,94501],{"class":49},"1200",[36,94503,53986],{"class":114},[36,94505,3833],{"class":53},[36,94507,94508,94510,94512,94514,94516],{"class":38,"line":4217},[36,94509,57197],{"class":49},[36,94511,53931],{"class":53},[36,94513,713],{"class":49},[36,94515,54050],{"class":49},[36,94517,3833],{"class":53},[36,94519,94520],{"class":38,"line":4231},[36,94521,4721],{"class":53},[36,94523,94524],{"class":38,"line":4236},[36,94525,546],{"emptyLinePlaceholder":545},[36,94527,94528,94531,94534],{"class":38,"line":4264},[36,94529,94530],{"class":4500},"    .video",[36,94532,94533],{"class":53794}," video",[36,94535,18091],{"class":53},[36,94537,94538,94540,94542,94544,94546],{"class":38,"line":4269},[36,94539,57262],{"class":49},[36,94541,53931],{"class":53},[36,94543,166],{"class":49},[36,94545,1095],{"class":114},[36,94547,3833],{"class":53},[36,94549,94550,94552,94554,94556,94558,94560],{"class":38,"line":4286},[36,94551,57186],{"class":49},[36,94553,53931],{"class":53},[36,94555,3376],{"class":49},[36,94557,53986],{"class":114},[36,94559,6624],{"class":49},[36,94561,3833],{"class":53},[36,94563,94564],{"class":38,"line":4291},[36,94565,4721],{"class":53},[36,94567,94568],{"class":38,"line":4296},[36,94569,546],{"emptyLinePlaceholder":545},[36,94571,94572,94575],{"class":38,"line":4301},[36,94573,94574],{"class":4500},"    .elevator",[36,94576,18091],{"class":53},[36,94578,94579,94581,94583,94585],{"class":38,"line":4315},[36,94580,57250],{"class":49},[36,94582,53931],{"class":53},[36,94584,88712],{"class":49},[36,94586,3833],{"class":53},[36,94588,94589,94591,94593,94596,94598],{"class":38,"line":4320},[36,94590,57438],{"class":49},[36,94592,53931],{"class":53},[36,94594,94595],{"class":49},"280",[36,94597,53986],{"class":114},[36,94599,3833],{"class":53},[36,94601,94602,94604,94606,94608,94610],{"class":38,"line":5109},[36,94603,88906],{"class":49},[36,94605,53931],{"class":53},[36,94607,3376],{"class":49},[36,94609,53986],{"class":114},[36,94611,3833],{"class":53},[36,94613,94614,94616,94618,94620],{"class":38,"line":5123},[36,94615,88719],{"class":49},[36,94617,53931],{"class":53},[36,94619,88724],{"class":49},[36,94621,3833],{"class":53},[36,94623,94624,94626,94628,94630],{"class":38,"line":5131},[36,94625,64209],{"class":49},[36,94627,53931],{"class":53},[36,94629,63330],{"class":49},[36,94631,3833],{"class":53},[36,94633,94634,94636,94638,94640,94642,94644,94646],{"class":38,"line":5136},[36,94635,64465],{"class":49},[36,94637,53931],{"class":53},[36,94639,707],{"class":49},[36,94641,53986],{"class":114},[36,94643,54015],{"class":49},[36,94645,64732],{"class":49},[36,94647,3833],{"class":53},[36,94649,94650,94652,94654,94656,94658],{"class":38,"line":5142},[36,94651,57262],{"class":49},[36,94653,53931],{"class":53},[36,94655,3582],{"class":49},[36,94657,53986],{"class":114},[36,94659,3833],{"class":53},[36,94661,94662],{"class":38,"line":5148},[36,94663,4721],{"class":53},[36,94665,94666],{"class":38,"line":5153},[36,94667,546],{"emptyLinePlaceholder":545},[36,94669,94670,94672,94674],{"class":38,"line":10475},[36,94671,94574],{"class":4500},[36,94673,3936],{"class":53794},[36,94675,18091],{"class":53},[36,94677,94678,94680,94682,94684],{"class":38,"line":10499},[36,94679,57500],{"class":49},[36,94681,53931],{"class":53},[36,94683,63357],{"class":49},[36,94685,3833],{"class":53},[36,94687,94688,94690,94692,94694,94696],{"class":38,"line":10504},[36,94689,57186],{"class":49},[36,94691,53931],{"class":53},[36,94693,1317],{"class":49},[36,94695,53986],{"class":114},[36,94697,3833],{"class":53},[36,94699,94700,94702,94704,94706],{"class":38,"line":10510},[36,94701,66458],{"class":49},[36,94703,53931],{"class":53},[36,94705,57228],{"class":49},[36,94707,3833],{"class":53},[36,94709,94710,94712,94714,94716],{"class":38,"line":10537},[36,94711,59776],{"class":49},[36,94713,53931],{"class":53},[36,94715,54086],{"class":49},[36,94717,3833],{"class":53},[36,94719,94720,94722,94724,94726],{"class":38,"line":10542},[36,94721,59906],{"class":49},[36,94723,53931],{"class":53},[36,94725,64558],{"class":49},[36,94727,3833],{"class":53},[36,94729,94730],{"class":38,"line":10548},[36,94731,4721],{"class":53},[36,94733,94734],{"class":38,"line":10560},[36,94735,546],{"emptyLinePlaceholder":545},[36,94737,94738,94740,94742,94744],{"class":38,"line":10572},[36,94739,94574],{"class":4500},[36,94741,3936],{"class":53794},[36,94743,66512],{"class":4500},[36,94745,18091],{"class":53},[36,94747,94748,94750,94752,94755],{"class":38,"line":10584},[36,94749,59906],{"class":49},[36,94751,53931],{"class":53},[36,94753,94754],{"class":49},"#1286ff",[36,94756,3833],{"class":53},[36,94758,94759],{"class":38,"line":12241},[36,94760,4721],{"class":53},[36,94762,94763,94765,94767],{"class":38,"line":12266},[36,94764,54911],{"class":53},[36,94766,2602],{"class":53794},[36,94768,53801],{"class":53},[36,94770,94771,94773,94775],{"class":38,"line":12289},[36,94772,54279],{"class":53},[36,94774,53828],{"class":53794},[36,94776,53801],{"class":53},[36,94778,94779],{"class":38,"line":12313},[36,94780,546],{"emptyLinePlaceholder":545},[36,94782,94783,94785,94787],{"class":38,"line":12318},[36,94784,1507],{"class":53},[36,94786,54294],{"class":53794},[36,94788,53801],{"class":53},[36,94790,94791,94793,94795,94797,94799,94802],{"class":38,"line":12323},[36,94792,54638],{"class":53},[36,94794,54105],{"class":53794},[36,94796,55980],{"class":4500},[36,94798,115],{"class":53},[36,94800,94801],{"class":57},"\"container\"",[36,94803,53801],{"class":53},[36,94805,94806,94808,94810,94812,94814,94817],{"class":38,"line":12328},[36,94807,53835],{"class":53},[36,94809,54105],{"class":53794},[36,94811,55980],{"class":4500},[36,94813,115],{"class":53},[36,94815,94816],{"class":57},"\"header\"",[36,94818,53801],{"class":53},[36,94820,94821,94823,94825,94827,94829,94832],{"class":38,"line":12337},[36,94822,57725],{"class":53},[36,94824,2923],{"class":53794},[36,94826,63545],{"class":4500},[36,94828,115],{"class":53},[36,94830,94831],{"class":57},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,94833,53801],{"class":53},[36,94835,94836,94838,94840,94842,94844,94847,94849,94851,94853],{"class":38,"line":12342},[36,94837,57793],{"class":53},[36,94839,4000],{"class":53794},[36,94841,57730],{"class":4500},[36,94843,115],{"class":53},[36,94845,94846],{"class":57},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,94848,57738],{"class":4500},[36,94850,115],{"class":53},[36,94852,10179],{"class":57},[36,94854,61616],{"class":53},[36,94856,94857,94859,94861],{"class":38,"line":12348},[36,94858,57898],{"class":53},[36,94860,2923],{"class":53794},[36,94862,53801],{"class":53},[36,94864,94865,94867,94869],{"class":38,"line":12369},[36,94866,54270],{"class":53},[36,94868,54105],{"class":53794},[36,94870,53801],{"class":53},[36,94872,94873,94875,94877,94879,94881,94884],{"class":38,"line":12375},[36,94874,53835],{"class":53},[36,94876,54105],{"class":53794},[36,94878,55980],{"class":4500},[36,94880,115],{"class":53},[36,94882,94883],{"class":57},"\"video\"",[36,94885,53801],{"class":53},[36,94887,94888,94890,94892,94894,94896,94899,94902,94904,94906],{"class":38,"line":12389},[36,94889,57725],{"class":53},[36,94891,30694],{"class":53794},[36,94893,57730],{"class":4500},[36,94895,115],{"class":53},[36,94897,94898],{"class":57},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,94900,94901],{"class":4500}," controls",[36,94903,57805],{"class":53},[36,94905,30694],{"class":53794},[36,94907,53801],{"class":53},[36,94909,94910,94912,94914],{"class":38,"line":12395},[36,94911,54270],{"class":53},[36,94913,54105],{"class":53794},[36,94915,53801],{"class":53},[36,94917,94918,94920,94922,94924,94926,94929],{"class":38,"line":12422},[36,94919,53835],{"class":53},[36,94921,54105],{"class":53794},[36,94923,55980],{"class":4500},[36,94925,115],{"class":53},[36,94927,94928],{"class":57},"\"elevator\"",[36,94930,53801],{"class":53},[36,94932,94933,94935,94937,94939,94941,94943,94946,94948,94950,94953,94955],{"class":38,"line":12431},[36,94934,57725],{"class":53},[36,94936,2923],{"class":53794},[36,94938,63545],{"class":4500},[36,94940,115],{"class":53},[36,94942,66724],{"class":57},[36,94944,94945],{"class":4500}," data-ref",[36,94947,115],{"class":53},[36,94949,94883],{"class":57},[36,94951,94952],{"class":53},">视频介绍\u003C\u002F",[36,94954,2923],{"class":53794},[36,94956,53801],{"class":53},[36,94958,94959,94961,94963,94965,94967,94969,94971,94973,94976,94979,94981],{"class":38,"line":12437},[36,94960,57725],{"class":53},[36,94962,2923],{"class":53794},[36,94964,63545],{"class":4500},[36,94966,115],{"class":53},[36,94968,66724],{"class":57},[36,94970,94945],{"class":4500},[36,94972,115],{"class":53},[36,94974,94975],{"class":57},"\"intro\"",[36,94977,94978],{"class":53},">课程简介\u003C\u002F",[36,94980,2923],{"class":53794},[36,94982,53801],{"class":53},[36,94984,94985,94987,94989,94991,94993,94995,94997,94999,95002,95005,95007],{"class":38,"line":12445},[36,94986,57725],{"class":53},[36,94988,2923],{"class":53794},[36,94990,63545],{"class":4500},[36,94992,115],{"class":53},[36,94994,66724],{"class":57},[36,94996,94945],{"class":4500},[36,94998,115],{"class":53},[36,95000,95001],{"class":57},"\"outline\"",[36,95003,95004],{"class":53},">评论列表\u003C\u002F",[36,95006,2923],{"class":53794},[36,95008,53801],{"class":53},[36,95010,95011,95013,95015],{"class":38,"line":12450},[36,95012,54270],{"class":53},[36,95014,54105],{"class":53794},[36,95016,53801],{"class":53},[36,95018,95019,95021,95023],{"class":38,"line":19122},[36,95020,54911],{"class":53},[36,95022,54105],{"class":53794},[36,95024,53801],{"class":53},[36,95026,95027,95029,95031,95033,95035,95038,95040,95042],{"class":38,"line":19128},[36,95028,54638],{"class":53},[36,95030,54307],{"class":53794},[36,95032,57730],{"class":4500},[36,95034,115],{"class":53},[36,95036,95037],{"class":57},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,95039,57805],{"class":53},[36,95041,54307],{"class":53794},[36,95043,53801],{"class":53},[36,95045,95046,95048,95050],{"class":38,"line":19151},[36,95047,54638],{"class":53},[36,95049,54307],{"class":53794},[36,95051,53801],{"class":53},[36,95053,95054],{"class":38,"line":19157},[36,95055,95056],{"class":42},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,95058,95059,95061,95063,95065,95067,95069,95071,95074],{"class":38,"line":19180},[36,95060,13744],{"class":114},[36,95062,94533],{"class":49},[36,95064,498],{"class":114},[36,95066,56888],{"class":53},[36,95068,56891],{"class":4500},[36,95070,54],{"class":53},[36,95072,95073],{"class":57},"'video'",[36,95075,61],{"class":53},[36,95077,95078],{"class":38,"line":19194},[36,95079,95080],{"class":42},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,95082,95083,95086,95088,95090,95092,95095,95097],{"class":38,"line":19214},[36,95084,95085],{"class":53},"    video.ontimeupdate ",[36,95087,115],{"class":114},[36,95089,90833],{"class":53},[36,95091,93651],{"class":4500},[36,95093,95094],{"class":53},"(() ",[36,95096,87202],{"class":114},[36,95098,18091],{"class":53},[36,95100,95101],{"class":38,"line":19220},[36,95102,95103],{"class":42},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,95105,95106],{"class":38,"line":19231},[36,95107,95108],{"class":42},"      \u002F\u002F 控制台输出当前的时间\n",[36,95110,95111,95114],{"class":38,"line":19254},[36,95112,95113],{"class":42},"      \u002F\u002F console.log(video.currentTime)",[36,95115,95116],{"class":42},"  \u002F\u002F获得当前的视频时间\n",[36,95118,95119],{"class":38,"line":19276},[36,95120,95121],{"class":42},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,95123,95124,95126,95128,95130,95133],{"class":38,"line":19281},[36,95125,77168],{"class":53},[36,95127,74140],{"class":4500},[36,95129,54],{"class":53},[36,95131,95132],{"class":57},"'currentTime'",[36,95134,95135],{"class":53},", video.currentTime)\n",[36,95137,95138,95140,95142],{"class":38,"line":19287},[36,95139,57026],{"class":53},[36,95141,8937],{"class":49},[36,95143,61],{"class":53},[36,95145,95146],{"class":38,"line":19301},[36,95147,95148],{"class":42},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,95150,95151,95154,95157,95159,95162,95164],{"class":38,"line":19314},[36,95152,95153],{"class":53},"    video.",[36,95155,95156],{"class":4500},"onloadeddata",[36,95158,498],{"class":114},[36,95160,95161],{"class":53}," () ",[36,95163,87202],{"class":114},[36,95165,18091],{"class":53},[36,95167,95168],{"class":38,"line":19319},[36,95169,62501],{"class":42},[36,95171,95172],{"class":38,"line":19333},[36,95173,95174],{"class":42},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,95176,95177,95180,95182,95185,95187,95189,95191,95193,95195],{"class":38,"line":19338},[36,95178,95179],{"class":53},"      video.currentTime ",[36,95181,115],{"class":114},[36,95183,95184],{"class":53}," localStorage.",[36,95186,74171],{"class":4500},[36,95188,54],{"class":53},[36,95190,95132],{"class":57},[36,95192,16236],{"class":53},[36,95194,73843],{"class":114},[36,95196,49830],{"class":49},[36,95198,95199],{"class":38,"line":19344},[36,95200,4721],{"class":53},[36,95202,95203,95205,95207],{"class":38,"line":19349},[36,95204,54911],{"class":53},[36,95206,54307],{"class":53794},[36,95208,53801],{"class":53},[36,95210,95211,95213,95215],{"class":38,"line":19363},[36,95212,54279],{"class":53},[36,95214,54294],{"class":53794},[36,95216,53801],{"class":53},[36,95218,95219],{"class":38,"line":19368},[36,95220,546],{"emptyLinePlaceholder":545},[36,95222,95223,95225,95227],{"class":38,"line":19373},[36,95224,54279],{"class":53},[36,95226,53131],{"class":53794},[36,95228,53801],{"class":53},[2602,95230,95231],{},"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":31,"searchDepth":46,"depth":46,"links":95233},[95234,95239,95243,95244,95245,95250,95255,95256,95257,95258,95265,95270,95271,95281,95285,95286,95290],{"id":79176,"depth":46,"text":79177,"children":95235},[95236,95237,95238],{"id":79180,"depth":82,"text":79181},{"id":79205,"depth":82,"text":79206},{"id":79217,"depth":82,"text":79218},{"id":79229,"depth":46,"text":79230,"children":95240},[95241,95242],{"id":79233,"depth":82,"text":79234},{"id":79248,"depth":82,"text":79249},{"id":79300,"depth":46,"text":79301},{"id":79344,"depth":46,"text":79345},{"id":79361,"depth":46,"text":79362,"children":95246},[95247,95248,95249],{"id":79365,"depth":82,"text":79366},{"id":79378,"depth":82,"text":79379},{"id":79483,"depth":82,"text":79484},{"id":79772,"depth":46,"text":79773,"children":95251},[95252,95253,95254],{"id":79776,"depth":82,"text":79777},{"id":80218,"depth":82,"text":80219},{"id":80628,"depth":82,"text":80629},{"id":80691,"depth":46,"text":80692},{"id":80770,"depth":46,"text":80771},{"id":80863,"depth":46,"text":80864},{"id":82706,"depth":46,"text":82707,"children":95259},[95260,95261,95262,95263,95264],{"id":82710,"depth":82,"text":82711},{"id":82722,"depth":82,"text":82723},{"id":82941,"depth":82,"text":82942},{"id":82959,"depth":82,"text":82960},{"id":83019,"depth":82,"text":83020},{"id":87286,"depth":46,"text":87287,"children":95266},[95267,95268,95269],{"id":87290,"depth":82,"text":87291},{"id":87308,"depth":82,"text":87309},{"id":87334,"depth":82,"text":87335},{"id":87343,"depth":46,"text":87344},{"id":87365,"depth":46,"text":87366,"children":95272},[95273,95274,95275,95276,95277,95278,95279,95280],{"id":87369,"depth":82,"text":87370},{"id":87630,"depth":82,"text":87631},{"id":87816,"depth":82,"text":87817},{"id":88183,"depth":82,"text":88184},{"id":88299,"depth":82,"text":88300},{"id":88335,"depth":82,"text":88336},{"id":88382,"depth":82,"text":88383},{"id":88416,"depth":82,"text":88417},{"id":89778,"depth":46,"text":89779,"children":95282},[95283,95284],{"id":89782,"depth":82,"text":89783},{"id":89819,"depth":82,"text":89820},{"id":91173,"depth":46,"text":91174},{"id":91544,"depth":46,"text":91545,"children":95287},[95288,95289],{"id":91548,"depth":82,"text":91549},{"id":91582,"depth":82,"text":91583},{"id":92311,"depth":46,"text":92312,"children":95291},[95292,95293,95294,95295],{"id":92315,"depth":82,"text":92316},{"id":93273,"depth":82,"text":93274},{"id":94215,"depth":82,"text":94216},{"id":94289,"depth":82,"text":94290},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79165,"description":2630},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95302,"title":95303,"body":95304,"description":95315,"extension":2631,"meta":95316,"navigation":545,"path":95318,"seo":95319,"stem":95320,"__hash__":95321},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95305,"toc":95313},[95306],[19,95307,95308,95309],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2923,95310,95311],{"href":95311,"rel":95312},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26381],{"title":31,"searchDepth":46,"depth":46,"links":95314},[],"三件套第三套学习",{"category":95317},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95303,"description":95315},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95323,"title":95324,"body":95325,"description":2630,"extension":2631,"meta":95430,"navigation":545,"path":95431,"seo":95432,"stem":95433,"__hash__":95434},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95326,"toc":95425},[95327,95334,95337,95340,95343,95347,95356,95359,95362,95366,95375,95378,95382,95385,95405,95408,95422],[19,95328,95329],{},[2923,95330,95333],{"href":95331,"rel":95332},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26381],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95335,95324],{"id":95336},"_1安装",[19,95338,95339],{},"numpy是科学计算基础库,底层是C语言",[19,95341,95342],{},"三种方式：",[14,95344,95346],{"id":95345},"_11-通过pip安装","1.1 通过pip安装",[26,95348,95350],{"className":28,"code":95349,"language":30,"meta":31,"style":31},"pip install numpy\n",[33,95351,95352],{"__ignoreMap":31},[36,95353,95354],{"class":38,"line":39},[36,95355,95349],{"class":53},[19,95357,95358],{},"首选方式，自动处理依赖项",[19,95360,95361],{},"在提示系统命令符中使用cmd",[14,95363,95365],{"id":95364},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,95367,95369],{"className":28,"code":95368,"language":30,"meta":31,"style":31},"conda install numpy\n",[33,95370,95371],{"__ignoreMap":31},[36,95372,95373],{"class":38,"line":39},[36,95374,95368],{"class":53},[19,95376,95377],{},"自动解决环境依赖",[14,95379,95381],{"id":95380},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95383,95384],{},"对于Debian\u002FUbuntu",[26,95386,95388],{"className":28,"code":95387,"language":30,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,95389,95390],{"__ignoreMap":31},[36,95391,95392,95395,95397,95400,95402],{"class":38,"line":39},[36,95393,95394],{"class":53},"sudo apt",[36,95396,508],{"class":114},[36,95398,95399],{"class":53},"get install python3",[36,95401,508],{"class":114},[36,95403,95404],{"class":53},"numpy\n",[19,95406,95407],{},"对于Fedora:",[26,95409,95411],{"className":28,"code":95410,"language":30,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,95412,95413],{"__ignoreMap":31},[36,95414,95415,95418,95420],{"class":38,"line":39},[36,95416,95417],{"class":53},"sudo dnf install python3",[36,95419,508],{"class":114},[36,95421,95404],{"class":53},[2602,95423,95424],{},"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":31,"searchDepth":46,"depth":46,"links":95426},[95427,95428,95429],{"id":95345,"depth":46,"text":95346},{"id":95364,"depth":46,"text":95365},{"id":95380,"depth":46,"text":95381},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95324,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95436,"title":95437,"body":95438,"description":2630,"extension":2631,"meta":95551,"navigation":545,"path":95552,"seo":95553,"stem":95554,"__hash__":95555},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95439,"toc":95549},[95440,95443,95446,95449,95452,95455,95458,95461,95464,95467,95543,95546],[10,95441,95437],{"id":95442},"_10算数函数",[19,95444,95445],{},"加减乘除运算跟python基础语法没区别",[19,95447,95448],{},"除了python那种方法外还可以使用函数",[19,95450,95451],{},"加：np.add(a,b)",[19,95453,95454],{},"减：np.subtract(a,b)",[19,95456,95457],{},"乘：np.multiply(a,b)",[19,95459,95460],{},"除：np.divide(a,b) == a\u002Fb",[19,95462,95463],{},"取余：np.mod(a,b) == a%b",[19,95465,95466],{},"必须会的用法：",[26,95468,95470],{"className":28,"code":95469,"language":30,"meta":31,"style":31},"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",[33,95471,95472,95494,95515,95525,95538],{"__ignoreMap":31},[36,95473,95474,95476,95478,95481,95483,95486,95488,95490,95492],{"class":38,"line":39},[36,95475,2923],{"class":53},[36,95477,115],{"class":114},[36,95479,95480],{"class":53},"np.arange(",[36,95482,3101],{"class":49},[36,95484,95485],{"class":53},").reshape(",[36,95487,2767],{"class":49},[36,95489,3059],{"class":53},[36,95491,2767],{"class":49},[36,95493,61],{"class":53},[36,95495,95496,95498,95500,95503,95505,95507,95509,95511,95513],{"class":38,"line":46},[36,95497,2947],{"class":53},[36,95499,115],{"class":114},[36,95501,95502],{"class":53},"np.array([",[36,95504,1317],{"class":49},[36,95506,3059],{"class":53},[36,95508,1317],{"class":49},[36,95510,3059],{"class":53},[36,95512,1317],{"class":49},[36,95514,7188],{"class":53},[36,95516,95517,95520,95522],{"class":38,"line":82},[36,95518,95519],{"class":53},"result",[36,95521,115],{"class":114},[36,95523,95524],{"class":53},"np.empty_like(a)\n",[36,95526,95527,95530,95533,95535],{"class":38,"line":88},[36,95528,95529],{"class":53},"np.add(a,b,",[36,95531,95532],{"class":1997},"out",[36,95534,115],{"class":114},[36,95536,95537],{"class":53},"result)\n",[36,95539,95540],{"class":38,"line":195},[36,95541,95542],{"class":53},"result\n",[19,95544,95545],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2602,95547,95548],{},"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":31,"searchDepth":46,"depth":46,"links":95550},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95437,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95557,"title":95558,"body":95559,"description":2630,"extension":2631,"meta":96321,"navigation":545,"path":96322,"seo":96323,"stem":96324,"__hash__":96325},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95560,"toc":96308},[95561,95564,95567,95570,95574,95613,95617,95661,95721,95725,95728,95767,95770,95815,95819,95855,95859,95928,95932,95996,96000,96003,96006,96009,96012,96048,96052,96092,96096,96168,96171,96175,96238,96242,96305],[10,95562,95558],{"id":95563},"_11统计函数",[19,95565,95566],{},"sum max min mean",[19,95568,95569],{},"这些有axis参数，可以指定方向",[14,95571,95573],{"id":95572},"_111-sum求和函数","11.1 sum()求和函数",[26,95575,95577],{"className":28,"code":95576,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,95578,95579,95584,95605],{"__ignoreMap":31},[36,95580,95581],{"class":38,"line":39},[36,95582,95583],{"class":42},"#创建一维数组\n",[36,95585,95586,95588,95590,95593,95595,95597,95599,95601,95603],{"class":38,"line":46},[36,95587,2923],{"class":53},[36,95589,115],{"class":114},[36,95591,95592],{"class":53},"np.random.randint(",[36,95594,707],{"class":49},[36,95596,3059],{"class":53},[36,95598,166],{"class":49},[36,95600,3059],{"class":53},[36,95602,3376],{"class":49},[36,95604,61],{"class":53},[36,95606,95607,95610],{"class":38,"line":82},[36,95608,95609],{"class":53},"np.sum(a)",[36,95611,95612],{"class":42},"#求和\n",[14,95614,95616],{"id":95615},"_112-max求最大值函数","11.2 max()求最大值函数",[26,95618,95620],{"className":28,"code":95619,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,95621,95622,95626,95646,95651,95656],{"__ignoreMap":31},[36,95623,95624],{"class":38,"line":39},[36,95625,95583],{"class":42},[36,95627,95628,95630,95632,95634,95636,95638,95640,95642,95644],{"class":38,"line":46},[36,95629,2923],{"class":53},[36,95631,115],{"class":114},[36,95633,95592],{"class":53},[36,95635,707],{"class":49},[36,95637,3059],{"class":53},[36,95639,166],{"class":49},[36,95641,3059],{"class":53},[36,95643,3376],{"class":49},[36,95645,61],{"class":53},[36,95647,95648],{"class":38,"line":82},[36,95649,95650],{"class":53},"np.max(a)\n",[36,95652,95653],{"class":38,"line":88},[36,95654,95655],{"class":42},"#最大索引(求最大元素的索引)arg\n",[36,95657,95658],{"class":38,"line":195},[36,95659,95660],{"class":53},"np.argmax(a)\n",[26,95662,95664],{"className":28,"code":95663,"language":30,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,95665,95666,95687,95707,95711],{"__ignoreMap":31},[36,95667,95668,95670,95672,95675,95677,95679,95681,95683,95685],{"class":38,"line":39},[36,95669,13442],{"class":53},[36,95671,115],{"class":114},[36,95673,95674],{"class":53}," np.array([",[36,95676,707],{"class":49},[36,95678,14958],{"class":53},[36,95680,1134],{"class":49},[36,95682,14958],{"class":53},[36,95684,2767],{"class":49},[36,95686,7188],{"class":53},[36,95688,95689,95691,95693,95695,95697,95699,95701,95703,95705],{"class":38,"line":46},[36,95690,13468],{"class":53},[36,95692,115],{"class":114},[36,95694,95674],{"class":53},[36,95696,2767],{"class":49},[36,95698,14958],{"class":53},[36,95700,1188],{"class":49},[36,95702,14958],{"class":53},[36,95704,2977],{"class":49},[36,95706,7188],{"class":53},[36,95708,95709],{"class":38,"line":82},[36,95710,546],{"emptyLinePlaceholder":545},[36,95712,95713,95715,95718],{"class":38,"line":88},[36,95714,50],{"class":49},[36,95716,95717],{"class":53},"(np.maximum(a, b))   ",[36,95719,95720],{"class":42},"# [3 5 4]，每个位置上取较大值\n",[14,95722,95724],{"id":95723},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95726,95727],{},"①一维数组：",[26,95729,95731],{"className":28,"code":95730,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,95732,95733,95737,95757,95762],{"__ignoreMap":31},[36,95734,95735],{"class":38,"line":39},[36,95736,95583],{"class":42},[36,95738,95739,95741,95743,95745,95747,95749,95751,95753,95755],{"class":38,"line":46},[36,95740,2923],{"class":53},[36,95742,115],{"class":114},[36,95744,95592],{"class":53},[36,95746,707],{"class":49},[36,95748,3059],{"class":53},[36,95750,166],{"class":49},[36,95752,3059],{"class":53},[36,95754,3376],{"class":49},[36,95756,61],{"class":53},[36,95758,95759],{"class":38,"line":82},[36,95760,95761],{"class":42},"#求平均值\n",[36,95763,95764],{"class":38,"line":88},[36,95765,95766],{"class":53},"np.mean(a)\n",[19,95768,95769],{},"②二维数组",[26,95771,95773],{"className":28,"code":95772,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,95774,95775,95780,95805,95810],{"__ignoreMap":31},[36,95776,95777],{"class":38,"line":39},[36,95778,95779],{"class":42},"#二维数组\n",[36,95781,95782,95785,95787,95789,95791,95793,95795,95797,95799,95801,95803],{"class":38,"line":46},[36,95783,95784],{"class":53},"aa",[36,95786,115],{"class":114},[36,95788,95480],{"class":53},[36,95790,707],{"class":49},[36,95792,3059],{"class":53},[36,95794,3201],{"class":49},[36,95796,95485],{"class":53},[36,95798,2767],{"class":49},[36,95800,3059],{"class":53},[36,95802,2977],{"class":49},[36,95804,61],{"class":53},[36,95806,95807],{"class":38,"line":82},[36,95808,95809],{"class":42},"#对数组中的所有数求平均\n",[36,95811,95812],{"class":38,"line":88},[36,95813,95814],{"class":53},"np.mean(aa)\n",[14,95816,95818],{"id":95817},"_114-median求中位数函数","11.4 median()求中位数函数",[26,95820,95822],{"className":28,"code":95821,"language":30,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,95823,95824,95829,95845,95850],{"__ignoreMap":31},[36,95825,95826],{"class":38,"line":39},[36,95827,95828],{"class":42},"#求中位数\n",[36,95830,95831,95833,95835,95837,95839,95841,95843],{"class":38,"line":46},[36,95832,2947],{"class":53},[36,95834,115],{"class":114},[36,95836,95480],{"class":53},[36,95838,707],{"class":49},[36,95840,3059],{"class":53},[36,95842,1317],{"class":49},[36,95844,61],{"class":53},[36,95846,95847],{"class":38,"line":82},[36,95848,95849],{"class":53},"np.median(b)\n",[36,95851,95852],{"class":38,"line":88},[36,95853,95854],{"class":42},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95856,95858],{"id":95857},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,95860,95862],{"className":28,"code":95861,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,95863,95864,95880,95885,95890,95899,95904,95913],{"__ignoreMap":31},[36,95865,95866,95868,95870,95872,95874,95876,95878],{"class":38,"line":39},[36,95867,2947],{"class":53},[36,95869,115],{"class":114},[36,95871,95480],{"class":53},[36,95873,707],{"class":49},[36,95875,3059],{"class":53},[36,95877,1317],{"class":49},[36,95879,61],{"class":53},[36,95881,95882],{"class":38,"line":46},[36,95883,95884],{"class":42},"#幂运算\n",[36,95886,95887],{"class":38,"line":82},[36,95888,95889],{"class":42},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,95891,95892,95895,95897],{"class":38,"line":88},[36,95893,95894],{"class":53},"np.power(b,",[36,95896,1188],{"class":49},[36,95898,61],{"class":53},[36,95900,95901],{"class":38,"line":195},[36,95902,95903],{"class":42},"#或者以下代码，将数据存储起来\n",[36,95905,95906,95908,95910],{"class":38,"line":1517},[36,95907,3521],{"class":53},[36,95909,115],{"class":114},[36,95911,95912],{"class":53},"np.empty_like(b)\n",[36,95914,95915,95917,95919,95921,95923,95925],{"class":38,"line":2421},[36,95916,95894],{"class":53},[36,95918,1188],{"class":49},[36,95920,3059],{"class":53},[36,95922,95532],{"class":1997},[36,95924,115],{"class":114},[36,95926,95927],{"class":53},"y)\n",[14,95929,95931],{"id":95930},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,95933,95935],{"className":28,"code":95934,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,95936,95937,95953,95958,95963,95967,95985],{"__ignoreMap":31},[36,95938,95939,95941,95943,95945,95947,95949,95951],{"class":38,"line":39},[36,95940,2947],{"class":53},[36,95942,115],{"class":114},[36,95944,95480],{"class":53},[36,95946,707],{"class":49},[36,95948,3059],{"class":53},[36,95950,1317],{"class":49},[36,95952,61],{"class":53},[36,95954,95955],{"class":38,"line":46},[36,95956,95957],{"class":42},"#开方\n",[36,95959,95960],{"class":38,"line":82},[36,95961,95962],{"class":53},"np.sqrt(b)\n",[36,95964,95965],{"class":38,"line":88},[36,95966,95903],{"class":42},[36,95968,95969,95971,95973,95976,95979,95981,95983],{"class":38,"line":195},[36,95970,3521],{"class":53},[36,95972,115],{"class":114},[36,95974,95975],{"class":53},"np.empty_like(b,",[36,95977,95978],{"class":1997},"dtype",[36,95980,115],{"class":114},[36,95982,244],{"class":49},[36,95984,61],{"class":53},[36,95986,95987,95990,95992,95994],{"class":38,"line":1517},[36,95988,95989],{"class":53},"np.sqrt(b,",[36,95991,95532],{"class":1997},[36,95993,115],{"class":114},[36,95995,95927],{"class":53},[14,95997,95999],{"id":95998},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,96001,96002],{},"对数组中的元素累计求和，可指定轴",[19,96004,96005],{},"#累计求和的意思是：",[19,96007,96008],{},"a = np.array([1, 2, 3, 4])",[19,96010,96011],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,96013,96015],{"className":28,"code":96014,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,96016,96017,96033,96038,96043],{"__ignoreMap":31},[36,96018,96019,96021,96023,96025,96027,96029,96031],{"class":38,"line":39},[36,96020,2947],{"class":53},[36,96022,115],{"class":114},[36,96024,95480],{"class":53},[36,96026,707],{"class":49},[36,96028,3059],{"class":53},[36,96030,1317],{"class":49},[36,96032,61],{"class":53},[36,96034,96035],{"class":38,"line":46},[36,96036,96037],{"class":53},"np.cumsum(b)\n",[36,96039,96040],{"class":38,"line":82},[36,96041,96042],{"class":42},"#结果：\n",[36,96044,96045],{"class":38,"line":88},[36,96046,96047],{"class":42},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96049,96051],{"id":96050},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,96053,96055],{"className":28,"code":96054,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,96056,96057,96073,96078,96083,96087],{"__ignoreMap":31},[36,96058,96059,96061,96063,96065,96067,96069,96071],{"class":38,"line":39},[36,96060,2947],{"class":53},[36,96062,115],{"class":114},[36,96064,95480],{"class":53},[36,96066,707],{"class":49},[36,96068,3059],{"class":53},[36,96070,1317],{"class":49},[36,96072,61],{"class":53},[36,96074,96075],{"class":38,"line":46},[36,96076,96077],{"class":42},"#对数组中的元素累计求积，可指定轴\n",[36,96079,96080],{"class":38,"line":82},[36,96081,96082],{"class":53},"np.cumprod(b)\n",[36,96084,96085],{"class":38,"line":88},[36,96086,96042],{"class":42},[36,96088,96089],{"class":38,"line":195},[36,96090,96091],{"class":42},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96093,96095],{"id":96094},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,96097,96099],{"className":28,"code":96098,"language":30,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\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",[33,96100,96101,96106,96154,96159,96163],{"__ignoreMap":31},[36,96102,96103],{"class":38,"line":39},[36,96104,96105],{"class":42},"#删除数组中的重复数据，并对数据进行排序\n",[36,96107,96108,96110,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138,96140,96142,96144,96146,96148,96150,96152],{"class":38,"line":46},[36,96109,2923],{"class":53},[36,96111,115],{"class":114},[36,96113,95502],{"class":53},[36,96115,707],{"class":49},[36,96117,3059],{"class":53},[36,96119,1188],{"class":49},[36,96121,3059],{"class":53},[36,96123,2767],{"class":49},[36,96125,3059],{"class":53},[36,96127,3176],{"class":49},[36,96129,3059],{"class":53},[36,96131,2767],{"class":49},[36,96133,3059],{"class":53},[36,96135,1317],{"class":49},[36,96137,3059],{"class":53},[36,96139,2884],{"class":49},[36,96141,3059],{"class":53},[36,96143,713],{"class":49},[36,96145,3059],{"class":53},[36,96147,3451],{"class":49},[36,96149,3059],{"class":53},[36,96151,2977],{"class":49},[36,96153,7188],{"class":53},[36,96155,96156],{"class":38,"line":82},[36,96157,96158],{"class":53},"np.unique(a)\n",[36,96160,96161],{"class":38,"line":88},[36,96162,96042],{"class":42},[36,96164,96165],{"class":38,"line":195},[36,96166,96167],{"class":42},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96169,96170],{},"升序形式排序",[14,96172,96174],{"id":96173},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,96176,96178],{"className":28,"code":96177,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,96179,96180,96228,96233],{"__ignoreMap":31},[36,96181,96182,96184,96186,96188,96190,96192,96194,96196,96198,96200,96202,96204,96206,96208,96210,96212,96214,96216,96218,96220,96222,96224,96226],{"class":38,"line":39},[36,96183,2923],{"class":53},[36,96185,115],{"class":114},[36,96187,95502],{"class":53},[36,96189,707],{"class":49},[36,96191,3059],{"class":53},[36,96193,1188],{"class":49},[36,96195,3059],{"class":53},[36,96197,2767],{"class":49},[36,96199,3059],{"class":53},[36,96201,3176],{"class":49},[36,96203,3059],{"class":53},[36,96205,2767],{"class":49},[36,96207,3059],{"class":53},[36,96209,1317],{"class":49},[36,96211,3059],{"class":53},[36,96213,2884],{"class":49},[36,96215,3059],{"class":53},[36,96217,713],{"class":49},[36,96219,3059],{"class":53},[36,96221,3451],{"class":49},[36,96223,3059],{"class":53},[36,96225,2977],{"class":49},[36,96227,7188],{"class":53},[36,96229,96230],{"class":38,"line":46},[36,96231,96232],{"class":42},"#返回数组中非零元素的索引\n",[36,96234,96235],{"class":38,"line":82},[36,96236,96237],{"class":53},"np.nonzero(a)\n",[14,96239,96241],{"id":96240},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,96243,96245],{"className":28,"code":96244,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,96246,96247,96295,96300],{"__ignoreMap":31},[36,96248,96249,96251,96253,96255,96257,96259,96261,96263,96265,96267,96269,96271,96273,96275,96277,96279,96281,96283,96285,96287,96289,96291,96293],{"class":38,"line":39},[36,96250,2923],{"class":53},[36,96252,115],{"class":114},[36,96254,95502],{"class":53},[36,96256,707],{"class":49},[36,96258,3059],{"class":53},[36,96260,1188],{"class":49},[36,96262,3059],{"class":53},[36,96264,2767],{"class":49},[36,96266,3059],{"class":53},[36,96268,3176],{"class":49},[36,96270,3059],{"class":53},[36,96272,2767],{"class":49},[36,96274,3059],{"class":53},[36,96276,1317],{"class":49},[36,96278,3059],{"class":53},[36,96280,2884],{"class":49},[36,96282,3059],{"class":53},[36,96284,713],{"class":49},[36,96286,3059],{"class":53},[36,96288,3451],{"class":49},[36,96290,3059],{"class":53},[36,96292,2977],{"class":49},[36,96294,7188],{"class":53},[36,96296,96297],{"class":38,"line":46},[36,96298,96299],{"class":42},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,96301,96302],{"class":38,"line":82},[36,96303,96304],{"class":53},"np.ptp(a)\n",[2602,96306,96307],{},"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":31,"searchDepth":46,"depth":46,"links":96309},[96310,96311,96312,96313,96314,96315,96316,96317,96318,96319,96320],{"id":95572,"depth":46,"text":95573},{"id":95615,"depth":46,"text":95616},{"id":95723,"depth":46,"text":95724},{"id":95817,"depth":46,"text":95818},{"id":95857,"depth":46,"text":95858},{"id":95930,"depth":46,"text":95931},{"id":95998,"depth":46,"text":95999},{"id":96050,"depth":46,"text":96051},{"id":96094,"depth":46,"text":96095},{"id":96173,"depth":46,"text":96174},{"id":96240,"depth":46,"text":96241},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95558,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96327,"title":96328,"body":96329,"description":2630,"extension":2631,"meta":96984,"navigation":545,"path":96985,"seo":96986,"stem":96987,"__hash__":96988},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96330,"toc":96972},[96331,96334,96338,96341,96557,96561,96564,96773,96777,96843,96848,96852,96855,96858,96896,96900,96903,96908,96912,96915,96918,96923,96927,96930,96934,96937,96940,96945,96949,96952,96955,96960,96964,96969],[10,96332,96328],{"id":96333},"_12其他常用函数",[14,96335,96337],{"id":96336},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96339,96340],{},"将数组的数据按照行列复制扩展",[26,96342,96344],{"className":28,"code":96343,"language":30,"meta":31,"style":31},"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",[33,96345,96346,96362,96371,96375,96380,96385,96398,96402,96407,96412,96417,96421,96426,96450,96462,96466,96470,96475,96480,96485,96490,96494,96507,96511,96515,96520,96525,96530,96535,96540,96544,96548,96553],{"__ignoreMap":31},[36,96347,96348,96350,96352,96354,96356,96358,96360],{"class":38,"line":39},[36,96349,2923],{"class":53},[36,96351,115],{"class":114},[36,96353,95480],{"class":53},[36,96355,707],{"class":49},[36,96357,3059],{"class":53},[36,96359,1134],{"class":49},[36,96361,61],{"class":53},[36,96363,96364,96367,96369],{"class":38,"line":46},[36,96365,96366],{"class":53},"np.tile(a,",[36,96368,1188],{"class":49},[36,96370,61],{"class":53},[36,96372,96373],{"class":38,"line":82},[36,96374,96042],{"class":42},[36,96376,96377],{"class":38,"line":88},[36,96378,96379],{"class":42},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,96381,96382],{"class":38,"line":195},[36,96383,96384],{"class":42},"#行复制两次，列复制三次\n",[36,96386,96387,96390,96392,96394,96396],{"class":38,"line":1517},[36,96388,96389],{"class":53},"np.tile(a,(",[36,96391,1188],{"class":49},[36,96393,3059],{"class":53},[36,96395,2767],{"class":49},[36,96397,625],{"class":53},[36,96399,96400],{"class":38,"line":2421},[36,96401,96042],{"class":42},[36,96403,96404],{"class":38,"line":2446},[36,96405,96406],{"class":57},"'''\n",[36,96408,96409],{"class":38,"line":2469},[36,96410,96411],{"class":57},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,96413,96414],{"class":38,"line":2492},[36,96415,96416],{"class":57},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,96418,96419],{"class":38,"line":4150},[36,96420,96406],{"class":57},[36,96422,96423],{"class":38,"line":4155},[36,96424,96425],{"class":42},"#创建二维数组\n",[36,96427,96428,96430,96432,96434,96436,96438,96440,96442,96444,96446,96448],{"class":38,"line":4161},[36,96429,95784],{"class":53},[36,96431,115],{"class":114},[36,96433,95480],{"class":53},[36,96435,707],{"class":49},[36,96437,3059],{"class":53},[36,96439,3201],{"class":49},[36,96441,95485],{"class":53},[36,96443,2977],{"class":49},[36,96445,3059],{"class":53},[36,96447,2767],{"class":49},[36,96449,61],{"class":53},[36,96451,96452,96455,96457,96459],{"class":38,"line":4166},[36,96453,96454],{"class":53},"np.tile(aa,",[36,96456,1188],{"class":49},[36,96458,3110],{"class":53},[36,96460,96461],{"class":42},"#一个数的时候就是行\n",[36,96463,96464],{"class":38,"line":4180},[36,96465,96042],{"class":42},[36,96467,96468],{"class":38,"line":4185},[36,96469,96406],{"class":57},[36,96471,96472],{"class":38,"line":4191},[36,96473,96474],{"class":57},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,96476,96477],{"class":38,"line":4212},[36,96478,96479],{"class":57},"       [ 4,  5,  6,  4,  5,  6],\n",[36,96481,96482],{"class":38,"line":4217},[36,96483,96484],{"class":57},"       [ 7,  8,  9,  7,  8,  9],\n",[36,96486,96487],{"class":38,"line":4231},[36,96488,96489],{"class":57},"       [10, 11, 12, 10, 11, 12]])\n",[36,96491,96492],{"class":38,"line":4236},[36,96493,96406],{"class":57},[36,96495,96496,96499,96501,96503,96505],{"class":38,"line":4264},[36,96497,96498],{"class":53},"np.tile(aa,(",[36,96500,1188],{"class":49},[36,96502,3059],{"class":53},[36,96504,2767],{"class":49},[36,96506,625],{"class":53},[36,96508,96509],{"class":38,"line":4269},[36,96510,96042],{"class":42},[36,96512,96513],{"class":38,"line":4286},[36,96514,96406],{"class":57},[36,96516,96517],{"class":38,"line":4291},[36,96518,96519],{"class":57},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,96521,96522],{"class":38,"line":4296},[36,96523,96524],{"class":57},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,96526,96527],{"class":38,"line":4301},[36,96528,96529],{"class":57},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,96531,96532],{"class":38,"line":4315},[36,96533,96534],{"class":57},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,96536,96537],{"class":38,"line":4320},[36,96538,96539],{"class":57},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,96541,96542],{"class":38,"line":5109},[36,96543,96524],{"class":57},[36,96545,96546],{"class":38,"line":5123},[36,96547,96529],{"class":57},[36,96549,96550],{"class":38,"line":5131},[36,96551,96552],{"class":57},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,96554,96555],{"class":38,"line":5136},[36,96556,96406],{"class":57},[14,96558,96560],{"id":96559},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96562,96563],{},"repeat()将数组中的每个元素重复若干次",[26,96565,96567],{"className":28,"code":96566,"language":30,"meta":31,"style":31},"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",[33,96568,96569,96585,96594,96598,96603,96627,96632,96641,96645,96650,96654,96659,96675,96679,96683,96688,96693,96698,96702,96707,96711,96716,96721,96725,96741,96745,96749,96754,96759,96764,96769],{"__ignoreMap":31},[36,96570,96571,96573,96575,96577,96579,96581,96583],{"class":38,"line":39},[36,96572,2923],{"class":53},[36,96574,115],{"class":114},[36,96576,95480],{"class":53},[36,96578,707],{"class":49},[36,96580,3059],{"class":53},[36,96582,1134],{"class":49},[36,96584,61],{"class":53},[36,96586,96587,96590,96592],{"class":38,"line":46},[36,96588,96589],{"class":53},"np.repeat(a,",[36,96591,2767],{"class":49},[36,96593,61],{"class":53},[36,96595,96596],{"class":38,"line":82},[36,96597,96042],{"class":42},[36,96599,96600],{"class":38,"line":88},[36,96601,96602],{"class":42},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,96604,96605,96607,96609,96611,96613,96615,96617,96619,96621,96623,96625],{"class":38,"line":195},[36,96606,95784],{"class":53},[36,96608,115],{"class":114},[36,96610,95480],{"class":53},[36,96612,707],{"class":49},[36,96614,3059],{"class":53},[36,96616,3201],{"class":49},[36,96618,95485],{"class":53},[36,96620,2977],{"class":49},[36,96622,3059],{"class":53},[36,96624,2767],{"class":49},[36,96626,61],{"class":53},[36,96628,96629],{"class":38,"line":1517},[36,96630,96631],{"class":42},"#这个重复之后二维变成一维\n",[36,96633,96634,96637,96639],{"class":38,"line":2421},[36,96635,96636],{"class":53},"np.repeat(aa,",[36,96638,1188],{"class":49},[36,96640,61],{"class":53},[36,96642,96643],{"class":38,"line":2446},[36,96644,96406],{"class":57},[36,96646,96647],{"class":38,"line":2469},[36,96648,96649],{"class":57},"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",[36,96651,96652],{"class":38,"line":2492},[36,96653,96406],{"class":57},[36,96655,96656],{"class":38,"line":4150},[36,96657,96658],{"class":42},"#指定axis\n",[36,96660,96661,96663,96665,96667,96669,96671,96673],{"class":38,"line":4155},[36,96662,96636],{"class":53},[36,96664,1188],{"class":49},[36,96666,3059],{"class":53},[36,96668,50011],{"class":1997},[36,96670,115],{"class":114},[36,96672,713],{"class":49},[36,96674,61],{"class":53},[36,96676,96677],{"class":38,"line":4161},[36,96678,96042],{"class":42},[36,96680,96681],{"class":38,"line":4166},[36,96682,96406],{"class":57},[36,96684,96685],{"class":38,"line":4180},[36,96686,96687],{"class":57},"array([[ 1,  2,  3],\n",[36,96689,96690],{"class":38,"line":4185},[36,96691,96692],{"class":57},"       [ 1,  2,  3],\n",[36,96694,96695],{"class":38,"line":4191},[36,96696,96697],{"class":57},"       [ 4,  5,  6],\n",[36,96699,96700],{"class":38,"line":4212},[36,96701,96697],{"class":57},[36,96703,96704],{"class":38,"line":4217},[36,96705,96706],{"class":57},"       [ 7,  8,  9],\n",[36,96708,96709],{"class":38,"line":4231},[36,96710,96706],{"class":57},[36,96712,96713],{"class":38,"line":4236},[36,96714,96715],{"class":57},"       [10, 11, 12],\n",[36,96717,96718],{"class":38,"line":4264},[36,96719,96720],{"class":57},"       [10, 11, 12]])\n",[36,96722,96723],{"class":38,"line":4269},[36,96724,96406],{"class":57},[36,96726,96727,96729,96731,96733,96735,96737,96739],{"class":38,"line":4286},[36,96728,96636],{"class":53},[36,96730,1188],{"class":49},[36,96732,3059],{"class":53},[36,96734,50011],{"class":1997},[36,96736,115],{"class":114},[36,96738,707],{"class":49},[36,96740,61],{"class":53},[36,96742,96743],{"class":38,"line":4291},[36,96744,96042],{"class":42},[36,96746,96747],{"class":38,"line":4296},[36,96748,96406],{"class":57},[36,96750,96751],{"class":38,"line":4301},[36,96752,96753],{"class":57},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,96755,96756],{"class":38,"line":4315},[36,96757,96758],{"class":57},"       [ 4,  4,  5,  5,  6,  6],\n",[36,96760,96761],{"class":38,"line":4320},[36,96762,96763],{"class":57},"       [ 7,  7,  8,  8,  9,  9],\n",[36,96765,96766],{"class":38,"line":5109},[36,96767,96768],{"class":57},"       [10, 10, 11, 11, 12, 12]])\n",[36,96770,96771],{"class":38,"line":5123},[36,96772,96406],{"class":57},[14,96774,96776],{"id":96775},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,96778,96780],{"className":28,"code":96779,"language":30,"meta":31,"style":31},"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",[33,96781,96782,96798,96803,96815,96819,96824,96834,96838],{"__ignoreMap":31},[36,96783,96784,96786,96788,96790,96792,96794,96796],{"class":38,"line":39},[36,96785,2923],{"class":53},[36,96787,115],{"class":114},[36,96789,95480],{"class":53},[36,96791,707],{"class":49},[36,96793,3059],{"class":53},[36,96795,1134],{"class":49},[36,96797,61],{"class":53},[36,96799,96800],{"class":38,"line":46},[36,96801,96802],{"class":42},"#array([，2，3，4])\n",[36,96804,96805,96808,96810,96812],{"class":38,"line":82},[36,96806,96807],{"class":53},"np.roll(a,",[36,96809,1188],{"class":49},[36,96811,3110],{"class":53},[36,96813,96814],{"class":42},"#传正数向后调多少位，传负数向前调多少位\n",[36,96816,96817],{"class":38,"line":88},[36,96818,96042],{"class":42},[36,96820,96821],{"class":38,"line":195},[36,96822,96823],{"class":42},"#array([3, 4, 1, 2])\n",[36,96825,96826,96828,96830,96832],{"class":38,"line":1517},[36,96827,96807],{"class":53},[36,96829,508],{"class":114},[36,96831,707],{"class":49},[36,96833,61],{"class":53},[36,96835,96836],{"class":38,"line":2421},[36,96837,96042],{"class":42},[36,96839,96840],{"class":38,"line":2446},[36,96841,96842],{"class":42},"#array([2, 3, 4, 1])\n",[19,96844,96845],{},[4000,96846],{"alt":31,"src":96847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96849,96851],{"id":96850},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96853,96854],{},"resize()重新调整数组的大小",[19,96856,96857],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,96859,96861],{"className":28,"code":96860,"language":30,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,96862,96863,96868,96881],{"__ignoreMap":31},[36,96864,96865],{"class":38,"line":39},[36,96866,96867],{"class":42},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,96869,96870,96873,96875,96877,96879],{"class":38,"line":46},[36,96871,96872],{"class":53},"np.resize(aa,(",[36,96874,1188],{"class":49},[36,96876,3059],{"class":53},[36,96878,3025],{"class":49},[36,96880,625],{"class":53},[36,96882,96883,96885,96887,96889,96891,96893],{"class":38,"line":82},[36,96884,96872],{"class":53},[36,96886,1188],{"class":49},[36,96888,3059],{"class":53},[36,96890,3101],{"class":49},[36,96892,85252],{"class":53},[36,96894,96895],{"class":42},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96897,96899],{"id":96898},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96901,96902],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96904,96905],{},[4000,96906],{"alt":31,"src":96907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96909,96911],{"id":96910},"_126-保存加载文件","12.6 保存加载文件",[19,96913,96914],{},"savetxt():将数据保存到txt文件中",[19,96916,96917],{},"loadtxt():从文件加载数据",[19,96919,96920],{},[4000,96921],{"alt":31,"src":96922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96924,96926],{"id":96925},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96928,96929],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96931,96933],{"id":96932},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96935,96936],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96938,96939],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96941,96942],{},[4000,96943],{"alt":31,"src":96944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96946,96948],{"id":96947},"_129-where语句","12.9 where语句",[19,96950,96951],{},"np.where(条件,x,y)",[19,96953,96954],{},"如果条件为True,对应值为x,否则对应值为y",[19,96956,96957],{},[4000,96958],{"alt":31,"src":96959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96961,96963],{"id":96962},"_1210-dot矩阵","12.10 dot()矩阵",[19,96965,96966],{},[4000,96967],{"alt":31,"src":96968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2602,96970,96971],{},"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":31,"searchDepth":46,"depth":46,"links":96973},[96974,96975,96976,96977,96978,96979,96980,96981,96982,96983],{"id":96336,"depth":46,"text":96337},{"id":96559,"depth":46,"text":96560},{"id":96775,"depth":46,"text":96776},{"id":96850,"depth":46,"text":96851},{"id":96898,"depth":46,"text":96899},{"id":96910,"depth":46,"text":96911},{"id":96925,"depth":46,"text":96926},{"id":96932,"depth":46,"text":96933},{"id":96947,"depth":46,"text":96948},{"id":96962,"depth":46,"text":96963},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96328,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96990,"title":96991,"body":96992,"description":2630,"extension":2631,"meta":97345,"navigation":545,"path":97346,"seo":97347,"stem":97348,"__hash__":97349},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96993,"toc":97343},[96994,96997,97000,97003,97006,97009,97074,97076,97340],[10,96995,96991],{"id":96996},"_13数组排序",[19,96998,96999],{},"排序主要用到的方法是np.sort和np.argsort",[19,97001,97002],{},"其中np.sort()对数组直接排序",[19,97004,97005],{},"而np.argsort()是返回排序后的原始索引",[19,97007,97008],{},"①一维数组",[26,97010,97012],{"className":28,"code":97011,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,97013,97014,97018,97058,97066],{"__ignoreMap":31},[36,97015,97016],{"class":38,"line":39},[36,97017,95583],{"class":42},[36,97019,97020,97022,97024,97026,97028,97030,97032,97034,97036,97038,97040,97042,97044,97046,97048,97050,97052,97054,97056],{"class":38,"line":46},[36,97021,2923],{"class":53},[36,97023,115],{"class":114},[36,97025,95502],{"class":53},[36,97027,2767],{"class":49},[36,97029,3059],{"class":53},[36,97031,3176],{"class":49},[36,97033,3059],{"class":53},[36,97035,3076],{"class":49},[36,97037,3059],{"class":53},[36,97039,3451],{"class":49},[36,97041,3059],{"class":53},[36,97043,2963],{"class":49},[36,97045,3059],{"class":53},[36,97047,3569],{"class":49},[36,97049,3059],{"class":53},[36,97051,3025],{"class":49},[36,97053,3059],{"class":53},[36,97055,1317],{"class":49},[36,97057,7188],{"class":53},[36,97059,97060,97063],{"class":38,"line":82},[36,97061,97062],{"class":53},"np.sort(a)",[36,97064,97065],{"class":42},"#升序排序\n",[36,97067,97068,97071],{"class":38,"line":88},[36,97069,97070],{"class":53},"np.argsort(a)",[36,97072,97073],{"class":42},"#按照元素大小来索引排序\n",[19,97075,95769],{},[26,97077,97079],{"className":28,"code":97078,"language":30,"meta":31,"style":31},"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",[33,97080,97081,97093,97119,97124,97128,97133,97138,97143,97148,97152,97160,97164,97169,97174,97179,97184,97188,97193,97206,97210,97215,97220,97225,97230,97234,97239,97251,97255,97259,97263,97267,97271,97275,97280,97295,97300,97309,97314,97318,97322,97327,97331,97336],{"__ignoreMap":31},[36,97082,97083,97086,97088,97090],{"class":38,"line":39},[36,97084,97085],{"class":53},"np.random.seed(",[36,97087,713],{"class":49},[36,97089,3110],{"class":53},[36,97091,97092],{"class":42},"#保证每次值一样\n",[36,97094,97095,97097,97099,97101,97103,97105,97107,97109,97111,97113,97115,97117],{"class":38,"line":46},[36,97096,95784],{"class":53},[36,97098,115],{"class":114},[36,97100,95592],{"class":53},[36,97102,166],{"class":49},[36,97104,3059],{"class":53},[36,97106,33999],{"class":1997},[36,97108,115],{"class":114},[36,97110,54],{"class":53},[36,97112,2977],{"class":49},[36,97114,3059],{"class":53},[36,97116,3025],{"class":49},[36,97118,625],{"class":53},[36,97120,97121],{"class":38,"line":82},[36,97122,97123],{"class":42},"#原数组：\n",[36,97125,97126],{"class":38,"line":88},[36,97127,96406],{"class":57},[36,97129,97130],{"class":38,"line":195},[36,97131,97132],{"class":57},"array([[44, 47, 64, 67, 67,  9],\n",[36,97134,97135],{"class":38,"line":1517},[36,97136,97137],{"class":57},"       [83, 21, 36, 87, 70, 88],\n",[36,97139,97140],{"class":38,"line":2421},[36,97141,97142],{"class":57},"       [88, 12, 58, 65, 39, 87],\n",[36,97144,97145],{"class":38,"line":2446},[36,97146,97147],{"class":57},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,97149,97150],{"class":38,"line":2469},[36,97151,96406],{"class":57},[36,97153,97154,97157],{"class":38,"line":2492},[36,97155,97156],{"class":53},"np.sort(aa)",[36,97158,97159],{"class":42},"#每行进行了排序\n",[36,97161,97162],{"class":38,"line":4150},[36,97163,96406],{"class":57},[36,97165,97166],{"class":38,"line":4155},[36,97167,97168],{"class":57},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,97170,97171],{"class":38,"line":4161},[36,97172,97173],{"class":57},"       [21, 36, 70, 83, 87, 88],\n",[36,97175,97176],{"class":38,"line":4166},[36,97177,97178],{"class":57},"       [12, 39, 58, 65, 87, 88],\n",[36,97180,97181],{"class":38,"line":4180},[36,97182,97183],{"class":57},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,97185,97186],{"class":38,"line":4185},[36,97187,96406],{"class":57},[36,97189,97190],{"class":38,"line":4191},[36,97191,97192],{"class":42},"#axis=0时\n",[36,97194,97195,97198,97200,97202,97204],{"class":38,"line":4212},[36,97196,97197],{"class":53},"np.sort(aa,",[36,97199,50011],{"class":1997},[36,97201,115],{"class":114},[36,97203,713],{"class":49},[36,97205,61],{"class":53},[36,97207,97208],{"class":38,"line":4217},[36,97209,96406],{"class":57},[36,97211,97212],{"class":38,"line":4231},[36,97213,97214],{"class":57},"array([[44, 12, 36, 37, 25,  9],\n",[36,97216,97217],{"class":38,"line":4236},[36,97218,97219],{"class":57},"       [46, 21, 58, 65, 39, 77],\n",[36,97221,97222],{"class":38,"line":4264},[36,97223,97224],{"class":57},"       [83, 47, 64, 67, 67, 87],\n",[36,97226,97227],{"class":38,"line":4269},[36,97228,97229],{"class":57},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,97231,97232],{"class":38,"line":4286},[36,97233,96406],{"class":57},[36,97235,97236],{"class":38,"line":4291},[36,97237,97238],{"class":42},"#axis=1时,为默认值\n",[36,97240,97241,97243,97245,97247,97249],{"class":38,"line":4296},[36,97242,97197],{"class":53},[36,97244,50011],{"class":1997},[36,97246,115],{"class":114},[36,97248,707],{"class":49},[36,97250,61],{"class":53},[36,97252,97253],{"class":38,"line":4301},[36,97254,96406],{"class":57},[36,97256,97257],{"class":38,"line":4315},[36,97258,97168],{"class":57},[36,97260,97261],{"class":38,"line":4320},[36,97262,97173],{"class":57},[36,97264,97265],{"class":38,"line":5109},[36,97266,97178],{"class":57},[36,97268,97269],{"class":38,"line":5123},[36,97270,97183],{"class":57},[36,97272,97273],{"class":38,"line":5131},[36,97274,96406],{"class":57},[36,97276,97277],{"class":38,"line":5136},[36,97278,97279],{"class":42},"#按最后一列排序\n",[36,97281,97282,97284,97286,97289,97291,97293],{"class":38,"line":5142},[36,97283,2947],{"class":53},[36,97285,115],{"class":114},[36,97287,97288],{"class":53},"aa[:,",[36,97290,508],{"class":114},[36,97292,707],{"class":49},[36,97294,35748],{"class":53},[36,97296,97297],{"class":38,"line":5148},[36,97298,97299],{"class":42},"#获取最后一列排好序的索引\n",[36,97301,97302,97304,97306],{"class":38,"line":5153},[36,97303,76543],{"class":53},[36,97305,115],{"class":114},[36,97307,97308],{"class":53},"np.argsort(b)\n",[36,97310,97311],{"class":38,"line":10475},[36,97312,97313],{"class":53},"aa[index]\n",[36,97315,97316],{"class":38,"line":10499},[36,97317,96406],{"class":57},[36,97319,97320],{"class":38,"line":10504},[36,97321,97132],{"class":57},[36,97323,97324],{"class":38,"line":10510},[36,97325,97326],{"class":57},"       [46, 88, 81, 37, 25, 77],\n",[36,97328,97329],{"class":38,"line":10537},[36,97330,97142],{"class":57},[36,97332,97333],{"class":38,"line":10542},[36,97334,97335],{"class":57},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,97337,97338],{"class":38,"line":10548},[36,97339,96406],{"class":57},[2602,97341,97342],{},"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":31,"searchDepth":46,"depth":46,"links":97344},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96991,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97351,"title":97352,"body":97353,"description":2630,"extension":2631,"meta":97383,"navigation":545,"path":97384,"seo":97385,"stem":97386,"__hash__":97387},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97354,"toc":97381},[97355,97358,97361,97364,97367,97370,97373,97376],[10,97356,97352],{"id":97357},"_14广播机制",[19,97359,97360],{},"广播的规则：",[19,97362,97363],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97365,97366],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97368,97369],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97371,97372],{},"3.如果没有维度形状为1，则会引发异常",[19,97374,97375],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97377,97378],{},[4000,97379],{"alt":31,"src":97380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":46,"depth":46,"links":97382},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97352,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97389,"title":97390,"body":97391,"description":2630,"extension":2631,"meta":97489,"navigation":545,"path":97490,"seo":97491,"stem":97492,"__hash__":97493},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97392,"toc":97487},[97393,97396,97399,97484],[10,97394,97390],{"id":97395},"_15比较掩码",[19,97397,97398],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,97400,97402],{"className":28,"code":97401,"language":30,"meta":31,"style":31},"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",[33,97403,97404,97450,97461,97475,97479],{"__ignoreMap":31},[36,97405,97406,97408,97410,97413,97415,97417,97419,97421,97423,97425,97427,97429,97431,97433,97435,97437,97439,97441,97443,97445,97447],{"class":38,"line":39},[36,97407,2923],{"class":53},[36,97409,115],{"class":114},[36,97411,97412],{"class":53},"np.array([[",[36,97414,707],{"class":49},[36,97416,3059],{"class":53},[36,97418,1188],{"class":49},[36,97420,3059],{"class":53},[36,97422,2767],{"class":49},[36,97424,50526],{"class":53},[36,97426,3151],{"class":49},[36,97428,3059],{"class":53},[36,97430,3176],{"class":49},[36,97432,3059],{"class":53},[36,97434,3201],{"class":49},[36,97436,50526],{"class":53},[36,97438,3401],{"class":49},[36,97440,3059],{"class":53},[36,97442,3426],{"class":49},[36,97444,3059],{"class":53},[36,97446,3451],{"class":49},[36,97448,97449],{"class":53},"]])\n",[36,97451,97452,97454,97456,97458],{"class":38,"line":46},[36,97453,2923],{"class":53},[36,97455,1507],{"class":114},[36,97457,3376],{"class":49},[36,97459,97460],{"class":42},"#结果是一个由True,False组成的数组\n",[36,97462,97463,97466,97468,97470,97472],{"class":38,"line":82},[36,97464,97465],{"class":53},"a[a",[36,97467,1507],{"class":114},[36,97469,3376],{"class":49},[36,97471,3614],{"class":53},[36,97473,97474],{"class":42},"#小于20的元素会存到这个数组中\n",[36,97476,97477],{"class":38,"line":88},[36,97478,96042],{"class":42},[36,97480,97481],{"class":38,"line":195},[36,97482,97483],{"class":42},"#array([ 1,  2,  3, 11, 12, 13])\n",[2602,97485,97486],{},"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":31,"searchDepth":46,"depth":46,"links":97488},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97390,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97495,"title":97496,"body":97497,"description":2630,"extension":2631,"meta":97589,"navigation":545,"path":97590,"seo":97591,"stem":97592,"__hash__":97593},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97498,"toc":97587},[97499,97502,97505,97508,97511,97514,97579,97584],[10,97500,97496],{"id":97501},"_16魔法命令time",[19,97503,97504],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97506,97507],{},"%:行模式",[19,97509,97510],{},"%%:单元格模式",[19,97512,97513],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,97515,97517],{"className":28,"code":97516,"language":30,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,97518,97519,97524,97531,97536,97545,97558,97562,97570],{"__ignoreMap":31},[36,97520,97521],{"class":38,"line":39},[36,97522,97523],{"class":42},"#程序执行时间\n",[36,97525,97526,97528],{"class":38,"line":46},[36,97527,537],{"class":114},[36,97529,97530],{"class":53}," time \n",[36,97532,97533],{"class":38,"line":82},[36,97534,97535],{"class":42},"#获取时间\n",[36,97537,97538,97541,97543],{"class":38,"line":88},[36,97539,97540],{"class":53},"start",[36,97542,115],{"class":114},[36,97544,34921],{"class":53},[36,97546,97547,97550,97553,97555],{"class":38,"line":195},[36,97548,97549],{"class":53},"time.sleep(",[36,97551,97552],{"class":49},"0.4",[36,97554,3110],{"class":53},[36,97556,97557],{"class":42},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,97559,97560],{"class":38,"line":1517},[36,97561,97535],{"class":42},[36,97563,97564,97566,97568],{"class":38,"line":2421},[36,97565,48299],{"class":53},[36,97567,115],{"class":114},[36,97569,34921],{"class":53},[36,97571,97572,97574,97576],{"class":38,"line":2446},[36,97573,48299],{"class":53},[36,97575,508],{"class":114},[36,97577,97578],{"class":53},"start\n",[19,97580,97581],{},[4000,97582],{"alt":31,"src":97583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2602,97585,97586],{},"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":31,"searchDepth":46,"depth":46,"links":97588},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97496,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97595,"title":97596,"body":97597,"description":2630,"extension":2631,"meta":97632,"navigation":545,"path":97633,"seo":97634,"stem":97635,"__hash__":97636},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97598,"toc":97630},[97599,97602,97605,97608,97611,97614,97617,97620,97625],[10,97600,97596],{"id":97601},"_17魔法命令timeit",[19,97603,97604],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97606,97607],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97609,97610],{},"单元格模式：",[19,97612,97613],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97615,97616],{},"初始化语句执行次数由轮数来决定",[19,97618,97619],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97621,97622],{},[4000,97623],{"alt":31,"src":97624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97626,97627],{},[4000,97628],{"alt":31,"src":97629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":46,"depth":46,"links":97631},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97596,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97638,"title":97639,"body":97640,"description":2630,"extension":2631,"meta":97658,"navigation":545,"path":97659,"seo":97660,"stem":97661,"__hash__":97662},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97641,"toc":97656},[97642,97645,97648,97651],[10,97643,97639],{"id":97644},"_18魔法命令writefile和run",[19,97646,97647],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97649,97650],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97652,97653],{},[4000,97654],{"alt":31,"src":97655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":46,"depth":46,"links":97657},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97639,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97664,"title":97665,"body":97666,"description":2630,"extension":2631,"meta":97719,"navigation":545,"path":97720,"seo":97721,"stem":97722,"__hash__":97723},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97667,"toc":97717},[97668,97671,97674,97676,97679,97682,97687,97690,97693,97696,97699,97702,97705,97708,97711,97714],[10,97669,97665],{"id":97670},"_19魔法命令memit",[19,97672,97673],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97675,27116],{},[19,97677,97678],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97680,97681],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97683,97684],{},[4000,97685],{"alt":31,"src":97686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97688,97689],{},"补充：",[19,97691,97692],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97694,97695],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97697,97698],{},"解决方法：",[19,97700,97701],{},"1.cmd",[19,97703,97704],{},"2.依次输入以下代码：",[19,97706,97707],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97709,97710],{},"pip install --upgrade ipython",[19,97712,97713],{},"#升级 memory_profiler 和 setuptools",[19,97715,97716],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":46,"depth":46,"links":97718},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97665,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97725,"title":97726,"body":97727,"description":2630,"extension":2631,"meta":99371,"navigation":545,"path":99372,"seo":99373,"stem":99374,"__hash__":99375},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97728,"toc":99341},[97729,97732,97736,97740,97801,97804,97809,97813,97818,97823,97828,97833,97836,97841,97845,97849,97882,97885,97888,97891,97943,97946,97982,97985,98027,98031,98052,98054,98091,98093,98098,98100,98105,98109,98112,98140,98144,98148,98199,98203,98295,98299,98303,98306,98311,98315,98340,98345,98349,98352,98355,98358,98361,98364,98367,98370,98382,98386,98390,98393,98425,98428,98451,98454,98480,98483,98509,98512,98546,98549,98611,98615,98618,98622,98625,98651,98654,98657,98662,98665,98734,98736,98741,98802,98805,98816,98822,98827,98831,98834,98847,98851,98866,98868,98891,98893,98919,98922,98925,98928,98976,98978,98983,98987,98991,99018,99022,99049,99052,99057,99062,99152,99156,99214,99219,99222,99225,99267,99271,99327,99332,99335,99338],[10,97730,97726],{"id":97731},"_2创建数组",[14,97733,97735],{"id":97734},"_21-array函数创建数组","2.1 array()函数创建数组",[997,97737,97739],{"id":97738},"_221-函数语句","2.2.1 函数语句",[26,97741,97743],{"className":28,"code":97742,"language":30,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,97744,97745],{"__ignoreMap":31},[36,97746,97747,97750,97753,97755,97757,97759,97761,97763,97766,97768,97771,97773,97776,97778,97780,97782,97785,97787,97790,97792,97795,97797,97799],{"class":38,"line":39},[36,97748,97749],{"class":53},"numpy.array(",[36,97751,97752],{"class":49},"object",[36,97754,14958],{"class":53},[36,97756,95978],{"class":1997},[36,97758,498],{"class":114},[36,97760,41433],{"class":49},[36,97762,14958],{"class":53},[36,97764,97765],{"class":1997},"copy",[36,97767,498],{"class":114},[36,97769,97770],{"class":49}," True",[36,97772,14958],{"class":53},[36,97774,97775],{"class":1997},"order",[36,97777,498],{"class":114},[36,97779,41433],{"class":49},[36,97781,14958],{"class":53},[36,97783,97784],{"class":1997},"subok",[36,97786,498],{"class":114},[36,97788,97789],{"class":49}," False",[36,97791,14958],{"class":53},[36,97793,97794],{"class":1997},"ndmin",[36,97796,498],{"class":114},[36,97798,6624],{"class":49},[36,97800,61],{"class":53},[19,97802,97803],{},"参数：",[19,97805,97806],{},[4000,97807],{"alt":31,"src":97808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[997,97810,97812],{"id":97811},"_222-实例","2.2.2 实例",[19,97814,97815],{},[4000,97816],{"alt":31,"src":97817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97819,97820],{},[4000,97821],{"alt":31,"src":97822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97824,97825],{},[4000,97826],{"alt":31,"src":97827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97829,97830],{},[4000,97831],{"alt":31,"src":97832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97834,97835],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97837,97838],{},[4000,97839],{"alt":31,"src":97840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97842,97844],{"id":97843},"_22-随机数创建数组","2.2 随机数创建数组",[997,97846,97848],{"id":97847},"_221-random语句","2.2.1 random语句",[26,97850,97852],{"className":28,"code":97851,"language":30,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,97853,97854,97859,97864,97872,97877],{"__ignoreMap":31},[36,97855,97856],{"class":38,"line":39},[36,97857,97858],{"class":42},"#random.random()\n",[36,97860,97861],{"class":38,"line":46},[36,97862,97863],{"class":42},"#确定随机种子,就是每次运行结果是相同的\n",[36,97865,97866,97868,97870],{"class":38,"line":82},[36,97867,97085],{"class":53},[36,97869,713],{"class":49},[36,97871,61],{"class":53},[36,97873,97874],{"class":38,"line":88},[36,97875,97876],{"class":53},"np.random.random()\n",[36,97878,97879],{"class":38,"line":195},[36,97880,97881],{"class":42},"#生成一个随机的数目\n",[19,97883,97884],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97886,97887],{},"可以指定数组形状 size",[19,97889,97890],{},"①生成一维数组",[26,97892,97894],{"className":28,"code":97893,"language":30,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,97895,97896,97901,97914,97919,97935],{"__ignoreMap":31},[36,97897,97898],{"class":38,"line":39},[36,97899,97900],{"class":42},"#random.random(size())\n",[36,97902,97903,97906,97908,97910,97912],{"class":38,"line":46},[36,97904,97905],{"class":53},"np.random.random(",[36,97907,33999],{"class":1997},[36,97909,115],{"class":114},[36,97911,1134],{"class":49},[36,97913,61],{"class":53},[36,97915,97916],{"class":38,"line":82},[36,97917,97918],{"class":42},"#生成一位的五个元素\n",[36,97920,97921,97923,97925,97927,97929,97931,97933],{"class":38,"line":88},[36,97922,2923],{"class":53},[36,97924,115],{"class":114},[36,97926,97905],{"class":53},[36,97928,33999],{"class":1997},[36,97930,115],{"class":114},[36,97932,2977],{"class":49},[36,97934,61],{"class":53},[36,97936,97937,97940],{"class":38,"line":195},[36,97938,97939],{"class":53},"a.shape ",[36,97941,97942],{"class":42},"#输出数组形状\n",[19,97944,97945],{},"②生成二维数组",[26,97947,97949],{"className":28,"code":97948,"language":30,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,97950,97951,97955,97977],{"__ignoreMap":31},[36,97952,97953],{"class":38,"line":39},[36,97954,95779],{"class":42},[36,97956,97957,97959,97961,97963,97965,97967,97969,97971,97973,97975],{"class":38,"line":46},[36,97958,95784],{"class":53},[36,97960,115],{"class":114},[36,97962,97905],{"class":53},[36,97964,33999],{"class":1997},[36,97966,115],{"class":114},[36,97968,54],{"class":53},[36,97970,2977],{"class":49},[36,97972,3059],{"class":53},[36,97974,1134],{"class":49},[36,97976,625],{"class":53},[36,97978,97979],{"class":38,"line":82},[36,97980,97981],{"class":42},"#生成四行五列的数组\n",[19,97983,97984],{},"③生成三维数组",[26,97986,97988],{"className":28,"code":97987,"language":30,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,97989,97990,97995,98022],{"__ignoreMap":31},[36,97991,97992],{"class":38,"line":39},[36,97993,97994],{"class":42},"#三维数组\n",[36,97996,97997,98000,98002,98004,98006,98008,98010,98012,98014,98016,98018,98020],{"class":38,"line":46},[36,97998,97999],{"class":53},"aaa",[36,98001,115],{"class":114},[36,98003,97905],{"class":53},[36,98005,33999],{"class":1997},[36,98007,115],{"class":114},[36,98009,54],{"class":53},[36,98011,1188],{"class":49},[36,98013,3059],{"class":53},[36,98015,2767],{"class":49},[36,98017,3059],{"class":53},[36,98019,2977],{"class":49},[36,98021,625],{"class":53},[36,98023,98024],{"class":38,"line":82},[36,98025,98026],{"class":53},"aaa.shape\n",[997,98028,98030],{"id":98029},"_222-randint语句","2.2.2 randint语句",[26,98032,98034],{"className":28,"code":98033,"language":30,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,98035,98036,98041],{"__ignoreMap":31},[36,98037,98038],{"class":38,"line":39},[36,98039,98040],{"class":42},"#生成随机的整数 random.randint(low,high,size)\n",[36,98042,98043,98045,98047,98049],{"class":38,"line":46},[36,98044,95592],{"class":53},[36,98046,1134],{"class":49},[36,98048,16236],{"class":53},[36,98050,98051],{"class":42},"#0~5中的随机一个数\n",[19,98053,97890],{},[26,98055,98057],{"className":28,"code":98056,"language":30,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,98058,98059,98064,98086],{"__ignoreMap":31},[36,98060,98061],{"class":38,"line":39},[36,98062,98063],{"class":42},"#一维\n",[36,98065,98066,98068,98070,98072,98074,98076,98078,98080,98082,98084],{"class":38,"line":46},[36,98067,95592],{"class":53},[36,98069,707],{"class":49},[36,98071,3059],{"class":53},[36,98073,3151],{"class":49},[36,98075,3059],{"class":53},[36,98077,33999],{"class":1997},[36,98079,115],{"class":114},[36,98081,54],{"class":53},[36,98083,1317],{"class":49},[36,98085,625],{"class":53},[36,98087,98088],{"class":38,"line":82},[36,98089,98090],{"class":42},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98092,97945],{},[19,98094,98095],{},[4000,98096],{"alt":31,"src":98097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98099,97984],{},[19,98101,98102],{},[4000,98103],{"alt":31,"src":98104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[997,98106,98108],{"id":98107},"_222-rand语句","2.2.2 rand语句",[19,98110,98111],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,98113,98115],{"className":28,"code":98114,"language":30,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,98116,98117,98130,98135],{"__ignoreMap":31},[36,98118,98119,98122,98124,98126,98128],{"class":38,"line":39},[36,98120,98121],{"class":53},"np.random.rand(",[36,98123,166],{"class":49},[36,98125,3059],{"class":53},[36,98127,1317],{"class":49},[36,98129,61],{"class":53},[36,98131,98132],{"class":38,"line":46},[36,98133,98134],{"class":42},"#第一个参数100：行数，表示有100个样本\n",[36,98136,98137],{"class":38,"line":82},[36,98138,98139],{"class":42},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98141,98143],{"id":98142},"_23-arange创建数组","2.3 arange()创建数组",[997,98145,98147],{"id":98146},"_231-函数语句","2.3.1 函数语句",[26,98149,98151],{"className":28,"code":98150,"language":30,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,98152,98153,98166,98171,98175,98180,98185,98190,98195],{"__ignoreMap":31},[36,98154,98155,98158,98160,98162,98164],{"class":38,"line":39},[36,98156,98157],{"class":53},"numpy.arange([start,] stop[, step], ",[36,98159,95978],{"class":1997},[36,98161,115],{"class":114},[36,98163,198],{"class":49},[36,98165,61],{"class":53},[36,98167,98168],{"class":38,"line":46},[36,98169,98170],{"class":42},"#参数\n",[36,98172,98173],{"class":38,"line":82},[36,98174,74],{"class":57},[36,98176,98177],{"class":38,"line":88},[36,98178,98179],{"class":57},"start:起始值，可选，默认从 0 开始。\n",[36,98181,98182],{"class":38,"line":195},[36,98183,98184],{"class":57},"stop:结束值（不包含该值）。\n",[36,98186,98187],{"class":38,"line":1517},[36,98188,98189],{"class":57},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,98191,98192],{"class":38,"line":2421},[36,98193,98194],{"class":57},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,98196,98197],{"class":38,"line":2446},[36,98198,74],{"class":57},[997,98200,98202],{"id":98201},"_232-实例","2.3.2 实例",[26,98204,98206],{"className":28,"code":98205,"language":30,"meta":31,"style":31},"#创建一维数组\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",[33,98207,98208,98212,98236,98241,98246,98250,98273,98277,98281,98286,98291],{"__ignoreMap":31},[36,98209,98210],{"class":38,"line":39},[36,98211,95583],{"class":42},[36,98213,98214,98216,98218,98220,98222,98224,98226,98228,98230,98232,98234],{"class":38,"line":46},[36,98215,95480],{"class":53},[36,98217,707],{"class":49},[36,98219,3059],{"class":53},[36,98221,3401],{"class":49},[36,98223,3059],{"class":53},[36,98225,707],{"class":49},[36,98227,3059],{"class":53},[36,98229,95978],{"class":1997},[36,98231,115],{"class":114},[36,98233,232],{"class":49},[36,98235,61],{"class":53},[36,98237,98238],{"class":38,"line":82},[36,98239,98240],{"class":42},"#输出结果：\n",[36,98242,98243],{"class":38,"line":88},[36,98244,98245],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,98247,98248],{"class":38,"line":195},[36,98249,96425],{"class":42},[36,98251,98252,98255,98257,98259,98261,98264,98266,98268,98270],{"class":38,"line":1517},[36,98253,98254],{"class":53},"np.array([np.arange(",[36,98256,707],{"class":49},[36,98258,3059],{"class":53},[36,98260,2977],{"class":49},[36,98262,98263],{"class":53},"),np.arange(",[36,98265,2977],{"class":49},[36,98267,3059],{"class":53},[36,98269,3050],{"class":49},[36,98271,98272],{"class":53},")])\n",[36,98274,98275],{"class":38,"line":2421},[36,98276,96042],{"class":42},[36,98278,98279],{"class":38,"line":2446},[36,98280,74],{"class":57},[36,98282,98283],{"class":38,"line":2469},[36,98284,98285],{"class":57},"array([[1, 2, 3],\n",[36,98287,98288],{"class":38,"line":2492},[36,98289,98290],{"class":57},"       [4, 5, 6]])\n",[36,98292,98293],{"class":38,"line":4150},[36,98294,74],{"class":57},[14,98296,98298],{"id":98297},"_24-生态分布","2.4 生态分布",[997,98300,98302],{"id":98301},"_241-标准正态分布","2.4.1 标准正态分布",[19,98304,98305],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98307,98308],{},[4000,98309],{"alt":31,"src":98310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[997,98312,98314],{"id":98313},"_242-常规正态分布","2.4.2 常规正态分布",[26,98316,98318],{"className":28,"code":98317,"language":30,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,98319,98320,98325,98330,98335],{"__ignoreMap":31},[36,98321,98322],{"class":38,"line":39},[36,98323,98324],{"class":53},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,98326,98327],{"class":38,"line":46},[36,98328,98329],{"class":42},"#loc:期望\n",[36,98331,98332],{"class":38,"line":82},[36,98333,98334],{"class":42},"#scale:方差\n",[36,98336,98337],{"class":38,"line":88},[36,98338,98339],{"class":42},"#size:用于确定是几维的数列\n",[19,98341,98342],{},[4000,98343],{"alt":31,"src":98344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98346,98348],{"id":98347},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98350,98351],{},"ndim:秩，维度个数",[19,98353,98354],{},"size:数组元素的个数",[19,98356,98357],{},"shape:数组的形状",[19,98359,98360],{},"dtype:数组元素的类型",[19,98362,98363],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98365,98366],{},"他们都是属性，通过数组.属性的形式来确定",[19,98368,98369],{},"如果需要输出多个可以通过以下方式：",[26,98371,98373],{"className":28,"code":98372,"language":30,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,98374,98375],{"__ignoreMap":31},[36,98376,98377,98379],{"class":38,"line":39},[36,98378,50],{"class":49},[36,98380,98381],{"class":53},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98383,98385],{"id":98384},"_26-其他方式创建数组","2.6 其他方式创建数组",[997,98387,98389],{"id":98388},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98391,98392],{},"①创建一维数组",[26,98394,98396],{"className":28,"code":98395,"language":30,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,98397,98398,98407,98411,98416,98421],{"__ignoreMap":31},[36,98399,98400,98403,98405],{"class":38,"line":39},[36,98401,98402],{"class":53},"np.zeros(",[36,98404,1317],{"class":49},[36,98406,61],{"class":53},[36,98408,98409],{"class":38,"line":46},[36,98410,74],{"class":57},[36,98412,98413],{"class":38,"line":82},[36,98414,98415],{"class":57},"输出结果：\n",[36,98417,98418],{"class":38,"line":88},[36,98419,98420],{"class":57},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,98422,98423],{"class":38,"line":195},[36,98424,74],{"class":57},[19,98426,98427],{},"上方代码等价于：",[26,98429,98431],{"className":28,"code":98430,"language":30,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,98432,98433],{"__ignoreMap":31},[36,98434,98435,98437,98440,98442,98444,98446,98448],{"class":38,"line":39},[36,98436,98402],{"class":53},[36,98438,98439],{"class":1997},"shape",[36,98441,115],{"class":114},[36,98443,54],{"class":53},[36,98445,1317],{"class":49},[36,98447,85252],{"class":53},[36,98449,98450],{"class":42},"#创建10个元素的0数组\n",[19,98452,98453],{},"也可以指定类型",[26,98455,98457],{"className":28,"code":98456,"language":30,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,98458,98459,98464],{"__ignoreMap":31},[36,98460,98461],{"class":38,"line":39},[36,98462,98463],{"class":42},"#指定类型\n",[36,98465,98466,98468,98470,98472,98474,98476,98478],{"class":38,"line":46},[36,98467,98402],{"class":53},[36,98469,1134],{"class":49},[36,98471,3059],{"class":53},[36,98473,95978],{"class":1997},[36,98475,115],{"class":114},[36,98477,232],{"class":49},[36,98479,61],{"class":53},[19,98481,98482],{},"②创建二维数组",[26,98484,98486],{"className":28,"code":98485,"language":30,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,98487,98488],{"__ignoreMap":31},[36,98489,98490,98493,98495,98497,98499,98501,98503,98505,98507],{"class":38,"line":39},[36,98491,98492],{"class":53},"np.zeros((",[36,98494,2767],{"class":49},[36,98496,3059],{"class":53},[36,98498,2977],{"class":49},[36,98500,44756],{"class":53},[36,98502,95978],{"class":1997},[36,98504,115],{"class":114},[36,98506,232],{"class":49},[36,98508,61],{"class":53},[19,98510,98511],{},"③创建三维数组",[26,98513,98515],{"className":28,"code":98514,"language":30,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,98516,98517,98522],{"__ignoreMap":31},[36,98518,98519],{"class":38,"line":39},[36,98520,98521],{"class":42},"#创建三维数组\n",[36,98523,98524,98526,98528,98530,98532,98534,98536,98538,98540,98542,98544],{"class":38,"line":46},[36,98525,98492],{"class":53},[36,98527,2767],{"class":49},[36,98529,3059],{"class":53},[36,98531,2977],{"class":49},[36,98533,3059],{"class":53},[36,98535,1134],{"class":49},[36,98537,44756],{"class":53},[36,98539,95978],{"class":1997},[36,98541,115],{"class":114},[36,98543,232],{"class":49},[36,98545,61],{"class":53},[19,98547,98548],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,98550,98552],{"className":28,"code":98551,"language":30,"meta":31,"style":31},"#使用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",[33,98553,98554,98559,98574,98579,98584,98606],{"__ignoreMap":31},[36,98555,98556],{"class":38,"line":39},[36,98557,98558],{"class":42},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,98560,98561,98563,98565,98567,98569,98571],{"class":38,"line":46},[36,98562,2923],{"class":53},[36,98564,115],{"class":114},[36,98566,95480],{"class":53},[36,98568,2977],{"class":49},[36,98570,3110],{"class":53},[36,98572,98573],{"class":42},"#这个得到的结果：一维数组0，1，2，3\n",[36,98575,98576],{"class":38,"line":82},[36,98577,98578],{"class":53},"np.zeros_like(a)\n",[36,98580,98581],{"class":38,"line":88},[36,98582,98583],{"class":42},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,98585,98586,98588,98590,98592,98594,98596,98598,98600,98602,98604],{"class":38,"line":195},[36,98587,95784],{"class":53},[36,98589,115],{"class":114},[36,98591,97905],{"class":53},[36,98593,33999],{"class":1997},[36,98595,115],{"class":114},[36,98597,54],{"class":53},[36,98599,2977],{"class":49},[36,98601,3059],{"class":53},[36,98603,1134],{"class":49},[36,98605,625],{"class":53},[36,98607,98608],{"class":38,"line":1517},[36,98609,98610],{"class":53},"np.zeros_like(aa)\n",[997,98612,98614],{"id":98613},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98616,98617],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[997,98619,98621],{"id":98620},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98623,98624],{},"①empty()用法",[26,98626,98628],{"className":28,"code":98627,"language":30,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,98629,98630],{"__ignoreMap":31},[36,98631,98632,98635,98637,98639,98641,98643,98645,98647,98649],{"class":38,"line":39},[36,98633,98634],{"class":53},"numpy.empty(shape,",[36,98636,95978],{"class":1997},[36,98638,115],{"class":114},[36,98640,244],{"class":49},[36,98642,3059],{"class":53},[36,98644,97775],{"class":1997},[36,98646,115],{"class":114},[36,98648,78513],{"class":57},[36,98650,61],{"class":53},[19,98652,98653],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98655,98656],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98658,98659],{},[4000,98660],{"alt":31,"src":98661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98663,98664],{},"②empty()用法",[26,98666,98668],{"className":28,"code":98667,"language":30,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,98669,98670,98691,98703,98724,98729],{"__ignoreMap":31},[36,98671,98672,98674,98676,98679,98681,98683,98685,98687,98689],{"class":38,"line":39},[36,98673,3521],{"class":53},[36,98675,115],{"class":114},[36,98677,98678],{"class":53},"np.empty(",[36,98680,1317],{"class":49},[36,98682,3059],{"class":53},[36,98684,95978],{"class":1997},[36,98686,115],{"class":114},[36,98688,232],{"class":49},[36,98690,61],{"class":53},[36,98692,98693,98695,98697,98699,98701],{"class":38,"line":46},[36,98694,3496],{"class":53},[36,98696,115],{"class":114},[36,98698,95480],{"class":53},[36,98700,1134],{"class":49},[36,98702,61],{"class":53},[36,98704,98705,98708,98710,98713,98715,98717,98720,98722],{"class":38,"line":82},[36,98706,98707],{"class":53},"np.add(",[36,98709,1188],{"class":49},[36,98711,98712],{"class":53},",x,",[36,98714,95532],{"class":1997},[36,98716,115],{"class":114},[36,98718,98719],{"class":53},"y[:",[36,98721,1134],{"class":49},[36,98723,7188],{"class":53},[36,98725,98726],{"class":38,"line":88},[36,98727,98728],{"class":42},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,98730,98731],{"class":38,"line":195},[36,98732,98733],{"class":53},"y\n",[19,98735,14037],{},[19,98737,98738],{},[4000,98739],{"alt":31,"src":98740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,98742,98744],{"className":28,"code":98743,"language":30,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,98745,98746,98762,98782,98797],{"__ignoreMap":31},[36,98747,98748,98750,98752,98754,98756,98758,98760],{"class":38,"line":39},[36,98749,3496],{"class":53},[36,98751,115],{"class":114},[36,98753,95480],{"class":53},[36,98755,707],{"class":49},[36,98757,3059],{"class":53},[36,98759,3025],{"class":49},[36,98761,61],{"class":53},[36,98763,98764,98766,98768,98770,98772,98774,98776,98778,98780],{"class":38,"line":46},[36,98765,3521],{"class":53},[36,98767,115],{"class":114},[36,98769,98678],{"class":53},[36,98771,1134],{"class":49},[36,98773,3059],{"class":53},[36,98775,95978],{"class":1997},[36,98777,115],{"class":114},[36,98779,232],{"class":49},[36,98781,61],{"class":53},[36,98783,98784,98787,98789,98791,98793,98795],{"class":38,"line":82},[36,98785,98786],{"class":53},"np.add(x,",[36,98788,1188],{"class":49},[36,98790,3059],{"class":53},[36,98792,95532],{"class":1997},[36,98794,115],{"class":114},[36,98796,95927],{"class":53},[36,98798,98799],{"class":38,"line":88},[36,98800,98801],{"class":42},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98803,98804],{},"③empty_like()",[19,98806,98807],{},[2839,98808,98809,98810,98815],{},"创建一个",[2839,98811,98812],{},[2839,98813,98814],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98817,98818,98821],{},[33,98819,98820],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98823,98824],{},[4000,98825],{"alt":31,"src":98826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[997,98828,98830],{"id":98829},"_264-用法","2.6.4 ？？用法",[19,98832,98833],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,98835,98837],{"className":28,"code":98836,"language":30,"meta":31,"style":31},"np.full??\n",[33,98838,98839],{"__ignoreMap":31},[36,98840,98841,98844],{"class":38,"line":39},[36,98842,98843],{"class":53},"np.full",[36,98845,98846],{"class":494},"??\n",[997,98848,98850],{"id":98849},"_265-full创建数组","2.6.5 full()创建数组",[26,98852,98854],{"className":28,"code":98853,"language":30,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,98855,98856,98861],{"__ignoreMap":31},[36,98857,98858],{"class":38,"line":39},[36,98859,98860],{"class":53},"full(shape,fill_value)\n",[36,98862,98863],{"class":38,"line":46},[36,98864,98865],{"class":53},"创建全为某个指定值的数组\n",[19,98867,97008],{},[26,98869,98871],{"className":28,"code":98870,"language":30,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,98872,98873,98878],{"__ignoreMap":31},[36,98874,98875],{"class":38,"line":39},[36,98876,98877],{"class":42},"#创建一个一维数组,以20进行填充\n",[36,98879,98880,98883,98885,98887,98889],{"class":38,"line":46},[36,98881,98882],{"class":53},"np.full(",[36,98884,1317],{"class":49},[36,98886,3059],{"class":53},[36,98888,3376],{"class":49},[36,98890,61],{"class":53},[19,98892,95769],{},[26,98894,98896],{"className":28,"code":98895,"language":30,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,98897,98898,98902],{"__ignoreMap":31},[36,98899,98900],{"class":38,"line":39},[36,98901,96425],{"class":42},[36,98903,98904,98907,98909,98911,98913,98915,98917],{"class":38,"line":46},[36,98905,98906],{"class":53},"np.full((",[36,98908,2767],{"class":49},[36,98910,3059],{"class":53},[36,98912,1134],{"class":49},[36,98914,44756],{"class":53},[36,98916,3151],{"class":49},[36,98918,61],{"class":53},[19,98920,98921],{},"③full_like用法",[19,98923,98924],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98926,98927],{},"这里是指定填充而已",[26,98929,98931],{"className":28,"code":98930,"language":30,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,98932,98933,98938,98962,98967],{"__ignoreMap":31},[36,98934,98935],{"class":38,"line":39},[36,98936,98937],{"class":42},"#创建一个指定形状数组\n",[36,98939,98940,98942,98944,98946,98948,98950,98952,98954,98956,98958,98960],{"class":38,"line":46},[36,98941,2923],{"class":53},[36,98943,115],{"class":114},[36,98945,95480],{"class":53},[36,98947,707],{"class":49},[36,98949,3059],{"class":53},[36,98951,3007],{"class":49},[36,98953,95485],{"class":53},[36,98955,2977],{"class":49},[36,98957,3059],{"class":53},[36,98959,3101],{"class":49},[36,98961,61],{"class":53},[36,98963,98964],{"class":38,"line":82},[36,98965,98966],{"class":42},"#进行指定填充\n",[36,98968,98969,98972,98974],{"class":38,"line":88},[36,98970,98971],{"class":53},"np.full_like(a,",[36,98973,1317],{"class":49},[36,98975,61],{"class":53},[19,98977,14037],{},[19,98979,98980],{},[4000,98981],{"alt":31,"src":98982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[997,98984,98986],{"id":98985},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24515,98988,98990],{"id":98989},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,98992,98994],{"className":28,"code":98993,"language":30,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,98995,98996,99013],{"__ignoreMap":31},[36,98997,98998,99001,99003,99005,99007,99009,99011],{"class":38,"line":39},[36,98999,99000],{"class":53},"np.eye(",[36,99002,2977],{"class":49},[36,99004,3059],{"class":53},[36,99006,95978],{"class":1997},[36,99008,115],{"class":114},[36,99010,232],{"class":49},[36,99012,61],{"class":53},[36,99014,99015],{"class":38,"line":46},[36,99016,99017],{"class":42},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24515,99019,99021],{"id":99020},"_2662-法2identity","2.6.6.2 法2：identity()",[26,99023,99025],{"className":28,"code":99024,"language":30,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,99026,99027,99032],{"__ignoreMap":31},[36,99028,99029],{"class":38,"line":39},[36,99030,99031],{"class":42},"#identity()\n",[36,99033,99034,99037,99039,99041,99043,99045,99047],{"class":38,"line":46},[36,99035,99036],{"class":53},"np.identity(",[36,99038,1134],{"class":49},[36,99040,3059],{"class":53},[36,99042,95978],{"class":1997},[36,99044,115],{"class":114},[36,99046,232],{"class":49},[36,99048,61],{"class":53},[19,99050,99051],{},"两个函数是有区别的",[19,99053,99054],{},[4000,99055],{"alt":31,"src":99056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,99058,99059],{},[4000,99060],{"alt":31,"src":99061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,99063,99065],{"className":28,"code":99064,"language":30,"meta":31,"style":31},"# 创建一个 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",[33,99066,99067,99072,99084,99089,99094,99099,99104,99108,99113,99133,99137,99142,99147],{"__ignoreMap":31},[36,99068,99069],{"class":38,"line":39},[36,99070,99071],{"class":42},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,99073,99074,99076,99078,99080,99082],{"class":38,"line":46},[36,99075,99000],{"class":53},[36,99077,2767],{"class":49},[36,99079,14958],{"class":53},[36,99081,2977],{"class":49},[36,99083,61],{"class":53},[36,99085,99086],{"class":38,"line":82},[36,99087,99088],{"class":42},"# 输出:\n",[36,99090,99091],{"class":38,"line":88},[36,99092,99093],{"class":42},"# [[1. 0. 0. 0.]\n",[36,99095,99096],{"class":38,"line":195},[36,99097,99098],{"class":42},"#  [0. 1. 0. 0.]\n",[36,99100,99101],{"class":38,"line":1517},[36,99102,99103],{"class":42},"#  [0. 0. 1. 0.]]\n",[36,99105,99106],{"class":38,"line":2421},[36,99107,546],{"emptyLinePlaceholder":545},[36,99109,99110],{"class":38,"line":2446},[36,99111,99112],{"class":42},"# 对角线向上偏移1\n",[36,99114,99115,99117,99119,99121,99123,99125,99127,99129,99131],{"class":38,"line":2469},[36,99116,99000],{"class":53},[36,99118,2767],{"class":49},[36,99120,14958],{"class":53},[36,99122,2977],{"class":49},[36,99124,14958],{"class":53},[36,99126,3171],{"class":1997},[36,99128,115],{"class":114},[36,99130,707],{"class":49},[36,99132,61],{"class":53},[36,99134,99135],{"class":38,"line":2492},[36,99136,99088],{"class":42},[36,99138,99139],{"class":38,"line":4150},[36,99140,99141],{"class":42},"# [[0. 1. 0. 0.]\n",[36,99143,99144],{"class":38,"line":4155},[36,99145,99146],{"class":42},"#  [0. 0. 1. 0.]\n",[36,99148,99149],{"class":38,"line":4161},[36,99150,99151],{"class":42},"#  [0. 0. 0. 1.]]\n",[997,99153,99155],{"id":99154},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,99157,99159],{"className":28,"code":99158,"language":30,"meta":31,"style":31},"#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",[33,99160,99161,99166,99170,99175,99180,99185,99190,99195,99200,99205,99210],{"__ignoreMap":31},[36,99162,99163],{"class":38,"line":39},[36,99164,99165],{"class":42},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,99167,99168],{"class":38,"line":46},[36,99169,74],{"class":57},[36,99171,99172],{"class":38,"line":82},[36,99173,99174],{"class":57},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,99176,99177],{"class":38,"line":88},[36,99178,99179],{"class":57},"参数介绍：\n",[36,99181,99182],{"class":38,"line":195},[36,99183,99184],{"class":57},"start：序列的起始值\n",[36,99186,99187],{"class":38,"line":1517},[36,99188,99189],{"class":57},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,99191,99192],{"class":38,"line":2421},[36,99193,99194],{"class":57},"num：要生长的等步长的样本数量，默认为50\n",[36,99196,99197],{"class":38,"line":2446},[36,99198,99199],{"class":57},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,99201,99202],{"class":38,"line":2469},[36,99203,99204],{"class":57},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,99206,99207],{"class":38,"line":2492},[36,99208,99209],{"class":57},"dtype：ndarry的数据类型\n",[36,99211,99212],{"class":38,"line":4150},[36,99213,74],{"class":57},[19,99215,99216],{},[4000,99217],{"alt":31,"src":99218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,99220,99221],{},"这里num=是可以省略的",[19,99223,99224],{},"也就是下方两行代码结果是一模一样的",[26,99226,99228],{"className":28,"code":99227,"language":30,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,99229,99230,99247],{"__ignoreMap":31},[36,99231,99232,99235,99237,99239,99241,99243,99245],{"class":38,"line":39},[36,99233,99234],{"class":53},"np.linspace(",[36,99236,707],{"class":49},[36,99238,3059],{"class":53},[36,99240,1134],{"class":49},[36,99242,3059],{"class":53},[36,99244,1134],{"class":49},[36,99246,61],{"class":53},[36,99248,99249,99251,99253,99255,99257,99259,99261,99263,99265],{"class":38,"line":46},[36,99250,99234],{"class":53},[36,99252,707],{"class":49},[36,99254,3059],{"class":53},[36,99256,1134],{"class":49},[36,99258,3059],{"class":53},[36,99260,4203],{"class":1997},[36,99262,115],{"class":114},[36,99264,1134],{"class":49},[36,99266,61],{"class":53},[997,99268,99270],{"id":99269},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,99272,99274],{"className":28,"code":99273,"language":30,"meta":31,"style":31},"#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",[33,99275,99276,99281,99285,99290,99295,99300,99305,99309,99314,99319,99323],{"__ignoreMap":31},[36,99277,99278],{"class":38,"line":39},[36,99279,99280],{"class":42},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,99282,99283],{"class":38,"line":46},[36,99284,74],{"class":57},[36,99286,99287],{"class":38,"line":82},[36,99288,99289],{"class":57},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,99291,99292],{"class":38,"line":88},[36,99293,99294],{"class":57},"参数为：\n",[36,99296,99297],{"class":38,"line":195},[36,99298,99299],{"class":57},"start:序列的起始位置为：base**start\n",[36,99301,99302],{"class":38,"line":1517},[36,99303,99304],{"class":57},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,99306,99307],{"class":38,"line":2421},[36,99308,99194],{"class":57},[36,99310,99311],{"class":38,"line":2446},[36,99312,99313],{"class":57},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,99315,99316],{"class":38,"line":2469},[36,99317,99318],{"class":57},"base：对数的底数，默认是 10（常见对数）\n",[36,99320,99321],{"class":38,"line":2492},[36,99322,99209],{"class":57},[36,99324,99325],{"class":38,"line":4150},[36,99326,74],{"class":57},[19,99328,99329],{},[4000,99330],{"alt":31,"src":99331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99333,99334],{},"logspace()函数中的num参数也是可以不写num=的",[19,99336,99337],{},"endpoint是不可以省略的",[2602,99339,99340],{},"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":31,"searchDepth":46,"depth":46,"links":99342},[99343,99347,99352,99356,99360,99361],{"id":97734,"depth":46,"text":97735,"children":99344},[99345,99346],{"id":97738,"depth":82,"text":97739},{"id":97811,"depth":82,"text":97812},{"id":97843,"depth":46,"text":97844,"children":99348},[99349,99350,99351],{"id":97847,"depth":82,"text":97848},{"id":98029,"depth":82,"text":98030},{"id":98107,"depth":82,"text":98108},{"id":98142,"depth":46,"text":98143,"children":99353},[99354,99355],{"id":98146,"depth":82,"text":98147},{"id":98201,"depth":82,"text":98202},{"id":98297,"depth":46,"text":98298,"children":99357},[99358,99359],{"id":98301,"depth":82,"text":98302},{"id":98313,"depth":82,"text":98314},{"id":98347,"depth":46,"text":98348},{"id":98384,"depth":46,"text":98385,"children":99362},[99363,99364,99365,99366,99367,99368,99369,99370],{"id":98388,"depth":82,"text":98389},{"id":98613,"depth":82,"text":98614},{"id":98620,"depth":82,"text":98621},{"id":98829,"depth":82,"text":98830},{"id":98849,"depth":82,"text":98850},{"id":98985,"depth":82,"text":98986},{"id":99154,"depth":82,"text":99155},{"id":99269,"depth":82,"text":99270},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97726,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99377,"title":99378,"body":99379,"description":2630,"extension":2631,"meta":99472,"navigation":545,"path":99473,"seo":99474,"stem":99475,"__hash__":99476},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99380,"toc":99470},[99381,99384,99387,99390,99393,99396,99399,99402,99405,99408,99411,99414,99416,99419,99422,99427,99430,99433,99467],[10,99382,99378],{"id":99383},"_20魔法命令mprun",[19,99385,99386],{},"逐行分析数据内存的使用情况",[19,99388,99389],{},"语法格式：",[19,99391,99392],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99394,99395],{},"分析结果列如下：",[19,99397,99398],{},"Line行号",[19,99400,99401],{},"Mem usage内存使用大小",[19,99403,99404],{},"increment内存增量",[19,99406,99407],{},"Line content代码内容",[19,99409,99410],{},"补充说明：",[19,99412,99413],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99415,97681],{},[19,99417,99418],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99420,99421],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99423,99424],{},[4000,99425],{"alt":31,"src":99426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99428,99429],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99431,99432],{},"这时候需要重新加载模块",[26,99434,99436],{"className":28,"code":99435,"language":30,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,99437,99438,99443,99450,99455],{"__ignoreMap":31},[36,99439,99440],{"class":38,"line":39},[36,99441,99442],{"class":42},"#重新加载模块\n",[36,99444,99445,99447],{"class":38,"line":46},[36,99446,537],{"class":114},[36,99448,99449],{"class":53}," importlib\n",[36,99451,99452],{"class":38,"line":82},[36,99453,99454],{"class":53},"importlib.reload(mprun_test)\n",[36,99456,99457,99459,99462,99464],{"class":38,"line":88},[36,99458,1095],{"class":114},[36,99460,99461],{"class":53},"mprun ",[36,99463,508],{"class":114},[36,99465,99466],{"class":53},"f mprun_test.fun_test mprun_test.fun_test()\n",[2602,99468,99469],{},"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":31,"searchDepth":46,"depth":46,"links":99471},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99378,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99478,"title":99479,"body":99480,"description":2630,"extension":2631,"meta":99497,"navigation":545,"path":99498,"seo":99499,"stem":99500,"__hash__":99501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99481,"toc":99495},[99482,99485,99490],[10,99483,99479],{"id":99484},"_3一维数组的索引和切片",[19,99486,99487],{},[4000,99488],{"alt":31,"src":99489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99491,99492],{},[4000,99493],{"alt":31,"src":99494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":46,"depth":46,"links":99496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99479,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99503,"title":99504,"body":99505,"description":2630,"extension":2631,"meta":99988,"navigation":545,"path":99989,"seo":99990,"stem":99991,"__hash__":99992},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99506,"toc":99986},[99507,99510,99513,99518,99551,99554,99592,99595,99629,99632,99737,99740,99777,99780,99881,99884,99935,99938,99980,99983],[10,99508,99504],{"id":99509},"_4二维数组的索引与切片",[19,99511,99512],{},"①获取指定单个元素",[19,99514,99515],{},[4000,99516],{"alt":31,"src":99517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,99519,99521],{"className":28,"code":99520,"language":30,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,99522,99523,99528,99533,99538],{"__ignoreMap":31},[36,99524,99525],{"class":38,"line":39},[36,99526,99527],{"class":42},"#获取元素9\n",[36,99529,99530],{"class":38,"line":46},[36,99531,99532],{"class":42},"#先获取所在行，再获取所在列\n",[36,99534,99535],{"class":38,"line":82},[36,99536,99537],{"class":42},"#数组[行索引号，列索引号]\n",[36,99539,99540,99543,99545,99547,99549],{"class":38,"line":88},[36,99541,99542],{"class":53},"a[",[36,99544,707],{"class":49},[36,99546,3059],{"class":53},[36,99548,1188],{"class":49},[36,99550,35748],{"class":53},[19,99552,99553],{},"②获取整行元素",[26,99555,99557],{"className":28,"code":99556,"language":30,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,99558,99559,99564,99569,99577,99582],{"__ignoreMap":31},[36,99560,99561],{"class":38,"line":39},[36,99562,99563],{"class":42},"#获取整行 数组[行索引号]\n",[36,99565,99566],{"class":38,"line":46},[36,99567,99568],{"class":42},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,99570,99571,99573,99575],{"class":38,"line":82},[36,99572,99542],{"class":53},[36,99574,1188],{"class":49},[36,99576,35748],{"class":53},[36,99578,99579],{"class":38,"line":88},[36,99580,99581],{"class":42},"#也可以负索引获取一行\n",[36,99583,99584,99586,99588,99590],{"class":38,"line":195},[36,99585,99542],{"class":53},[36,99587,508],{"class":114},[36,99589,707],{"class":49},[36,99591,35748],{"class":53},[19,99593,99594],{},"③获取整列元素",[26,99596,99598],{"className":28,"code":99597,"language":30,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,99599,99600,99605,99614,99619],{"__ignoreMap":31},[36,99601,99602],{"class":38,"line":39},[36,99603,99604],{"class":42},"#获取整列 数组名[:,列索引]\n",[36,99606,99607,99610,99612],{"class":38,"line":46},[36,99608,99609],{"class":53},"a[:,",[36,99611,1188],{"class":49},[36,99613,35748],{"class":53},[36,99615,99616],{"class":38,"line":82},[36,99617,99618],{"class":42},"#也可以负索引获取一列\n",[36,99620,99621,99623,99625,99627],{"class":38,"line":88},[36,99622,99609],{"class":53},[36,99624,508],{"class":114},[36,99626,707],{"class":49},[36,99628,35748],{"class":53},[19,99630,99631],{},"④部分行部分列的元素",[26,99633,99635],{"className":28,"code":99634,"language":30,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\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",[33,99636,99637,99642,99652,99656,99660,99665,99670,99674,99686,99690,99694,99699,99704,99709,99714,99718,99723],{"__ignoreMap":31},[36,99638,99639],{"class":38,"line":39},[36,99640,99641],{"class":42},"#部分行部分列 数组名[行切片，列切片]\n",[36,99643,99644,99647,99649],{"class":38,"line":46},[36,99645,99646],{"class":53},"a[:",[36,99648,1188],{"class":49},[36,99650,99651],{"class":53},",:]\n",[36,99653,99654],{"class":38,"line":82},[36,99655,96042],{"class":42},[36,99657,99658],{"class":38,"line":88},[36,99659,96406],{"class":57},[36,99661,99662],{"class":38,"line":195},[36,99663,99664],{"class":57},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,99666,99667],{"class":38,"line":1517},[36,99668,99669],{"class":57},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,99671,99672],{"class":38,"line":2421},[36,99673,96406],{"class":57},[36,99675,99676,99678,99680,99682,99684],{"class":38,"line":2446},[36,99677,99609],{"class":53},[36,99679,707],{"class":49},[36,99681,3535],{"class":53},[36,99683,2977],{"class":49},[36,99685,35748],{"class":53},[36,99687,99688],{"class":38,"line":2469},[36,99689,96042],{"class":42},[36,99691,99692],{"class":38,"line":2492},[36,99693,96406],{"class":57},[36,99695,99696],{"class":38,"line":4150},[36,99697,99698],{"class":57},"array([[ 2,  3,  4],\n",[36,99700,99701],{"class":38,"line":4155},[36,99702,99703],{"class":57},"       [ 8,  9, 10],\n",[36,99705,99706],{"class":38,"line":4161},[36,99707,99708],{"class":57},"       [14, 15, 16],\n",[36,99710,99711],{"class":38,"line":4166},[36,99712,99713],{"class":57},"       [20, 21, 22]])\n",[36,99715,99716],{"class":38,"line":4180},[36,99717,96406],{"class":57},[36,99719,99720],{"class":38,"line":4185},[36,99721,99722],{"class":42},"#对列行同时进行切片，使用了step参数\n",[36,99724,99725,99728,99730,99733,99735],{"class":38,"line":4191},[36,99726,99727],{"class":53},"a[::",[36,99729,1188],{"class":49},[36,99731,99732],{"class":53},",::",[36,99734,1188],{"class":49},[36,99736,35748],{"class":53},[19,99738,99739],{},"⑤同时获取两个元素",[26,99741,99743],{"className":28,"code":99742,"language":30,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,99744,99745,99750,99755],{"__ignoreMap":31},[36,99746,99747],{"class":38,"line":39},[36,99748,99749],{"class":42},"#同时获取第三行第二列，第四行第一列\n",[36,99751,99752],{"class":38,"line":46},[36,99753,99754],{"class":42},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,99756,99757,99760,99762,99764,99766,99768,99770,99772,99774],{"class":38,"line":82},[36,99758,99759],{"class":53},"a[(",[36,99761,1188],{"class":49},[36,99763,3059],{"class":53},[36,99765,2767],{"class":49},[36,99767,44747],{"class":53},[36,99769,707],{"class":49},[36,99771,3059],{"class":53},[36,99773,713],{"class":49},[36,99775,99776],{"class":53},")]\n",[19,99778,99779],{},"⑥切片，对行进行反向获取",[26,99781,99783],{"className":28,"code":99782,"language":30,"meta":31,"style":31},"#切片 对所有行进行反向获取\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",[33,99784,99785,99790,99800,99804,99808,99813,99818,99823,99828,99832,99837,99853,99857,99862,99867,99872,99877],{"__ignoreMap":31},[36,99786,99787],{"class":38,"line":39},[36,99788,99789],{"class":42},"#切片 对所有行进行反向获取\n",[36,99791,99792,99794,99796,99798],{"class":38,"line":46},[36,99793,99727],{"class":53},[36,99795,508],{"class":114},[36,99797,707],{"class":49},[36,99799,35748],{"class":53},[36,99801,99802],{"class":38,"line":82},[36,99803,96042],{"class":42},[36,99805,99806],{"class":38,"line":88},[36,99807,96406],{"class":57},[36,99809,99810],{"class":38,"line":195},[36,99811,99812],{"class":57},"array([[19, 20, 21, 22, 23, 24],\n",[36,99814,99815],{"class":38,"line":1517},[36,99816,99817],{"class":57},"       [13, 14, 15, 16, 17, 18],\n",[36,99819,99820],{"class":38,"line":2421},[36,99821,99822],{"class":57},"       [ 7,  8,  9, 10, 11, 12],\n",[36,99824,99825],{"class":38,"line":2446},[36,99826,99827],{"class":57},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,99829,99830],{"class":38,"line":2469},[36,99831,96406],{"class":57},[36,99833,99834],{"class":38,"line":2492},[36,99835,99836],{"class":42},"#对行列都进行反向切片获取\n",[36,99838,99839,99841,99843,99845,99847,99849,99851],{"class":38,"line":4150},[36,99840,99727],{"class":53},[36,99842,508],{"class":114},[36,99844,707],{"class":49},[36,99846,99732],{"class":53},[36,99848,508],{"class":114},[36,99850,707],{"class":49},[36,99852,35748],{"class":53},[36,99854,99855],{"class":38,"line":4155},[36,99856,96406],{"class":57},[36,99858,99859],{"class":38,"line":4161},[36,99860,99861],{"class":57},"array([[24, 23, 22, 21, 20, 19],\n",[36,99863,99864],{"class":38,"line":4166},[36,99865,99866],{"class":57},"       [18, 17, 16, 15, 14, 13],\n",[36,99868,99869],{"class":38,"line":4180},[36,99870,99871],{"class":57},"       [12, 11, 10,  9,  8,  7],\n",[36,99873,99874],{"class":38,"line":4185},[36,99875,99876],{"class":57},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,99878,99879],{"class":38,"line":4191},[36,99880,96406],{"class":57},[19,99882,99883],{},"⑦修改元素",[26,99885,99887],{"className":28,"code":99886,"language":30,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,99888,99889,99894,99912,99917],{"__ignoreMap":31},[36,99890,99891],{"class":38,"line":39},[36,99892,99893],{"class":42},"#获取前两行和前两列\n",[36,99895,99896,99899,99901,99903,99905,99908,99910],{"class":38,"line":46},[36,99897,99898],{"class":53},"sub_a",[36,99900,115],{"class":114},[36,99902,99646],{"class":53},[36,99904,1188],{"class":49},[36,99906,99907],{"class":53},",:",[36,99909,1188],{"class":49},[36,99911,35748],{"class":53},[36,99913,99914],{"class":38,"line":82},[36,99915,99916],{"class":42},"#修改sub_a第一个元素的值\n",[36,99918,99919,99922,99924,99926,99928,99930,99932],{"class":38,"line":88},[36,99920,99921],{"class":53},"sub_a[",[36,99923,713],{"class":49},[36,99925,3059],{"class":53},[36,99927,713],{"class":49},[36,99929,3614],{"class":53},[36,99931,115],{"class":114},[36,99933,99934],{"class":49},"100\n",[19,99936,99937],{},"⑧数组复制copy()",[26,99939,99941],{"className":28,"code":99940,"language":30,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,99942,99943,99948,99958,99963],{"__ignoreMap":31},[36,99944,99945],{"class":38,"line":39},[36,99946,99947],{"class":42},"#数组复制\n",[36,99949,99950,99953,99955],{"class":38,"line":46},[36,99951,99952],{"class":53},"copy_a",[36,99954,115],{"class":114},[36,99956,99957],{"class":53},"np.copy(sub_a)\n",[36,99959,99960],{"class":38,"line":82},[36,99961,99962],{"class":42},"#修改copy_a后不影响原数组\n",[36,99964,99965,99968,99970,99972,99974,99976,99978],{"class":38,"line":88},[36,99966,99967],{"class":53},"copy_a[",[36,99969,713],{"class":49},[36,99971,3059],{"class":53},[36,99973,713],{"class":49},[36,99975,3614],{"class":53},[36,99977,115],{"class":114},[36,99979,99934],{"class":49},[19,99981,99982],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2602,99984,99985],{},"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":31,"searchDepth":46,"depth":46,"links":99987},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99504,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99994,"title":99995,"body":99996,"description":2630,"extension":2631,"meta":100488,"navigation":545,"path":100489,"seo":100490,"stem":100491,"__hash__":100492},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99997,"toc":100480},[99998,100001,100005,100008,100011,100064,100067,100092,100095,100114,100134,100137,100153,100157,100203,100207,100249,100253,100256,100259,100262,100265,100268,100330,100390,100394,100397,100454,100458,100463,100472,100477],[10,99999,99995],{"id":100000},"_5改变数组的维度",[14,100002,100004],{"id":100003},"_51-使用reshape","5.1 使用reshape()",[19,100006,100007],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,100009,100010],{},"①一维数组转换为二维数组",[26,100012,100014],{"className":28,"code":100013,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,100015,100016,100032,100037,100042,100047],{"__ignoreMap":31},[36,100017,100018,100020,100022,100024,100026,100028,100030],{"class":38,"line":39},[36,100019,2923],{"class":53},[36,100021,115],{"class":114},[36,100023,95480],{"class":53},[36,100025,707],{"class":49},[36,100027,3059],{"class":53},[36,100029,3201],{"class":49},[36,100031,61],{"class":53},[36,100033,100034],{"class":38,"line":46},[36,100035,100036],{"class":42},"#将一维数组进行转换\n",[36,100038,100039],{"class":38,"line":82},[36,100040,100041],{"class":42},"#注意点：元素个数不可以变\n",[36,100043,100044],{"class":38,"line":88},[36,100045,100046],{"class":42},"#转换维度要保持一致，不一致就异常！！！\n",[36,100048,100049,100051,100053,100056,100058,100060,100062],{"class":38,"line":195},[36,100050,95784],{"class":53},[36,100052,115],{"class":114},[36,100054,100055],{"class":53},"a.reshape(",[36,100057,1188],{"class":49},[36,100059,3059],{"class":53},[36,100061,3025],{"class":49},[36,100063,61],{"class":53},[19,100065,100066],{},"②一维数组转换为三维数组",[26,100068,100070],{"className":28,"code":100069,"language":30,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,100071,100072],{"__ignoreMap":31},[36,100073,100074,100076,100078,100080,100082,100084,100086,100088,100090],{"class":38,"line":39},[36,100075,97999],{"class":53},[36,100077,115],{"class":114},[36,100079,100055],{"class":53},[36,100081,1188],{"class":49},[36,100083,3059],{"class":53},[36,100085,2767],{"class":49},[36,100087,3059],{"class":53},[36,100089,1188],{"class":49},[36,100091,61],{"class":53},[19,100093,100094],{},"③二维数组转化为一维数组",[26,100096,100098],{"className":28,"code":100097,"language":30,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,100099,100100,100105],{"__ignoreMap":31},[36,100101,100102],{"class":38,"line":39},[36,100103,100104],{"class":42},"#知道元素个数：\n",[36,100106,100107,100110,100112],{"class":38,"line":46},[36,100108,100109],{"class":53},"aa.reshape(",[36,100111,3176],{"class":49},[36,100113,61],{"class":53},[26,100115,100117],{"className":28,"code":100116,"language":30,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,100118,100119,100124],{"__ignoreMap":31},[36,100120,100121],{"class":38,"line":39},[36,100122,100123],{"class":42},"#不知道元素个数，参数传递-1\n",[36,100125,100126,100128,100130,100132],{"class":38,"line":46},[36,100127,100109],{"class":53},[36,100129,508],{"class":114},[36,100131,707],{"class":49},[36,100133,61],{"class":53},[19,100135,100136],{},"④三维数组转换为一维数组",[26,100138,100140],{"className":28,"code":100139,"language":30,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,100141,100142],{"__ignoreMap":31},[36,100143,100144,100147,100149,100151],{"class":38,"line":39},[36,100145,100146],{"class":53},"aaa.reshape(",[36,100148,508],{"class":114},[36,100150,707],{"class":49},[36,100152,61],{"class":53},[14,100154,100156],{"id":100155},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,100158,100160],{"className":28,"code":100159,"language":30,"meta":31,"style":31},"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",[33,100161,100162,100189,100194,100198],{"__ignoreMap":31},[36,100163,100164,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184,100186],{"class":38,"line":39},[36,100165,95784],{"class":53},[36,100167,115],{"class":114},[36,100169,95480],{"class":53},[36,100171,707],{"class":49},[36,100173,3059],{"class":53},[36,100175,3201],{"class":49},[36,100177,95485],{"class":53},[36,100179,1188],{"class":49},[36,100181,3059],{"class":53},[36,100183,3025],{"class":49},[36,100185,3110],{"class":53},[36,100187,100188],{"class":42},"#转换为2行6列的数组\n",[36,100190,100191],{"class":38,"line":46},[36,100192,100193],{"class":53},"aa.revel()\n",[36,100195,100196],{"class":38,"line":82},[36,100197,96042],{"class":42},[36,100199,100200],{"class":38,"line":88},[36,100201,100202],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100204,100206],{"id":100205},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,100208,100210],{"className":28,"code":100209,"language":30,"meta":31,"style":31},"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",[33,100211,100212,100236,100241,100245],{"__ignoreMap":31},[36,100213,100214,100216,100218,100220,100222,100224,100226,100228,100230,100232,100234],{"class":38,"line":39},[36,100215,95784],{"class":53},[36,100217,115],{"class":114},[36,100219,95480],{"class":53},[36,100221,707],{"class":49},[36,100223,3059],{"class":53},[36,100225,3201],{"class":49},[36,100227,95485],{"class":53},[36,100229,1188],{"class":49},[36,100231,3059],{"class":53},[36,100233,3025],{"class":49},[36,100235,61],{"class":53},[36,100237,100238],{"class":38,"line":46},[36,100239,100240],{"class":53},"aa.flatten()\n",[36,100242,100243],{"class":38,"line":82},[36,100244,96042],{"class":42},[36,100246,100247],{"class":38,"line":88},[36,100248,100202],{"class":42},[14,100250,100252],{"id":100251},"_54-使用resize","5.4 使用resize()",[19,100254,100255],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100257,100258],{},"通过resize方法可以改变数组的维度",[19,100260,100261],{},"#resize修改数组维度",[19,100263,100264],{},"#以元组的形式指定形状",[19,100266,100267],{},"#改变的是原数组",[26,100269,100271],{"className":28,"code":100270,"language":30,"meta":31,"style":31},"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",[33,100272,100273,100289,100309,100322,100326],{"__ignoreMap":31},[36,100274,100275,100277,100279,100281,100283,100285,100287],{"class":38,"line":39},[36,100276,2923],{"class":53},[36,100278,115],{"class":114},[36,100280,95480],{"class":53},[36,100282,707],{"class":49},[36,100284,3059],{"class":53},[36,100286,3201],{"class":49},[36,100288,61],{"class":53},[36,100290,100291,100294,100296,100298,100300,100302,100304,100306],{"class":38,"line":46},[36,100292,100293],{"class":53},"a.shape",[36,100295,115],{"class":114},[36,100297,54],{"class":53},[36,100299,1188],{"class":49},[36,100301,3059],{"class":53},[36,100303,3025],{"class":49},[36,100305,3110],{"class":53},[36,100307,100308],{"class":42},"#改变了原数组\n",[36,100310,100311,100313,100315,100318,100320],{"class":38,"line":82},[36,100312,2923],{"class":53},[36,100314,115],{"class":114},[36,100316,100317],{"class":53},"resize((",[36,100319,3176],{"class":49},[36,100321,625],{"class":53},[36,100323,100324],{"class":38,"line":88},[36,100325,96042],{"class":42},[36,100327,100328],{"class":38,"line":195},[36,100329,100202],{"class":42},[26,100331,100333],{"className":28,"code":100332,"language":30,"meta":31,"style":31},"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",[33,100334,100335,100348,100352,100356,100361,100366,100371,100376,100381,100386],{"__ignoreMap":31},[36,100336,100337,100340,100342,100344,100346],{"class":38,"line":39},[36,100338,100339],{"class":53},"a.resize((",[36,100341,3025],{"class":49},[36,100343,3059],{"class":53},[36,100345,1188],{"class":49},[36,100347,625],{"class":53},[36,100349,100350],{"class":38,"line":46},[36,100351,96042],{"class":42},[36,100353,100354],{"class":38,"line":82},[36,100355,96406],{"class":57},[36,100357,100358],{"class":38,"line":88},[36,100359,100360],{"class":57},"array([[ 1,  2],\n",[36,100362,100363],{"class":38,"line":195},[36,100364,100365],{"class":57},"       [ 3,  4],\n",[36,100367,100368],{"class":38,"line":1517},[36,100369,100370],{"class":57},"       [ 5,  6],\n",[36,100372,100373],{"class":38,"line":2421},[36,100374,100375],{"class":57},"       [ 7,  8],\n",[36,100377,100378],{"class":38,"line":2446},[36,100379,100380],{"class":57},"       [ 9, 10],\n",[36,100382,100383],{"class":38,"line":2469},[36,100384,100385],{"class":57},"       [11, 12]])\n",[36,100387,100388],{"class":38,"line":2492},[36,100389,96406],{"class":57},[14,100391,100393],{"id":100392},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100395,100396],{},"改变了原数组",[26,100398,100400],{"className":28,"code":100399,"language":30,"meta":31,"style":31},"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",[33,100401,100402,100418,100434,100438,100442,100446,100450],{"__ignoreMap":31},[36,100403,100404,100406,100408,100410,100412,100414,100416],{"class":38,"line":39},[36,100405,2923],{"class":53},[36,100407,115],{"class":114},[36,100409,95480],{"class":53},[36,100411,707],{"class":49},[36,100413,3059],{"class":53},[36,100415,3201],{"class":49},[36,100417,61],{"class":53},[36,100419,100420,100422,100424,100426,100428,100430,100432],{"class":38,"line":46},[36,100421,100293],{"class":53},[36,100423,115],{"class":114},[36,100425,54],{"class":53},[36,100427,1188],{"class":49},[36,100429,3059],{"class":53},[36,100431,3025],{"class":49},[36,100433,61],{"class":53},[36,100435,100436],{"class":38,"line":82},[36,100437,96042],{"class":42},[36,100439,100440],{"class":38,"line":88},[36,100441,96406],{"class":57},[36,100443,100444],{"class":38,"line":195},[36,100445,99664],{"class":57},[36,100447,100448],{"class":38,"line":1517},[36,100449,99669],{"class":57},[36,100451,100452],{"class":38,"line":2421},[36,100453,96406],{"class":57},[14,100455,100457],{"id":100456},"_56-重要比较","5.6 重要比较：",[19,100459,100460],{},[4000,100461],{"alt":31,"src":100462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100464,100465,100466,100468,100469,100471],{},"口诀：NumPy 函数要么用 ",[33,100467,98439],{},"，要么用 ",[33,100470,33999],{},"，创建结构用 shape，造数据用 size",[19,100473,100474],{},[4000,100475],{"alt":31,"src":100476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2602,100478,100479],{},"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":31,"searchDepth":46,"depth":46,"links":100481},[100482,100483,100484,100485,100486,100487],{"id":100003,"depth":46,"text":100004},{"id":100155,"depth":46,"text":100156},{"id":100205,"depth":46,"text":100206},{"id":100251,"depth":46,"text":100252},{"id":100392,"depth":46,"text":100393},{"id":100456,"depth":46,"text":100457},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99995,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100494,"title":100495,"body":100496,"description":2630,"extension":2631,"meta":101568,"navigation":545,"path":101569,"seo":101570,"stem":101571,"__hash__":101572},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100497,"toc":101562},[100498,100501,100505,100508,100511,100514,100579,100582,100622,100625,100707,100710,100715,100737,100739,100744,100749,100752,100755,100910,100913,101115,101119,101122,101125,101193,101195,101200,101203,101206,101286,101290,101293,101295,101368,101370,101375,101377,101457,101461,101464,101467,101470,101473,101476,101479,101559],[10,100499,100495],{"id":100500},"_6数组的拼接",[14,100502,100504],{"id":100503},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100506,100507],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100509,100510],{},"函数内部传两个数列构成的数列或者元组",[19,100512,100513],{},"①一维数组的拼接",[26,100515,100517],{"className":28,"code":100516,"language":30,"meta":31,"style":31},"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",[33,100518,100519,100539,100559,100564,100569,100574],{"__ignoreMap":31},[36,100520,100521,100523,100525,100527,100529,100531,100533,100535,100537],{"class":38,"line":39},[36,100522,2923],{"class":53},[36,100524,115],{"class":114},[36,100526,95502],{"class":53},[36,100528,707],{"class":49},[36,100530,3059],{"class":53},[36,100532,1188],{"class":49},[36,100534,3059],{"class":53},[36,100536,2767],{"class":49},[36,100538,7188],{"class":53},[36,100540,100541,100543,100545,100547,100549,100551,100553,100555,100557],{"class":38,"line":46},[36,100542,2947],{"class":53},[36,100544,115],{"class":114},[36,100546,95502],{"class":53},[36,100548,2977],{"class":49},[36,100550,3059],{"class":53},[36,100552,1134],{"class":49},[36,100554,3059],{"class":53},[36,100556,3025],{"class":49},[36,100558,7188],{"class":53},[36,100560,100561],{"class":38,"line":82},[36,100562,100563],{"class":42},"#调用concatenate进行数组拼接\n",[36,100565,100566],{"class":38,"line":88},[36,100567,100568],{"class":53},"np.concatenate((a,b))\n",[36,100570,100571],{"class":38,"line":195},[36,100572,100573],{"class":42},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,100575,100576],{"class":38,"line":1517},[36,100577,100578],{"class":42},"#np.concatenate([a,b])\n",[19,100580,100581],{},"②一维多个数组拼接",[26,100583,100585],{"className":28,"code":100584,"language":30,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,100586,100587,100592,100612,100617],{"__ignoreMap":31},[36,100588,100589],{"class":38,"line":39},[36,100590,100591],{"class":42},"#也可以多个数组进行拼接\n",[36,100593,100594,100596,100598,100600,100602,100604,100606,100608,100610],{"class":38,"line":46},[36,100595,2972],{"class":53},[36,100597,115],{"class":114},[36,100599,95502],{"class":53},[36,100601,1317],{"class":49},[36,100603,3059],{"class":53},[36,100605,3151],{"class":49},[36,100607,3059],{"class":53},[36,100609,3201],{"class":49},[36,100611,7188],{"class":53},[36,100613,100614],{"class":38,"line":82},[36,100615,100616],{"class":53},"c\n",[36,100618,100619],{"class":38,"line":88},[36,100620,100621],{"class":53},"np.concatenate((a,b,c))\n",[19,100623,100624],{},"③二维数组拼接",[26,100626,100628],{"className":28,"code":100627,"language":30,"meta":31,"style":31},"#二维数组使用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",[33,100629,100630,100635,100659,100684,100689,100694],{"__ignoreMap":31},[36,100631,100632],{"class":38,"line":39},[36,100633,100634],{"class":42},"#二维数组使用concatenate进行拼接\n",[36,100636,100637,100639,100641,100643,100645,100647,100649,100651,100653,100655,100657],{"class":38,"line":46},[36,100638,95784],{"class":53},[36,100640,115],{"class":114},[36,100642,95480],{"class":53},[36,100644,707],{"class":49},[36,100646,3059],{"class":53},[36,100648,3201],{"class":49},[36,100650,95485],{"class":53},[36,100652,2767],{"class":49},[36,100654,3059],{"class":53},[36,100656,2977],{"class":49},[36,100658,61],{"class":53},[36,100660,100661,100664,100666,100668,100670,100672,100674,100676,100678,100680,100682],{"class":38,"line":82},[36,100662,100663],{"class":53},"bb",[36,100665,115],{"class":114},[36,100667,95480],{"class":53},[36,100669,3018],{"class":49},[36,100671,3059],{"class":53},[36,100673,3318],{"class":49},[36,100675,95485],{"class":53},[36,100677,2767],{"class":49},[36,100679,3059],{"class":53},[36,100681,2977],{"class":49},[36,100683,61],{"class":53},[36,100685,100686],{"class":38,"line":88},[36,100687,100688],{"class":42},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,100690,100691],{"class":38,"line":195},[36,100692,100693],{"class":42},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,100695,100696,100699,100701,100703,100705],{"class":38,"line":1517},[36,100697,100698],{"class":53},"np.concatenate((aa,bb),",[36,100700,50011],{"class":1997},[36,100702,115],{"class":114},[36,100704,713],{"class":49},[36,100706,61],{"class":53},[19,100708,100709],{},"结果：",[19,100711,100712],{},[4000,100713],{"alt":31,"src":100714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,100716,100718],{"className":28,"code":100717,"language":30,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,100719,100720,100725],{"__ignoreMap":31},[36,100721,100722],{"class":38,"line":39},[36,100723,100724],{"class":42},"#指定axis为1进行拼接\n",[36,100726,100727,100729,100731,100733,100735],{"class":38,"line":46},[36,100728,100698],{"class":53},[36,100730,50011],{"class":1997},[36,100732,115],{"class":114},[36,100734,707],{"class":49},[36,100736,61],{"class":53},[19,100738,100709],{},[19,100740,100741],{},[4000,100742],{"alt":31,"src":100743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100745,100746],{},[2839,100747,100748],{},"二维数组总结：0竖着方向，1横着方向",[19,100750,100751],{},"④三维数组拼接",[19,100753,100754],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,100756,100758],{"className":28,"code":100757,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,100759,100760,100765,100793,100823,100828,100845,100850,100855,100860,100877,100882,100887,100892,100905],{"__ignoreMap":31},[36,100761,100762],{"class":38,"line":39},[36,100763,100764],{"class":42},"#两个三行六列\n",[36,100766,100767,100769,100771,100773,100775,100777,100779,100781,100783,100785,100787,100789,100791],{"class":38,"line":46},[36,100768,97999],{"class":53},[36,100770,115],{"class":114},[36,100772,95480],{"class":53},[36,100774,707],{"class":49},[36,100776,3059],{"class":53},[36,100778,3007],{"class":49},[36,100780,95485],{"class":53},[36,100782,1188],{"class":49},[36,100784,3059],{"class":53},[36,100786,2767],{"class":49},[36,100788,3059],{"class":53},[36,100790,3025],{"class":49},[36,100792,61],{"class":53},[36,100794,100795,100798,100800,100802,100804,100806,100809,100811,100813,100815,100817,100819,100821],{"class":38,"line":82},[36,100796,100797],{"class":53},"bbb",[36,100799,115],{"class":114},[36,100801,95480],{"class":53},[36,100803,3018],{"class":49},[36,100805,3059],{"class":53},[36,100807,100808],{"class":49},"137",[36,100810,95485],{"class":53},[36,100812,1188],{"class":49},[36,100814,3059],{"class":53},[36,100816,2767],{"class":49},[36,100818,3059],{"class":53},[36,100820,3025],{"class":49},[36,100822,61],{"class":53},[36,100824,100825],{"class":38,"line":88},[36,100826,100827],{"class":42},"#axis=0\n",[36,100829,100830,100832,100834,100837,100839,100841,100843],{"class":38,"line":195},[36,100831,3371],{"class":53},[36,100833,115],{"class":114},[36,100835,100836],{"class":53},"np.concatenate((aaa,bbb),",[36,100838,50011],{"class":1997},[36,100840,115],{"class":114},[36,100842,713],{"class":49},[36,100844,61],{"class":53},[36,100846,100847],{"class":38,"line":1517},[36,100848,100849],{"class":53},"s.shape\n",[36,100851,100852],{"class":38,"line":2421},[36,100853,100854],{"class":42},"#输出：(4,3,6)\n",[36,100856,100857],{"class":38,"line":2446},[36,100858,100859],{"class":42},"#axis=1\n",[36,100861,100862,100865,100867,100869,100871,100873,100875],{"class":38,"line":2469},[36,100863,100864],{"class":53},"ss",[36,100866,115],{"class":114},[36,100868,100836],{"class":53},[36,100870,50011],{"class":1997},[36,100872,115],{"class":114},[36,100874,707],{"class":49},[36,100876,61],{"class":53},[36,100878,100879],{"class":38,"line":2492},[36,100880,100881],{"class":53},"ss.shape\n",[36,100883,100884],{"class":38,"line":4150},[36,100885,100886],{"class":42},"#输出：(2,6,6)\n",[36,100888,100889],{"class":38,"line":4155},[36,100890,100891],{"class":42},"#axis=2\n",[36,100893,100894,100896,100898,100900,100902],{"class":38,"line":4161},[36,100895,100836],{"class":53},[36,100897,50011],{"class":1997},[36,100899,115],{"class":114},[36,100901,1188],{"class":49},[36,100903,100904],{"class":53},").shape\n",[36,100906,100907],{"class":38,"line":4166},[36,100908,100909],{"class":42},"#输出：（2，3，12）\n",[19,100911,100912],{},"⑤四维数组拼接",[26,100914,100916],{"className":28,"code":100915,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,100917,100918,100922,100950,100978,101003,101029,101033,101046,101051,101055,101067,101072,101076,101088,101093,101098,101110],{"__ignoreMap":31},[36,100919,100920],{"class":38,"line":39},[36,100921,100764],{"class":42},[36,100923,100924,100926,100928,100930,100932,100934,100936,100938,100940,100942,100944,100946,100948],{"class":38,"line":46},[36,100925,97999],{"class":53},[36,100927,115],{"class":114},[36,100929,95480],{"class":53},[36,100931,707],{"class":49},[36,100933,3059],{"class":53},[36,100935,3007],{"class":49},[36,100937,95485],{"class":53},[36,100939,1188],{"class":49},[36,100941,3059],{"class":53},[36,100943,2767],{"class":49},[36,100945,3059],{"class":53},[36,100947,3025],{"class":49},[36,100949,61],{"class":53},[36,100951,100952,100954,100956,100958,100960,100962,100964,100966,100968,100970,100972,100974,100976],{"class":38,"line":82},[36,100953,100797],{"class":53},[36,100955,115],{"class":114},[36,100957,95480],{"class":53},[36,100959,3018],{"class":49},[36,100961,3059],{"class":53},[36,100963,100808],{"class":49},[36,100965,95485],{"class":53},[36,100967,1188],{"class":49},[36,100969,3059],{"class":53},[36,100971,2767],{"class":49},[36,100973,3059],{"class":53},[36,100975,3025],{"class":49},[36,100977,61],{"class":53},[36,100979,100980,100983,100985,100987,100989,100991,100993,100995,100997,100999,101001],{"class":38,"line":88},[36,100981,100982],{"class":53},"aaaa",[36,100984,115],{"class":114},[36,100986,100146],{"class":53},[36,100988,1188],{"class":49},[36,100990,3059],{"class":53},[36,100992,2767],{"class":49},[36,100994,3059],{"class":53},[36,100996,2767],{"class":49},[36,100998,3059],{"class":53},[36,101000,1188],{"class":49},[36,101002,61],{"class":53},[36,101004,101005,101008,101010,101013,101015,101017,101019,101021,101023,101025,101027],{"class":38,"line":195},[36,101006,101007],{"class":53},"bbbb",[36,101009,115],{"class":114},[36,101011,101012],{"class":53},"bbb.reshape(",[36,101014,1188],{"class":49},[36,101016,3059],{"class":53},[36,101018,2767],{"class":49},[36,101020,3059],{"class":53},[36,101022,2767],{"class":49},[36,101024,3059],{"class":53},[36,101026,1188],{"class":49},[36,101028,61],{"class":53},[36,101030,101031],{"class":38,"line":1517},[36,101032,100827],{"class":42},[36,101034,101035,101038,101040,101042,101044],{"class":38,"line":2421},[36,101036,101037],{"class":53},"np.concatenate((aaaa,bbbb),",[36,101039,50011],{"class":1997},[36,101041,115],{"class":114},[36,101043,713],{"class":49},[36,101045,100904],{"class":53},[36,101047,101048],{"class":38,"line":2446},[36,101049,101050],{"class":42},"#结果：（4，3，3，2）\n",[36,101052,101053],{"class":38,"line":2469},[36,101054,100859],{"class":42},[36,101056,101057,101059,101061,101063,101065],{"class":38,"line":2492},[36,101058,101037],{"class":53},[36,101060,50011],{"class":1997},[36,101062,115],{"class":114},[36,101064,707],{"class":49},[36,101066,100904],{"class":53},[36,101068,101069],{"class":38,"line":4150},[36,101070,101071],{"class":42},"#结果：（2，6，3，2）\n",[36,101073,101074],{"class":38,"line":4155},[36,101075,100891],{"class":42},[36,101077,101078,101080,101082,101084,101086],{"class":38,"line":4161},[36,101079,101037],{"class":53},[36,101081,50011],{"class":1997},[36,101083,115],{"class":114},[36,101085,1188],{"class":49},[36,101087,100904],{"class":53},[36,101089,101090],{"class":38,"line":4166},[36,101091,101092],{"class":42},"#结果：（2，3，6，2）\n",[36,101094,101095],{"class":38,"line":4180},[36,101096,101097],{"class":42},"#axis=3\n",[36,101099,101100,101102,101104,101106,101108],{"class":38,"line":4185},[36,101101,101037],{"class":53},[36,101103,50011],{"class":1997},[36,101105,115],{"class":114},[36,101107,2767],{"class":49},[36,101109,100904],{"class":53},[36,101111,101112],{"class":38,"line":4191},[36,101113,101114],{"class":42},"#结果：（2，3，3，4）\n",[14,101116,101118],{"id":101117},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,101120,101121],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,101123,101124],{},"①二维数组",[26,101126,101128],{"className":28,"code":101127,"language":30,"meta":31,"style":31},"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",[33,101129,101130,101154,101178,101183,101188],{"__ignoreMap":31},[36,101131,101132,101134,101136,101138,101140,101142,101144,101146,101148,101150,101152],{"class":38,"line":39},[36,101133,95784],{"class":53},[36,101135,115],{"class":114},[36,101137,95480],{"class":53},[36,101139,707],{"class":49},[36,101141,3059],{"class":53},[36,101143,3201],{"class":49},[36,101145,95485],{"class":53},[36,101147,2767],{"class":49},[36,101149,3059],{"class":53},[36,101151,2977],{"class":49},[36,101153,61],{"class":53},[36,101155,101156,101158,101160,101162,101164,101166,101168,101170,101172,101174,101176],{"class":38,"line":46},[36,101157,100663],{"class":53},[36,101159,115],{"class":114},[36,101161,95480],{"class":53},[36,101163,3018],{"class":49},[36,101165,3059],{"class":53},[36,101167,3318],{"class":49},[36,101169,95485],{"class":53},[36,101171,2767],{"class":49},[36,101173,3059],{"class":53},[36,101175,2977],{"class":49},[36,101177,61],{"class":53},[36,101179,101180],{"class":38,"line":82},[36,101181,101182],{"class":53},"np.hstack((aa,bb))\n",[36,101184,101185],{"class":38,"line":88},[36,101186,101187],{"class":42},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,101189,101190],{"class":38,"line":195},[36,101191,101192],{"class":42},"#np.hstack([aa,bb])\n",[19,101194,100709],{},[19,101196,101197],{},[4000,101198],{"alt":31,"src":101199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,101201,101202],{},"等效于concatenate()函数中axis=1时的情况",[19,101204,101205],{},"②三维数组",[26,101207,101209],{"className":28,"code":101208,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,101210,101211,101215,101243,101271,101276,101281],{"__ignoreMap":31},[36,101212,101213],{"class":38,"line":39},[36,101214,100764],{"class":42},[36,101216,101217,101219,101221,101223,101225,101227,101229,101231,101233,101235,101237,101239,101241],{"class":38,"line":46},[36,101218,97999],{"class":53},[36,101220,115],{"class":114},[36,101222,95480],{"class":53},[36,101224,707],{"class":49},[36,101226,3059],{"class":53},[36,101228,3007],{"class":49},[36,101230,95485],{"class":53},[36,101232,1188],{"class":49},[36,101234,3059],{"class":53},[36,101236,2767],{"class":49},[36,101238,3059],{"class":53},[36,101240,3025],{"class":49},[36,101242,61],{"class":53},[36,101244,101245,101247,101249,101251,101253,101255,101257,101259,101261,101263,101265,101267,101269],{"class":38,"line":82},[36,101246,100797],{"class":53},[36,101248,115],{"class":114},[36,101250,95480],{"class":53},[36,101252,3018],{"class":49},[36,101254,3059],{"class":53},[36,101256,100808],{"class":49},[36,101258,95485],{"class":53},[36,101260,1188],{"class":49},[36,101262,3059],{"class":53},[36,101264,2767],{"class":49},[36,101266,3059],{"class":53},[36,101268,3025],{"class":49},[36,101270,61],{"class":53},[36,101272,101273],{"class":38,"line":88},[36,101274,101275],{"class":42},"#使用hstack\n",[36,101277,101278],{"class":38,"line":195},[36,101279,101280],{"class":53},"np.hstack((aaa,bbb)).shape\n",[36,101282,101283],{"class":38,"line":1517},[36,101284,101285],{"class":42},"#输出：（2，6，6）\n",[14,101287,101289],{"id":101288},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101291,101292],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101294,101124],{},[26,101296,101298],{"className":28,"code":101297,"language":30,"meta":31,"style":31},"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",[33,101299,101300,101324,101348,101353,101358,101363],{"__ignoreMap":31},[36,101301,101302,101304,101306,101308,101310,101312,101314,101316,101318,101320,101322],{"class":38,"line":39},[36,101303,95784],{"class":53},[36,101305,115],{"class":114},[36,101307,95480],{"class":53},[36,101309,707],{"class":49},[36,101311,3059],{"class":53},[36,101313,3201],{"class":49},[36,101315,95485],{"class":53},[36,101317,2767],{"class":49},[36,101319,3059],{"class":53},[36,101321,2977],{"class":49},[36,101323,61],{"class":53},[36,101325,101326,101328,101330,101332,101334,101336,101338,101340,101342,101344,101346],{"class":38,"line":46},[36,101327,100663],{"class":53},[36,101329,115],{"class":114},[36,101331,95480],{"class":53},[36,101333,3018],{"class":49},[36,101335,3059],{"class":53},[36,101337,3318],{"class":49},[36,101339,95485],{"class":53},[36,101341,2767],{"class":49},[36,101343,3059],{"class":53},[36,101345,2977],{"class":49},[36,101347,61],{"class":53},[36,101349,101350],{"class":38,"line":82},[36,101351,101352],{"class":42},"#vstack 垂直方向进行堆叠\n",[36,101354,101355],{"class":38,"line":88},[36,101356,101357],{"class":53},"np.vstack((aa,bb))\n",[36,101359,101360],{"class":38,"line":195},[36,101361,101362],{"class":42},"#与hstack传的参数类似，等价于：\n",[36,101364,101365],{"class":38,"line":1517},[36,101366,101367],{"class":53},"np.vstack([aa,bb])\n",[19,101369,100709],{},[19,101371,101372],{},[4000,101373],{"alt":31,"src":101374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101376,101205],{},[26,101378,101380],{"className":28,"code":101379,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,101381,101382,101386,101414,101442,101447,101452],{"__ignoreMap":31},[36,101383,101384],{"class":38,"line":39},[36,101385,100764],{"class":42},[36,101387,101388,101390,101392,101394,101396,101398,101400,101402,101404,101406,101408,101410,101412],{"class":38,"line":46},[36,101389,97999],{"class":53},[36,101391,115],{"class":114},[36,101393,95480],{"class":53},[36,101395,707],{"class":49},[36,101397,3059],{"class":53},[36,101399,3007],{"class":49},[36,101401,95485],{"class":53},[36,101403,1188],{"class":49},[36,101405,3059],{"class":53},[36,101407,2767],{"class":49},[36,101409,3059],{"class":53},[36,101411,3025],{"class":49},[36,101413,61],{"class":53},[36,101415,101416,101418,101420,101422,101424,101426,101428,101430,101432,101434,101436,101438,101440],{"class":38,"line":82},[36,101417,100797],{"class":53},[36,101419,115],{"class":114},[36,101421,95480],{"class":53},[36,101423,3018],{"class":49},[36,101425,3059],{"class":53},[36,101427,100808],{"class":49},[36,101429,95485],{"class":53},[36,101431,1188],{"class":49},[36,101433,3059],{"class":53},[36,101435,2767],{"class":49},[36,101437,3059],{"class":53},[36,101439,3025],{"class":49},[36,101441,61],{"class":53},[36,101443,101444],{"class":38,"line":88},[36,101445,101446],{"class":42},"#使用vstack\n",[36,101448,101449],{"class":38,"line":195},[36,101450,101451],{"class":53},"np.vstack((aaa,bbb)).shape\n",[36,101453,101454],{"class":38,"line":1517},[36,101455,101456],{"class":42},"#输出：（4，3，6）\n",[14,101458,101460],{"id":101459},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101462,101463],{},"该方法是三维数组特有的方法",[19,101465,101466],{},"也就是说",[19,101468,101469],{},"一维数组拼接方法用：concatenate()",[19,101471,101472],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101474,101475],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101477,101478],{},"四维数组及多维数组只能用concatenate进行拼接",[26,101480,101482],{"className":28,"code":101481,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,101483,101484,101488,101516,101544,101549,101554],{"__ignoreMap":31},[36,101485,101486],{"class":38,"line":39},[36,101487,100764],{"class":42},[36,101489,101490,101492,101494,101496,101498,101500,101502,101504,101506,101508,101510,101512,101514],{"class":38,"line":46},[36,101491,97999],{"class":53},[36,101493,115],{"class":114},[36,101495,95480],{"class":53},[36,101497,707],{"class":49},[36,101499,3059],{"class":53},[36,101501,3007],{"class":49},[36,101503,95485],{"class":53},[36,101505,1188],{"class":49},[36,101507,3059],{"class":53},[36,101509,2767],{"class":49},[36,101511,3059],{"class":53},[36,101513,3025],{"class":49},[36,101515,61],{"class":53},[36,101517,101518,101520,101522,101524,101526,101528,101530,101532,101534,101536,101538,101540,101542],{"class":38,"line":82},[36,101519,100797],{"class":53},[36,101521,115],{"class":114},[36,101523,95480],{"class":53},[36,101525,3018],{"class":49},[36,101527,3059],{"class":53},[36,101529,100808],{"class":49},[36,101531,95485],{"class":53},[36,101533,1188],{"class":49},[36,101535,3059],{"class":53},[36,101537,2767],{"class":49},[36,101539,3059],{"class":53},[36,101541,3025],{"class":49},[36,101543,61],{"class":53},[36,101545,101546],{"class":38,"line":88},[36,101547,101548],{"class":42},"#使用dstack\n",[36,101550,101551],{"class":38,"line":195},[36,101552,101553],{"class":53},"np.dstack((aaa,bbb)).shape\n",[36,101555,101556],{"class":38,"line":1517},[36,101557,101558],{"class":42},"#结果：（2，3，12）\n",[2602,101560,101561],{},"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":31,"searchDepth":46,"depth":46,"links":101563},[101564,101565,101566,101567],{"id":100503,"depth":46,"text":100504},{"id":101117,"depth":46,"text":101118},{"id":101288,"depth":46,"text":101289},{"id":101459,"depth":46,"text":101460},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100495,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101574,"title":101575,"body":101576,"description":2630,"extension":2631,"meta":101851,"navigation":545,"path":101852,"seo":101853,"stem":101854,"__hash__":101855},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101577,"toc":101849},[101578,101581,101584,101678,101681,101684,101687,101690,101693,101696,101699,101702,101846],[10,101579,101575],{"id":101580},"_7数组转置",[19,101582,101583],{},"使用transpose()函数",[26,101585,101587],{"className":28,"code":101586,"language":30,"meta":31,"style":31},"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",[33,101588,101589,101599,101623,101628,101633,101638,101643,101651,101655,101659,101664,101669,101674],{"__ignoreMap":31},[36,101590,101591,101593,101595,101597],{"class":38,"line":39},[36,101592,537],{"class":114},[36,101594,33884],{"class":53},[36,101596,33887],{"class":114},[36,101598,33890],{"class":53},[36,101600,101601,101603,101605,101607,101609,101611,101613,101615,101617,101619,101621],{"class":38,"line":46},[36,101602,2923],{"class":53},[36,101604,115],{"class":114},[36,101606,34220],{"class":53},[36,101608,707],{"class":49},[36,101610,3059],{"class":53},[36,101612,3201],{"class":49},[36,101614,95485],{"class":53},[36,101616,2977],{"class":49},[36,101618,3059],{"class":53},[36,101620,2767],{"class":49},[36,101622,61],{"class":53},[36,101624,101625],{"class":38,"line":82},[36,101626,101627],{"class":42},"#二维数组转置\n",[36,101629,101630],{"class":38,"line":88},[36,101631,101632],{"class":42},"#调用transpose()函数\n",[36,101634,101635],{"class":38,"line":195},[36,101636,101637],{"class":53},"a.transpose()\n",[36,101639,101640],{"class":38,"line":1517},[36,101641,101642],{"class":42},"#对于二维数组也可以采用.T来实现\n",[36,101644,101645,101648],{"class":38,"line":2421},[36,101646,101647],{"class":53},"a.T",[36,101649,101650],{"class":42},"#与上述代码一样\n",[36,101652,101653],{"class":38,"line":2446},[36,101654,96042],{"class":42},[36,101656,101657],{"class":38,"line":2469},[36,101658,96406],{"class":57},[36,101660,101661],{"class":38,"line":2492},[36,101662,101663],{"class":57},"array([[ 1,  4,  7, 10],\n",[36,101665,101666],{"class":38,"line":4150},[36,101667,101668],{"class":57},"       [ 2,  5,  8, 11],\n",[36,101670,101671],{"class":38,"line":4155},[36,101672,101673],{"class":57},"       [ 3,  6,  9, 12]])\n",[36,101675,101676],{"class":38,"line":4161},[36,101677,96406],{"class":57},[19,101679,101680],{},"也可以使用np.transpose()的形式",[19,101682,101683],{},"#多维数组进行转置 np.transpose()",[19,101685,101686],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101688,101689],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101691,101692],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101694,101695],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101697,101698],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101700,101701],{},"四维及以上的数组也是一样的道理",[26,101703,101705],{"className":28,"code":101704,"language":30,"meta":31,"style":31},"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",[33,101706,101707,101735,101740,101745,101750,101768,101773,101805,101810,101815,101820,101841],{"__ignoreMap":31},[36,101708,101709,101711,101713,101715,101717,101719,101721,101723,101725,101727,101729,101731,101733],{"class":38,"line":39},[36,101710,3496],{"class":53},[36,101712,115],{"class":114},[36,101714,95480],{"class":53},[36,101716,707],{"class":49},[36,101718,3059],{"class":53},[36,101720,3007],{"class":49},[36,101722,95485],{"class":53},[36,101724,2767],{"class":49},[36,101726,3059],{"class":53},[36,101728,3025],{"class":49},[36,101730,3059],{"class":53},[36,101732,1188],{"class":49},[36,101734,61],{"class":53},[36,101736,101737],{"class":38,"line":46},[36,101738,101739],{"class":53},"x.shape\n",[36,101741,101742],{"class":38,"line":82},[36,101743,101744],{"class":42},"#结果：（3,6,2）\n",[36,101746,101747],{"class":38,"line":88},[36,101748,101749],{"class":42},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,101751,101752,101755,101757,101759,101761,101763,101765],{"class":38,"line":195},[36,101753,101754],{"class":53},"np.transpose(x,(",[36,101756,1188],{"class":49},[36,101758,3059],{"class":53},[36,101760,707],{"class":49},[36,101762,3059],{"class":53},[36,101764,713],{"class":49},[36,101766,101767],{"class":53},")).shape\n",[36,101769,101770],{"class":38,"line":1517},[36,101771,101772],{"class":42},"#结果：(2,6,3)\n",[36,101774,101775,101777,101779,101781,101783,101785,101787,101789,101791,101793,101795,101797,101799,101801,101803],{"class":38,"line":2421},[36,101776,100982],{"class":53},[36,101778,115],{"class":114},[36,101780,95480],{"class":53},[36,101782,707],{"class":49},[36,101784,3059],{"class":53},[36,101786,3007],{"class":49},[36,101788,95485],{"class":53},[36,101790,2767],{"class":49},[36,101792,3059],{"class":53},[36,101794,1188],{"class":49},[36,101796,3059],{"class":53},[36,101798,707],{"class":49},[36,101800,3059],{"class":53},[36,101802,3025],{"class":49},[36,101804,61],{"class":53},[36,101806,101807],{"class":38,"line":2446},[36,101808,101809],{"class":53},"aaaa.shape\n",[36,101811,101812],{"class":38,"line":2469},[36,101813,101814],{"class":42},"#结果：（3，2，1，6）\n",[36,101816,101817],{"class":38,"line":2492},[36,101818,101819],{"class":42},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,101821,101822,101825,101827,101829,101831,101833,101835,101837,101839],{"class":38,"line":4150},[36,101823,101824],{"class":53},"np.transpose(aaaa,(",[36,101826,707],{"class":49},[36,101828,3059],{"class":53},[36,101830,1188],{"class":49},[36,101832,3059],{"class":53},[36,101834,713],{"class":49},[36,101836,3059],{"class":53},[36,101838,2767],{"class":49},[36,101840,101767],{"class":53},[36,101842,101843],{"class":38,"line":4155},[36,101844,101845],{"class":42},"#结果：(2,1,3,6)\n",[2602,101847,101848],{},"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":31,"searchDepth":46,"depth":46,"links":101850},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101575,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101857,"title":101858,"body":101859,"description":2630,"extension":2631,"meta":102593,"navigation":545,"path":102594,"seo":102595,"stem":102596,"__hash__":102597},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101860,"toc":102591},[101861,101864,101867,101870,101873,101876,101879,101882,101885,101994,101997,102000,102588],[10,101862,101858],{"id":101863},"_8数组分割",[19,101865,101866],{},"split分割",[19,101868,101869],{},"numpy.split(ary,indics_or_sections,axis)",[19,101871,101872],{},"解释：",[19,101874,101875],{},"ary:被分割的数组",[19,101877,101878],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101880,101881],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101883,101884],{},"①一维数组的分割",[26,101886,101888],{"className":28,"code":101887,"language":30,"meta":31,"style":31},"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",[33,101889,101890,101906,101911,101920,101924,101929,101937,101941,101946,101951,101964,101968,101973,101985,101989],{"__ignoreMap":31},[36,101891,101892,101894,101896,101898,101900,101902,101904],{"class":38,"line":39},[36,101893,2923],{"class":53},[36,101895,115],{"class":114},[36,101897,95480],{"class":53},[36,101899,707],{"class":49},[36,101901,3059],{"class":53},[36,101903,3101],{"class":49},[36,101905,61],{"class":53},[36,101907,101908],{"class":38,"line":46},[36,101909,101910],{"class":42},"#如果传入整数，必须能够平分，否则会报错\n",[36,101912,101913,101916,101918],{"class":38,"line":82},[36,101914,101915],{"class":53},"np.split(a,",[36,101917,1188],{"class":49},[36,101919,61],{"class":53},[36,101921,101922],{"class":38,"line":88},[36,101923,96042],{"class":42},[36,101925,101926],{"class":38,"line":195},[36,101927,101928],{"class":42},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,101930,101931,101933,101935],{"class":38,"line":1517},[36,101932,101915],{"class":53},[36,101934,2977],{"class":49},[36,101936,61],{"class":53},[36,101938,101939],{"class":38,"line":2421},[36,101940,96042],{"class":42},[36,101942,101943],{"class":38,"line":2446},[36,101944,101945],{"class":42},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,101947,101948],{"class":38,"line":2469},[36,101949,101950],{"class":42},"#传入数组\n",[36,101952,101953,101956,101958,101960,101962],{"class":38,"line":2492},[36,101954,101955],{"class":53},"np.split(a,[",[36,101957,2767],{"class":49},[36,101959,3059],{"class":53},[36,101961,1134],{"class":49},[36,101963,7188],{"class":53},[36,101965,101966],{"class":38,"line":4150},[36,101967,96042],{"class":42},[36,101969,101970],{"class":38,"line":4155},[36,101971,101972],{"class":42},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,101974,101975,101977,101979,101981,101983],{"class":38,"line":4161},[36,101976,101955],{"class":53},[36,101978,1134],{"class":49},[36,101980,3059],{"class":53},[36,101982,3050],{"class":49},[36,101984,7188],{"class":53},[36,101986,101987],{"class":38,"line":4166},[36,101988,96042],{"class":42},[36,101990,101991],{"class":38,"line":4180},[36,101992,101993],{"class":42},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101995,101996],{},"②二维数组的分割",[19,101998,101999],{},"使用split()",[26,102001,102003],{"className":28,"code":102002,"language":30,"meta":31,"style":31},"#二维数组分割\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",[33,102004,102005,102010,102034,102039,102048,102052,102056,102061,102066,102071,102076,102081,102086,102091,102095,102108,102112,102116,102120,102124,102128,102133,102138,102143,102147,102152,102168,102172,102176,102181,102186,102191,102196,102201,102206,102211,102216,102221,102226,102231,102236,102241,102246,102251,102256,102261,102266,102270,102274,102294,102298,102302,102307,102312,102317,102322,102327,102332,102337,102342,102347,102352,102357,102362,102367,102372,102377,102382,102387,102392,102396,102401,102410,102414,102418,102422,102426,102430,102434,102438,102442,102446,102455,102459,102463,102467,102471,102475,102479,102483,102487,102491,102495,102499,102503,102507,102511,102515,102519,102523,102527,102531,102535,102539,102552,102556,102560,102564,102568,102572,102576,102580,102584],{"__ignoreMap":31},[36,102006,102007],{"class":38,"line":39},[36,102008,102009],{"class":42},"#二维数组分割\n",[36,102011,102012,102014,102016,102018,102020,102022,102024,102026,102028,102030,102032],{"class":38,"line":46},[36,102013,95784],{"class":53},[36,102015,115],{"class":114},[36,102017,95480],{"class":53},[36,102019,707],{"class":49},[36,102021,3059],{"class":53},[36,102023,3007],{"class":49},[36,102025,95485],{"class":53},[36,102027,3025],{"class":49},[36,102029,3059],{"class":53},[36,102031,3025],{"class":49},[36,102033,61],{"class":53},[36,102035,102036],{"class":38,"line":82},[36,102037,102038],{"class":42},"#默认axis=0  传入整数平均分,按行来的\n",[36,102040,102041,102044,102046],{"class":38,"line":88},[36,102042,102043],{"class":53},"np.split(aa,",[36,102045,2767],{"class":49},[36,102047,61],{"class":53},[36,102049,102050],{"class":38,"line":195},[36,102051,98240],{"class":42},[36,102053,102054],{"class":38,"line":1517},[36,102055,96406],{"class":57},[36,102057,102058],{"class":38,"line":2421},[36,102059,102060],{"class":57},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,102062,102063],{"class":38,"line":2446},[36,102064,102065],{"class":57},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,102067,102068],{"class":38,"line":2469},[36,102069,102070],{"class":57}," array([[13, 14, 15, 16, 17, 18],\n",[36,102072,102073],{"class":38,"line":2492},[36,102074,102075],{"class":57},"        [19, 20, 21, 22, 23, 24]]),\n",[36,102077,102078],{"class":38,"line":4150},[36,102079,102080],{"class":57}," array([[25, 26, 27, 28, 29, 30],\n",[36,102082,102083],{"class":38,"line":4155},[36,102084,102085],{"class":57},"        [31, 32, 33, 34, 35, 36]])]\n",[36,102087,102088],{"class":38,"line":4161},[36,102089,102090],{"class":57}," '''\n",[36,102092,102093],{"class":38,"line":4166},[36,102094,101950],{"class":42},[36,102096,102097,102100,102102,102104,102106],{"class":38,"line":4180},[36,102098,102099],{"class":53},"np.split(aa,[",[36,102101,1188],{"class":49},[36,102103,3059],{"class":53},[36,102105,1134],{"class":49},[36,102107,7188],{"class":53},[36,102109,102110],{"class":38,"line":4185},[36,102111,98240],{"class":42},[36,102113,102114],{"class":38,"line":4191},[36,102115,96406],{"class":57},[36,102117,102118],{"class":38,"line":4212},[36,102119,102060],{"class":57},[36,102121,102122],{"class":38,"line":4217},[36,102123,102065],{"class":57},[36,102125,102126],{"class":38,"line":4231},[36,102127,102070],{"class":57},[36,102129,102130],{"class":38,"line":4236},[36,102131,102132],{"class":57},"        [19, 20, 21, 22, 23, 24],\n",[36,102134,102135],{"class":38,"line":4264},[36,102136,102137],{"class":57},"        [25, 26, 27, 28, 29, 30]]),\n",[36,102139,102140],{"class":38,"line":4269},[36,102141,102142],{"class":57}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,102144,102145],{"class":38,"line":4286},[36,102146,96406],{"class":57},[36,102148,102149],{"class":38,"line":4291},[36,102150,102151],{"class":42},"#axis=1 按照列来分\n",[36,102153,102154,102156,102158,102160,102162,102164,102166],{"class":38,"line":4296},[36,102155,102043],{"class":53},[36,102157,2767],{"class":49},[36,102159,3059],{"class":53},[36,102161,50011],{"class":1997},[36,102163,115],{"class":114},[36,102165,707],{"class":49},[36,102167,61],{"class":53},[36,102169,102170],{"class":38,"line":4301},[36,102171,98240],{"class":42},[36,102173,102174],{"class":38,"line":4315},[36,102175,96406],{"class":57},[36,102177,102178],{"class":38,"line":4320},[36,102179,102180],{"class":57},"[array([[ 1,  2],\n",[36,102182,102183],{"class":38,"line":5109},[36,102184,102185],{"class":57},"        [ 7,  8],\n",[36,102187,102188],{"class":38,"line":5123},[36,102189,102190],{"class":57},"        [13, 14],\n",[36,102192,102193],{"class":38,"line":5131},[36,102194,102195],{"class":57},"        [19, 20],\n",[36,102197,102198],{"class":38,"line":5136},[36,102199,102200],{"class":57},"        [25, 26],\n",[36,102202,102203],{"class":38,"line":5142},[36,102204,102205],{"class":57},"        [31, 32]]),\n",[36,102207,102208],{"class":38,"line":5148},[36,102209,102210],{"class":57}," array([[ 3,  4],\n",[36,102212,102213],{"class":38,"line":5153},[36,102214,102215],{"class":57},"        [ 9, 10],\n",[36,102217,102218],{"class":38,"line":10475},[36,102219,102220],{"class":57},"        [15, 16],\n",[36,102222,102223],{"class":38,"line":10499},[36,102224,102225],{"class":57},"        [21, 22],\n",[36,102227,102228],{"class":38,"line":10504},[36,102229,102230],{"class":57},"        [27, 28],\n",[36,102232,102233],{"class":38,"line":10510},[36,102234,102235],{"class":57},"        [33, 34]]),\n",[36,102237,102238],{"class":38,"line":10537},[36,102239,102240],{"class":57}," array([[ 5,  6],\n",[36,102242,102243],{"class":38,"line":10542},[36,102244,102245],{"class":57},"        [11, 12],\n",[36,102247,102248],{"class":38,"line":10548},[36,102249,102250],{"class":57},"        [17, 18],\n",[36,102252,102253],{"class":38,"line":10560},[36,102254,102255],{"class":57},"        [23, 24],\n",[36,102257,102258],{"class":38,"line":10572},[36,102259,102260],{"class":57},"        [29, 30],\n",[36,102262,102263],{"class":38,"line":10584},[36,102264,102265],{"class":57},"        [35, 36]])]\n",[36,102267,102268],{"class":38,"line":12241},[36,102269,102090],{"class":57},[36,102271,102272],{"class":38,"line":12266},[36,102273,101950],{"class":42},[36,102275,102276,102278,102280,102282,102284,102286,102288,102290,102292],{"class":38,"line":12289},[36,102277,102099],{"class":53},[36,102279,707],{"class":49},[36,102281,3059],{"class":53},[36,102283,1188],{"class":49},[36,102285,44109],{"class":53},[36,102287,50011],{"class":1997},[36,102289,115],{"class":114},[36,102291,707],{"class":49},[36,102293,61],{"class":53},[36,102295,102296],{"class":38,"line":12313},[36,102297,96042],{"class":42},[36,102299,102300],{"class":38,"line":12318},[36,102301,96406],{"class":57},[36,102303,102304],{"class":38,"line":12323},[36,102305,102306],{"class":57},"[array([[ 1],\n",[36,102308,102309],{"class":38,"line":12328},[36,102310,102311],{"class":57},"        [ 7],\n",[36,102313,102314],{"class":38,"line":12337},[36,102315,102316],{"class":57},"        [13],\n",[36,102318,102319],{"class":38,"line":12342},[36,102320,102321],{"class":57},"        [19],\n",[36,102323,102324],{"class":38,"line":12348},[36,102325,102326],{"class":57},"        [25],\n",[36,102328,102329],{"class":38,"line":12369},[36,102330,102331],{"class":57},"        [31]]),\n",[36,102333,102334],{"class":38,"line":12375},[36,102335,102336],{"class":57}," array([[ 2],\n",[36,102338,102339],{"class":38,"line":12389},[36,102340,102341],{"class":57},"        [ 8],\n",[36,102343,102344],{"class":38,"line":12395},[36,102345,102346],{"class":57},"        [14],\n",[36,102348,102349],{"class":38,"line":12422},[36,102350,102351],{"class":57},"        [20],\n",[36,102353,102354],{"class":38,"line":12431},[36,102355,102356],{"class":57},"        [26],\n",[36,102358,102359],{"class":38,"line":12437},[36,102360,102361],{"class":57},"        [32]]),\n",[36,102363,102364],{"class":38,"line":12445},[36,102365,102366],{"class":57}," array([[ 3,  4,  5,  6],\n",[36,102368,102369],{"class":38,"line":12450},[36,102370,102371],{"class":57},"        [ 9, 10, 11, 12],\n",[36,102373,102374],{"class":38,"line":19122},[36,102375,102376],{"class":57},"        [15, 16, 17, 18],\n",[36,102378,102379],{"class":38,"line":19128},[36,102380,102381],{"class":57},"        [21, 22, 23, 24],\n",[36,102383,102384],{"class":38,"line":19151},[36,102385,102386],{"class":57},"        [27, 28, 29, 30],\n",[36,102388,102389],{"class":38,"line":19157},[36,102390,102391],{"class":57},"        [33, 34, 35, 36]])]\n",[36,102393,102394],{"class":38,"line":19180},[36,102395,96406],{"class":57},[36,102397,102398],{"class":38,"line":19194},[36,102399,102400],{"class":42},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,102402,102403,102406,102408],{"class":38,"line":19214},[36,102404,102405],{"class":53},"np.vsplit(aa,",[36,102407,2767],{"class":49},[36,102409,61],{"class":53},[36,102411,102412],{"class":38,"line":19220},[36,102413,96042],{"class":42},[36,102415,102416],{"class":38,"line":19231},[36,102417,96406],{"class":57},[36,102419,102420],{"class":38,"line":19254},[36,102421,102060],{"class":57},[36,102423,102424],{"class":38,"line":19276},[36,102425,102065],{"class":57},[36,102427,102428],{"class":38,"line":19281},[36,102429,102070],{"class":57},[36,102431,102432],{"class":38,"line":19287},[36,102433,102075],{"class":57},[36,102435,102436],{"class":38,"line":19301},[36,102437,102080],{"class":57},[36,102439,102440],{"class":38,"line":19314},[36,102441,102085],{"class":57},[36,102443,102444],{"class":38,"line":19319},[36,102445,96406],{"class":57},[36,102447,102448,102451,102453],{"class":38,"line":19333},[36,102449,102450],{"class":53},"np.hsplit(aa,",[36,102452,2767],{"class":49},[36,102454,61],{"class":53},[36,102456,102457],{"class":38,"line":19338},[36,102458,96042],{"class":42},[36,102460,102461],{"class":38,"line":19344},[36,102462,96406],{"class":57},[36,102464,102465],{"class":38,"line":19349},[36,102466,102180],{"class":57},[36,102468,102469],{"class":38,"line":19363},[36,102470,102185],{"class":57},[36,102472,102473],{"class":38,"line":19368},[36,102474,102190],{"class":57},[36,102476,102477],{"class":38,"line":19373},[36,102478,102195],{"class":57},[36,102480,102481],{"class":38,"line":19387},[36,102482,102200],{"class":57},[36,102484,102485],{"class":38,"line":19399},[36,102486,102205],{"class":57},[36,102488,102489],{"class":38,"line":19404},[36,102490,102210],{"class":57},[36,102492,102493],{"class":38,"line":19417},[36,102494,102215],{"class":57},[36,102496,102497],{"class":38,"line":19422},[36,102498,102220],{"class":57},[36,102500,102501],{"class":38,"line":19427},[36,102502,102225],{"class":57},[36,102504,102505],{"class":38,"line":19432},[36,102506,102230],{"class":57},[36,102508,102509],{"class":38,"line":19445},[36,102510,102235],{"class":57},[36,102512,102513],{"class":38,"line":19450},[36,102514,102240],{"class":57},[36,102516,102517],{"class":38,"line":35135},[36,102518,102245],{"class":57},[36,102520,102521],{"class":38,"line":35141},[36,102522,102250],{"class":57},[36,102524,102525],{"class":38,"line":35147},[36,102526,102255],{"class":57},[36,102528,102529],{"class":38,"line":35153},[36,102530,102260],{"class":57},[36,102532,102533],{"class":38,"line":35159},[36,102534,102265],{"class":57},[36,102536,102537],{"class":38,"line":35170},[36,102538,96406],{"class":57},[36,102540,102541,102544,102546,102548,102550],{"class":38,"line":35176},[36,102542,102543],{"class":53},"np.vsplit(aa,[",[36,102545,1188],{"class":49},[36,102547,3059],{"class":53},[36,102549,1134],{"class":49},[36,102551,7188],{"class":53},[36,102553,102554],{"class":38,"line":35196},[36,102555,96042],{"class":42},[36,102557,102558],{"class":38,"line":35202},[36,102559,96406],{"class":57},[36,102561,102562],{"class":38,"line":35213},[36,102563,102060],{"class":57},[36,102565,102566],{"class":38,"line":35219},[36,102567,102065],{"class":57},[36,102569,102570],{"class":38,"line":35225},[36,102571,102070],{"class":57},[36,102573,102574],{"class":38,"line":35231},[36,102575,102132],{"class":57},[36,102577,102578],{"class":38,"line":35237},[36,102579,102137],{"class":57},[36,102581,102582],{"class":38,"line":35243},[36,102583,102142],{"class":57},[36,102585,102586],{"class":38,"line":35249},[36,102587,102090],{"class":57},[2602,102589,102590],{},"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":31,"searchDepth":46,"depth":46,"links":102592},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101858,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102599,"title":102600,"body":102601,"description":2630,"extension":2631,"meta":103095,"navigation":545,"path":103096,"seo":103097,"stem":103098,"__hash__":103099},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102602,"toc":103086},[102603,102606,102609,102634,102638,102697,102749,102753,102755,102791,102845,102847,102885,102956,102960,102965,102969,102972,103005,103008,103012,103015,103018,103021,103024,103029,103033,103036,103039,103042,103045,103050,103054,103059,103062,103083],[10,102604,102600],{"id":102605},"_9数学函数",[19,102607,102608],{},"补充回顾：python的列表推导式",[26,102610,102612],{"className":28,"code":102611,"language":30,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,102613,102614],{"__ignoreMap":31},[36,102615,102616,102618,102620,102622,102625,102627,102629,102631],{"class":38,"line":39},[36,102617,3566],{"class":53},[36,102619,707],{"class":49},[36,102621,1065],{"class":114},[36,102623,102624],{"class":53},"i ",[36,102626,5556],{"class":114},[36,102628,11964],{"class":53},[36,102630,28556],{"class":114},[36,102632,102633],{"class":53}," a]\n",[14,102635,102637],{"id":102636},"_91-求倒数","9.1 求倒数",[26,102639,102641],{"className":28,"code":102640,"language":30,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,102642,102643,102648,102676,102688],{"__ignoreMap":31},[36,102644,102645],{"class":38,"line":39},[36,102646,102647],{"class":42},"#数组求倒数\n",[36,102649,102650,102652,102654,102656,102658,102660,102662,102664,102666,102668,102670,102672,102674],{"class":38,"line":46},[36,102651,2923],{"class":53},[36,102653,115],{"class":114},[36,102655,3566],{"class":53},[36,102657,707],{"class":49},[36,102659,3059],{"class":53},[36,102661,1188],{"class":49},[36,102663,3059],{"class":53},[36,102665,2767],{"class":49},[36,102667,3059],{"class":53},[36,102669,2977],{"class":49},[36,102671,3059],{"class":53},[36,102673,1134],{"class":49},[36,102675,35748],{"class":53},[36,102677,102678,102680,102682,102685],{"class":38,"line":82},[36,102679,2947],{"class":53},[36,102681,115],{"class":114},[36,102683,102684],{"class":53},"np.array(a)",[36,102686,102687],{"class":42},"#将列表转换为数组\n",[36,102689,102690,102692,102694],{"class":38,"line":88},[36,102691,707],{"class":49},[36,102693,1065],{"class":114},[36,102695,102696],{"class":53},"b\n",[26,102698,102700],{"className":28,"code":102699,"language":30,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,102701,102702,102730,102739,102744],{"__ignoreMap":31},[36,102703,102704,102706,102708,102710,102712,102714,102716,102718,102720,102722,102724,102726,102728],{"class":38,"line":39},[36,102705,2923],{"class":53},[36,102707,115],{"class":114},[36,102709,3566],{"class":53},[36,102711,707],{"class":49},[36,102713,3059],{"class":53},[36,102715,1188],{"class":49},[36,102717,3059],{"class":53},[36,102719,2767],{"class":49},[36,102721,3059],{"class":53},[36,102723,2977],{"class":49},[36,102725,3059],{"class":53},[36,102727,1134],{"class":49},[36,102729,35748],{"class":53},[36,102731,102732,102734,102736],{"class":38,"line":46},[36,102733,2947],{"class":53},[36,102735,115],{"class":114},[36,102737,102738],{"class":53},"np.array(a)\n",[36,102740,102741],{"class":38,"line":82},[36,102742,102743],{"class":42},"#调用numpy中的函数reciprocal()\n",[36,102745,102746],{"class":38,"line":88},[36,102747,102748],{"class":53},"np.reciprocal(b)\n",[14,102750,102752],{"id":102751},"_92-求平方","9.2 求平方",[19,102754,97008],{},[26,102756,102758],{"className":28,"code":102757,"language":30,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,102759,102760,102765,102770,102786],{"__ignoreMap":31},[36,102761,102762],{"class":38,"line":39},[36,102763,102764],{"class":42},"#square()，求平方\n",[36,102766,102767],{"class":38,"line":46},[36,102768,102769],{"class":42},"#一维数组\n",[36,102771,102772,102774,102776,102778,102780,102782,102784],{"class":38,"line":82},[36,102773,2923],{"class":53},[36,102775,115],{"class":114},[36,102777,95480],{"class":53},[36,102779,707],{"class":49},[36,102781,3059],{"class":53},[36,102783,1317],{"class":49},[36,102785,61],{"class":53},[36,102787,102788],{"class":38,"line":88},[36,102789,102790],{"class":53},"np.square(a)\n",[26,102792,102794],{"className":28,"code":102793,"language":30,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,102795,102796,102801,102806,102827],{"__ignoreMap":31},[36,102797,102798],{"class":38,"line":39},[36,102799,102800],{"class":42},"#或者通过循环遍历的形式来计算\n",[36,102802,102803],{"class":38,"line":46},[36,102804,102805],{"class":42},"#这是一个列表\n",[36,102807,102808,102811,102813,102815,102817,102819,102821,102824],{"class":38,"line":82},[36,102809,102810],{"class":53},"[i",[36,102812,1050],{"class":114},[36,102814,102624],{"class":53},[36,102816,5556],{"class":114},[36,102818,11964],{"class":53},[36,102820,28556],{"class":114},[36,102822,102823],{"class":53}," a]",[36,102825,102826],{"class":42},"#这个求完之后在数列当中\n",[36,102828,102829,102832,102834,102836,102838,102840,102842],{"class":38,"line":88},[36,102830,102831],{"class":53},"np.array([i",[36,102833,1050],{"class":114},[36,102835,102624],{"class":53},[36,102837,5556],{"class":114},[36,102839,11964],{"class":53},[36,102841,28556],{"class":114},[36,102843,102844],{"class":53}," a])\n",[19,102846,95769],{},[26,102848,102850],{"className":28,"code":102849,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,102851,102852,102856,102880],{"__ignoreMap":31},[36,102853,102854],{"class":38,"line":39},[36,102855,95779],{"class":42},[36,102857,102858,102860,102862,102864,102866,102868,102870,102872,102874,102876,102878],{"class":38,"line":46},[36,102859,95784],{"class":53},[36,102861,115],{"class":114},[36,102863,95480],{"class":53},[36,102865,707],{"class":49},[36,102867,3059],{"class":53},[36,102869,3201],{"class":49},[36,102871,95485],{"class":53},[36,102873,2977],{"class":49},[36,102875,3059],{"class":53},[36,102877,2767],{"class":49},[36,102879,61],{"class":53},[36,102881,102882],{"class":38,"line":82},[36,102883,102884],{"class":53},"np.square(aa)\n",[26,102886,102888],{"className":28,"code":102887,"language":30,"meta":31,"style":31},"#传统的方式\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",[33,102889,102890,102895,102904,102920,102936,102951],{"__ignoreMap":31},[36,102891,102892],{"class":38,"line":39},[36,102893,102894],{"class":42},"#传统的方式\n",[36,102896,102897,102899,102901],{"class":38,"line":46},[36,102898,100663],{"class":53},[36,102900,115],{"class":114},[36,102902,102903],{"class":53},"np.empty_like(aa)\n",[36,102905,102906,102908,102910,102912,102914,102916,102918],{"class":38,"line":82},[36,102907,5556],{"class":114},[36,102909,11964],{"class":53},[36,102911,28556],{"class":114},[36,102913,34946],{"class":49},[36,102915,54],{"class":53},[36,102917,2977],{"class":49},[36,102919,33290],{"class":53},[36,102921,102922,102924,102926,102928,102930,102932,102934],{"class":38,"line":88},[36,102923,5732],{"class":114},[36,102925,12025],{"class":53},[36,102927,28556],{"class":114},[36,102929,34946],{"class":49},[36,102931,54],{"class":53},[36,102933,2767],{"class":49},[36,102935,33290],{"class":53},[36,102937,102938,102941,102943,102946,102948],{"class":38,"line":195},[36,102939,102940],{"class":53},"        bb[i,j]",[36,102942,115],{"class":114},[36,102944,102945],{"class":53},"aa[i,j]",[36,102947,1050],{"class":114},[36,102949,102950],{"class":53},"aa[i,j]\n",[36,102952,102953],{"class":38,"line":1517},[36,102954,102955],{"class":53},"bb\n",[14,102957,102959],{"id":102958},"_93-求各元素的符号","9.3 求各元素的符号",[19,102961,102962],{},[4000,102963],{"alt":31,"src":102964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102966,102968],{"id":102967},"_94-modf函数","9.4 modf函数",[19,102970,102971],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,102973,102975],{"className":28,"code":102974,"language":30,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,102976,102977,103000],{"__ignoreMap":31},[36,102978,102979,102981,102983,102985,102987,102989,102991,102993,102995,102998],{"class":38,"line":39},[36,102980,2923],{"class":53},[36,102982,115],{"class":114},[36,102984,95480],{"class":53},[36,102986,508],{"class":114},[36,102988,1317],{"class":49},[36,102990,3059],{"class":53},[36,102992,1317],{"class":49},[36,102994,3059],{"class":53},[36,102996,102997],{"class":49},"0.3",[36,102999,61],{"class":53},[36,103001,103002],{"class":38,"line":46},[36,103003,103004],{"class":53},"np.modf(a)\n",[19,103006,103007],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103009,103011],{"id":103010},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,103013,103014],{},"np.cell()",[19,103016,103017],{},"np.floor()",[19,103019,103020],{},"np.rint()",[19,103022,103023],{},"对各元素分别向上取整、向下取整、四舍五入",[19,103025,103026],{},[4000,103027],{"alt":31,"src":103028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103030,103032],{"id":103031},"_96-around函数","9.6 around()函数",[19,103034,103035],{},"around()函数也可以实现对数的小数位数进行操作",[19,103037,103038],{},"其中的参数：",[19,103040,103041],{},"1.要传的数组",[19,103043,103044],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,103046,103047],{},[4000,103048],{"alt":31,"src":103049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103051,103053],{"id":103052},"_97-三角函数","9.7 三角函数",[19,103055,103056],{},[4000,103057],{"alt":31,"src":103058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,103060,103061],{},"引入图像模块非常重要",[26,103063,103065],{"className":28,"code":103064,"language":30,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,103066,103067],{"__ignoreMap":31},[36,103068,103069,103071,103074,103076,103079,103081],{"class":38,"line":39},[36,103070,33241],{"class":114},[36,103072,103073],{"class":53}," matplotlib ",[36,103075,537],{"class":114},[36,103077,103078],{"class":53}," pyplot ",[36,103080,33887],{"class":114},[36,103082,33941],{"class":53},[2602,103084,103085],{},"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":31,"searchDepth":46,"depth":46,"links":103087},[103088,103089,103090,103091,103092,103093,103094],{"id":102636,"depth":46,"text":102637},{"id":102751,"depth":46,"text":102752},{"id":102958,"depth":46,"text":102959},{"id":102967,"depth":46,"text":102968},{"id":103010,"depth":46,"text":103011},{"id":103031,"depth":46,"text":103032},{"id":103052,"depth":46,"text":103053},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102600,"description":2630},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103101,"title":103102,"body":103103,"description":2630,"extension":2631,"meta":103107,"navigation":545,"path":103108,"seo":103109,"stem":103110,"__hash__":103111},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103104,"toc":103105},[],{"title":31,"searchDepth":46,"depth":46,"links":103106},[],{"category":52916},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103102,"description":2630},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103113,"title":103114,"body":103115,"description":31,"extension":2631,"meta":105120,"navigation":545,"path":105121,"seo":105122,"stem":105123,"__hash__":105124},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103116,"toc":105096},[103117,103120,103124,103127,103130,103136,103139,103162,103165,103198,103201,103242,103246,103249,103342,103345,103389,103392,103409,103412,103426,103429,103432,103477,103480,103516,103520,103523,103529,103534,103554,103558,103561,103627,103630,103648,103652,103655,103684,103694,103700,103704,103707,103713,103724,103728,103731,103761,103764,104043,104046,104049,104060,104063,104066,104088,104095,104098,104116,104119,104122,104136,104144,104147,104173,104179,104182,104185,104195,104207,104227,104236,104256,104266,104290,104303,104317,104322,104363,104380,104405,104417,104437,104443,104488,104507,104524,104537,104553,104560,104572,104581,104616,104637,104662,104675,104699,104714,104739,104742,104763,104772,104775,104786,104790,104793,104799,104811,104818,104822,104825,104837,104840,104854,104857,104867,104877,104880,104920,104923,104927,104933,104936,104950,104954,104957,104990,104994,104997,105020,105028,105031,105037,105043,105046,105049,105077,105081,105084,105090,105093],[10,103118,103114],{"id":103119},"_1环境安装与第一个-mujoco-程序",[14,103121,103123],{"id":103122},"_1目标说明","1.目标说明",[19,103125,103126],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,103128,103129],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,103131,103134],{"className":103132,"code":103133,"language":690,"meta":31},[688],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,103135,103133],{"__ignoreMap":31},[19,103137,103138],{},"需要掌握:",[433,103140,103141,103144,103147,103152,103157],{},[436,103142,103143],{},"Fedora 44 下 MuJoCo 的系统依赖",[436,103145,103146],{},"Python 虚拟环境创建",[436,103148,103149],{},[33,103150,103151],{},"mujoco.MjModel",[436,103153,103154],{},[33,103155,103156],{},"mujoco.MjData",[436,103158,103159],{},[33,103160,103161],{},"mujoco.mj_step(model, data)",[19,103163,103164],{},"MuJoCo 中最重要的两个对象:",[206,103166,103167,103176],{},[209,103168,103169],{},[212,103170,103171,103174],{},[215,103172,103173],{"align":26253},"对象",[215,103175,1635],{"align":26253},[225,103177,103178,103188],{},[212,103179,103180,103185],{},[230,103181,103182],{"align":26253},[33,103183,103184],{},"MjModel",[230,103186,103187],{"align":26253},"模型结构，来自 XML，基本不随时间变化",[212,103189,103190,103195],{},[230,103191,103192],{"align":26253},[33,103193,103194],{},"MjData",[230,103196,103197],{"align":26253},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,103199,103200],{},"可以先用一个类比理解：",[206,103202,103203,103213],{},[209,103204,103205],{},[212,103206,103207,103210],{},[215,103208,103209],{"align":26253},"类比",[215,103211,103212],{"align":26253},"MuJoCo 对象",[225,103214,103215,103224,103233],{},[212,103216,103217,103220],{},[230,103218,103219],{"align":26253},"游戏地图和角色配置",[230,103221,103222],{"align":26253},[33,103223,103184],{},[212,103225,103226,103229],{},[230,103227,103228],{"align":26253},"游戏运行到当前帧的状态",[230,103230,103231],{"align":26253},[33,103232,103194],{},[212,103234,103235,103238],{},[230,103236,103237],{"align":26253},"前进一帧",[230,103239,103240],{"align":26253},[33,103241,103161],{},[14,103243,103245],{"id":103244},"_2环境与依赖安装","2.环境与依赖安装",[19,103247,103248],{},"Fedora 44 系统依赖:",[26,103250,103252],{"className":26338,"code":103251,"language":26340,"meta":31,"style":31},"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",[33,103253,103254,103266,103279,103292,103302,103312,103331],{"__ignoreMap":31},[36,103255,103256,103258,103260,103262,103264],{"class":38,"line":39},[36,103257,27093],{"class":4500},[36,103259,28827],{"class":57},[36,103261,26350],{"class":57},[36,103263,28912],{"class":49},[36,103265,27195],{"class":49},[36,103267,103268,103271,103274,103277],{"class":38,"line":46},[36,103269,103270],{"class":57},"  python3",[36,103272,103273],{"class":57}," python3-pip",[36,103275,103276],{"class":57}," python3-virtualenv",[36,103278,27195],{"class":49},[36,103280,103281,103284,103287,103290],{"class":38,"line":82},[36,103282,103283],{"class":57},"  mesa-libGL",[36,103285,103286],{"class":57}," mesa-libGLU",[36,103288,103289],{"class":57}," mesa-dri-drivers",[36,103291,27195],{"class":49},[36,103293,103294,103297,103300],{"class":38,"line":88},[36,103295,103296],{"class":57},"  libglvnd-glx",[36,103298,103299],{"class":57}," libglvnd-opengl",[36,103301,27195],{"class":49},[36,103303,103304,103307,103310],{"class":38,"line":195},[36,103305,103306],{"class":57},"  glfw",[36,103308,103309],{"class":57}," glfw-devel",[36,103311,27195],{"class":49},[36,103313,103314,103317,103320,103323,103326,103329],{"class":38,"line":1517},[36,103315,103316],{"class":57},"  libX11",[36,103318,103319],{"class":57}," libXcursor",[36,103321,103322],{"class":57}," libXi",[36,103324,103325],{"class":57}," libXinerama",[36,103327,103328],{"class":57}," libXrandr",[36,103330,27195],{"class":49},[36,103332,103333,103336,103339],{"class":38,"line":2421},[36,103334,103335],{"class":57},"  gcc",[36,103337,103338],{"class":57}," gcc-c++",[36,103340,103341],{"class":57}," make\n",[19,103343,103344],{},"创建 Python 环境:",[26,103346,103348],{"className":26338,"code":103347,"language":26340,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,103349,103350,103364,103372],{"__ignoreMap":31},[36,103351,103352,103355,103358,103361],{"class":38,"line":39},[36,103353,103354],{"class":4500},"python3",[36,103356,103357],{"class":49}," -m",[36,103359,103360],{"class":57}," venv",[36,103362,103363],{"class":57}," .venv\n",[36,103365,103366,103369],{"class":38,"line":46},[36,103367,103368],{"class":49},"source",[36,103370,103371],{"class":57}," .venv\u002Fbin\u002Factivate\n",[36,103373,103374,103376,103378,103381,103383,103386],{"class":38,"line":82},[36,103375,30],{"class":4500},[36,103377,103357],{"class":49},[36,103379,103380],{"class":57}," pip",[36,103382,26350],{"class":57},[36,103384,103385],{"class":49}," --upgrade",[36,103387,103388],{"class":57}," pip\n",[19,103390,103391],{},"pip 安装:",[26,103393,103395],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,103396,103397],{"__ignoreMap":31},[36,103398,103399,103401,103403,103406],{"class":38,"line":39},[36,103400,26347],{"class":4500},[36,103402,26350],{"class":57},[36,103404,103405],{"class":57}," \"mujoco>=2.3\"",[36,103407,103408],{"class":57}," numpy\n",[19,103410,103411],{},"安装完成后，先做最小检查：",[26,103413,103415],{"className":26338,"code":103414,"language":26340,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,103416,103417],{"__ignoreMap":31},[36,103418,103419,103421,103423],{"class":38,"line":39},[36,103420,30],{"class":4500},[36,103422,32868],{"class":49},[36,103424,103425],{"class":57}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103427,103428],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103430,103431],{},"conda 安装:",[26,103433,103435],{"className":26338,"code":103434,"language":26340,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,103436,103437,103457,103467],{"__ignoreMap":31},[36,103438,103439,103441,103443,103445,103448,103451,103454],{"class":38,"line":39},[36,103440,32840],{"class":4500},[36,103442,31686],{"class":57},[36,103444,27631],{"class":49},[36,103446,103447],{"class":57}," mujoco-study",[36,103449,103450],{"class":57}," python=",[36,103452,103453],{"class":49},"3.10",[36,103455,103456],{"class":49}," -y\n",[36,103458,103459,103461,103464],{"class":38,"line":46},[36,103460,32840],{"class":4500},[36,103462,103463],{"class":57}," activate",[36,103465,103466],{"class":57}," mujoco-study\n",[36,103468,103469,103471,103473,103475],{"class":38,"line":82},[36,103470,26347],{"class":4500},[36,103472,26350],{"class":57},[36,103474,103405],{"class":57},[36,103476,103408],{"class":57},[19,103478,103479],{},"版本冲突说明:",[433,103481,103482,103488,103497,103506],{},[436,103483,103484,103485,1296],{},"不要安装 ",[33,103486,103487],{},"mujoco-py",[436,103489,103490,103491,1292,103493,103496],{},"如果旧项目里同时安装了 ",[33,103492,103487],{},[33,103494,103495],{},"mujoco","，建议新建干净虚拟环境。",[436,103498,103499,103502,103503,1296],{},[33,103500,103501],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,103504,103505],{},"~\u002F.mujoco\u002Fmujoco210",[436,103507,103508,103509,85020,103512,103515],{},"离屏渲染可能涉及 OpenGL 后端，",[33,103510,103511],{},"MUJOCO_GL=egl",[33,103513,103514],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103517,103519],{"id":103518},"_3核心概念解释","3.核心概念解释",[19,103521,103522],{},"MuJoCo 的基本执行流程:",[26,103524,103527],{"className":103525,"code":103526,"language":690,"meta":31},[688],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,103528,103526],{"__ignoreMap":31},[19,103530,103531,103533],{},[33,103532,103184],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103535,103536,103538,103539,273,103542,273,103545,273,103548,273,103551,1296],{},[33,103537,103194],{}," 存放仿真运行时状态，例如 ",[33,103540,103541],{},"data.time",[33,103543,103544],{},"data.qpos",[33,103546,103547],{},"data.qvel",[33,103549,103550],{},"data.ctrl",[33,103552,103553],{},"data.xpos",[997,103555,103557],{"id":103556},"xml-是什么","XML 是什么",[19,103559,103560],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,103562,103564],{"className":55561,"code":103563,"language":55563,"meta":31,"style":31},"\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",[33,103565,103566,103588,103619],{"__ignoreMap":31},[36,103567,103568,103570,103572,103574,103576,103578,103581,103583,103586],{"class":38,"line":39},[36,103569,1507],{"class":53},[36,103571,54294],{"class":53794},[36,103573,17440],{"class":4500},[36,103575,115],{"class":53},[36,103577,55985],{"class":57},[36,103579,103580],{"class":4500}," pos",[36,103582,115],{"class":53},[36,103584,103585],{"class":57},"\"0 0 1\"",[36,103587,53801],{"class":53},[36,103589,103590,103592,103595,103597,103599,103602,103604,103606,103608,103611,103613,103616],{"class":38,"line":46},[36,103591,54638],{"class":53},[36,103593,103594],{"class":53794},"geom",[36,103596,17440],{"class":4500},[36,103598,115],{"class":53},[36,103600,103601],{"class":57},"\"box_geom\"",[36,103603,56317],{"class":4500},[36,103605,115],{"class":53},[36,103607,55985],{"class":57},[36,103609,103610],{"class":4500}," size",[36,103612,115],{"class":53},[36,103614,103615],{"class":57},"\"0.1 0.1 0.1\"",[36,103617,103618],{"class":53},"\u002F>\n",[36,103620,103621,103623,103625],{"class":38,"line":82},[36,103622,54279],{"class":53},[36,103624,54294],{"class":53794},[36,103626,53801],{"class":53},[19,103628,103629],{},"这段意思是：",[433,103631,103632,103638,103645],{},[436,103633,103634,103635,103637],{},"创建一个叫 ",[33,103636,56208],{}," 的刚体。",[436,103639,103640,103641,103644],{},"它初始放在 ",[33,103642,103643],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[436,103646,103647],{},"它里面有一个盒子形状的几何体。",[997,103649,103651],{"id":103650},"timestep-是什么","timestep 是什么",[19,103653,103654],{},"XML 里的：",[26,103656,103658],{"className":55561,"code":103657,"language":55563,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,103659,103660],{"__ignoreMap":31},[36,103661,103662,103664,103666,103669,103671,103674,103677,103679,103682],{"class":38,"line":39},[36,103663,1507],{"class":53},[36,103665,71653],{"class":53794},[36,103667,103668],{"class":4500}," timestep",[36,103670,115],{"class":53},[36,103672,103673],{"class":57},"\"0.01\"",[36,103675,103676],{"class":4500}," gravity",[36,103678,115],{"class":53},[36,103680,103681],{"class":57},"\"0 0 -9.81\"",[36,103683,103618],{"class":53},[19,103685,103686,103687,103690,103691,103693],{},"表示每调用一次 ",[33,103688,103689],{},"mj_step","，仿真时间前进 ",[33,103692,41486],{}," 秒。循环 100 次，大约就是 1 秒：",[26,103695,103698],{"className":103696,"code":103697,"language":690,"meta":31},[688],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,103699,103697],{"__ignoreMap":31},[997,103701,103703],{"id":103702},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103705,103706],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,103708,103711],{"className":103709,"code":103710,"language":690,"meta":31},[688],"x y z qw qx qy qz\n",[33,103712,103710],{"__ignoreMap":31},[19,103714,103715,103716,103719,103720,103723],{},"表示一个自由刚体的位置和姿态。其中 ",[33,103717,103718],{},"x y z"," 是位置，",[33,103721,103722],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103725,103727],{"id":103726},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103729,103730],{},"新建文件:",[26,103732,103734],{"className":26338,"code":103733,"language":26340,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,103735,103736,103746,103753],{"__ignoreMap":31},[36,103737,103738,103741,103743],{"class":38,"line":39},[36,103739,103740],{"class":4500},"mkdir",[36,103742,31726],{"class":49},[36,103744,103745],{"class":57}," mujoco_tutorial\n",[36,103747,103748,103751],{"class":38,"line":46},[36,103749,103750],{"class":49},"cd",[36,103752,103745],{"class":57},[36,103754,103755,103758],{"class":38,"line":82},[36,103756,103757],{"class":4500},"touch",[36,103759,103760],{"class":57}," ch1_first_sim.py\n",[19,103762,103763],{},"写入:",[26,103765,103767],{"className":28,"code":103766,"language":30,"meta":31,"style":31},"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",[33,103768,103769,103776,103780,103784,103794,103799,103804,103808,103813,103818,103822,103827,103832,103837,103842,103847,103852,103856,103860,103864,103877,103891,103901,103905,103917,103929,103941,103953,103965,103969,103986,103991,103995,104006,104017,104021,104025,104038],{"__ignoreMap":31},[36,103770,103771,103773],{"class":38,"line":39},[36,103772,537],{"class":114},[36,103774,103775],{"class":53}," mujoco\n",[36,103777,103778],{"class":38,"line":46},[36,103779,546],{"emptyLinePlaceholder":545},[36,103781,103782],{"class":38,"line":82},[36,103783,546],{"emptyLinePlaceholder":545},[36,103785,103786,103789,103791],{"class":38,"line":88},[36,103787,103788],{"class":49},"XML",[36,103790,498],{"class":114},[36,103792,103793],{"class":57}," \"\"\"\n",[36,103795,103796],{"class":38,"line":195},[36,103797,103798],{"class":57},"\u003Cmujoco model=\"first_sim\">\n",[36,103800,103801],{"class":38,"line":1517},[36,103802,103803],{"class":57},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,103805,103806],{"class":38,"line":2421},[36,103807,546],{"emptyLinePlaceholder":545},[36,103809,103810],{"class":38,"line":2446},[36,103811,103812],{"class":57},"  \u003Cworldbody>\n",[36,103814,103815],{"class":38,"line":2469},[36,103816,103817],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,103819,103820],{"class":38,"line":2492},[36,103821,546],{"emptyLinePlaceholder":545},[36,103823,103824],{"class":38,"line":4150},[36,103825,103826],{"class":57},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,103828,103829],{"class":38,"line":4155},[36,103830,103831],{"class":57},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,103833,103834],{"class":38,"line":4161},[36,103835,103836],{"class":57},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,103838,103839],{"class":38,"line":4166},[36,103840,103841],{"class":57},"    \u003C\u002Fbody>\n",[36,103843,103844],{"class":38,"line":4180},[36,103845,103846],{"class":57},"  \u003C\u002Fworldbody>\n",[36,103848,103849],{"class":38,"line":4185},[36,103850,103851],{"class":57},"\u003C\u002Fmujoco>\n",[36,103853,103854],{"class":38,"line":4191},[36,103855,74],{"class":57},[36,103857,103858],{"class":38,"line":4212},[36,103859,546],{"emptyLinePlaceholder":545},[36,103861,103862],{"class":38,"line":4217},[36,103863,546],{"emptyLinePlaceholder":545},[36,103865,103866,103868,103870,103873,103875],{"class":38,"line":4231},[36,103867,34450],{"class":114},[36,103869,4510],{"class":4500},[36,103871,103872],{"class":53},"() -> ",[36,103874,198],{"class":49},[36,103876,6270],{"class":53},[36,103878,103879,103882,103884,103887,103889],{"class":38,"line":4236},[36,103880,103881],{"class":53},"    model ",[36,103883,115],{"class":114},[36,103885,103886],{"class":53}," mujoco.MjModel.from_xml_string(",[36,103888,103788],{"class":49},[36,103890,61],{"class":53},[36,103892,103893,103896,103898],{"class":38,"line":4264},[36,103894,103895],{"class":53},"    data ",[36,103897,115],{"class":114},[36,103899,103900],{"class":53}," mujoco.MjData(model)\n",[36,103902,103903],{"class":38,"line":4269},[36,103904,546],{"emptyLinePlaceholder":545},[36,103906,103907,103909,103911,103914],{"class":38,"line":4286},[36,103908,33803],{"class":49},[36,103910,54],{"class":53},[36,103912,103913],{"class":57},"\"nq:\"",[36,103915,103916],{"class":53},", model.nq)\n",[36,103918,103919,103921,103923,103926],{"class":38,"line":4291},[36,103920,33803],{"class":49},[36,103922,54],{"class":53},[36,103924,103925],{"class":57},"\"nv:\"",[36,103927,103928],{"class":53},", model.nv)\n",[36,103930,103931,103933,103935,103938],{"class":38,"line":4296},[36,103932,33803],{"class":49},[36,103934,54],{"class":53},[36,103936,103937],{"class":57},"\"nu:\"",[36,103939,103940],{"class":53},", model.nu)\n",[36,103942,103943,103945,103947,103950],{"class":38,"line":4301},[36,103944,33803],{"class":49},[36,103946,54],{"class":53},[36,103948,103949],{"class":57},"\"initial time:\"",[36,103951,103952],{"class":53},", data.time)\n",[36,103954,103955,103957,103959,103962],{"class":38,"line":4315},[36,103956,33803],{"class":49},[36,103958,54],{"class":53},[36,103960,103961],{"class":57},"\"initial qpos:\"",[36,103963,103964],{"class":53},", data.qpos.copy())\n",[36,103966,103967],{"class":38,"line":4320},[36,103968,546],{"emptyLinePlaceholder":545},[36,103970,103971,103973,103976,103978,103980,103982,103984],{"class":38,"line":5109},[36,103972,5732],{"class":114},[36,103974,103975],{"class":53}," _ ",[36,103977,28556],{"class":114},[36,103979,34946],{"class":49},[36,103981,54],{"class":53},[36,103983,166],{"class":49},[36,103985,33290],{"class":53},[36,103987,103988],{"class":38,"line":5123},[36,103989,103990],{"class":53},"        mujoco.mj_step(model, data)\n",[36,103992,103993],{"class":38,"line":5131},[36,103994,546],{"emptyLinePlaceholder":545},[36,103996,103997,103999,104001,104004],{"class":38,"line":5136},[36,103998,33803],{"class":49},[36,104000,54],{"class":53},[36,104002,104003],{"class":57},"\"final time:\"",[36,104005,103952],{"class":53},[36,104007,104008,104010,104012,104015],{"class":38,"line":5142},[36,104009,33803],{"class":49},[36,104011,54],{"class":53},[36,104013,104014],{"class":57},"\"final qpos:\"",[36,104016,103964],{"class":53},[36,104018,104019],{"class":38,"line":5148},[36,104020,546],{"emptyLinePlaceholder":545},[36,104022,104023],{"class":38,"line":5153},[36,104024,546],{"emptyLinePlaceholder":545},[36,104026,104027,104029,104031,104033,104036],{"class":38,"line":10475},[36,104028,4069],{"class":114},[36,104030,33724],{"class":49},[36,104032,1351],{"class":114},[36,104034,104035],{"class":57}," \"__main__\"",[36,104037,6270],{"class":53},[36,104039,104040],{"class":38,"line":10499},[36,104041,104042],{"class":53},"    main()\n",[997,104044,104045],{"id":104045},"代码逐段解释",[19,104047,104048],{},"导入库：",[26,104050,104052],{"className":28,"code":104051,"language":30,"meta":31,"style":31},"import mujoco\n",[33,104053,104054],{"__ignoreMap":31},[36,104055,104056,104058],{"class":38,"line":39},[36,104057,537],{"class":114},[36,104059,103775],{"class":53},[19,104061,104062],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,104064,104065],{},"定义 XML：",[26,104067,104069],{"className":28,"code":104068,"language":30,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,104070,104071,104079,104084],{"__ignoreMap":31},[36,104072,104073,104075,104077],{"class":38,"line":39},[36,104074,103788],{"class":49},[36,104076,498],{"class":114},[36,104078,103793],{"class":57},[36,104080,104081],{"class":38,"line":46},[36,104082,104083],{"class":57},"...\n",[36,104085,104086],{"class":38,"line":82},[36,104087,74],{"class":57},[19,104089,104090,104091,104094],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,104092,104093],{},"freejoint"," 的方块。",[19,104096,104097],{},"编译模型：",[26,104099,104101],{"className":28,"code":104100,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,104102,104103],{"__ignoreMap":31},[36,104104,104105,104108,104110,104112,104114],{"class":38,"line":39},[36,104106,104107],{"class":53},"model ",[36,104109,115],{"class":114},[36,104111,103886],{"class":53},[36,104113,103788],{"class":49},[36,104115,61],{"class":53},[19,104117,104118],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,104120,104121],{},"创建数据：",[26,104123,104125],{"className":28,"code":104124,"language":30,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,104126,104127],{"__ignoreMap":31},[36,104128,104129,104132,104134],{"class":38,"line":39},[36,104130,104131],{"class":53},"data ",[36,104133,115],{"class":114},[36,104135,103900],{"class":53},[19,104137,104138,104140,104141,104143],{},[33,104139,35902],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,104142,713],{},"，方块还在初始位置。",[19,104145,104146],{},"推进仿真：",[26,104148,104150],{"className":28,"code":104149,"language":30,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,104151,104152,104168],{"__ignoreMap":31},[36,104153,104154,104156,104158,104160,104162,104164,104166],{"class":38,"line":39},[36,104155,5556],{"class":114},[36,104157,103975],{"class":53},[36,104159,28556],{"class":114},[36,104161,34946],{"class":49},[36,104163,54],{"class":53},[36,104165,166],{"class":49},[36,104167,33290],{"class":53},[36,104169,104170],{"class":38,"line":46},[36,104171,104172],{"class":53},"    mujoco.mj_step(model, data)\n",[19,104174,104175,104176,104178],{},"每次 ",[33,104177,103689],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[997,104180,104181],{"id":104181},"代码逐行细讲",[19,104183,104184],{},"下面把完整代码按新手视角拆开讲。",[26,104186,104187],{"className":28,"code":104051,"language":30,"meta":31,"style":31},[33,104188,104189],{"__ignoreMap":31},[36,104190,104191,104193],{"class":38,"line":39},[36,104192,537],{"class":114},[36,104194,103775],{"class":53},[19,104196,104197,104199,104200,273,104202,273,104204,1296],{},[33,104198,537],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,104201,103151],{},[33,104203,103156],{},[33,104205,104206],{},"mujoco.mj_step",[26,104208,104209],{"className":28,"code":104068,"language":30,"meta":31,"style":31},[33,104210,104211,104219,104223],{"__ignoreMap":31},[36,104212,104213,104215,104217],{"class":38,"line":39},[36,104214,103788],{"class":49},[36,104216,498],{"class":114},[36,104218,103793],{"class":57},[36,104220,104221],{"class":38,"line":46},[36,104222,104083],{"class":57},[36,104224,104225],{"class":38,"line":82},[36,104226,74],{"class":57},[19,104228,104229,104231,104232,104235],{},[33,104230,103788],{}," 是一个变量名。右边的三引号 ",[33,104233,104234],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,104237,104238],{"className":55561,"code":103798,"language":55563,"meta":31,"style":31},[33,104239,104240],{"__ignoreMap":31},[36,104241,104242,104244,104246,104249,104251,104254],{"class":38,"line":39},[36,104243,1507],{"class":53},[36,104245,103495],{"class":53794},[36,104247,104248],{"class":4500}," model",[36,104250,115],{"class":53},[36,104252,104253],{"class":57},"\"first_sim\"",[36,104255,53801],{"class":53},[19,104257,104258,104259,104262,104263,1296],{},"这是 XML 的根标签。",[33,104260,104261],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,104264,104265],{},"first_sim",[26,104267,104268],{"className":55561,"code":103657,"language":55563,"meta":31,"style":31},[33,104269,104270],{"__ignoreMap":31},[36,104271,104272,104274,104276,104278,104280,104282,104284,104286,104288],{"class":38,"line":39},[36,104273,1507],{"class":53},[36,104275,71653],{"class":53794},[36,104277,103668],{"class":4500},[36,104279,115],{"class":53},[36,104281,103673],{"class":57},[36,104283,103676],{"class":4500},[36,104285,115],{"class":53},[36,104287,103681],{"class":57},[36,104289,103618],{"class":53},[19,104291,104292,104294,104295,104298,104299,104302],{},[33,104293,71653],{}," 用来设置仿真参数。",[33,104296,104297],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,104300,104301],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,104304,104306],{"className":55561,"code":104305,"language":55563,"meta":31,"style":31},"\u003Cworldbody>\n",[33,104307,104308],{"__ignoreMap":31},[36,104309,104310,104312,104315],{"class":38,"line":39},[36,104311,1507],{"class":53},[36,104313,104314],{"class":53794},"worldbody",[36,104316,53801],{"class":53},[19,104318,104319,104321],{},[33,104320,104314],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,104323,104325],{"className":55561,"code":104324,"language":55563,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,104326,104327],{"__ignoreMap":31},[36,104328,104329,104331,104333,104335,104337,104340,104342,104344,104347,104349,104351,104354,104356,104358,104361],{"class":38,"line":39},[36,104330,1507],{"class":53},[36,104332,103594],{"class":53794},[36,104334,17440],{"class":4500},[36,104336,115],{"class":53},[36,104338,104339],{"class":57},"\"floor\"",[36,104341,56317],{"class":4500},[36,104343,115],{"class":53},[36,104345,104346],{"class":57},"\"plane\"",[36,104348,103610],{"class":4500},[36,104350,115],{"class":53},[36,104352,104353],{"class":57},"\"2 2 0.1\"",[36,104355,81250],{"class":4500},[36,104357,115],{"class":53},[36,104359,104360],{"class":57},"\"0.8 0.8 0.8 1\"",[36,104362,103618],{"class":53},[19,104364,104365,104366,104368,104369,104372,104373,104376,104377,104379],{},"这行创建地面。",[33,104367,103594],{}," 是几何体。",[33,104370,104371],{},"name=\"floor\""," 是名字。",[33,104374,104375],{},"type=\"plane\""," 表示平面。",[33,104378,57601],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,104381,104383],{"className":55561,"code":104382,"language":55563,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,104384,104385],{"__ignoreMap":31},[36,104386,104387,104389,104391,104393,104395,104397,104399,104401,104403],{"class":38,"line":39},[36,104388,1507],{"class":53},[36,104390,54294],{"class":53794},[36,104392,17440],{"class":4500},[36,104394,115],{"class":53},[36,104396,55985],{"class":57},[36,104398,103580],{"class":4500},[36,104400,115],{"class":53},[36,104402,103585],{"class":57},[36,104404,53801],{"class":53},[19,104406,104407,104408,1296,104410,104413,104414,104416],{},"这行创建一个刚体，名字叫 ",[33,104409,56208],{},[33,104411,104412],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,104415,103643],{},"，也就是离地面 1 米高。",[26,104418,104420],{"className":55561,"code":104419,"language":55563,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,104421,104422],{"__ignoreMap":31},[36,104423,104424,104426,104428,104430,104432,104435],{"class":38,"line":39},[36,104425,1507],{"class":53},[36,104427,104093],{"class":53794},[36,104429,17440],{"class":4500},[36,104431,115],{"class":53},[36,104433,104434],{"class":57},"\"box_free\"",[36,104436,103618],{"class":53},[19,104438,104439,104440,104442],{},"这行很重要。",[33,104441,104093],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,104444,104446],{"className":55561,"code":104445,"language":55563,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,104447,104448],{"__ignoreMap":31},[36,104449,104450,104452,104454,104456,104458,104460,104462,104464,104466,104468,104470,104472,104475,104477,104479,104481,104483,104486],{"class":38,"line":39},[36,104451,1507],{"class":53},[36,104453,103594],{"class":53794},[36,104455,17440],{"class":4500},[36,104457,115],{"class":53},[36,104459,103601],{"class":57},[36,104461,56317],{"class":4500},[36,104463,115],{"class":53},[36,104465,55985],{"class":57},[36,104467,103610],{"class":4500},[36,104469,115],{"class":53},[36,104471,103615],{"class":57},[36,104473,104474],{"class":4500}," mass",[36,104476,115],{"class":53},[36,104478,6209],{"class":57},[36,104480,81250],{"class":4500},[36,104482,115],{"class":53},[36,104484,104485],{"class":57},"\"1 0 0 1\"",[36,104487,103618],{"class":53},[19,104489,104490,104491,104494,104495,104498,104499,104502,104503,104506],{},"这行给 box body 添加一个盒子形状。",[33,104492,104493],{},"type=\"box\""," 表示形状是盒子。",[33,104496,104497],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,104500,104501],{},"mass=\"1\""," 表示质量是 1。",[33,104504,104505],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,104508,104510],{"className":28,"code":104509,"language":30,"meta":31,"style":31},"def main() -> None:\n",[33,104511,104512],{"__ignoreMap":31},[36,104513,104514,104516,104518,104520,104522],{"class":38,"line":39},[36,104515,34450],{"class":114},[36,104517,4510],{"class":4500},[36,104519,103872],{"class":53},[36,104521,198],{"class":49},[36,104523,6270],{"class":53},[19,104525,104526,104528,104529,104532,104533,104536],{},[33,104527,34450],{}," 用来定义函数。这里定义了一个叫 ",[33,104530,104531],{},"main"," 的函数。",[33,104534,104535],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,104538,104539],{"className":28,"code":104100,"language":30,"meta":31,"style":31},[33,104540,104541],{"__ignoreMap":31},[36,104542,104543,104545,104547,104549,104551],{"class":38,"line":39},[36,104544,104107],{"class":53},[36,104546,115],{"class":114},[36,104548,103886],{"class":53},[36,104550,103788],{"class":49},[36,104552,61],{"class":53},[19,104554,104555,104556,104559],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,104557,104558],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,104561,104562],{"className":28,"code":104124,"language":30,"meta":31,"style":31},[33,104563,104564],{"__ignoreMap":31},[36,104565,104566,104568,104570],{"class":38,"line":39},[36,104567,104131],{"class":53},[36,104569,115],{"class":114},[36,104571,103900],{"class":53},[19,104573,104574,104575,104577,104578,104580],{},"这行创建仿真数据。",[33,104576,35902],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,104579,35902],{}," 都会变化。",[26,104582,104584],{"className":28,"code":104583,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,104585,104586,104596,104606],{"__ignoreMap":31},[36,104587,104588,104590,104592,104594],{"class":38,"line":39},[36,104589,50],{"class":49},[36,104591,54],{"class":53},[36,104593,103913],{"class":57},[36,104595,103916],{"class":53},[36,104597,104598,104600,104602,104604],{"class":38,"line":46},[36,104599,50],{"class":49},[36,104601,54],{"class":53},[36,104603,103925],{"class":57},[36,104605,103928],{"class":53},[36,104607,104608,104610,104612,104614],{"class":38,"line":82},[36,104609,50],{"class":49},[36,104611,54],{"class":53},[36,104613,103937],{"class":57},[36,104615,103940],{"class":53},[19,104617,104618,104620,104621,104624,104625,104628,104629,104632,104633,104636],{},[33,104619,50],{}," 用来输出信息。",[33,104622,104623],{},"model.nq"," 是位置变量数量，",[33,104626,104627],{},"model.nv"," 是速度变量数量，",[33,104630,104631],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,104634,104635],{},"nu"," 是 0。",[26,104638,104640],{"className":28,"code":104639,"language":30,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,104641,104642,104652],{"__ignoreMap":31},[36,104643,104644,104646,104648,104650],{"class":38,"line":39},[36,104645,50],{"class":49},[36,104647,54],{"class":53},[36,104649,103949],{"class":57},[36,104651,103952],{"class":53},[36,104653,104654,104656,104658,104660],{"class":38,"line":46},[36,104655,50],{"class":49},[36,104657,54],{"class":53},[36,104659,103961],{"class":57},[36,104661,103964],{"class":53},[19,104663,104664,104665,104667,104668,104670,104671,104674],{},"这里打印初始时间和初始位置。",[33,104666,103541],{}," 一开始是 0。",[33,104669,103544],{}," 是位置数组。",[33,104672,104673],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,104676,104677],{"className":28,"code":104149,"language":30,"meta":31,"style":31},[33,104678,104679,104695],{"__ignoreMap":31},[36,104680,104681,104683,104685,104687,104689,104691,104693],{"class":38,"line":39},[36,104682,5556],{"class":114},[36,104684,103975],{"class":53},[36,104686,28556],{"class":114},[36,104688,34946],{"class":49},[36,104690,54],{"class":53},[36,104692,166],{"class":49},[36,104694,33290],{"class":53},[36,104696,104697],{"class":38,"line":46},[36,104698,104172],{"class":53},[19,104700,104701,104703,104704,104707,104708,104710,104711,104713],{},[33,104702,5556],{}," 是循环。",[33,104705,104706],{},"range(100)"," 表示循环 100 次。",[33,104709,3665],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,104712,103689],{},"，仿真就前进一步。",[26,104715,104717],{"className":28,"code":104716,"language":30,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,104718,104719,104729],{"__ignoreMap":31},[36,104720,104721,104723,104725,104727],{"class":38,"line":39},[36,104722,50],{"class":49},[36,104724,54],{"class":53},[36,104726,104003],{"class":57},[36,104728,103952],{"class":53},[36,104730,104731,104733,104735,104737],{"class":38,"line":46},[36,104732,50],{"class":49},[36,104734,54],{"class":53},[36,104736,104014],{"class":57},[36,104738,103964],{"class":53},[19,104740,104741],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,104743,104745],{"className":28,"code":104744,"language":30,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,104746,104747,104759],{"__ignoreMap":31},[36,104748,104749,104751,104753,104755,104757],{"class":38,"line":39},[36,104750,4069],{"class":114},[36,104752,33724],{"class":49},[36,104754,1351],{"class":114},[36,104756,104035],{"class":57},[36,104758,6270],{"class":53},[36,104760,104761],{"class":38,"line":46},[36,104762,104042],{"class":53},[19,104764,104765,104766,104769,104770,1296],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,104767,104768],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,104771,104768],{},[19,104773,104774],{},"运行:",[26,104776,104778],{"className":26338,"code":104777,"language":26340,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,104779,104780],{"__ignoreMap":31},[36,104781,104782,104784],{"class":38,"line":39},[36,104783,30],{"class":4500},[36,104785,103760],{"class":57},[14,104787,104789],{"id":104788},"_5运行结果说明","5.运行结果说明",[19,104791,104792],{},"你应该看到类似输出:",[26,104794,104797],{"className":104795,"code":104796,"language":690,"meta":31},[688],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,104798,104796],{"__ignoreMap":31},[19,104800,104801,104803,104804,104807,104808,1296],{},[33,104802,104093],{}," 有 7 个位置变量: ",[33,104805,104806],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,104809,104810],{},"vx vy vz wx wy wz",[19,104812,104813,104814,104817],{},"你还会看到 ",[33,104815,104816],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104819,104821],{"id":104820},"_6验证步骤","6.验证步骤",[19,104823,104824],{},"确认版本:",[26,104826,104827],{"className":26338,"code":103414,"language":26340,"meta":31,"style":31},[33,104828,104829],{"__ignoreMap":31},[36,104830,104831,104833,104835],{"class":38,"line":39},[36,104832,30],{"class":4500},[36,104834,32868],{"class":49},[36,104836,103425],{"class":57},[19,104838,104839],{},"确认导入的是官方 bindings:",[26,104841,104843],{"className":26338,"code":104842,"language":26340,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,104844,104845],{"__ignoreMap":31},[36,104846,104847,104849,104851],{"class":38,"line":39},[36,104848,30],{"class":4500},[36,104850,32868],{"class":49},[36,104852,104853],{"class":57}," \"import mujoco; print(mujoco)\"\n",[19,104855,104856],{},"运行程序:",[26,104858,104859],{"className":26338,"code":104777,"language":26340,"meta":31,"style":31},[33,104860,104861],{"__ignoreMap":31},[36,104862,104863,104865],{"class":38,"line":39},[36,104864,30],{"class":4500},[36,104866,103760],{"class":57},[19,104868,104869,104870,104873,104874,1296],{},"检查 ",[33,104871,104872],{},"final time"," 是否约等于 ",[33,104875,104876],{},"1.0",[19,104878,104879],{},"再做几个小实验：",[433,104881,104882,104892,104900,104913],{},[436,104883,104884,104885,104887,104888,104891],{},"把 ",[33,104886,104412],{}," 改成 ",[33,104889,104890],{},"pos=\"0 0 2\"","，观察初始高度变化。",[436,104893,104884,104894,104887,104896,104899],{},[33,104895,104301],{},[33,104897,104898],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[436,104901,104884,104902,104887,104904,104907,104908,104910,104911,1296],{},[33,104903,104297],{},[33,104905,104906],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,104909,104872],{}," 是否变成约 ",[33,104912,37829],{},[436,104914,104915,104916,104919],{},"删除 ",[33,104917,104918],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104921,104922],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104924,104926],{"id":104925},"_7常见错误与解决方案","7.常见错误与解决方案",[997,104928,104930],{"id":104929},"modulenotfounderror-no-module-named-mujoco",[33,104931,104932],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104934,104935],{},"解决:",[26,104937,104939],{"className":26338,"code":104938,"language":26340,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,104940,104941],{"__ignoreMap":31},[36,104942,104943,104945,104947],{"class":38,"line":39},[36,104944,26347],{"class":4500},[36,104946,26350],{"class":57},[36,104948,104949],{"class":57}," \"mujoco>=2.3\"\n",[997,104951,104953],{"id":104952},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104955,104956],{},"先安装系统依赖:",[26,104958,104960],{"className":26338,"code":104959,"language":26340,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,104961,104962],{"__ignoreMap":31},[36,104963,104964,104966,104968,104970,104972,104975,104977,104980,104982,104985,104987],{"class":38,"line":39},[36,104965,27093],{"class":4500},[36,104967,28827],{"class":57},[36,104969,26350],{"class":57},[36,104971,28912],{"class":49},[36,104973,104974],{"class":57}," mesa-libGL",[36,104976,103289],{"class":57},[36,104978,104979],{"class":57}," glfw",[36,104981,103309],{"class":57},[36,104983,104984],{"class":57}," libX11",[36,104986,103322],{"class":57},[36,104988,104989],{"class":57}," libXrandr\n",[997,104991,104993],{"id":104992},"xml-解析失败","XML 解析失败",[19,104995,104996],{},"检查:",[433,104998,104999,105002,105005,105011],{},[436,105000,105001],{},"标签是否闭合",[436,105003,105004],{},"属性是否带引号",[436,105006,105007,105008],{},"根节点是否是 ",[33,105009,105010],{},"\u003Cmujoco>",[436,105012,105013,105015,105016,105019],{},[33,105014,54294],{}," 是否放在 ",[33,105017,105018],{},"\u003Cworldbody>"," 内部",[997,105021,105023,105025,105026],{"id":105022},"final-time-不是严格等于-10",[33,105024,104872],{}," 不是严格等于 ",[33,105027,104876],{},[19,105029,105030],{},"这通常不是错误。浮点数计算可能得到：",[26,105032,105035],{"className":105033,"code":105034,"language":690,"meta":31},[688],"1.0000000000000007\n",[33,105036,105034],{"__ignoreMap":31},[19,105038,105039,105040,105042],{},"只要接近 ",[33,105041,104876],{}," 就正常。",[997,105044,105045],{"id":105045},"方块没有掉下来",[19,105047,105048],{},"检查：",[433,105050,105051,105057,105063,105068],{},[436,105052,105053,105054],{},"方块 body 里是否有 ",[33,105055,105056],{},"\u003Cfreejoint\u002F>",[436,105058,105059,105060],{},"重力是否是 ",[33,105061,105062],{},"0 0 -9.81",[436,105064,105065,105066],{},"是否真的调用了 ",[33,105067,103161],{},[436,105069,105070,105071,105073,105074],{},"你看的是否是 ",[33,105072,104816],{},"，不是 ",[33,105075,105076],{},"initial qpos",[14,105078,105080],{"id":105079},"_8本章小结","8.本章小结",[19,105082,105083],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,105085,105088],{"className":105086,"code":105087,"language":690,"meta":31},[688],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,105089,105087],{"__ignoreMap":31},[19,105091,105092],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2602,105094,105095],{},"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":31,"searchDepth":46,"depth":46,"links":105097},[105098,105099,105100,105105,105109,105110,105111,105119],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":105101},[105102,105103,105104],{"id":103556,"depth":82,"text":103557},{"id":103650,"depth":82,"text":103651},{"id":103702,"depth":82,"text":103703},{"id":103726,"depth":46,"text":103727,"children":105106},[105107,105108],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":105112},[105113,105114,105115,105116,105118],{"id":104929,"depth":82,"text":104932},{"id":104952,"depth":82,"text":104953},{"id":104992,"depth":82,"text":104993},{"id":105022,"depth":82,"text":105117},"final time 不是严格等于 1.0",{"id":105045,"depth":82,"text":105045},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103114,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105126,"title":105127,"body":105128,"description":31,"extension":2631,"meta":106783,"navigation":545,"path":106784,"seo":106785,"stem":106786,"__hash__":106787},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105129,"toc":106759},[105130,105133,105135,105138,105141,105158,105253,105256,105262,105264,105266,105290,105293,105307,105310,105351,105353,105366,105368,105371,105419,105431,105434,105437,105443,105456,105523,105526,105545,105548,105551,105557,105559,105568,105571,105575,105583,105665,105674,105678,105684,105698,105708,105710,106040,106043,106055,106057,106068,106070,106073,106091,106094,106097,106115,106126,106129,106144,106154,106156,106177,106194,106214,106220,106260,106276,106292,106298,106301,106325,106341,106346,106376,106393,106418,106421,106436,106445,106460,106469,106484,106491,106493,106503,106516,106523,106526,106565,106572,106574,106626,106628,106634,106637,106644,106651,106654,106656,106674,106677,106680,106714,106726,106728,106731,106753,106756],[10,105131,105127],{"id":105132},"_2xml-与-mjcf-物理建模基础",[14,105134,103123],{"id":103122},[19,105136,105137],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105139,105140],{},"本章结束后，你应该能看懂一个简单模型里：",[433,105142,105143,105146,105149,105152,105155],{},[436,105144,105145],{},"地面在哪里。",[436,105147,105148],{},"物体初始位置在哪里。",[436,105150,105151],{},"几何体是什么形状。",[436,105153,105154],{},"哪些 body 可以自由运动。",[436,105156,105157],{},"如何用名字在 Python 里找到 XML 中的对象。",[206,105159,105160,105170],{},[209,105161,105162],{},[212,105163,105164,105167],{},[215,105165,105166],{"align":26253},"标签",[215,105168,105169],{"align":26253},"作用",[225,105171,105172,105181,105191,105200,105210,105220,105233,105243],{},[212,105173,105174,105178],{},[230,105175,105176],{"align":26253},[33,105177,105010],{},[230,105179,105180],{"align":26253},"根节点",[212,105182,105183,105188],{},[230,105184,105185],{"align":26253},[33,105186,105187],{},"\u003Coption>",[230,105189,105190],{"align":26253},"仿真参数",[212,105192,105193,105197],{},[230,105194,105195],{"align":26253},[33,105196,105018],{},[230,105198,105199],{"align":26253},"世界中的物体",[212,105201,105202,105207],{},[230,105203,105204],{"align":26253},[33,105205,105206],{},"\u003Cbody>",[230,105208,105209],{"align":26253},"刚体",[212,105211,105212,105217],{},[230,105213,105214],{"align":26253},[33,105215,105216],{},"\u003Cgeom>",[230,105218,105219],{"align":26253},"几何体、碰撞体、可视体",[212,105221,105222,105230],{},[230,105223,105224,27495,105227],{"align":26253},[33,105225,105226],{},"\u003Cjoint>",[33,105228,105229],{},"\u003Cfreejoint>",[230,105231,105232],{"align":26253},"关节",[212,105234,105235,105240],{},[230,105236,105237],{"align":26253},[33,105238,105239],{},"\u003Csite>",[230,105241,105242],{"align":26253},"标记点",[212,105244,105245,105250],{},[230,105246,105247],{"align":26253},[33,105248,105249],{},"\u003Cactuator>",[230,105251,105252],{"align":26253},"控制器",[19,105254,105255],{},"初学时可以先记住：",[26,105257,105260],{"className":105258,"code":105259,"language":690,"meta":31},[688],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,105261,105259],{"__ignoreMap":31},[14,105263,103245],{"id":103244},[19,105265,103248],{},[26,105267,105269],{"className":26338,"code":105268,"language":26340,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,105270,105271],{"__ignoreMap":31},[36,105272,105273,105275,105277,105279,105281,105283,105285,105287],{"class":38,"line":39},[36,105274,27093],{"class":4500},[36,105276,28827],{"class":57},[36,105278,26350],{"class":57},[36,105280,28912],{"class":49},[36,105282,104974],{"class":57},[36,105284,103289],{"class":57},[36,105286,104979],{"class":57},[36,105288,105289],{"class":57}," glfw-devel\n",[19,105291,105292],{},"pip:",[26,105294,105295],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},[33,105296,105297],{"__ignoreMap":31},[36,105298,105299,105301,105303,105305],{"class":38,"line":39},[36,105300,26347],{"class":4500},[36,105302,26350],{"class":57},[36,105304,103405],{"class":57},[36,105306,103408],{"class":57},[19,105308,105309],{},"conda:",[26,105311,105313],{"className":26338,"code":105312,"language":26340,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,105314,105315,105332,105341],{"__ignoreMap":31},[36,105316,105317,105319,105321,105323,105326,105328,105330],{"class":38,"line":39},[36,105318,32840],{"class":4500},[36,105320,31686],{"class":57},[36,105322,27631],{"class":49},[36,105324,105325],{"class":57}," mujoco-xml",[36,105327,103450],{"class":57},[36,105329,103453],{"class":49},[36,105331,103456],{"class":49},[36,105333,105334,105336,105338],{"class":38,"line":46},[36,105335,32840],{"class":4500},[36,105337,103463],{"class":57},[36,105339,105340],{"class":57}," mujoco-xml\n",[36,105342,105343,105345,105347,105349],{"class":38,"line":82},[36,105344,26347],{"class":4500},[36,105346,26350],{"class":57},[36,105348,103405],{"class":57},[36,105350,103408],{"class":57},[19,105352,103479],{},[433,105354,105355,105358,105363],{},[436,105356,105357],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[436,105359,105360,105361,1296],{},"本章使用基础标签，适用于 ",[33,105362,103501],{},[436,105364,105365],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105367,103519],{"id":103518},[19,105369,105370],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,105372,105374],{"className":55561,"code":105373,"language":55563,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,105375,105376,105390,105398,105403,105411],{"__ignoreMap":31},[36,105377,105378,105380,105382,105384,105386,105388],{"class":38,"line":39},[36,105379,1507],{"class":53},[36,105381,103495],{"class":53794},[36,105383,104248],{"class":4500},[36,105385,115],{"class":53},[36,105387,65167],{"class":57},[36,105389,53801],{"class":53},[36,105391,105392,105394,105396],{"class":38,"line":46},[36,105393,54638],{"class":53},[36,105395,104314],{"class":53794},[36,105397,53801],{"class":53},[36,105399,105400],{"class":38,"line":82},[36,105401,105402],{"class":53},"    ...\n",[36,105404,105405,105407,105409],{"class":38,"line":88},[36,105406,54911],{"class":53},[36,105408,104314],{"class":53794},[36,105410,53801],{"class":53},[36,105412,105413,105415,105417],{"class":38,"line":195},[36,105414,54279],{"class":53},[36,105416,103495],{"class":53794},[36,105418,53801],{"class":53},[19,105420,105421,105423,105424,105426,105427,105430],{},[33,105422,54294],{}," 表示刚体。",[33,105425,103594],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,105428,105429],{},"joint"," 表示刚体相对父刚体如何运动。",[997,105432,105433],{"id":105433},"层级结构非常重要",[19,105435,105436],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,105438,105441],{"className":105439,"code":105440,"language":690,"meta":31},[688],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,105442,105440],{"__ignoreMap":31},[19,105444,105445,1292,105448,105451,105452,105455],{},[33,105446,105447],{},"red_box_geom",[33,105449,105450],{},"box_center"," 都属于 ",[33,105453,105454],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,105457,105459],{"className":55561,"code":105458,"language":55563,"meta":31,"style":31},"\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",[33,105460,105461,105481,105495,105515],{"__ignoreMap":31},[36,105462,105463,105465,105467,105469,105471,105473,105475,105477,105479],{"class":38,"line":39},[36,105464,1507],{"class":53},[36,105466,54294],{"class":53794},[36,105468,17440],{"class":4500},[36,105470,115],{"class":53},[36,105472,55985],{"class":57},[36,105474,103580],{"class":4500},[36,105476,115],{"class":53},[36,105478,103585],{"class":57},[36,105480,53801],{"class":53},[36,105482,105483,105485,105487,105489,105491,105493],{"class":38,"line":46},[36,105484,54638],{"class":53},[36,105486,104093],{"class":53794},[36,105488,17440],{"class":4500},[36,105490,115],{"class":53},[36,105492,104434],{"class":57},[36,105494,103618],{"class":53},[36,105496,105497,105499,105501,105503,105505,105507,105509,105511,105513],{"class":38,"line":82},[36,105498,54638],{"class":53},[36,105500,103594],{"class":53794},[36,105502,56317],{"class":4500},[36,105504,115],{"class":53},[36,105506,55985],{"class":57},[36,105508,103610],{"class":4500},[36,105510,115],{"class":53},[36,105512,103615],{"class":57},[36,105514,103618],{"class":53},[36,105516,105517,105519,105521],{"class":38,"line":88},[36,105518,54279],{"class":53},[36,105520,54294],{"class":53794},[36,105522,53801],{"class":53},[19,105524,105525],{},"含义:",[433,105527,105528,105534,105539,105542],{},[436,105529,105530,105531,105533],{},"创建名为 ",[33,105532,56208],{}," 的刚体",[436,105535,105536,105537],{},"初始位置在世界坐标 ",[33,105538,103643],{},[436,105540,105541],{},"它有一个自由关节",[436,105543,105544],{},"它有一个盒子几何体",[997,105546,105547],{"id":105547},"坐标怎么理解",[19,105549,105550],{},"MuJoCo 默认使用三维坐标：",[26,105552,105555],{"className":105553,"code":105554,"language":690,"meta":31},[688],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,105556,105554],{"__ignoreMap":31},[19,105558,17155],{},[26,105560,105562],{"className":55561,"code":105561,"language":55563,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,105563,105564],{"__ignoreMap":31},[36,105565,105566],{"class":38,"line":39},[36,105567,105561],{"class":53},[19,105569,105570],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[997,105572,105574],{"id":105573},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105576,105577,105578,85011,105580,105582],{},"不同 ",[33,105579,618],{},[33,105581,33999],{}," 含义不同：",[206,105584,105585,105600],{},[209,105586,105587],{},[212,105588,105589,105593,105598],{},[215,105590,105591],{"align":26253},[33,105592,618],{},[215,105594,105595,105597],{"align":26253},[33,105596,33999],{}," 示例",[215,105599,1635],{"align":26253},[225,105601,105602,105616,105631,105650],{},[212,105603,105604,105608,105613],{},[230,105605,105606],{"align":26253},[33,105607,56208],{},[230,105609,105610],{"align":26253},[33,105611,105612],{},"size=\"0.1 0.2 0.3\"",[230,105614,105615],{"align":26253},"x\u002Fy\u002Fz 半边长，不是完整长度",[212,105617,105618,105623,105628],{},[230,105619,105620],{"align":26253},[33,105621,105622],{},"sphere",[230,105624,105625],{"align":26253},[33,105626,105627],{},"size=\"0.1\"",[230,105629,105630],{"align":26253},"球半径",[212,105632,105633,105638,105643],{},[230,105634,105635],{"align":26253},[33,105636,105637],{},"capsule",[230,105639,105640],{"align":26253},[33,105641,105642],{},"size=\"0.03\"",[230,105644,105645,105646,105649],{"align":26253},"胶囊半径，长度常用 ",[33,105647,105648],{},"fromto"," 指定",[212,105651,105652,105657,105662],{},[230,105653,105654],{"align":26253},[33,105655,105656],{},"plane",[230,105658,105659],{"align":26253},[33,105660,105661],{},"size=\"3 3 0.1\"",[230,105663,105664],{"align":26253},"可视平面大小，通常当地面",[19,105666,105667,105668,105670,105671,105673],{},"最容易踩坑的是 box：",[33,105669,104497],{}," 表示边长大约是 ",[33,105672,34540],{},"，因为 MuJoCo 用的是半边长。",[997,105675,105677],{"id":105676},"site-是什么","site 是什么",[19,105679,105680,105683],{},[33,105681,105682],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[433,105685,105686,105689,105692,105695],{},[436,105687,105688],{},"标记机械臂末端。",[436,105690,105691],{},"标记目标位置。",[436,105693,105694],{},"放传感器或相机参考点。",[436,105696,105697],{},"在 Python 中读取某个关键点的世界坐标。",[19,105699,105700,105701,1292,105704,105707],{},"在后面的 Reacher 任务中，",[33,105702,105703],{},"tip",[33,105705,105706],{},"target"," 就会用 site 表示。",[14,105709,103727],{"id":103726},[26,105711,105713],{"className":28,"code":105712,"language":30,"meta":31,"style":31},"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",[33,105714,105715,105721,105731,105735,105739,105747,105752,105756,105760,105764,105769,105773,105778,105783,105788,105793,105797,105801,105805,105809,105813,105817,105829,105841,105849,105853,105868,105883,105887,105900,105915,105928,105941,105945,105961,105965,105969,105980,105992,106004,106016,106020,106024,106036],{"__ignoreMap":31},[36,105716,105717,105719],{"class":38,"line":39},[36,105718,537],{"class":114},[36,105720,103775],{"class":53},[36,105722,105723,105725,105727,105729],{"class":38,"line":46},[36,105724,537],{"class":114},[36,105726,33884],{"class":53},[36,105728,33887],{"class":114},[36,105730,33890],{"class":53},[36,105732,105733],{"class":38,"line":82},[36,105734,546],{"emptyLinePlaceholder":545},[36,105736,105737],{"class":38,"line":88},[36,105738,546],{"emptyLinePlaceholder":545},[36,105740,105741,105743,105745],{"class":38,"line":195},[36,105742,103788],{"class":49},[36,105744,498],{"class":114},[36,105746,103793],{"class":57},[36,105748,105749],{"class":38,"line":1517},[36,105750,105751],{"class":57},"\u003Cmujoco model=\"xml_basic\">\n",[36,105753,105754],{"class":38,"line":2421},[36,105755,103803],{"class":57},[36,105757,105758],{"class":38,"line":2446},[36,105759,546],{"emptyLinePlaceholder":545},[36,105761,105762],{"class":38,"line":2469},[36,105763,103812],{"class":57},[36,105765,105766],{"class":38,"line":2492},[36,105767,105768],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,105770,105771],{"class":38,"line":4150},[36,105772,546],{"emptyLinePlaceholder":545},[36,105774,105775],{"class":38,"line":4155},[36,105776,105777],{"class":57},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,105779,105780],{"class":38,"line":4161},[36,105781,105782],{"class":57},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,105784,105785],{"class":38,"line":4166},[36,105786,105787],{"class":57},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,105789,105790],{"class":38,"line":4180},[36,105791,105792],{"class":57},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,105794,105795],{"class":38,"line":4185},[36,105796,103841],{"class":57},[36,105798,105799],{"class":38,"line":4191},[36,105800,103846],{"class":57},[36,105802,105803],{"class":38,"line":4212},[36,105804,103851],{"class":57},[36,105806,105807],{"class":38,"line":4217},[36,105808,74],{"class":57},[36,105810,105811],{"class":38,"line":4231},[36,105812,546],{"emptyLinePlaceholder":545},[36,105814,105815],{"class":38,"line":4236},[36,105816,546],{"emptyLinePlaceholder":545},[36,105818,105819,105821,105823,105825,105827],{"class":38,"line":4264},[36,105820,34450],{"class":114},[36,105822,4510],{"class":4500},[36,105824,103872],{"class":53},[36,105826,198],{"class":49},[36,105828,6270],{"class":53},[36,105830,105831,105833,105835,105837,105839],{"class":38,"line":4269},[36,105832,103881],{"class":53},[36,105834,115],{"class":114},[36,105836,103886],{"class":53},[36,105838,103788],{"class":49},[36,105840,61],{"class":53},[36,105842,105843,105845,105847],{"class":38,"line":4286},[36,105844,103895],{"class":53},[36,105846,115],{"class":114},[36,105848,103900],{"class":53},[36,105850,105851],{"class":38,"line":4291},[36,105852,546],{"emptyLinePlaceholder":545},[36,105854,105855,105858,105860,105863,105866],{"class":38,"line":4296},[36,105856,105857],{"class":53},"    box_body_id ",[36,105859,115],{"class":114},[36,105861,105862],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,105864,105865],{"class":57},"\"red_box\"",[36,105867,61],{"class":53},[36,105869,105870,105873,105875,105878,105881],{"class":38,"line":4301},[36,105871,105872],{"class":53},"    site_id ",[36,105874,115],{"class":114},[36,105876,105877],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,105879,105880],{"class":57},"\"box_center\"",[36,105882,61],{"class":53},[36,105884,105885],{"class":38,"line":4315},[36,105886,546],{"emptyLinePlaceholder":545},[36,105888,105889,105891,105894,105896,105898],{"class":38,"line":4320},[36,105890,5632],{"class":114},[36,105892,105893],{"class":53}," box_body_id ",[36,105895,1507],{"class":114},[36,105897,6624],{"class":49},[36,105899,6270],{"class":53},[36,105901,105902,105905,105908,105910,105913],{"class":38,"line":5109},[36,105903,105904],{"class":114},"        raise",[36,105906,105907],{"class":49}," RuntimeError",[36,105909,54],{"class":53},[36,105911,105912],{"class":57},"\"body red_box not found\"",[36,105914,61],{"class":53},[36,105916,105917,105919,105922,105924,105926],{"class":38,"line":5123},[36,105918,5632],{"class":114},[36,105920,105921],{"class":53}," site_id ",[36,105923,1507],{"class":114},[36,105925,6624],{"class":49},[36,105927,6270],{"class":53},[36,105929,105930,105932,105934,105936,105939],{"class":38,"line":5131},[36,105931,105904],{"class":114},[36,105933,105907],{"class":49},[36,105935,54],{"class":53},[36,105937,105938],{"class":57},"\"site box_center not found\"",[36,105940,61],{"class":53},[36,105942,105943],{"class":38,"line":5136},[36,105944,546],{"emptyLinePlaceholder":545},[36,105946,105947,105949,105951,105953,105955,105957,105959],{"class":38,"line":5142},[36,105948,5732],{"class":114},[36,105950,103975],{"class":53},[36,105952,28556],{"class":114},[36,105954,34946],{"class":49},[36,105956,54],{"class":53},[36,105958,4259],{"class":49},[36,105960,33290],{"class":53},[36,105962,105963],{"class":38,"line":5148},[36,105964,103990],{"class":53},[36,105966,105967],{"class":38,"line":5153},[36,105968,546],{"emptyLinePlaceholder":545},[36,105970,105971,105973,105975,105978],{"class":38,"line":10475},[36,105972,33803],{"class":49},[36,105974,54],{"class":53},[36,105976,105977],{"class":57},"\"simulation time:\"",[36,105979,103952],{"class":53},[36,105981,105982,105984,105986,105989],{"class":38,"line":10499},[36,105983,33803],{"class":49},[36,105985,54],{"class":53},[36,105987,105988],{"class":57},"\"box body position:\"",[36,105990,105991],{"class":53},", data.xpos[box_body_id].copy())\n",[36,105993,105994,105996,105998,106001],{"class":38,"line":10504},[36,105995,33803],{"class":49},[36,105997,54],{"class":53},[36,105999,106000],{"class":57},"\"site position:\"",[36,106002,106003],{"class":53},", data.site_xpos[site_id].copy())\n",[36,106005,106006,106008,106010,106013],{"class":38,"line":10510},[36,106007,33803],{"class":49},[36,106009,54],{"class":53},[36,106011,106012],{"class":57},"\"box qpos:\"",[36,106014,106015],{"class":53},", np.array(data.qpos))\n",[36,106017,106018],{"class":38,"line":10537},[36,106019,546],{"emptyLinePlaceholder":545},[36,106021,106022],{"class":38,"line":10542},[36,106023,546],{"emptyLinePlaceholder":545},[36,106025,106026,106028,106030,106032,106034],{"class":38,"line":10548},[36,106027,4069],{"class":114},[36,106029,33724],{"class":49},[36,106031,1351],{"class":114},[36,106033,104035],{"class":57},[36,106035,6270],{"class":53},[36,106037,106038],{"class":38,"line":10560},[36,106039,104042],{"class":53},[19,106041,106042],{},"保存为：",[26,106044,106046],{"className":26338,"code":106045,"language":26340,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,106047,106048],{"__ignoreMap":31},[36,106049,106050,106052],{"class":38,"line":39},[36,106051,103757],{"class":4500},[36,106053,106054],{"class":57}," ch2_xml_basic.py\n",[19,106056,104774],{},[26,106058,106060],{"className":26338,"code":106059,"language":26340,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,106061,106062],{"__ignoreMap":31},[36,106063,106064,106066],{"class":38,"line":39},[36,106065,30],{"class":4500},[36,106067,106054],{"class":57},[997,106069,104045],{"id":104045},[19,106071,106072],{},"用名字查找 body：",[26,106074,106076],{"className":28,"code":106075,"language":30,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,106077,106078],{"__ignoreMap":31},[36,106079,106080,106083,106085,106087,106089],{"class":38,"line":39},[36,106081,106082],{"class":53},"box_body_id ",[36,106084,115],{"class":114},[36,106086,105862],{"class":53},[36,106088,105865],{"class":57},[36,106090,61],{"class":53},[19,106092,106093],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106095,106096],{},"用名字查找 site：",[26,106098,106100],{"className":28,"code":106099,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,106101,106102],{"__ignoreMap":31},[36,106103,106104,106107,106109,106111,106113],{"class":38,"line":39},[36,106105,106106],{"class":53},"site_id ",[36,106108,115],{"class":114},[36,106110,105877],{"class":53},[36,106112,105880],{"class":57},[36,106114,61],{"class":53},[19,106116,106117,106118,106121,106122,106125],{},"注意第二个参数是对象类型。查 body 就用 ",[33,106119,106120],{},"mjOBJ_BODY","，查 site 就用 ",[33,106123,106124],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,106127,106128],{},"读取世界坐标：",[26,106130,106132],{"className":28,"code":106131,"language":30,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,106133,106134,106139],{"__ignoreMap":31},[36,106135,106136],{"class":38,"line":39},[36,106137,106138],{"class":53},"data.xpos[box_body_id]\n",[36,106140,106141],{"class":38,"line":46},[36,106142,106143],{"class":53},"data.site_xpos[site_id]\n",[19,106145,106146,106149,106150,106153],{},[33,106147,106148],{},"xpos"," 是 body 的世界坐标，",[33,106151,106152],{},"site_xpos"," 是 site 的世界坐标。",[997,106155,104181],{"id":104181},[26,106157,106159],{"className":28,"code":106158,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,106160,106161,106167],{"__ignoreMap":31},[36,106162,106163,106165],{"class":38,"line":39},[36,106164,537],{"class":114},[36,106166,103775],{"class":53},[36,106168,106169,106171,106173,106175],{"class":38,"line":46},[36,106170,537],{"class":114},[36,106172,33884],{"class":53},[36,106174,33887],{"class":114},[36,106176,33890],{"class":53},[19,106178,106179,106180,106183,106184,106187,106188,273,106191,1296],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,106181,106182],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,106185,106186],{},"as np"," 是习惯写法，后面就可以写 ",[33,106189,106190],{},"np.array(...)",[33,106192,106193],{},"np.round(...)",[26,106195,106196],{"className":28,"code":104068,"language":30,"meta":31,"style":31},[33,106197,106198,106206,106210],{"__ignoreMap":31},[36,106199,106200,106202,106204],{"class":38,"line":39},[36,106201,103788],{"class":49},[36,106203,498],{"class":114},[36,106205,103793],{"class":57},[36,106207,106208],{"class":38,"line":46},[36,106209,104083],{"class":57},[36,106211,106212],{"class":38,"line":82},[36,106213,74],{"class":57},[19,106215,106216,106217,1296],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,106218,106219],{},"mujoco.MjModel.from_xml_string(XML)",[26,106221,106223],{"className":55561,"code":106222,"language":55563,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,106224,106225],{"__ignoreMap":31},[36,106226,106227,106229,106231,106233,106235,106237,106239,106241,106244,106246,106248,106251,106253,106255,106258],{"class":38,"line":39},[36,106228,1507],{"class":53},[36,106230,105682],{"class":53794},[36,106232,17440],{"class":4500},[36,106234,115],{"class":53},[36,106236,105880],{"class":57},[36,106238,103580],{"class":4500},[36,106240,115],{"class":53},[36,106242,106243],{"class":57},"\"0 0 0\"",[36,106245,103610],{"class":4500},[36,106247,115],{"class":53},[36,106249,106250],{"class":57},"\"0.03\"",[36,106252,81250],{"class":4500},[36,106254,115],{"class":53},[36,106256,106257],{"class":57},"\"0 1 0 1\"",[36,106259,103618],{"class":53},[19,106261,106262,106264,106265,106268,106269,106271,106272,106275],{},[33,106263,105682],{}," 是标记点。",[33,106266,106267],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,106270,105642],{}," 表示显示出来的小球大小。",[33,106273,106274],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,106277,106278],{"className":28,"code":106075,"language":30,"meta":31,"style":31},[33,106279,106280],{"__ignoreMap":31},[36,106281,106282,106284,106286,106288,106290],{"class":38,"line":39},[36,106283,106082],{"class":53},[36,106285,115],{"class":114},[36,106287,105862],{"class":53},[36,106289,105865],{"class":57},[36,106291,61],{"class":53},[19,106293,106294,106295,106297],{},"这行的作用是：根据名字 ",[33,106296,105865],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106299,106300],{},"拆开看：",[433,106302,106303,106309,106314,106320],{},[436,106304,106305,106308],{},[33,106306,106307],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[436,106310,106311,106313],{},[33,106312,104558],{}," 是被查询的模型。",[436,106315,106316,106319],{},[33,106317,106318],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[436,106321,106322,106324],{},[33,106323,105865],{}," 是 XML 里写的名字。",[26,106326,106327],{"className":28,"code":106099,"language":30,"meta":31,"style":31},[33,106328,106329],{"__ignoreMap":31},[36,106330,106331,106333,106335,106337,106339],{"class":38,"line":39},[36,106332,106106],{"class":53},[36,106334,115],{"class":114},[36,106336,105877],{"class":53},[36,106338,105880],{"class":57},[36,106340,61],{"class":53},[19,106342,106343,106344,1296],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,106345,105880],{},[26,106347,106349],{"className":28,"code":106348,"language":30,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,106350,106351,106363],{"__ignoreMap":31},[36,106352,106353,106355,106357,106359,106361],{"class":38,"line":39},[36,106354,4069],{"class":114},[36,106356,105893],{"class":53},[36,106358,1507],{"class":114},[36,106360,6624],{"class":49},[36,106362,6270],{"class":53},[36,106364,106365,106368,106370,106372,106374],{"class":38,"line":46},[36,106366,106367],{"class":114},"    raise",[36,106369,105907],{"class":49},[36,106371,54],{"class":53},[36,106373,105912],{"class":57},[36,106375,61],{"class":53},[19,106377,106378,106380,106381,106384,106385,106388,106389,106392],{},[33,106379,4069],{}," 是条件判断。",[33,106382,106383],{},"mj_name2id"," 找不到对象时会返回 ",[33,106386,106387],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,106390,106391],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,106394,106396],{"className":28,"code":106395,"language":30,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,106397,106398,106414],{"__ignoreMap":31},[36,106399,106400,106402,106404,106406,106408,106410,106412],{"class":38,"line":39},[36,106401,5556],{"class":114},[36,106403,103975],{"class":53},[36,106405,28556],{"class":114},[36,106407,34946],{"class":49},[36,106409,54],{"class":53},[36,106411,4259],{"class":49},[36,106413,33290],{"class":53},[36,106415,106416],{"class":38,"line":46},[36,106417,104172],{"class":53},[19,106419,106420],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,106422,106424],{"className":28,"code":106423,"language":30,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,106425,106426],{"__ignoreMap":31},[36,106427,106428,106430,106432,106434],{"class":38,"line":39},[36,106429,50],{"class":49},[36,106431,54],{"class":53},[36,106433,105988],{"class":57},[36,106435,105991],{"class":53},[19,106437,106438,106440,106441,106444],{},[33,106439,103553],{}," 保存所有 body 的世界坐标。",[33,106442,106443],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,106446,106448],{"className":28,"code":106447,"language":30,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,106449,106450],{"__ignoreMap":31},[36,106451,106452,106454,106456,106458],{"class":38,"line":39},[36,106453,50],{"class":49},[36,106455,54],{"class":53},[36,106457,106000],{"class":57},[36,106459,106003],{"class":53},[19,106461,106462,106465,106466,106468],{},[33,106463,106464],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,106467,105450],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,106470,106472],{"className":28,"code":106471,"language":30,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,106473,106474],{"__ignoreMap":31},[36,106475,106476,106478,106480,106482],{"class":38,"line":39},[36,106477,50],{"class":49},[36,106479,54],{"class":53},[36,106481,106012],{"class":57},[36,106483,106015],{"class":53},[19,106485,106486,106487,106490],{},"这里打印广义位置数组。",[33,106488,106489],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106492,104789],{"id":104788},[19,106494,106495,106496,106499,106500,1296],{},"程序会输出 ",[33,106497,106498],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,106501,106502],{},"qpos",[19,106504,106505,106507,106508,106511,106512,106515],{},[33,106506,106443],{}," 是 body 的世界坐标位置。",[33,106509,106510],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,106513,106514],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106517,84703,106518,85011,106520,106522],{},[33,106519,105450],{},[33,106521,106267],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106524,106525],{},"如果你把 site 改成：",[26,106527,106529],{"className":55561,"code":106528,"language":55563,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,106530,106531],{"__ignoreMap":31},[36,106532,106533,106535,106537,106539,106541,106544,106546,106548,106551,106553,106555,106557,106559,106561,106563],{"class":38,"line":39},[36,106534,1507],{"class":53},[36,106536,105682],{"class":53794},[36,106538,17440],{"class":4500},[36,106540,115],{"class":53},[36,106542,106543],{"class":57},"\"box_top\"",[36,106545,103580],{"class":4500},[36,106547,115],{"class":53},[36,106549,106550],{"class":57},"\"0 0 0.15\"",[36,106552,103610],{"class":4500},[36,106554,115],{"class":53},[36,106556,106250],{"class":57},[36,106558,81250],{"class":4500},[36,106560,115],{"class":53},[36,106562,106257],{"class":57},[36,106564,103618],{"class":53},[19,106566,106567,106568,106571],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,106569,106570],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106573,104821],{"id":104820},[433,106575,106576,106585,106588,106595,106601,106612],{},[436,106577,104884,106578,106580,106581,104887,106583,1296],{},[33,106579,105454],{}," 的初始高度从 ",[33,106582,707],{},[33,106584,1188],{},[436,106586,106587],{},"重新运行程序。",[436,106589,106590,106591,106594],{},"观察 ",[33,106592,106593],{},"box qpos"," 和最终位置是否变化。",[436,106596,106597,106598,106600],{},"故意把 ",[33,106599,105682],{}," 名称改错，确认程序能报错。",[436,106602,104884,106603,106605,106606,104887,106608,106611],{},[33,106604,103594],{}," 的颜色 ",[33,106607,104505],{},[33,106609,106610],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[436,106613,104884,106614,85011,106616,104887,106619,106622,106623,106625],{},[33,106615,105450],{},[33,106617,106618],{},"pos",[33,106620,106621],{},"0 0 0.2","，观察 ",[33,106624,106570],{}," 如何变化。",[14,106627,104926],{"id":104925},[997,106629,106631],{"id":106630},"xml-error-schema-violation",[33,106632,106633],{},"XML Error: Schema violation",[19,106635,106636],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[997,106638,106640,83771,106642],{"id":106639},"mj_name2id-返回-1",[33,106641,106383],{},[33,106643,106387],{},[19,106645,106646,106647,106650],{},"说明名字没有找到。检查 XML 中 ",[33,106648,106649],{},"name=\"...\"","，并确认对象类型正确。",[997,106652,106653],{"id":106653},"物体不下落",[19,106655,104996],{},[433,106657,106658,106663,106668],{},[436,106659,106660,106661],{},"body 是否有 ",[33,106662,104093],{},[436,106664,106665,106666],{},"gravity 是否为 ",[33,106667,105062],{},[436,106669,106670,106671,106673],{},"body 是否被固定在 ",[33,106672,104314],{}," 中",[997,106675,106676],{"id":106676},"坐标看起来不符合预期",[19,106678,106679],{},"先区分两种坐标：",[206,106681,106682,106691],{},[209,106683,106684],{},[212,106685,106686,106689],{},[215,106687,106688],{"align":26253},"坐标",[215,106690,1635],{"align":26253},[225,106692,106693,106703],{},[212,106694,106695,106700],{},[230,106696,106697,106698],{"align":26253},"XML 里的 ",[33,106699,106618],{},[230,106701,106702],{"align":26253},"相对父 body 的局部坐标",[212,106704,106705,106711],{},[230,106706,106707,27495,106709],{"align":26253},[33,106708,103553],{},[33,106710,106464],{},[230,106712,106713],{"align":26253},"仿真更新后的世界坐标",[19,106715,106716,106717,106719,106720,85020,106723,106725],{},"如果你修改了 ",[33,106718,103544],{},"，但还没调用 ",[33,106721,106722],{},"mj_forward",[33,106724,103689],{},"，世界坐标可能还没有更新。",[14,106727,105080],{"id":105079},[19,106729,106730],{},"MJCF 建模先掌握四件事：",[433,106732,106733,106738,106743,106748],{},[436,106734,106735,106737],{},[33,106736,54294],{}," 表示刚体层级。",[436,106739,106740,106742],{},[33,106741,103594],{}," 表示形状、碰撞和质量。",[436,106744,106745,106747],{},[33,106746,105429],{}," 决定 body 能不能动、怎么动。",[436,106749,106750,106752],{},[33,106751,105682],{}," 用来标记关键点，方便 Python 读取位置。",[19,106754,106755],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2602,106757,106758],{},"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":31,"searchDepth":46,"depth":46,"links":106760},[106761,106762,106763,106769,106773,106774,106775,106782],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":106764},[106765,106766,106767,106768],{"id":105433,"depth":82,"text":105433},{"id":105547,"depth":82,"text":105547},{"id":105573,"depth":82,"text":105574},{"id":105676,"depth":82,"text":105677},{"id":103726,"depth":46,"text":103727,"children":106770},[106771,106772],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":106776},[106777,106778,106780,106781],{"id":106630,"depth":82,"text":106633},{"id":106639,"depth":82,"text":106779},"mj_name2id 返回 -1",{"id":106653,"depth":82,"text":106653},{"id":106676,"depth":82,"text":106676},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105127,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106789,"title":106790,"body":106791,"description":31,"extension":2631,"meta":108285,"navigation":545,"path":108286,"seo":108287,"stem":108288,"__hash__":108289},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106792,"toc":108257},[106793,106796,106798,106801,106804,106841,106844,106850,106853,106855,106857,106884,106886,106900,106902,106943,106945,106969,106971,106974,106983,106992,106995,107004,107012,107021,107024,107034,107037,107089,107096,107102,107110,107158,107161,107180,107183,107191,107195,107204,107237,107239,107587,107589,107601,107603,107614,107616,107619,107640,107646,107649,107674,107684,107687,107695,107698,107701,107722,107733,107735,107755,107758,107779,107788,107807,107813,107838,107841,107855,107862,107886,107889,107897,107906,107922,107934,107942,107951,107953,107956,107980,107985,107988,108010,108012,108051,108053,108060,108062,108070,108073,108076,108088,108129,108136,108147,108154,108157,108206,108209,108212,108218,108220,108225,108251,108254],[10,106794,106790],{"id":106795},"_3python-控制接口读取状态与推进仿真",[14,106797,103123],{"id":103122},[19,106799,106800],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106802,106803],{},"你将学习:",[433,106805,106806,106811,106816,106820,106825,106836],{},[436,106807,106808],{},[33,106809,106810],{},"MjModel.from_xml_string",[436,106812,106813],{},[33,106814,106815],{},"MjData(model)",[436,106817,106818],{},[33,106819,103689],{},[436,106821,106822],{},[33,106823,106824],{},"mj_resetData",[436,106826,106827,106828,273,106830,273,106833],{},"读取 ",[33,106829,106502],{},[33,106831,106832],{},"qvel",[33,106834,106835],{},"ctrl",[436,106837,600,106838],{},[33,106839,106840],{},"model.opt.timestep",[19,106842,106843],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,106845,106848],{"className":106846,"code":106847,"language":690,"meta":31},[688],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,106849,106847],{"__ignoreMap":31},[19,106851,106852],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106854,103245],{"id":103244},[19,106856,103248],{},[26,106858,106860],{"className":26338,"code":106859,"language":26340,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,106861,106862],{"__ignoreMap":31},[36,106863,106864,106866,106868,106870,106872,106875,106877,106879,106881],{"class":38,"line":39},[36,106865,27093],{"class":4500},[36,106867,28827],{"class":57},[36,106869,26350],{"class":57},[36,106871,28912],{"class":49},[36,106873,106874],{"class":57}," python3",[36,106876,103273],{"class":57},[36,106878,104974],{"class":57},[36,106880,103289],{"class":57},[36,106882,106883],{"class":57}," glfw\n",[19,106885,105292],{},[26,106887,106888],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},[33,106889,106890],{"__ignoreMap":31},[36,106891,106892,106894,106896,106898],{"class":38,"line":39},[36,106893,26347],{"class":4500},[36,106895,26350],{"class":57},[36,106897,103405],{"class":57},[36,106899,103408],{"class":57},[19,106901,105309],{},[26,106903,106905],{"className":26338,"code":106904,"language":26340,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,106906,106907,106924,106933],{"__ignoreMap":31},[36,106908,106909,106911,106913,106915,106918,106920,106922],{"class":38,"line":39},[36,106910,32840],{"class":4500},[36,106912,31686],{"class":57},[36,106914,27631],{"class":49},[36,106916,106917],{"class":57}," mujoco-python-api",[36,106919,103450],{"class":57},[36,106921,103453],{"class":49},[36,106923,103456],{"class":49},[36,106925,106926,106928,106930],{"class":38,"line":46},[36,106927,32840],{"class":4500},[36,106929,103463],{"class":57},[36,106931,106932],{"class":57}," mujoco-python-api\n",[36,106934,106935,106937,106939,106941],{"class":38,"line":82},[36,106936,26347],{"class":4500},[36,106938,26350],{"class":57},[36,106940,103405],{"class":57},[36,106942,103408],{"class":57},[19,106944,103479],{},[433,106946,106947,106954,106963],{},[436,106948,106949,1292,106951,106953],{},[33,106950,103151],{},[33,106952,103156],{}," 是官方 Python bindings 的类名。",[436,106955,106956,106957,106960,106961,1296],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,106958,106959],{},"mjModel"," 在 Python 中是 ",[33,106962,103184],{},[436,106964,106965,106966,1296],{},"不要使用 ",[33,106967,106968],{},"sim = mujoco_py.MjSim(...)",[14,106970,103519],{"id":103518},[19,106972,106973],{},"仿真推进核心代码:",[26,106975,106977],{"className":28,"code":106976,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,106978,106979],{"__ignoreMap":31},[36,106980,106981],{"class":38,"line":39},[36,106982,106976],{"class":53},[19,106984,106985,106986,273,106988,273,106990,1296],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,106987,103544],{},[33,106989,103547],{},[33,106991,103541],{},[19,106993,106994],{},"重置仿真:",[26,106996,106998],{"className":28,"code":106997,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,106999,107000],{"__ignoreMap":31},[36,107001,107002],{"class":38,"line":39},[36,107003,106997],{"class":53},[19,107005,107006,107007,85020,107009,107011],{},"如果手动修改了 ",[33,107008,103544],{},[33,107010,103547],{},"，通常应调用:",[26,107013,107015],{"className":28,"code":107014,"language":30,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,107016,107017],{"__ignoreMap":31},[36,107018,107019],{"class":38,"line":39},[36,107020,107014],{"class":53},[19,107022,107023],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[997,107025,107027,273,107029,273,107031,107033],{"id":107026},"qposqvelctrl-是什么",[33,107028,106502],{},[33,107030,106832],{},[33,107032,106835],{}," 是什么",[19,107035,107036],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[206,107038,107039,107051],{},[209,107040,107041],{},[212,107042,107043,107046,107048],{},[215,107044,107045],{"align":26253},"字段",[215,107047,1635],{"align":26253},[215,107049,107050],{"align":26253},"谁来修改",[225,107052,107053,107065,107077],{},[212,107054,107055,107059,107062],{},[230,107056,107057],{"align":26253},[33,107058,103544],{},[230,107060,107061],{"align":26253},"广义位置，例如小车位置、关节角、自由物体位置姿态",[230,107063,107064],{"align":26253},"MuJoCo 更新，也可以手动设置初始状态",[212,107066,107067,107071,107074],{},[230,107068,107069],{"align":26253},[33,107070,103547],{},[230,107072,107073],{"align":26253},"广义速度，例如小车速度、关节角速度",[230,107075,107076],{"align":26253},"MuJoCo 更新，也可以手动清零",[212,107078,107079,107083,107086],{},[230,107080,107081],{"align":26253},[33,107082,103550],{},[230,107084,107085],{"align":26253},"actuator 的控制输入",[230,107087,107088],{"align":26253},"主要由你的控制代码写入",[19,107090,695,107091,1292,107093,107095],{},[33,107092,106502],{},[33,107094,106832],{}," 不一定同维。自由刚体就是典型例子：",[26,107097,107100],{"className":107098,"code":107099,"language":690,"meta":31},[688],"freejoint: qpos 7 维，qvel 6 维\n",[33,107101,107099],{"__ignoreMap":31},[997,107103,107105,1292,107107,107109],{"id":107104},"mj_step-和-mj_forward-的区别",[33,107106,103689],{},[33,107108,106722],{}," 的区别",[206,107111,107112,107125],{},[209,107113,107114],{},[212,107115,107116,107119,107122],{},[215,107117,107118],{"align":26253},"函数",[215,107120,107121],{"align":26253},"是否推进时间",[215,107123,107124],{"align":26253},"什么时候用",[225,107126,107127,107140],{},[212,107128,107129,107134,107137],{},[230,107130,107131],{"align":26253},[33,107132,107133],{},"mj_step(model, data)",[230,107135,107136],{"align":26253},"是",[230,107138,107139],{"align":26253},"正常仿真循环，每调用一次前进一步",[212,107141,107142,107147,107150],{},[230,107143,107144],{"align":26253},[33,107145,107146],{},"mj_forward(model, data)",[230,107148,107149],{"align":26253},"否",[230,107151,107152,107153,273,107155,107157],{"align":26253},"手动改了 ",[33,107154,106502],{},[33,107156,106832],{}," 后，刷新派生量",[19,107159,107160],{},"例如你写：",[26,107162,107164],{"className":28,"code":107163,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,107165,107166],{"__ignoreMap":31},[36,107167,107168,107171,107173,107175,107177],{"class":38,"line":39},[36,107169,107170],{"class":53},"data.qpos[",[36,107172,1188],{"class":49},[36,107174,6974],{"class":53},[36,107176,115],{"class":114},[36,107178,107179],{"class":49}," 2.0\n",[19,107181,107182],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,107184,107185],{"className":28,"code":107014,"language":30,"meta":31,"style":31},[33,107186,107187],{"__ignoreMap":31},[36,107188,107189],{"class":38,"line":39},[36,107190,107014],{"class":53},[997,107192,107194],{"id":107193},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,107196,107197,107200,107201,107203],{},[33,107198,107199],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,107202,35902],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,107205,107207],{"className":28,"code":107206,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,107208,107209,107213,107223,107233],{"__ignoreMap":31},[36,107210,107211],{"class":38,"line":39},[36,107212,106997],{"class":53},[36,107214,107215,107218,107220],{"class":38,"line":46},[36,107216,107217],{"class":53},"data.qpos[:] ",[36,107219,115],{"class":114},[36,107221,107222],{"class":53}," random_qpos\n",[36,107224,107225,107228,107230],{"class":38,"line":82},[36,107226,107227],{"class":53},"data.qvel[:] ",[36,107229,115],{"class":114},[36,107231,107232],{"class":49}," 0.0\n",[36,107234,107235],{"class":38,"line":88},[36,107236,107014],{"class":53},[14,107238,103727],{"id":103726},[26,107240,107242],{"className":28,"code":107241,"language":30,"meta":31,"style":31},"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",[33,107243,107244,107250,107260,107264,107268,107276,107281,107285,107289,107293,107298,107302,107307,107312,107317,107321,107325,107329,107333,107337,107341,107360,107367,107379,107390,107406,107422,107426,107430,107442,107454,107462,107466,107477,107481,107497,107501,107505,107514,107518,107523,107532,107536,107549,107554,107563,107567,107571,107583],{"__ignoreMap":31},[36,107245,107246,107248],{"class":38,"line":39},[36,107247,537],{"class":114},[36,107249,103775],{"class":53},[36,107251,107252,107254,107256,107258],{"class":38,"line":46},[36,107253,537],{"class":114},[36,107255,33884],{"class":53},[36,107257,33887],{"class":114},[36,107259,33890],{"class":53},[36,107261,107262],{"class":38,"line":82},[36,107263,546],{"emptyLinePlaceholder":545},[36,107265,107266],{"class":38,"line":88},[36,107267,546],{"emptyLinePlaceholder":545},[36,107269,107270,107272,107274],{"class":38,"line":195},[36,107271,103788],{"class":49},[36,107273,498],{"class":114},[36,107275,103793],{"class":57},[36,107277,107278],{"class":38,"line":1517},[36,107279,107280],{"class":57},"\u003Cmujoco model=\"state_api\">\n",[36,107282,107283],{"class":38,"line":2421},[36,107284,103803],{"class":57},[36,107286,107287],{"class":38,"line":2446},[36,107288,546],{"emptyLinePlaceholder":545},[36,107290,107291],{"class":38,"line":2469},[36,107292,103812],{"class":57},[36,107294,107295],{"class":38,"line":2492},[36,107296,107297],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,107299,107300],{"class":38,"line":4150},[36,107301,546],{"emptyLinePlaceholder":545},[36,107303,107304],{"class":38,"line":4155},[36,107305,107306],{"class":57},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,107308,107309],{"class":38,"line":4161},[36,107310,107311],{"class":57},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,107313,107314],{"class":38,"line":4166},[36,107315,107316],{"class":57},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,107318,107319],{"class":38,"line":4180},[36,107320,103841],{"class":57},[36,107322,107323],{"class":38,"line":4185},[36,107324,103846],{"class":57},[36,107326,107327],{"class":38,"line":4191},[36,107328,103851],{"class":57},[36,107330,107331],{"class":38,"line":4212},[36,107332,74],{"class":57},[36,107334,107335],{"class":38,"line":4217},[36,107336,546],{"emptyLinePlaceholder":545},[36,107338,107339],{"class":38,"line":4231},[36,107340,546],{"emptyLinePlaceholder":545},[36,107342,107343,107345,107348,107351,107353,107356,107358],{"class":38,"line":4236},[36,107344,34450],{"class":114},[36,107346,107347],{"class":4500}," print_state",[36,107349,107350],{"class":53},"(prefix: ",[36,107352,256],{"class":49},[36,107354,107355],{"class":53},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,107357,198],{"class":49},[36,107359,6270],{"class":53},[36,107361,107362,107364],{"class":38,"line":4264},[36,107363,33803],{"class":49},[36,107365,107366],{"class":53},"(prefix)\n",[36,107368,107369,107371,107373,107376],{"class":38,"line":4269},[36,107370,33803],{"class":49},[36,107372,54],{"class":53},[36,107374,107375],{"class":57},"\"  timestep:\"",[36,107377,107378],{"class":53},", model.opt.timestep)\n",[36,107380,107381,107383,107385,107388],{"class":38,"line":4286},[36,107382,33803],{"class":49},[36,107384,54],{"class":53},[36,107386,107387],{"class":57},"\"  time:\"",[36,107389,103952],{"class":53},[36,107391,107392,107394,107396,107399,107402,107404],{"class":38,"line":4291},[36,107393,33803],{"class":49},[36,107395,54],{"class":53},[36,107397,107398],{"class":57},"\"  qpos:\"",[36,107400,107401],{"class":53},", np.round(data.qpos.copy(), ",[36,107403,2977],{"class":49},[36,107405,625],{"class":53},[36,107407,107408,107410,107412,107415,107418,107420],{"class":38,"line":4296},[36,107409,33803],{"class":49},[36,107411,54],{"class":53},[36,107413,107414],{"class":57},"\"  qvel:\"",[36,107416,107417],{"class":53},", np.round(data.qvel.copy(), ",[36,107419,2977],{"class":49},[36,107421,625],{"class":53},[36,107423,107424],{"class":38,"line":4301},[36,107425,546],{"emptyLinePlaceholder":545},[36,107427,107428],{"class":38,"line":4315},[36,107429,546],{"emptyLinePlaceholder":545},[36,107431,107432,107434,107436,107438,107440],{"class":38,"line":4320},[36,107433,34450],{"class":114},[36,107435,4510],{"class":4500},[36,107437,103872],{"class":53},[36,107439,198],{"class":49},[36,107441,6270],{"class":53},[36,107443,107444,107446,107448,107450,107452],{"class":38,"line":5109},[36,107445,103881],{"class":53},[36,107447,115],{"class":114},[36,107449,103886],{"class":53},[36,107451,103788],{"class":49},[36,107453,61],{"class":53},[36,107455,107456,107458,107460],{"class":38,"line":5123},[36,107457,103895],{"class":53},[36,107459,115],{"class":114},[36,107461,103900],{"class":53},[36,107463,107464],{"class":38,"line":5131},[36,107465,546],{"emptyLinePlaceholder":545},[36,107467,107468,107471,107474],{"class":38,"line":5136},[36,107469,107470],{"class":53},"    print_state(",[36,107472,107473],{"class":57},"\"initial\"",[36,107475,107476],{"class":53},", model, data)\n",[36,107478,107479],{"class":38,"line":5142},[36,107480,546],{"emptyLinePlaceholder":545},[36,107482,107483,107485,107487,107489,107491,107493,107495],{"class":38,"line":5148},[36,107484,5732],{"class":114},[36,107486,103975],{"class":53},[36,107488,28556],{"class":114},[36,107490,34946],{"class":49},[36,107492,54],{"class":53},[36,107494,3332],{"class":49},[36,107496,33290],{"class":53},[36,107498,107499],{"class":38,"line":5153},[36,107500,103990],{"class":53},[36,107502,107503],{"class":38,"line":10475},[36,107504,546],{"emptyLinePlaceholder":545},[36,107506,107507,107509,107512],{"class":38,"line":10499},[36,107508,107470],{"class":53},[36,107510,107511],{"class":57},"\"after 50 steps\"",[36,107513,107476],{"class":53},[36,107515,107516],{"class":38,"line":10504},[36,107517,546],{"emptyLinePlaceholder":545},[36,107519,107520],{"class":38,"line":10510},[36,107521,107522],{"class":53},"    mujoco.mj_resetData(model, data)\n",[36,107524,107525,107527,107530],{"class":38,"line":10537},[36,107526,107470],{"class":53},[36,107528,107529],{"class":57},"\"after reset\"",[36,107531,107476],{"class":53},[36,107533,107534],{"class":38,"line":10542},[36,107535,546],{"emptyLinePlaceholder":545},[36,107537,107538,107541,107543,107545,107547],{"class":38,"line":10548},[36,107539,107540],{"class":53},"    data.qpos[",[36,107542,1188],{"class":49},[36,107544,6974],{"class":53},[36,107546,115],{"class":114},[36,107548,107179],{"class":49},[36,107550,107551],{"class":38,"line":10560},[36,107552,107553],{"class":53},"    mujoco.mj_forward(model, data)\n",[36,107555,107556,107558,107561],{"class":38,"line":10572},[36,107557,107470],{"class":53},[36,107559,107560],{"class":57},"\"after manual qpos edit\"",[36,107562,107476],{"class":53},[36,107564,107565],{"class":38,"line":10584},[36,107566,546],{"emptyLinePlaceholder":545},[36,107568,107569],{"class":38,"line":12241},[36,107570,546],{"emptyLinePlaceholder":545},[36,107572,107573,107575,107577,107579,107581],{"class":38,"line":12266},[36,107574,4069],{"class":114},[36,107576,33724],{"class":49},[36,107578,1351],{"class":114},[36,107580,104035],{"class":57},[36,107582,6270],{"class":53},[36,107584,107585],{"class":38,"line":12289},[36,107586,104042],{"class":53},[19,107588,106042],{},[26,107590,107592],{"className":26338,"code":107591,"language":26340,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,107593,107594],{"__ignoreMap":31},[36,107595,107596,107598],{"class":38,"line":39},[36,107597,103757],{"class":4500},[36,107599,107600],{"class":57}," ch3_python_state.py\n",[19,107602,104774],{},[26,107604,107606],{"className":26338,"code":107605,"language":26340,"meta":31,"style":31},"python ch3_python_state.py\n",[33,107607,107608],{"__ignoreMap":31},[36,107609,107610,107612],{"class":38,"line":39},[36,107611,30],{"class":4500},[36,107613,107600],{"class":57},[997,107615,104045],{"id":104045},[19,107617,107618],{},"打印状态的函数：",[26,107620,107622],{"className":28,"code":107621,"language":30,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,107623,107624],{"__ignoreMap":31},[36,107625,107626,107628,107630,107632,107634,107636,107638],{"class":38,"line":39},[36,107627,34450],{"class":114},[36,107629,107347],{"class":4500},[36,107631,107350],{"class":53},[36,107633,256],{"class":49},[36,107635,107355],{"class":53},[36,107637,198],{"class":49},[36,107639,6270],{"class":53},[19,107641,107642,107643,107645],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,107644,35902],{}," 里发生了什么。",[19,107647,107648],{},"推进 50 步：",[26,107650,107652],{"className":28,"code":107651,"language":30,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,107653,107654,107670],{"__ignoreMap":31},[36,107655,107656,107658,107660,107662,107664,107666,107668],{"class":38,"line":39},[36,107657,5556],{"class":114},[36,107659,103975],{"class":53},[36,107661,28556],{"class":114},[36,107663,34946],{"class":49},[36,107665,54],{"class":53},[36,107667,3332],{"class":49},[36,107669,33290],{"class":53},[36,107671,107672],{"class":38,"line":46},[36,107673,104172],{"class":53},[19,107675,107676,107677,107680,107681,107683],{},"由于 ",[33,107678,107679],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,107682,37829],{}," 秒。",[19,107685,107686],{},"重置：",[26,107688,107689],{"className":28,"code":106997,"language":30,"meta":31,"style":31},[33,107690,107691],{"__ignoreMap":31},[36,107692,107693],{"class":38,"line":39},[36,107694,106997],{"class":53},[19,107696,107697],{},"这会把时间、位置、速度恢复到初始状态。",[19,107699,107700],{},"手动改高度：",[26,107702,107704],{"className":28,"code":107703,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,107705,107706,107718],{"__ignoreMap":31},[36,107707,107708,107710,107712,107714,107716],{"class":38,"line":39},[36,107709,107170],{"class":53},[36,107711,1188],{"class":49},[36,107713,6974],{"class":53},[36,107715,115],{"class":114},[36,107717,107179],{"class":49},[36,107719,107720],{"class":38,"line":46},[36,107721,107014],{"class":53},[19,107723,107724,107725,107728,107729,107732],{},"这个例子里 ",[33,107726,107727],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,107730,107731],{},"2.0"," 表示把小球放到更高的位置。",[997,107734,104181],{"id":104181},[26,107736,107737],{"className":28,"code":107621,"language":30,"meta":31,"style":31},[33,107738,107739],{"__ignoreMap":31},[36,107740,107741,107743,107745,107747,107749,107751,107753],{"class":38,"line":39},[36,107742,34450],{"class":114},[36,107744,107347],{"class":4500},[36,107746,107350],{"class":53},[36,107748,256],{"class":49},[36,107750,107355],{"class":53},[36,107752,198],{"class":49},[36,107754,6270],{"class":53},[19,107756,107757],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[433,107759,107760,107769,107774],{},[436,107761,107762,107765,107766,107768],{},[33,107763,107764],{},"prefix","：一段文字，比如 ",[33,107767,107473],{},"，用来说明现在打印的是哪个阶段。",[436,107770,107771,107773],{},[33,107772,104558],{},"：MuJoCo 模型。",[436,107775,107776,107778],{},[33,107777,35902],{},"：MuJoCo 当前状态。",[19,107780,107781,273,107784,107787],{},[33,107782,107783],{},"prefix: str",[33,107785,107786],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,107789,107791],{"className":28,"code":107790,"language":30,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,107792,107793],{"__ignoreMap":31},[36,107794,107795,107797,107799,107801,107803,107805],{"class":38,"line":39},[36,107796,50],{"class":49},[36,107798,54],{"class":53},[36,107800,107398],{"class":57},[36,107802,107401],{"class":53},[36,107804,2977],{"class":49},[36,107806,625],{"class":53},[19,107808,107809,107812],{},[33,107810,107811],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,107814,107816],{"className":28,"code":107815,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,107817,107818,107830],{"__ignoreMap":31},[36,107819,107820,107822,107824,107826,107828],{"class":38,"line":39},[36,107821,104107],{"class":53},[36,107823,115],{"class":114},[36,107825,103886],{"class":53},[36,107827,103788],{"class":49},[36,107829,61],{"class":53},[36,107831,107832,107834,107836],{"class":38,"line":46},[36,107833,104131],{"class":53},[36,107835,115],{"class":114},[36,107837,103900],{"class":53},[19,107839,107840],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,107842,107844],{"className":28,"code":107843,"language":30,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,107845,107846],{"__ignoreMap":31},[36,107847,107848,107851,107853],{"class":38,"line":39},[36,107849,107850],{"class":53},"print_state(",[36,107852,107473],{"class":57},[36,107854,107476],{"class":53},[19,107856,107857,107858,107861],{},"调用刚才定义的 ",[33,107859,107860],{},"print_state"," 函数，打印初始状态。",[26,107863,107864],{"className":28,"code":107651,"language":30,"meta":31,"style":31},[33,107865,107866,107882],{"__ignoreMap":31},[36,107867,107868,107870,107872,107874,107876,107878,107880],{"class":38,"line":39},[36,107869,5556],{"class":114},[36,107871,103975],{"class":53},[36,107873,28556],{"class":114},[36,107875,34946],{"class":49},[36,107877,54],{"class":53},[36,107879,3332],{"class":49},[36,107881,33290],{"class":53},[36,107883,107884],{"class":38,"line":46},[36,107885,104172],{"class":53},[19,107887,107888],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,107890,107891],{"className":28,"code":106997,"language":30,"meta":31,"style":31},[33,107892,107893],{"__ignoreMap":31},[36,107894,107895],{"class":38,"line":39},[36,107896,106997],{"class":53},[19,107898,107899,107900,107902,107903,107905],{},"重置 ",[33,107901,35902],{},"。注意它不会重新创建 ",[33,107904,104558],{},"，因为模型结构没有变，只是状态回到初始值。",[26,107907,107908],{"className":28,"code":107163,"language":30,"meta":31,"style":31},[33,107909,107910],{"__ignoreMap":31},[36,107911,107912,107914,107916,107918,107920],{"class":38,"line":39},[36,107913,107170],{"class":53},[36,107915,1188],{"class":49},[36,107917,6974],{"class":53},[36,107919,115],{"class":114},[36,107921,107179],{"class":49},[19,107923,107924,107925,273,107928,273,107931,107933],{},"这行是“手动改状态”。在 freejoint 中，",[33,107926,107927],{},"qpos[0]",[33,107929,107930],{},"qpos[1]",[33,107932,107727],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,107935,107936],{"className":28,"code":107014,"language":30,"meta":31,"style":31},[33,107937,107938],{"__ignoreMap":31},[36,107939,107940],{"class":38,"line":39},[36,107941,107014],{"class":53},[19,107943,107944,107945,107947,107948,107950],{},"手动改完 ",[33,107946,106502],{}," 后，调用 ",[33,107949,106722],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107952,104789],{"id":104788},[19,107954,107955],{},"你会看到:",[433,107957,107958,107963,107968,107971],{},[436,107959,107960,107961],{},"初始时间为 ",[33,107962,713],{},[436,107964,107965,107966],{},"50 步后时间约为 ",[33,107967,37829],{},[436,107969,107970],{},"reset 后状态恢复",[436,107972,107973,107974,107977,107978],{},"手动修改 ",[33,107975,107976],{},"data.qpos[2]"," 后，小球高度变为 ",[33,107979,107731],{},[19,107981,107982,107984],{},[33,107983,107727],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107986,107987],{},"输出里可以重点看三件事：",[433,107989,107990,107998,108003],{},[436,107991,107992,107994,107995,107997],{},[33,107993,4920],{}," 是否随着 ",[33,107996,103689],{}," 增加。",[436,107999,108000,108002],{},[33,108001,106502],{}," 的 z 坐标是否因为下落而变化。",[436,108004,108005,108007,108008,1296],{},[33,108006,106824],{}," 后时间是否回到 ",[33,108009,713],{},[14,108011,104821],{"id":104820},[433,108013,108014,108020,108026,108032,108035,108044],{},[436,108015,108016,108017,1296],{},"修改 timestep 为 ",[33,108018,108019],{},"0.005",[436,108021,108022,108023,1296],{},"重新运行，检查 50 步后时间是否约为 ",[33,108024,108025],{},"0.25",[436,108027,108028,108029,1296],{},"修改重力为 ",[33,108030,108031],{},"0 0 -1.0",[436,108033,108034],{},"观察小球下降速度是否变慢。",[436,108036,104884,108037,104887,108040,108043],{},[33,108038,108039],{},"data.qpos[2] = 2.0",[33,108041,108042],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[436,108045,108046,108047,108050],{},"注释掉 ",[33,108048,108049],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108052,104926],{"id":104925},[997,108054,108056,108057,108059],{"id":108055},"修改-dataqpos-后位置没有更新","修改 ",[33,108058,103544],{}," 后位置没有更新",[19,108061,104935],{},[26,108063,108064],{"className":28,"code":107014,"language":30,"meta":31,"style":31},[33,108065,108066],{"__ignoreMap":31},[36,108067,108068],{"class":38,"line":39},[36,108069,107014],{"class":53},[997,108071,108072],{"id":108072},"数组维度看不懂",[19,108074,108075],{},"打印模型维度:",[26,108077,108079],{"className":28,"code":108078,"language":30,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,108080,108081],{"__ignoreMap":31},[36,108082,108083,108085],{"class":38,"line":39},[36,108084,50],{"class":49},[36,108086,108087],{"class":53},"(model.nq, model.nv, model.nu)\n",[206,108089,108090,108098],{},[209,108091,108092],{},[212,108093,108094,108096],{},[215,108095,107045],{"align":26253},[215,108097,1635],{"align":26253},[225,108099,108100,108110,108120],{},[212,108101,108102,108107],{},[230,108103,108104],{"align":26253},[33,108105,108106],{},"nq",[230,108108,108109],{"align":26253},"位置变量数量",[212,108111,108112,108117],{},[230,108113,108114],{"align":26253},[33,108115,108116],{},"nv",[230,108118,108119],{"align":26253},"速度变量数量",[212,108121,108122,108126],{},[230,108123,108124],{"align":26253},[33,108125,104635],{},[230,108127,108128],{"align":26253},"控制输入数量",[997,108130,108132,108133,108135],{"id":108131},"误以为-qpos-一定等于关节数","误以为 ",[33,108134,106502],{}," 一定等于关节数",[19,108137,108138,108139,85011,108141,108143,108144,108146],{},"不是。例如 ",[33,108140,104093],{},[33,108142,106502],{}," 是 7 维，但 ",[33,108145,106832],{}," 是 6 维。",[997,108148,108150,108151,108153],{"id":108149},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,108152,106502],{}," 的第几位",[19,108155,108156],{},"初学时可以先打印：",[26,108158,108160],{"className":28,"code":108159,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,108161,108162,108172,108182,108194],{"__ignoreMap":31},[36,108163,108164,108166,108168,108170],{"class":38,"line":39},[36,108165,50],{"class":49},[36,108167,54],{"class":53},[36,108169,103913],{"class":57},[36,108171,103916],{"class":53},[36,108173,108174,108176,108178,108180],{"class":38,"line":46},[36,108175,50],{"class":49},[36,108177,54],{"class":53},[36,108179,103925],{"class":57},[36,108181,103928],{"class":53},[36,108183,108184,108186,108188,108191],{"class":38,"line":82},[36,108185,50],{"class":49},[36,108187,54],{"class":53},[36,108189,108190],{"class":57},"\"qpos:\"",[36,108192,108193],{"class":53},", data.qpos)\n",[36,108195,108196,108198,108200,108203],{"class":38,"line":88},[36,108197,50],{"class":49},[36,108199,54],{"class":53},[36,108201,108202],{"class":57},"\"qvel:\"",[36,108204,108205],{"class":53},", data.qvel)\n",[19,108207,108208],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[997,108210,108211],{"id":108211},"仿真结果每次都一样",[19,108213,108214,108215,108217],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,108216,106502],{},"、目标点或控制输入。",[14,108219,105080],{"id":105079},[19,108221,108222,108223,27135],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,108224,35902],{},[433,108226,108227,108235,108240,108245],{},[436,108228,108229,108230,1292,108232,108234],{},"用 ",[33,108231,103544],{},[33,108233,103547],{}," 读取状态。",[436,108236,108229,108237,108239],{},[33,108238,103550],{}," 写入控制。",[436,108241,108229,108242,108244],{},[33,108243,103689],{}," 推进时间。",[436,108246,108247,108248,108250],{},"手动改状态后用 ",[33,108249,106722],{}," 刷新派生量。",[19,108252,108253],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2602,108255,108256],{},"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":31,"searchDepth":46,"depth":46,"links":108258},[108259,108260,108261,108268,108272,108273,108274,108284],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":108262},[108263,108265,108267],{"id":107026,"depth":82,"text":108264},"qpos、qvel、ctrl 是什么",{"id":107104,"depth":82,"text":108266},"mj_step 和 mj_forward 的区别",{"id":107193,"depth":82,"text":107194},{"id":103726,"depth":46,"text":103727,"children":108269},[108270,108271],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":108275},[108276,108278,108279,108281,108283],{"id":108055,"depth":82,"text":108277},"修改 data.qpos 后位置没有更新",{"id":108072,"depth":82,"text":108072},{"id":108131,"depth":82,"text":108280},"误以为 qpos 一定等于关节数",{"id":108149,"depth":82,"text":108282},"不知道某个元素在 qpos 的第几位",{"id":108211,"depth":82,"text":108211},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106790,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108291,"title":108292,"body":108293,"description":31,"extension":2631,"meta":109982,"navigation":545,"path":109983,"seo":109984,"stem":109985,"__hash__":109986},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108294,"toc":109958},[108295,108298,108300,108303,108305,108330,108333,108352,108355,108357,108359,108383,108385,108399,108401,108442,108444,108468,108470,108473,108507,108509,108522,108525,108593,108602,108606,108609,108643,108649,108652,108656,108695,108698,108718,108722,108765,108767,108796,108799,108805,108808,108810,109204,109206,109218,109220,109231,109233,109236,109265,109273,109276,109311,109314,109316,109324,109327,109329,109340,109350,109370,109373,109409,109421,109469,109488,109530,109543,109571,109576,109597,109607,109625,109628,109662,109665,109685,109688,109707,109713,109715,109718,109724,109730,109740,109743,109749,109757,109759,109805,109807,109813,109819,109822,109825,109845,109848,109854,109860,109862,109885,109888,109891,109900,109903,109941,109943,109946,109952,109955],[10,108296,108292],{"id":108297},"_4关节actuator-与力控制",[14,108299,103123],{"id":103122},[19,108301,108302],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108304,106803],{},[433,108306,108307,108313,108318,108322,108327],{},[436,108308,108309,108312],{},[33,108310,108311],{},"hinge"," 关节",[436,108314,108315],{},[33,108316,108317],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[436,108319,108320],{},[33,108321,103550],{},[436,108323,108324],{},[33,108325,108326],{},"ctrlrange",[436,108328,108329],{},"读取关节角和角速度",[19,108331,108332],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,108334,108336],{"className":28,"code":108335,"language":30,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,108337,108338],{"__ignoreMap":31},[36,108339,108340,108343,108345,108347,108349],{"class":38,"line":39},[36,108341,108342],{"class":53},"data.ctrl[",[36,108344,713],{"class":49},[36,108346,6974],{"class":53},[36,108348,115],{"class":114},[36,108350,108351],{"class":49}," ...\n",[19,108353,108354],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108356,103245],{"id":103244},[19,108358,103248],{},[26,108360,108361],{"className":26338,"code":106859,"language":26340,"meta":31,"style":31},[33,108362,108363],{"__ignoreMap":31},[36,108364,108365,108367,108369,108371,108373,108375,108377,108379,108381],{"class":38,"line":39},[36,108366,27093],{"class":4500},[36,108368,28827],{"class":57},[36,108370,26350],{"class":57},[36,108372,28912],{"class":49},[36,108374,106874],{"class":57},[36,108376,103273],{"class":57},[36,108378,104974],{"class":57},[36,108380,103289],{"class":57},[36,108382,106883],{"class":57},[19,108384,105292],{},[26,108386,108387],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},[33,108388,108389],{"__ignoreMap":31},[36,108390,108391,108393,108395,108397],{"class":38,"line":39},[36,108392,26347],{"class":4500},[36,108394,26350],{"class":57},[36,108396,103405],{"class":57},[36,108398,103408],{"class":57},[19,108400,105309],{},[26,108402,108404],{"className":26338,"code":108403,"language":26340,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,108405,108406,108423,108432],{"__ignoreMap":31},[36,108407,108408,108410,108412,108414,108417,108419,108421],{"class":38,"line":39},[36,108409,32840],{"class":4500},[36,108411,31686],{"class":57},[36,108413,27631],{"class":49},[36,108415,108416],{"class":57}," mujoco-control",[36,108418,103450],{"class":57},[36,108420,103453],{"class":49},[36,108422,103456],{"class":49},[36,108424,108425,108427,108429],{"class":38,"line":46},[36,108426,32840],{"class":4500},[36,108428,103463],{"class":57},[36,108430,108431],{"class":57}," mujoco-control\n",[36,108433,108434,108436,108438,108440],{"class":38,"line":82},[36,108435,26347],{"class":4500},[36,108437,26350],{"class":57},[36,108439,103405],{"class":57},[36,108441,103408],{"class":57},[19,108443,103479],{},[433,108445,108446,108452,108459,108465],{},[436,108447,108448,108451],{},[33,108449,108450],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[436,108453,108454,108456,108457,1296],{},[33,108455,103550],{}," 长度等于 ",[33,108458,104631],{},[436,108460,84703,108461,108464],{},[33,108462,108463],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[436,108466,108467],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108469,103519],{"id":103518},[19,108471,108472],{},"关节决定 body 如何运动:",[26,108474,108476],{"className":55561,"code":108475,"language":55563,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,108477,108478],{"__ignoreMap":31},[36,108479,108480,108482,108484,108486,108488,108491,108493,108495,108497,108500,108502,108505],{"class":38,"line":39},[36,108481,1507],{"class":53},[36,108483,105429],{"class":53794},[36,108485,17440],{"class":4500},[36,108487,115],{"class":53},[36,108489,108490],{"class":57},"\"hinge\"",[36,108492,56317],{"class":4500},[36,108494,115],{"class":53},[36,108496,108490],{"class":57},[36,108498,108499],{"class":4500}," axis",[36,108501,115],{"class":53},[36,108503,108504],{"class":57},"\"0 1 0\"",[36,108506,103618],{"class":53},[19,108508,105525],{},[433,108510,108511,108516,108519],{},[436,108512,108513,108514],{},"名字是 ",[33,108515,108311],{},[436,108517,108518],{},"类型是旋转关节",[436,108520,108521],{},"绕 y 轴旋转",[19,108523,108524],{},"actuator 决定如何施加控制:",[26,108526,108528],{"className":55561,"code":108527,"language":55563,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,108529,108530,108539,108585],{"__ignoreMap":31},[36,108531,108532,108534,108537],{"class":38,"line":39},[36,108533,1507],{"class":53},[36,108535,108536],{"class":53794},"actuator",[36,108538,53801],{"class":53},[36,108540,108541,108543,108546,108548,108550,108553,108556,108558,108560,108563,108565,108567,108570,108572,108575,108578,108580,108583],{"class":38,"line":46},[36,108542,54638],{"class":53},[36,108544,108545],{"class":53794},"motor",[36,108547,17440],{"class":4500},[36,108549,115],{"class":53},[36,108551,108552],{"class":57},"\"hinge_motor\"",[36,108554,108555],{"class":4500}," joint",[36,108557,115],{"class":53},[36,108559,108490],{"class":57},[36,108561,108562],{"class":4500}," gear",[36,108564,115],{"class":53},[36,108566,6209],{"class":57},[36,108568,108569],{"class":4500}," ctrlrange",[36,108571,115],{"class":53},[36,108573,108574],{"class":57},"\"-2 2\"",[36,108576,108577],{"class":4500}," ctrllimited",[36,108579,115],{"class":53},[36,108581,108582],{"class":57},"\"true\"",[36,108584,103618],{"class":53},[36,108586,108587,108589,108591],{"class":38,"line":82},[36,108588,54279],{"class":53},[36,108590,108536],{"class":53794},[36,108592,53801],{"class":53},[19,108594,108595,108598,108599,1296],{},[33,108596,108597],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,108600,108601],{},"[-2, 2]",[997,108603,108605],{"id":108604},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108607,108608],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[206,108610,108611,108621],{},[209,108612,108613],{},[212,108614,108615,108617,108619],{},[215,108616,28267],{"align":26253},[215,108618,105169],{"align":26253},[215,108620,103209],{"align":26253},[225,108622,108623,108633],{},[212,108624,108625,108627,108630],{},[230,108626,105429],{"align":26253},[230,108628,108629],{"align":26253},"定义能怎么动",[230,108631,108632],{"align":26253},"门轴允许门旋转",[212,108634,108635,108637,108640],{},[230,108636,108536],{"align":26253},[230,108638,108639],{"align":26253},"定义怎么施力或控制",[230,108641,108642],{"align":26253},"人推门、马达带动门",[19,108644,108645,108646,108648],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,108647,103550],{}," 主动控制它。",[19,108650,108651],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[997,108653,108655],{"id":108654},"hinge-joint","hinge joint",[26,108657,108659],{"className":55561,"code":108658,"language":55563,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,108660,108661],{"__ignoreMap":31},[36,108662,108663,108665,108667,108669,108671,108673,108675,108677,108679,108681,108683,108685,108688,108690,108693],{"class":38,"line":39},[36,108664,1507],{"class":53},[36,108666,105429],{"class":53794},[36,108668,17440],{"class":4500},[36,108670,115],{"class":53},[36,108672,108490],{"class":57},[36,108674,56317],{"class":4500},[36,108676,115],{"class":53},[36,108678,108490],{"class":57},[36,108680,108499],{"class":4500},[36,108682,115],{"class":53},[36,108684,108504],{"class":57},[36,108686,108687],{"class":4500}," damping",[36,108689,115],{"class":53},[36,108691,108692],{"class":57},"\"0.1\"",[36,108694,103618],{"class":53},[19,108696,108697],{},"含义：",[433,108699,108700,108706,108712],{},[436,108701,108702,108705],{},[33,108703,108704],{},"type=\"hinge\"","：只能绕一个轴旋转。",[436,108707,108708,108711],{},[33,108709,108710],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[436,108713,108714,108717],{},[33,108715,108716],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[997,108719,108721],{"id":108720},"motor-actuator","motor actuator",[26,108723,108725],{"className":55561,"code":108724,"language":55563,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,108726,108727],{"__ignoreMap":31},[36,108728,108729,108731,108733,108735,108737,108739,108741,108743,108745,108747,108749,108751,108753,108755,108757,108759,108761,108763],{"class":38,"line":39},[36,108730,1507],{"class":53},[36,108732,108545],{"class":53794},[36,108734,17440],{"class":4500},[36,108736,115],{"class":53},[36,108738,108552],{"class":57},[36,108740,108555],{"class":4500},[36,108742,115],{"class":53},[36,108744,108490],{"class":57},[36,108746,108562],{"class":4500},[36,108748,115],{"class":53},[36,108750,6209],{"class":57},[36,108752,108569],{"class":4500},[36,108754,115],{"class":53},[36,108756,108574],{"class":57},[36,108758,108577],{"class":4500},[36,108760,115],{"class":53},[36,108762,108582],{"class":57},[36,108764,103618],{"class":53},[19,108766,108697],{},[433,108768,108769,108778,108784,108790],{},[436,108770,108771,108774,108775,108777],{},[33,108772,108773],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,108776,108311],{}," 的关节上。",[436,108779,108780,108783],{},[33,108781,108782],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[436,108785,108786,108789],{},[33,108787,108788],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[436,108791,108792,108795],{},[33,108793,108794],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108797,108798],{},"简单理解：",[26,108800,108803],{"className":108801,"code":108802,"language":690,"meta":31},[688],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,108804,108802],{"__ignoreMap":31},[19,108806,108807],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108809,103727],{"id":103726},[26,108811,108813],{"className":28,"code":108812,"language":30,"meta":31,"style":31},"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",[33,108814,108815,108822,108826,108832,108842,108846,108850,108858,108863,108868,108872,108876,108881,108886,108890,108895,108900,108905,108910,108914,108918,108922,108927,108932,108937,108941,108945,108949,108953,108965,108977,108985,108989,108999,109009,109019,109023,109036,109049,109053,109070,109084,109119,109123,109127,109138,109153,109168,109180,109184,109188,109200],{"__ignoreMap":31},[36,108816,108817,108819],{"class":38,"line":39},[36,108818,537],{"class":114},[36,108820,108821],{"class":53}," math\n",[36,108823,108824],{"class":38,"line":46},[36,108825,546],{"emptyLinePlaceholder":545},[36,108827,108828,108830],{"class":38,"line":82},[36,108829,537],{"class":114},[36,108831,103775],{"class":53},[36,108833,108834,108836,108838,108840],{"class":38,"line":88},[36,108835,537],{"class":114},[36,108837,33884],{"class":53},[36,108839,33887],{"class":114},[36,108841,33890],{"class":53},[36,108843,108844],{"class":38,"line":195},[36,108845,546],{"emptyLinePlaceholder":545},[36,108847,108848],{"class":38,"line":1517},[36,108849,546],{"emptyLinePlaceholder":545},[36,108851,108852,108854,108856],{"class":38,"line":2421},[36,108853,103788],{"class":49},[36,108855,498],{"class":114},[36,108857,103793],{"class":57},[36,108859,108860],{"class":38,"line":2446},[36,108861,108862],{"class":57},"\u003Cmujoco model=\"one_link_motor\">\n",[36,108864,108865],{"class":38,"line":2469},[36,108866,108867],{"class":57},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,108869,108870],{"class":38,"line":2492},[36,108871,546],{"emptyLinePlaceholder":545},[36,108873,108874],{"class":38,"line":4150},[36,108875,103812],{"class":57},[36,108877,108878],{"class":38,"line":4155},[36,108879,108880],{"class":57},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,108882,108883],{"class":38,"line":4161},[36,108884,108885],{"class":57},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,108887,108888],{"class":38,"line":4166},[36,108889,546],{"emptyLinePlaceholder":545},[36,108891,108892],{"class":38,"line":4180},[36,108893,108894],{"class":57},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,108896,108897],{"class":38,"line":4185},[36,108898,108899],{"class":57},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,108901,108902],{"class":38,"line":4191},[36,108903,108904],{"class":57},"        \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",[36,108906,108907],{"class":38,"line":4212},[36,108908,108909],{"class":57},"      \u003C\u002Fbody>\n",[36,108911,108912],{"class":38,"line":4217},[36,108913,103841],{"class":57},[36,108915,108916],{"class":38,"line":4231},[36,108917,103846],{"class":57},[36,108919,108920],{"class":38,"line":4236},[36,108921,546],{"emptyLinePlaceholder":545},[36,108923,108924],{"class":38,"line":4264},[36,108925,108926],{"class":57},"  \u003Cactuator>\n",[36,108928,108929],{"class":38,"line":4269},[36,108930,108931],{"class":57},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,108933,108934],{"class":38,"line":4286},[36,108935,108936],{"class":57},"  \u003C\u002Factuator>\n",[36,108938,108939],{"class":38,"line":4291},[36,108940,103851],{"class":57},[36,108942,108943],{"class":38,"line":4296},[36,108944,74],{"class":57},[36,108946,108947],{"class":38,"line":4301},[36,108948,546],{"emptyLinePlaceholder":545},[36,108950,108951],{"class":38,"line":4315},[36,108952,546],{"emptyLinePlaceholder":545},[36,108954,108955,108957,108959,108961,108963],{"class":38,"line":4320},[36,108956,34450],{"class":114},[36,108958,4510],{"class":4500},[36,108960,103872],{"class":53},[36,108962,198],{"class":49},[36,108964,6270],{"class":53},[36,108966,108967,108969,108971,108973,108975],{"class":38,"line":5109},[36,108968,103881],{"class":53},[36,108970,115],{"class":114},[36,108972,103886],{"class":53},[36,108974,103788],{"class":49},[36,108976,61],{"class":53},[36,108978,108979,108981,108983],{"class":38,"line":5123},[36,108980,103895],{"class":53},[36,108982,115],{"class":114},[36,108984,103900],{"class":53},[36,108986,108987],{"class":38,"line":5131},[36,108988,546],{"emptyLinePlaceholder":545},[36,108990,108991,108993,108995,108997],{"class":38,"line":5136},[36,108992,33803],{"class":49},[36,108994,54],{"class":53},[36,108996,103913],{"class":57},[36,108998,103916],{"class":53},[36,109000,109001,109003,109005,109007],{"class":38,"line":5142},[36,109002,33803],{"class":49},[36,109004,54],{"class":53},[36,109006,103925],{"class":57},[36,109008,103928],{"class":53},[36,109010,109011,109013,109015,109017],{"class":38,"line":5148},[36,109012,33803],{"class":49},[36,109014,54],{"class":53},[36,109016,103937],{"class":57},[36,109018,103940],{"class":53},[36,109020,109021],{"class":38,"line":5153},[36,109022,546],{"emptyLinePlaceholder":545},[36,109024,109025,109027,109030,109032,109034],{"class":38,"line":10475},[36,109026,5632],{"class":114},[36,109028,109029],{"class":53}," model.nu ",[36,109031,23466],{"class":114},[36,109033,733],{"class":49},[36,109035,6270],{"class":53},[36,109037,109038,109040,109042,109044,109047],{"class":38,"line":10499},[36,109039,105904],{"class":114},[36,109041,105907],{"class":49},[36,109043,54],{"class":53},[36,109045,109046],{"class":57},"\"expected exactly one actuator\"",[36,109048,61],{"class":53},[36,109050,109051],{"class":38,"line":10504},[36,109052,546],{"emptyLinePlaceholder":545},[36,109054,109055,109057,109059,109061,109063,109065,109068],{"class":38,"line":10510},[36,109056,5732],{"class":114},[36,109058,34119],{"class":53},[36,109060,28556],{"class":114},[36,109062,34946],{"class":49},[36,109064,54],{"class":53},[36,109066,109067],{"class":49},"2000",[36,109069,33290],{"class":53},[36,109071,109072,109075,109077,109079,109081],{"class":38,"line":10537},[36,109073,109074],{"class":53},"        t ",[36,109076,115],{"class":114},[36,109078,34119],{"class":53},[36,109080,1050],{"class":114},[36,109082,109083],{"class":53}," model.opt.timestep\n",[36,109085,109086,109089,109091,109093,109095,109098,109100,109103,109105,109107,109110,109112,109114,109116],{"class":38,"line":10542},[36,109087,109088],{"class":53},"        data.ctrl[",[36,109090,713],{"class":49},[36,109092,6974],{"class":53},[36,109094,115],{"class":114},[36,109096,109097],{"class":49}," 1.5",[36,109099,9045],{"class":114},[36,109101,109102],{"class":53}," math.sin(",[36,109104,107731],{"class":49},[36,109106,9045],{"class":114},[36,109108,109109],{"class":53}," math.pi ",[36,109111,1050],{"class":114},[36,109113,64355],{"class":49},[36,109115,9045],{"class":114},[36,109117,109118],{"class":53}," t)\n",[36,109120,109121],{"class":38,"line":10548},[36,109122,103990],{"class":53},[36,109124,109125],{"class":38,"line":10560},[36,109126,546],{"emptyLinePlaceholder":545},[36,109128,109129,109131,109133,109136],{"class":38,"line":10572},[36,109130,33803],{"class":49},[36,109132,54],{"class":53},[36,109134,109135],{"class":57},"\"time:\"",[36,109137,103952],{"class":53},[36,109139,109140,109142,109144,109147,109149,109151],{"class":38,"line":10584},[36,109141,33803],{"class":49},[36,109143,54],{"class":53},[36,109145,109146],{"class":57},"\"joint qpos:\"",[36,109148,107401],{"class":53},[36,109150,2977],{"class":49},[36,109152,625],{"class":53},[36,109154,109155,109157,109159,109162,109164,109166],{"class":38,"line":12241},[36,109156,33803],{"class":49},[36,109158,54],{"class":53},[36,109160,109161],{"class":57},"\"joint qvel:\"",[36,109163,107417],{"class":53},[36,109165,2977],{"class":49},[36,109167,625],{"class":53},[36,109169,109170,109172,109174,109177],{"class":38,"line":12266},[36,109171,33803],{"class":49},[36,109173,54],{"class":53},[36,109175,109176],{"class":57},"\"last ctrl:\"",[36,109178,109179],{"class":53},", data.ctrl.copy())\n",[36,109181,109182],{"class":38,"line":12289},[36,109183,546],{"emptyLinePlaceholder":545},[36,109185,109186],{"class":38,"line":12313},[36,109187,546],{"emptyLinePlaceholder":545},[36,109189,109190,109192,109194,109196,109198],{"class":38,"line":12318},[36,109191,4069],{"class":114},[36,109193,33724],{"class":49},[36,109195,1351],{"class":114},[36,109197,104035],{"class":57},[36,109199,6270],{"class":53},[36,109201,109202],{"class":38,"line":12323},[36,109203,104042],{"class":53},[19,109205,106042],{},[26,109207,109209],{"className":26338,"code":109208,"language":26340,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,109210,109211],{"__ignoreMap":31},[36,109212,109213,109215],{"class":38,"line":39},[36,109214,103757],{"class":4500},[36,109216,109217],{"class":57}," ch4_joint_motor.py\n",[19,109219,104774],{},[26,109221,109223],{"className":26338,"code":109222,"language":26340,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,109224,109225],{"__ignoreMap":31},[36,109226,109227,109229],{"class":38,"line":39},[36,109228,30],{"class":4500},[36,109230,109217],{"class":57},[997,109232,104045],{"id":104045},[19,109234,109235],{},"检查 actuator 数量：",[26,109237,109239],{"className":28,"code":109238,"language":30,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,109240,109241,109253],{"__ignoreMap":31},[36,109242,109243,109245,109247,109249,109251],{"class":38,"line":39},[36,109244,4069],{"class":114},[36,109246,109029],{"class":53},[36,109248,23466],{"class":114},[36,109250,733],{"class":49},[36,109252,6270],{"class":53},[36,109254,109255,109257,109259,109261,109263],{"class":38,"line":46},[36,109256,106367],{"class":114},[36,109258,105907],{"class":49},[36,109260,54],{"class":53},[36,109262,109046],{"class":57},[36,109264,61],{"class":53},[19,109266,109267,109269,109270,109272],{},[33,109268,104631],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,109271,103550],{}," 长度应该是 1。",[19,109274,109275],{},"产生正弦控制信号：",[26,109277,109279],{"className":28,"code":109278,"language":30,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,109280,109281],{"__ignoreMap":31},[36,109282,109283,109285,109287,109289,109291,109293,109295,109297,109299,109301,109303,109305,109307,109309],{"class":38,"line":39},[36,109284,108342],{"class":53},[36,109286,713],{"class":49},[36,109288,6974],{"class":53},[36,109290,115],{"class":114},[36,109292,109097],{"class":49},[36,109294,9045],{"class":114},[36,109296,109102],{"class":53},[36,109298,107731],{"class":49},[36,109300,9045],{"class":114},[36,109302,109109],{"class":53},[36,109304,1050],{"class":114},[36,109306,64355],{"class":49},[36,109308,9045],{"class":114},[36,109310,109118],{"class":53},[19,109312,109313],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109315,104146],{},[26,109317,109318],{"className":28,"code":106976,"language":30,"meta":31,"style":31},[33,109319,109320],{"__ignoreMap":31},[36,109321,109322],{"class":38,"line":39},[36,109323,106976],{"class":53},[19,109325,109326],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[997,109328,104181],{"id":104181},[26,109330,109332],{"className":28,"code":109331,"language":30,"meta":31,"style":31},"import math\n",[33,109333,109334],{"__ignoreMap":31},[36,109335,109336,109338],{"class":38,"line":39},[36,109337,537],{"class":114},[36,109339,108821],{"class":53},[19,109341,109342,109343,1292,109346,109349],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,109344,109345],{},"math.sin",[33,109347,109348],{},"math.pi"," 生成周期变化的控制信号。",[26,109351,109352],{"className":28,"code":106158,"language":30,"meta":31,"style":31},[33,109353,109354,109360],{"__ignoreMap":31},[36,109355,109356,109358],{"class":38,"line":39},[36,109357,537],{"class":114},[36,109359,103775],{"class":53},[36,109361,109362,109364,109366,109368],{"class":38,"line":46},[36,109363,537],{"class":114},[36,109365,33884],{"class":53},[36,109367,33887],{"class":114},[36,109369,33890],{"class":53},[19,109371,109372],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,109374,109375],{"className":55561,"code":108658,"language":55563,"meta":31,"style":31},[33,109376,109377],{"__ignoreMap":31},[36,109378,109379,109381,109383,109385,109387,109389,109391,109393,109395,109397,109399,109401,109403,109405,109407],{"class":38,"line":39},[36,109380,1507],{"class":53},[36,109382,105429],{"class":53794},[36,109384,17440],{"class":4500},[36,109386,115],{"class":53},[36,109388,108490],{"class":57},[36,109390,56317],{"class":4500},[36,109392,115],{"class":53},[36,109394,108490],{"class":57},[36,109396,108499],{"class":4500},[36,109398,115],{"class":53},[36,109400,108504],{"class":57},[36,109402,108687],{"class":4500},[36,109404,115],{"class":53},[36,109406,108692],{"class":57},[36,109408,103618],{"class":53},[19,109410,109411,109412,109414,109415,109417,109418,109420],{},"这行定义关节。",[33,109413,108311],{}," 表示旋转关节。",[33,109416,108710],{}," 表示绕 y 轴旋转。",[33,109419,108716],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,109422,109424],{"className":55561,"code":109423,"language":55563,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,109425,109426],{"__ignoreMap":31},[36,109427,109428,109430,109432,109434,109436,109439,109441,109443,109446,109449,109451,109454,109456,109458,109460,109462,109464,109467],{"class":38,"line":39},[36,109429,1507],{"class":53},[36,109431,103594],{"class":53794},[36,109433,17440],{"class":4500},[36,109435,115],{"class":53},[36,109437,109438],{"class":57},"\"link_geom\"",[36,109440,56317],{"class":4500},[36,109442,115],{"class":53},[36,109444,109445],{"class":57},"\"capsule\"",[36,109447,109448],{"class":4500}," fromto",[36,109450,115],{"class":53},[36,109452,109453],{"class":57},"\"0 0 0 0 0 0.5\"",[36,109455,103610],{"class":4500},[36,109457,115],{"class":53},[36,109459,106250],{"class":57},[36,109461,104474],{"class":4500},[36,109463,115],{"class":53},[36,109465,109466],{"class":57},"\"0.5\"",[36,109468,103618],{"class":53},[19,109470,109471,109472,109474,109475,109477,109478,109481,109482,1296,109485,109487],{},"这行定义摆杆的形状。",[33,109473,105637],{}," 是胶囊体，适合表示杆子。",[33,109476,105648],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,109479,109480],{},"(0,0,0)"," 延伸到 ",[33,109483,109484],{},"(0,0,0.5)",[33,109486,105642],{}," 是半径。",[26,109489,109490],{"className":55561,"code":108724,"language":55563,"meta":31,"style":31},[33,109491,109492],{"__ignoreMap":31},[36,109493,109494,109496,109498,109500,109502,109504,109506,109508,109510,109512,109514,109516,109518,109520,109522,109524,109526,109528],{"class":38,"line":39},[36,109495,1507],{"class":53},[36,109497,108545],{"class":53794},[36,109499,17440],{"class":4500},[36,109501,115],{"class":53},[36,109503,108552],{"class":57},[36,109505,108555],{"class":4500},[36,109507,115],{"class":53},[36,109509,108490],{"class":57},[36,109511,108562],{"class":4500},[36,109513,115],{"class":53},[36,109515,6209],{"class":57},[36,109517,108569],{"class":4500},[36,109519,115],{"class":53},[36,109521,108574],{"class":57},[36,109523,108577],{"class":4500},[36,109525,115],{"class":53},[36,109527,108582],{"class":57},[36,109529,103618],{"class":53},[19,109531,109532,109533,109535,109536,109539,109540,109542],{},"这行定义电机。它作用在 ",[33,109534,108311],{}," 关节上。",[33,109537,109538],{},"gear"," 可以理解成放大倍数。",[33,109541,108326],{}," 限制控制输入范围。",[26,109544,109545],{"className":28,"code":109238,"language":30,"meta":31,"style":31},[33,109546,109547,109559],{"__ignoreMap":31},[36,109548,109549,109551,109553,109555,109557],{"class":38,"line":39},[36,109550,4069],{"class":114},[36,109552,109029],{"class":53},[36,109554,23466],{"class":114},[36,109556,733],{"class":49},[36,109558,6270],{"class":53},[36,109560,109561,109563,109565,109567,109569],{"class":38,"line":46},[36,109562,106367],{"class":114},[36,109564,105907],{"class":49},[36,109566,54],{"class":53},[36,109568,109046],{"class":57},[36,109570,61],{"class":53},[19,109572,109573,109575],{},[33,109574,104631],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,109577,109579],{"className":28,"code":109578,"language":30,"meta":31,"style":31},"for step in range(2000):\n",[33,109580,109581],{"__ignoreMap":31},[36,109582,109583,109585,109587,109589,109591,109593,109595],{"class":38,"line":39},[36,109584,5556],{"class":114},[36,109586,34119],{"class":53},[36,109588,28556],{"class":114},[36,109590,34946],{"class":49},[36,109592,54],{"class":53},[36,109594,109067],{"class":49},[36,109596,33290],{"class":53},[19,109598,109599,109600,109602,109603,109606],{},"循环 2000 步。这里没有用 ",[33,109601,3665],{},"，而是用 ",[33,109604,109605],{},"step","，因为后面要用当前步数计算时间。",[26,109608,109610],{"className":28,"code":109609,"language":30,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,109611,109612],{"__ignoreMap":31},[36,109613,109614,109617,109619,109621,109623],{"class":38,"line":39},[36,109615,109616],{"class":53},"t ",[36,109618,115],{"class":114},[36,109620,34119],{"class":53},[36,109622,1050],{"class":114},[36,109624,109083],{"class":53},[19,109626,109627],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,109629,109630],{"className":28,"code":109278,"language":30,"meta":31,"style":31},[33,109631,109632],{"__ignoreMap":31},[36,109633,109634,109636,109638,109640,109642,109644,109646,109648,109650,109652,109654,109656,109658,109660],{"class":38,"line":39},[36,109635,108342],{"class":53},[36,109637,713],{"class":49},[36,109639,6974],{"class":53},[36,109641,115],{"class":114},[36,109643,109097],{"class":49},[36,109645,9045],{"class":114},[36,109647,109102],{"class":53},[36,109649,107731],{"class":49},[36,109651,9045],{"class":114},[36,109653,109109],{"class":53},[36,109655,1050],{"class":114},[36,109657,64355],{"class":49},[36,109659,9045],{"class":114},[36,109661,109118],{"class":53},[19,109663,109664],{},"这行给电机输入一个正弦波。拆开看：",[433,109666,109667,109673,109679],{},[436,109668,109669,109672],{},[33,109670,109671],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[436,109674,109675,109678],{},[33,109676,109677],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[436,109680,109681,109684],{},[33,109682,109683],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109686,109687],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,109689,109691],{"className":28,"code":109690,"language":30,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,109692,109693],{"__ignoreMap":31},[36,109694,109695,109697,109699,109701,109703,109705],{"class":38,"line":39},[36,109696,50],{"class":49},[36,109698,54],{"class":53},[36,109700,109146],{"class":57},[36,109702,107401],{"class":53},[36,109704,2977],{"class":49},[36,109706,625],{"class":53},[19,109708,109709,109710,109712],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,109711,103544],{}," 只有一个数。",[14,109714,104789],{"id":104788},[19,109716,109717],{},"输出类似:",[26,109719,109722],{"className":109720,"code":109721,"language":690,"meta":31},[688],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,109723,109721],{"__ignoreMap":31},[19,109725,109726,109727,109729],{},"这里 ",[33,109728,108597],{}," 是电机输入。",[19,109731,109732,109735,109736,109739],{},[33,109733,109734],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,109737,109738],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109741,109742],{},"角度单位提示：",[26,109744,109747],{"className":109745,"code":109746,"language":690,"meta":31},[688],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,109748,109746],{"__ignoreMap":31},[19,109750,109751,109752,698,109754,109756],{},"如果你看到 ",[33,109753,106502],{},[33,109755,37829],{},"，大约就是 28.6 度。",[14,109758,104821],{"id":104820},[433,109760,109761,109768,109771,109778,109781,109789,109797],{},[436,109762,104884,109763,104887,109765,1296],{},[33,109764,108782],{},[33,109766,109767],{},"gear=\"5\"",[436,109769,109770],{},"重新运行，观察关节运动是否更剧烈。",[436,109772,104884,109773,104887,109775,1296],{},[33,109774,108326],{},[33,109776,109777],{},"-0.2 0.2",[436,109779,109780],{},"重新运行，观察控制能力是否变弱。",[436,109782,109783,109784,109786,109787,1296],{},"去掉 actuator，确认 ",[33,109785,104631],{}," 变成 ",[33,109788,713],{},[436,109790,104884,109791,104887,109793,109796],{},[33,109792,108716],{},[33,109794,109795],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[436,109798,104884,109799,104887,109801,109804],{},[33,109800,108710],{},[33,109802,109803],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109806,104926],{"id":104925},[997,109808,109810],{"id":109809},"indexerror-index-0-is-out-of-bounds",[33,109811,109812],{},"IndexError: index 0 is out of bounds",[19,109814,109815,109816,109818],{},"原因是 ",[33,109817,108463],{},"，没有 actuator。",[997,109820,109821],{"id":109821},"关节几乎不动",[19,109823,109824],{},"可能原因:",[433,109826,109827,109832,109836,109842],{},[436,109828,109829,109831],{},[33,109830,109538],{}," 太小",[436,109833,109834,109831],{},[33,109835,108326],{},[436,109837,109838,109841],{},[33,109839,109840],{},"damping"," 太大",[436,109843,109844],{},"重力方向导致运动不明显",[997,109846,109847],{"id":109847},"模型编译失败",[19,109849,109850,109851,109853],{},"检查 actuator 引用的 ",[33,109852,108773],{}," 是否存在，joint 名称是否拼写一致。",[997,109855,109857,109859],{"id":109856},"datactrl0-写了但没有效果",[33,109858,108597],{}," 写了但没有效果",[19,109861,105048],{},[433,109863,109864,109869,109872,109877,109882],{},[436,109865,109866,109868],{},[33,109867,104631],{}," 是否大于 0。",[436,109870,109871],{},"motor 是否引用了正确 joint。",[436,109873,109874,109876],{},[33,109875,109538],{}," 是否太小。",[436,109878,109879,109881],{},[33,109880,108326],{}," 是否把输入限制得太小。",[436,109883,109884],{},"body 是否真的有可动 joint。",[997,109886,109887],{"id":109887},"控制输入超过范围会怎样",[19,109889,109890],{},"如果设置了：",[26,109892,109894],{"className":55561,"code":109893,"language":55563,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,109895,109896],{"__ignoreMap":31},[36,109897,109898],{"class":38,"line":39},[36,109899,109893],{"class":53},[19,109901,109902],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,109904,109906],{"className":28,"code":109905,"language":30,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,109907,109908,109928],{"__ignoreMap":31},[36,109909,109910,109913,109915,109918,109920,109922,109924,109926],{"class":38,"line":39},[36,109911,109912],{"class":53},"action ",[36,109914,115],{"class":114},[36,109916,109917],{"class":53}," np.clip(action, ",[36,109919,508],{"class":114},[36,109921,107731],{"class":49},[36,109923,14958],{"class":53},[36,109925,107731],{"class":49},[36,109927,61],{"class":53},[36,109929,109930,109932,109934,109936,109938],{"class":38,"line":46},[36,109931,108342],{"class":53},[36,109933,713],{"class":49},[36,109935,6974],{"class":53},[36,109937,115],{"class":114},[36,109939,109940],{"class":53}," action\n",[14,109942,105080],{"id":105079},[19,109944,109945],{},"这一章建立了控制任务的基本形式：",[26,109947,109950],{"className":109948,"code":109949,"language":690,"meta":31},[688],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,109951,109949],{"__ignoreMap":31},[19,109953,109954],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2602,109956,109957],{},"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":31,"searchDepth":46,"depth":46,"links":109959},[109960,109961,109962,109967,109971,109972,109973,109981],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":109963},[109964,109965,109966],{"id":108604,"depth":82,"text":108605},{"id":108654,"depth":82,"text":108655},{"id":108720,"depth":82,"text":108721},{"id":103726,"depth":46,"text":103727,"children":109968},[109969,109970],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":109974},[109975,109976,109977,109978,109980],{"id":109809,"depth":82,"text":109812},{"id":109821,"depth":82,"text":109821},{"id":109847,"depth":82,"text":109847},{"id":109856,"depth":82,"text":109979},"data.ctrl[0] 写了但没有效果",{"id":109887,"depth":82,"text":109887},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108292,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109988,"title":109989,"body":109990,"description":31,"extension":2631,"meta":111899,"navigation":545,"path":111900,"seo":111901,"stem":111902,"__hash__":111903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109991,"toc":111875},[109992,109995,109997,110000,110008,110011,110028,110031,110056,110059,110105,110107,110109,110164,110166,110185,110187,110230,110233,110250,110253,110269,110279,110286,110288,110291,110294,110328,110331,110379,110383,110386,110400,110409,110413,110416,110441,110444,110448,110461,110464,110470,110473,110488,110490,110493,110753,110755,110767,110770,111082,111084,111096,111098,111101,111116,111121,111124,111146,111149,111152,111186,111189,111193,111204,111207,111224,111227,111241,111248,111268,111275,111289,111292,111304,111319,111339,111342,111364,111367,111371,111386,111397,111412,111415,111445,111461,111490,111498,111522,111525,111543,111553,111565,111572,111581,111587,111596,111599,111601,111610,111613,111628,111630,111633,111644,111647,111658,111661,111679,111681,111698,111701,111729,111731,111735,111738,111768,111774,111777,111781,111789,111792,111794,111815,111818,111821,111837,111840,111856,111858,111861,111872],[10,109993,109989],{"id":109994},"_5viewer-可视化与-renderer-离屏渲染",[14,109996,103123],{"id":103122},[19,109998,109999],{},"本章掌握两类可视化方式:",[433,110001,110002,110005],{},[436,110003,110004],{},"交互式 viewer: 适合人工观察仿真",[436,110006,110007],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,110009,110010],{},"使用官方接口:",[26,110012,110014],{"className":28,"code":110013,"language":30,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,110015,110016,110023],{"__ignoreMap":31},[36,110017,110018,110020],{"class":38,"line":39},[36,110019,537],{"class":114},[36,110021,110022],{"class":53}," mujoco.viewer\n",[36,110024,110025],{"class":38,"line":46},[36,110026,110027],{"class":53},"mujoco.viewer.launch_passive(model, data)\n",[19,110029,110030],{},"以及:",[26,110032,110034],{"className":28,"code":110033,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,110035,110036,110046],{"__ignoreMap":31},[36,110037,110038,110041,110043],{"class":38,"line":39},[36,110039,110040],{"class":53},"renderer ",[36,110042,115],{"class":114},[36,110044,110045],{"class":53}," mujoco.Renderer(model)\n",[36,110047,110048,110051,110053],{"class":38,"line":46},[36,110049,110050],{"class":53},"image ",[36,110052,115],{"class":114},[36,110054,110055],{"class":53}," renderer.render()\n",[19,110057,110058],{},"新手建议先理解二者区别：",[206,110060,110061,110077],{},[209,110062,110063],{},[212,110064,110065,110068,110071,110074],{},[215,110066,110067],{"align":26253},"工具",[215,110069,110070],{"align":26253},"用途",[215,110072,110073],{"align":26253},"是否打开窗口",[215,110075,110076],{"align":26253},"常见场景",[225,110078,110079,110092],{},[212,110080,110081,110084,110087,110089],{},[230,110082,110083],{"align":26253},"Viewer",[230,110085,110086],{"align":26253},"人眼实时观察仿真",[230,110088,107136],{"align":26253},[230,110090,110091],{"align":26253},"调试模型、看控制效果",[212,110093,110094,110097,110100,110102],{},[230,110095,110096],{"align":26253},"Renderer",[230,110098,110099],{"align":26253},"生成图像数组",[230,110101,107149],{"align":26253},[230,110103,110104],{"align":26253},"保存图片、训练视觉策略、服务器批量采集",[14,110106,103245],{"id":103244},[19,110108,103248],{},[26,110110,110112],{"className":26338,"code":110111,"language":26340,"meta":31,"style":31},"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",[33,110113,110114,110126,110136,110144,110152],{"__ignoreMap":31},[36,110115,110116,110118,110120,110122,110124],{"class":38,"line":39},[36,110117,27093],{"class":4500},[36,110119,28827],{"class":57},[36,110121,26350],{"class":57},[36,110123,28912],{"class":49},[36,110125,27195],{"class":49},[36,110127,110128,110130,110132,110134],{"class":38,"line":46},[36,110129,103283],{"class":57},[36,110131,103286],{"class":57},[36,110133,103289],{"class":57},[36,110135,27195],{"class":49},[36,110137,110138,110140,110142],{"class":38,"line":82},[36,110139,103296],{"class":57},[36,110141,103299],{"class":57},[36,110143,27195],{"class":49},[36,110145,110146,110148,110150],{"class":38,"line":88},[36,110147,103306],{"class":57},[36,110149,103309],{"class":57},[36,110151,27195],{"class":49},[36,110153,110154,110156,110158,110160,110162],{"class":38,"line":195},[36,110155,103316],{"class":57},[36,110157,103319],{"class":57},[36,110159,103322],{"class":57},[36,110161,103325],{"class":57},[36,110163,104989],{"class":57},[19,110165,105292],{},[26,110167,110169],{"className":26338,"code":110168,"language":26340,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,110170,110171],{"__ignoreMap":31},[36,110172,110173,110175,110177,110179,110182],{"class":38,"line":39},[36,110174,26347],{"class":4500},[36,110176,26350],{"class":57},[36,110178,103405],{"class":57},[36,110180,110181],{"class":57}," numpy",[36,110183,110184],{"class":57}," pillow\n",[19,110186,105309],{},[26,110188,110190],{"className":26338,"code":110189,"language":26340,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,110191,110192,110209,110218],{"__ignoreMap":31},[36,110193,110194,110196,110198,110200,110203,110205,110207],{"class":38,"line":39},[36,110195,32840],{"class":4500},[36,110197,31686],{"class":57},[36,110199,27631],{"class":49},[36,110201,110202],{"class":57}," mujoco-render",[36,110204,103450],{"class":57},[36,110206,103453],{"class":49},[36,110208,103456],{"class":49},[36,110210,110211,110213,110215],{"class":38,"line":46},[36,110212,32840],{"class":4500},[36,110214,103463],{"class":57},[36,110216,110217],{"class":57}," mujoco-render\n",[36,110219,110220,110222,110224,110226,110228],{"class":38,"line":82},[36,110221,26347],{"class":4500},[36,110223,26350],{"class":57},[36,110225,103405],{"class":57},[36,110227,110181],{"class":57},[36,110229,110184],{"class":57},[19,110231,110232],{},"离屏渲染后端:",[26,110234,110236],{"className":26338,"code":110235,"language":26340,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,110237,110238],{"__ignoreMap":31},[36,110239,110240,110242,110245,110247],{"class":38,"line":39},[36,110241,27558],{"class":114},[36,110243,110244],{"class":53}," MUJOCO_GL",[36,110246,115],{"class":114},[36,110248,110249],{"class":53},"egl\n",[19,110251,110252],{},"或:",[26,110254,110256],{"className":26338,"code":110255,"language":26340,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,110257,110258],{"__ignoreMap":31},[36,110259,110260,110262,110264,110266],{"class":38,"line":39},[36,110261,27558],{"class":114},[36,110263,110244],{"class":53},[36,110265,115],{"class":114},[36,110267,110268],{"class":53},"osmesa\n",[19,110270,110271,110272,110275,110276,1296],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,110273,110274],{},"egl"," 失败，再尝试 ",[33,110277,110278],{},"osmesa",[19,110280,110281,110282,110285],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,110283,110284],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110287,103519],{"id":103518},[19,110289,110290],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110292,110293],{},"典型 viewer 流程:",[26,110295,110297],{"className":28,"code":110296,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,110298,110299,110312,110319,110323],{"__ignoreMap":31},[36,110300,110301,110304,110307,110309],{"class":38,"line":39},[36,110302,110303],{"class":114},"with",[36,110305,110306],{"class":53}," mujoco.viewer.launch_passive(model, data) ",[36,110308,33887],{"class":114},[36,110310,110311],{"class":53}," viewer:\n",[36,110313,110314,110316],{"class":38,"line":46},[36,110315,4785],{"class":114},[36,110317,110318],{"class":53}," viewer.is_running():\n",[36,110320,110321],{"class":38,"line":82},[36,110322,103990],{"class":53},[36,110324,110325],{"class":38,"line":88},[36,110326,110327],{"class":53},"        viewer.sync()\n",[19,110329,110330],{},"典型 renderer 流程:",[26,110332,110334],{"className":28,"code":110333,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,110335,110336,110362,110366,110371],{"__ignoreMap":31},[36,110337,110338,110340,110342,110345,110347,110349,110351,110353,110355,110357,110360],{"class":38,"line":39},[36,110339,110040],{"class":53},[36,110341,115],{"class":114},[36,110343,110344],{"class":53}," mujoco.Renderer(model, ",[36,110346,2293],{"class":1997},[36,110348,115],{"class":114},[36,110350,44842],{"class":49},[36,110352,14958],{"class":53},[36,110354,27494],{"class":1997},[36,110356,115],{"class":114},[36,110358,110359],{"class":49},"640",[36,110361,61],{"class":53},[36,110363,110364],{"class":38,"line":46},[36,110365,106976],{"class":53},[36,110367,110368],{"class":38,"line":82},[36,110369,110370],{"class":53},"renderer.update_scene(data)\n",[36,110372,110373,110375,110377],{"class":38,"line":88},[36,110374,110050],{"class":53},[36,110376,115],{"class":114},[36,110378,110055],{"class":53},[997,110380,110382],{"id":110381},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110384,110385],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,110387,110389],{"className":28,"code":110388,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,110390,110391,110395],{"__ignoreMap":31},[36,110392,110393],{"class":38,"line":39},[36,110394,106976],{"class":53},[36,110396,110397],{"class":38,"line":46},[36,110398,110399],{"class":53},"viewer.sync()\n",[19,110401,110402,110404,110405,110408],{},[33,110403,103689],{}," 负责算物理，",[33,110406,110407],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[997,110410,110412],{"id":110411},"为什么要-sleep","为什么要 sleep",[19,110414,110415],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,110417,110419],{"className":28,"code":110418,"language":30,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,110420,110421],{"__ignoreMap":31},[36,110422,110423,110426,110428,110431,110433,110436,110438],{"class":38,"line":39},[36,110424,110425],{"class":53},"sleep_time ",[36,110427,115],{"class":114},[36,110429,110430],{"class":53}," model.opt.timestep ",[36,110432,508],{"class":114},[36,110434,110435],{"class":53}," (time.time() ",[36,110437,508],{"class":114},[36,110439,110440],{"class":53}," step_start)\n",[19,110442,110443],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[997,110445,110447],{"id":110446},"renderer-输出是什么","renderer 输出是什么",[26,110449,110451],{"className":28,"code":110450,"language":30,"meta":31,"style":31},"image = renderer.render()\n",[33,110452,110453],{"__ignoreMap":31},[36,110454,110455,110457,110459],{"class":38,"line":39},[36,110456,110050],{"class":53},[36,110458,115],{"class":114},[36,110460,110055],{"class":53},[19,110462,110463],{},"得到的是 NumPy 数组，形状通常是：",[26,110465,110468],{"className":110466,"code":110467,"language":690,"meta":31},[688],"(height, width, 3)\n",[33,110469,110467],{"__ignoreMap":31},[19,110471,110472],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,110474,110476],{"className":28,"code":110475,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,110477,110478],{"__ignoreMap":31},[36,110479,110480,110483,110486],{"class":38,"line":39},[36,110481,110482],{"class":53},"Image.fromarray(image).save(",[36,110484,110485],{"class":57},"\"render_output.png\"",[36,110487,61],{"class":53},[14,110489,103727],{"id":103726},[19,110491,110492],{},"交互式 Viewer:",[26,110494,110496],{"className":28,"code":110495,"language":30,"meta":31,"style":31},"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",[33,110497,110498,110504,110508,110514,110520,110524,110528,110536,110541,110545,110549,110553,110558,110563,110567,110571,110575,110580,110584,110588,110592,110596,110600,110604,110616,110628,110636,110640,110650,110670,110680,110685,110690,110694,110711,110724,110729,110733,110737,110749],{"__ignoreMap":31},[36,110499,110500,110502],{"class":38,"line":39},[36,110501,537],{"class":114},[36,110503,34332],{"class":53},[36,110505,110506],{"class":38,"line":46},[36,110507,546],{"emptyLinePlaceholder":545},[36,110509,110510,110512],{"class":38,"line":82},[36,110511,537],{"class":114},[36,110513,103775],{"class":53},[36,110515,110516,110518],{"class":38,"line":88},[36,110517,537],{"class":114},[36,110519,110022],{"class":53},[36,110521,110522],{"class":38,"line":195},[36,110523,546],{"emptyLinePlaceholder":545},[36,110525,110526],{"class":38,"line":1517},[36,110527,546],{"emptyLinePlaceholder":545},[36,110529,110530,110532,110534],{"class":38,"line":2421},[36,110531,103788],{"class":49},[36,110533,498],{"class":114},[36,110535,103793],{"class":57},[36,110537,110538],{"class":38,"line":2446},[36,110539,110540],{"class":57},"\u003Cmujoco model=\"viewer_demo\">\n",[36,110542,110543],{"class":38,"line":2469},[36,110544,103803],{"class":57},[36,110546,110547],{"class":38,"line":2492},[36,110548,546],{"emptyLinePlaceholder":545},[36,110550,110551],{"class":38,"line":4150},[36,110552,103812],{"class":57},[36,110554,110555],{"class":38,"line":4155},[36,110556,110557],{"class":57},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,110559,110560],{"class":38,"line":4161},[36,110561,110562],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,110564,110565],{"class":38,"line":4166},[36,110566,546],{"emptyLinePlaceholder":545},[36,110568,110569],{"class":38,"line":4180},[36,110570,103826],{"class":57},[36,110572,110573],{"class":38,"line":4185},[36,110574,103831],{"class":57},[36,110576,110577],{"class":38,"line":4191},[36,110578,110579],{"class":57},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,110581,110582],{"class":38,"line":4212},[36,110583,103841],{"class":57},[36,110585,110586],{"class":38,"line":4217},[36,110587,103846],{"class":57},[36,110589,110590],{"class":38,"line":4231},[36,110591,103851],{"class":57},[36,110593,110594],{"class":38,"line":4236},[36,110595,74],{"class":57},[36,110597,110598],{"class":38,"line":4264},[36,110599,546],{"emptyLinePlaceholder":545},[36,110601,110602],{"class":38,"line":4269},[36,110603,546],{"emptyLinePlaceholder":545},[36,110605,110606,110608,110610,110612,110614],{"class":38,"line":4286},[36,110607,34450],{"class":114},[36,110609,4510],{"class":4500},[36,110611,103872],{"class":53},[36,110613,198],{"class":49},[36,110615,6270],{"class":53},[36,110617,110618,110620,110622,110624,110626],{"class":38,"line":4291},[36,110619,103881],{"class":53},[36,110621,115],{"class":114},[36,110623,103886],{"class":53},[36,110625,103788],{"class":49},[36,110627,61],{"class":53},[36,110629,110630,110632,110634],{"class":38,"line":4296},[36,110631,103895],{"class":53},[36,110633,115],{"class":114},[36,110635,103900],{"class":53},[36,110637,110638],{"class":38,"line":4301},[36,110639,546],{"emptyLinePlaceholder":545},[36,110641,110642,110644,110646,110648],{"class":38,"line":4315},[36,110643,36678],{"class":114},[36,110645,110306],{"class":53},[36,110647,33887],{"class":114},[36,110649,110311],{"class":53},[36,110651,110652,110655,110658,110660,110663,110665,110668],{"class":38,"line":4320},[36,110653,110654],{"class":114},"        while",[36,110656,110657],{"class":53}," viewer.is_running() ",[36,110659,1431],{"class":114},[36,110661,110662],{"class":53}," data.time ",[36,110664,1507],{"class":114},[36,110666,110667],{"class":49}," 5.0",[36,110669,6270],{"class":53},[36,110671,110672,110675,110677],{"class":38,"line":5109},[36,110673,110674],{"class":53},"            step_start ",[36,110676,115],{"class":114},[36,110678,110679],{"class":53}," time.time()\n",[36,110681,110682],{"class":38,"line":5123},[36,110683,110684],{"class":53},"            mujoco.mj_step(model, data)\n",[36,110686,110687],{"class":38,"line":5131},[36,110688,110689],{"class":53},"            viewer.sync()\n",[36,110691,110692],{"class":38,"line":5136},[36,110693,546],{"emptyLinePlaceholder":545},[36,110695,110696,110699,110701,110703,110705,110707,110709],{"class":38,"line":5142},[36,110697,110698],{"class":53},"            sleep_time ",[36,110700,115],{"class":114},[36,110702,110430],{"class":53},[36,110704,508],{"class":114},[36,110706,110435],{"class":53},[36,110708,508],{"class":114},[36,110710,110440],{"class":53},[36,110712,110713,110715,110718,110720,110722],{"class":38,"line":5148},[36,110714,7173],{"class":114},[36,110716,110717],{"class":53}," sleep_time ",[36,110719,3633],{"class":114},[36,110721,6624],{"class":49},[36,110723,6270],{"class":53},[36,110725,110726],{"class":38,"line":5153},[36,110727,110728],{"class":53},"                time.sleep(sleep_time)\n",[36,110730,110731],{"class":38,"line":10475},[36,110732,546],{"emptyLinePlaceholder":545},[36,110734,110735],{"class":38,"line":10499},[36,110736,546],{"emptyLinePlaceholder":545},[36,110738,110739,110741,110743,110745,110747],{"class":38,"line":10504},[36,110740,4069],{"class":114},[36,110742,33724],{"class":49},[36,110744,1351],{"class":114},[36,110746,104035],{"class":57},[36,110748,6270],{"class":53},[36,110750,110751],{"class":38,"line":10510},[36,110752,104042],{"class":53},[19,110754,106042],{},[26,110756,110758],{"className":26338,"code":110757,"language":26340,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,110759,110760],{"__ignoreMap":31},[36,110761,110762,110764],{"class":38,"line":39},[36,110763,103757],{"class":4500},[36,110765,110766],{"class":57}," ch5_viewer.py\n",[19,110768,110769],{},"离屏 Renderer 保存图片:",[26,110771,110773],{"className":28,"code":110772,"language":30,"meta":31,"style":31},"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",[33,110774,110775,110787,110791,110797,110807,110811,110815,110823,110828,110832,110836,110840,110844,110849,110853,110857,110861,110865,110869,110873,110877,110881,110885,110889,110893,110905,110917,110925,110950,110954,110970,110974,110978,110993,111002,111006,111020,111025,111030,111034,111046,111058,111062,111066,111078],{"__ignoreMap":31},[36,110776,110777,110779,110782,110784],{"class":38,"line":39},[36,110778,33241],{"class":114},[36,110780,110781],{"class":53}," pathlib ",[36,110783,537],{"class":114},[36,110785,110786],{"class":53}," Path\n",[36,110788,110789],{"class":38,"line":46},[36,110790,546],{"emptyLinePlaceholder":545},[36,110792,110793,110795],{"class":38,"line":82},[36,110794,537],{"class":114},[36,110796,103775],{"class":53},[36,110798,110799,110801,110803,110805],{"class":38,"line":88},[36,110800,33241],{"class":114},[36,110802,49760],{"class":49},[36,110804,49763],{"class":114},[36,110806,49766],{"class":53},[36,110808,110809],{"class":38,"line":195},[36,110810,546],{"emptyLinePlaceholder":545},[36,110812,110813],{"class":38,"line":1517},[36,110814,546],{"emptyLinePlaceholder":545},[36,110816,110817,110819,110821],{"class":38,"line":2421},[36,110818,103788],{"class":49},[36,110820,498],{"class":114},[36,110822,103793],{"class":57},[36,110824,110825],{"class":38,"line":2446},[36,110826,110827],{"class":57},"\u003Cmujoco model=\"renderer_demo\">\n",[36,110829,110830],{"class":38,"line":2469},[36,110831,103803],{"class":57},[36,110833,110834],{"class":38,"line":2492},[36,110835,546],{"emptyLinePlaceholder":545},[36,110837,110838],{"class":38,"line":4150},[36,110839,103812],{"class":57},[36,110841,110842],{"class":38,"line":4155},[36,110843,110557],{"class":57},[36,110845,110846],{"class":38,"line":4161},[36,110847,110848],{"class":57},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,110850,110851],{"class":38,"line":4166},[36,110852,110562],{"class":57},[36,110854,110855],{"class":38,"line":4180},[36,110856,546],{"emptyLinePlaceholder":545},[36,110858,110859],{"class":38,"line":4185},[36,110860,103826],{"class":57},[36,110862,110863],{"class":38,"line":4191},[36,110864,103831],{"class":57},[36,110866,110867],{"class":38,"line":4212},[36,110868,110579],{"class":57},[36,110870,110871],{"class":38,"line":4217},[36,110872,103841],{"class":57},[36,110874,110875],{"class":38,"line":4231},[36,110876,103846],{"class":57},[36,110878,110879],{"class":38,"line":4236},[36,110880,103851],{"class":57},[36,110882,110883],{"class":38,"line":4264},[36,110884,74],{"class":57},[36,110886,110887],{"class":38,"line":4269},[36,110888,546],{"emptyLinePlaceholder":545},[36,110890,110891],{"class":38,"line":4286},[36,110892,546],{"emptyLinePlaceholder":545},[36,110894,110895,110897,110899,110901,110903],{"class":38,"line":4291},[36,110896,34450],{"class":114},[36,110898,4510],{"class":4500},[36,110900,103872],{"class":53},[36,110902,198],{"class":49},[36,110904,6270],{"class":53},[36,110906,110907,110909,110911,110913,110915],{"class":38,"line":4296},[36,110908,103881],{"class":53},[36,110910,115],{"class":114},[36,110912,103886],{"class":53},[36,110914,103788],{"class":49},[36,110916,61],{"class":53},[36,110918,110919,110921,110923],{"class":38,"line":4301},[36,110920,103895],{"class":53},[36,110922,115],{"class":114},[36,110924,103900],{"class":53},[36,110926,110927,110930,110932,110934,110936,110938,110940,110942,110944,110946,110948],{"class":38,"line":4315},[36,110928,110929],{"class":53},"    renderer ",[36,110931,115],{"class":114},[36,110933,110344],{"class":53},[36,110935,2293],{"class":1997},[36,110937,115],{"class":114},[36,110939,44842],{"class":49},[36,110941,14958],{"class":53},[36,110943,27494],{"class":1997},[36,110945,115],{"class":114},[36,110947,110359],{"class":49},[36,110949,61],{"class":53},[36,110951,110952],{"class":38,"line":4320},[36,110953,546],{"emptyLinePlaceholder":545},[36,110955,110956,110958,110960,110962,110964,110966,110968],{"class":38,"line":5109},[36,110957,5732],{"class":114},[36,110959,103975],{"class":53},[36,110961,28556],{"class":114},[36,110963,34946],{"class":49},[36,110965,54],{"class":53},[36,110967,166],{"class":49},[36,110969,33290],{"class":53},[36,110971,110972],{"class":38,"line":5123},[36,110973,103990],{"class":53},[36,110975,110976],{"class":38,"line":5131},[36,110977,546],{"emptyLinePlaceholder":545},[36,110979,110980,110983,110986,110988,110991],{"class":38,"line":5136},[36,110981,110982],{"class":53},"    renderer.update_scene(data, ",[36,110984,110985],{"class":1997},"camera",[36,110987,115],{"class":114},[36,110989,110990],{"class":57},"\"fixed_camera\"",[36,110992,61],{"class":53},[36,110994,110995,110998,111000],{"class":38,"line":5142},[36,110996,110997],{"class":53},"    image ",[36,110999,115],{"class":114},[36,111001,110055],{"class":53},[36,111003,111004],{"class":38,"line":5148},[36,111005,546],{"emptyLinePlaceholder":545},[36,111007,111008,111011,111013,111016,111018],{"class":38,"line":5153},[36,111009,111010],{"class":53},"    output_path ",[36,111012,115],{"class":114},[36,111014,111015],{"class":53}," Path(",[36,111017,110485],{"class":57},[36,111019,61],{"class":53},[36,111021,111022],{"class":38,"line":10475},[36,111023,111024],{"class":53},"    Image.fromarray(image).save(output_path)\n",[36,111026,111027],{"class":38,"line":10499},[36,111028,111029],{"class":53},"    renderer.close()\n",[36,111031,111032],{"class":38,"line":10504},[36,111033,546],{"emptyLinePlaceholder":545},[36,111035,111036,111038,111040,111043],{"class":38,"line":10510},[36,111037,33803],{"class":49},[36,111039,54],{"class":53},[36,111041,111042],{"class":57},"\"saved:\"",[36,111044,111045],{"class":53},", output_path.resolve())\n",[36,111047,111048,111050,111052,111055],{"class":38,"line":10537},[36,111049,33803],{"class":49},[36,111051,54],{"class":53},[36,111053,111054],{"class":57},"\"image shape:\"",[36,111056,111057],{"class":53},", image.shape)\n",[36,111059,111060],{"class":38,"line":10542},[36,111061,546],{"emptyLinePlaceholder":545},[36,111063,111064],{"class":38,"line":10548},[36,111065,546],{"emptyLinePlaceholder":545},[36,111067,111068,111070,111072,111074,111076],{"class":38,"line":10560},[36,111069,4069],{"class":114},[36,111071,33724],{"class":49},[36,111073,1351],{"class":114},[36,111075,104035],{"class":57},[36,111077,6270],{"class":53},[36,111079,111080],{"class":38,"line":10572},[36,111081,104042],{"class":53},[19,111083,106042],{},[26,111085,111087],{"className":26338,"code":111086,"language":26340,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,111088,111089],{"__ignoreMap":31},[36,111090,111091,111093],{"class":38,"line":39},[36,111092,103757],{"class":4500},[36,111094,111095],{"class":57}," ch5_renderer.py\n",[997,111097,104045],{"id":104045},[19,111099,111100],{},"viewer 上下文：",[26,111102,111104],{"className":28,"code":111103,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,111105,111106],{"__ignoreMap":31},[36,111107,111108,111110,111112,111114],{"class":38,"line":39},[36,111109,110303],{"class":114},[36,111111,110306],{"class":53},[36,111113,33887],{"class":114},[36,111115,110311],{"class":53},[19,111117,111118,111120],{},[33,111119,110303],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,111122,111123],{},"窗口循环：",[26,111125,111127],{"className":28,"code":111126,"language":30,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,111128,111129],{"__ignoreMap":31},[36,111130,111131,111134,111136,111138,111140,111142,111144],{"class":38,"line":39},[36,111132,111133],{"class":114},"while",[36,111135,110657],{"class":53},[36,111137,1431],{"class":114},[36,111139,110662],{"class":53},[36,111141,1507],{"class":114},[36,111143,110667],{"class":49},[36,111145,6270],{"class":53},[19,111147,111148],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111150,111151],{},"固定相机：",[26,111153,111155],{"className":55561,"code":111154,"language":55563,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,111156,111157],{"__ignoreMap":31},[36,111158,111159,111161,111163,111165,111167,111169,111171,111173,111176,111179,111181,111184],{"class":38,"line":39},[36,111160,1507],{"class":53},[36,111162,110985],{"class":53794},[36,111164,17440],{"class":4500},[36,111166,115],{"class":53},[36,111168,110990],{"class":57},[36,111170,103580],{"class":4500},[36,111172,115],{"class":53},[36,111174,111175],{"class":57},"\"1.5 -2.0 1.2\"",[36,111177,111178],{"class":4500}," xyaxes",[36,111180,115],{"class":53},[36,111182,111183],{"class":57},"\"1 0.75 0 0 0 1\"",[36,111185,103618],{"class":53},[19,111187,111188],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[997,111190,111192],{"id":111191},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,111194,111196],{"className":28,"code":111195,"language":30,"meta":31,"style":31},"import time\n",[33,111197,111198],{"__ignoreMap":31},[36,111199,111200,111202],{"class":38,"line":39},[36,111201,537],{"class":114},[36,111203,34332],{"class":53},[19,111205,111206],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,111208,111210],{"className":28,"code":111209,"language":30,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,111211,111212,111218],{"__ignoreMap":31},[36,111213,111214,111216],{"class":38,"line":39},[36,111215,537],{"class":114},[36,111217,103775],{"class":53},[36,111219,111220,111222],{"class":38,"line":46},[36,111221,537],{"class":114},[36,111223,110022],{"class":53},[19,111225,111226],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,111228,111229],{"className":28,"code":111103,"language":30,"meta":31,"style":31},[33,111230,111231],{"__ignoreMap":31},[36,111232,111233,111235,111237,111239],{"class":38,"line":39},[36,111234,110303],{"class":114},[36,111236,110306],{"class":53},[36,111238,33887],{"class":114},[36,111240,110311],{"class":53},[19,111242,111243,111244,111247],{},"打开一个 viewer 窗口。",[33,111245,111246],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,111249,111250],{"className":28,"code":111126,"language":30,"meta":31,"style":31},[33,111251,111252],{"__ignoreMap":31},[36,111253,111254,111256,111258,111260,111262,111264,111266],{"class":38,"line":39},[36,111255,111133],{"class":114},[36,111257,110657],{"class":53},[36,111259,1431],{"class":114},[36,111261,110662],{"class":53},[36,111263,1507],{"class":114},[36,111265,110667],{"class":49},[36,111267,6270],{"class":53},[19,111269,111270,111271,111274],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,111272,111273],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,111276,111278],{"className":28,"code":111277,"language":30,"meta":31,"style":31},"step_start = time.time()\n",[33,111279,111280],{"__ignoreMap":31},[36,111281,111282,111285,111287],{"class":38,"line":39},[36,111283,111284],{"class":53},"step_start ",[36,111286,115],{"class":114},[36,111288,110679],{"class":53},[19,111290,111291],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,111293,111294],{"className":28,"code":110388,"language":30,"meta":31,"style":31},[33,111295,111296,111300],{"__ignoreMap":31},[36,111297,111298],{"class":38,"line":39},[36,111299,106976],{"class":53},[36,111301,111302],{"class":38,"line":46},[36,111303,110399],{"class":53},[19,111305,111306,111308,111309,111311,111312,111314,111315,111318],{},[33,111307,103689],{}," 推进物理仿真。",[33,111310,110407],{}," 把最新的 ",[33,111313,35902],{}," 同步到窗口里显示。没有 ",[33,111316,111317],{},"sync()","，窗口可能看不到最新状态。",[26,111320,111321],{"className":28,"code":110418,"language":30,"meta":31,"style":31},[33,111322,111323],{"__ignoreMap":31},[36,111324,111325,111327,111329,111331,111333,111335,111337],{"class":38,"line":39},[36,111326,110425],{"class":53},[36,111328,115],{"class":114},[36,111330,110430],{"class":53},[36,111332,508],{"class":114},[36,111334,110435],{"class":53},[36,111336,508],{"class":114},[36,111338,110440],{"class":53},[19,111340,111341],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,111343,111345],{"className":28,"code":111344,"language":30,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,111346,111347,111359],{"__ignoreMap":31},[36,111348,111349,111351,111353,111355,111357],{"class":38,"line":39},[36,111350,4069],{"class":114},[36,111352,110717],{"class":53},[36,111354,3633],{"class":114},[36,111356,6624],{"class":49},[36,111358,6270],{"class":53},[36,111360,111361],{"class":38,"line":46},[36,111362,111363],{"class":53},"    time.sleep(sleep_time)\n",[19,111365,111366],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[997,111368,111370],{"id":111369},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,111372,111374],{"className":28,"code":111373,"language":30,"meta":31,"style":31},"from pathlib import Path\n",[33,111375,111376],{"__ignoreMap":31},[36,111377,111378,111380,111382,111384],{"class":38,"line":39},[36,111379,33241],{"class":114},[36,111381,110781],{"class":53},[36,111383,537],{"class":114},[36,111385,110786],{"class":53},[19,111387,111388,111389,111392,111393,111396],{},"导入 ",[33,111390,111391],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,111394,111395],{},"Path(\"render_output.png\")"," 更清晰。",[26,111398,111400],{"className":28,"code":111399,"language":30,"meta":31,"style":31},"from PIL import Image\n",[33,111401,111402],{"__ignoreMap":31},[36,111403,111404,111406,111408,111410],{"class":38,"line":39},[36,111405,33241],{"class":114},[36,111407,49760],{"class":49},[36,111409,49763],{"class":114},[36,111411,49766],{"class":53},[19,111413,111414],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,111416,111417],{"className":55561,"code":111154,"language":55563,"meta":31,"style":31},[33,111418,111419],{"__ignoreMap":31},[36,111420,111421,111423,111425,111427,111429,111431,111433,111435,111437,111439,111441,111443],{"class":38,"line":39},[36,111422,1507],{"class":53},[36,111424,110985],{"class":53794},[36,111426,17440],{"class":4500},[36,111428,115],{"class":53},[36,111430,110990],{"class":57},[36,111432,103580],{"class":4500},[36,111434,115],{"class":53},[36,111436,111175],{"class":57},[36,111438,111178],{"class":4500},[36,111440,115],{"class":53},[36,111442,111183],{"class":57},[36,111444,103618],{"class":53},[19,111446,111447,111448,111450,111451,111453,111454,111457,111458,111460],{},"定义一个相机。",[33,111449,1998],{}," 是相机名字。",[33,111452,106618],{}," 是相机在世界里的位置。",[33,111455,111456],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,111459,106618],{}," 来调视角。",[26,111462,111464],{"className":28,"code":111463,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,111465,111466],{"__ignoreMap":31},[36,111467,111468,111470,111472,111474,111476,111478,111480,111482,111484,111486,111488],{"class":38,"line":39},[36,111469,110040],{"class":53},[36,111471,115],{"class":114},[36,111473,110344],{"class":53},[36,111475,2293],{"class":1997},[36,111477,115],{"class":114},[36,111479,44842],{"class":49},[36,111481,14958],{"class":53},[36,111483,27494],{"class":1997},[36,111485,115],{"class":114},[36,111487,110359],{"class":49},[36,111489,61],{"class":53},[19,111491,111492,111493,1292,111495,111497],{},"创建离屏渲染器。",[33,111494,2293],{},[33,111496,27494],{}," 决定输出图片大小。",[26,111499,111500],{"className":28,"code":104149,"language":30,"meta":31,"style":31},[33,111501,111502,111518],{"__ignoreMap":31},[36,111503,111504,111506,111508,111510,111512,111514,111516],{"class":38,"line":39},[36,111505,5556],{"class":114},[36,111507,103975],{"class":53},[36,111509,28556],{"class":114},[36,111511,34946],{"class":49},[36,111513,54],{"class":53},[36,111515,166],{"class":49},[36,111517,33290],{"class":53},[36,111519,111520],{"class":38,"line":46},[36,111521,104172],{"class":53},[19,111523,111524],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,111526,111528],{"className":28,"code":111527,"language":30,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,111529,111530],{"__ignoreMap":31},[36,111531,111532,111535,111537,111539,111541],{"class":38,"line":39},[36,111533,111534],{"class":53},"renderer.update_scene(data, ",[36,111536,110985],{"class":1997},[36,111538,115],{"class":114},[36,111540,110990],{"class":57},[36,111542,61],{"class":53},[19,111544,111545,111546,111548,111549,111552],{},"告诉 renderer：用当前 ",[33,111547,35902],{}," 的状态更新画面，并使用名为 ",[33,111550,111551],{},"fixed_camera"," 的相机视角。",[26,111554,111555],{"className":28,"code":110450,"language":30,"meta":31,"style":31},[33,111556,111557],{"__ignoreMap":31},[36,111558,111559,111561,111563],{"class":38,"line":39},[36,111560,110050],{"class":53},[36,111562,115],{"class":114},[36,111564,110055],{"class":53},[19,111566,111567,111568,111571],{},"真正渲染出图像。",[33,111569,111570],{},"image"," 是一个 NumPy 数组，不是文件。",[26,111573,111575],{"className":28,"code":111574,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,111576,111577],{"__ignoreMap":31},[36,111578,111579],{"class":38,"line":39},[36,111580,111574],{"class":53},[19,111582,111583,111584,1296],{},"把数组转换成图片，并保存到 ",[33,111585,111586],{},"render_output.png",[26,111588,111590],{"className":28,"code":111589,"language":30,"meta":31,"style":31},"renderer.close()\n",[33,111591,111592],{"__ignoreMap":31},[36,111593,111594],{"class":38,"line":39},[36,111595,111589],{"class":53},[19,111597,111598],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111600,104789],{"id":104788},[19,111602,111603,111604,111606,111607,1296],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,111605,111586],{},"，并输出图像数组形状，例如 ",[33,111608,111609],{},"(480, 640, 3)",[19,111611,111612],{},"如果图片里看不到方块，先检查：",[433,111614,111615,111618,111621],{},[436,111616,111617],{},"方块是否掉到相机视野外。",[436,111619,111620],{},"camera 位置是否合理。",[436,111622,111623,111624,111627],{},"是否在 ",[33,111625,111626],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111629,104821],{"id":104820},[19,111631,111632],{},"运行 viewer:",[26,111634,111636],{"className":26338,"code":111635,"language":26340,"meta":31,"style":31},"python ch5_viewer.py\n",[33,111637,111638],{"__ignoreMap":31},[36,111639,111640,111642],{"class":38,"line":39},[36,111641,30],{"class":4500},[36,111643,110766],{"class":57},[19,111645,111646],{},"运行 renderer:",[26,111648,111650],{"className":26338,"code":111649,"language":26340,"meta":31,"style":31},"python ch5_renderer.py\n",[33,111651,111652],{"__ignoreMap":31},[36,111653,111654,111656],{"class":38,"line":39},[36,111655,30],{"class":4500},[36,111657,111095],{"class":57},[19,111659,111660],{},"如果在服务器上运行:",[26,111662,111664],{"className":26338,"code":111663,"language":26340,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,111665,111666],{"__ignoreMap":31},[36,111667,111668,111670,111672,111674,111677],{"class":38,"line":39},[36,111669,110284],{"class":53},[36,111671,115],{"class":114},[36,111673,110274],{"class":57},[36,111675,111676],{"class":4500}," python",[36,111678,111095],{"class":57},[19,111680,110252],{},[26,111682,111684],{"className":26338,"code":111683,"language":26340,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,111685,111686],{"__ignoreMap":31},[36,111687,111688,111690,111692,111694,111696],{"class":38,"line":39},[36,111689,110284],{"class":53},[36,111691,115],{"class":114},[36,111693,110278],{"class":57},[36,111695,111676],{"class":4500},[36,111697,111095],{"class":57},[19,111699,111700],{},"再做几个练习：",[433,111702,111703,111710,111713,111719],{},[436,111704,111705,111706,111709],{},"把 renderer 分辨率改成 ",[33,111707,111708],{},"height=240, width=320","，观察输出 shape。",[436,111711,111712],{},"把方块颜色改成蓝色，重新保存图片。",[436,111714,111715,111716,111718],{},"把相机 ",[33,111717,106618],{}," 改远一点，观察画面中物体是否变小。",[436,111720,111721,111722,104887,111725,111728],{},"把 viewer 示例中的 ",[33,111723,111724],{},"data.time \u003C 5.0",[33,111726,111727],{},"data.time \u003C 20.0","，观察更长时间。",[14,111730,104926],{"id":104925},[997,111732,111734],{"id":111733},"viewer-窗口打不开","viewer 窗口打不开",[19,111736,111737],{},"安装:",[26,111739,111741],{"className":26338,"code":111740,"language":26340,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,111742,111743],{"__ignoreMap":31},[36,111744,111745,111747,111749,111751,111753,111755,111757,111759,111761,111763,111765],{"class":38,"line":39},[36,111746,27093],{"class":4500},[36,111748,28827],{"class":57},[36,111750,26350],{"class":57},[36,111752,28912],{"class":49},[36,111754,104979],{"class":57},[36,111756,103309],{"class":57},[36,111758,104984],{"class":57},[36,111760,103322],{"class":57},[36,111762,103328],{"class":57},[36,111764,103319],{"class":57},[36,111766,111767],{"class":57}," libXinerama\n",[997,111769,111771],{"id":111770},"glfwerror",[33,111772,111773],{},"GLFWError",[19,111775,111776],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[997,111778,111780],{"id":111779},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111782,111783,111784,85020,111786,111788],{},"尝试 ",[33,111785,103511],{},[33,111787,103514],{},"。可能存在版本差异。",[997,111790,111791],{"id":111791},"保存图片是黑的",[19,111793,105048],{},[433,111795,111796,111799,111802,111812],{},[436,111797,111798],{},"XML 里是否有 light。",[436,111800,111801],{},"相机是否对着模型。",[436,111803,111804,111805,111808,111809,1296],{},"是否先 ",[33,111806,111807],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,111810,111811],{},"renderer.render()",[436,111813,111814],{},"物体是否已经掉出视野。",[997,111816,111817],{"id":111817},"远程服务器没有显示器",[19,111819,111820],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,111822,111823],{"className":26338,"code":111663,"language":26340,"meta":31,"style":31},[33,111824,111825],{"__ignoreMap":31},[36,111826,111827,111829,111831,111833,111835],{"class":38,"line":39},[36,111828,110284],{"class":53},[36,111830,115],{"class":114},[36,111832,110274],{"class":57},[36,111834,111676],{"class":4500},[36,111836,111095],{"class":57},[19,111838,111839],{},"如果 EGL 不可用，再尝试：",[26,111841,111842],{"className":26338,"code":111683,"language":26340,"meta":31,"style":31},[33,111843,111844],{"__ignoreMap":31},[36,111845,111846,111848,111850,111852,111854],{"class":38,"line":39},[36,111847,110284],{"class":53},[36,111849,115],{"class":114},[36,111851,110278],{"class":57},[36,111853,111676],{"class":4500},[36,111855,111095],{"class":57},[14,111857,105080],{"id":105079},[19,111859,111860],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[433,111862,111863,111866,111869],{},[436,111864,111865],{},"先用 viewer 看模型和控制是否正常。",[436,111867,111868],{},"再用 renderer 保存图片或构造视觉观测。",[436,111870,111871],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2602,111873,111874],{},"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":31,"searchDepth":46,"depth":46,"links":111876},[111877,111878,111879,111884,111889,111890,111891,111898],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":111880},[111881,111882,111883],{"id":110381,"depth":82,"text":110382},{"id":110411,"depth":82,"text":110412},{"id":110446,"depth":82,"text":110447},{"id":103726,"depth":46,"text":103727,"children":111885},[111886,111887,111888],{"id":104045,"depth":82,"text":104045},{"id":111191,"depth":82,"text":111192},{"id":111369,"depth":82,"text":111370},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":111892},[111893,111894,111895,111896,111897],{"id":111733,"depth":82,"text":111734},{"id":111770,"depth":82,"text":111773},{"id":111779,"depth":82,"text":111780},{"id":111791,"depth":82,"text":111791},{"id":111817,"depth":82,"text":111817},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109989,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111905,"title":111906,"body":111907,"description":31,"extension":2631,"meta":113817,"navigation":545,"path":113818,"seo":113819,"stem":113820,"__hash__":113821},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111908,"toc":113793},[111909,111912,111914,111917,111919,111938,111941,111947,111950,111952,111954,111978,111980,111994,111996,112037,112039,112050,112052,112055,112061,112064,112098,112101,112133,112136,112168,112172,112175,112215,112218,112224,112227,112233,112237,112240,112246,112249,112253,112256,112295,112297,112310,112313,112315,112897,112899,112911,112914,112925,112927,112930,112949,112961,112964,112985,112988,112991,113034,113037,113040,113060,113067,113069,113087,113102,113105,113111,113114,113120,113137,113144,113175,113186,113220,113231,113248,113257,113265,113270,113284,113287,113308,113314,113328,113333,113363,113373,113398,113406,113429,113432,113448,113451,113459,113465,113487,113500,113521,113530,113569,113580,113582,113585,113591,113594,113597,113603,113606,113626,113629,113631,113670,113672,113675,113683,113686,113689,113716,113719,113729,113735,113738,113744,113746,113752,113756,113759,113761,113764,113788,113791],[10,111910,111906],{"id":111911},"_6控制任务cartpole",[14,111913,103123],{"id":103122},[19,111915,111916],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111918,106803],{},[433,111920,111921,111924,111926,111929,111932,111935],{},[436,111922,111923],{},"slide joint",[436,111925,108655],{},[436,111927,111928],{},"cart force actuator",[436,111930,111931],{},"状态观测",[436,111933,111934],{},"简单控制循环",[436,111936,111937],{},"reward 设计雏形",[19,111939,111940],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,111942,111945],{"className":111943,"code":111944,"language":690,"meta":31},[688],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,111946,111944],{"__ignoreMap":31},[19,111948,111949],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111951,103245],{"id":103244},[19,111953,103248],{},[26,111955,111956],{"className":26338,"code":106859,"language":26340,"meta":31,"style":31},[33,111957,111958],{"__ignoreMap":31},[36,111959,111960,111962,111964,111966,111968,111970,111972,111974,111976],{"class":38,"line":39},[36,111961,27093],{"class":4500},[36,111963,28827],{"class":57},[36,111965,26350],{"class":57},[36,111967,28912],{"class":49},[36,111969,106874],{"class":57},[36,111971,103273],{"class":57},[36,111973,104974],{"class":57},[36,111975,103289],{"class":57},[36,111977,106883],{"class":57},[19,111979,105292],{},[26,111981,111982],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},[33,111983,111984],{"__ignoreMap":31},[36,111985,111986,111988,111990,111992],{"class":38,"line":39},[36,111987,26347],{"class":4500},[36,111989,26350],{"class":57},[36,111991,103405],{"class":57},[36,111993,103408],{"class":57},[19,111995,105309],{},[26,111997,111999],{"className":26338,"code":111998,"language":26340,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,112000,112001,112018,112027],{"__ignoreMap":31},[36,112002,112003,112005,112007,112009,112012,112014,112016],{"class":38,"line":39},[36,112004,32840],{"class":4500},[36,112006,31686],{"class":57},[36,112008,27631],{"class":49},[36,112010,112011],{"class":57}," mujoco-cartpole",[36,112013,103450],{"class":57},[36,112015,103453],{"class":49},[36,112017,103456],{"class":49},[36,112019,112020,112022,112024],{"class":38,"line":46},[36,112021,32840],{"class":4500},[36,112023,103463],{"class":57},[36,112025,112026],{"class":57}," mujoco-cartpole\n",[36,112028,112029,112031,112033,112035],{"class":38,"line":82},[36,112030,26347],{"class":4500},[36,112032,26350],{"class":57},[36,112034,103405],{"class":57},[36,112036,103408],{"class":57},[19,112038,103479],{},[433,112040,112041,112044,112047],{},[436,112042,112043],{},"本章不依赖 Gymnasium。",[436,112045,112046],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[436,112048,112049],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112051,103519],{"id":103518},[19,112053,112054],{},"Cartpole 的模型结构:",[26,112056,112059],{"className":112057,"code":112058,"language":690,"meta":31},[688],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,112060,112058],{"__ignoreMap":31},[19,112062,112063],{},"小车通过 slide joint 左右移动:",[26,112065,112067],{"className":55561,"code":112066,"language":55563,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,112068,112069],{"__ignoreMap":31},[36,112070,112071,112073,112075,112077,112079,112082,112084,112086,112089,112091,112093,112096],{"class":38,"line":39},[36,112072,1507],{"class":53},[36,112074,105429],{"class":53794},[36,112076,17440],{"class":4500},[36,112078,115],{"class":53},[36,112080,112081],{"class":57},"\"cart_x\"",[36,112083,56317],{"class":4500},[36,112085,115],{"class":53},[36,112087,112088],{"class":57},"\"slide\"",[36,112090,108499],{"class":4500},[36,112092,115],{"class":53},[36,112094,112095],{"class":57},"\"1 0 0\"",[36,112097,103618],{"class":53},[19,112099,112100],{},"杆子通过 hinge joint 旋转:",[26,112102,112104],{"className":55561,"code":112103,"language":55563,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,112105,112106],{"__ignoreMap":31},[36,112107,112108,112110,112112,112114,112116,112119,112121,112123,112125,112127,112129,112131],{"class":38,"line":39},[36,112109,1507],{"class":53},[36,112111,105429],{"class":53794},[36,112113,17440],{"class":4500},[36,112115,115],{"class":53},[36,112117,112118],{"class":57},"\"pole_hinge\"",[36,112120,56317],{"class":4500},[36,112122,115],{"class":53},[36,112124,108490],{"class":57},[36,112126,108499],{"class":4500},[36,112128,115],{"class":53},[36,112130,108504],{"class":57},[36,112132,103618],{"class":53},[19,112134,112135],{},"控制力作用在小车 slide joint 上:",[26,112137,112139],{"className":55561,"code":112138,"language":55563,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,112140,112141],{"__ignoreMap":31},[36,112142,112143,112145,112147,112149,112151,112154,112156,112158,112160,112162,112164,112166],{"class":38,"line":39},[36,112144,1507],{"class":53},[36,112146,108545],{"class":53794},[36,112148,17440],{"class":4500},[36,112150,115],{"class":53},[36,112152,112153],{"class":57},"\"cart_motor\"",[36,112155,108555],{"class":4500},[36,112157,115],{"class":53},[36,112159,112081],{"class":57},[36,112161,108562],{"class":4500},[36,112163,115],{"class":53},[36,112165,778],{"class":57},[36,112167,103618],{"class":53},[997,112169,112171],{"id":112170},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112173,112174],{},"这个简化模型有两个关节：",[206,112176,112177,112188],{},[209,112178,112179],{},[212,112180,112181,112183,112185],{},[215,112182,105232],{"align":26253},[215,112184,217],{"align":26253},[215,112186,112187],{"align":26253},"对应状态",[225,112189,112190,112203],{},[212,112191,112192,112197,112200],{},[230,112193,112194],{"align":26253},[33,112195,112196],{},"cart_x",[230,112198,112199],{"align":26253},"slide",[230,112201,112202],{"align":26253},"小车 x 位置",[212,112204,112205,112210,112212],{},[230,112206,112207],{"align":26253},[33,112208,112209],{},"pole_hinge",[230,112211,108311],{"align":26253},[230,112213,112214],{"align":26253},"杆子角度",[19,112216,112217],{},"所以：",[26,112219,112222],{"className":112220,"code":112221,"language":690,"meta":31},[688],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,112223,112221],{"__ignoreMap":31},[19,112225,112226],{},"把它们拼起来就是观测：",[26,112228,112231],{"className":112229,"code":112230,"language":690,"meta":31},[688],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,112232,112230],{"__ignoreMap":31},[997,112234,112236],{"id":112235},"action-是什么","action 是什么",[19,112238,112239],{},"本章只有一个 actuator：",[26,112241,112244],{"className":112242,"code":112243,"language":690,"meta":31},[688],"data.ctrl[0] = action\n",[33,112245,112243],{"__ignoreMap":31},[19,112247,112248],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[997,112250,112252],{"id":112251},"reward-是什么","reward 是什么",[19,112254,112255],{},"奖励函数：",[26,112257,112259],{"className":28,"code":112258,"language":30,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,112260,112261],{"__ignoreMap":31},[36,112262,112263,112265,112267,112269,112271,112273,112276,112278,112281,112283,112285,112287,112290,112292],{"class":38,"line":39},[36,112264,19564],{"class":114},[36,112266,985],{"class":49},[36,112268,54],{"class":53},[36,112270,104876],{"class":49},[36,112272,54765],{"class":114},[36,112274,112275],{"class":49}," 0.1",[36,112277,9045],{"class":114},[36,112279,112280],{"class":53}," cart_x ",[36,112282,1050],{"class":114},[36,112284,112280],{"class":53},[36,112286,508],{"class":114},[36,112288,112289],{"class":53}," pole_angle ",[36,112291,1050],{"class":114},[36,112293,112294],{"class":53}," pole_angle)\n",[19,112296,108697],{},[433,112298,112299,112304,112307],{},[436,112300,112301,112302,1296],{},"基础奖励是 ",[33,112303,104876],{},[436,112305,112306],{},"小车离中心越远，扣分越多。",[436,112308,112309],{},"杆子角度越大，扣分越多。",[19,112311,112312],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112314,103727],{"id":103726},[26,112316,112318],{"className":28,"code":112317,"language":30,"meta":31,"style":31},"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",[33,112319,112320,112326,112336,112340,112344,112352,112357,112361,112365,112369,112374,112378,112383,112388,112393,112397,112402,112407,112412,112416,112420,112424,112428,112432,112437,112441,112445,112449,112453,112457,112467,112474,112478,112482,112496,112510,112523,112553,112557,112561,112573,112585,112593,112597,112610,112614,112618,112627,112631,112647,112657,112670,112683,112687,112710,112728,112732,112744,112748,112752,112762,112772,112776,112792,112833,112837,112857,112873,112877,112881,112893],{"__ignoreMap":31},[36,112321,112322,112324],{"class":38,"line":39},[36,112323,537],{"class":114},[36,112325,103775],{"class":53},[36,112327,112328,112330,112332,112334],{"class":38,"line":46},[36,112329,537],{"class":114},[36,112331,33884],{"class":53},[36,112333,33887],{"class":114},[36,112335,33890],{"class":53},[36,112337,112338],{"class":38,"line":82},[36,112339,546],{"emptyLinePlaceholder":545},[36,112341,112342],{"class":38,"line":88},[36,112343,546],{"emptyLinePlaceholder":545},[36,112345,112346,112348,112350],{"class":38,"line":195},[36,112347,103788],{"class":49},[36,112349,498],{"class":114},[36,112351,103793],{"class":57},[36,112353,112354],{"class":38,"line":1517},[36,112355,112356],{"class":57},"\u003Cmujoco model=\"cartpole\">\n",[36,112358,112359],{"class":38,"line":2421},[36,112360,103803],{"class":57},[36,112362,112363],{"class":38,"line":2446},[36,112364,546],{"emptyLinePlaceholder":545},[36,112366,112367],{"class":38,"line":2469},[36,112368,103812],{"class":57},[36,112370,112371],{"class":38,"line":2492},[36,112372,112373],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,112375,112376],{"class":38,"line":4150},[36,112377,546],{"emptyLinePlaceholder":545},[36,112379,112380],{"class":38,"line":4155},[36,112381,112382],{"class":57},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,112384,112385],{"class":38,"line":4161},[36,112386,112387],{"class":57},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,112389,112390],{"class":38,"line":4166},[36,112391,112392],{"class":57},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,112394,112395],{"class":38,"line":4180},[36,112396,546],{"emptyLinePlaceholder":545},[36,112398,112399],{"class":38,"line":4185},[36,112400,112401],{"class":57},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,112403,112404],{"class":38,"line":4191},[36,112405,112406],{"class":57},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,112408,112409],{"class":38,"line":4212},[36,112410,112411],{"class":57},"        \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",[36,112413,112414],{"class":38,"line":4217},[36,112415,108909],{"class":57},[36,112417,112418],{"class":38,"line":4231},[36,112419,103841],{"class":57},[36,112421,112422],{"class":38,"line":4236},[36,112423,103846],{"class":57},[36,112425,112426],{"class":38,"line":4264},[36,112427,546],{"emptyLinePlaceholder":545},[36,112429,112430],{"class":38,"line":4269},[36,112431,108926],{"class":57},[36,112433,112434],{"class":38,"line":4286},[36,112435,112436],{"class":57},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112438,112439],{"class":38,"line":4291},[36,112440,108936],{"class":57},[36,112442,112443],{"class":38,"line":4296},[36,112444,103851],{"class":57},[36,112446,112447],{"class":38,"line":4301},[36,112448,74],{"class":57},[36,112450,112451],{"class":38,"line":4315},[36,112452,546],{"emptyLinePlaceholder":545},[36,112454,112455],{"class":38,"line":4320},[36,112456,546],{"emptyLinePlaceholder":545},[36,112458,112459,112461,112464],{"class":38,"line":5109},[36,112460,34450],{"class":114},[36,112462,112463],{"class":4500}," get_observation",[36,112465,112466],{"class":53},"(data: mujoco.MjData) -> np.ndarray:\n",[36,112468,112469,112471],{"class":38,"line":5123},[36,112470,6621],{"class":114},[36,112472,112473],{"class":53}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,112475,112476],{"class":38,"line":5131},[36,112477,546],{"emptyLinePlaceholder":545},[36,112479,112480],{"class":38,"line":5136},[36,112481,546],{"emptyLinePlaceholder":545},[36,112483,112484,112486,112489,112492,112494],{"class":38,"line":5142},[36,112485,34450],{"class":114},[36,112487,112488],{"class":4500}," compute_reward",[36,112490,112491],{"class":53},"(obs: np.ndarray) -> ",[36,112493,244],{"class":49},[36,112495,6270],{"class":53},[36,112497,112498,112501,112503,112506,112508],{"class":38,"line":5148},[36,112499,112500],{"class":53},"    cart_x ",[36,112502,115],{"class":114},[36,112504,112505],{"class":53}," obs[",[36,112507,713],{"class":49},[36,112509,35748],{"class":53},[36,112511,112512,112515,112517,112519,112521],{"class":38,"line":5153},[36,112513,112514],{"class":53},"    pole_angle ",[36,112516,115],{"class":114},[36,112518,112505],{"class":53},[36,112520,707],{"class":49},[36,112522,35748],{"class":53},[36,112524,112525,112527,112529,112531,112533,112535,112537,112539,112541,112543,112545,112547,112549,112551],{"class":38,"line":10475},[36,112526,6621],{"class":114},[36,112528,985],{"class":49},[36,112530,54],{"class":53},[36,112532,104876],{"class":49},[36,112534,54765],{"class":114},[36,112536,112275],{"class":49},[36,112538,9045],{"class":114},[36,112540,112280],{"class":53},[36,112542,1050],{"class":114},[36,112544,112280],{"class":53},[36,112546,508],{"class":114},[36,112548,112289],{"class":53},[36,112550,1050],{"class":114},[36,112552,112294],{"class":53},[36,112554,112555],{"class":38,"line":10499},[36,112556,546],{"emptyLinePlaceholder":545},[36,112558,112559],{"class":38,"line":10504},[36,112560,546],{"emptyLinePlaceholder":545},[36,112562,112563,112565,112567,112569,112571],{"class":38,"line":10510},[36,112564,34450],{"class":114},[36,112566,4510],{"class":4500},[36,112568,103872],{"class":53},[36,112570,198],{"class":49},[36,112572,6270],{"class":53},[36,112574,112575,112577,112579,112581,112583],{"class":38,"line":10537},[36,112576,103881],{"class":53},[36,112578,115],{"class":114},[36,112580,103886],{"class":53},[36,112582,103788],{"class":49},[36,112584,61],{"class":53},[36,112586,112587,112589,112591],{"class":38,"line":10542},[36,112588,103895],{"class":53},[36,112590,115],{"class":114},[36,112592,103900],{"class":53},[36,112594,112595],{"class":38,"line":10548},[36,112596,546],{"emptyLinePlaceholder":545},[36,112598,112599,112601,112603,112605,112607],{"class":38,"line":10560},[36,112600,107540],{"class":53},[36,112602,707],{"class":49},[36,112604,6974],{"class":53},[36,112606,115],{"class":114},[36,112608,112609],{"class":49}," 0.1\n",[36,112611,112612],{"class":38,"line":10572},[36,112613,107553],{"class":53},[36,112615,112616],{"class":38,"line":10584},[36,112617,546],{"emptyLinePlaceholder":545},[36,112619,112620,112623,112625],{"class":38,"line":12241},[36,112621,112622],{"class":53},"    total_reward ",[36,112624,115],{"class":114},[36,112626,107232],{"class":49},[36,112628,112629],{"class":38,"line":12266},[36,112630,546],{"emptyLinePlaceholder":545},[36,112632,112633,112635,112637,112639,112641,112643,112645],{"class":38,"line":12289},[36,112634,5732],{"class":114},[36,112636,34119],{"class":53},[36,112638,28556],{"class":114},[36,112640,34946],{"class":49},[36,112642,54],{"class":53},[36,112644,8937],{"class":49},[36,112646,33290],{"class":53},[36,112648,112649,112652,112654],{"class":38,"line":12313},[36,112650,112651],{"class":53},"        obs ",[36,112653,115],{"class":114},[36,112655,112656],{"class":53}," get_observation(data)\n",[36,112658,112659,112662,112664,112666,112668],{"class":38,"line":12318},[36,112660,112661],{"class":53},"        pole_angle ",[36,112663,115],{"class":114},[36,112665,112505],{"class":53},[36,112667,707],{"class":49},[36,112669,35748],{"class":53},[36,112671,112672,112675,112677,112679,112681],{"class":38,"line":12323},[36,112673,112674],{"class":53},"        pole_angular_velocity ",[36,112676,115],{"class":114},[36,112678,112505],{"class":53},[36,112680,2767],{"class":49},[36,112682,35748],{"class":53},[36,112684,112685],{"class":38,"line":12328},[36,112686,546],{"emptyLinePlaceholder":545},[36,112688,112689,112692,112694,112697,112699,112701,112703,112705,112707],{"class":38,"line":12337},[36,112690,112691],{"class":53},"        action ",[36,112693,115],{"class":114},[36,112695,112696],{"class":49}," 2.0",[36,112698,9045],{"class":114},[36,112700,112289],{"class":53},[36,112702,121],{"class":114},[36,112704,64355],{"class":49},[36,112706,9045],{"class":114},[36,112708,112709],{"class":53}," pole_angular_velocity\n",[36,112711,112712,112714,112716,112718,112720,112722,112724,112726],{"class":38,"line":12342},[36,112713,112691],{"class":53},[36,112715,115],{"class":114},[36,112717,109917],{"class":53},[36,112719,508],{"class":114},[36,112721,104876],{"class":49},[36,112723,14958],{"class":53},[36,112725,104876],{"class":49},[36,112727,61],{"class":53},[36,112729,112730],{"class":38,"line":12348},[36,112731,546],{"emptyLinePlaceholder":545},[36,112733,112734,112736,112738,112740,112742],{"class":38,"line":12369},[36,112735,109088],{"class":53},[36,112737,713],{"class":49},[36,112739,6974],{"class":53},[36,112741,115],{"class":114},[36,112743,109940],{"class":53},[36,112745,112746],{"class":38,"line":12375},[36,112747,103990],{"class":53},[36,112749,112750],{"class":38,"line":12389},[36,112751,546],{"emptyLinePlaceholder":545},[36,112753,112754,112757,112759],{"class":38,"line":12395},[36,112755,112756],{"class":53},"        reward ",[36,112758,115],{"class":114},[36,112760,112761],{"class":53}," compute_reward(get_observation(data))\n",[36,112763,112764,112767,112769],{"class":38,"line":12422},[36,112765,112766],{"class":53},"        total_reward ",[36,112768,1224],{"class":114},[36,112770,112771],{"class":53}," reward\n",[36,112773,112774],{"class":38,"line":12431},[36,112775,546],{"emptyLinePlaceholder":545},[36,112777,112778,112780,112782,112784,112786,112788,112790],{"class":38,"line":12437},[36,112779,5029],{"class":114},[36,112781,34119],{"class":53},[36,112783,1095],{"class":114},[36,112785,8282],{"class":49},[36,112787,1351],{"class":114},[36,112789,6624],{"class":49},[36,112791,6270],{"class":53},[36,112793,112794,112796,112798,112801,112804,112807,112810,112812,112815,112818,112820,112822,112824,112826,112829,112831],{"class":38,"line":12445},[36,112795,37150],{"class":49},[36,112797,54],{"class":53},[36,112799,112800],{"class":57},"\"step:\"",[36,112802,112803],{"class":53},", step, ",[36,112805,112806],{"class":57},"\"obs:\"",[36,112808,112809],{"class":53},", np.round(obs, ",[36,112811,2767],{"class":49},[36,112813,112814],{"class":53},"), ",[36,112816,112817],{"class":57},"\"action:\"",[36,112819,14958],{"class":53},[36,112821,34521],{"class":49},[36,112823,54],{"class":53},[36,112825,244],{"class":49},[36,112827,112828],{"class":53},"(action), ",[36,112830,2767],{"class":49},[36,112832,625],{"class":53},[36,112834,112835],{"class":38,"line":12450},[36,112836,546],{"emptyLinePlaceholder":545},[36,112838,112839,112841,112843,112846,112848,112850,112853,112855],{"class":38,"line":19122},[36,112840,33803],{"class":49},[36,112842,54],{"class":53},[36,112844,112845],{"class":57},"\"total_reward:\"",[36,112847,14958],{"class":53},[36,112849,34521],{"class":49},[36,112851,112852],{"class":53},"(total_reward, ",[36,112854,2767],{"class":49},[36,112856,625],{"class":53},[36,112858,112859,112861,112863,112866,112869,112871],{"class":38,"line":19128},[36,112860,33803],{"class":49},[36,112862,54],{"class":53},[36,112864,112865],{"class":57},"\"final obs:\"",[36,112867,112868],{"class":53},", np.round(get_observation(data), ",[36,112870,2767],{"class":49},[36,112872,625],{"class":53},[36,112874,112875],{"class":38,"line":19151},[36,112876,546],{"emptyLinePlaceholder":545},[36,112878,112879],{"class":38,"line":19157},[36,112880,546],{"emptyLinePlaceholder":545},[36,112882,112883,112885,112887,112889,112891],{"class":38,"line":19180},[36,112884,4069],{"class":114},[36,112886,33724],{"class":49},[36,112888,1351],{"class":114},[36,112890,104035],{"class":57},[36,112892,6270],{"class":53},[36,112894,112895],{"class":38,"line":19194},[36,112896,104042],{"class":53},[19,112898,106042],{},[26,112900,112902],{"className":26338,"code":112901,"language":26340,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,112903,112904],{"__ignoreMap":31},[36,112905,112906,112908],{"class":38,"line":39},[36,112907,103757],{"class":4500},[36,112909,112910],{"class":57}," ch6_cartpole.py\n",[19,112912,112913],{},"运行：",[26,112915,112917],{"className":26338,"code":112916,"language":26340,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,112918,112919],{"__ignoreMap":31},[36,112920,112921,112923],{"class":38,"line":39},[36,112922,30],{"class":4500},[36,112924,112910],{"class":57},[997,112926,104045],{"id":104045},[19,112928,112929],{},"构造观测：",[26,112931,112933],{"className":28,"code":112932,"language":30,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,112934,112935,112943],{"__ignoreMap":31},[36,112936,112937,112939,112941],{"class":38,"line":39},[36,112938,34450],{"class":114},[36,112940,112463],{"class":4500},[36,112942,112466],{"class":53},[36,112944,112945,112947],{"class":38,"line":46},[36,112946,6621],{"class":114},[36,112948,112473],{"class":53},[19,112950,112951,112954,112955,112957,112958,112960],{},[33,112952,112953],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,112956,106502],{}," 2 维，",[33,112959,106832],{}," 2 维，所以 obs 是 4 维。",[19,112962,112963],{},"设置初始角度：",[26,112965,112967],{"className":28,"code":112966,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,112968,112969,112981],{"__ignoreMap":31},[36,112970,112971,112973,112975,112977,112979],{"class":38,"line":39},[36,112972,107170],{"class":53},[36,112974,707],{"class":49},[36,112976,6974],{"class":53},[36,112978,115],{"class":114},[36,112980,112609],{"class":49},[36,112982,112983],{"class":38,"line":46},[36,112984,107014],{"class":53},[19,112986,112987],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112989,112990],{},"简单反馈控制：",[26,112992,112994],{"className":28,"code":112993,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,112995,112996,113016],{"__ignoreMap":31},[36,112997,112998,113000,113002,113004,113006,113008,113010,113012,113014],{"class":38,"line":39},[36,112999,109912],{"class":53},[36,113001,115],{"class":114},[36,113003,112696],{"class":49},[36,113005,9045],{"class":114},[36,113007,112289],{"class":53},[36,113009,121],{"class":114},[36,113011,64355],{"class":49},[36,113013,9045],{"class":114},[36,113015,112709],{"class":53},[36,113017,113018,113020,113022,113024,113026,113028,113030,113032],{"class":38,"line":46},[36,113019,109912],{"class":53},[36,113021,115],{"class":114},[36,113023,109917],{"class":53},[36,113025,508],{"class":114},[36,113027,104876],{"class":49},[36,113029,14958],{"class":53},[36,113031,104876],{"class":49},[36,113033,61],{"class":53},[19,113035,113036],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,113038,113039],{},"限制动作：",[26,113041,113043],{"className":28,"code":113042,"language":30,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,113044,113045],{"__ignoreMap":31},[36,113046,113047,113050,113052,113054,113056,113058],{"class":38,"line":39},[36,113048,113049],{"class":53},"np.clip(action, ",[36,113051,508],{"class":114},[36,113053,104876],{"class":49},[36,113055,14958],{"class":53},[36,113057,104876],{"class":49},[36,113059,61],{"class":53},[19,113061,113062,113063,113066],{},"因为 XML 里 ",[33,113064,113065],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[997,113068,104181],{"id":104181},[26,113070,113071],{"className":28,"code":112932,"language":30,"meta":31,"style":31},[33,113072,113073,113081],{"__ignoreMap":31},[36,113074,113075,113077,113079],{"class":38,"line":39},[36,113076,34450],{"class":114},[36,113078,112463],{"class":4500},[36,113080,112466],{"class":53},[36,113082,113083,113085],{"class":38,"line":46},[36,113084,6621],{"class":114},[36,113086,112473],{"class":53},[19,113088,113089,113090,113093,113094,113097,113098,113101],{},"这段定义了一个函数，用来获取当前观测。",[33,113091,113092],{},"data.qpos.copy()"," 是位置数组副本，",[33,113095,113096],{},"data.qvel.copy()"," 是速度数组副本。",[33,113099,113100],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113103,113104],{},"在本章模型里：",[26,113106,113109],{"className":113107,"code":113108,"language":690,"meta":31},[688],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,113110,113108],{"__ignoreMap":31},[19,113112,113113],{},"所以返回的 obs 是：",[26,113115,113118],{"className":113116,"code":113117,"language":690,"meta":31},[688],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,113119,113117],{"__ignoreMap":31},[26,113121,113123],{"className":28,"code":113122,"language":30,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,113124,113125],{"__ignoreMap":31},[36,113126,113127,113129,113131,113133,113135],{"class":38,"line":39},[36,113128,34450],{"class":114},[36,113130,112488],{"class":4500},[36,113132,112491],{"class":53},[36,113134,244],{"class":49},[36,113136,6270],{"class":53},[19,113138,113139,113140,113143],{},"这行定义奖励函数。输入是观测 ",[33,113141,113142],{},"obs","，输出是一个浮点数奖励。",[26,113145,113147],{"className":28,"code":113146,"language":30,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,113148,113149,113162],{"__ignoreMap":31},[36,113150,113151,113154,113156,113158,113160],{"class":38,"line":39},[36,113152,113153],{"class":53},"cart_x ",[36,113155,115],{"class":114},[36,113157,112505],{"class":53},[36,113159,713],{"class":49},[36,113161,35748],{"class":53},[36,113163,113164,113167,113169,113171,113173],{"class":38,"line":46},[36,113165,113166],{"class":53},"pole_angle ",[36,113168,115],{"class":114},[36,113170,112505],{"class":53},[36,113172,707],{"class":49},[36,113174,35748],{"class":53},[19,113176,113177,113178,113181,113182,113185],{},"数组索引从 0 开始。",[33,113179,113180],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,113183,113184],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,113187,113188],{"className":28,"code":112258,"language":30,"meta":31,"style":31},[33,113189,113190],{"__ignoreMap":31},[36,113191,113192,113194,113196,113198,113200,113202,113204,113206,113208,113210,113212,113214,113216,113218],{"class":38,"line":39},[36,113193,19564],{"class":114},[36,113195,985],{"class":49},[36,113197,54],{"class":53},[36,113199,104876],{"class":49},[36,113201,54765],{"class":114},[36,113203,112275],{"class":49},[36,113205,9045],{"class":114},[36,113207,112280],{"class":53},[36,113209,1050],{"class":114},[36,113211,112280],{"class":53},[36,113213,508],{"class":114},[36,113215,112289],{"class":53},[36,113217,1050],{"class":114},[36,113219,112294],{"class":53},[19,113221,113222,113223,113226,113227,113230],{},"这行计算奖励。",[33,113224,113225],{},"cart_x * cart_x"," 是小车位置的平方，",[33,113228,113229],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,113232,113234],{"className":28,"code":113233,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,113235,113236],{"__ignoreMap":31},[36,113237,113238,113240,113242,113244,113246],{"class":38,"line":39},[36,113239,107170],{"class":53},[36,113241,707],{"class":49},[36,113243,6974],{"class":53},[36,113245,115],{"class":114},[36,113247,112609],{"class":49},[19,113249,113250,113251,113253,113254,113256],{},"手动设置杆子的初始角度。因为 ",[33,113252,107927],{}," 是小车位置，",[33,113255,107930],{}," 是杆子角度，所以这里改的是杆子。",[26,113258,113259],{"className":28,"code":107014,"language":30,"meta":31,"style":31},[33,113260,113261],{"__ignoreMap":31},[36,113262,113263],{"class":38,"line":39},[36,113264,107014],{"class":53},[19,113266,107973,113267,113269],{},[33,113268,106502],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,113271,113273],{"className":28,"code":113272,"language":30,"meta":31,"style":31},"total_reward = 0.0\n",[33,113274,113275],{"__ignoreMap":31},[36,113276,113277,113280,113282],{"class":38,"line":39},[36,113278,113279],{"class":53},"total_reward ",[36,113281,115],{"class":114},[36,113283,107232],{"class":49},[19,113285,113286],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,113288,113290],{"className":28,"code":113289,"language":30,"meta":31,"style":31},"for step in range(1000):\n",[33,113291,113292],{"__ignoreMap":31},[36,113293,113294,113296,113298,113300,113302,113304,113306],{"class":38,"line":39},[36,113295,5556],{"class":114},[36,113297,34119],{"class":53},[36,113299,28556],{"class":114},[36,113301,34946],{"class":49},[36,113303,54],{"class":53},[36,113305,8937],{"class":49},[36,113307,33290],{"class":53},[19,113309,113310,113311,113313],{},"循环 1000 步。",[33,113312,109605],{}," 是当前步数，从 0 到 999。",[26,113315,113317],{"className":28,"code":113316,"language":30,"meta":31,"style":31},"obs = get_observation(data)\n",[33,113318,113319],{"__ignoreMap":31},[36,113320,113321,113324,113326],{"class":38,"line":39},[36,113322,113323],{"class":53},"obs ",[36,113325,115],{"class":114},[36,113327,112656],{"class":53},[19,113329,113330,113331,1296],{},"读取当前状态，保存到 ",[33,113332,113142],{},[26,113334,113336],{"className":28,"code":113335,"language":30,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,113337,113338,113350],{"__ignoreMap":31},[36,113339,113340,113342,113344,113346,113348],{"class":38,"line":39},[36,113341,113166],{"class":53},[36,113343,115],{"class":114},[36,113345,112505],{"class":53},[36,113347,707],{"class":49},[36,113349,35748],{"class":53},[36,113351,113352,113355,113357,113359,113361],{"class":38,"line":46},[36,113353,113354],{"class":53},"pole_angular_velocity ",[36,113356,115],{"class":114},[36,113358,112505],{"class":53},[36,113360,2767],{"class":49},[36,113362,35748],{"class":53},[19,113364,113365,113366,113369,113370,1296],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,113367,113368],{},"obs[3]","？因为 obs 的顺序是 ",[33,113371,113372],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,113374,113376],{"className":28,"code":113375,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,113377,113378],{"__ignoreMap":31},[36,113379,113380,113382,113384,113386,113388,113390,113392,113394,113396],{"class":38,"line":39},[36,113381,109912],{"class":53},[36,113383,115],{"class":114},[36,113385,112696],{"class":49},[36,113387,9045],{"class":114},[36,113389,112289],{"class":53},[36,113391,121],{"class":114},[36,113393,64355],{"class":49},[36,113395,9045],{"class":114},[36,113397,112709],{"class":53},[19,113399,113400,113401,1292,113403,113405],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,113402,107731],{},[33,113404,37829],{}," 是人为设置的系数，不是固定公式。",[26,113407,113409],{"className":28,"code":113408,"language":30,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,113410,113411],{"__ignoreMap":31},[36,113412,113413,113415,113417,113419,113421,113423,113425,113427],{"class":38,"line":39},[36,113414,109912],{"class":53},[36,113416,115],{"class":114},[36,113418,109917],{"class":53},[36,113420,508],{"class":114},[36,113422,104876],{"class":49},[36,113424,14958],{"class":53},[36,113426,104876],{"class":49},[36,113428,61],{"class":53},[19,113430,113431],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,113433,113434],{"className":28,"code":112243,"language":30,"meta":31,"style":31},[33,113435,113436],{"__ignoreMap":31},[36,113437,113438,113440,113442,113444,113446],{"class":38,"line":39},[36,113439,108342],{"class":53},[36,113441,713],{"class":49},[36,113443,6974],{"class":53},[36,113445,115],{"class":114},[36,113447,109940],{"class":53},[19,113449,113450],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,113452,113453],{"className":28,"code":106976,"language":30,"meta":31,"style":31},[33,113454,113455],{"__ignoreMap":31},[36,113456,113457],{"class":38,"line":39},[36,113458,106976],{"class":53},[19,113460,113461,113462,113464],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,113463,108597],{}," 计算小车和杆子的下一刻状态。",[26,113466,113468],{"className":28,"code":113467,"language":30,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,113469,113470,113479],{"__ignoreMap":31},[36,113471,113472,113475,113477],{"class":38,"line":39},[36,113473,113474],{"class":53},"reward ",[36,113476,115],{"class":114},[36,113478,112761],{"class":53},[36,113480,113481,113483,113485],{"class":38,"line":46},[36,113482,113279],{"class":53},[36,113484,1224],{"class":114},[36,113486,112771],{"class":53},[19,113488,113489,113490,113492,113493,113496,113497,1296],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,113491,1224],{}," 是简写，",[33,113494,113495],{},"total_reward += reward"," 等价于 ",[33,113498,113499],{},"total_reward = total_reward + reward",[26,113501,113503],{"className":28,"code":113502,"language":30,"meta":31,"style":31},"if step % 100 == 0:\n",[33,113504,113505],{"__ignoreMap":31},[36,113506,113507,113509,113511,113513,113515,113517,113519],{"class":38,"line":39},[36,113508,4069],{"class":114},[36,113510,34119],{"class":53},[36,113512,1095],{"class":114},[36,113514,8282],{"class":49},[36,113516,1351],{"class":114},[36,113518,6624],{"class":49},[36,113520,6270],{"class":53},[19,113522,113523,113525,113526,113529],{},[33,113524,1095],{}," 是取余数。",[33,113527,113528],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,113531,113533],{"className":28,"code":113532,"language":30,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,113534,113535],{"__ignoreMap":31},[36,113536,113537,113539,113541,113543,113545,113547,113549,113551,113553,113555,113557,113559,113561,113563,113565,113567],{"class":38,"line":39},[36,113538,50],{"class":49},[36,113540,54],{"class":53},[36,113542,112800],{"class":57},[36,113544,112803],{"class":53},[36,113546,112806],{"class":57},[36,113548,112809],{"class":53},[36,113550,2767],{"class":49},[36,113552,112814],{"class":53},[36,113554,112817],{"class":57},[36,113556,14958],{"class":53},[36,113558,34521],{"class":49},[36,113560,54],{"class":53},[36,113562,244],{"class":49},[36,113564,112828],{"class":53},[36,113566,2767],{"class":49},[36,113568,625],{"class":53},[19,113570,113571,113572,113575,113576,113579],{},"打印当前步数、观测和动作。",[33,113573,113574],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,113577,113578],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113581,104789],{"id":104788},[19,113583,113584],{},"观测向量:",[26,113586,113589],{"className":113587,"code":113588,"language":690,"meta":31},[688],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,113590,113588],{"__ignoreMap":31},[19,113592,113593],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113595,113596],{},"每隔 100 步会打印一次：",[26,113598,113601],{"className":113599,"code":113600,"language":690,"meta":31},[688],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,113602,113600],{"__ignoreMap":31},[19,113604,113605],{},"重点观察：",[433,113607,113608,113614,113619],{},[436,113609,113610,113613],{},[33,113611,113612],{},"pole_angle"," 是否越来越大。",[436,113615,113616,113618],{},[33,113617,112196],{}," 是否跑得太远。",[436,113620,113621,113622,85020,113624,1296],{},"action 是否经常被 clip 到 ",[33,113623,106387],{},[33,113625,707],{},[19,113627,113628],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113630,104821],{"id":104820},[433,113632,113633,113639,113642,113648,113658,113664,113667],{},[436,113634,113635,113636,1296],{},"把初始角度改为 ",[33,113637,113638],{},"data.qpos[1] = 0.3",[436,113640,113641],{},"重新运行，观察控制是否变差。",[436,113643,113644,113645,113647],{},"把 actuator ",[33,113646,109538],{}," 改小。",[436,113649,113650,113651,113654,113655,1296],{},"打印 ",[33,113652,113653],{},"model.nq, model.nv, model.nu","，应为 ",[33,113656,113657],{},"2 2 1",[436,113659,113660,113661,113663],{},"把 reward 里的 ",[33,113662,113229],{}," 系数改大，观察总奖励变化。",[436,113665,113666],{},"把控制器改成反号，观察杆子是否更容易倒。",[436,113668,113669],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113671,104926],{"id":104925},[997,113673,113674],{"id":113674},"杆子方向和预期不一致",[19,113676,104869,113677,113679,113680,113682],{},[33,113678,108710],{}," 和 capsule 的 ",[33,113681,105648],{},"，必要时用 viewer 可视化确认。",[997,113684,113685],{"id":113685},"控制器越控越倒",[19,113687,113688],{},"说明反馈符号可能反了，尝试:",[26,113690,113692],{"className":28,"code":113691,"language":30,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,113693,113694],{"__ignoreMap":31},[36,113695,113696,113698,113700,113702,113704,113706,113708,113710,113712,113714],{"class":38,"line":39},[36,113697,109912],{"class":53},[36,113699,115],{"class":114},[36,113701,54765],{"class":114},[36,113703,107731],{"class":49},[36,113705,9045],{"class":114},[36,113707,112289],{"class":53},[36,113709,508],{"class":114},[36,113711,64355],{"class":49},[36,113713,9045],{"class":114},[36,113715,112709],{"class":53},[997,113717,113718],{"id":113718},"小车飞走",[19,113720,113721,113722,113724,113725,113728],{},"降低 ",[33,113723,109538],{}," 或缩小 ",[33,113726,113727],{},"action"," 的 clip 范围。",[997,113730,113732,113734],{"id":113731},"obs3-为什么是杆子角速度",[33,113733,113368],{}," 为什么是杆子角速度",[19,113736,113737],{},"因为这个模型里：",[26,113739,113742],{"className":113740,"code":113741,"language":690,"meta":31},[688],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,113743,113741],{"__ignoreMap":31},[19,113745,112217],{},[26,113747,113750],{"className":113748,"code":113749,"language":690,"meta":31},[688],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,113751,113749],{"__ignoreMap":31},[997,113753,113755],{"id":113754},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113757,113758],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113760,105080],{"id":105079},[19,113762,113763],{},"一个控制任务通常包含：",[433,113765,113766,113769,113777,113782,113785],{},[436,113767,113768],{},"模型：Cartpole 的 body、joint、actuator。",[436,113770,113771,113772,273,113774,113776],{},"观测：从 ",[33,113773,106502],{},[33,113775,106832],{}," 里取状态。",[436,113778,113779,113780,1296],{},"动作：写入 ",[33,113781,103550],{},[436,113783,113784],{},"奖励：根据任务目标打分。",[436,113786,113787],{},"循环：obs -> action -> step -> reward。",[19,113789,113790],{},"这就是后面 Gymnasium 环境的基本骨架。",[2602,113792,106758],{},{"title":31,"searchDepth":46,"depth":46,"links":113794},[113795,113796,113797,113802,113806,113807,113808,113816],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":113798},[113799,113800,113801],{"id":112170,"depth":82,"text":112171},{"id":112235,"depth":82,"text":112236},{"id":112251,"depth":82,"text":112252},{"id":103726,"depth":46,"text":103727,"children":113803},[113804,113805],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":113809},[113810,113811,113812,113813,113815],{"id":113674,"depth":82,"text":113674},{"id":113685,"depth":82,"text":113685},{"id":113718,"depth":82,"text":113718},{"id":113731,"depth":82,"text":113814},"obs[3] 为什么是杆子角速度",{"id":113754,"depth":82,"text":113755},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111906,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113823,"title":113824,"body":113825,"description":31,"extension":2631,"meta":115839,"navigation":545,"path":115840,"seo":115841,"stem":115842,"__hash__":115843},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113826,"toc":115815},[113827,113830,113832,113835,113837,113854,113857,113860,113866,113869,113871,113873,113897,113899,113913,113915,113956,113958,113976,113978,113981,113987,113990,114018,114022,114028,114053,114056,114087,114094,114097,114100,114106,114109,114115,114118,114124,114128,114131,114156,114159,114161,114921,114923,114935,114937,114948,114950,114953,114970,114973,114975,114986,114989,114991,115037,115040,115053,115056,115138,115141,115143,115159,115169,115182,115185,115224,115234,115245,115255,115268,115271,115300,115303,115313,115316,115322,115339,115350,115352,115358,115375,115386,115407,115410,115422,115425,115446,115449,115457,115465,115482,115485,115554,115561,115569,115572,115585,115592,115594,115597,115603,115606,115609,115615,115621,115623,115663,115665,115671,115680,115683,115685,115705,115708,115711,115717,115721,115723,115750,115753,115756,115783,115789,115792,115795,115797,115800,115803,115809,115812],[10,113828,113824],{"id":113829},"_7控制任务reacher-机械臂到达目标",[14,113831,103123],{"id":103122},[19,113833,113834],{},"本章搭建一个二维两关节 reacher 任务。",[19,113836,106803],{},[433,113838,113839,113842,113845,113848,113851],{},[436,113840,113841],{},"两个 hinge joint",[436,113843,113844],{},"两个 motor actuator",[436,113846,113847],{},"site 作为末端点和目标点",[436,113849,113850],{},"根据末端和目标距离设计 reward",[436,113852,113853],{},"构造机械臂任务的基本形式",[19,113855,113856],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113858,113859],{},"Reacher 任务可以理解为：",[26,113861,113864],{"className":113862,"code":113863,"language":690,"meta":31},[688],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,113865,113863],{"__ignoreMap":31},[19,113867,113868],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113870,103245],{"id":103244},[19,113872,103248],{},[26,113874,113875],{"className":26338,"code":106859,"language":26340,"meta":31,"style":31},[33,113876,113877],{"__ignoreMap":31},[36,113878,113879,113881,113883,113885,113887,113889,113891,113893,113895],{"class":38,"line":39},[36,113880,27093],{"class":4500},[36,113882,28827],{"class":57},[36,113884,26350],{"class":57},[36,113886,28912],{"class":49},[36,113888,106874],{"class":57},[36,113890,103273],{"class":57},[36,113892,104974],{"class":57},[36,113894,103289],{"class":57},[36,113896,106883],{"class":57},[19,113898,105292],{},[26,113900,113901],{"className":26338,"code":103394,"language":26340,"meta":31,"style":31},[33,113902,113903],{"__ignoreMap":31},[36,113904,113905,113907,113909,113911],{"class":38,"line":39},[36,113906,26347],{"class":4500},[36,113908,26350],{"class":57},[36,113910,103405],{"class":57},[36,113912,103408],{"class":57},[19,113914,105309],{},[26,113916,113918],{"className":26338,"code":113917,"language":26340,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,113919,113920,113937,113946],{"__ignoreMap":31},[36,113921,113922,113924,113926,113928,113931,113933,113935],{"class":38,"line":39},[36,113923,32840],{"class":4500},[36,113925,31686],{"class":57},[36,113927,27631],{"class":49},[36,113929,113930],{"class":57}," mujoco-reacher",[36,113932,103450],{"class":57},[36,113934,103453],{"class":49},[36,113936,103456],{"class":49},[36,113938,113939,113941,113943],{"class":38,"line":46},[36,113940,32840],{"class":4500},[36,113942,103463],{"class":57},[36,113944,113945],{"class":57}," mujoco-reacher\n",[36,113947,113948,113950,113952,113954],{"class":38,"line":82},[36,113949,26347],{"class":4500},[36,113951,26350],{"class":57},[36,113953,103405],{"class":57},[36,113955,103408],{"class":57},[19,113957,103479],{},[433,113959,113960,113963,113966],{},[436,113961,113962],{},"本章使用低维状态，不使用图像输入。",[436,113964,113965],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[436,113967,113968,113969,273,113971,273,113973,113975],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,113970,106502],{},[33,113972,106832],{},[33,113974,106152],{}," 的方法一致。",[14,113977,103519],{"id":103518},[19,113979,113980],{},"Reacher 任务核心:",[26,113982,113985],{"className":113983,"code":113984,"language":690,"meta":31},[688],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,113986,113984],{"__ignoreMap":31},[19,113988,113989],{},"读取 site 世界坐标:",[26,113991,113993],{"className":28,"code":113992,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,113994,113995,114008],{"__ignoreMap":31},[36,113996,113997,113999,114001,114003,114006],{"class":38,"line":39},[36,113998,106106],{"class":53},[36,114000,115],{"class":114},[36,114002,105877],{"class":53},[36,114004,114005],{"class":57},"\"tip\"",[36,114007,61],{"class":53},[36,114009,114010,114013,114015],{"class":38,"line":46},[36,114011,114012],{"class":53},"tip_pos ",[36,114014,115],{"class":114},[36,114016,114017],{"class":53}," data.site_xpos[site_id]\n",[997,114019,114021],{"id":114020},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,114023,114024,114025,114027],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,114026,106502],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,114029,114031],{"className":28,"code":114030,"language":30,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,114032,114033,114043],{"__ignoreMap":31},[36,114034,114035,114038,114040],{"class":38,"line":39},[36,114036,114037],{"class":53},"tip ",[36,114039,115],{"class":114},[36,114041,114042],{"class":53}," data.site_xpos[tip_site_id]\n",[36,114044,114045,114048,114050],{"class":38,"line":46},[36,114046,114047],{"class":53},"target ",[36,114049,115],{"class":114},[36,114051,114052],{"class":53}," data.site_xpos[target_site_id]\n",[19,114054,114055],{},"这样 reward 就很容易写：",[26,114057,114059],{"className":28,"code":114058,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,114060,114061,114076],{"__ignoreMap":31},[36,114062,114063,114066,114068,114071,114073],{"class":38,"line":39},[36,114064,114065],{"class":53},"dist ",[36,114067,115],{"class":114},[36,114069,114070],{"class":53}," np.linalg.norm(tip ",[36,114072,508],{"class":114},[36,114074,114075],{"class":53}," target)\n",[36,114077,114078,114080,114082,114084],{"class":38,"line":46},[36,114079,113474],{"class":53},[36,114081,115],{"class":114},[36,114083,54765],{"class":114},[36,114085,114086],{"class":53},"dist\n",[19,114088,114089,114090,114093],{},"距离越小，",[33,114091,114092],{},"-dist"," 越接近 0，奖励越高。",[997,114095,114096],{"id":114096},"两关节机械臂的状态",[19,114098,114099],{},"这个模型有两个 hinge joint：",[26,114101,114104],{"className":114102,"code":114103,"language":690,"meta":31},[688],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,114105,114103],{"__ignoreMap":31},[19,114107,114108],{},"再加上末端和目标位置：",[26,114110,114113],{"className":114111,"code":114112,"language":690,"meta":31},[688],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,114114,114112],{"__ignoreMap":31},[19,114116,114117],{},"总维度：",[26,114119,114122],{"className":114120,"code":114121,"language":690,"meta":31},[688],"2 + 2 + 3 + 3 = 10\n",[33,114123,114121],{"__ignoreMap":31},[997,114125,114127],{"id":114126},"为什么-gravity-是-0","为什么 gravity 是 0",[19,114129,114130],{},"本章把重力设为：",[26,114132,114134],{"className":55561,"code":114133,"language":55563,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,114135,114136],{"__ignoreMap":31},[36,114137,114138,114140,114142,114144,114146,114148,114150,114152,114154],{"class":38,"line":39},[36,114139,1507],{"class":53},[36,114141,71653],{"class":53794},[36,114143,103668],{"class":4500},[36,114145,115],{"class":53},[36,114147,103673],{"class":57},[36,114149,103676],{"class":4500},[36,114151,115],{"class":53},[36,114153,106243],{"class":57},[36,114155,103618],{"class":53},[19,114157,114158],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114160,103727],{"id":103726},[26,114162,114164],{"className":28,"code":114163,"language":30,"meta":31,"style":31},"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",[33,114165,114166,114172,114182,114186,114190,114198,114203,114208,114212,114216,114221,114226,114230,114235,114240,114245,114249,114254,114259,114264,114269,114273,114277,114281,114285,114289,114294,114299,114303,114307,114311,114315,114319,114334,114343,114355,114378,114385,114389,114393,114403,114417,114431,114438,114442,114446,114460,114472,114484,114497,114512,114529,114533,114537,114549,114561,114569,114577,114581,114597,114602,114615,114628,114643,114647,114682,114714,114718,114722,114731,114735,114751,114761,114772,114788,114804,114820,114836,114840,114858,114878,114897,114901,114905,114917],{"__ignoreMap":31},[36,114167,114168,114170],{"class":38,"line":39},[36,114169,537],{"class":114},[36,114171,103775],{"class":53},[36,114173,114174,114176,114178,114180],{"class":38,"line":46},[36,114175,537],{"class":114},[36,114177,33884],{"class":53},[36,114179,33887],{"class":114},[36,114181,33890],{"class":53},[36,114183,114184],{"class":38,"line":82},[36,114185,546],{"emptyLinePlaceholder":545},[36,114187,114188],{"class":38,"line":88},[36,114189,546],{"emptyLinePlaceholder":545},[36,114191,114192,114194,114196],{"class":38,"line":195},[36,114193,103788],{"class":49},[36,114195,498],{"class":114},[36,114197,103793],{"class":57},[36,114199,114200],{"class":38,"line":1517},[36,114201,114202],{"class":57},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,114204,114205],{"class":38,"line":2421},[36,114206,114207],{"class":57},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,114209,114210],{"class":38,"line":2446},[36,114211,546],{"emptyLinePlaceholder":545},[36,114213,114214],{"class":38,"line":2469},[36,114215,103812],{"class":57},[36,114217,114218],{"class":38,"line":2492},[36,114219,114220],{"class":57},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,114222,114223],{"class":38,"line":4150},[36,114224,114225],{"class":57},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,114227,114228],{"class":38,"line":4155},[36,114229,546],{"emptyLinePlaceholder":545},[36,114231,114232],{"class":38,"line":4161},[36,114233,114234],{"class":57},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,114236,114237],{"class":38,"line":4166},[36,114238,114239],{"class":57},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,114241,114242],{"class":38,"line":4180},[36,114243,114244],{"class":57},"      \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",[36,114246,114247],{"class":38,"line":4185},[36,114248,546],{"emptyLinePlaceholder":545},[36,114250,114251],{"class":38,"line":4191},[36,114252,114253],{"class":57},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,114255,114256],{"class":38,"line":4212},[36,114257,114258],{"class":57},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,114260,114261],{"class":38,"line":4217},[36,114262,114263],{"class":57},"        \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",[36,114265,114266],{"class":38,"line":4231},[36,114267,114268],{"class":57},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,114270,114271],{"class":38,"line":4236},[36,114272,108909],{"class":57},[36,114274,114275],{"class":38,"line":4264},[36,114276,103841],{"class":57},[36,114278,114279],{"class":38,"line":4269},[36,114280,103846],{"class":57},[36,114282,114283],{"class":38,"line":4286},[36,114284,546],{"emptyLinePlaceholder":545},[36,114286,114287],{"class":38,"line":4291},[36,114288,108926],{"class":57},[36,114290,114291],{"class":38,"line":4296},[36,114292,114293],{"class":57},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,114295,114296],{"class":38,"line":4301},[36,114297,114298],{"class":57},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,114300,114301],{"class":38,"line":4315},[36,114302,108936],{"class":57},[36,114304,114305],{"class":38,"line":4320},[36,114306,103851],{"class":57},[36,114308,114309],{"class":38,"line":5109},[36,114310,74],{"class":57},[36,114312,114313],{"class":38,"line":5123},[36,114314,546],{"emptyLinePlaceholder":545},[36,114316,114317],{"class":38,"line":5131},[36,114318,546],{"emptyLinePlaceholder":545},[36,114320,114321,114323,114326,114329,114331],{"class":38,"line":5136},[36,114322,34450],{"class":114},[36,114324,114325],{"class":4500}," site_position",[36,114327,114328],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,114330,256],{"class":49},[36,114332,114333],{"class":53},") -> np.ndarray:\n",[36,114335,114336,114338,114340],{"class":38,"line":5142},[36,114337,105872],{"class":53},[36,114339,115],{"class":114},[36,114341,114342],{"class":53}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,114344,114345,114347,114349,114351,114353],{"class":38,"line":5148},[36,114346,5632],{"class":114},[36,114348,105921],{"class":53},[36,114350,1507],{"class":114},[36,114352,6624],{"class":49},[36,114354,6270],{"class":53},[36,114356,114357,114359,114361,114363,114365,114368,114370,114372,114374,114376],{"class":38,"line":5153},[36,114358,105904],{"class":114},[36,114360,105907],{"class":49},[36,114362,54],{"class":53},[36,114364,2060],{"class":114},[36,114366,114367],{"class":57},"\"site not found: ",[36,114369,2065],{"class":49},[36,114371,1998],{"class":53},[36,114373,2070],{"class":49},[36,114375,1822],{"class":57},[36,114377,61],{"class":53},[36,114379,114380,114382],{"class":38,"line":10475},[36,114381,6621],{"class":114},[36,114383,114384],{"class":53}," data.site_xpos[site_id].copy()\n",[36,114386,114387],{"class":38,"line":10499},[36,114388,546],{"emptyLinePlaceholder":545},[36,114390,114391],{"class":38,"line":10504},[36,114392,546],{"emptyLinePlaceholder":545},[36,114394,114395,114397,114400],{"class":38,"line":10510},[36,114396,34450],{"class":114},[36,114398,114399],{"class":4500}," get_obs",[36,114401,114402],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,114404,114405,114408,114410,114413,114415],{"class":38,"line":10537},[36,114406,114407],{"class":53},"    tip ",[36,114409,115],{"class":114},[36,114411,114412],{"class":53}," site_position(model, data, ",[36,114414,114005],{"class":57},[36,114416,61],{"class":53},[36,114418,114419,114422,114424,114426,114429],{"class":38,"line":10542},[36,114420,114421],{"class":53},"    target ",[36,114423,115],{"class":114},[36,114425,114412],{"class":53},[36,114427,114428],{"class":57},"\"target\"",[36,114430,61],{"class":53},[36,114432,114433,114435],{"class":38,"line":10548},[36,114434,6621],{"class":114},[36,114436,114437],{"class":53}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,114439,114440],{"class":38,"line":10560},[36,114441,546],{"emptyLinePlaceholder":545},[36,114443,114444],{"class":38,"line":10572},[36,114445,546],{"emptyLinePlaceholder":545},[36,114447,114448,114450,114453,114456,114458],{"class":38,"line":10584},[36,114449,34450],{"class":114},[36,114451,114452],{"class":4500}," reward",[36,114454,114455],{"class":53},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,114457,244],{"class":49},[36,114459,6270],{"class":53},[36,114461,114462,114464,114466,114468,114470],{"class":38,"line":12241},[36,114463,114407],{"class":53},[36,114465,115],{"class":114},[36,114467,114412],{"class":53},[36,114469,114005],{"class":57},[36,114471,61],{"class":53},[36,114473,114474,114476,114478,114480,114482],{"class":38,"line":12266},[36,114475,114421],{"class":53},[36,114477,115],{"class":114},[36,114479,114412],{"class":53},[36,114481,114428],{"class":57},[36,114483,61],{"class":53},[36,114485,114486,114489,114491,114493,114495],{"class":38,"line":12289},[36,114487,114488],{"class":53},"    dist ",[36,114490,115],{"class":114},[36,114492,114070],{"class":53},[36,114494,508],{"class":114},[36,114496,114075],{"class":53},[36,114498,114499,114502,114504,114507,114509],{"class":38,"line":12313},[36,114500,114501],{"class":53},"    control_cost ",[36,114503,115],{"class":114},[36,114505,114506],{"class":49}," 0.01",[36,114508,9045],{"class":114},[36,114510,114511],{"class":53}," np.sum(np.square(data.ctrl))\n",[36,114513,114514,114516,114518,114520,114522,114524,114526],{"class":38,"line":12318},[36,114515,6621],{"class":114},[36,114517,985],{"class":49},[36,114519,54],{"class":53},[36,114521,508],{"class":114},[36,114523,114065],{"class":53},[36,114525,508],{"class":114},[36,114527,114528],{"class":53}," control_cost)\n",[36,114530,114531],{"class":38,"line":12323},[36,114532,546],{"emptyLinePlaceholder":545},[36,114534,114535],{"class":38,"line":12328},[36,114536,546],{"emptyLinePlaceholder":545},[36,114538,114539,114541,114543,114545,114547],{"class":38,"line":12337},[36,114540,34450],{"class":114},[36,114542,4510],{"class":4500},[36,114544,103872],{"class":53},[36,114546,198],{"class":49},[36,114548,6270],{"class":53},[36,114550,114551,114553,114555,114557,114559],{"class":38,"line":12342},[36,114552,103881],{"class":53},[36,114554,115],{"class":114},[36,114556,103886],{"class":53},[36,114558,103788],{"class":49},[36,114560,61],{"class":53},[36,114562,114563,114565,114567],{"class":38,"line":12348},[36,114564,103895],{"class":53},[36,114566,115],{"class":114},[36,114568,103900],{"class":53},[36,114570,114571,114573,114575],{"class":38,"line":12369},[36,114572,112622],{"class":53},[36,114574,115],{"class":114},[36,114576,107232],{"class":49},[36,114578,114579],{"class":38,"line":12375},[36,114580,546],{"emptyLinePlaceholder":545},[36,114582,114583,114585,114587,114589,114591,114593,114595],{"class":38,"line":12389},[36,114584,5732],{"class":114},[36,114586,34119],{"class":53},[36,114588,28556],{"class":114},[36,114590,34946],{"class":49},[36,114592,54],{"class":53},[36,114594,67562],{"class":49},[36,114596,33290],{"class":53},[36,114598,114599],{"class":38,"line":12395},[36,114600,114601],{"class":53},"        mujoco.mj_forward(model, data)\n",[36,114603,114604,114607,114609,114611,114613],{"class":38,"line":12422},[36,114605,114606],{"class":53},"        tip ",[36,114608,115],{"class":114},[36,114610,114412],{"class":53},[36,114612,114005],{"class":57},[36,114614,61],{"class":53},[36,114616,114617,114620,114622,114624,114626],{"class":38,"line":12431},[36,114618,114619],{"class":53},"        target ",[36,114621,115],{"class":114},[36,114623,114412],{"class":53},[36,114625,114428],{"class":57},[36,114627,61],{"class":53},[36,114629,114630,114633,114635,114638,114640],{"class":38,"line":12437},[36,114631,114632],{"class":53},"        error ",[36,114634,115],{"class":114},[36,114636,114637],{"class":53}," target ",[36,114639,508],{"class":114},[36,114641,114642],{"class":53}," tip\n",[36,114644,114645],{"class":38,"line":12445},[36,114646,546],{"emptyLinePlaceholder":545},[36,114648,114649,114651,114653,114655,114657,114660,114662,114664,114667,114669,114672,114674,114676,114678,114680],{"class":38,"line":12450},[36,114650,109088],{"class":53},[36,114652,713],{"class":49},[36,114654,6974],{"class":53},[36,114656,115],{"class":114},[36,114658,114659],{"class":53}," np.clip(",[36,114661,107731],{"class":49},[36,114663,9045],{"class":114},[36,114665,114666],{"class":53}," error[",[36,114668,1188],{"class":49},[36,114670,114671],{"class":53},"], ",[36,114673,508],{"class":114},[36,114675,104876],{"class":49},[36,114677,14958],{"class":53},[36,114679,104876],{"class":49},[36,114681,61],{"class":53},[36,114683,114684,114686,114688,114690,114692,114694,114696,114698,114700,114702,114704,114706,114708,114710,114712],{"class":38,"line":19122},[36,114685,109088],{"class":53},[36,114687,707],{"class":49},[36,114689,6974],{"class":53},[36,114691,115],{"class":114},[36,114693,114659],{"class":53},[36,114695,107731],{"class":49},[36,114697,9045],{"class":114},[36,114699,114666],{"class":53},[36,114701,713],{"class":49},[36,114703,114671],{"class":53},[36,114705,508],{"class":114},[36,114707,104876],{"class":49},[36,114709,14958],{"class":53},[36,114711,104876],{"class":49},[36,114713,61],{"class":53},[36,114715,114716],{"class":38,"line":19128},[36,114717,546],{"emptyLinePlaceholder":545},[36,114719,114720],{"class":38,"line":19151},[36,114721,103990],{"class":53},[36,114723,114724,114726,114728],{"class":38,"line":19157},[36,114725,112766],{"class":53},[36,114727,1224],{"class":114},[36,114729,114730],{"class":53}," reward(model, data)\n",[36,114732,114733],{"class":38,"line":19180},[36,114734,546],{"emptyLinePlaceholder":545},[36,114736,114737,114739,114741,114743,114745,114747,114749],{"class":38,"line":19194},[36,114738,5029],{"class":114},[36,114740,34119],{"class":53},[36,114742,1095],{"class":114},[36,114744,8282],{"class":49},[36,114746,1351],{"class":114},[36,114748,6624],{"class":49},[36,114750,6270],{"class":53},[36,114752,114753,114756,114758],{"class":38,"line":19214},[36,114754,114755],{"class":53},"            obs ",[36,114757,115],{"class":114},[36,114759,114760],{"class":53}," get_obs(model, data)\n",[36,114762,114763,114765,114767,114769],{"class":38,"line":19220},[36,114764,37150],{"class":49},[36,114766,54],{"class":53},[36,114768,112800],{"class":57},[36,114770,114771],{"class":53},", step)\n",[36,114773,114774,114776,114778,114781,114784,114786],{"class":38,"line":19231},[36,114775,37150],{"class":49},[36,114777,54],{"class":53},[36,114779,114780],{"class":57},"\"  tip:\"",[36,114782,114783],{"class":53},", np.round(tip, ",[36,114785,2767],{"class":49},[36,114787,625],{"class":53},[36,114789,114790,114792,114794,114797,114800,114802],{"class":38,"line":19254},[36,114791,37150],{"class":49},[36,114793,54],{"class":53},[36,114795,114796],{"class":57},"\"  target:\"",[36,114798,114799],{"class":53},", np.round(target, ",[36,114801,2767],{"class":49},[36,114803,625],{"class":53},[36,114805,114806,114808,114810,114813,114816,114818],{"class":38,"line":19276},[36,114807,37150],{"class":49},[36,114809,54],{"class":53},[36,114811,114812],{"class":57},"\"  ctrl:\"",[36,114814,114815],{"class":53},", np.round(data.ctrl.copy(), ",[36,114817,2767],{"class":49},[36,114819,625],{"class":53},[36,114821,114822,114824,114826,114829,114832,114834],{"class":38,"line":19281},[36,114823,37150],{"class":49},[36,114825,54],{"class":53},[36,114827,114828],{"class":57},"\"  obs_dim:\"",[36,114830,114831],{"class":53},", obs.shape[",[36,114833,713],{"class":49},[36,114835,7188],{"class":53},[36,114837,114838],{"class":38,"line":19287},[36,114839,546],{"emptyLinePlaceholder":545},[36,114841,114842,114844,114846,114848,114850,114852,114854,114856],{"class":38,"line":19301},[36,114843,33803],{"class":49},[36,114845,54],{"class":53},[36,114847,112845],{"class":57},[36,114849,14958],{"class":53},[36,114851,34521],{"class":49},[36,114853,112852],{"class":53},[36,114855,2767],{"class":49},[36,114857,625],{"class":53},[36,114859,114860,114862,114864,114867,114870,114872,114874,114876],{"class":38,"line":19314},[36,114861,33803],{"class":49},[36,114863,54],{"class":53},[36,114865,114866],{"class":57},"\"final tip:\"",[36,114868,114869],{"class":53},", np.round(site_position(model, data, ",[36,114871,114005],{"class":57},[36,114873,112814],{"class":53},[36,114875,2767],{"class":49},[36,114877,625],{"class":53},[36,114879,114880,114882,114884,114887,114889,114891,114893,114895],{"class":38,"line":19319},[36,114881,33803],{"class":49},[36,114883,54],{"class":53},[36,114885,114886],{"class":57},"\"target:\"",[36,114888,114869],{"class":53},[36,114890,114428],{"class":57},[36,114892,112814],{"class":53},[36,114894,2767],{"class":49},[36,114896,625],{"class":53},[36,114898,114899],{"class":38,"line":19333},[36,114900,546],{"emptyLinePlaceholder":545},[36,114902,114903],{"class":38,"line":19338},[36,114904,546],{"emptyLinePlaceholder":545},[36,114906,114907,114909,114911,114913,114915],{"class":38,"line":19344},[36,114908,4069],{"class":114},[36,114910,33724],{"class":49},[36,114912,1351],{"class":114},[36,114914,104035],{"class":57},[36,114916,6270],{"class":53},[36,114918,114919],{"class":38,"line":19349},[36,114920,104042],{"class":53},[19,114922,106042],{},[26,114924,114926],{"className":26338,"code":114925,"language":26340,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,114927,114928],{"__ignoreMap":31},[36,114929,114930,114932],{"class":38,"line":39},[36,114931,103757],{"class":4500},[36,114933,114934],{"class":57}," ch7_reacher.py\n",[19,114936,112913],{},[26,114938,114940],{"className":26338,"code":114939,"language":26340,"meta":31,"style":31},"python ch7_reacher.py\n",[33,114941,114942],{"__ignoreMap":31},[36,114943,114944,114946],{"class":38,"line":39},[36,114945,30],{"class":4500},[36,114947,114934],{"class":57},[997,114949,104045],{"id":104045},[19,114951,114952],{},"读取 site 坐标：",[26,114954,114956],{"className":28,"code":114955,"language":30,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,114957,114958],{"__ignoreMap":31},[36,114959,114960,114962,114964,114966,114968],{"class":38,"line":39},[36,114961,34450],{"class":114},[36,114963,114325],{"class":4500},[36,114965,114328],{"class":53},[36,114967,256],{"class":49},[36,114969,114333],{"class":53},[19,114971,114972],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114974,112929],{},[26,114976,114978],{"className":28,"code":114977,"language":30,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,114979,114980],{"__ignoreMap":31},[36,114981,114982,114984],{"class":38,"line":39},[36,114983,19564],{"class":114},[36,114985,114437],{"class":53},[19,114987,114988],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114990,112255],{},[26,114992,114994],{"className":28,"code":114993,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,114995,114996,115008,115021],{"__ignoreMap":31},[36,114997,114998,115000,115002,115004,115006],{"class":38,"line":39},[36,114999,114065],{"class":53},[36,115001,115],{"class":114},[36,115003,114070],{"class":53},[36,115005,508],{"class":114},[36,115007,114075],{"class":53},[36,115009,115010,115013,115015,115017,115019],{"class":38,"line":46},[36,115011,115012],{"class":53},"control_cost ",[36,115014,115],{"class":114},[36,115016,114506],{"class":49},[36,115018,9045],{"class":114},[36,115020,114511],{"class":53},[36,115022,115023,115025,115027,115029,115031,115033,115035],{"class":38,"line":82},[36,115024,19564],{"class":114},[36,115026,985],{"class":49},[36,115028,54],{"class":53},[36,115030,508],{"class":114},[36,115032,114065],{"class":53},[36,115034,508],{"class":114},[36,115036,114528],{"class":53},[19,115038,115039],{},"奖励由两部分组成：",[433,115041,115042,115047],{},[436,115043,115044,115046],{},[33,115045,114092],{},"：末端离目标越远，奖励越低。",[436,115048,115049,115052],{},[33,115050,115051],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,115054,115055],{},"简单控制器：",[26,115057,115059],{"className":28,"code":115058,"language":30,"meta":31,"style":31},"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",[33,115060,115061,115074,115106],{"__ignoreMap":31},[36,115062,115063,115066,115068,115070,115072],{"class":38,"line":39},[36,115064,115065],{"class":53},"error ",[36,115067,115],{"class":114},[36,115069,114637],{"class":53},[36,115071,508],{"class":114},[36,115073,114642],{"class":53},[36,115075,115076,115078,115080,115082,115084,115086,115088,115090,115092,115094,115096,115098,115100,115102,115104],{"class":38,"line":46},[36,115077,108342],{"class":53},[36,115079,713],{"class":49},[36,115081,6974],{"class":53},[36,115083,115],{"class":114},[36,115085,114659],{"class":53},[36,115087,107731],{"class":49},[36,115089,9045],{"class":114},[36,115091,114666],{"class":53},[36,115093,1188],{"class":49},[36,115095,114671],{"class":53},[36,115097,508],{"class":114},[36,115099,104876],{"class":49},[36,115101,14958],{"class":53},[36,115103,104876],{"class":49},[36,115105,61],{"class":53},[36,115107,115108,115110,115112,115114,115116,115118,115120,115122,115124,115126,115128,115130,115132,115134,115136],{"class":38,"line":82},[36,115109,108342],{"class":53},[36,115111,707],{"class":49},[36,115113,6974],{"class":53},[36,115115,115],{"class":114},[36,115117,114659],{"class":53},[36,115119,107731],{"class":49},[36,115121,9045],{"class":114},[36,115123,114666],{"class":53},[36,115125,713],{"class":49},[36,115127,114671],{"class":53},[36,115129,508],{"class":114},[36,115131,104876],{"class":49},[36,115133,14958],{"class":53},[36,115135,104876],{"class":49},[36,115137,61],{"class":53},[19,115139,115140],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[997,115142,104181],{"id":104181},[26,115144,115145],{"className":28,"code":114955,"language":30,"meta":31,"style":31},[33,115146,115147],{"__ignoreMap":31},[36,115148,115149,115151,115153,115155,115157],{"class":38,"line":39},[36,115150,34450],{"class":114},[36,115152,114325],{"class":4500},[36,115154,114328],{"class":53},[36,115156,256],{"class":49},[36,115158,114333],{"class":53},[19,115160,115161,115162,115164,115165,85020,115167,1296],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,115163,1998],{}," 是 site 的名字，比如 ",[33,115166,114005],{},[33,115168,114428],{},[26,115170,115172],{"className":28,"code":115171,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,115173,115174],{"__ignoreMap":31},[36,115175,115176,115178,115180],{"class":38,"line":39},[36,115177,106106],{"class":53},[36,115179,115],{"class":114},[36,115181,114342],{"class":53},[19,115183,115184],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,115186,115188],{"className":28,"code":115187,"language":30,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,115189,115190,115202],{"__ignoreMap":31},[36,115191,115192,115194,115196,115198,115200],{"class":38,"line":39},[36,115193,4069],{"class":114},[36,115195,105921],{"class":53},[36,115197,1507],{"class":114},[36,115199,6624],{"class":49},[36,115201,6270],{"class":53},[36,115203,115204,115206,115208,115210,115212,115214,115216,115218,115220,115222],{"class":38,"line":46},[36,115205,106367],{"class":114},[36,115207,105907],{"class":49},[36,115209,54],{"class":53},[36,115211,2060],{"class":114},[36,115213,114367],{"class":57},[36,115215,2065],{"class":49},[36,115217,1998],{"class":53},[36,115219,2070],{"class":49},[36,115221,1822],{"class":57},[36,115223,61],{"class":53},[19,115225,115226,115227,115230,115231,115233],{},"如果 site 没找到，就主动报错。",[33,115228,115229],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,115232,1998],{}," 的值放进字符串里。",[26,115235,115237],{"className":28,"code":115236,"language":30,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,115238,115239],{"__ignoreMap":31},[36,115240,115241,115243],{"class":38,"line":39},[36,115242,19564],{"class":114},[36,115244,114384],{"class":53},[19,115246,115247,115248,115250,115251,115254],{},"返回这个 site 的世界坐标。",[33,115249,106152],{}," 里的每一行都是一个 site 的 ",[33,115252,115253],{},"(x, y, z)"," 坐标。",[26,115256,115258],{"className":28,"code":115257,"language":30,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,115259,115260],{"__ignoreMap":31},[36,115261,115262,115264,115266],{"class":38,"line":39},[36,115263,34450],{"class":114},[36,115265,114399],{"class":4500},[36,115267,114402],{"class":53},[19,115269,115270],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,115272,115274],{"className":28,"code":115273,"language":30,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,115275,115276,115288],{"__ignoreMap":31},[36,115277,115278,115280,115282,115284,115286],{"class":38,"line":39},[36,115279,114037],{"class":53},[36,115281,115],{"class":114},[36,115283,114412],{"class":53},[36,115285,114005],{"class":57},[36,115287,61],{"class":53},[36,115289,115290,115292,115294,115296,115298],{"class":38,"line":46},[36,115291,114047],{"class":53},[36,115293,115],{"class":114},[36,115295,114412],{"class":53},[36,115297,114428],{"class":57},[36,115299,61],{"class":53},[19,115301,115302],{},"分别读取末端点和目标点的世界坐标。",[26,115304,115305],{"className":28,"code":114977,"language":30,"meta":31,"style":31},[33,115306,115307],{"__ignoreMap":31},[36,115308,115309,115311],{"class":38,"line":39},[36,115310,19564],{"class":114},[36,115312,114437],{"class":53},[19,115314,115315],{},"把四部分拼成一个观测数组：",[26,115317,115320],{"className":115318,"code":115319,"language":690,"meta":31},[688],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,115321,115319],{"__ignoreMap":31},[26,115323,115325],{"className":28,"code":115324,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,115326,115327],{"__ignoreMap":31},[36,115328,115329,115331,115333,115335,115337],{"class":38,"line":39},[36,115330,114065],{"class":53},[36,115332,115],{"class":114},[36,115334,114070],{"class":53},[36,115336,508],{"class":114},[36,115338,114075],{"class":53},[19,115340,115341,115342,115345,115346,115349],{},"计算 tip 到 target 的距离。",[33,115343,115344],{},"tip - target"," 得到一个三维向量，",[33,115347,115348],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115351,17155],{},[26,115353,115356],{"className":115354,"code":115355,"language":690,"meta":31},[688],"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",[33,115357,115355],{"__ignoreMap":31},[26,115359,115361],{"className":28,"code":115360,"language":30,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,115362,115363],{"__ignoreMap":31},[36,115364,115365,115367,115369,115371,115373],{"class":38,"line":39},[36,115366,115012],{"class":53},[36,115368,115],{"class":114},[36,115370,114506],{"class":49},[36,115372,9045],{"class":114},[36,115374,114511],{"class":53},[19,115376,115377,115378,115381,115382,115385],{},"计算动作惩罚。",[33,115379,115380],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,115383,115384],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,115387,115389],{"className":28,"code":115388,"language":30,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,115390,115391],{"__ignoreMap":31},[36,115392,115393,115395,115397,115399,115401,115403,115405],{"class":38,"line":39},[36,115394,19564],{"class":114},[36,115396,985],{"class":49},[36,115398,54],{"class":53},[36,115400,508],{"class":114},[36,115402,114065],{"class":53},[36,115404,508],{"class":114},[36,115406,114528],{"class":53},[19,115408,115409],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,115411,115412],{"className":28,"code":113272,"language":30,"meta":31,"style":31},[33,115413,115414],{"__ignoreMap":31},[36,115415,115416,115418,115420],{"class":38,"line":39},[36,115417,113279],{"class":53},[36,115419,115],{"class":114},[36,115421,107232],{"class":49},[19,115423,115424],{},"累计奖励变量，记录整个运行过程的总分。",[26,115426,115428],{"className":28,"code":115427,"language":30,"meta":31,"style":31},"for step in range(500):\n",[33,115429,115430],{"__ignoreMap":31},[36,115431,115432,115434,115436,115438,115440,115442,115444],{"class":38,"line":39},[36,115433,5556],{"class":114},[36,115435,34119],{"class":53},[36,115437,28556],{"class":114},[36,115439,34946],{"class":49},[36,115441,54],{"class":53},[36,115443,67562],{"class":49},[36,115445,33290],{"class":53},[19,115447,115448],{},"运行 500 个控制步。",[26,115450,115451],{"className":28,"code":107014,"language":30,"meta":31,"style":31},[33,115452,115453],{"__ignoreMap":31},[36,115454,115455],{"class":38,"line":39},[36,115456,107014],{"class":53},[19,115458,115459,115460,1292,115462,115464],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,115461,105703],{},[33,115463,105706],{}," 是当前状态下的坐标。",[26,115466,115468],{"className":28,"code":115467,"language":30,"meta":31,"style":31},"error = target - tip\n",[33,115469,115470],{"__ignoreMap":31},[36,115471,115472,115474,115476,115478,115480],{"class":38,"line":39},[36,115473,115065],{"class":53},[36,115475,115],{"class":114},[36,115477,114637],{"class":53},[36,115479,508],{"class":114},[36,115481,114642],{"class":53},[19,115483,115484],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,115486,115488],{"className":28,"code":115487,"language":30,"meta":31,"style":31},"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",[33,115489,115490,115522],{"__ignoreMap":31},[36,115491,115492,115494,115496,115498,115500,115502,115504,115506,115508,115510,115512,115514,115516,115518,115520],{"class":38,"line":39},[36,115493,108342],{"class":53},[36,115495,713],{"class":49},[36,115497,6974],{"class":53},[36,115499,115],{"class":114},[36,115501,114659],{"class":53},[36,115503,107731],{"class":49},[36,115505,9045],{"class":114},[36,115507,114666],{"class":53},[36,115509,1188],{"class":49},[36,115511,114671],{"class":53},[36,115513,508],{"class":114},[36,115515,104876],{"class":49},[36,115517,14958],{"class":53},[36,115519,104876],{"class":49},[36,115521,61],{"class":53},[36,115523,115524,115526,115528,115530,115532,115534,115536,115538,115540,115542,115544,115546,115548,115550,115552],{"class":38,"line":46},[36,115525,108342],{"class":53},[36,115527,707],{"class":49},[36,115529,6974],{"class":53},[36,115531,115],{"class":114},[36,115533,114659],{"class":53},[36,115535,107731],{"class":49},[36,115537,9045],{"class":114},[36,115539,114666],{"class":53},[36,115541,713],{"class":49},[36,115543,114671],{"class":53},[36,115545,508],{"class":114},[36,115547,104876],{"class":49},[36,115549,14958],{"class":53},[36,115551,104876],{"class":49},[36,115553,61],{"class":53},[19,115555,115556,115557,115560],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,115558,115559],{},"error -> ctrl -> step"," 的流程。",[26,115562,115563],{"className":28,"code":106976,"language":30,"meta":31,"style":31},[33,115564,115565],{"__ignoreMap":31},[36,115566,115567],{"class":38,"line":39},[36,115568,106976],{"class":53},[19,115570,115571],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,115573,115575],{"className":28,"code":115574,"language":30,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,115576,115577],{"__ignoreMap":31},[36,115578,115579,115581,115583],{"class":38,"line":39},[36,115580,113323],{"class":53},[36,115582,115],{"class":114},[36,115584,114760],{"class":53},[19,115586,115587,115588,115591],{},"读取最新观测。后面打印 ",[33,115589,115590],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115593,104789],{"id":104788},[19,115595,115596],{},"观测维度为:",[26,115598,115601],{"className":115599,"code":115600,"language":690,"meta":31},[688],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,115602,115600],{"__ignoreMap":31},[19,115604,115605],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115607,115608],{},"程序每 100 步打印：",[26,115610,115613],{"className":115611,"code":115612,"language":690,"meta":31},[688],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,115614,115612],{"__ignoreMap":31},[19,115616,115617,115618,115620],{},"如果控制有效，你应该看到最终 ",[33,115619,105703],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115622,104821],{"id":104820},[433,115624,115625,115628,115631,115637,115643,115650,115660],{},[436,115626,115627],{},"修改目标点位置。",[436,115629,115630],{},"重新运行，观察最终 tip 是否变化。",[436,115632,115633,115634,115636],{},"把 gravity 改成 ",[33,115635,105062],{},"，观察控制是否变差。",[436,115638,113650,115639,113654,115641,1296],{},[33,115640,104631],{},[33,115642,1188],{},[436,115644,104884,115645,104887,115647,115649],{},[33,115646,113065],{},[33,115648,109777],{},"，观察机械臂是否更难移动。",[436,115651,104884,115652,85011,115654,104887,115656,115659],{},[33,115653,105706],{},[33,115655,106618],{},[33,115657,115658],{},"0.2 0 0.6","，观察 reward 和 final tip。",[436,115661,115662],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115664,104926],{"id":104925},[997,115666,115668],{"id":115667},"site-not-found",[33,115669,115670],{},"site not found",[19,115672,115673,115674,1292,115677,1296],{},"检查 XML 中是否有 ",[33,115675,115676],{},"site name=\"tip\"",[33,115678,115679],{},"site name=\"target\"",[997,115681,115682],{"id":115682},"机械臂完全不动",[19,115684,104996],{},[433,115686,115687,115692,115695,115700],{},[436,115688,115689,115691],{},[33,115690,104631],{}," 是否为 2",[436,115693,115694],{},"actuator 是否引用正确 joint",[436,115696,115697,115699],{},[33,115698,103550],{}," 是否被赋值",[436,115701,115702,115703],{},"是否执行了 ",[33,115704,103161],{},[997,115706,115707],{"id":115707},"控制效果不好",[19,115709,115710],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,115712,115715],{"className":115713,"code":115714,"language":690,"meta":31},[688],"obs → action → mj_step → reward → next_obs\n",[33,115716,115714],{"__ignoreMap":31},[997,115718,115720],{"id":115719},"tip-坐标不变化","tip 坐标不变化",[19,115722,105048],{},[433,115724,115725,115730,115738,115747],{},[436,115726,115727,115728,1296],{},"是否每步调用了 ",[33,115729,103161],{},[436,115731,115732,115733,1292,115735,1296],{},"是否写入了 ",[33,115734,108597],{},[33,115736,115737],{},"data.ctrl[1]",[436,115739,115740,115741,273,115744,1296],{},"actuator 是否正确引用 ",[33,115742,115743],{},"joint1",[33,115745,115746],{},"joint2",[436,115748,115749],{},"控制输入是否太小。",[997,115751,115752],{"id":115752},"目标点不会动",[19,115754,115755],{},"本章的 target 是固定 site：",[26,115757,115759],{"className":55561,"code":115758,"language":55563,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,115760,115761],{"__ignoreMap":31},[36,115762,115763,115765,115767,115769,115771,115773,115775,115777,115780],{"class":38,"line":39},[36,115764,1507],{"class":53},[36,115766,105682],{"class":53794},[36,115768,17440],{"class":4500},[36,115770,115],{"class":53},[36,115772,114428],{"class":57},[36,115774,103580],{"class":4500},[36,115776,115],{"class":53},[36,115778,115779],{"class":57},"\"0.5 0 0.4\"",[36,115781,115782],{"class":53}," ...\u002F>\n",[19,115784,115785,115786,115788],{},"它直接挂在 ",[33,115787,104314],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[997,115790,115791],{"id":115791},"机械臂不像真实机械臂",[19,115793,115794],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115796,105080],{"id":105079},[19,115798,115799],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115801,115802],{},"核心公式：",[26,115804,115807],{"className":115805,"code":115806,"language":690,"meta":31},[688],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,115808,115806],{"__ignoreMap":31},[19,115810,115811],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2602,115813,115814],{},"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":31,"searchDepth":46,"depth":46,"links":115816},[115817,115818,115819,115824,115828,115829,115830,115838],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":115820},[115821,115822,115823],{"id":114020,"depth":82,"text":114021},{"id":114096,"depth":82,"text":114096},{"id":114126,"depth":82,"text":114127},{"id":103726,"depth":46,"text":103727,"children":115825},[115826,115827],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":115831},[115832,115833,115834,115835,115836,115837],{"id":115667,"depth":82,"text":115670},{"id":115682,"depth":82,"text":115682},{"id":115707,"depth":82,"text":115707},{"id":115719,"depth":82,"text":115720},{"id":115752,"depth":82,"text":115752},{"id":115791,"depth":82,"text":115791},{"id":105079,"depth":46,"text":105080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113824,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115845,"title":115846,"body":115847,"description":31,"extension":2631,"meta":119306,"navigation":545,"path":119307,"seo":119308,"stem":119309,"__hash__":119310},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115848,"toc":119277},[115849,115852,115854,115857,115860,115885,115888,115894,115897,115903,115905,115907,115931,115933,115951,115953,115996,115998,116025,116027,116030,116082,116085,116091,116100,116103,116141,116144,116183,116186,116194,116201,116204,116210,116212,116266,116273,116318,116321,116325,116341,116351,116353,117611,117613,117625,117627,117638,117640,117643,117664,117667,117670,117703,117709,117712,117745,117748,117751,117792,117797,117811,117814,117827,117832,117855,117857,117872,117882,117897,117904,117924,117939,117957,117960,117977,117985,118001,118007,118039,118052,118084,118094,118129,118143,118189,118203,118245,118256,118269,118275,118308,118311,118338,118348,118388,118398,118415,118422,118440,118443,118484,118497,118512,118515,118538,118541,118553,118556,118575,118580,118601,118604,118619,118622,118656,118668,118683,118686,118711,118714,118733,118736,118768,118771,118795,118801,118831,118838,118851,118854,118856,118858,118864,118867,118870,118882,118885,118887,118941,118943,118947,118953,118962,118965,118972,118974,118997,119000,119004,119006,119024,119030,119032,119065,119068,119074,119078,119081,119101,119106,119110,119117,119137,119142,119146,119149,119169,119172,119258,119262,119265,119271,119274],[10,115850,115846],{"id":115851},"_8gymnasium-风格强化学习接口基础",[14,115853,103123],{"id":103122},[19,115855,115856],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115858,115859],{},"你将实现:",[26,115861,115863],{"className":28,"code":115862,"language":30,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,115864,115865,115875],{"__ignoreMap":31},[36,115866,115867,115870,115872],{"class":38,"line":39},[36,115868,115869],{"class":53},"obs, info ",[36,115871,115],{"class":114},[36,115873,115874],{"class":53}," env.reset()\n",[36,115876,115877,115880,115882],{"class":38,"line":46},[36,115878,115879],{"class":53},"obs, reward, terminated, truncated, info ",[36,115881,115],{"class":114},[36,115883,115884],{"class":53}," env.step(action)\n",[19,115886,115887],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115889,115890,115891,115893],{},"前面章节的代码都是“脚本式”的：在 ",[33,115892,104768],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115895,115896],{},"可以先记住 Gymnasium 环境的核心交互：",[26,115898,115901],{"className":115899,"code":115900,"language":690,"meta":31},[688],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,115902,115900],{"__ignoreMap":31},[14,115904,103245],{"id":103244},[19,115906,103248],{},[26,115908,115909],{"className":26338,"code":106859,"language":26340,"meta":31,"style":31},[33,115910,115911],{"__ignoreMap":31},[36,115912,115913,115915,115917,115919,115921,115923,115925,115927,115929],{"class":38,"line":39},[36,115914,27093],{"class":4500},[36,115916,28827],{"class":57},[36,115918,26350],{"class":57},[36,115920,28912],{"class":49},[36,115922,106874],{"class":57},[36,115924,103273],{"class":57},[36,115926,104974],{"class":57},[36,115928,103289],{"class":57},[36,115930,106883],{"class":57},[19,115932,105292],{},[26,115934,115936],{"className":26338,"code":115935,"language":26340,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,115937,115938],{"__ignoreMap":31},[36,115939,115940,115942,115944,115946,115948],{"class":38,"line":39},[36,115941,26347],{"class":4500},[36,115943,26350],{"class":57},[36,115945,103405],{"class":57},[36,115947,110181],{"class":57},[36,115949,115950],{"class":57}," gymnasium\n",[19,115952,105309],{},[26,115954,115956],{"className":26338,"code":115955,"language":26340,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,115957,115958,115975,115984],{"__ignoreMap":31},[36,115959,115960,115962,115964,115966,115969,115971,115973],{"class":38,"line":39},[36,115961,32840],{"class":4500},[36,115963,31686],{"class":57},[36,115965,27631],{"class":49},[36,115967,115968],{"class":57}," mujoco-gym-api",[36,115970,103450],{"class":57},[36,115972,103453],{"class":49},[36,115974,103456],{"class":49},[36,115976,115977,115979,115981],{"class":38,"line":46},[36,115978,32840],{"class":4500},[36,115980,103463],{"class":57},[36,115982,115983],{"class":57}," mujoco-gym-api\n",[36,115985,115986,115988,115990,115992,115994],{"class":38,"line":82},[36,115987,26347],{"class":4500},[36,115989,26350],{"class":57},[36,115991,103405],{"class":57},[36,115993,110181],{"class":57},[36,115995,115950],{"class":57},[19,115997,103479],{},[433,115999,116000,116010,116013,116019],{},[436,116001,116002,116003,116006,116007,1296],{},"本章使用 ",[33,116004,116005],{},"gymnasium","，不是旧版 ",[33,116008,116009],{},"gym",[436,116011,116012],{},"Gymnasium API 与旧 Gym API 有差异。",[436,116014,116015,116016,1296],{},"旧 Gym 常见返回值是 4 个: ",[33,116017,116018],{},"obs, reward, done, info",[436,116020,116021,116022,1296],{},"Gymnasium 返回值是 5 个: ",[33,116023,116024],{},"obs, reward, terminated, truncated, info",[14,116026,103519],{"id":103518},[19,116028,116029],{},"强化学习环境接口包含:",[206,116031,116032,116041],{},[209,116033,116034],{},[212,116035,116036,116039],{},[215,116037,116038],{"align":26253},"方法",[215,116040,105169],{"align":26253},[225,116042,116043,116053,116063,116073],{},[212,116044,116045,116050],{},[230,116046,116047],{"align":26253},[33,116048,116049],{},"reset()",[230,116051,116052],{"align":26253},"重置环境",[212,116054,116055,116060],{},[230,116056,116057],{"align":26253},[33,116058,116059],{},"step(action)",[230,116061,116062],{"align":26253},"执行动作",[212,116064,116065,116070],{},[230,116066,116067],{"align":26253},[33,116068,116069],{},"observation_space",[230,116071,116072],{"align":26253},"观测空间",[212,116074,116075,116080],{},[230,116076,116077],{"align":26253},[33,116078,116079],{},"action_space",[230,116081,26171],{"align":26253},[19,116083,116084],{},"一个最小环境需要完成:",[26,116086,116089],{"className":116087,"code":116088,"language":690,"meta":31},[688],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,116090,116088],{"__ignoreMap":31},[997,116092,116094,1292,116097,107109],{"id":116093},"terminated-和-truncated-的区别",[33,116095,116096],{},"terminated",[33,116098,116099],{},"truncated",[19,116101,116102],{},"Gymnasium 把“结束”拆成两个概念：",[206,116104,116105,116115],{},[209,116106,116107],{},[212,116108,116109,116111,116113],{},[215,116110,107045],{"align":26253},[215,116112,1635],{"align":26253},[215,116114,23705],{"align":26253},[225,116116,116117,116129],{},[212,116118,116119,116123,116126],{},[230,116120,116121],{"align":26253},[33,116122,116096],{},[230,116124,116125],{"align":26253},"任务自然结束",[230,116127,116128],{"align":26253},"机械臂到达目标、机器人摔倒",[212,116130,116131,116135,116138],{},[230,116132,116133],{"align":26253},[33,116134,116099],{},[230,116136,116137],{"align":26253},"因外部限制截断",[230,116139,116140],{"align":26253},"达到最大步数、时间限制",[19,116142,116143],{},"本章中：",[26,116145,116147],{"className":28,"code":116146,"language":30,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,116148,116149,116164],{"__ignoreMap":31},[36,116150,116151,116154,116156,116159,116161],{"class":38,"line":39},[36,116152,116153],{"class":53},"terminated ",[36,116155,115],{"class":114},[36,116157,116158],{"class":53}," dist ",[36,116160,1507],{"class":114},[36,116162,116163],{"class":49}," 0.05\n",[36,116165,116166,116169,116171,116173,116176,116178,116180],{"class":38,"line":46},[36,116167,116168],{"class":53},"truncated ",[36,116170,115],{"class":114},[36,116172,41373],{"class":49},[36,116174,116175],{"class":53},".steps ",[36,116177,1490],{"class":114},[36,116179,41373],{"class":49},[36,116181,116182],{"class":53},".max_steps\n",[19,116184,116185],{},"也就是：",[433,116187,116188,116191],{},[436,116189,116190],{},"末端距离目标小于 0.05，任务成功结束。",[436,116192,116193],{},"步数超过上限，episode 被截断。",[997,116195,116197,1292,116199],{"id":116196},"observation_space-和-action_space",[33,116198,116069],{},[33,116200,116079],{},[19,116202,116203],{},"这两个对象告诉算法：",[26,116205,116208],{"className":116206,"code":116207,"language":690,"meta":31},[688],"观测长什么样\n动作允许多大\n",[33,116209,116207],{"__ignoreMap":31},[19,116211,17155],{},[26,116213,116215],{"className":28,"code":116214,"language":30,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,116216,116217],{"__ignoreMap":31},[36,116218,116219,116221,116224,116226,116229,116232,116235,116237,116239,116242,116244,116246,116248,116250,116252,116254,116256,116259,116261,116263],{"class":38,"line":39},[36,116220,33327],{"class":49},[36,116222,116223],{"class":53},".action_space ",[36,116225,115],{"class":114},[36,116227,116228],{"class":53}," spaces.Box(",[36,116230,116231],{"class":1997},"low",[36,116233,116234],{"class":114},"=-",[36,116236,104876],{"class":49},[36,116238,14958],{"class":53},[36,116240,116241],{"class":1997},"high",[36,116243,115],{"class":114},[36,116245,104876],{"class":49},[36,116247,14958],{"class":53},[36,116249,98439],{"class":1997},[36,116251,115],{"class":114},[36,116253,54],{"class":53},[36,116255,1188],{"class":49},[36,116257,116258],{"class":53},",), ",[36,116260,95978],{"class":1997},[36,116262,115],{"class":114},[36,116264,116265],{"class":53},"np.float32)\n",[19,116267,116268,116269,116272],{},"表示动作是 2 维数组，每个值都在 ",[33,116270,116271],{},"[-1, 1]"," 范围内。",[26,116274,116276],{"className":28,"code":116275,"language":30,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,116277,116278],{"__ignoreMap":31},[36,116279,116280,116282,116285,116287,116289,116291,116293,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314,116316],{"class":38,"line":39},[36,116281,33327],{"class":49},[36,116283,116284],{"class":53},".observation_space ",[36,116286,115],{"class":114},[36,116288,116228],{"class":53},[36,116290,116231],{"class":1997},[36,116292,116234],{"class":114},[36,116294,116295],{"class":53},"np.inf, ",[36,116297,116241],{"class":1997},[36,116299,115],{"class":114},[36,116301,116295],{"class":53},[36,116303,98439],{"class":1997},[36,116305,115],{"class":114},[36,116307,54],{"class":53},[36,116309,1317],{"class":49},[36,116311,116258],{"class":53},[36,116313,95978],{"class":1997},[36,116315,115],{"class":114},[36,116317,116265],{"class":53},[19,116319,116320],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[997,116322,116324],{"id":116323},"frame_skip-是什么","frame_skip 是什么",[26,116326,116328],{"className":28,"code":116327,"language":30,"meta":31,"style":31},"self.frame_skip = 5\n",[33,116329,116330],{"__ignoreMap":31},[36,116331,116332,116334,116337,116339],{"class":38,"line":39},[36,116333,33327],{"class":49},[36,116335,116336],{"class":53},".frame_skip ",[36,116338,115],{"class":114},[36,116340,1227],{"class":49},[19,116342,116343,116344,116347,116348,116350],{},"表示外部调用一次 ",[33,116345,116346],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,116349,103689],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116352,103727],{"id":103726},[26,116354,116356],{"className":28,"code":116355,"language":30,"meta":31,"style":31},"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",[33,116357,116358,116370,116376,116386,116397,116401,116405,116413,116418,116422,116426,116430,116434,116438,116442,116446,116451,116455,116459,116463,116468,116472,116476,116480,116484,116488,116492,116496,116500,116504,116508,116512,116516,116520,116538,116553,116557,116570,116580,116595,116612,116616,116637,116656,116680,116694,116698,116708,116720,116730,116734,116776,116814,116818,116828,116844,116859,116878,116885,116889,116902,116917,116932,116945,116964,116980,116984,117024,117039,117054,117058,117097,117108,117121,117125,117135,117144,117148,117158,117173,117191,117195,117206,117223,117236,117240,117250,117254,117265,117276,117280,117294,117308,117324,117328,117341,117358,117373,117380,117384,117388,117400,117410,117428,117440,117452,117456,117464,117480,117489,117498,117506,117548,117560,117565,117569,117587,117591,117595,117607],{"__ignoreMap":31},[36,116359,116360,116362,116365,116367],{"class":38,"line":39},[36,116361,537],{"class":114},[36,116363,116364],{"class":53}," gymnasium ",[36,116366,33887],{"class":114},[36,116368,116369],{"class":53}," gym\n",[36,116371,116372,116374],{"class":38,"line":46},[36,116373,537],{"class":114},[36,116375,103775],{"class":53},[36,116377,116378,116380,116382,116384],{"class":38,"line":82},[36,116379,537],{"class":114},[36,116381,33884],{"class":53},[36,116383,33887],{"class":114},[36,116385,33890],{"class":53},[36,116387,116388,116390,116392,116394],{"class":38,"line":88},[36,116389,33241],{"class":114},[36,116391,116364],{"class":53},[36,116393,537],{"class":114},[36,116395,116396],{"class":53}," spaces\n",[36,116398,116399],{"class":38,"line":195},[36,116400,546],{"emptyLinePlaceholder":545},[36,116402,116403],{"class":38,"line":1517},[36,116404,546],{"emptyLinePlaceholder":545},[36,116406,116407,116409,116411],{"class":38,"line":2421},[36,116408,103788],{"class":49},[36,116410,498],{"class":114},[36,116412,103793],{"class":57},[36,116414,116415],{"class":38,"line":2446},[36,116416,116417],{"class":57},"\u003Cmujoco model=\"gym_reacher\">\n",[36,116419,116420],{"class":38,"line":2469},[36,116421,114207],{"class":57},[36,116423,116424],{"class":38,"line":2492},[36,116425,546],{"emptyLinePlaceholder":545},[36,116427,116428],{"class":38,"line":4150},[36,116429,103812],{"class":57},[36,116431,116432],{"class":38,"line":4155},[36,116433,114225],{"class":57},[36,116435,116436],{"class":38,"line":4161},[36,116437,546],{"emptyLinePlaceholder":545},[36,116439,116440],{"class":38,"line":4166},[36,116441,114234],{"class":57},[36,116443,116444],{"class":38,"line":4180},[36,116445,114239],{"class":57},[36,116447,116448],{"class":38,"line":4185},[36,116449,116450],{"class":57},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,116452,116453],{"class":38,"line":4191},[36,116454,546],{"emptyLinePlaceholder":545},[36,116456,116457],{"class":38,"line":4212},[36,116458,114253],{"class":57},[36,116460,116461],{"class":38,"line":4217},[36,116462,114258],{"class":57},[36,116464,116465],{"class":38,"line":4231},[36,116466,116467],{"class":57},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,116469,116470],{"class":38,"line":4236},[36,116471,114268],{"class":57},[36,116473,116474],{"class":38,"line":4264},[36,116475,108909],{"class":57},[36,116477,116478],{"class":38,"line":4269},[36,116479,103841],{"class":57},[36,116481,116482],{"class":38,"line":4286},[36,116483,103846],{"class":57},[36,116485,116486],{"class":38,"line":4291},[36,116487,546],{"emptyLinePlaceholder":545},[36,116489,116490],{"class":38,"line":4296},[36,116491,108926],{"class":57},[36,116493,116494],{"class":38,"line":4301},[36,116495,114293],{"class":57},[36,116497,116498],{"class":38,"line":4315},[36,116499,114298],{"class":57},[36,116501,116502],{"class":38,"line":4320},[36,116503,108936],{"class":57},[36,116505,116506],{"class":38,"line":5109},[36,116507,103851],{"class":57},[36,116509,116510],{"class":38,"line":5123},[36,116511,74],{"class":57},[36,116513,116514],{"class":38,"line":5131},[36,116515,546],{"emptyLinePlaceholder":545},[36,116517,116518],{"class":38,"line":5136},[36,116519,546],{"emptyLinePlaceholder":545},[36,116521,116522,116524,116527,116529,116531,116533,116536],{"class":38,"line":5142},[36,116523,519],{"class":114},[36,116525,116526],{"class":4500}," ReacherEnv",[36,116528,54],{"class":53},[36,116530,116009],{"class":4500},[36,116532,3235],{"class":53},[36,116534,116535],{"class":4500},"Env",[36,116537,33290],{"class":53},[36,116539,116540,116543,116545,116547,116550],{"class":38,"line":5148},[36,116541,116542],{"class":53},"    metadata ",[36,116544,115],{"class":114},[36,116546,6979],{"class":53},[36,116548,116549],{"class":57},"\"render_modes\"",[36,116551,116552],{"class":53},": []}\n",[36,116554,116555],{"class":38,"line":5153},[36,116556,546],{"emptyLinePlaceholder":545},[36,116558,116559,116561,116563,116566,116568],{"class":38,"line":10475},[36,116560,33305],{"class":114},[36,116562,33308],{"class":49},[36,116564,116565],{"class":53},"(self) -> ",[36,116567,198],{"class":49},[36,116569,6270],{"class":53},[36,116571,116572,116574,116576,116578],{"class":38,"line":10499},[36,116573,33321],{"class":49},[36,116575,19779],{"class":53},[36,116577,33333],{"class":49},[36,116579,4513],{"class":53},[36,116581,116582,116584,116587,116589,116591,116593],{"class":38,"line":10504},[36,116583,33349],{"class":49},[36,116585,116586],{"class":53},".model ",[36,116588,115],{"class":114},[36,116590,103886],{"class":53},[36,116592,103788],{"class":49},[36,116594,61],{"class":53},[36,116596,116597,116599,116602,116604,116607,116609],{"class":38,"line":10510},[36,116598,33349],{"class":49},[36,116600,116601],{"class":53},".data ",[36,116603,115],{"class":114},[36,116605,116606],{"class":53}," mujoco.MjData(",[36,116608,33327],{"class":49},[36,116610,116611],{"class":53},".model)\n",[36,116613,116614],{"class":38,"line":10537},[36,116615,546],{"emptyLinePlaceholder":545},[36,116617,116618,116620,116623,116625,116628,116630,116633,116635],{"class":38,"line":10542},[36,116619,33349],{"class":49},[36,116621,116622],{"class":53},".tip_site_id ",[36,116624,115],{"class":114},[36,116626,116627],{"class":53}," mujoco.mj_name2id(",[36,116629,33327],{"class":49},[36,116631,116632],{"class":53},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,116634,114005],{"class":57},[36,116636,61],{"class":53},[36,116638,116639,116641,116644,116646,116648,116650,116652,116654],{"class":38,"line":10548},[36,116640,33349],{"class":49},[36,116642,116643],{"class":53},".target_site_id ",[36,116645,115],{"class":114},[36,116647,116627],{"class":53},[36,116649,33327],{"class":49},[36,116651,116632],{"class":53},[36,116653,114428],{"class":57},[36,116655,61],{"class":53},[36,116657,116658,116660,116662,116664,116666,116668,116670,116672,116674,116676,116678],{"class":38,"line":10560},[36,116659,5029],{"class":114},[36,116661,41373],{"class":49},[36,116663,116622],{"class":53},[36,116665,1507],{"class":114},[36,116667,6624],{"class":49},[36,116669,1512],{"class":114},[36,116671,41373],{"class":49},[36,116673,116643],{"class":53},[36,116675,1507],{"class":114},[36,116677,6624],{"class":49},[36,116679,6270],{"class":53},[36,116681,116682,116685,116687,116689,116692],{"class":38,"line":10572},[36,116683,116684],{"class":114},"            raise",[36,116686,105907],{"class":49},[36,116688,54],{"class":53},[36,116690,116691],{"class":57},"\"required sites not found\"",[36,116693,61],{"class":53},[36,116695,116696],{"class":38,"line":10584},[36,116697,546],{"emptyLinePlaceholder":545},[36,116699,116700,116702,116704,116706],{"class":38,"line":12241},[36,116701,33349],{"class":49},[36,116703,116336],{"class":53},[36,116705,115],{"class":114},[36,116707,1227],{"class":49},[36,116709,116710,116712,116715,116717],{"class":38,"line":12266},[36,116711,33349],{"class":49},[36,116713,116714],{"class":53},".max_steps ",[36,116716,115],{"class":114},[36,116718,116719],{"class":49}," 200\n",[36,116721,116722,116724,116726,116728],{"class":38,"line":12289},[36,116723,33349],{"class":49},[36,116725,116175],{"class":53},[36,116727,115],{"class":114},[36,116729,49830],{"class":49},[36,116731,116732],{"class":38,"line":12313},[36,116733,546],{"emptyLinePlaceholder":545},[36,116735,116736,116738,116740,116742,116744,116746,116748,116750,116752,116754,116756,116758,116760,116762,116764,116766,116768,116770,116772,116774],{"class":38,"line":12318},[36,116737,33349],{"class":49},[36,116739,116223],{"class":53},[36,116741,115],{"class":114},[36,116743,116228],{"class":53},[36,116745,116231],{"class":1997},[36,116747,116234],{"class":114},[36,116749,104876],{"class":49},[36,116751,14958],{"class":53},[36,116753,116241],{"class":1997},[36,116755,115],{"class":114},[36,116757,104876],{"class":49},[36,116759,14958],{"class":53},[36,116761,98439],{"class":1997},[36,116763,115],{"class":114},[36,116765,54],{"class":53},[36,116767,1188],{"class":49},[36,116769,116258],{"class":53},[36,116771,95978],{"class":1997},[36,116773,115],{"class":114},[36,116775,116265],{"class":53},[36,116777,116778,116780,116782,116784,116786,116788,116790,116792,116794,116796,116798,116800,116802,116804,116806,116808,116810,116812],{"class":38,"line":12323},[36,116779,33349],{"class":49},[36,116781,116284],{"class":53},[36,116783,115],{"class":114},[36,116785,116228],{"class":53},[36,116787,116231],{"class":1997},[36,116789,116234],{"class":114},[36,116791,116295],{"class":53},[36,116793,116241],{"class":1997},[36,116795,115],{"class":114},[36,116797,116295],{"class":53},[36,116799,98439],{"class":1997},[36,116801,115],{"class":114},[36,116803,54],{"class":53},[36,116805,1317],{"class":49},[36,116807,116258],{"class":53},[36,116809,95978],{"class":1997},[36,116811,115],{"class":114},[36,116813,116265],{"class":53},[36,116815,116816],{"class":38,"line":12328},[36,116817,546],{"emptyLinePlaceholder":545},[36,116819,116820,116822,116825],{"class":38,"line":12337},[36,116821,33305],{"class":114},[36,116823,116824],{"class":4500}," _get_obs",[36,116826,116827],{"class":53},"(self) -> np.ndarray:\n",[36,116829,116830,116832,116834,116836,116839,116841],{"class":38,"line":12342},[36,116831,114606],{"class":53},[36,116833,115],{"class":114},[36,116835,41373],{"class":49},[36,116837,116838],{"class":53},".data.site_xpos[",[36,116840,33327],{"class":49},[36,116842,116843],{"class":53},".tip_site_id].copy()\n",[36,116845,116846,116848,116850,116852,116854,116856],{"class":38,"line":12348},[36,116847,114619],{"class":53},[36,116849,115],{"class":114},[36,116851,41373],{"class":49},[36,116853,116838],{"class":53},[36,116855,33327],{"class":49},[36,116857,116858],{"class":53},".target_site_id].copy()\n",[36,116860,116861,116863,116865,116868,116870,116873,116875],{"class":38,"line":12369},[36,116862,112651],{"class":53},[36,116864,115],{"class":114},[36,116866,116867],{"class":53}," np.concatenate([",[36,116869,33327],{"class":49},[36,116871,116872],{"class":53},".data.qpos.copy(), ",[36,116874,33327],{"class":49},[36,116876,116877],{"class":53},".data.qvel.copy(), tip, target])\n",[36,116879,116880,116882],{"class":38,"line":12375},[36,116881,17273],{"class":114},[36,116883,116884],{"class":53}," obs.astype(np.float32)\n",[36,116886,116887],{"class":38,"line":12389},[36,116888,546],{"emptyLinePlaceholder":545},[36,116890,116891,116893,116896,116898,116900],{"class":38,"line":12395},[36,116892,33305],{"class":114},[36,116894,116895],{"class":4500}," _get_reward",[36,116897,116565],{"class":53},[36,116899,244],{"class":49},[36,116901,6270],{"class":53},[36,116903,116904,116906,116908,116910,116912,116914],{"class":38,"line":12422},[36,116905,114606],{"class":53},[36,116907,115],{"class":114},[36,116909,41373],{"class":49},[36,116911,116838],{"class":53},[36,116913,33327],{"class":49},[36,116915,116916],{"class":53},".tip_site_id]\n",[36,116918,116919,116921,116923,116925,116927,116929],{"class":38,"line":12431},[36,116920,114619],{"class":53},[36,116922,115],{"class":114},[36,116924,41373],{"class":49},[36,116926,116838],{"class":53},[36,116928,33327],{"class":49},[36,116930,116931],{"class":53},".target_site_id]\n",[36,116933,116934,116937,116939,116941,116943],{"class":38,"line":12437},[36,116935,116936],{"class":53},"        dist ",[36,116938,115],{"class":114},[36,116940,114070],{"class":53},[36,116942,508],{"class":114},[36,116944,114075],{"class":53},[36,116946,116947,116950,116952,116954,116956,116959,116961],{"class":38,"line":12445},[36,116948,116949],{"class":53},"        control_cost ",[36,116951,115],{"class":114},[36,116953,114506],{"class":49},[36,116955,9045],{"class":114},[36,116957,116958],{"class":53}," np.sum(np.square(",[36,116960,33327],{"class":49},[36,116962,116963],{"class":53},".data.ctrl))\n",[36,116965,116966,116968,116970,116972,116974,116976,116978],{"class":38,"line":12450},[36,116967,17273],{"class":114},[36,116969,985],{"class":49},[36,116971,54],{"class":53},[36,116973,508],{"class":114},[36,116975,114065],{"class":53},[36,116977,508],{"class":114},[36,116979,114528],{"class":53},[36,116981,116982],{"class":38,"line":19122},[36,116983,546],{"emptyLinePlaceholder":545},[36,116985,116986,116988,116991,116994,116996,116999,117001,117003,117005,117007,117009,117012,117014,117016,117018,117020,117022],{"class":38,"line":19128},[36,116987,33305],{"class":114},[36,116989,116990],{"class":4500}," reset",[36,116992,116993],{"class":53},"(self, ",[36,116995,1050],{"class":114},[36,116997,116998],{"class":53},", seed: ",[36,117000,232],{"class":49},[36,117002,27625],{"class":114},[36,117004,41433],{"class":49},[36,117006,498],{"class":114},[36,117008,41433],{"class":49},[36,117010,117011],{"class":53},", options: ",[36,117013,322],{"class":49},[36,117015,27625],{"class":114},[36,117017,41433],{"class":49},[36,117019,498],{"class":114},[36,117021,41433],{"class":49},[36,117023,33290],{"class":53},[36,117025,117026,117028,117031,117034,117036],{"class":38,"line":19151},[36,117027,33321],{"class":49},[36,117029,117030],{"class":53},"().reset(",[36,117032,117033],{"class":1997},"seed",[36,117035,115],{"class":114},[36,117037,117038],{"class":53},"seed)\n",[36,117040,117041,117044,117046,117049,117051],{"class":38,"line":19157},[36,117042,117043],{"class":53},"        mujoco.mj_resetData(",[36,117045,33327],{"class":49},[36,117047,117048],{"class":53},".model, ",[36,117050,33327],{"class":49},[36,117052,117053],{"class":53},".data)\n",[36,117055,117056],{"class":38,"line":19180},[36,117057,546],{"emptyLinePlaceholder":545},[36,117059,117060,117062,117065,117067,117069,117072,117074,117076,117078,117080,117082,117084,117086,117088,117090,117092,117094],{"class":38,"line":19194},[36,117061,33349],{"class":49},[36,117063,117064],{"class":53},".data.qpos[:] ",[36,117066,115],{"class":114},[36,117068,41373],{"class":49},[36,117070,117071],{"class":53},".np_random.uniform(",[36,117073,116231],{"class":1997},[36,117075,116234],{"class":114},[36,117077,2559],{"class":49},[36,117079,14958],{"class":53},[36,117081,116241],{"class":1997},[36,117083,115],{"class":114},[36,117085,2559],{"class":49},[36,117087,14958],{"class":53},[36,117089,33999],{"class":1997},[36,117091,115],{"class":114},[36,117093,33327],{"class":49},[36,117095,117096],{"class":53},".model.nq)\n",[36,117098,117099,117101,117104,117106],{"class":38,"line":19214},[36,117100,33349],{"class":49},[36,117102,117103],{"class":53},".data.qvel[:] ",[36,117105,115],{"class":114},[36,117107,107232],{"class":49},[36,117109,117110,117113,117115,117117,117119],{"class":38,"line":19220},[36,117111,117112],{"class":53},"        mujoco.mj_forward(",[36,117114,33327],{"class":49},[36,117116,117048],{"class":53},[36,117118,33327],{"class":49},[36,117120,117053],{"class":53},[36,117122,117123],{"class":38,"line":19231},[36,117124,546],{"emptyLinePlaceholder":545},[36,117126,117127,117129,117131,117133],{"class":38,"line":19254},[36,117128,33349],{"class":49},[36,117130,116175],{"class":53},[36,117132,115],{"class":114},[36,117134,49830],{"class":49},[36,117136,117137,117139,117141],{"class":38,"line":19276},[36,117138,17273],{"class":114},[36,117140,41373],{"class":49},[36,117142,117143],{"class":53},"._get_obs(), {}\n",[36,117145,117146],{"class":38,"line":19281},[36,117147,546],{"emptyLinePlaceholder":545},[36,117149,117150,117152,117155],{"class":38,"line":19287},[36,117151,33305],{"class":114},[36,117153,117154],{"class":4500}," step",[36,117156,117157],{"class":53},"(self, action):\n",[36,117159,117160,117162,117164,117167,117169,117171],{"class":38,"line":19301},[36,117161,112691],{"class":53},[36,117163,115],{"class":114},[36,117165,117166],{"class":53}," np.asarray(action, ",[36,117168,95978],{"class":1997},[36,117170,115],{"class":114},[36,117172,116265],{"class":53},[36,117174,117175,117177,117179,117181,117183,117186,117188],{"class":38,"line":19314},[36,117176,112691],{"class":53},[36,117178,115],{"class":114},[36,117180,109917],{"class":53},[36,117182,33327],{"class":49},[36,117184,117185],{"class":53},".action_space.low, ",[36,117187,33327],{"class":49},[36,117189,117190],{"class":53},".action_space.high)\n",[36,117192,117193],{"class":38,"line":19319},[36,117194,546],{"emptyLinePlaceholder":545},[36,117196,117197,117199,117202,117204],{"class":38,"line":19333},[36,117198,33349],{"class":49},[36,117200,117201],{"class":53},".data.ctrl[:] ",[36,117203,115],{"class":114},[36,117205,109940],{"class":53},[36,117207,117208,117210,117212,117214,117216,117218,117220],{"class":38,"line":19338},[36,117209,5934],{"class":114},[36,117211,103975],{"class":53},[36,117213,28556],{"class":114},[36,117215,34946],{"class":49},[36,117217,54],{"class":53},[36,117219,33327],{"class":49},[36,117221,117222],{"class":53},".frame_skip):\n",[36,117224,117225,117228,117230,117232,117234],{"class":38,"line":19344},[36,117226,117227],{"class":53},"            mujoco.mj_step(",[36,117229,33327],{"class":49},[36,117231,117048],{"class":53},[36,117233,33327],{"class":49},[36,117235,117053],{"class":53},[36,117237,117238],{"class":38,"line":19349},[36,117239,546],{"emptyLinePlaceholder":545},[36,117241,117242,117244,117246,117248],{"class":38,"line":19363},[36,117243,33349],{"class":49},[36,117245,116175],{"class":53},[36,117247,1224],{"class":114},[36,117249,124],{"class":49},[36,117251,117252],{"class":38,"line":19368},[36,117253,546],{"emptyLinePlaceholder":545},[36,117255,117256,117258,117260,117262],{"class":38,"line":19373},[36,117257,112651],{"class":53},[36,117259,115],{"class":114},[36,117261,41373],{"class":49},[36,117263,117264],{"class":53},"._get_obs()\n",[36,117266,117267,117269,117271,117273],{"class":38,"line":19387},[36,117268,112756],{"class":53},[36,117270,115],{"class":114},[36,117272,41373],{"class":49},[36,117274,117275],{"class":53},"._get_reward()\n",[36,117277,117278],{"class":38,"line":19399},[36,117279,546],{"emptyLinePlaceholder":545},[36,117281,117282,117284,117286,117288,117290,117292],{"class":38,"line":19404},[36,117283,114606],{"class":53},[36,117285,115],{"class":114},[36,117287,41373],{"class":49},[36,117289,116838],{"class":53},[36,117291,33327],{"class":49},[36,117293,116916],{"class":53},[36,117295,117296,117298,117300,117302,117304,117306],{"class":38,"line":19417},[36,117297,114619],{"class":53},[36,117299,115],{"class":114},[36,117301,41373],{"class":49},[36,117303,116838],{"class":53},[36,117305,33327],{"class":49},[36,117307,116931],{"class":53},[36,117309,117310,117312,117314,117316,117319,117321],{"class":38,"line":19422},[36,117311,116936],{"class":53},[36,117313,115],{"class":114},[36,117315,985],{"class":49},[36,117317,117318],{"class":53},"(np.linalg.norm(tip ",[36,117320,508],{"class":114},[36,117322,117323],{"class":53}," target))\n",[36,117325,117326],{"class":38,"line":19427},[36,117327,546],{"emptyLinePlaceholder":545},[36,117329,117330,117333,117335,117337,117339],{"class":38,"line":19432},[36,117331,117332],{"class":53},"        terminated ",[36,117334,115],{"class":114},[36,117336,116158],{"class":53},[36,117338,1507],{"class":114},[36,117340,116163],{"class":49},[36,117342,117343,117346,117348,117350,117352,117354,117356],{"class":38,"line":19445},[36,117344,117345],{"class":53},"        truncated ",[36,117347,115],{"class":114},[36,117349,41373],{"class":49},[36,117351,116175],{"class":53},[36,117353,1490],{"class":114},[36,117355,41373],{"class":49},[36,117357,116182],{"class":53},[36,117359,117360,117363,117365,117367,117370],{"class":38,"line":19450},[36,117361,117362],{"class":53},"        info ",[36,117364,115],{"class":114},[36,117366,6979],{"class":53},[36,117368,117369],{"class":57},"\"distance\"",[36,117371,117372],{"class":53},": dist}\n",[36,117374,117375,117377],{"class":38,"line":35135},[36,117376,17273],{"class":114},[36,117378,117379],{"class":53}," obs, reward, terminated, truncated, info\n",[36,117381,117382],{"class":38,"line":35141},[36,117383,546],{"emptyLinePlaceholder":545},[36,117385,117386],{"class":38,"line":35147},[36,117387,546],{"emptyLinePlaceholder":545},[36,117389,117390,117392,117394,117396,117398],{"class":38,"line":35153},[36,117391,34450],{"class":114},[36,117393,4510],{"class":4500},[36,117395,103872],{"class":53},[36,117397,198],{"class":49},[36,117399,6270],{"class":53},[36,117401,117402,117405,117407],{"class":38,"line":35159},[36,117403,117404],{"class":53},"    env ",[36,117406,115],{"class":114},[36,117408,117409],{"class":53}," ReacherEnv()\n",[36,117411,117412,117415,117417,117420,117422,117424,117426],{"class":38,"line":35170},[36,117413,117414],{"class":53},"    obs, info ",[36,117416,115],{"class":114},[36,117418,117419],{"class":53}," env.reset(",[36,117421,117033],{"class":1997},[36,117423,115],{"class":114},[36,117425,713],{"class":49},[36,117427,61],{"class":53},[36,117429,117430,117432,117434,117437],{"class":38,"line":35176},[36,117431,33803],{"class":49},[36,117433,54],{"class":53},[36,117435,117436],{"class":57},"\"initial obs shape:\"",[36,117438,117439],{"class":53},", obs.shape)\n",[36,117441,117442,117444,117446,117449],{"class":38,"line":35196},[36,117443,33803],{"class":49},[36,117445,54],{"class":53},[36,117447,117448],{"class":57},"\"initial info:\"",[36,117450,117451],{"class":53},", info)\n",[36,117453,117454],{"class":38,"line":35202},[36,117455,546],{"emptyLinePlaceholder":545},[36,117457,117458,117460,117462],{"class":38,"line":35213},[36,117459,112622],{"class":53},[36,117461,115],{"class":114},[36,117463,107232],{"class":49},[36,117465,117466,117468,117470,117472,117474,117476,117478],{"class":38,"line":35219},[36,117467,5732],{"class":114},[36,117469,34119],{"class":53},[36,117471,28556],{"class":114},[36,117473,34946],{"class":49},[36,117475,54],{"class":53},[36,117477,3376],{"class":49},[36,117479,33290],{"class":53},[36,117481,117482,117484,117486],{"class":38,"line":35225},[36,117483,112691],{"class":53},[36,117485,115],{"class":114},[36,117487,117488],{"class":53}," env.action_space.sample()\n",[36,117490,117491,117494,117496],{"class":38,"line":35231},[36,117492,117493],{"class":53},"        obs, reward, terminated, truncated, info ",[36,117495,115],{"class":114},[36,117497,115884],{"class":53},[36,117499,117500,117502,117504],{"class":38,"line":35237},[36,117501,112766],{"class":53},[36,117503,1224],{"class":114},[36,117505,112771],{"class":53},[36,117507,117508,117510,117512,117514,117516,117519,117521,117523,117526,117528,117530,117533,117535,117537,117540,117542,117544,117546],{"class":38,"line":35243},[36,117509,34954],{"class":49},[36,117511,54],{"class":53},[36,117513,112800],{"class":57},[36,117515,112803],{"class":53},[36,117517,117518],{"class":57},"\"reward:\"",[36,117520,14958],{"class":53},[36,117522,34521],{"class":49},[36,117524,117525],{"class":53},"(reward, ",[36,117527,2767],{"class":49},[36,117529,112814],{"class":53},[36,117531,117532],{"class":57},"\"distance:\"",[36,117534,14958],{"class":53},[36,117536,34521],{"class":49},[36,117538,117539],{"class":53},"(info[",[36,117541,117369],{"class":57},[36,117543,114671],{"class":53},[36,117545,2767],{"class":49},[36,117547,625],{"class":53},[36,117549,117550,117552,117555,117557],{"class":38,"line":35249},[36,117551,5029],{"class":114},[36,117553,117554],{"class":53}," terminated ",[36,117556,1441],{"class":114},[36,117558,117559],{"class":53}," truncated:\n",[36,117561,117562],{"class":38,"line":35255},[36,117563,117564],{"class":114},"            break\n",[36,117566,117567],{"class":38,"line":35275},[36,117568,546],{"emptyLinePlaceholder":545},[36,117570,117571,117573,117575,117577,117579,117581,117583,117585],{"class":38,"line":35281},[36,117572,33803],{"class":49},[36,117574,54],{"class":53},[36,117576,112845],{"class":57},[36,117578,14958],{"class":53},[36,117580,34521],{"class":49},[36,117582,112852],{"class":53},[36,117584,2767],{"class":49},[36,117586,625],{"class":53},[36,117588,117589],{"class":38,"line":35297},[36,117590,546],{"emptyLinePlaceholder":545},[36,117592,117593],{"class":38,"line":35303},[36,117594,546],{"emptyLinePlaceholder":545},[36,117596,117597,117599,117601,117603,117605],{"class":38,"line":35317},[36,117598,4069],{"class":114},[36,117600,33724],{"class":49},[36,117602,1351],{"class":114},[36,117604,104035],{"class":57},[36,117606,6270],{"class":53},[36,117608,117609],{"class":38,"line":35323},[36,117610,104042],{"class":53},[19,117612,106042],{},[26,117614,117616],{"className":26338,"code":117615,"language":26340,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,117617,117618],{"__ignoreMap":31},[36,117619,117620,117622],{"class":38,"line":39},[36,117621,103757],{"class":4500},[36,117623,117624],{"class":57}," ch8_gym_env.py\n",[19,117626,112913],{},[26,117628,117630],{"className":26338,"code":117629,"language":26340,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,117631,117632],{"__ignoreMap":31},[36,117633,117634,117636],{"class":38,"line":39},[36,117635,30],{"class":4500},[36,117637,117624],{"class":57},[997,117639,104045],{"id":104045},[19,117641,117642],{},"继承 Gymnasium 环境：",[26,117644,117646],{"className":28,"code":117645,"language":30,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,117647,117648],{"__ignoreMap":31},[36,117649,117650,117652,117654,117656,117658,117660,117662],{"class":38,"line":39},[36,117651,519],{"class":114},[36,117653,116526],{"class":4500},[36,117655,54],{"class":53},[36,117657,116009],{"class":4500},[36,117659,3235],{"class":53},[36,117661,116535],{"class":4500},[36,117663,33290],{"class":53},[19,117665,117666],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117668,117669],{},"初始化模型：",[26,117671,117673],{"className":28,"code":117672,"language":30,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,117674,117675,117689],{"__ignoreMap":31},[36,117676,117677,117679,117681,117683,117685,117687],{"class":38,"line":39},[36,117678,33327],{"class":49},[36,117680,116586],{"class":53},[36,117682,115],{"class":114},[36,117684,103886],{"class":53},[36,117686,103788],{"class":49},[36,117688,61],{"class":53},[36,117690,117691,117693,117695,117697,117699,117701],{"class":38,"line":46},[36,117692,33327],{"class":49},[36,117694,116601],{"class":53},[36,117696,115],{"class":114},[36,117698,116606],{"class":53},[36,117700,33327],{"class":49},[36,117702,116611],{"class":53},[19,117704,117705,117706,117708],{},"这和前面章节一样，只是现在放到了类的 ",[33,117707,33333],{}," 里。",[19,117710,117711],{},"缓存 site ID：",[26,117713,117715],{"className":28,"code":117714,"language":30,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,117716,117717,117731],{"__ignoreMap":31},[36,117718,117719,117721,117723,117725,117727,117729],{"class":38,"line":39},[36,117720,33327],{"class":49},[36,117722,116622],{"class":53},[36,117724,115],{"class":114},[36,117726,116627],{"class":53},[36,117728,92032],{"class":49},[36,117730,61],{"class":53},[36,117732,117733,117735,117737,117739,117741,117743],{"class":38,"line":46},[36,117734,33327],{"class":49},[36,117736,116643],{"class":53},[36,117738,115],{"class":114},[36,117740,116627],{"class":53},[36,117742,92032],{"class":49},[36,117744,61],{"class":53},[19,117746,117747],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117749,117750],{},"reset：",[26,117752,117754],{"className":28,"code":117753,"language":30,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,117755,117756],{"__ignoreMap":31},[36,117757,117758,117760,117762,117764,117766,117768,117770,117772,117774,117776,117778,117780,117782,117784,117786,117788,117790],{"class":38,"line":39},[36,117759,34450],{"class":114},[36,117761,116990],{"class":4500},[36,117763,116993],{"class":53},[36,117765,1050],{"class":114},[36,117767,116998],{"class":53},[36,117769,232],{"class":49},[36,117771,27625],{"class":114},[36,117773,41433],{"class":49},[36,117775,498],{"class":114},[36,117777,41433],{"class":49},[36,117779,117011],{"class":53},[36,117781,322],{"class":49},[36,117783,27625],{"class":114},[36,117785,41433],{"class":49},[36,117787,498],{"class":114},[36,117789,41433],{"class":49},[36,117791,33290],{"class":53},[19,117793,117794,117796],{},[33,117795,72543],{}," 做四件事：",[433,117798,117799,117802,117805,117808],{},[436,117800,117801],{},"设置随机种子。",[436,117803,117804],{},"重置 MuJoCo data。",[436,117806,117807],{},"随机初始化关节角。",[436,117809,117810],{},"返回初始观测和 info。",[19,117812,117813],{},"step：",[26,117815,117817],{"className":28,"code":117816,"language":30,"meta":31,"style":31},"def step(self, action):\n",[33,117818,117819],{"__ignoreMap":31},[36,117820,117821,117823,117825],{"class":38,"line":39},[36,117822,34450],{"class":114},[36,117824,117154],{"class":4500},[36,117826,117157],{"class":53},[19,117828,117829,117831],{},[33,117830,109605],{}," 做六件事：",[433,117833,117834,117837,117843,117846,117849,117852],{},[436,117835,117836],{},"检查并裁剪 action。",[436,117838,117839,117840,1296],{},"写入 ",[33,117841,117842],{},"self.data.ctrl",[436,117844,117845],{},"连续推进若干个 MuJoCo 物理步。",[436,117847,117848],{},"计算新观测。",[436,117850,117851],{},"计算奖励和结束条件。",[436,117853,117854],{},"返回 Gymnasium 标准五元组。",[997,117856,104181],{"id":104181},[26,117858,117860],{"className":28,"code":117859,"language":30,"meta":31,"style":31},"import gymnasium as gym\n",[33,117861,117862],{"__ignoreMap":31},[36,117863,117864,117866,117868,117870],{"class":38,"line":39},[36,117865,537],{"class":114},[36,117867,116364],{"class":53},[36,117869,33887],{"class":114},[36,117871,116369],{"class":53},[19,117873,117874,117875,117877,117878,117881],{},"导入 Gymnasium，并起别名 ",[33,117876,116009],{},"。后面写 ",[33,117879,117880],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,117883,117885],{"className":28,"code":117884,"language":30,"meta":31,"style":31},"from gymnasium import spaces\n",[33,117886,117887],{"__ignoreMap":31},[36,117888,117889,117891,117893,117895],{"class":38,"line":39},[36,117890,33241],{"class":114},[36,117892,116364],{"class":53},[36,117894,537],{"class":114},[36,117896,116396],{"class":53},[19,117898,117899,117900,117903],{},"导入空间定义工具。",[33,117901,117902],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,117905,117906],{"className":28,"code":117645,"language":30,"meta":31,"style":31},[33,117907,117908],{"__ignoreMap":31},[36,117909,117910,117912,117914,117916,117918,117920,117922],{"class":38,"line":39},[36,117911,519],{"class":114},[36,117913,116526],{"class":4500},[36,117915,54],{"class":53},[36,117917,116009],{"class":4500},[36,117919,3235],{"class":53},[36,117921,116535],{"class":4500},[36,117923,33290],{"class":53},[19,117925,117926,117927,117930,117931,117933,117934,1292,117936,117938],{},"定义一个类，名字叫 ",[33,117928,117929],{},"ReacherEnv","。括号里的 ",[33,117932,117880],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,117935,72543],{},[33,117937,109605],{}," 这两个核心方法。",[26,117940,117942],{"className":28,"code":117941,"language":30,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,117943,117944],{"__ignoreMap":31},[36,117945,117946,117949,117951,117953,117955],{"class":38,"line":39},[36,117947,117948],{"class":53},"metadata ",[36,117950,115],{"class":114},[36,117952,6979],{"class":53},[36,117954,116549],{"class":57},[36,117956,116552],{"class":53},[19,117958,117959],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,117961,117963],{"className":28,"code":117962,"language":30,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,117964,117965],{"__ignoreMap":31},[36,117966,117967,117969,117971,117973,117975],{"class":38,"line":39},[36,117968,34450],{"class":114},[36,117970,33308],{"class":49},[36,117972,116565],{"class":53},[36,117974,198],{"class":49},[36,117976,6270],{"class":53},[19,117978,117979,117981,117982,1296],{},[33,117980,33333],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,117983,117984],{},"env = ReacherEnv()",[26,117986,117988],{"className":28,"code":117987,"language":30,"meta":31,"style":31},"super().__init__()\n",[33,117989,117990],{"__ignoreMap":31},[36,117991,117992,117995,117997,117999],{"class":38,"line":39},[36,117993,117994],{"class":49},"super",[36,117996,19779],{"class":53},[36,117998,33333],{"class":49},[36,118000,4513],{"class":53},[19,118002,118003,118004,118006],{},"调用父类 ",[33,118005,117880],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,118008,118009],{"className":28,"code":117672,"language":30,"meta":31,"style":31},[33,118010,118011,118025],{"__ignoreMap":31},[36,118012,118013,118015,118017,118019,118021,118023],{"class":38,"line":39},[36,118014,33327],{"class":49},[36,118016,116586],{"class":53},[36,118018,115],{"class":114},[36,118020,103886],{"class":53},[36,118022,103788],{"class":49},[36,118024,61],{"class":53},[36,118026,118027,118029,118031,118033,118035,118037],{"class":38,"line":46},[36,118028,33327],{"class":49},[36,118030,116601],{"class":53},[36,118032,115],{"class":114},[36,118034,116606],{"class":53},[36,118036,33327],{"class":49},[36,118038,116611],{"class":53},[19,118040,118041,118042,118044,118045,1292,118048,118051],{},"把 MuJoCo 模型和状态保存到 ",[33,118043,33327],{}," 上。",[33,118046,118047],{},"self.model",[33,118049,118050],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,118053,118054],{"className":28,"code":117714,"language":30,"meta":31,"style":31},[33,118055,118056,118070],{"__ignoreMap":31},[36,118057,118058,118060,118062,118064,118066,118068],{"class":38,"line":39},[36,118059,33327],{"class":49},[36,118061,116622],{"class":53},[36,118063,115],{"class":114},[36,118065,116627],{"class":53},[36,118067,92032],{"class":49},[36,118069,61],{"class":53},[36,118071,118072,118074,118076,118078,118080,118082],{"class":38,"line":46},[36,118073,33327],{"class":49},[36,118075,116643],{"class":53},[36,118077,115],{"class":114},[36,118079,116627],{"class":53},[36,118081,92032],{"class":49},[36,118083,61],{"class":53},[19,118085,118086,118087,1292,118090,118093],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,118088,118089],{},"_get_obs",[33,118091,118092],{},"_get_reward"," 里就不用每次按名字查找。",[26,118095,118097],{"className":28,"code":118096,"language":30,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,118098,118099,118109,118119],{"__ignoreMap":31},[36,118100,118101,118103,118105,118107],{"class":38,"line":39},[36,118102,33327],{"class":49},[36,118104,116336],{"class":53},[36,118106,115],{"class":114},[36,118108,1227],{"class":49},[36,118110,118111,118113,118115,118117],{"class":38,"line":46},[36,118112,33327],{"class":49},[36,118114,116714],{"class":53},[36,118116,115],{"class":114},[36,118118,116719],{"class":49},[36,118120,118121,118123,118125,118127],{"class":38,"line":82},[36,118122,33327],{"class":49},[36,118124,116175],{"class":53},[36,118126,115],{"class":114},[36,118128,49830],{"class":49},[19,118130,118131,118134,118135,118138,118139,118142],{},[33,118132,118133],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,118136,118137],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,118140,118141],{},"steps"," 记录当前 episode 已经走了多少步。",[26,118144,118145],{"className":28,"code":116214,"language":30,"meta":31,"style":31},[33,118146,118147],{"__ignoreMap":31},[36,118148,118149,118151,118153,118155,118157,118159,118161,118163,118165,118167,118169,118171,118173,118175,118177,118179,118181,118183,118185,118187],{"class":38,"line":39},[36,118150,33327],{"class":49},[36,118152,116223],{"class":53},[36,118154,115],{"class":114},[36,118156,116228],{"class":53},[36,118158,116231],{"class":1997},[36,118160,116234],{"class":114},[36,118162,104876],{"class":49},[36,118164,14958],{"class":53},[36,118166,116241],{"class":1997},[36,118168,115],{"class":114},[36,118170,104876],{"class":49},[36,118172,14958],{"class":53},[36,118174,98439],{"class":1997},[36,118176,115],{"class":114},[36,118178,54],{"class":53},[36,118180,1188],{"class":49},[36,118182,116258],{"class":53},[36,118184,95978],{"class":1997},[36,118186,115],{"class":114},[36,118188,116265],{"class":53},[19,118190,118191,118192,118195,118196,1292,118199,118202],{},"定义动作空间。",[33,118193,118194],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,118197,118198],{},"low=-1.0",[33,118200,118201],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,118204,118205],{"className":28,"code":116275,"language":30,"meta":31,"style":31},[33,118206,118207],{"__ignoreMap":31},[36,118208,118209,118211,118213,118215,118217,118219,118221,118223,118225,118227,118229,118231,118233,118235,118237,118239,118241,118243],{"class":38,"line":39},[36,118210,33327],{"class":49},[36,118212,116284],{"class":53},[36,118214,115],{"class":114},[36,118216,116228],{"class":53},[36,118218,116231],{"class":1997},[36,118220,116234],{"class":114},[36,118222,116295],{"class":53},[36,118224,116241],{"class":1997},[36,118226,115],{"class":114},[36,118228,116295],{"class":53},[36,118230,98439],{"class":1997},[36,118232,115],{"class":114},[36,118234,54],{"class":53},[36,118236,1317],{"class":49},[36,118238,116258],{"class":53},[36,118240,95978],{"class":1997},[36,118242,115],{"class":114},[36,118244,116265],{"class":53},[19,118246,118247,118248,118251,118252,118255],{},"定义观测空间。",[33,118249,118250],{},"shape=(10,)"," 表示观测是 10 个数。",[33,118253,118254],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,118257,118259],{"className":28,"code":118258,"language":30,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,118260,118261],{"__ignoreMap":31},[36,118262,118263,118265,118267],{"class":38,"line":39},[36,118264,34450],{"class":114},[36,118266,116824],{"class":4500},[36,118268,116827],{"class":53},[19,118270,118271,118272,118274],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,118273,3665],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,118276,118278],{"className":28,"code":118277,"language":30,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,118279,118280,118294],{"__ignoreMap":31},[36,118281,118282,118284,118286,118288,118290,118292],{"class":38,"line":39},[36,118283,114037],{"class":53},[36,118285,115],{"class":114},[36,118287,41373],{"class":49},[36,118289,116838],{"class":53},[36,118291,33327],{"class":49},[36,118293,116843],{"class":53},[36,118295,118296,118298,118300,118302,118304,118306],{"class":38,"line":46},[36,118297,114047],{"class":53},[36,118299,115],{"class":114},[36,118301,41373],{"class":49},[36,118303,116838],{"class":53},[36,118305,33327],{"class":49},[36,118307,116858],{"class":53},[19,118309,118310],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,118312,118314],{"className":28,"code":118313,"language":30,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,118315,118316,118332],{"__ignoreMap":31},[36,118317,118318,118320,118322,118324,118326,118328,118330],{"class":38,"line":39},[36,118319,113323],{"class":53},[36,118321,115],{"class":114},[36,118323,116867],{"class":53},[36,118325,33327],{"class":49},[36,118327,116872],{"class":53},[36,118329,33327],{"class":49},[36,118331,116877],{"class":53},[36,118333,118334,118336],{"class":38,"line":46},[36,118335,19564],{"class":114},[36,118337,116884],{"class":53},[19,118339,118340,118341,118344,118345,118347],{},"拼接观测，并转换成 ",[33,118342,118343],{},"float32","。很多强化学习库默认使用 ",[33,118346,118343],{},"，所以这里主动转换。",[26,118349,118350],{"className":28,"code":117753,"language":30,"meta":31,"style":31},[33,118351,118352],{"__ignoreMap":31},[36,118353,118354,118356,118358,118360,118362,118364,118366,118368,118370,118372,118374,118376,118378,118380,118382,118384,118386],{"class":38,"line":39},[36,118355,34450],{"class":114},[36,118357,116990],{"class":4500},[36,118359,116993],{"class":53},[36,118361,1050],{"class":114},[36,118363,116998],{"class":53},[36,118365,232],{"class":49},[36,118367,27625],{"class":114},[36,118369,41433],{"class":49},[36,118371,498],{"class":114},[36,118373,41433],{"class":49},[36,118375,117011],{"class":53},[36,118377,322],{"class":49},[36,118379,27625],{"class":114},[36,118381,41433],{"class":49},[36,118383,498],{"class":114},[36,118385,41433],{"class":49},[36,118387,33290],{"class":53},[19,118389,118390,118391,118393,118394,118397],{},"定义 reset。",[33,118392,117033],{}," 用来控制随机数，保证实验可以复现。",[33,118395,118396],{},"options"," 用来接收额外配置，本章暂时不用。",[26,118399,118401],{"className":28,"code":118400,"language":30,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,118402,118403],{"__ignoreMap":31},[36,118404,118405,118407,118409,118411,118413],{"class":38,"line":39},[36,118406,117994],{"class":49},[36,118408,117030],{"class":53},[36,118410,117033],{"class":1997},[36,118412,115],{"class":114},[36,118414,117038],{"class":53},[19,118416,118417,118418,118421],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,118419,118420],{},"self.np_random"," 生成可复现的随机数。",[26,118423,118425],{"className":28,"code":118424,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,118426,118427],{"__ignoreMap":31},[36,118428,118429,118432,118434,118436,118438],{"class":38,"line":39},[36,118430,118431],{"class":53},"mujoco.mj_resetData(",[36,118433,33327],{"class":49},[36,118435,117048],{"class":53},[36,118437,33327],{"class":49},[36,118439,117053],{"class":53},[19,118441,118442],{},"把 MuJoCo 状态重置到默认状态。",[26,118444,118446],{"className":28,"code":118445,"language":30,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,118447,118448],{"__ignoreMap":31},[36,118449,118450,118452,118454,118456,118458,118460,118462,118464,118466,118468,118470,118472,118474,118476,118478,118480,118482],{"class":38,"line":39},[36,118451,33327],{"class":49},[36,118453,117064],{"class":53},[36,118455,115],{"class":114},[36,118457,41373],{"class":49},[36,118459,117071],{"class":53},[36,118461,116231],{"class":1997},[36,118463,116234],{"class":114},[36,118465,2559],{"class":49},[36,118467,14958],{"class":53},[36,118469,116241],{"class":1997},[36,118471,115],{"class":114},[36,118473,2559],{"class":49},[36,118475,14958],{"class":53},[36,118477,33999],{"class":1997},[36,118479,115],{"class":114},[36,118481,33327],{"class":49},[36,118483,117096],{"class":53},[19,118485,117807,118486,118489,118490,118493,118494,118496],{},[33,118487,118488],{},"[:]"," 表示修改整个数组。",[33,118491,118492],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,118495,104623],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,118498,118500],{"className":28,"code":118499,"language":30,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,118501,118502],{"__ignoreMap":31},[36,118503,118504,118506,118508,118510],{"class":38,"line":39},[36,118505,33327],{"class":49},[36,118507,117103],{"class":53},[36,118509,115],{"class":114},[36,118511,107232],{"class":49},[19,118513,118514],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,118516,118518],{"className":28,"code":118517,"language":30,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,118519,118520,118530],{"__ignoreMap":31},[36,118521,118522,118524,118526,118528],{"class":38,"line":39},[36,118523,33327],{"class":49},[36,118525,116175],{"class":53},[36,118527,115],{"class":114},[36,118529,49830],{"class":49},[36,118531,118532,118534,118536],{"class":38,"line":46},[36,118533,19564],{"class":114},[36,118535,41373],{"class":49},[36,118537,117143],{"class":53},[19,118539,118540],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,118542,118543],{"className":28,"code":117816,"language":30,"meta":31,"style":31},[33,118544,118545],{"__ignoreMap":31},[36,118546,118547,118549,118551],{"class":38,"line":39},[36,118548,34450],{"class":114},[36,118550,117154],{"class":4500},[36,118552,117157],{"class":53},[19,118554,118555],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,118557,118559],{"className":28,"code":118558,"language":30,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,118560,118561],{"__ignoreMap":31},[36,118562,118563,118565,118567,118569,118571,118573],{"class":38,"line":39},[36,118564,109912],{"class":53},[36,118566,115],{"class":114},[36,118568,117166],{"class":53},[36,118570,95978],{"class":1997},[36,118572,115],{"class":114},[36,118574,116265],{"class":53},[19,118576,118577,118578,1296],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,118579,118343],{},[26,118581,118583],{"className":28,"code":118582,"language":30,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,118584,118585],{"__ignoreMap":31},[36,118586,118587,118589,118591,118593,118595,118597,118599],{"class":38,"line":39},[36,118588,109912],{"class":53},[36,118590,115],{"class":114},[36,118592,109917],{"class":53},[36,118594,33327],{"class":49},[36,118596,117185],{"class":53},[36,118598,33327],{"class":49},[36,118600,117190],{"class":53},[19,118602,118603],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,118605,118607],{"className":28,"code":118606,"language":30,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,118608,118609],{"__ignoreMap":31},[36,118610,118611,118613,118615,118617],{"class":38,"line":39},[36,118612,33327],{"class":49},[36,118614,117201],{"class":53},[36,118616,115],{"class":114},[36,118618,109940],{"class":53},[19,118620,118621],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,118623,118625],{"className":28,"code":118624,"language":30,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,118626,118627,118643],{"__ignoreMap":31},[36,118628,118629,118631,118633,118635,118637,118639,118641],{"class":38,"line":39},[36,118630,5556],{"class":114},[36,118632,103975],{"class":53},[36,118634,28556],{"class":114},[36,118636,34946],{"class":49},[36,118638,54],{"class":53},[36,118640,33327],{"class":49},[36,118642,117222],{"class":53},[36,118644,118645,118648,118650,118652,118654],{"class":38,"line":46},[36,118646,118647],{"class":53},"    mujoco.mj_step(",[36,118649,33327],{"class":49},[36,118651,117048],{"class":53},[36,118653,33327],{"class":49},[36,118655,117053],{"class":53},[19,118657,118658,118659,118662,118663,118665,118666,1296],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,118660,118661],{},"frame_skip=5","，所以外部调用一次 ",[33,118664,116346],{},"，内部实际执行 5 次 ",[33,118667,103689],{},[26,118669,118671],{"className":28,"code":118670,"language":30,"meta":31,"style":31},"self.steps += 1\n",[33,118672,118673],{"__ignoreMap":31},[36,118674,118675,118677,118679,118681],{"class":38,"line":39},[36,118676,33327],{"class":49},[36,118678,116175],{"class":53},[36,118680,1224],{"class":114},[36,118682,124],{"class":49},[19,118684,118685],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,118687,118689],{"className":28,"code":118688,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,118690,118691,118701],{"__ignoreMap":31},[36,118692,118693,118695,118697,118699],{"class":38,"line":39},[36,118694,113323],{"class":53},[36,118696,115],{"class":114},[36,118698,41373],{"class":49},[36,118700,117264],{"class":53},[36,118702,118703,118705,118707,118709],{"class":38,"line":46},[36,118704,113474],{"class":53},[36,118706,115],{"class":114},[36,118708,41373],{"class":49},[36,118710,117275],{"class":53},[19,118712,118713],{},"计算新的观测和奖励。",[26,118715,118717],{"className":28,"code":118716,"language":30,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,118718,118719],{"__ignoreMap":31},[36,118720,118721,118723,118725,118727,118729,118731],{"class":38,"line":39},[36,118722,114065],{"class":53},[36,118724,115],{"class":114},[36,118726,985],{"class":49},[36,118728,117318],{"class":53},[36,118730,508],{"class":114},[36,118732,117323],{"class":53},[19,118734,118735],{},"计算末端到目标的距离，并转换成 Python float。",[26,118737,118738],{"className":28,"code":116146,"language":30,"meta":31,"style":31},[33,118739,118740,118752],{"__ignoreMap":31},[36,118741,118742,118744,118746,118748,118750],{"class":38,"line":39},[36,118743,116153],{"class":53},[36,118745,115],{"class":114},[36,118747,116158],{"class":53},[36,118749,1507],{"class":114},[36,118751,116163],{"class":49},[36,118753,118754,118756,118758,118760,118762,118764,118766],{"class":38,"line":46},[36,118755,116168],{"class":53},[36,118757,115],{"class":114},[36,118759,41373],{"class":49},[36,118761,116175],{"class":53},[36,118763,1490],{"class":114},[36,118765,41373],{"class":49},[36,118767,116182],{"class":53},[19,118769,118770],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,118772,118774],{"className":28,"code":118773,"language":30,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,118775,118776,118789],{"__ignoreMap":31},[36,118777,118778,118781,118783,118785,118787],{"class":38,"line":39},[36,118779,118780],{"class":53},"info ",[36,118782,115],{"class":114},[36,118784,6979],{"class":53},[36,118786,117369],{"class":57},[36,118788,117372],{"class":53},[36,118790,118791,118793],{"class":38,"line":46},[36,118792,19564],{"class":114},[36,118794,117379],{"class":53},[19,118796,118797,118800],{},[33,118798,118799],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,118802,118804],{"className":28,"code":118803,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,118805,118806,118815],{"__ignoreMap":31},[36,118807,118808,118811,118813],{"class":38,"line":39},[36,118809,118810],{"class":53},"env ",[36,118812,115],{"class":114},[36,118814,117409],{"class":53},[36,118816,118817,118819,118821,118823,118825,118827,118829],{"class":38,"line":46},[36,118818,115869],{"class":53},[36,118820,115],{"class":114},[36,118822,117419],{"class":53},[36,118824,117033],{"class":1997},[36,118826,115],{"class":114},[36,118828,713],{"class":49},[36,118830,61],{"class":53},[19,118832,118833,118834,118837],{},"创建环境并重置。",[33,118835,118836],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,118839,118841],{"className":28,"code":118840,"language":30,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,118842,118843],{"__ignoreMap":31},[36,118844,118845,118847,118849],{"class":38,"line":39},[36,118846,109912],{"class":53},[36,118848,115],{"class":114},[36,118850,117488],{"class":53},[19,118852,118853],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118855,104789],{"id":104788},[19,118857,107955],{},[26,118859,118862],{"className":118860,"code":118861,"language":690,"meta":31},[688],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,118863,118861],{"__ignoreMap":31},[19,118865,118866],{},"这个环境已经具备强化学习环境的基本结构。",[19,118868,118869],{},"主函数里使用随机动作：",[26,118871,118872],{"className":28,"code":118840,"language":30,"meta":31,"style":31},[33,118873,118874],{"__ignoreMap":31},[36,118875,118876,118878,118880],{"class":38,"line":39},[36,118877,109912],{"class":53},[36,118879,115],{"class":114},[36,118881,117488],{"class":53},[19,118883,118884],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118886,104821],{"id":104820},[433,118888,118889,118892,118898,118907,118916,118925,118931],{},[436,118890,118891],{},"运行程序。",[436,118893,118894,118895,1296],{},"确认 ",[33,118896,118897],{},"obs.shape == (10,)",[436,118899,113650,118900,118903,118904,1296],{},[33,118901,118902],{},"env.action_space","，应类似 ",[33,118905,118906],{},"Box(-1.0, 1.0, (2,), float32)",[436,118908,108056,118909,118912,118913,1296],{},[33,118910,118911],{},"self.max_steps = 10","，确认环境会更快 ",[33,118914,118915],{},"truncated=True",[436,118917,104884,118918,104887,118921,118924],{},[33,118919,118920],{},"terminated = dist \u003C 0.05",[33,118922,118923],{},"dist \u003C 0.2","，观察是否更容易结束。",[436,118926,104884,118927,118930],{},[33,118928,118929],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[436,118932,118933,118934,118936,118937,118940],{},"在 ",[33,118935,118799],{}," 里加入 ",[33,118938,118939],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118942,104926],{"id":104925},[997,118944,118946],{"id":118945},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118948,118949,118950,118952],{},"Gymnasium 的 ",[33,118951,109605],{}," 返回 5 个值:",[26,118954,118956],{"className":28,"code":118955,"language":30,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,118957,118958],{"__ignoreMap":31},[36,118959,118960],{"class":38,"line":39},[36,118961,118955],{"class":53},[19,118963,118964],{},"不是旧 Gym 的 4 个值。",[997,118966,118968,118971],{"id":118967},"datactrl-action-维度错误",[33,118969,118970],{},"data.ctrl[:] = action"," 维度错误",[19,118973,104996],{},[26,118975,118977],{"className":28,"code":118976,"language":30,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,118978,118979,118990],{"__ignoreMap":31},[36,118980,118981,118983,118985,118987],{"class":38,"line":39},[36,118982,50],{"class":49},[36,118984,54],{"class":53},[36,118986,33327],{"class":49},[36,118988,118989],{"class":53},".model.nu)\n",[36,118991,118992,118994],{"class":38,"line":46},[36,118993,50],{"class":49},[36,118995,118996],{"class":53},"(action.shape)\n",[19,118998,118999],{},"两者必须匹配。",[997,119001,119003],{"id":119002},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,119005,104935],{},[26,119007,119009],{"className":28,"code":119008,"language":30,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,119010,119011],{"__ignoreMap":31},[36,119012,119013,119016,119018,119020,119022],{"class":38,"line":39},[36,119014,119015],{"class":53},"mujoco.mj_forward(",[36,119017,33327],{"class":49},[36,119019,117048],{"class":53},[36,119021,33327],{"class":49},[36,119023,117053],{"class":53},[997,119025,119027,119029],{"id":119026},"observation_space-维度和-obs-不一致",[33,119028,116069],{}," 维度和 obs 不一致",[19,119031,105048],{},[26,119033,119035],{"className":28,"code":119034,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,119036,119037,119047,119054],{"__ignoreMap":31},[36,119038,119039,119041,119043,119045],{"class":38,"line":39},[36,119040,113323],{"class":53},[36,119042,115],{"class":114},[36,119044,41373],{"class":49},[36,119046,117264],{"class":53},[36,119048,119049,119051],{"class":38,"line":46},[36,119050,50],{"class":49},[36,119052,119053],{"class":53},"(obs.shape)\n",[36,119055,119056,119058,119060,119062],{"class":38,"line":82},[36,119057,50],{"class":49},[36,119059,54],{"class":53},[36,119061,33327],{"class":49},[36,119063,119064],{"class":53},".observation_space.shape)\n",[19,119066,119067],{},"两者必须一致。本章观测是：",[26,119069,119072],{"className":119070,"code":119071,"language":690,"meta":31},[688],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,119073,119071],{"__ignoreMap":31},[997,119075,119077],{"id":119076},"action-超过范围","action 超过范围",[19,119079,119080],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,119082,119083],{"className":28,"code":118582,"language":30,"meta":31,"style":31},[33,119084,119085],{"__ignoreMap":31},[36,119086,119087,119089,119091,119093,119095,119097,119099],{"class":38,"line":39},[36,119088,109912],{"class":53},[36,119090,115],{"class":114},[36,119092,109917],{"class":53},[36,119094,33327],{"class":49},[36,119096,117185],{"class":53},[36,119098,33327],{"class":49},[36,119100,117190],{"class":53},[19,119102,119103,119104,1296],{},"这能避免无效动作直接写入 ",[33,119105,103550],{},[997,119107,119109],{"id":119108},"忘记返回-info","忘记返回 info",[19,119111,118949,119112,1292,119114,119116],{},[33,119113,72543],{},[33,119115,109605],{}," 都会返回 info：",[26,119118,119119],{"className":28,"code":115862,"language":30,"meta":31,"style":31},[33,119120,119121,119129],{"__ignoreMap":31},[36,119122,119123,119125,119127],{"class":38,"line":39},[36,119124,115869],{"class":53},[36,119126,115],{"class":114},[36,119128,115874],{"class":53},[36,119130,119131,119133,119135],{"class":38,"line":46},[36,119132,115879],{"class":53},[36,119134,115],{"class":114},[36,119136,115884],{"class":53},[19,119138,119139,119140,1296],{},"即使暂时没有额外信息，也返回 ",[33,119141,1944],{},[14,119143,119145],{"id":119144},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119147,119148],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[433,119150,119151,119154,119157,119160,119163,119166],{},[436,119152,119153],{},"更稳定的 reward。",[436,119155,119156],{},"合理的 episode 长度。",[436,119158,119159],{},"可重复的随机目标采样。",[436,119161,119162],{},"render 接口。",[436,119164,119165],{},"环境注册代码。",[436,119167,119168],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119170,119171],{},"如果只是自己写训练循环，最小形式是：",[26,119173,119175],{"className":28,"code":119174,"language":30,"meta":31,"style":31},"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",[33,119176,119177,119185,119201,119205,119221,119230,119239,119249],{"__ignoreMap":31},[36,119178,119179,119181,119183],{"class":38,"line":39},[36,119180,118810],{"class":53},[36,119182,115],{"class":114},[36,119184,117409],{"class":53},[36,119186,119187,119189,119191,119193,119195,119197,119199],{"class":38,"line":46},[36,119188,115869],{"class":53},[36,119190,115],{"class":114},[36,119192,117419],{"class":53},[36,119194,117033],{"class":1997},[36,119196,115],{"class":114},[36,119198,713],{"class":49},[36,119200,61],{"class":53},[36,119202,119203],{"class":38,"line":82},[36,119204,546],{"emptyLinePlaceholder":545},[36,119206,119207,119209,119211,119213,119215,119217,119219],{"class":38,"line":88},[36,119208,5556],{"class":114},[36,119210,103975],{"class":53},[36,119212,28556],{"class":114},[36,119214,34946],{"class":49},[36,119216,54],{"class":53},[36,119218,8937],{"class":49},[36,119220,33290],{"class":53},[36,119222,119223,119226,119228],{"class":38,"line":195},[36,119224,119225],{"class":53},"    action ",[36,119227,115],{"class":114},[36,119229,117488],{"class":53},[36,119231,119232,119235,119237],{"class":38,"line":1517},[36,119233,119234],{"class":53},"    obs, reward, terminated, truncated, info ",[36,119236,115],{"class":114},[36,119238,115884],{"class":53},[36,119240,119241,119243,119245,119247],{"class":38,"line":2421},[36,119242,5632],{"class":114},[36,119244,117554],{"class":53},[36,119246,1441],{"class":114},[36,119248,117559],{"class":53},[36,119250,119251,119254,119256],{"class":38,"line":2446},[36,119252,119253],{"class":53},"        obs, info ",[36,119255,115],{"class":114},[36,119257,115874],{"class":53},[14,119259,119261],{"id":119260},"_9本章小结","9.本章小结",[19,119263,119264],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,119266,119269],{"className":119267,"code":119268,"language":690,"meta":31},[688],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,119270,119268],{"__ignoreMap":31},[19,119272,119273],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2602,119275,119276],{},"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":31,"searchDepth":46,"depth":46,"links":119278},[119279,119280,119281,119288,119292,119293,119294,119304,119305],{"id":103122,"depth":46,"text":103123},{"id":103244,"depth":46,"text":103245},{"id":103518,"depth":46,"text":103519,"children":119282},[119283,119285,119287],{"id":116093,"depth":82,"text":119284},"terminated 和 truncated 的区别",{"id":116196,"depth":82,"text":119286},"observation_space 和 action_space",{"id":116323,"depth":82,"text":116324},{"id":103726,"depth":46,"text":103727,"children":119289},[119290,119291],{"id":104045,"depth":82,"text":104045},{"id":104181,"depth":82,"text":104181},{"id":104788,"depth":46,"text":104789},{"id":104820,"depth":46,"text":104821},{"id":104925,"depth":46,"text":104926,"children":119295},[119296,119297,119299,119300,119302,119303],{"id":118945,"depth":82,"text":118946},{"id":118967,"depth":82,"text":119298},"data.ctrl[:] = action 维度错误",{"id":119002,"depth":82,"text":119003},{"id":119026,"depth":82,"text":119301},"observation_space 维度和 obs 不一致",{"id":119076,"depth":82,"text":119077},{"id":119108,"depth":82,"text":119109},{"id":119144,"depth":46,"text":119145},{"id":119260,"depth":46,"text":119261},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115846,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119312,"title":119313,"body":119314,"description":119737,"extension":2631,"meta":119738,"navigation":545,"path":119739,"seo":119740,"stem":119741,"__hash__":119742},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119315,"toc":119727},[119316,119320,119323,119326,119346,119352,119358,119368,119371,119374,119394,119397,119401,119404,119410,119413,119427,119430,119433,119507,119510,119516,119519,119542,119545,119595,119598,119604,119607,119610,119613,119632,119635,119641,119644,119647,119650,119670,119673,119676,119679,119724],[10,119317,119319],{"id":119318},"mujoco-学习","MuJoCo 学习",[19,119321,119322],{},"初版",[19,119324,119325],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[433,119327,119328,119331,119334,119343],{},[436,119329,119330],{},"MuJoCo 模型文件在描述什么。",[436,119332,119333],{},"Python 代码怎样读取和推进仿真。",[436,119335,119336,273,119338,273,119340,119342],{},[33,119337,106502],{},[33,119339,106832],{},[33,119341,106835],{}," 这些数组为什么重要。",[436,119344,119345],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119347,119348,119349,119351],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,119350,103501],{}," 官方 Python bindings。",[19,119353,119354,119355,119357],{},"注意：本文禁止使用 ",[33,119356,103487],{},"。所有示例均使用：",[26,119359,119360],{"className":28,"code":104051,"language":30,"meta":31,"style":31},[33,119361,119362],{"__ignoreMap":31},[36,119363,119364,119366],{"class":38,"line":39},[36,119365,537],{"class":114},[36,119367,103775],{"class":53},[14,119369,119370],{"id":119370},"适合谁阅读",[19,119372,119373],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[433,119375,119376,119379,119382,119385],{},[436,119377,119378],{},"没学过 MuJoCo，只会一点 Python。",[436,119380,119381],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[436,119383,119384],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[436,119386,119387,119388,119390,119391,119393],{},"以前接触过 ",[33,119389,103487],{},"，现在想迁移到官方 ",[33,119392,103495],{}," Python bindings。",[19,119395,119396],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119398,119400],{"id":119399},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119402,119403],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,119405,119408],{"className":119406,"code":119407,"language":690,"meta":31},[688],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,119409,119407],{"__ignoreMap":31},[19,119411,119412],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[433,119414,119415,119418,119421,119424],{},[436,119416,119417],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[436,119419,119420],{},"快速测试控制算法，不必一开始就上真实机器人。",[436,119422,119423],{},"生成强化学习环境。",[436,119425,119426],{},"采集状态、动作、图像、奖励等训练数据。",[14,119428,119429],{"id":119429},"学习前的心智模型",[19,119431,119432],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[206,119434,119435,119447],{},[209,119436,119437],{},[212,119438,119439,119442,119445],{},[215,119440,119441],{"align":26253},"部分",[215,119443,119444],{"align":26253},"负责什么",[215,119446,23705],{"align":26253},[225,119448,119449,119460,119472,119484,119496],{},[212,119450,119451,119454,119457],{},[230,119452,119453],{"align":26253},"MJCF XML",[230,119455,119456],{"align":26253},"定义世界和机器人结构",[230,119458,119459],{"align":26253},"地面、盒子、关节、电机、摄像头",[212,119461,119462,119466,119469],{},[230,119463,119464],{"align":26253},[33,119465,103184],{},[230,119467,119468],{"align":26253},"编译后的静态模型",[230,119470,119471],{"align":26253},"有几个关节、有几个电机、时间步长是多少",[212,119473,119474,119478,119481],{},[230,119475,119476],{"align":26253},[33,119477,103194],{},[230,119479,119480],{"align":26253},"运行中的动态状态",[230,119482,119483],{"align":26253},"当前时间、位置、速度、电机输入",[212,119485,119486,119490,119493],{},[230,119487,119488],{"align":26253},[33,119489,103689],{},[230,119491,119492],{"align":26253},"推进一步物理仿真",[230,119494,119495],{"align":26253},"根据重力、力、碰撞更新状态",[212,119497,119498,119501,119504],{},[230,119499,119500],{"align":26253},"Viewer \u002F Renderer",[230,119502,119503],{"align":26253},"把仿真显示出来",[230,119505,119506],{"align":26253},"打开窗口或保存图片",[19,119508,119509],{},"一句话总结：",[26,119511,119514],{"className":119512,"code":119513,"language":690,"meta":31},[688],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,119515,119513],{"__ignoreMap":31},[19,119517,119518],{},"参考来源：",[3680,119520,119521,119528,119535],{},[436,119522,119523,119524],{},"MuJoCo Python 官方文档：",[2923,119525,119526],{"href":119526,"rel":119527},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26381],[436,119529,119530,119531],{},"MuJoCo XML Reference：",[2923,119532,119533],{"href":119533,"rel":119534},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26381],[436,119536,119537,119538],{},"MuJoCo Overview：",[2923,119539,119540],{"href":119540,"rel":119541},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26381],[14,119543,119544],{"id":119544},"章节目录",[433,119546,119547,119553,119559,119565,119571,119577,119583,119589],{},[436,119548,119549],{},[2923,119550,119552],{"href":119551},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[436,119554,119555],{},[2923,119556,119558],{"href":119557},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[436,119560,119561],{},[2923,119562,119564],{"href":119563},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[436,119566,119567],{},[2923,119568,119570],{"href":119569},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[436,119572,119573],{},[2923,119574,119576],{"href":119575},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[436,119578,119579],{},[2923,119580,119582],{"href":119581},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[436,119584,119585],{},[2923,119586,119588],{"href":119587},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[436,119590,119591],{},[2923,119592,119594],{"href":119593},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119596,119597],{"id":119597},"推荐学习路线",[26,119599,119602],{"className":119600,"code":119601,"language":690,"meta":31},[688],"环境安装\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",[33,119603,119601],{"__ignoreMap":31},[19,119605,119606],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119608,119609],{"id":119609},"建议的目录结构",[19,119611,119612],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,119614,119616],{"className":26338,"code":119615,"language":26340,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,119617,119618,119626],{"__ignoreMap":31},[36,119619,119620,119622,119624],{"class":38,"line":39},[36,119621,103740],{"class":4500},[36,119623,31726],{"class":49},[36,119625,103745],{"class":57},[36,119627,119628,119630],{"class":38,"line":46},[36,119629,103750],{"class":49},[36,119631,103745],{"class":57},[19,119633,119634],{},"每一章的代码都单独保存：",[26,119636,119639],{"className":119637,"code":119638,"language":690,"meta":31},[688],"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",[33,119640,119638],{"__ignoreMap":31},[19,119642,119643],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119645,119646],{"id":119646},"学习方法",[19,119648,119649],{},"每章建议按这个顺序操作：",[433,119651,119652,119655,119658,119661,119664,119667],{},[436,119653,119654],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[436,119656,119657],{},"复制最小可运行代码，保存成指定文件。",[436,119659,119660],{},"运行代码，确认没有报错。",[436,119662,119663],{},"对照“运行结果说明”理解输出。",[436,119665,119666],{},"做“验证步骤”，主动改一两个参数。",[436,119668,119669],{},"遇到报错先看“常见错误与解决方案”。",[19,119671,119672],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119674,119675],{"id":119675},"全局排错顺序",[19,119677,119678],{},"遇到问题时，按下面顺序查：",[433,119680,119681,119687,119693,119698,119701,119704,119711,119721],{},[436,119682,119683,119684],{},"Python 环境是否激活：",[33,119685,119686],{},"which python",[436,119688,119689,119690],{},"MuJoCo 是否能导入：",[33,119691,119692],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[436,119694,119695,119696],{},"是否误装了 ",[33,119697,103487],{},[436,119699,119700],{},"XML 标签是否闭合、属性是否拼写正确",[436,119702,119703],{},"actuator 引用的 joint 名字是否存在",[436,119705,119706,119708,119709],{},[33,119707,103550],{}," 的长度是否等于 ",[33,119710,104631],{},[436,119712,108056,119713,85020,119715,119717,119718],{},[33,119714,106502],{},[33,119716,106832],{}," 后是否调用了 ",[33,119719,119720],{},"mujoco.mj_forward",[436,119722,119723],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2602,119725,119726],{},"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":31,"searchDepth":46,"depth":46,"links":119728},[119729,119730,119731,119732,119733,119734,119735,119736],{"id":119370,"depth":46,"text":119370},{"id":119399,"depth":46,"text":119400},{"id":119429,"depth":46,"text":119429},{"id":119544,"depth":46,"text":119544},{"id":119597,"depth":46,"text":119597},{"id":119609,"depth":46,"text":119609},{"id":119646,"depth":46,"text":119646},{"id":119675,"depth":46,"text":119675},"仿真搭建。",{"category":25895},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119313,"description":119737},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119744,"title":119745,"body":119746,"description":2630,"extension":2631,"meta":120201,"navigation":545,"path":120202,"seo":120203,"stem":120204,"__hash__":120205},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119747,"toc":120199},[119748,119751,119754,119760,120196],[10,119749,119745],{"id":119750},"_1-最常用的基本操作更新",[19,119752,119753],{},"装linux系统教程：",[19,119755,119756],{},[2923,119757,119758],{"href":119758,"rel":119759},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26381],[26,119761,119765],{"className":119762,"code":119763,"language":119764,"meta":31,"style":31},"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",[33,119766,119767,119772,119777,119786,119791,119800,119805,119825,119830,119841,119846,119855,119860,119888,119893,119912,119917,119936,119940,119945,119961,119965,119970,120000,120004,120009,120025,120029,120034,120049,120053,120058,120074,120078,120083,120095,120107,120111,120116,120133,120137,120142,120160,120164,120169,120178,120182,120187],{"__ignoreMap":31},[36,119768,119769],{"class":38,"line":39},[36,119770,119771],{"class":42},"#更新相关的知识\n",[36,119773,119774],{"class":38,"line":46},[36,119775,119776],{"class":42},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,119778,119779,119781,119784],{"class":38,"line":82},[36,119780,27093],{"class":4500},[36,119782,119783],{"class":57}," apt",[36,119785,28754],{"class":57},[36,119787,119788],{"class":38,"line":88},[36,119789,119790],{"class":42},"# 升级所有可更新的软件包（不删除旧包）\n",[36,119792,119793,119795,119797],{"class":38,"line":195},[36,119794,27093],{"class":4500},[36,119796,119783],{"class":57},[36,119798,119799],{"class":57}," upgrade\n",[36,119801,119802],{"class":38,"line":1517},[36,119803,119804],{"class":42},"#更新和升级软件包\n",[36,119806,119807,119809,119811,119814,119816,119818,119820,119823],{"class":38,"line":2421},[36,119808,27093],{"class":4500},[36,119810,119783],{"class":57},[36,119812,119813],{"class":57}," update",[36,119815,28703],{"class":53},[36,119817,27093],{"class":4500},[36,119819,119783],{"class":57},[36,119821,119822],{"class":57}," upgrade",[36,119824,103456],{"class":49},[36,119826,119827],{"class":38,"line":2446},[36,119828,119829],{"class":42},"#列出可更新的软件包及版本信息\n",[36,119831,119832,119835,119838],{"class":38,"line":2469},[36,119833,119834],{"class":4500},"apt",[36,119836,119837],{"class":57}," list",[36,119839,119840],{"class":49}," --upgradable\n",[36,119842,119843],{"class":38,"line":2492},[36,119844,119845],{"class":42},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,119847,119848,119850,119852],{"class":38,"line":4150},[36,119849,27093],{"class":4500},[36,119851,119783],{"class":57},[36,119853,119854],{"class":57}," full-upgrade\n",[36,119856,119857],{"class":38,"line":4155},[36,119858,119859],{"class":42},"#设置指定版本\n",[36,119861,119862,119864,119866,119868,119870,119873,119875,119877,119879,119881,119884,119886],{"class":38,"line":4161},[36,119863,27093],{"class":4500},[36,119865,119783],{"class":57},[36,119867,26350],{"class":57},[36,119869,31412],{"class":114},[36,119871,119872],{"class":57},"package_nam",[36,119874,2770],{"class":53},[36,119876,3633],{"class":114},[36,119878,115],{"class":57},[36,119880,1507],{"class":114},[36,119882,119883],{"class":57},"version_numbe",[36,119885,3346],{"class":53},[36,119887,53801],{"class":114},[36,119889,119890],{"class":38,"line":4166},[36,119891,119892],{"class":42},"#只安装软件包不升级\n",[36,119894,119895,119897,119899,119901,119903,119905,119907,119909],{"class":38,"line":4180},[36,119896,27093],{"class":4500},[36,119898,119783],{"class":57},[36,119900,26350],{"class":57},[36,119902,31412],{"class":114},[36,119904,119872],{"class":57},[36,119906,2770],{"class":53},[36,119908,3633],{"class":114},[36,119910,119911],{"class":49}," --no-upgrade\n",[36,119913,119914],{"class":38,"line":4185},[36,119915,119916],{"class":42},"#只升级，不存在就不安装\n",[36,119918,119919,119921,119923,119925,119927,119929,119931,119933],{"class":38,"line":4191},[36,119920,27093],{"class":4500},[36,119922,119783],{"class":57},[36,119924,26350],{"class":57},[36,119926,31412],{"class":114},[36,119928,119872],{"class":57},[36,119930,2770],{"class":53},[36,119932,3633],{"class":114},[36,119934,119935],{"class":49}," --only-upgrade\n",[36,119937,119938],{"class":38,"line":4212},[36,119939,546],{"emptyLinePlaceholder":545},[36,119941,119942],{"class":38,"line":4217},[36,119943,119944],{"class":42},"#安装指定的软件命令\n",[36,119946,119947,119949,119951,119953,119955,119957,119959],{"class":38,"line":4231},[36,119948,27093],{"class":4500},[36,119950,119783],{"class":57},[36,119952,26350],{"class":57},[36,119954,31412],{"class":114},[36,119956,119872],{"class":57},[36,119958,2770],{"class":53},[36,119960,53801],{"class":114},[36,119962,119963],{"class":38,"line":4236},[36,119964,546],{"emptyLinePlaceholder":545},[36,119966,119967],{"class":38,"line":4264},[36,119968,119969],{"class":42},"#安装多个软件包\n",[36,119971,119972,119974,119976,119978,119980,119983,119986,119988,119990,119993,119995,119997],{"class":38,"line":4269},[36,119973,27093],{"class":4500},[36,119975,119783],{"class":57},[36,119977,26350],{"class":57},[36,119979,31412],{"class":114},[36,119981,119982],{"class":57},"package_",[36,119984,119985],{"class":114},"1>",[36,119987,31412],{"class":114},[36,119989,119982],{"class":57},[36,119991,119992],{"class":114},"2>",[36,119994,31412],{"class":114},[36,119996,119982],{"class":57},[36,119998,119999],{"class":114},"3>\n",[36,120001,120002],{"class":38,"line":4286},[36,120003,546],{"emptyLinePlaceholder":545},[36,120005,120006],{"class":38,"line":4291},[36,120007,120008],{"class":42},"#更新指定的软件命令\n",[36,120010,120011,120013,120015,120017,120019,120021,120023],{"class":38,"line":4296},[36,120012,27093],{"class":4500},[36,120014,119783],{"class":57},[36,120016,119813],{"class":57},[36,120018,31412],{"class":114},[36,120020,119872],{"class":57},[36,120022,2770],{"class":53},[36,120024,53801],{"class":114},[36,120026,120027],{"class":38,"line":4301},[36,120028,546],{"emptyLinePlaceholder":545},[36,120030,120031],{"class":38,"line":4315},[36,120032,120033],{"class":42},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,120035,120036,120038,120041,120043,120045,120047],{"class":38,"line":4320},[36,120037,119834],{"class":4500},[36,120039,120040],{"class":57}," show",[36,120042,31412],{"class":114},[36,120044,119872],{"class":57},[36,120046,2770],{"class":53},[36,120048,53801],{"class":114},[36,120050,120051],{"class":38,"line":5109},[36,120052,546],{"emptyLinePlaceholder":545},[36,120054,120055],{"class":38,"line":5123},[36,120056,120057],{"class":42},"#删除软件包命令\n",[36,120059,120060,120062,120064,120066,120068,120070,120072],{"class":38,"line":5131},[36,120061,27093],{"class":4500},[36,120063,119783],{"class":57},[36,120065,28592],{"class":57},[36,120067,31412],{"class":114},[36,120069,119872],{"class":57},[36,120071,2770],{"class":53},[36,120073,53801],{"class":114},[36,120075,120076],{"class":38,"line":5136},[36,120077,546],{"emptyLinePlaceholder":545},[36,120079,120080],{"class":38,"line":5142},[36,120081,120082],{"class":42},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,120084,120085,120087,120089,120092],{"class":38,"line":5148},[36,120086,27093],{"class":4500},[36,120088,119783],{"class":57},[36,120090,120091],{"class":57}," autoremove",[36,120093,120094],{"class":42},"  # 删除不再需要的依赖和库文件\n",[36,120096,120097,120099,120101,120104],{"class":38,"line":5153},[36,120098,27093],{"class":4500},[36,120100,119783],{"class":57},[36,120102,120103],{"class":57}," clean",[36,120105,120106],{"class":42},"       # 清理下载的缓存包\n",[36,120108,120109],{"class":38,"line":10475},[36,120110,546],{"emptyLinePlaceholder":545},[36,120112,120113],{"class":38,"line":10499},[36,120114,120115],{"class":42},"#移除软件包及配置文件\n",[36,120117,120118,120120,120122,120125,120127,120129,120131],{"class":38,"line":10504},[36,120119,27093],{"class":4500},[36,120121,119783],{"class":57},[36,120123,120124],{"class":57}," purge",[36,120126,31412],{"class":114},[36,120128,119872],{"class":57},[36,120130,2770],{"class":53},[36,120132,53801],{"class":114},[36,120134,120135],{"class":38,"line":10510},[36,120136,546],{"emptyLinePlaceholder":545},[36,120138,120139],{"class":38,"line":10537},[36,120140,120141],{"class":42},"#查找软件包命令\n",[36,120143,120144,120146,120148,120151,120153,120156,120158],{"class":38,"line":10542},[36,120145,27093],{"class":4500},[36,120147,119783],{"class":57},[36,120149,120150],{"class":57}," search",[36,120152,31412],{"class":114},[36,120154,120155],{"class":57},"keywor",[36,120157,2997],{"class":53},[36,120159,53801],{"class":114},[36,120161,120162],{"class":38,"line":10548},[36,120163,546],{"emptyLinePlaceholder":545},[36,120165,120166],{"class":38,"line":10560},[36,120167,120168],{"class":42},"#列出所有已安装的包\n",[36,120170,120171,120173,120175],{"class":38,"line":10572},[36,120172,119834],{"class":4500},[36,120174,119837],{"class":57},[36,120176,120177],{"class":49}," --installed\n",[36,120179,120180],{"class":38,"line":10584},[36,120181,546],{"emptyLinePlaceholder":545},[36,120183,120184],{"class":38,"line":12241},[36,120185,120186],{"class":42},"#列出所有已安装的包的版本信息\n",[36,120188,120189,120191,120193],{"class":38,"line":12266},[36,120190,119834],{"class":4500},[36,120192,119837],{"class":57},[36,120194,120195],{"class":49}," --all-versions\n",[2602,120197,120198],{},"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":31,"searchDepth":46,"depth":46,"links":120200},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119745,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120207,"title":120208,"body":120209,"description":2630,"extension":2631,"meta":120950,"navigation":545,"path":120951,"seo":120952,"stem":120953,"__hash__":120954},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120210,"toc":120937},[120211,120214,120218,120221,120227,120231,120235,120241,120246,120251,120256,120261,120266,120269,120272,120275,120278,120282,120285,120290,120293,120298,120301,120306,120313,120316,120319,120322,120325,120328,120339,120343,120347,120352,120357,120361,120366,120370,120375,120379,120383,120388,120391,120436,120441,120445,120449,120454,120460,120465,120475,120480,120490,120495,120500,120527,120531,120534,120539,120542,120567,120571,120576,120579,120584,120589,120609,120614,120617,120632,120636,120689,120692,120697,120701,120704,120719,120722,120725,120730,120734,120738,120741,120745,120749,120752,120757,120762,120766,120773,120781,120784,120791,120796,120801,120804,120809,120816,120821,120828,120832,120834,120839,120843,120846,120849,120854,120857,120862,120865,120870,120875,120880,120884,120889,120893,120934],[10,120212,120208],{"id":120213},"_2-linux装机教程",[14,120215,120217],{"id":120216},"_21-实体机","2.1 实体机",[19,120219,120220],{},"使用清华源：（Ubuntu24.04）",[19,120222,120223],{},[2923,120224,120225],{"href":120225,"rel":120226},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26381],[14,120228,120230],{"id":120229},"_22-普通虚拟机","2.2 普通虚拟机",[997,120232,120234],{"id":120233},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120236,120237],{},[2923,120238,120239],{"href":120239,"rel":120240},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26381],[19,120242,120243],{},[4000,120244],{"alt":31,"src":120245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120247,120248],{},[4000,120249],{"alt":31,"src":120250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120252,120253],{},[4000,120254],{"alt":31,"src":120255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120257,120258],{},[4000,120259],{"alt":31,"src":120260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120262,120263],{},[4000,120264],{"alt":31,"src":120265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120267,120268],{},"内存4G（4096MB）；",[19,120270,120271],{},"CPU给4个核；",[19,120273,120274],{},"硬盘动态分配60G；",[19,120276,120277],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[997,120279,120281],{"id":120280},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120283,120284],{},"按照1.1的步骤下载Ubuntu",[19,120286,120287],{},[4000,120288],{"alt":31,"src":120289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120291,120292],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120294,120295],{},[4000,120296],{"alt":31,"src":120297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120299,120300],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120302,120303],{},[4000,120304],{"alt":31,"src":120305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120307,120308,120309,120312],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2839,120310,120311],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120314,120315],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120317,120318],{},"将改动写入磁盘吗 继续",[19,120320,120321],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120323,120324],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120326,120327],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120329,120330,120331,120334,120335,120338],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2839,120332,120333],{},"除了"," 选不发送系统信息与不升级之外， ",[2839,120336,120337],{},"其它"," 都跳过或前进）",[997,120340,120342],{"id":120341},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24515,120344,120346],{"id":120345},"_2231-全屏","2.2.3.1 全屏",[19,120348,120349],{},[4000,120350],{"alt":31,"src":120351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120353,120354],{},[4000,120355],{"alt":31,"src":120356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24515,120358,120360],{"id":120359},"_2232-文件交换","2.2.3.2 文件交换",[19,120362,120363],{},[4000,120364],{"alt":31,"src":120365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24515,120367,120369],{"id":120368},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120371,120372],{},[4000,120373],{"alt":31,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120376,120378],{"id":120377},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[997,120380,120382],{"id":120381},"_231-简介与优缺点","2.3.1 简介与优缺点",[433,120384,120385],{},[436,120386,120387],{},"什么情况下推荐？",[19,120389,120390],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[433,120392,120393],{"start":46},[436,120394,120395,120396],{},"优缺点：",[433,120397,120398,120428],{},[436,120399,120400,120401],{},"优点：",[433,120402,120403,120406,120413,120416,120419,120422,120425],{},[436,120404,120405],{},"WSL2是最好的Linux发行版;(bushi)",[436,120407,120408,120409,120412],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2839,120410,120411],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[436,120414,120415],{},"非常方便调用USB设备，可以USB直通;",[436,120417,120418],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[436,120420,120421],{},"非常方便Win与WSL2互相传文件等协同操作;",[436,120423,120424],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[436,120426,120427],{},"非常方便使用Windows的VScode远程开发;",[436,120429,120430,120431],{},"缺点：",[433,120432,120433],{},[436,120434,120435],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120437,120438],{},[4000,120439],{"alt":31,"src":120440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[997,120442,120444],{"id":120443},"_232-安装教程","2.3.2 安装教程",[24515,120446,120448],{"id":120447},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[433,120450,120451],{},[436,120452,120453],{},"方法一(图形界面)",[19,120455,120456,120457,27135],{},"用Win+R输入",[33,120458,120459],{},"appwiz.cpl",[19,120461,120462],{},[4000,120463],{"alt":31,"src":120464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120466,120467,120468,120471,120472,28985],{},"点击OK进入 ",[2839,120469,120470],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2839,120473,120474],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120476,120477],{},[4000,120478],{"alt":31,"src":120479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120481,120482,120483,1292,120486,120489],{},"选择 ",[2839,120484,120485],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2839,120487,120488],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120491,120492],{},[4000,120493],{"alt":31,"src":120494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[433,120496,120497],{"start":46},[436,120498,120499],{},"方法二(命令行)",[26,120501,120505],{"className":120502,"code":120503,"language":120504,"meta":31,"style":31},"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",[33,120506,120507,120512,120517,120522],{"__ignoreMap":31},[36,120508,120509],{"class":38,"line":39},[36,120510,120511],{},"# 开启 Linux 子系统\n",[36,120513,120514],{"class":38,"line":46},[36,120515,120516],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,120518,120519],{"class":38,"line":82},[36,120520,120521],{},"# 开启虚拟机平台\n",[36,120523,120524],{"class":38,"line":88},[36,120525,120526],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24515,120528,120530],{"id":120529},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120532,120533],{},"用管理员权限打开powershell",[19,120535,120536],{},[4000,120537],{"alt":31,"src":120538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120540,120541],{},"升级WSL并设置默认版本为WSL2",[26,120543,120545],{"className":120502,"code":120544,"language":120504,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,120546,120547,120552,120557,120562],{"__ignoreMap":31},[36,120548,120549],{"class":38,"line":39},[36,120550,120551],{},"# 更新 wsl\n",[36,120553,120554],{"class":38,"line":46},[36,120555,120556],{},"wsl --update\n",[36,120558,120559],{"class":38,"line":82},[36,120560,120561],{},"# 将 wsl 版本设置为 wsl2\n",[36,120563,120564],{"class":38,"line":88},[36,120565,120566],{},"wsl --set-default-version 2\n",[24515,120568,120570],{"id":120569},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[433,120572,120573],{},[436,120574,120575],{},"方式一(商店下载)",[19,120577,120578],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120580,120581],{},[4000,120582],{"alt":31,"src":120583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[433,120585,120586],{"start":46},[436,120587,120588],{},"方式二(命令行安装)",[26,120590,120592],{"className":120502,"code":120591,"language":120504,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,120593,120594,120599,120604],{"__ignoreMap":31},[36,120595,120596],{"class":38,"line":39},[36,120597,120598],{},"# 列出可安装的 Linux 版本\n",[36,120600,120601],{"class":38,"line":46},[36,120602,120603],{},"#（需要科学手段）\n",[36,120605,120606],{"class":38,"line":82},[36,120607,120608],{},"wsl --list --online\n",[19,120610,120611],{},[4000,120612],{"alt":31,"src":120613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120615,120616],{},"选择对应发行版并安装",[26,120618,120620],{"className":120502,"code":120619,"language":120504,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,120621,120622,120627],{"__ignoreMap":31},[36,120623,120624],{"class":38,"line":39},[36,120625,120626],{},"# Ubuntu安装完毕后需要重启系统\n",[36,120628,120629],{"class":38,"line":46},[36,120630,120631],{},"wsl --install -d Ubuntu-24.04\n",[24515,120633,120635],{"id":120634},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,120637,120639],{"className":120502,"code":120638,"language":120504,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,120640,120641,120646,120651,120656,120661,120665,120669,120674,120679,120684],{"__ignoreMap":31},[36,120642,120643],{"class":38,"line":39},[36,120644,120645],{},"# 查看 wsl\n",[36,120647,120648],{"class":38,"line":46},[36,120649,120650],{},"wsl -l\n",[36,120652,120653],{"class":38,"line":82},[36,120654,120655],{},"# 查看 wsl 运行版本或模式\n",[36,120657,120658],{"class":38,"line":88},[36,120659,120660],{},"wsl -l -v\n",[36,120662,120663],{"class":38,"line":195},[36,120664,546],{"emptyLinePlaceholder":545},[36,120666,120667],{"class":38,"line":1517},[36,120668,546],{"emptyLinePlaceholder":545},[36,120670,120671],{"class":38,"line":2421},[36,120672,120673],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,120675,120676],{"class":38,"line":2446},[36,120677,120678],{},"wsl --set-version \u003Cdistro> 2\n",[36,120680,120681],{"class":38,"line":2469},[36,120682,120683],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,120685,120686],{"class":38,"line":2492},[36,120687,120688],{},"wsl --unregister \u003Cdistro>\n",[19,120690,120691],{},"输出Version为2即正常",[19,120693,120694],{},[4000,120695],{"alt":31,"src":120696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24515,120698,120700],{"id":120699},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120702,120703],{},"直接在Powershell里输入wsl命令进入子系统",[26,120705,120707],{"className":120502,"code":120706,"language":120504,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,120708,120709,120714],{"__ignoreMap":31},[36,120710,120711],{"class":38,"line":39},[36,120712,120713],{},"# 进入子系统\n",[36,120715,120716],{"class":38,"line":46},[36,120717,120718],{},"wsl\n",[19,120720,120721],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120723,120724],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120726,120727],{},[4000,120728],{"alt":31,"src":120729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[997,120731,120733],{"id":120732},"_233-配置各种环境","2.3.3 配置各种环境",[24515,120735,120737],{"id":120736},"_2331-换源","2.3.3.1 换源",[19,120739,120740],{},"(同实体机LINUX，往下找教程)",[24515,120742,120744],{"id":120743},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25427,120746,120748],{"id":120747},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120750,120751],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120753,120754],{},[4000,120755],{"alt":31,"src":120756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120758,120759],{},[4000,120760],{"alt":31,"src":120761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25427,120763,120765],{"id":120764},"_23322-cuda","2.3.3.2.2 CUDA",[19,120767,120768,120769],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2923,120770,120771],{"href":120771,"rel":120772},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26381],[19,120774,120775,120778],{},[4000,120776],{"alt":31,"src":120777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[4000,120779],{"alt":31,"src":120780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120782,120783],{},"在下方的网站，选择合适的版本。",[19,120785,120786,120787],{},"WSL2 专属 CUDA 指南：",[2923,120788,120789],{"href":120789,"rel":120790},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26381],[19,120792,120793],{},[2839,120794,120795],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120797,120798],{},[4000,120799],{"alt":31,"src":120800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120802,120803],{},"挨行敲一遍",[19,120805,120806],{},[4000,120807],{"alt":31,"src":120808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120810,120811,120812,120815],{},"敲完后，输入",[33,120813,120814],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120817,120818],{},[4000,120819],{"alt":31,"src":120820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120822,120823,120824,120827],{},"（请详看下方教程的",[2839,120825,120826],{},"安装CUDA的配置环境来看","如何配置环境）",[25427,120829,120831],{"id":120830},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120833,120740],{},[19,120835,120836],{},[4000,120837],{"alt":31,"src":120838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24515,120840,120842],{"id":120841},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120844,120845],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120847,120848],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120850,120851],{},[4000,120852],{"alt":31,"src":120853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120855,120856],{},"连接WSL2",[19,120858,120859],{},[4000,120860],{"alt":31,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120863,120864],{},"远程开发成功。",[19,120866,120867],{},[4000,120868],{"alt":31,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120871,120872],{},[4000,120873],{"alt":31,"src":120874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120876,120877],{},[4000,120878],{"alt":31,"src":120879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24515,120881,120883],{"id":120882},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120885,120886],{},[4000,120887],{"alt":31,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24515,120890,120892],{"id":120891},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,120894,120896],{"className":119762,"code":120895,"language":119764,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,120897,120898,120906,120914,120925,120929],{"__ignoreMap":31},[36,120899,120900,120902,120904],{"class":38,"line":39},[36,120901,27093],{"class":4500},[36,120903,119783],{"class":57},[36,120905,28754],{"class":57},[36,120907,120908,120910,120912],{"class":38,"line":46},[36,120909,27093],{"class":4500},[36,120911,119783],{"class":57},[36,120913,119799],{"class":57},[36,120915,120916,120918,120920,120922],{"class":38,"line":82},[36,120917,27093],{"class":4500},[36,120919,119783],{"class":57},[36,120921,26350],{"class":57},[36,120923,120924],{"class":57}," mesa-utils\n",[36,120926,120927],{"class":38,"line":88},[36,120928,546],{"emptyLinePlaceholder":545},[36,120930,120931],{"class":38,"line":195},[36,120932,120933],{"class":42},"#然后重启wsl2即可\n",[2602,120935,120936],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":46,"depth":46,"links":120938},[120939,120940,120945],{"id":120216,"depth":46,"text":120217},{"id":120229,"depth":46,"text":120230,"children":120941},[120942,120943,120944],{"id":120233,"depth":82,"text":120234},{"id":120280,"depth":82,"text":120281},{"id":120341,"depth":82,"text":120342},{"id":120377,"depth":46,"text":120378,"children":120946},[120947,120948,120949],{"id":120381,"depth":82,"text":120382},{"id":120443,"depth":82,"text":120444},{"id":120732,"depth":82,"text":120733},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120208,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120956,"title":120957,"body":120958,"description":2630,"extension":2631,"meta":123892,"navigation":545,"path":123893,"seo":123894,"stem":123895,"__hash__":123896},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120959,"toc":123864},[120960,120963,120967,120973,120977,120983,120987,121175,121178,121183,121187,121191,121194,121197,121203,121208,121211,121214,121219,121252,121257,121261,121338,121341,121346,121350,121353,121392,121395,121404,121422,121427,121434,121551,121556,121559,121586,121591,121595,121604,121654,121661,121665,121668,121682,121689,121723,121728,121732,121755,121758,121763,121767,121770,121773,121776,121818,121822,121825,121828,121869,121873,121877,121880,121885,121890,121893,121916,121919,121927,121932,121935,121940,121945,121948,121953,121957,121962,121985,121990,122052,122060,122065,122070,122073,122078,122081,122086,122091,122109,122114,122120,122125,122139,122143,122146,122149,122152,122195,122198,122203,122304,122307,122312,122316,122320,122357,122361,122365,122369,122415,122419,122464,122468,122475,122483,122537,122540,122617,122620,122643,122647,122650,122655,122660,122668,122671,122676,122681,122686,122689,122694,122703,122706,122711,122714,122785,122790,122793,122798,122801,122806,122809,122814,122817,122822,122827,122830,122904,122907,122920,122925,122928,122942,122945,122974,122979,123008,123011,123016,123020,123025,123034,123037,123042,123045,123050,123053,123056,123061,123064,123069,123074,123077,123082,123085,123210,123215,123245,123248,123253,123258,123275,123278,123321,123324,123351,123356,123369,123512,123516,123521,123535,123538,123589,123592,123622,123625,123641,123646,123660,123663,123730,123735,123744,123749,123752,123764,123769,123776,123800,123803,123808,123811,123830,123835,123842,123854,123861],[10,120961,120957],{"id":120962},"_3-安装必备配置",[14,120964,120966],{"id":120965},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,120968,120971],{"className":120969,"code":120970,"language":690},[688],"  打开下方网站（注意，该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",[33,120972,120970],{"__ignoreMap":31},[997,120974,120976],{"id":120975},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,120978,120981],{"className":120979,"code":120980,"language":690},[688],"  输入以下命令\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",[33,120982,120980],{"__ignoreMap":31},[997,120984,120986],{"id":120985},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,120988,120992],{"className":120989,"code":120990,"language":120991,"meta":31,"style":31},"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",[33,120993,120994,121002,121013,121025,121039,121043,121053,121058,121062,121066,121071,121075,121087,121091,121096,121100,121111,121115,121131,121135,121146,121150,121155,121159,121167],{"__ignoreMap":31},[36,120995,120996,120998,121000],{"class":38,"line":39},[36,120997,27093],{"class":4500},[36,120999,119783],{"class":57},[36,121001,28754],{"class":57},[36,121003,121004,121006,121008,121010],{"class":38,"line":46},[36,121005,27093],{"class":4500},[36,121007,119783],{"class":57},[36,121009,26350],{"class":57},[36,121011,121012],{"class":57}," vim\n",[36,121014,121015,121017,121020,121022],{"class":38,"line":82},[36,121016,27093],{"class":4500},[36,121018,121019],{"class":57}," rm",[36,121021,27839],{"class":49},[36,121023,121024],{"class":57}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,121026,121027,121029,121031,121033,121036],{"class":38,"line":88},[36,121028,27093],{"class":4500},[36,121030,121019],{"class":57},[36,121032,27839],{"class":49},[36,121034,121035],{"class":57}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,121037,121038],{"class":49},"**\n",[36,121040,121041],{"class":38,"line":195},[36,121042,546],{"emptyLinePlaceholder":545},[36,121044,121045,121047,121050],{"class":38,"line":1517},[36,121046,27093],{"class":4500},[36,121048,121049],{"class":57}," vim",[36,121051,121052],{"class":57}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,121054,121055],{"class":38,"line":2421},[36,121056,121057],{"class":57},"```\n",[36,121059,121060],{"class":38,"line":2446},[36,121061,546],{"emptyLinePlaceholder":545},[36,121063,121064],{"class":38,"line":2469},[36,121065,546],{"emptyLinePlaceholder":545},[36,121067,121068],{"class":38,"line":2492},[36,121069,121070],{"class":4500},"选择好Ubuntu版本后，复制下方的内容。\n",[36,121072,121073],{"class":38,"line":4150},[36,121074,546],{"emptyLinePlaceholder":545},[36,121076,121077,121079,121082,121085],{"class":38,"line":4155},[36,121078,2911],{"class":114},[36,121080,121081],{"class":57},"[](",[36,121083,121084],{"class":4500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,121086,61],{"class":57},[36,121088,121089],{"class":38,"line":4161},[36,121090,546],{"emptyLinePlaceholder":545},[36,121092,121093],{"class":38,"line":4166},[36,121094,121095],{"class":4500},"粘贴进去\n",[36,121097,121098],{"class":38,"line":4180},[36,121099,546],{"emptyLinePlaceholder":545},[36,121101,121102,121104,121106,121109],{"class":38,"line":4185},[36,121103,2911],{"class":114},[36,121105,121081],{"class":57},[36,121107,121108],{"class":4500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,121110,61],{"class":57},[36,121112,121113],{"class":38,"line":4191},[36,121114,546],{"emptyLinePlaceholder":545},[36,121116,121117,121120,121123,121126,121128],{"class":38,"line":4212},[36,121118,121119],{"class":4500},"按一下ESC，然后英文冒号，输入",[36,121121,121122],{"class":57}," `",[36,121124,121125],{"class":4500},":wq!",[36,121127,3645],{"class":57},[36,121129,121130],{"class":4500},"然后回车\n",[36,121132,121133],{"class":38,"line":4217},[36,121134,546],{"emptyLinePlaceholder":545},[36,121136,121137,121139,121141,121144],{"class":38,"line":4231},[36,121138,2911],{"class":114},[36,121140,121081],{"class":57},[36,121142,121143],{"class":4500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,121145,61],{"class":57},[36,121147,121148],{"class":38,"line":4236},[36,121149,546],{"emptyLinePlaceholder":545},[36,121151,121152],{"class":38,"line":4264},[36,121153,121154],{"class":4500},"输入以下命令\n",[36,121156,121157],{"class":38,"line":4269},[36,121158,546],{"emptyLinePlaceholder":545},[36,121160,121161,121164],{"class":38,"line":4286},[36,121162,121163],{"class":57},"```",[36,121165,121166],{"class":4500},"Bash\n",[36,121168,121169,121171,121173],{"class":38,"line":4291},[36,121170,27093],{"class":4500},[36,121172,119783],{"class":57},[36,121174,28754],{"class":57},[19,121176,121177],{},"这里被替换成对应学校则成功",[19,121179,121180],{},[4000,121181],{"alt":31,"src":121182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121184,121186],{"id":121185},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[997,121188,121190],{"id":121189},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121192,121193],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121195,121196],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121198,121199],{},[2923,121200,121201],{"href":121201,"rel":121202},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26381],[19,121204,121205],{},[4000,121206],{"alt":31,"src":121207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121209,121210],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121212,121213],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121215,121216],{},[4000,121217],{"alt":31,"src":121218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,121220,121222],{"className":119762,"code":121221,"language":119764,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,121223,121224,121229,121236,121241],{"__ignoreMap":31},[36,121225,121226],{"class":38,"line":39},[36,121227,121228],{"class":42},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,121230,121231,121233],{"class":38,"line":46},[36,121232,103750],{"class":49},[36,121234,121235],{"class":57}," ~\u002FDownloads\n",[36,121237,121238],{"class":38,"line":82},[36,121239,121240],{"class":42},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,121242,121243,121245,121247,121249],{"class":38,"line":88},[36,121244,27093],{"class":4500},[36,121246,119783],{"class":57},[36,121248,26350],{"class":57},[36,121250,121251],{"class":57}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121253,121254],{},[4000,121255],{"alt":31,"src":121256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[997,121258,121260],{"id":121259},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,121262,121264],{"className":119762,"code":121263,"language":119764,"meta":31,"style":31},"# 老版\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",[33,121265,121266,121271,121279,121290,121295,121299,121304,121314,121322,121333],{"__ignoreMap":31},[36,121267,121268],{"class":38,"line":39},[36,121269,121270],{"class":42},"# 老版\n",[36,121272,121273,121275,121277],{"class":38,"line":46},[36,121274,27093],{"class":4500},[36,121276,119783],{"class":57},[36,121278,28754],{"class":57},[36,121280,121281,121283,121285,121287],{"class":38,"line":82},[36,121282,27093],{"class":4500},[36,121284,119783],{"class":57},[36,121286,26350],{"class":57},[36,121288,121289],{"class":57}," neofetch\n",[36,121291,121292],{"class":38,"line":88},[36,121293,121294],{"class":4500},"neofetch\n",[36,121296,121297],{"class":38,"line":195},[36,121298,546],{"emptyLinePlaceholder":545},[36,121300,121301],{"class":38,"line":1517},[36,121302,121303],{"class":42},"# 新版\n",[36,121305,121306,121308,121311],{"class":38,"line":2421},[36,121307,27093],{"class":4500},[36,121309,121310],{"class":57}," add-apt-repository",[36,121312,121313],{"class":57}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,121315,121316,121318,121320],{"class":38,"line":2446},[36,121317,27093],{"class":4500},[36,121319,119783],{"class":57},[36,121321,28754],{"class":57},[36,121323,121324,121326,121328,121330],{"class":38,"line":2469},[36,121325,27093],{"class":4500},[36,121327,119783],{"class":57},[36,121329,26350],{"class":57},[36,121331,121332],{"class":57}," fastfetch\n",[36,121334,121335],{"class":38,"line":2492},[36,121336,121337],{"class":4500},"fastfetch\n",[19,121339,121340],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121342,121343],{},[4000,121344],{"alt":31,"src":121345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[997,121347,121349],{"id":121348},"_323-移除snap应用","3.2.3 移除snap应用",[19,121351,121352],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,121354,121356],{"className":119762,"code":121355,"language":119764,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,121357,121358,121370,121381],{"__ignoreMap":31},[36,121359,121360,121362,121364,121367],{"class":38,"line":39},[36,121361,27093],{"class":4500},[36,121363,29025],{"class":57},[36,121365,121366],{"class":57}," disable",[36,121368,121369],{"class":57}," snapd.service\n",[36,121371,121372,121374,121376,121378],{"class":38,"line":46},[36,121373,27093],{"class":4500},[36,121375,29025],{"class":57},[36,121377,121366],{"class":57},[36,121379,121380],{"class":57}," snapd.socket\n",[36,121382,121383,121385,121387,121389],{"class":38,"line":82},[36,121384,27093],{"class":4500},[36,121386,29025],{"class":57},[36,121388,121366],{"class":57},[36,121390,121391],{"class":57}," snapd.seeded.service\n",[19,121393,121394],{},"然后查看snap应用列表",[19,121396,121397,121398,121403],{},"根据你安装的选择不同（最小安装或普通安装），有",[2923,121399,121402],{"href":121400,"rel":121401},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26381],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,121405,121407],{"className":119762,"code":121406,"language":119764,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,121408,121409,121414],{"__ignoreMap":31},[36,121410,121411],{"class":38,"line":39},[36,121412,121413],{"class":42},"# 查询当前系统上snap安装了哪些app\n",[36,121415,121416,121419],{"class":38,"line":46},[36,121417,121418],{"class":4500},"snap",[36,121420,121421],{"class":57}," list\n",[19,121423,121424],{},[4000,121425],{"alt":31,"src":121426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121428,121429,121430,121433],{},"卸载掉图中所有应用，按照 ",[2839,121431,121432],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,121435,121437],{"className":119762,"code":121436,"language":119764,"meta":31,"style":31},"#移除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",[33,121438,121439,121444,121456,121461,121472,121477,121488,121493,121504,121509,121513,121518,121529,121540],{"__ignoreMap":31},[36,121440,121441],{"class":38,"line":39},[36,121442,121443],{"class":42},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,121445,121446,121448,121451,121453],{"class":38,"line":46},[36,121447,27093],{"class":4500},[36,121449,121450],{"class":57}," snap",[36,121452,28592],{"class":57},[36,121454,121455],{"class":57}," snap-store\n",[36,121457,121458],{"class":38,"line":82},[36,121459,121460],{"class":42},"#移除firefox浏览器\n",[36,121462,121463,121465,121467,121469],{"class":38,"line":88},[36,121464,27093],{"class":4500},[36,121466,121450],{"class":57},[36,121468,28592],{"class":57},[36,121470,121471],{"class":57}," firefox\n",[36,121473,121474],{"class":38,"line":195},[36,121475,121476],{"class":42},"#移除gnome-42-2204\n",[36,121478,121479,121481,121483,121485],{"class":38,"line":1517},[36,121480,27093],{"class":4500},[36,121482,121450],{"class":57},[36,121484,28592],{"class":57},[36,121486,121487],{"class":57}," gnome-42-2204\n",[36,121489,121490],{"class":38,"line":2421},[36,121491,121492],{"class":42},"#移除gtk-common-themes\n",[36,121494,121495,121497,121499,121501],{"class":38,"line":2446},[36,121496,27093],{"class":4500},[36,121498,121450],{"class":57},[36,121500,28592],{"class":57},[36,121502,121503],{"class":57}," gtk-common-themes\n",[36,121505,121506],{"class":38,"line":2469},[36,121507,121508],{"class":42},"#移除其它...\n",[36,121510,121511],{"class":38,"line":2492},[36,121512,5206],{"class":53},[36,121514,121515],{"class":38,"line":4150},[36,121516,121517],{"class":42},"#移除core22,bare以及snapd\n",[36,121519,121520,121522,121524,121526],{"class":38,"line":4155},[36,121521,27093],{"class":4500},[36,121523,121450],{"class":57},[36,121525,28592],{"class":57},[36,121527,121528],{"class":57}," core22\n",[36,121530,121531,121533,121535,121537],{"class":38,"line":4161},[36,121532,27093],{"class":4500},[36,121534,121450],{"class":57},[36,121536,28592],{"class":57},[36,121538,121539],{"class":57}," bare\n",[36,121541,121542,121544,121546,121548],{"class":38,"line":4166},[36,121543,27093],{"class":4500},[36,121545,121450],{"class":57},[36,121547,28592],{"class":57},[36,121549,121550],{"class":57}," snapd\n",[19,121552,121553],{},[4000,121554],{"alt":31,"src":121555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121557,121558],{},"输入以下命令查看是否还有snap包",[26,121560,121562],{"className":119762,"code":121561,"language":119764,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,121563,121564,121570,121574,121578,121582],{"__ignoreMap":31},[36,121565,121566,121568],{"class":38,"line":39},[36,121567,121418],{"class":4500},[36,121569,121421],{"class":57},[36,121571,121572],{"class":38,"line":46},[36,121573,121270],{"class":42},[36,121575,121576],{"class":38,"line":82},[36,121577,121294],{"class":4500},[36,121579,121580],{"class":38,"line":88},[36,121581,121303],{"class":42},[36,121583,121584],{"class":38,"line":195},[36,121585,121337],{"class":4500},[19,121587,121588],{},[4000,121589],{"alt":31,"src":121590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[997,121592,121594],{"id":121593},"_324-移除snap","3.2.4 移除snap",[19,121596,121597,121598,121603],{},"在删除掉",[2923,121599,121602],{"href":121600,"rel":121601},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26381],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,121605,121607],{"className":119762,"code":121606,"language":119764,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,121608,121609,121614,121627,121632,121643],{"__ignoreMap":31},[36,121610,121611],{"class":38,"line":39},[36,121612,121613],{"class":42}," #使用apt移除掉snap\n",[36,121615,121616,121618,121620,121622,121625],{"class":38,"line":46},[36,121617,27093],{"class":4500},[36,121619,119783],{"class":57},[36,121621,120091],{"class":57},[36,121623,121624],{"class":49}," --purge",[36,121626,121550],{"class":57},[36,121628,121629],{"class":38,"line":82},[36,121630,121631],{"class":42},"#移除snapd的一些目录\n",[36,121633,121634,121636,121638,121640],{"class":38,"line":88},[36,121635,27093],{"class":4500},[36,121637,121019],{"class":57},[36,121639,27839],{"class":49},[36,121641,121642],{"class":57}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,121644,121645,121647,121649,121651],{"class":38,"line":195},[36,121646,27093],{"class":4500},[36,121648,121019],{"class":57},[36,121650,27839],{"class":49},[36,121652,121653],{"class":57}," ~\u002Fsnap\n",[19,121655,121656,121657,121660],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,121658,121659],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[997,121662,121664],{"id":121663},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121666,121667],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,121669,121671],{"className":119762,"code":121670,"language":119764,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,121672,121673],{"__ignoreMap":31},[36,121674,121675,121677,121679],{"class":38,"line":39},[36,121676,27093],{"class":4500},[36,121678,121049],{"class":57},[36,121680,121681],{"class":57}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121683,121684,121685,121688],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,121686,121687],{},":wq"," 回车",[26,121690,121692],{"className":119762,"code":121691,"language":119764,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,121693,121694,121701,121715],{"__ignoreMap":31},[36,121695,121696,121699],{"class":38,"line":39},[36,121697,121698],{"class":4500},"Package:",[36,121700,121550],{"class":57},[36,121702,121703,121706,121709,121712],{"class":38,"line":46},[36,121704,121705],{"class":4500},"Pin:",[36,121707,121708],{"class":57}," release",[36,121710,121711],{"class":57}," a=",[36,121713,121714],{"class":49},"*\n",[36,121716,121717,121720],{"class":38,"line":82},[36,121718,121719],{"class":4500},"Pin-Priority:",[36,121721,121722],{"class":49}," -10\n",[19,121724,121725],{},[4000,121726],{"alt":31,"src":121727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[997,121729,121731],{"id":121730},"_326-测试是否成功","3.2.6 测试是否成功",[26,121733,121735],{"className":119762,"code":121734,"language":119764,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,121736,121737,121745],{"__ignoreMap":31},[36,121738,121739,121741,121743],{"class":38,"line":39},[36,121740,27093],{"class":4500},[36,121742,119783],{"class":57},[36,121744,28754],{"class":57},[36,121746,121747,121749,121751,121753],{"class":38,"line":46},[36,121748,27093],{"class":4500},[36,121750,119783],{"class":57},[36,121752,26350],{"class":57},[36,121754,121471],{"class":57},[19,121756,121757],{},"这里提示snapd无法被安装，就证明成功了",[19,121759,121760],{},[4000,121761],{"alt":31,"src":121762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[997,121764,121766],{"id":121765},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121768,121769],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121771,121772],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121774,121775],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,121777,121779],{"className":119762,"code":121778,"language":119764,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,121780,121781,121786,121795,121800,121808],{"__ignoreMap":31},[36,121782,121783],{"class":38,"line":39},[36,121784,121785],{"class":42},"# 添加Mozilla提供的源\n",[36,121787,121788,121790,121792],{"class":38,"line":46},[36,121789,27093],{"class":4500},[36,121791,121310],{"class":57},[36,121793,121794],{"class":57}," ppa:mozillateam\u002Fppa\n",[36,121796,121797],{"class":38,"line":82},[36,121798,121799],{"class":42},"# 安装Firefox\n",[36,121801,121802,121804,121806],{"class":38,"line":88},[36,121803,27093],{"class":4500},[36,121805,119783],{"class":57},[36,121807,28754],{"class":57},[36,121809,121810,121812,121814,121816],{"class":38,"line":195},[36,121811,27093],{"class":4500},[36,121813,119783],{"class":57},[36,121815,26350],{"class":57},[36,121817,121471],{"class":57},[997,121819,121821],{"id":121820},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121823,121824],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121826,121827],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,121829,121831],{"className":119762,"code":121830,"language":119764,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,121832,121833,121838,121848,121856,121860],{"__ignoreMap":31},[36,121834,121835],{"class":38,"line":39},[36,121836,121837],{"class":42},"#删掉禁止安装snap的配置文件\n",[36,121839,121840,121842,121844,121846],{"class":38,"line":46},[36,121841,27093],{"class":4500},[36,121843,121019],{"class":57},[36,121845,27839],{"class":49},[36,121847,121681],{"class":57},[36,121849,121850,121852,121854],{"class":38,"line":82},[36,121851,27093],{"class":4500},[36,121853,119783],{"class":57},[36,121855,28754],{"class":57},[36,121857,121858],{"class":38,"line":88},[36,121859,546],{"emptyLinePlaceholder":545},[36,121861,121862,121864,121866],{"class":38,"line":195},[36,121863,27093],{"class":4500},[36,121865,119783],{"class":57},[36,121867,121868],{"class":57}," dist-update\n",[14,121870,121872],{"id":121871},"_33-中文输入法","3.3 中文输入法",[997,121874,121876],{"id":121875},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121878,121879],{},"官网下载搜狗输入法",[19,121881,121882],{},[4000,121883],{"alt":31,"src":121884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121886,121887],{},[4000,121888],{"alt":31,"src":121889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121891,121892],{},"打开终端输入如下",[26,121894,121896],{"className":119762,"code":121895,"language":119764,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,121897,121898,121905],{"__ignoreMap":31},[36,121899,121900,121902],{"class":38,"line":39},[36,121901,103750],{"class":49},[36,121903,121904],{"class":57}," ~\u002FDownloads\u002F\n",[36,121906,121907,121909,121911,121913],{"class":38,"line":46},[36,121908,27093],{"class":4500},[36,121910,119783],{"class":57},[36,121912,26350],{"class":57},[36,121914,121915],{"class":57}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121917,121918],{},"打开Fcitx",[19,121920,121921,121924],{},[4000,121922],{"alt":31,"src":121923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[4000,121925],{"alt":31,"src":121926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121928,121929],{},[4000,121930],{"alt":31,"src":121931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121933,121934],{},"添加搜狗输入法",[19,121936,121937],{},[4000,121938],{"alt":31,"src":121939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121941,121942],{},[4000,121943],{"alt":31,"src":121944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121946,121947],{},"将搜狗输入法设置为唯一输入法",[19,121949,121950],{},[4000,121951],{"alt":31,"src":121952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[997,121954,121956],{"id":121955},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[433,121958,121959],{},[436,121960,121961],{},"卸载旧输入法",[26,121963,121965],{"className":120989,"code":121964,"language":120991,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,121966,121967],{"__ignoreMap":31},[36,121968,121969,121971,121973,121975,121978,121980,121983],{"class":38,"line":39},[36,121970,27093],{"class":4500},[36,121972,119783],{"class":57},[36,121974,120124],{"class":57},[36,121976,121977],{"class":57}," fcitx",[36,121979,1050],{"class":49},[36,121981,121982],{"class":57}," ibus",[36,121984,121714],{"class":49},[433,121986,121987],{"start":46},[436,121988,121989],{},"安装Fcitx5",[26,121991,121993],{"className":119762,"code":121992,"language":119764,"meta":31,"style":31},"# 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",[33,121994,121995,122000,122014,122018,122023,122032,122040],{"__ignoreMap":31},[36,121996,121997],{"class":38,"line":39},[36,121998,121999],{"class":42},"# Ubuntu22.04及以上、Debian12及以上\n",[36,122001,122002,122004,122006,122008,122011],{"class":38,"line":46},[36,122003,27093],{"class":4500},[36,122005,119783],{"class":57},[36,122007,26350],{"class":57},[36,122009,122010],{"class":57}," fcitx5",[36,122012,122013],{"class":57}," fcitx5-chinese-addons\n",[36,122015,122016],{"class":38,"line":82},[36,122017,546],{"emptyLinePlaceholder":545},[36,122019,122020],{"class":38,"line":88},[36,122021,122022],{"class":42},"# Ubuntu20.04\n",[36,122024,122025,122027,122029],{"class":38,"line":195},[36,122026,27093],{"class":4500},[36,122028,121310],{"class":57},[36,122030,122031],{"class":57}," ppa:zhsj\u002Ffcitx5\n",[36,122033,122034,122036,122038],{"class":38,"line":1517},[36,122035,27093],{"class":4500},[36,122037,119783],{"class":57},[36,122039,28754],{"class":57},[36,122041,122042,122044,122046,122048,122050],{"class":38,"line":2421},[36,122043,27093],{"class":4500},[36,122045,119783],{"class":57},[36,122047,26350],{"class":57},[36,122049,122010],{"class":57},[36,122051,122013],{"class":57},[433,122053,122054,122057],{"start":82},[436,122055,122056],{},"Reboot System",[436,122058,122059],{},"启动Fcitx5",[19,122061,122062],{},[4000,122063],{"alt":31,"src":122064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[433,122066,122067],{"start":195},[436,122068,122069],{},"修改一些设置",[19,122071,122072],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122074,122075],{},[4000,122076],{"alt":31,"src":122077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122079,122080],{},"添加快捷键以便于更好切换中英文",[19,122082,122083],{},[4000,122084],{"alt":31,"src":122085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[433,122087,122088],{"start":1517},[436,122089,122090],{},"重启",[26,122092,122094],{"className":120989,"code":122093,"language":120991,"meta":31,"style":31},"sudo shutdown -r now\n",[33,122095,122096],{"__ignoreMap":31},[36,122097,122098,122100,122103,122106],{"class":38,"line":39},[36,122099,27093],{"class":4500},[36,122101,122102],{"class":57}," shutdown",[36,122104,122105],{"class":49}," -r",[36,122107,122108],{"class":57}," now\n",[433,122110,122111],{"start":2421},[436,122112,122113],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122115,122116],{},[2923,122117,122118],{"href":122118,"rel":122119},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26381],[433,122121,122122],{"start":2446},[436,122123,122124],{},"再重启",[26,122126,122127],{"className":120989,"code":122093,"language":120991,"meta":31,"style":31},[33,122128,122129],{"__ignoreMap":31},[36,122130,122131,122133,122135,122137],{"class":38,"line":39},[36,122132,27093],{"class":4500},[36,122134,122102],{"class":57},[36,122136,122105],{"class":49},[36,122138,122108],{"class":57},[14,122140,122142],{"id":122141},"_34-pip3源替换","3.4 pip3源替换",[19,122144,122145],{},"非Debian系发行版需要做。",[19,122147,122148],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122150,122151],{},"使用dnf的系统也可能不用做。",[26,122153,122155],{"className":119762,"code":122154,"language":119764,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,122156,122157,122162,122169,122174,122179],{"__ignoreMap":31},[36,122158,122159],{"class":38,"line":39},[36,122160,122161],{"class":42},"# 检查是否已安装 pip\n",[36,122163,122164,122167],{"class":38,"line":46},[36,122165,122166],{"class":4500},"pip3",[36,122168,28805],{"class":49},[36,122170,122171],{"class":38,"line":82},[36,122172,122173],{"class":42},"# 如果未安装，先安装 pip3（见下方）\n",[36,122175,122176],{"class":38,"line":88},[36,122177,122178],{"class":42},"# 配置 pip 使用清华源\n",[36,122180,122181,122183,122186,122189,122192],{"class":38,"line":195},[36,122182,122166],{"class":4500},[36,122184,122185],{"class":57}," config",[36,122187,122188],{"class":57}," set",[36,122190,122191],{"class":57}," global.index-url",[36,122193,122194],{"class":57}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122196,122197],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122199,122200],{},[4000,122201],{"alt":31,"src":122202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,122204,122206],{"className":119762,"code":122205,"language":119764,"meta":31,"style":31},"#安装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",[33,122207,122208,122213,122221,122232,122236,122241,122260,122264,122269,122281,122285,122290],{"__ignoreMap":31},[36,122209,122210],{"class":38,"line":39},[36,122211,122212],{"class":42},"#安装pip3\n",[36,122214,122215,122217,122219],{"class":38,"line":46},[36,122216,27093],{"class":4500},[36,122218,119783],{"class":57},[36,122220,28754],{"class":57},[36,122222,122223,122225,122227,122229],{"class":38,"line":82},[36,122224,27093],{"class":4500},[36,122226,28589],{"class":57},[36,122228,26350],{"class":57},[36,122230,122231],{"class":57}," python3-pip\n",[36,122233,122234],{"class":38,"line":88},[36,122235,546],{"emptyLinePlaceholder":545},[36,122237,122238],{"class":38,"line":195},[36,122239,122240],{"class":42},"#更新pip3\n",[36,122242,122243,122245,122247,122249,122251,122253,122256,122258],{"class":38,"line":1517},[36,122244,103354],{"class":4500},[36,122246,103357],{"class":49},[36,122248,103380],{"class":57},[36,122250,26350],{"class":57},[36,122252,28942],{"class":49},[36,122254,122255],{"class":57}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,122257,103385],{"class":49},[36,122259,103388],{"class":57},[36,122261,122262],{"class":38,"line":2421},[36,122263,546],{"emptyLinePlaceholder":545},[36,122265,122266],{"class":38,"line":2446},[36,122267,122268],{"class":42},"#设置pip源为清华源\n",[36,122270,122271,122273,122275,122277,122279],{"class":38,"line":2469},[36,122272,122166],{"class":4500},[36,122274,122185],{"class":57},[36,122276,122188],{"class":57},[36,122278,122191],{"class":57},[36,122280,122194],{"class":57},[36,122282,122283],{"class":38,"line":2492},[36,122284,546],{"emptyLinePlaceholder":545},[36,122286,122287],{"class":38,"line":4150},[36,122288,122289],{"class":42},"#测试\n",[36,122291,122292,122294,122296,122298,122300,122302],{"class":38,"line":4155},[36,122293,103354],{"class":4500},[36,122295,103357],{"class":49},[36,122297,103380],{"class":57},[36,122299,26350],{"class":57},[36,122301,103385],{"class":49},[36,122303,103388],{"class":57},[19,122305,122306],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122308,122309],{},[4000,122310],{"alt":31,"src":122311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122313,122315],{"id":122314},"_35-显卡驱动安装","3.5 显卡驱动安装",[997,122317,122319],{"id":122318},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,122321,122323],{"className":120989,"code":122322,"language":120991,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,122324,122325,122330,122345,122350],{"__ignoreMap":31},[36,122326,122327],{"class":38,"line":39},[36,122328,122329],{"class":42},"# 如果是使用apt安装的驱动\n",[36,122331,122332,122334,122336,122338,122340,122343],{"class":38,"line":46},[36,122333,27093],{"class":4500},[36,122335,28589],{"class":57},[36,122337,28592],{"class":57},[36,122339,121624],{"class":49},[36,122341,122342],{"class":57}," nvidia",[36,122344,121714],{"class":49},[36,122346,122347],{"class":38,"line":82},[36,122348,122349],{"class":42},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,122351,122352,122354],{"class":38,"line":88},[36,122353,27093],{"class":4500},[36,122355,122356],{"class":57}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[997,122358,122360],{"id":122359},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24515,122362,122364],{"id":122363},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25427,122366,122368],{"id":122367},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,122370,122372],{"className":120989,"code":122371,"language":120991,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122373,122374,122379,122390,122395,122405,122410],{"__ignoreMap":31},[36,122375,122376],{"class":38,"line":39},[36,122377,122378],{"class":42},"# 安装英伟达驱动\n",[36,122380,122381,122383,122385,122387],{"class":38,"line":46},[36,122382,27093],{"class":4500},[36,122384,119783],{"class":57},[36,122386,26350],{"class":57},[36,122388,122389],{"class":57}," nvidia-driver-版本号\n",[36,122391,122392],{"class":38,"line":82},[36,122393,122394],{"class":42},"# 重启 \n",[36,122396,122397,122399,122401,122403],{"class":38,"line":88},[36,122398,27093],{"class":4500},[36,122400,122102],{"class":57},[36,122402,122105],{"class":49},[36,122404,122108],{"class":57},[36,122406,122407],{"class":38,"line":195},[36,122408,122409],{"class":42},"# 检查驱动是否安装成功\n",[36,122411,122412],{"class":38,"line":1517},[36,122413,122414],{"class":4500},"nvidia-smi\n",[25427,122416,122418],{"id":122417},"_35212-debian","3.5.2.1.2 Debian",[26,122420,122422],{"className":120989,"code":122421,"language":120991,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122423,122424,122428,122442,122446,122456,122460],{"__ignoreMap":31},[36,122425,122426],{"class":38,"line":39},[36,122427,122378],{"class":42},[36,122429,122430,122432,122434,122436,122439],{"class":38,"line":46},[36,122431,27093],{"class":4500},[36,122433,119783],{"class":57},[36,122435,26350],{"class":57},[36,122437,122438],{"class":57}," nvidia-driver",[36,122440,122441],{"class":57}," nvidia-settings\n",[36,122443,122444],{"class":38,"line":82},[36,122445,122394],{"class":42},[36,122447,122448,122450,122452,122454],{"class":38,"line":88},[36,122449,27093],{"class":4500},[36,122451,122102],{"class":57},[36,122453,122105],{"class":49},[36,122455,122108],{"class":57},[36,122457,122458],{"class":38,"line":195},[36,122459,122409],{"class":42},[36,122461,122462],{"class":38,"line":1517},[36,122463,122414],{"class":4500},[24515,122465,122467],{"id":122466},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122469,122470,122471,122474],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2839,122472,122473],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122476,122477,122478],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[26070,122479,122480],{},[2839,122481,122482],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,122484,122486],{"className":120989,"code":122485,"language":120991,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,122487,122488,122493,122502,122507,122520,122525],{"__ignoreMap":31},[36,122489,122490],{"class":38,"line":39},[36,122491,122492],{"class":42},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,122494,122495,122497,122500],{"class":38,"line":46},[36,122496,27093],{"class":4500},[36,122498,122499],{"class":57}," telinit",[36,122501,1247],{"class":49},[36,122503,122504],{"class":38,"line":82},[36,122505,122506],{"class":42},"# ubuntu 使用下方命令\n",[36,122508,122509,122511,122514,122517],{"class":38,"line":88},[36,122510,27093],{"class":4500},[36,122512,122513],{"class":57}," service",[36,122515,122516],{"class":57}," lightdm",[36,122518,122519],{"class":57}," stop\n",[36,122521,122522],{"class":38,"line":195},[36,122523,122524],{"class":42},"# Fedora 使用下方命令\n",[36,122526,122527,122529,122531,122534],{"class":38,"line":1517},[36,122528,27093],{"class":4500},[36,122530,29025],{"class":57},[36,122532,122533],{"class":57}," isolate",[36,122535,122536],{"class":57}," multi-user.target\n",[19,122538,122539],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,122541,122543],{"className":120989,"code":122542,"language":120991,"meta":31,"style":31},"# 编译环境+准备工作\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",[33,122544,122545,122550,122561,122566,122573,122578,122590,122595,122602,122607],{"__ignoreMap":31},[36,122546,122547],{"class":38,"line":39},[36,122548,122549],{"class":42},"# 编译环境+准备工作\n",[36,122551,122552,122554,122556,122558],{"class":38,"line":46},[36,122553,27093],{"class":4500},[36,122555,119783],{"class":57},[36,122557,26350],{"class":57},[36,122559,122560],{"class":57}," build-essential\n",[36,122562,122563],{"class":38,"line":82},[36,122564,122565],{"class":42},"# 进入到.run目录中\n",[36,122567,122568,122570],{"class":38,"line":88},[36,122569,103750],{"class":49},[36,122571,122572],{"class":57}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,122574,122575],{"class":38,"line":195},[36,122576,122577],{"class":42},"# 给驱动文件增加可执行权限：\n",[36,122579,122580,122582,122584,122587],{"class":38,"line":1517},[36,122581,27093],{"class":4500},[36,122583,27096],{"class":57},[36,122585,122586],{"class":57}," a+x",[36,122588,122589],{"class":57}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,122591,122592],{"class":38,"line":2421},[36,122593,122594],{"class":42},"# 然后执行安装：\n",[36,122596,122597,122599],{"class":38,"line":2446},[36,122598,27093],{"class":4500},[36,122600,122601],{"class":57}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,122603,122604],{"class":38,"line":2469},[36,122605,122606],{"class":42},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,122608,122609,122611,122614],{"class":38,"line":2492},[36,122610,27093],{"class":4500},[36,122612,122613],{"class":57}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,122615,122616],{"class":49},"  --no-opengl-files\n",[19,122618,122619],{},"安装完毕重启即可",[26,122621,122623],{"className":120989,"code":122622,"language":120991,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122624,122625,122629,122635,122639],{"__ignoreMap":31},[36,122626,122627],{"class":38,"line":39},[36,122628,122394],{"class":42},[36,122630,122631,122633],{"class":38,"line":46},[36,122632,27093],{"class":4500},[36,122634,29159],{"class":57},[36,122636,122637],{"class":38,"line":82},[36,122638,122409],{"class":42},[36,122640,122641],{"class":38,"line":88},[36,122642,122414],{"class":4500},[997,122644,122646],{"id":122645},"_353-安装cuda","3.5.3 安装CUDA",[19,122648,122649],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122651,122652],{},[4000,122653],{"alt":31,"src":122654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[433,122656,122657],{},[436,122658,122659],{},"先查看显卡驱动所支持的最高CUDA版本",[26,122661,122662],{"className":120989,"code":122414,"language":120991,"meta":31,"style":31},[33,122663,122664],{"__ignoreMap":31},[36,122665,122666],{"class":38,"line":39},[36,122667,122414],{"class":4500},[19,122669,122670],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122672,122673],{},[4000,122674],{"alt":31,"src":122675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[433,122677,122678],{"start":46},[436,122679,122680],{},"下载CUDA并安装CUDA",[19,122682,120768,122683],{},[2923,122684,120771],{"href":120771,"rel":122685},[26381],[19,122687,122688],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122690,122691],{},[4000,122692],{"alt":31,"src":122693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122695,122696,122697,122702],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2923,122698,122701],{"href":122699,"rel":122700},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26381],"Vinci机器人队单片机教程","）",[19,122704,122705],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122707,122708],{},[4000,122709],{"alt":31,"src":122710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122712,122713],{},"将最下方框框里的命令敲入终端",[26,122715,122717],{"className":120989,"code":122716,"language":120991,"meta":31,"style":31},"# 在当前文件夹下创建一个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",[33,122718,122719,122724,122733,122738,122745,122750,122758,122763,122774,122779],{"__ignoreMap":31},[36,122720,122721],{"class":38,"line":39},[36,122722,122723],{"class":42},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,122725,122726,122728,122730],{"class":38,"line":46},[36,122727,103740],{"class":4500},[36,122729,31726],{"class":49},[36,122731,122732],{"class":57}," .\u002Fttt\n",[36,122734,122735],{"class":38,"line":82},[36,122736,122737],{"class":42},"# 进入ttt文件夹\n",[36,122739,122740,122742],{"class":38,"line":88},[36,122741,103750],{"class":49},[36,122743,122744],{"class":57}," ttt\n",[36,122746,122747],{"class":38,"line":195},[36,122748,122749],{"class":42},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,122751,122752,122755],{"class":38,"line":1517},[36,122753,122754],{"class":4500},"wget",[36,122756,122757],{"class":57}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,122759,122760],{"class":38,"line":2421},[36,122761,122762],{"class":42},"# 给予权限\n",[36,122764,122765,122767,122769,122771],{"class":38,"line":2446},[36,122766,27093],{"class":4500},[36,122768,27096],{"class":57},[36,122770,122586],{"class":57},[36,122772,122773],{"class":57}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,122775,122776],{"class":38,"line":2469},[36,122777,122778],{"class":42},"# 运行脚本\n",[36,122780,122781,122783],{"class":38,"line":2492},[36,122782,27093],{"class":4500},[36,122784,122773],{"class":57},[19,122786,122787],{},[4000,122788],{"alt":31,"src":122789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122791,122792],{},"正在安装中：",[19,122794,122795],{},[4000,122796],{"alt":31,"src":122797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122799,122800],{},"输入accept接受即可",[19,122802,122803],{},[4000,122804],{"alt":31,"src":122805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122807,122808],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122810,122811],{},[4000,122812],{"alt":31,"src":122813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122815,122816],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122818,122819],{},[4000,122820],{"alt":31,"src":122821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[433,122823,122824],{"start":82},[436,122825,122826],{},"配置环境",[19,122828,122829],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,122831,122833],{"className":120989,"code":122832,"language":120991,"meta":31,"style":31},"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",[33,122834,122835,122851,122866],{"__ignoreMap":31},[36,122836,122837,122840,122843,122846,122849],{"class":38,"line":39},[36,122838,122839],{"class":4500},"Please",[36,122841,122842],{"class":57}," make",[36,122844,122845],{"class":57}," sure",[36,122847,122848],{"class":57}," that",[36,122850,5206],{"class":53},[36,122852,122853,122855,122858,122861,122864],{"class":38,"line":46},[36,122854,54765],{"class":4500},[36,122856,122857],{"class":57},"   PATH",[36,122859,122860],{"class":57}," includes",[36,122862,122863],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,122865,5206],{"class":53},[36,122867,122868,122870,122873,122875,122878,122881,122883,122886,122889,122892,122894,122896,122899,122901],{"class":38,"line":82},[36,122869,54765],{"class":4500},[36,122871,122872],{"class":57},"   LD_LIBRARY_PATH",[36,122874,122860],{"class":57},[36,122876,122877],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,122879,122880],{"class":57}," or,",[36,122882,7738],{"class":57},[36,122884,122885],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,122887,122888],{"class":57}," to",[36,122890,122891],{"class":57}," \u002Fetc\u002Fld.so.conf",[36,122893,1495],{"class":57},[36,122895,29742],{"class":57},[36,122897,122898],{"class":57}," ldconfig",[36,122900,67092],{"class":57},[36,122902,122903],{"class":57}," root\n",[19,122905,122906],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,122908,122910],{"className":120989,"code":122909,"language":120991,"meta":31,"style":31},"which nvcc\n",[33,122911,122912],{"__ignoreMap":31},[36,122913,122914,122917],{"class":38,"line":39},[36,122915,122916],{"class":49},"which",[36,122918,122919],{"class":57}," nvcc\n",[19,122921,122922],{},[4000,122923],{"alt":31,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122926,122927],{},"所以我进行以下操作：",[26,122929,122931],{"className":120989,"code":122930,"language":120991,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,122932,122933],{"__ignoreMap":31},[36,122934,122935,122937,122939],{"class":38,"line":39},[36,122936,27093],{"class":4500},[36,122938,121049],{"class":57},[36,122940,122941],{"class":57}," ~\u002F.bashrc\n",[19,122943,122944],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,122946,122948],{"className":120989,"code":122947,"language":120991,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,122949,122950,122962],{"__ignoreMap":31},[36,122951,122952,122954,122957,122959],{"class":38,"line":39},[36,122953,27558],{"class":114},[36,122955,122956],{"class":53}," PATH",[36,122958,115],{"class":114},[36,122960,122961],{"class":53},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,122963,122964,122966,122969,122971],{"class":38,"line":46},[36,122965,27558],{"class":114},[36,122967,122968],{"class":53}," LD_LIBRARY_PATH",[36,122970,115],{"class":114},[36,122972,122973],{"class":53},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122975,122976],{},[4000,122977],{"alt":31,"src":122978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,122980,122982],{"className":120989,"code":122981,"language":120991,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,122983,122984,122989,122995,123000],{"__ignoreMap":31},[36,122985,122986],{"class":38,"line":39},[36,122987,122988],{"class":42},"# 刷新当前终端的环境变量\n",[36,122990,122991,122993],{"class":38,"line":46},[36,122992,103368],{"class":49},[36,122994,122941],{"class":57},[36,122996,122997],{"class":38,"line":82},[36,122998,122999],{"class":42},"# 验证CUDA是否安装成功\n",[36,123001,123002,123005],{"class":38,"line":88},[36,123003,123004],{"class":4500},"nvcc",[36,123006,123007],{"class":49}," -V\n",[19,123009,123010],{},"出现下图这种则安装成功。",[19,123012,123013],{},[4000,123014],{"alt":31,"src":123015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[997,123017,123019],{"id":123018},"_354-安装cudnn","3.5.4 安装cuDNN",[433,123021,123022],{},[436,123023,123024],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123026,123027,123028,123033],{},"前往 NVIDIA cuDNN 下载页面：",[2923,123029,123032],{"href":123030,"rel":123031},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26381],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123035,123036],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123038,123039],{},[4000,123040],{"alt":31,"src":123041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123043,123044],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123046,123047],{},[4000,123048],{"alt":31,"src":123049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123051,123052],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123054,123055],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123057,123058],{},[2839,123059,123060],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123062,123063],{},"下载好的：",[19,123065,123066],{},[4000,123067],{"alt":31,"src":123068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[433,123070,123071],{"start":46},[436,123072,123073],{},"安装cuDNN",[19,123075,123076],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123078,123079],{},[4000,123080],{"alt":31,"src":123081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123083,123084],{},"解压文件，并复制到对应位置完成安装",[26,123086,123088],{"className":120989,"code":123087,"language":120991,"meta":31,"style":31},"# 解压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",[33,123089,123090,123095,123106,123111,123118,123123,123139,123153,123158,123169,123178,123182,123198],{"__ignoreMap":31},[36,123091,123092],{"class":38,"line":39},[36,123093,123094],{"class":42},"# 解压cuDNN文件\n",[36,123096,123097,123100,123103],{"class":38,"line":46},[36,123098,123099],{"class":4500},"tar",[36,123101,123102],{"class":49}," -xvf",[36,123104,123105],{"class":57}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,123107,123108],{"class":38,"line":82},[36,123109,123110],{"class":42},"# cd进文件夹\n",[36,123112,123113,123115],{"class":38,"line":88},[36,123114,103750],{"class":49},[36,123116,123117],{"class":57}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,123119,123120],{"class":38,"line":195},[36,123121,123122],{"class":42},"# 复制cuDNN文件到CUDA目录\n",[36,123124,123125,123127,123129,123132,123134,123137],{"class":38,"line":1517},[36,123126,27093],{"class":4500},[36,123128,30372],{"class":57},[36,123130,123131],{"class":57}," include\u002Fcudnn",[36,123133,1050],{"class":49},[36,123135,123136],{"class":57},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,123138,5206],{"class":53},[36,123140,123141,123143,123145,123148,123150],{"class":38,"line":2421},[36,123142,27093],{"class":4500},[36,123144,30372],{"class":57},[36,123146,123147],{"class":57}," lib\u002Flibcudnn",[36,123149,1050],{"class":49},[36,123151,123152],{"class":57},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,123154,123155],{"class":38,"line":2446},[36,123156,123157],{"class":42},"# 对比一下有没有缺文件\n",[36,123159,123160,123162,123165,123167],{"class":38,"line":2469},[36,123161,29273],{"class":4500},[36,123163,123164],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,123166,1050],{"class":49},[36,123168,5206],{"class":53},[36,123170,123171,123173,123176],{"class":38,"line":2492},[36,123172,29273],{"class":4500},[36,123174,123175],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,123177,121714],{"class":49},[36,123179,123180],{"class":38,"line":4150},[36,123181,122762],{"class":42},[36,123183,123184,123186,123188,123191,123193,123195],{"class":38,"line":4155},[36,123185,27093],{"class":4500},[36,123187,27096],{"class":57},[36,123189,123190],{"class":57}," a+r",[36,123192,123164],{"class":57},[36,123194,1050],{"class":49},[36,123196,123197],{"class":53},"   \n",[36,123199,123200,123202,123204,123206,123208],{"class":38,"line":4161},[36,123201,27093],{"class":4500},[36,123203,27096],{"class":57},[36,123205,123190],{"class":57},[36,123207,123175],{"class":57},[36,123209,121714],{"class":49},[433,123211,123212],{"start":82},[436,123213,123214],{},"检查是否安装成功",[26,123216,123218],{"className":120989,"code":123217,"language":120991,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,123219,123220,123225],{"__ignoreMap":31},[36,123221,123222],{"class":38,"line":39},[36,123223,123224],{"class":42},"# 检查cuDNN版本命令\n",[36,123226,123227,123230,123233,123235,123237,123240,123243],{"class":38,"line":46},[36,123228,123229],{"class":4500},"cat",[36,123231,123232],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,123234,27625],{"class":114},[36,123236,32746],{"class":4500},[36,123238,123239],{"class":57}," CUDNN_MAJOR",[36,123241,123242],{"class":49}," -A",[36,123244,1237],{"class":49},[19,123246,123247],{},"出现下图这样的就是安装成功了",[19,123249,123250],{},[4000,123251],{"alt":31,"src":123252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[433,123254,123255],{"start":88},[436,123256,123257],{},"软链接(一般不需要)",[26,123259,123261],{"className":120989,"code":123260,"language":120991,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,123262,123263,123268],{"__ignoreMap":31},[36,123264,123265],{"class":38,"line":39},[36,123266,123267],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,123269,123270,123272],{"class":38,"line":46},[36,123271,27093],{"class":4500},[36,123273,123274],{"class":57}," ldconfig\n",[19,123276,123277],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,123279,123284],{"className":123280,"code":123281,"language":123282,"meta":123283,"style":31},"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",[33,123285,123286,123291,123296,123301,123306,123311,123316],{"__ignoreMap":31},[36,123287,123288],{"class":38,"line":39},[36,123289,123290],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,123292,123293],{"class":38,"line":46},[36,123294,123295],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,123297,123298],{"class":38,"line":82},[36,123299,123300],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,123302,123303],{"class":38,"line":88},[36,123304,123305],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,123307,123308],{"class":38,"line":195},[36,123309,123310],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,123312,123313],{"class":38,"line":1517},[36,123314,123315],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,123317,123318],{"class":38,"line":2421},[36,123319,123320],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123322,123323],{},"运行下方的命令",[26,123325,123327],{"className":120989,"code":123326,"language":120991,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,123328,123329,123334,123341,123346],{"__ignoreMap":31},[36,123330,123331],{"class":38,"line":39},[36,123332,123333],{"class":42},"# cd进入CUDA路径\n",[36,123335,123336,123338],{"class":38,"line":46},[36,123337,103750],{"class":49},[36,123339,123340],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,123342,123343],{"class":38,"line":82},[36,123344,123345],{"class":42}," # 查看本路径下的需要软链接的文件名\n",[36,123347,123348],{"class":38,"line":88},[36,123349,123350],{"class":4500}," ls\n",[19,123352,123353],{},[4000,123354],{"alt":31,"src":123355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123357,123358,123359,20928,123362,20928,123365,123368],{},"如上图，我需要将",[33,123360,123361],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,123363,123364],{},"libcudnn_xxx_xxxxx.so.8",[33,123366,123367],{},"libcudnn_xxx_xxxxx.so","软链接",[26,123370,123372],{"className":120989,"code":123371,"language":120991,"meta":31,"style":31},"# 创建符号链接。对于每个 .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",[33,123373,123374,123379,123395,123409,123423,123437,123451,123465,123479,123484,123490,123495],{"__ignoreMap":31},[36,123375,123376],{"class":38,"line":39},[36,123377,123378],{"class":42},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,123380,123381,123383,123386,123389,123392],{"class":38,"line":46},[36,123382,27093],{"class":4500},[36,123384,123385],{"class":57}," ln",[36,123387,123388],{"class":49}," -sf",[36,123390,123391],{"class":57}," libcudnn_cnn_train.so.8.9.7",[36,123393,123394],{"class":57}," libcudnn_cnn_train.so.8\n",[36,123396,123397,123399,123401,123403,123406],{"class":38,"line":82},[36,123398,27093],{"class":4500},[36,123400,123385],{"class":57},[36,123402,123388],{"class":49},[36,123404,123405],{"class":57}," libcudnn_adv_infer.so.8.9.7",[36,123407,123408],{"class":57}," libcudnn_adv_infer.so.8\n",[36,123410,123411,123413,123415,123417,123420],{"class":38,"line":88},[36,123412,27093],{"class":4500},[36,123414,123385],{"class":57},[36,123416,123388],{"class":49},[36,123418,123419],{"class":57}," libcudnn_adv_train.so.8.9.7",[36,123421,123422],{"class":57}," libcudnn_adv_train.so.8\n",[36,123424,123425,123427,123429,123431,123434],{"class":38,"line":195},[36,123426,27093],{"class":4500},[36,123428,123385],{"class":57},[36,123430,123388],{"class":49},[36,123432,123433],{"class":57}," libcudnn_cnn_infer.so.8.9.7",[36,123435,123436],{"class":57}," libcudnn_cnn_infer.so.8\n",[36,123438,123439,123441,123443,123445,123448],{"class":38,"line":1517},[36,123440,27093],{"class":4500},[36,123442,123385],{"class":57},[36,123444,123388],{"class":49},[36,123446,123447],{"class":57}," libcudnn.so.8.9.7",[36,123449,123450],{"class":57}," libcudnn.so.8\n",[36,123452,123453,123455,123457,123459,123462],{"class":38,"line":2421},[36,123454,27093],{"class":4500},[36,123456,123385],{"class":57},[36,123458,123388],{"class":49},[36,123460,123461],{"class":57}," libcudnn_ops_infer.so.8.9.7",[36,123463,123464],{"class":57}," libcudnn_ops_infer.so.8\n",[36,123466,123467,123469,123471,123473,123476],{"class":38,"line":2446},[36,123468,27093],{"class":4500},[36,123470,123385],{"class":57},[36,123472,123388],{"class":49},[36,123474,123475],{"class":57}," libcudnn_ops_train.so.8.9.7",[36,123477,123478],{"class":57}," libcudnn_ops_train.so.8\n",[36,123480,123481],{"class":38,"line":2469},[36,123482,123483],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,123485,123486,123488],{"class":38,"line":2492},[36,123487,27093],{"class":4500},[36,123489,123274],{"class":57},[36,123491,123492],{"class":38,"line":4150},[36,123493,123494],{"class":42},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,123496,123497,123499,123502,123505,123507,123510],{"class":38,"line":4155},[36,123498,29273],{"class":4500},[36,123500,123501],{"class":49}," -l",[36,123503,123504],{"class":57}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,123506,1050],{"class":49},[36,123508,123509],{"class":57},".so",[36,123511,121714],{"class":49},[997,123513,123515],{"id":123514},"_355-常见问题","3.5.5 常见问题",[433,123517,123518],{},[436,123519,123520],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,123522,123524],{"className":120989,"code":123523,"language":120991,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,123525,123526],{"__ignoreMap":31},[36,123527,123528,123530,123532],{"class":38,"line":39},[36,123529,27093],{"class":4500},[36,123531,121049],{"class":57},[36,123533,123534],{"class":57}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123536,123537],{},"blacklist-nouveau.conf文件内容如下：",[26,123539,123541],{"className":120989,"code":123540,"language":120991,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,123542,123543,123551,123558,123570,123580],{"__ignoreMap":31},[36,123544,123545,123548],{"class":38,"line":39},[36,123546,123547],{"class":4500},"blacklist",[36,123549,123550],{"class":57}," nouveau\n",[36,123552,123553,123555],{"class":38,"line":46},[36,123554,123547],{"class":4500},[36,123556,123557],{"class":57}," lbm-nouveau\n",[36,123559,123560,123562,123565,123568],{"class":38,"line":82},[36,123561,118396],{"class":4500},[36,123563,123564],{"class":57}," nouveau",[36,123566,123567],{"class":57}," modeset=",[36,123569,5616],{"class":49},[36,123571,123572,123575,123577],{"class":38,"line":88},[36,123573,123574],{"class":49},"alias",[36,123576,123564],{"class":57},[36,123578,123579],{"class":57}," off\n",[36,123581,123582,123584,123587],{"class":38,"line":195},[36,123583,123574],{"class":49},[36,123585,123586],{"class":57}," lbm-nouveau",[36,123588,123579],{"class":57},[19,123590,123591],{},"接着运行下方命令",[26,123593,123595],{"className":120989,"code":123594,"language":120991,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,123596,123597,123607,123612],{"__ignoreMap":31},[36,123598,123599,123601,123604],{"class":38,"line":39},[36,123600,27093],{"class":4500},[36,123602,123603],{"class":57}," update-initramfs",[36,123605,123606],{"class":49}," -u\n",[36,123608,123609],{"class":38,"line":46},[36,123610,123611],{"class":4500},"或者\n",[36,123613,123614,123616,123619],{"class":38,"line":82},[36,123615,27093],{"class":4500},[36,123617,123618],{"class":57}," dracut",[36,123620,123621],{"class":49}," --force\n",[19,123623,123624],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,123626,123628],{"className":120989,"code":123627,"language":120991,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,123629,123630],{"__ignoreMap":31},[36,123631,123632,123635,123637,123639],{"class":38,"line":39},[36,123633,123634],{"class":4500},"lsmod",[36,123636,27625],{"class":114},[36,123638,32746],{"class":4500},[36,123640,123550],{"class":57},[433,123642,123643],{"start":46},[436,123644,123645],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,123647,123649],{"className":120989,"code":123648,"language":120991,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,123650,123651],{"__ignoreMap":31},[36,123652,123653,123655,123657],{"class":38,"line":39},[36,123654,27093],{"class":4500},[36,123656,121049],{"class":57},[36,123658,123659],{"class":57}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123661,123662],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,123664,123666],{"className":120989,"code":123665,"language":120991,"meta":31,"style":31},"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",[33,123667,123668,123676,123684,123692,123699,123707,123717,123725],{"__ignoreMap":31},[36,123669,123670,123673],{"class":38,"line":39},[36,123671,123672],{"class":4500},"Section",[36,123674,123675],{"class":57}," \"OutputClass\"\n",[36,123677,123678,123681],{"class":38,"line":46},[36,123679,123680],{"class":4500},"   Identifier",[36,123682,123683],{"class":57}," \"nvidia\"\n",[36,123685,123686,123689],{"class":38,"line":82},[36,123687,123688],{"class":4500},"   MatchDriver",[36,123690,123691],{"class":57}," \"nvidia-drm\"\n",[36,123693,123694,123697],{"class":38,"line":88},[36,123695,123696],{"class":4500},"   Driver",[36,123698,123683],{"class":57},[36,123700,123701,123704],{"class":38,"line":195},[36,123702,123703],{"class":4500},"   Option",[36,123705,123706],{"class":57}," \"AllowEmptyInitialConfiguration\"\n",[36,123708,123709,123711,123714],{"class":38,"line":1517},[36,123710,123703],{"class":4500},[36,123712,123713],{"class":57}," \"PrimaryGPU\"",[36,123715,123716],{"class":57}," \"yes\"\n",[36,123718,123719,123722],{"class":38,"line":2421},[36,123720,123721],{"class":4500},"   ModulePath",[36,123723,123724],{"class":57}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,123726,123727],{"class":38,"line":2446},[36,123728,123729],{"class":4500},"EndSection\n",[433,123731,123732],{"start":82},[436,123733,123734],{},"安装N卡驱动提示错误",[26,123736,123738],{"className":123280,"code":123737,"language":123282,"meta":123283,"style":31},"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",[33,123739,123740],{"__ignoreMap":31},[36,123741,123742],{"class":38,"line":39},[36,123743,123737],{},[433,123745,123746],{},[436,123747,123748],{},"检查当前运行的内核版本：",[19,123750,123751],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,123753,123755],{"className":119762,"code":123754,"language":119764,"meta":31,"style":31},"uname -r\n",[33,123756,123757],{"__ignoreMap":31},[36,123758,123759,123761],{"class":38,"line":39},[36,123760,72691],{"class":4500},[36,123762,123763],{"class":49}," -r\n",[433,123765,123766],{"start":46},[436,123767,123768],{},"安装内核开发文件：",[19,123770,123771,123772,123775],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,123773,123774],{},"kernel-devel"," 包。运行以下命令来安装：",[26,123777,123779],{"className":119762,"code":123778,"language":119764,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,123780,123781],{"__ignoreMap":31},[36,123782,123783,123785,123787,123789,123792,123794,123796,123798],{"class":38,"line":39},[36,123784,27093],{"class":4500},[36,123786,28827],{"class":57},[36,123788,26350],{"class":57},[36,123790,123791],{"class":57}," kernel-devel-",[36,123793,27615],{"class":53},[36,123795,72691],{"class":4500},[36,123797,122105],{"class":49},[36,123799,61],{"class":53},[19,123801,123802],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[433,123804,123805],{"start":82},[436,123806,123807],{},"安装内核源代码（如果需要）：",[19,123809,123810],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,123812,123814],{"className":119762,"code":123813,"language":119764,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,123815,123816],{"__ignoreMap":31},[36,123817,123818,123820,123822,123824,123827],{"class":38,"line":39},[36,123819,27093],{"class":4500},[36,123821,28827],{"class":57},[36,123823,26350],{"class":57},[36,123825,123826],{"class":57}," kernel-headers",[36,123828,123829],{"class":57}," kernel-source\n",[433,123831,123832],{"start":88},[436,123833,123834],{},"检查安装：",[19,123836,123837,123838,123841],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,123839,123840],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,123843,123845],{"className":119762,"code":123844,"language":119764,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,123846,123847],{"__ignoreMap":31},[36,123848,123849,123851],{"class":38,"line":39},[36,123850,29273],{"class":4500},[36,123852,123853],{"class":57}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123855,123856,123857,123860],{},"如果仍然遇到问题，可以通过 ",[33,123858,123859],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2602,123862,123863],{},"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":31,"searchDepth":46,"depth":46,"links":123865},[123866,123870,123880,123884,123885],{"id":120965,"depth":46,"text":120966,"children":123867},[123868,123869],{"id":120975,"depth":82,"text":120976},{"id":120985,"depth":82,"text":120986},{"id":121185,"depth":46,"text":121186,"children":123871},[123872,123873,123874,123875,123876,123877,123878,123879],{"id":121189,"depth":82,"text":121190},{"id":121259,"depth":82,"text":121260},{"id":121348,"depth":82,"text":121349},{"id":121593,"depth":82,"text":121594},{"id":121663,"depth":82,"text":121664},{"id":121730,"depth":82,"text":121731},{"id":121765,"depth":82,"text":121766},{"id":121820,"depth":82,"text":121821},{"id":121871,"depth":46,"text":121872,"children":123881},[123882,123883],{"id":121875,"depth":82,"text":121876},{"id":121955,"depth":82,"text":121956},{"id":122141,"depth":46,"text":122142},{"id":122314,"depth":46,"text":122315,"children":123886},[123887,123888,123889,123890,123891],{"id":122318,"depth":82,"text":122319},{"id":122359,"depth":82,"text":122360},{"id":122645,"depth":82,"text":122646},{"id":123018,"depth":82,"text":123019},{"id":123514,"depth":82,"text":123515},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120957,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123898,"title":123899,"body":123900,"description":2630,"extension":2631,"meta":124240,"navigation":545,"path":124241,"seo":124242,"stem":124243,"__hash__":124244},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123901,"toc":124238},[123902,123905,123910,123913,124159,124164,124167,124203,124206,124235],[10,123903,123899],{"id":123904},"_4-命令教程长期积累",[433,123906,123907],{},[436,123908,123909],{},"大多数命令",[19,123911,123912],{},"常用 Linux 命令速查：",[26,123914,123916],{"className":119762,"code":123915,"language":119764,"meta":31,"style":31},"# 文件与目录\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",[33,123917,123918,123923,123930,123937,123945,123952,123959,123967,123975,123982,123989,123997,124001,124006,124013,124021,124028,124032,124037,124044,124052,124060,124068,124076,124080,124085,124093,124100,124107,124115,124123,124127,124132,124141,124150],{"__ignoreMap":31},[36,123919,123920],{"class":38,"line":39},[36,123921,123922],{"class":42},"# 文件与目录\n",[36,123924,123925,123927],{"class":38,"line":46},[36,123926,29273],{"class":4500},[36,123928,123929],{"class":42},"        # 列出目录内容\n",[36,123931,123932,123934],{"class":38,"line":82},[36,123933,103750],{"class":49},[36,123935,123936],{"class":42},"        # 切换目录\n",[36,123938,123939,123942],{"class":38,"line":88},[36,123940,123941],{"class":49},"pwd",[36,123943,123944],{"class":42},"       # 显示当前路径\n",[36,123946,123947,123949],{"class":38,"line":195},[36,123948,103740],{"class":4500},[36,123950,123951],{"class":42},"     # 创建目录\n",[36,123953,123954,123956],{"class":38,"line":1517},[36,123955,27836],{"class":4500},[36,123957,123958],{"class":42},"        # 删除文件或目录\n",[36,123960,123961,123964],{"class":38,"line":2421},[36,123962,123963],{"class":4500},"cp",[36,123965,123966],{"class":42},"        # 复制文件或目录\n",[36,123968,123969,123972],{"class":38,"line":2446},[36,123970,123971],{"class":4500},"mv",[36,123973,123974],{"class":42},"        # 移动\u002F重命名文件或目录\n",[36,123976,123977,123979],{"class":38,"line":2469},[36,123978,103757],{"class":4500},[36,123980,123981],{"class":42},"     # 创建空文件\n",[36,123983,123984,123986],{"class":38,"line":2492},[36,123985,123229],{"class":4500},[36,123987,123988],{"class":42},"       # 查看文件内容\n",[36,123990,123991,123994],{"class":38,"line":4150},[36,123992,123993],{"class":4500},"head\u002Ftail",[36,123995,123996],{"class":42}," # 查看文件头部\u002F尾部\n",[36,123998,123999],{"class":38,"line":4155},[36,124000,546],{"emptyLinePlaceholder":545},[36,124002,124003],{"class":38,"line":4161},[36,124004,124005],{"class":42},"# 权限管理\n",[36,124007,124008,124010],{"class":38,"line":4166},[36,124009,27128],{"class":4500},[36,124011,124012],{"class":42},"     # 修改文件权限\n",[36,124014,124015,124018],{"class":38,"line":4180},[36,124016,124017],{"class":4500},"chown",[36,124019,124020],{"class":42},"     # 修改文件所有者\n",[36,124022,124023,124025],{"class":38,"line":4185},[36,124024,27093],{"class":4500},[36,124026,124027],{"class":42},"      # 以管理员身份执行\n",[36,124029,124030],{"class":38,"line":4191},[36,124031,546],{"emptyLinePlaceholder":545},[36,124033,124034],{"class":38,"line":4212},[36,124035,124036],{"class":42},"# 系统信息\n",[36,124038,124039,124041],{"class":38,"line":4217},[36,124040,72691],{"class":4500},[36,124042,124043],{"class":42},"     # 系统信息\n",[36,124045,124046,124049],{"class":38,"line":4231},[36,124047,124048],{"class":4500},"df",[36,124050,124051],{"class":42},"        # 磁盘使用情况\n",[36,124053,124054,124057],{"class":38,"line":4236},[36,124055,124056],{"class":4500},"free",[36,124058,124059],{"class":42},"      # 内存使用情况\n",[36,124061,124062,124065],{"class":38,"line":4264},[36,124063,124064],{"class":4500},"top\u002Fhtop",[36,124066,124067],{"class":42},"  # 进程监控\n",[36,124069,124070,124073],{"class":38,"line":4269},[36,124071,124072],{"class":4500},"ps",[36,124074,124075],{"class":42},"        # 查看进程\n",[36,124077,124078],{"class":38,"line":4286},[36,124079,546],{"emptyLinePlaceholder":545},[36,124081,124082],{"class":38,"line":4291},[36,124083,124084],{"class":42},"# 网络\n",[36,124086,124087,124090],{"class":38,"line":4296},[36,124088,124089],{"class":4500},"ping",[36,124091,124092],{"class":42},"      # 测试网络连通性\n",[36,124094,124095,124097],{"class":38,"line":4301},[36,124096,29361],{"class":4500},[36,124098,124099],{"class":42},"      # 发送 HTTP 请求\n",[36,124101,124102,124104],{"class":38,"line":4315},[36,124103,122754],{"class":4500},[36,124105,124106],{"class":42},"      # 下载文件\n",[36,124108,124109,124112],{"class":38,"line":4320},[36,124110,124111],{"class":4500},"ssh",[36,124113,124114],{"class":42},"       # 远程登录\n",[36,124116,124117,124120],{"class":38,"line":5109},[36,124118,124119],{"class":4500},"scp",[36,124121,124122],{"class":42},"       # 远程文件传输\n",[36,124124,124125],{"class":38,"line":5123},[36,124126,546],{"emptyLinePlaceholder":545},[36,124128,124129],{"class":38,"line":5131},[36,124130,124131],{"class":42},"# 包管理（Debian\u002FUbuntu）\n",[36,124133,124134,124136,124138],{"class":38,"line":5136},[36,124135,119834],{"class":4500},[36,124137,119813],{"class":57},[36,124139,124140],{"class":42},"   # 更新软件源\n",[36,124142,124143,124145,124147],{"class":38,"line":5142},[36,124144,119834],{"class":4500},[36,124146,26350],{"class":57},[36,124148,124149],{"class":42},"  # 安装软件包\n",[36,124151,124152,124154,124156],{"class":38,"line":5148},[36,124153,119834],{"class":4500},[36,124155,28592],{"class":57},[36,124157,124158],{"class":42},"   # 卸载软件包\n",[433,124160,124161],{"start":46},[436,124162,124163],{},"KDE Dolphin 以root打开",[19,124165,124166],{},"kde5",[26,124168,124170],{"className":119762,"code":124169,"language":119764,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,124171,124172],{"__ignoreMap":31},[36,124173,124174,124177,124180,124183,124185,124187,124190,124193,124195,124198,124200],{"class":38,"line":39},[36,124175,124176],{"class":4500},"pkexec",[36,124178,124179],{"class":57}," env",[36,124181,124182],{"class":57}," DISPLAY=",[36,124184,30654],{"class":53},[36,124186,30712],{"class":57},[36,124188,124189],{"class":53},"$XAUTHORITY ",[36,124191,124192],{"class":57},"KDE_SESSION_VERSION=",[36,124194,1134],{"class":49},[36,124196,124197],{"class":57}," KDE_FULL_SESSION=",[36,124199,3900],{"class":49},[36,124201,124202],{"class":57}," dolphin\n",[19,124204,124205],{},"kde6",[26,124207,124209],{"className":119762,"code":124208,"language":119764,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,124210,124211],{"__ignoreMap":31},[36,124212,124213,124215,124217,124219,124221,124223,124225,124227,124229,124231,124233],{"class":38,"line":39},[36,124214,124176],{"class":4500},[36,124216,124179],{"class":57},[36,124218,124182],{"class":57},[36,124220,30654],{"class":53},[36,124222,30712],{"class":57},[36,124224,124189],{"class":53},[36,124226,124192],{"class":57},[36,124228,3025],{"class":49},[36,124230,124197],{"class":57},[36,124232,3900],{"class":49},[36,124234,124202],{"class":57},[2602,124236,124237],{},"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":31,"searchDepth":46,"depth":46,"links":124239},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123899,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124246,"title":124247,"body":124248,"description":2630,"extension":2631,"meta":124262,"navigation":545,"path":124263,"seo":124264,"stem":124265,"__hash__":124266},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124249,"toc":124260},[124250,124253],[10,124251,124247],{"id":124252},"_5-各种环境配置",[19,124254,124255],{},[2923,124256,124259],{"href":124257,"rel":124258},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26381],"电控组环境搭建大全",{"title":31,"searchDepth":46,"depth":46,"links":124261},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124247,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124268,"title":124269,"body":124270,"description":2630,"extension":2631,"meta":124618,"navigation":545,"path":124619,"seo":124620,"stem":124621,"__hash__":124622},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124271,"toc":124610},[124272,124275,124279,124283,124287,124292,124299,124303,124596,124600,124607],[10,124273,124269],{"id":124274},"_6-拓展功能",[14,124276,124278],{"id":124277},"_61-wine","6.1 Wine",[14,124280,124282],{"id":124281},"_62-android","6.2 Android",[997,124284,124286],{"id":124285},"_621-i卡a卡","6.2.1 I卡、A卡",[433,124288,124289],{},[436,124290,124291],{},"Wayland-Waydroid(体验超级好)",[19,124293,124294,124295],{},"Waydroid 官网与安装指南：",[2923,124296,124297],{"href":124297,"rel":124298},"https:\u002F\u002Fwaydro.id\u002F",[26381],[997,124300,124302],{"id":124301},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[433,124304,124305],{},[436,124306,124307,124308,124310,124311,124315,124317,124320,124325,124522],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56210,124309],{},"BlissOS 官网下载：",[2923,124312,124313],{"href":124313,"rel":124314},"https:\u002F\u002Fblissos.org\u002F",[26381],[56210,124316],{},[4000,124318],{"alt":31,"src":124319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[433,124321,124322],{"start":82},[436,124323,124324],{},"比较推荐的配置",[26,124326,124328],{"className":119762,"code":124327,"language":119764,"meta":31,"style":31},"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",[33,124329,124330,124337,124347,124357,124367,124379,124389,124396,124406,124415,124424,124434,124444,124453,124463,124473,124485,124495,124504,124514],{"__ignoreMap":31},[36,124331,124332,124335],{"class":38,"line":39},[36,124333,124334],{"class":4500},"qemu-system-x86_64",[36,124336,27195],{"class":49},[36,124338,124339,124342,124345],{"class":38,"line":46},[36,124340,124341],{"class":49},"        -M",[36,124343,124344],{"class":57}," q35,vmport=off",[36,124346,27195],{"class":49},[36,124348,124349,124352,124355],{"class":38,"line":82},[36,124350,124351],{"class":49},"        -accel",[36,124353,124354],{"class":57}," kvm",[36,124356,27195],{"class":49},[36,124358,124359,124362,124365],{"class":38,"line":88},[36,124360,124361],{"class":49},"        -cpu",[36,124363,124364],{"class":57}," qemu64,+sse3,+sse4.2",[36,124366,27195],{"class":49},[36,124368,124369,124372,124375,124377],{"class":38,"line":195},[36,124370,124371],{"class":49},"        -smp",[36,124373,124374],{"class":57}," 8,cores=",[36,124376,2977],{"class":49},[36,124378,27195],{"class":49},[36,124380,124381,124384,124387],{"class":38,"line":1517},[36,124382,124383],{"class":49},"        -m",[36,124385,124386],{"class":57}," 6G",[36,124388,27195],{"class":49},[36,124390,124391,124394],{"class":38,"line":2421},[36,124392,124393],{"class":49},"        -usb",[36,124395,27195],{"class":49},[36,124397,124398,124401,124404],{"class":38,"line":2446},[36,124399,124400],{"class":49},"        -device",[36,124402,124403],{"class":57}," virtio-tablet",[36,124405,27195],{"class":49},[36,124407,124408,124410,124413],{"class":38,"line":2469},[36,124409,124400],{"class":49},[36,124411,124412],{"class":57}," virtio-keyboard",[36,124414,27195],{"class":49},[36,124416,124417,124419,124422],{"class":38,"line":2492},[36,124418,124400],{"class":49},[36,124420,124421],{"class":57}," usb-tablet",[36,124423,27195],{"class":49},[36,124425,124426,124429,124432],{"class":38,"line":4150},[36,124427,124428],{"class":49},"        -bios",[36,124430,124431],{"class":57}," OVMF-pure-efi64.fd",[36,124433,27195],{"class":49},[36,124435,124436,124439,124442],{"class":38,"line":4155},[36,124437,124438],{"class":49},"        -net",[36,124440,124441],{"class":57}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,124443,27195],{"class":49},[36,124445,124446,124448,124451],{"class":38,"line":4161},[36,124447,124438],{"class":49},[36,124449,124450],{"class":57}," nic,model=virtio",[36,124452,27195],{"class":49},[36,124454,124455,124458,124461],{"class":38,"line":4166},[36,124456,124457],{"class":49},"        -audio",[36,124459,124460],{"class":57}," sdl,model=hda",[36,124462,27195],{"class":49},[36,124464,124465,124468,124471],{"class":38,"line":4180},[36,124466,124467],{"class":49},"        -display",[36,124469,124470],{"class":57}," sdl,gl=on,show-cursor=on",[36,124472,27195],{"class":49},[36,124474,124475,124477,124480,124483],{"class":38,"line":4185},[36,124476,124400],{"class":49},[36,124478,124479],{"class":57}," virtio-vga-gl,xres=1920,yres=",[36,124481,124482],{"class":49},"1080",[36,124484,27195],{"class":49},[36,124486,124487,124490,124493],{"class":38,"line":4191},[36,124488,124489],{"class":49},"        -drive",[36,124491,124492],{"class":57}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,124494,27195],{"class":49},[36,124496,124497,124499,124502],{"class":38,"line":4212},[36,124498,124489],{"class":49},[36,124500,124501],{"class":57}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,124503,27195],{"class":49},[36,124505,124506,124509,124512],{"class":38,"line":4217},[36,124507,124508],{"class":49},"        -monitor",[36,124510,124511],{"class":57}," stdio",[36,124513,27195],{"class":49},[36,124515,124516,124519],{"class":38,"line":4231},[36,124517,124518],{"class":49},"        -serial",[36,124520,124521],{"class":57}," none\n",[433,124523,124524],{"start":195},[436,124525,124526,124527],{},"常用操作：",[433,124528,124529,124532,124588],{},[436,124530,124531],{},"全屏：Ctrl+Alt+F",[436,124533,124534,124535,124540],{},"adb调试",[433,124536,124537],{},[436,124538,124539],{},"使Linux与Android用ADB连接。",[26,124541,124543],{"className":119762,"code":124542,"language":119764,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,124544,124545,124550,124561,124566,124578,124583],{"__ignoreMap":31},[36,124546,124547],{"class":38,"line":39},[36,124548,124549],{"class":42},"# 连接安卓\n",[36,124551,124552,124555,124558],{"class":38,"line":46},[36,124553,124554],{"class":4500},"adb",[36,124556,124557],{"class":57}," connect",[36,124559,124560],{"class":49}," 127.0.0.1\n",[36,124562,124563],{"class":38,"line":82},[36,124564,124565],{"class":42},"# 打开shell\n",[36,124567,124568,124570,124572,124575],{"class":38,"line":88},[36,124569,124554],{"class":4500},[36,124571,29395],{"class":49},[36,124573,124574],{"class":57}," 127.0.0.1:5555",[36,124576,124577],{"class":57}," shell\n",[36,124579,124580],{"class":38,"line":195},[36,124581,124582],{"class":42},"# 使用root权限\n",[36,124584,124585],{"class":38,"line":1517},[36,124586,124587],{"class":4500},"su\n",[436,124589,124590,124591],{},"中文输入法",[433,124592,124593],{},[436,124594,124595],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124597,124599],{"id":124598},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124601,124602,124603],{},"rEFInd 官网与文档：",[2923,124604,124605],{"href":124605,"rel":124606},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26381],[2602,124608,124609],{},"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":31,"searchDepth":46,"depth":46,"links":124611},[124612,124613,124617],{"id":124277,"depth":46,"text":124278},{"id":124281,"depth":46,"text":124282,"children":124614},[124615,124616],{"id":124285,"depth":82,"text":124286},{"id":124301,"depth":82,"text":124302},{"id":124598,"depth":46,"text":124599},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124269,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124624,"title":124625,"body":124626,"description":2630,"extension":2631,"meta":127924,"navigation":545,"path":127925,"seo":127926,"stem":127927,"__hash__":127928},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124627,"toc":127898},[124628,124631,124635,124638,124645,124895,124898,124970,124973,124977,124981,124986,124989,124992,124995,125000,125003,125006,125009,125014,125017,125022,125025,125028,125033,125036,125041,125044,125048,125052,125055,125060,125063,125077,125080,125083,125092,125095,125104,125107,125110,125119,125122,125131,125134,125137,125146,125149,125152,125167,125170,125173,125182,125187,125190,125193,125202,125205,125214,125217,125226,125229,125238,125243,125246,125254,125259,125262,125271,125274,125282,125287,125290,125299,125302,125305,125309,125312,125317,125320,125325,125339,125344,125349,125360,125365,125371,125376,125391,125396,125399,125404,125409,125414,125422,125427,125434,125439,125450,125455,125458,125462,125465,125468,125473,125476,125495,125500,125503,125512,125517,125520,125542,125545,125575,125578,125583,125586,125600,125605,125624,125627,125630,125635,125647,125652,125657,125660,125665,125668,125683,125686,125691,125696,125700,125705,125745,125748,125752,125757,125763,125768,125771,125778,125783,125790,125793,125796,125803,125817,125820,125880,125883,125897,125909,125912,125915,125918,125982,125985,125988,125991,126011,126014,126019,126026,126030,126033,126037,126042,126047,126051,126054,126057,126099,126104,126107,126129,126144,126146,126151,126163,126223,126225,126227,126281,126283,126285,126291,126296,126299,126304,126308,126311,126373,126378,126381,126383,126387,126399,126481,126483,126485,126539,126545,126547,126551,126556,126558,126563,126567,126587,126622,126626,126629,126632,126635,126642,126645,126657,126660,126675,126678,126697,126745,126748,126765,126768,126782,126787,126790,126799,126814,126826,126864,126869,126878,126883,126888,126914,126923,126927,126931,126936,126939,126943,126947,126952,126955,126960,126963,126968,126971,126976,126979,126983,126988,126991,126996,126999,127003,127008,127011,127016,127019,127024,127027,127031,127036,127039,127044,127047,127052,127055,127059,127064,127067,127072,127075,127080,127083,127088,127091,127096,127099,127104,127107,127111,127116,127119,127124,127131,127135,127140,127143,127148,127151,127155,127160,127163,127166,127169,127172,127175,127179,127182,127192,127197,127202,127224,127229,127234,127241,127245,127250,127253,127256,127261,127264,127267,127270,127273,127276,127279,127282,127285,127288,127291,127294,127297,127302,127307,127312,127317,127322,127327,127332,127335,127339,127342,127346,127351,127356,127361,127366,127370,127376,127384,127389,127392,127397,127412,127415,127420,127454,127469,127472,127527,127553,127565,127568,127577,127580,127595,127600,127603,127609,127614,127617,127622,127625,127630,127635,127642,127645,127660,127663,127698,127703,127711,127749,127752,127755,127760,127763,127768,127779,127813,127818,127821,127830,127835,127841,127844,127849,127858,127863,127866,127869,127874,127882,127885,127890,127895],[10,124629,124625],{"id":124630},"_7-其他操作",[14,124632,124634],{"id":124633},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124636,124637],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124639,124640,124641,124644],{},"进入工控机的硬盘目录，进入",[33,124642,124643],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,124646,124650],{"className":124647,"code":124648,"language":124649,"meta":31,"style":31},"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",[33,124651,124652,124660,124671,124678,124685,124697,124704,124716,124727,124738,124745,124752,124759,124771,124783,124790,124802,124814,124821,124833,124845,124857,124868,124875,124886],{"__ignoreMap":31},[36,124653,124654,124657],{"class":38,"line":39},[36,124655,124656],{"class":53794},"network",[36,124658,124659],{"class":53},": \n",[36,124661,124662,124665,124667,124669],{"class":38,"line":46},[36,124663,124664],{"class":53794},"  version",[36,124666,53931],{"class":53},[36,124668,1188],{"class":49},[36,124670,5206],{"class":53},[36,124672,124673,124676],{"class":38,"line":82},[36,124674,124675],{"class":53794},"  wifis",[36,124677,124659],{"class":53},[36,124679,124680,124683],{"class":38,"line":88},[36,124681,124682],{"class":53794},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,124684,124659],{"class":53},[36,124686,124687,124690,124692,124695],{"class":38,"line":195},[36,124688,124689],{"class":53794},"      renderer",[36,124691,53931],{"class":53},[36,124693,124694],{"class":57},"NetworkManager",[36,124696,5206],{"class":53},[36,124698,124699,124702],{"class":38,"line":1517},[36,124700,124701],{"class":53794},"      match",[36,124703,124659],{"class":53},[36,124705,124706,124709,124711,124714],{"class":38,"line":2421},[36,124707,124708],{"class":53794},"        name",[36,124710,53931],{"class":53},[36,124712,124713],{"class":57},"\"wlan0\"",[36,124715,5206],{"class":53},[36,124717,124718,124721,124723,124725],{"class":38,"line":2446},[36,124719,124720],{"class":53794},"      dhcp4",[36,124722,53931],{"class":53},[36,124724,3900],{"class":49},[36,124726,5206],{"class":53},[36,124728,124729,124732,124734,124736],{"class":38,"line":2469},[36,124730,124731],{"class":53794},"      dhcp6",[36,124733,53931],{"class":53},[36,124735,3900],{"class":49},[36,124737,5206],{"class":53},[36,124739,124740,124743],{"class":38,"line":2492},[36,124741,124742],{"class":53794},"      access-points",[36,124744,124659],{"class":53},[36,124746,124747,124750],{"class":38,"line":4150},[36,124748,124749],{"class":57},"        \"EMIS_Vinci_Robocon_5G\"",[36,124751,124659],{"class":53},[36,124753,124754,124757],{"class":38,"line":4155},[36,124755,124756],{"class":53794},"          auth",[36,124758,124659],{"class":53},[36,124760,124761,124764,124766,124769],{"class":38,"line":4161},[36,124762,124763],{"class":53794},"            key-management",[36,124765,53931],{"class":53},[36,124767,124768],{"class":57},"\"psk\"",[36,124770,5206],{"class":53},[36,124772,124773,124776,124778,124781],{"class":38,"line":4166},[36,124774,124775],{"class":53794},"            password",[36,124777,53931],{"class":53},[36,124779,124780],{"class":57},"\"vinci666\"",[36,124782,5206],{"class":53},[36,124784,124785,124788],{"class":38,"line":4180},[36,124786,124787],{"class":53794},"          networkmanager",[36,124789,124659],{"class":53},[36,124791,124792,124795,124797,124800],{"class":38,"line":4185},[36,124793,124794],{"class":53794},"            uuid",[36,124796,53931],{"class":53},[36,124798,124799],{"class":57},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,124801,5206],{"class":53},[36,124803,124804,124807,124809,124812],{"class":38,"line":4191},[36,124805,124806],{"class":53794},"            name",[36,124808,53931],{"class":53},[36,124810,124811],{"class":57},"\"EMIS_Vinci_Robocon_5G\"",[36,124813,5206],{"class":53},[36,124815,124816,124819],{"class":38,"line":4212},[36,124817,124818],{"class":53794},"            passthrough",[36,124820,124659],{"class":53},[36,124822,124823,124826,124828,124831],{"class":38,"line":4217},[36,124824,124825],{"class":53794},"              wifi-security.auth-alg",[36,124827,53931],{"class":53},[36,124829,124830],{"class":57},"\"open\"",[36,124832,5206],{"class":53},[36,124834,124835,124838,124840,124843],{"class":38,"line":4231},[36,124836,124837],{"class":53794},"              ipv6.addr-gen-mode",[36,124839,53931],{"class":53},[36,124841,124842],{"class":57},"\"default\"",[36,124844,5206],{"class":53},[36,124846,124847,124850,124852,124855],{"class":38,"line":4236},[36,124848,124849],{"class":53794},"              ipv6.ip6-privacy",[36,124851,53931],{"class":53},[36,124853,124854],{"class":57},"\"-1\"",[36,124856,5206],{"class":53},[36,124858,124859,124862,124864,124866],{"class":38,"line":4264},[36,124860,124861],{"class":53794},"              proxy._",[36,124863,53931],{"class":53},[36,124865,10179],{"class":57},[36,124867,5206],{"class":53},[36,124869,124870,124873],{"class":38,"line":4269},[36,124871,124872],{"class":53794},"      networkmanager",[36,124874,124659],{"class":53},[36,124876,124877,124880,124882,124884],{"class":38,"line":4286},[36,124878,124879],{"class":53794},"        uuid",[36,124881,53931],{"class":53},[36,124883,124799],{"class":57},[36,124885,5206],{"class":53},[36,124887,124888,124890,124892],{"class":38,"line":4291},[36,124889,124708],{"class":53794},[36,124891,53931],{"class":53},[36,124893,124894],{"class":57},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124896,124897],{},"将其改为新wifi的名和密码：",[26,124899,124901],{"className":124647,"code":124900,"language":124649,"meta":31,"style":31},"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",[33,124902,124903,124909,124918,124924,124931,124940,124948,124954,124960],{"__ignoreMap":31},[36,124904,124905,124907],{"class":38,"line":39},[36,124906,124656],{"class":53794},[36,124908,6270],{"class":53},[36,124910,124911,124913,124915],{"class":38,"line":46},[36,124912,124664],{"class":53794},[36,124914,53931],{"class":53},[36,124916,124917],{"class":49},"2\n",[36,124919,124920,124922],{"class":38,"line":82},[36,124921,124675],{"class":53794},[36,124923,6270],{"class":53},[36,124925,124926,124929],{"class":38,"line":88},[36,124927,124928],{"class":53794},"    wlan0",[36,124930,6270],{"class":53},[36,124932,124933,124935,124937],{"class":38,"line":195},[36,124934,124720],{"class":53794},[36,124936,53931],{"class":53},[36,124938,124939],{"class":49},"true\n",[36,124941,124942,124944,124946],{"class":38,"line":1517},[36,124943,124731],{"class":53794},[36,124945,53931],{"class":53},[36,124947,124939],{"class":49},[36,124949,124950,124952],{"class":38,"line":2421},[36,124951,124742],{"class":53794},[36,124953,6270],{"class":53},[36,124955,124956,124958],{"class":38,"line":2446},[36,124957,124749],{"class":57},[36,124959,6270],{"class":53},[36,124961,124962,124965,124967],{"class":38,"line":2469},[36,124963,124964],{"class":53794},"          password",[36,124966,53931],{"class":53},[36,124968,124969],{"class":57},"\"vinci666\"\n",[19,124971,124972],{},"工控机开机即可连上网。",[14,124974,124976],{"id":124975},"_72-ssh远程开发","7.2 SSH远程开发",[997,124978,124980],{"id":124979},"_721-环境准备","7.2.1 环境准备",[19,124982,124983],{},[2839,124984,124985],{},"1.硬件准备",[19,124987,124988],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124990,124991],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124993,124994],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124996,124997],{},[2839,124998,124999],{},"2.设置固定IP",[19,125001,125002],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,125004,125005],{},"1.进入设置界面",[19,125007,125008],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,125010,125011],{},[4000,125012],{"alt":31,"src":125013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,125015,125016],{},"2.配置所连接的网络",[19,125018,125019],{},[4000,125020],{"alt":31,"src":125021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,125023,125024],{},"3.设置固定IP",[19,125026,125027],{},"查看当前IP地址。",[19,125029,125030],{},[4000,125031],{"alt":31,"src":125032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,125034,125035],{},"设置固定IP。",[19,125037,125038],{},[4000,125039],{"alt":31,"src":125040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,125042,125043],{},"至此，IP配置完毕。",[997,125045,125047],{"id":125046},"_722-环境搭建","7.2.2 环境搭建",[19,125049,125050],{},[2839,125051,28267],{},[19,125053,125054],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,125056,125057],{},[2839,125058,125059],{},"实现",[19,125061,125062],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[433,125064,125065,125068,125071,125074],{},[436,125066,125067],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[436,125069,125070],{},"远程主机启动SSH服务；",[436,125072,125073],{},"本地主机登陆远程主机；",[436,125075,125076],{},"实现数据传输。",[19,125078,125079],{},"1.安装SSH客户端与服务端",[19,125081,125082],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,125084,125086],{"className":123280,"code":125085,"language":123282,"meta":123283,"style":31}," sudo apt install openssh-server\n",[33,125087,125088],{"__ignoreMap":31},[36,125089,125090],{"class":38,"line":39},[36,125091,125085],{},[19,125093,125094],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,125096,125098],{"className":123280,"code":125097,"language":123282,"meta":123283,"style":31},"sudo apt install openssh-client\n",[33,125099,125100],{"__ignoreMap":31},[36,125101,125102],{"class":38,"line":39},[36,125103,125097],{},[19,125105,125106],{},"2.远程主机启动SSH服务",[19,125108,125109],{},"远程主机启动 ssh 服务命令如下：",[26,125111,125113],{"className":123280,"code":125112,"language":123282,"meta":123283,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,125114,125115],{"__ignoreMap":31},[36,125116,125117],{"class":38,"line":39},[36,125118,125112],{},[19,125120,125121],{},"启动后可使用如下命令查看服务是否正常运行：",[26,125123,125125],{"className":123280,"code":125124,"language":123282,"meta":123283,"style":31},"ps -e | grep ssh\n",[33,125126,125127],{"__ignoreMap":31},[36,125128,125129],{"class":38,"line":39},[36,125130,125124],{},[19,125132,125133],{},"如果启动成功，会包含 sshd 程序。",[19,125135,125136],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,125138,125140],{"className":123280,"code":125139,"language":123282,"meta":123283,"style":31},"sudo systemctl enable ssh\n",[33,125141,125142],{"__ignoreMap":31},[36,125143,125144],{"class":38,"line":39},[36,125145,125139],{},[19,125147,125148],{},"3.本地远程登录",[19,125150,125151],{},"登录远程主机可以调用如下命令:",[26,125153,125155],{"className":119762,"code":125154,"language":119764,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,125156,125157],{"__ignoreMap":31},[36,125158,125159,125161,125164],{"class":38,"line":39},[36,125160,124111],{"class":4500},[36,125162,125163],{"class":49}," -X",[36,125165,125166],{"class":57}," 用户名@ip地址\n",[19,125168,125169],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125171,125172],{},"如果退出，可以调用exit命令：",[26,125174,125176],{"className":123280,"code":125175,"language":123282,"meta":123283,"style":31},"exit\n",[33,125177,125178],{"__ignoreMap":31},[36,125179,125180],{"class":38,"line":39},[36,125181,125175],{},[19,125183,125184],{},[2839,125185,125186],{},"4.实现数据传输",[19,125188,125189],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125191,125192],{},"上传文件指令格式如下：",[26,125194,125196],{"className":123280,"code":125195,"language":123282,"meta":123283,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,125197,125198],{"__ignoreMap":31},[36,125199,125200],{"class":38,"line":39},[36,125201,125195],{},[19,125203,125204],{},"上传文件夹指令格式如下：",[26,125206,125208],{"className":123280,"code":125207,"language":123282,"meta":123283,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,125209,125210],{"__ignoreMap":31},[36,125211,125212],{"class":38,"line":39},[36,125213,125207],{},[19,125215,125216],{},"下载文件指令格式如下：",[26,125218,125220],{"className":123280,"code":125219,"language":123282,"meta":123283,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,125221,125222],{"__ignoreMap":31},[36,125223,125224],{"class":38,"line":39},[36,125225,125219],{},[19,125227,125228],{},"下载文件夹指令格式如下：",[26,125230,125232],{"className":123280,"code":125231,"language":123282,"meta":123283,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,125233,125234],{"__ignoreMap":31},[36,125235,125236],{"class":38,"line":39},[36,125237,125231],{},[19,125239,125240],{},[2839,125241,125242],{},"优化",[19,125244,125245],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[433,125247,125248,125251],{},[436,125249,125250],{},"本地生成密钥对；",[436,125252,125253],{},"将公钥上传至远程主机。",[19,125255,125256],{},[2839,125257,125258],{},"1.生成密钥对",[19,125260,125261],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,125263,125265],{"className":123280,"code":125264,"language":123282,"meta":123283,"style":31},"ssh-keygen\n",[33,125266,125267],{"__ignoreMap":31},[36,125268,125269],{"class":38,"line":39},[36,125270,125264],{},[19,125272,125273],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[433,125275,125276,125279],{},[436,125277,125278],{},"id_rsa （私钥）；",[436,125280,125281],{},"id_rsa.pub (公钥)。",[19,125283,125284],{},[2839,125285,125286],{},"2.公钥上传",[19,125288,125289],{},"上传指令如下：",[26,125291,125293],{"className":123280,"code":125292,"language":123282,"meta":123283,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,125294,125295],{"__ignoreMap":31},[36,125296,125297],{"class":38,"line":39},[36,125298,125292],{},[19,125300,125301],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125303,125304],{},"以后再远程登录就无需录入密码了。",[997,125306,125308],{"id":125307},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125310,125311],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125313,125314],{},[2839,125315,125316],{},"1.准备工作",[19,125318,125319],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125321,125322],{},[2839,125323,125324],{},"2.为VScode安装远程开发插件",[19,125326,125327,125328,125331,125332,125335,125336,1296],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,125329,125330],{},"扩展：商店","的搜索栏输入",[33,125333,125334],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,125337,125338],{},"安装",[19,125340,125341],{},[4000,125342],{"alt":31,"src":125343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125345,125346],{},[2839,125347,125348],{},"3.配置远程连接",[19,125350,125351,125352,125355,125356,125359],{},"步骤1：使用快捷键",[33,125353,125354],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,125357,125358],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125361,125362],{},[4000,125363],{"alt":31,"src":125364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125366,125367,125368,1296],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,125369,125370],{},"Add New SSH Host",[19,125372,125373],{},[4000,125374],{"alt":31,"src":125375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125377,125378,125379,125382,125383,125386,125387,125390],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,125380,125381],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,125384,125385],{},"ubuntu","需要替换为你的登录用户名，",[33,125388,125389],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125392,125393],{},[4000,125394],{"alt":31,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125397,125398],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125400,125401],{},[4000,125402],{"alt":31,"src":125403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125405,125406],{},[4000,125407],{"alt":31,"src":125408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125410,125411],{},[2839,125412,125413],{},"4.使用",[19,125415,125416,125417,125355,125419,125421],{},"步骤1：继续使用快捷键",[33,125418,125354],{},[33,125420,125358],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125423,125424],{},[4000,125425],{"alt":31,"src":125426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125428,125429,125430,125433],{},"或者，也可以点击侧边栏的",[33,125431,125432],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125435,125436],{},[4000,125437],{"alt":31,"src":125438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125440,125441,125442,125445,125446,125449],{},"步骤2：选择菜单栏的",[33,125443,125444],{},"文件","下的",[33,125447,125448],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125451,125452],{},[4000,125453],{"alt":31,"src":125454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125456,125457],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125459,125461],{"id":125460},"_73-远程桌面","7.3 远程桌面",[19,125463,125464],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125466,125467],{},"我们选择使用VNC来看。",[433,125469,125470],{},[436,125471,125472],{},"安装VNC服务器：",[19,125474,125475],{},"这里以TigerVNC为例进行安装：",[26,125477,125479],{"className":119762,"code":125478,"language":119764,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,125480,125481],{"__ignoreMap":31},[36,125482,125483,125485,125487,125489,125492],{"class":38,"line":39},[36,125484,27093],{"class":4500},[36,125486,119783],{"class":57},[36,125488,26350],{"class":57},[36,125490,125491],{"class":57}," tigervnc-standalone-server",[36,125493,125494],{"class":57}," tigervnc-common\n",[433,125496,125497],{"start":46},[436,125498,125499],{},"设置VNC密码：",[19,125501,125502],{},"为VNC用户设置密码，运行以下命令：",[26,125504,125506],{"className":119762,"code":125505,"language":119764,"meta":31,"style":31},"vncpasswd\n",[33,125507,125508],{"__ignoreMap":31},[36,125509,125510],{"class":38,"line":39},[36,125511,125505],{"class":4500},[433,125513,125514],{"start":82},[436,125515,125516],{},"配置VNC启动脚本:",[19,125518,125519],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,125521,125523],{"className":119762,"code":125522,"language":119764,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,125524,125525,125534],{"__ignoreMap":31},[36,125526,125527,125529,125531],{"class":38,"line":39},[36,125528,103740],{"class":4500},[36,125530,31726],{"class":49},[36,125532,125533],{"class":57}," ~\u002F.vnc\n",[36,125535,125536,125539],{"class":38,"line":46},[36,125537,125538],{"class":4500},"nano",[36,125540,125541],{"class":57}," ~\u002F.vnc\u002Fxstartup\n",[19,125543,125544],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,125546,125548],{"className":119762,"code":125547,"language":119764,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,125549,125550,125555,125563,125570],{"__ignoreMap":31},[36,125551,125552],{"class":38,"line":39},[36,125553,125554],{"class":42},"#!\u002Fbin\u002Fsh\n",[36,125556,125557,125560],{"class":38,"line":46},[36,125558,125559],{"class":49},"unset",[36,125561,125562],{"class":57}," SESSION_MANAGER\n",[36,125564,125565,125567],{"class":38,"line":82},[36,125566,125559],{"class":49},[36,125568,125569],{"class":57}," DBUS_SESSION_BUS_ADDRESS\n",[36,125571,125572],{"class":38,"line":88},[36,125573,125574],{"class":4500},"gnome-session\n",[19,125576,125577],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[433,125579,125580],{"start":88},[436,125581,125582],{},"给予执行权限：",[19,125584,125585],{},"为xstartup文件设置执行权限：",[26,125587,125589],{"className":119762,"code":125588,"language":119764,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,125590,125591],{"__ignoreMap":31},[36,125592,125593,125595,125598],{"class":38,"line":39},[36,125594,27128],{"class":4500},[36,125596,125597],{"class":57}," +x",[36,125599,125541],{"class":57},[433,125601,125602],{"start":195},[436,125603,125604],{},"启动VNC服务器：",[26,125606,125608],{"className":119762,"code":125607,"language":119764,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,125609,125610],{"__ignoreMap":31},[36,125611,125612,125615,125618,125621],{"class":38,"line":39},[36,125613,125614],{"class":4500},"vncserver",[36,125616,125617],{"class":49}," -geometry",[36,125619,125620],{"class":57}," 1920x1080",[36,125622,125623],{"class":49}," -localhost=0\n",[19,125625,125626],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125628,125629],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[433,125631,125632],{"start":1517},[436,125633,125634],{},"查看已开启的VNC服务器：",[26,125636,125638],{"className":119762,"code":125637,"language":119764,"meta":31,"style":31},"vncserver -list\n",[33,125639,125640],{"__ignoreMap":31},[36,125641,125642,125644],{"class":38,"line":39},[36,125643,125614],{"class":4500},[36,125645,125646],{"class":49}," -list\n",[19,125648,125649],{},[4000,125650],{"alt":31,"src":125651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[433,125653,125654],{"start":2421},[436,125655,125656],{},"连接到VNC服务器：",[19,125658,125659],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[433,125661,125662],{"start":2446},[436,125663,125664],{},"停止VNC服务器：",[19,125666,125667],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,125669,125671],{"className":119762,"code":125670,"language":119764,"meta":31,"style":31},"vncserver -kill :1\n",[33,125672,125673],{"__ignoreMap":31},[36,125674,125675,125677,125680],{"class":38,"line":39},[36,125676,125614],{"class":4500},[36,125678,125679],{"class":49}," -kill",[36,125681,125682],{"class":57}," :1\n",[19,125684,125685],{},"将:1替换为你实际使用的显示编号。",[19,125687,125688],{},[4000,125689],{"alt":31,"src":125690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125692,125693],{},[4000,125694],{"alt":31,"src":125695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125697,125699],{"id":125698},"_74-usb端口设置","7.4 USB端口设置",[19,125701,125702],{},[2839,125703,125704],{},"首先先配置好权限",[26,125706,125708],{"className":119762,"code":125707,"language":119764,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,125709,125710,125715,125728,125735,125740],{"__ignoreMap":31},[36,125711,125712],{"class":38,"line":39},[36,125713,125714],{"class":42},"# 将用户权限提高\n",[36,125716,125717,125719,125721,125723,125726],{"class":38,"line":46},[36,125718,27093],{"class":4500},[36,125720,29086],{"class":57},[36,125722,29089],{"class":49},[36,125724,125725],{"class":57}," dialout",[36,125727,29094],{"class":53},[36,125729,125730,125732],{"class":38,"line":82},[36,125731,29113],{"class":4500},[36,125733,125734],{"class":57}," dialout\n",[36,125736,125737],{"class":38,"line":88},[36,125738,125739],{"class":42},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,125741,125742],{"class":38,"line":195},[36,125743,125744],{"class":4500},"groups\n",[19,125746,125747],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[997,125749,125751],{"id":125750},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125753,125754,125756],{},[2839,125755,2310],{}," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125758,125759,125762],{},[2839,125760,125761],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125764,125765],{},[2839,125766,125767],{},"流程如下：",[19,125769,125770],{},"（1）.查找设备idVendor和idProduct",[19,125772,125773,125774,125777],{},"接入两个USB设备，在终端调用指令",[33,125775,125776],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125779,125780],{},[4000,125781],{"alt":31,"src":125782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125784,125785,125786,125789],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,125787,125788],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125791,125792],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125794,125795],{},"（2）.编写映射规则",[19,125797,125798,125799,125802],{},"在",[33,125800,125801],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,125804,125806],{"className":119762,"code":125805,"language":119764,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,125807,125808],{"__ignoreMap":31},[36,125809,125810,125812,125814],{"class":38,"line":39},[36,125811,27093],{"class":4500},[36,125813,121049],{"class":57},[36,125815,125816],{"class":57}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125818,125819],{},"输入如下内容：",[26,125821,125823],{"className":119762,"code":125822,"language":119764,"meta":31,"style":31},"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",[33,125824,125825,125855],{"__ignoreMap":31},[36,125826,125827,125830,125832,125835,125838,125841,125844,125846,125849,125852],{"class":38,"line":39},[36,125828,125829],{"class":53},"KERNEL",[36,125831,115],{"class":114},[36,125833,125834],{"class":57},"=\"ttyUSB*\",",[36,125836,125837],{"class":4500}," ATTRS",[36,125839,125840],{"class":57},"{idVendor}==",[36,125842,125843],{"class":4500},"\"10c4\"",[36,125845,3059],{"class":4500},[36,125847,125848],{"class":57}," ATTRS{idProduct}==\"ea60\",",[36,125850,125851],{"class":57}," MODE:=\"0777\",",[36,125853,125854],{"class":57}," SYMLINK+=\"mylidar\"\n",[36,125856,125857,125859,125861,125863,125865,125867,125870,125872,125875,125877],{"class":38,"line":46},[36,125858,125829],{"class":53},[36,125860,115],{"class":114},[36,125862,125834],{"class":57},[36,125864,125837],{"class":4500},[36,125866,125840],{"class":57},[36,125868,125869],{"class":4500},"\"1a86\"",[36,125871,3059],{"class":4500},[36,125873,125874],{"class":57}," ATTRS{idProduct}==\"7523\",",[36,125876,125851],{"class":57},[36,125878,125879],{"class":57}," SYMLINK+=\"mycar\"\n",[19,125881,125882],{},"代码解释：",[3680,125884,125885,125888,125891,125894],{},[436,125886,125887],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[436,125889,125890],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[436,125892,125893],{},"SYMLINK是符号连接，即绑定的别名；",[436,125895,125896],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125898,125899,125900,125903,125906],{},"***小提示：***",[26070,125901,125902],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,125904,125905],{},"\u002Fetc\u002Fudev\u002Frule.d",[26070,125907,125908],{},"目录即可。",[19,125910,125911],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125913,125914],{},"（3）.使规则生效",[19,125916,125917],{},"在终端下输入如下指令：",[26,125919,125921],{"className":119762,"code":125920,"language":119764,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,125922,125923,125928,125940,125951,125955,125960,125973],{"__ignoreMap":31},[36,125924,125925],{"class":38,"line":39},[36,125926,125927],{"class":42},"# Ubuntu用下方命令\n",[36,125929,125930,125932,125934,125937],{"class":38,"line":46},[36,125931,27093],{"class":4500},[36,125933,122513],{"class":57},[36,125935,125936],{"class":57}," udev",[36,125938,125939],{"class":57}," reload\n",[36,125941,125942,125944,125946,125948],{"class":38,"line":82},[36,125943,27093],{"class":4500},[36,125945,122513],{"class":57},[36,125947,125936],{"class":57},[36,125949,125950],{"class":57}," restart\n",[36,125952,125953],{"class":38,"line":88},[36,125954,546],{"emptyLinePlaceholder":545},[36,125956,125957],{"class":38,"line":195},[36,125958,125959],{"class":42},"#Fedora用下方命令\n",[36,125961,125962,125964,125967,125970],{"class":38,"line":1517},[36,125963,27093],{"class":4500},[36,125965,125966],{"class":57}," udevadm",[36,125968,125969],{"class":57}," control",[36,125971,125972],{"class":49}," --reload\n",[36,125974,125975,125977,125979],{"class":38,"line":2421},[36,125976,27093],{"class":4500},[36,125978,125966],{"class":57},[36,125980,125981],{"class":57}," trigger\n",[19,125983,125984],{},"再重新插拔设备即可。",[19,125986,125987],{},"（4）.测试",[19,125989,125990],{},"终端下输入如下指令",[26,125992,125994],{"className":119762,"code":125993,"language":119764,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,125995,125996],{"__ignoreMap":31},[36,125997,125998,126001,126004,126006,126008],{"class":38,"line":39},[36,125999,126000],{"class":4500},"ll",[36,126002,126003],{"class":57}," \u002Fdev",[36,126005,27625],{"class":114},[36,126007,32746],{"class":4500},[36,126009,126010],{"class":57}," ttyUSB\n",[19,126012,126013],{},"运行结果如下：",[19,126015,126016],{},[4000,126017],{"alt":31,"src":126018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,126020,126021,126022,126025],{},"也可以多次插拔USB设备，会发现设备端口",[33,126023,126024],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,126027,126028],{},[2839,126029,120430],{},[19,126031,126032],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[997,126034,126036],{"id":126035},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,126038,126039,126041],{},[2839,126040,2310],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,126043,126044,126046],{},[2839,126045,125761],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,126048,126049],{},[2839,126050,125767],{},[19,126052,126053],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,126055,126056],{},"调用如下指令查看第一台雷达的USB信息：",[26,126058,126060],{"className":119762,"code":126059,"language":119764,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,126061,126062,126082],{"__ignoreMap":31},[36,126063,126064,126067,126069,126072,126075,126077,126079],{"class":38,"line":39},[36,126065,126066],{"class":4500},"udevadm",[36,126068,72308],{"class":57},[36,126070,126071],{"class":49}," --attribute-walk",[36,126073,126074],{"class":49}," --name=\u002Fdev\u002FttyUSB0",[36,126076,27625],{"class":114},[36,126078,32746],{"class":4500},[36,126080,126081],{"class":57}," KERNELS\n",[36,126083,126084,126086,126088,126090,126093,126095,126097],{"class":38,"line":46},[36,126085,126066],{"class":4500},[36,126087,72308],{"class":57},[36,126089,126071],{"class":49},[36,126091,126092],{"class":49}," --name=\u002Fdev\u002FttyACM0",[36,126094,27625],{"class":114},[36,126096,32746],{"class":4500},[36,126098,126081],{"class":57},[19,126100,126101],{},[4000,126102],{"alt":31,"src":126103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126105,126106],{},"调用如下指令查看第二台雷达的USB信息：",[26,126108,126110],{"className":119762,"code":126109,"language":119764,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,126111,126112],{"__ignoreMap":31},[36,126113,126114,126116,126118,126120,126123,126125,126127],{"class":38,"line":39},[36,126115,126066],{"class":4500},[36,126117,72308],{"class":57},[36,126119,126071],{"class":49},[36,126121,126122],{"class":49}," --name=\u002Fdev\u002FttyUSB1",[36,126124,27625],{"class":114},[36,126126,32746],{"class":4500},[36,126128,126081],{"class":57},[19,126130,126131,126132,126135,126136,126139,126140,126143],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,126133,126134],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,126137,126138],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2839,126141,126142],{},"唯一性标识","”。",[19,126145,125795],{},[19,126147,125798,126148,126150],{},[33,126149,125801],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,126152,126153],{"className":119762,"code":125805,"language":119764,"meta":31,"style":31},[33,126154,126155],{"__ignoreMap":31},[36,126156,126157,126159,126161],{"class":38,"line":39},[36,126158,27093],{"class":4500},[36,126160,121049],{"class":57},[36,126162,125816],{"class":57},[26,126164,126166],{"className":119762,"code":126165,"language":119764,"meta":31,"style":31},"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",[33,126167,126168,126197],{"__ignoreMap":31},[36,126169,126170,126172,126174,126176,126179,126181,126184,126187,126189,126192,126194],{"class":38,"line":39},[36,126171,125829],{"class":53},[36,126173,115],{"class":114},[36,126175,125834],{"class":57},[36,126177,126178],{"class":53}," KERNELS",[36,126180,115],{"class":114},[36,126182,126183],{"class":57},"=\"1-1.3:1.0\",",[36,126185,126186],{"class":4500}," MODE:",[36,126188,115],{"class":57},[36,126190,126191],{"class":4500},"\"0777\"",[36,126193,3059],{"class":4500},[36,126195,126196],{"class":57}," SYMLINK+=\"rplidar_front\"\n",[36,126198,126199,126201,126203,126205,126207,126209,126212,126214,126216,126218,126220],{"class":38,"line":46},[36,126200,125829],{"class":53},[36,126202,115],{"class":114},[36,126204,125834],{"class":57},[36,126206,126178],{"class":53},[36,126208,115],{"class":114},[36,126210,126211],{"class":57},"=\"1-1.4:1.0\",",[36,126213,126186],{"class":4500},[36,126215,115],{"class":57},[36,126217,126191],{"class":4500},[36,126219,3059],{"class":4500},[36,126221,126222],{"class":57}," SYMLINK+=\"rplidar_back\"\n",[19,126224,125914],{},[19,126226,125917],{},[26,126228,126229],{"className":119762,"code":125920,"language":119764,"meta":31,"style":31},[33,126230,126231,126235,126245,126255,126259,126263,126273],{"__ignoreMap":31},[36,126232,126233],{"class":38,"line":39},[36,126234,125927],{"class":42},[36,126236,126237,126239,126241,126243],{"class":38,"line":46},[36,126238,27093],{"class":4500},[36,126240,122513],{"class":57},[36,126242,125936],{"class":57},[36,126244,125939],{"class":57},[36,126246,126247,126249,126251,126253],{"class":38,"line":82},[36,126248,27093],{"class":4500},[36,126250,122513],{"class":57},[36,126252,125936],{"class":57},[36,126254,125950],{"class":57},[36,126256,126257],{"class":38,"line":88},[36,126258,546],{"emptyLinePlaceholder":545},[36,126260,126261],{"class":38,"line":195},[36,126262,125959],{"class":42},[36,126264,126265,126267,126269,126271],{"class":38,"line":1517},[36,126266,27093],{"class":4500},[36,126268,125966],{"class":57},[36,126270,125969],{"class":57},[36,126272,125972],{"class":49},[36,126274,126275,126277,126279],{"class":38,"line":2421},[36,126276,27093],{"class":4500},[36,126278,125966],{"class":57},[36,126280,125981],{"class":57},[19,126282,125984],{},[19,126284,125987],{},[19,126286,125990,126287,126290],{},[33,126288,126289],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126292,126293],{},[4000,126294],{"alt":31,"src":126295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126297,126298],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126300,126301,126303],{},[2839,126302,120430],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[997,126305,126307],{"id":126306},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126309,126310],{},"（1）.查看所连接的主机USB接口的信息",[26,126312,126314],{"className":119762,"code":126313,"language":119764,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,126315,126316,126346],{"__ignoreMap":31},[36,126317,126318,126320,126322,126325,126327,126329,126331,126333,126336,126339,126341,126344],{"class":38,"line":39},[36,126319,126066],{"class":4500},[36,126321,72308],{"class":57},[36,126323,126324],{"class":49}," -a",[36,126326,31726],{"class":49},[36,126328,30932],{"class":53},[36,126330,126066],{"class":4500},[36,126332,72308],{"class":57},[36,126334,126335],{"class":49}," -q",[36,126337,126338],{"class":57}," path",[36,126340,27631],{"class":49},[36,126342,126343],{"class":57}," \u002Fdev\u002FttyACM0",[36,126345,61],{"class":53},[36,126347,126348,126350,126352,126354,126356,126358,126360,126362,126364,126366,126368,126371],{"class":38,"line":46},[36,126349,126066],{"class":4500},[36,126351,72308],{"class":57},[36,126353,126324],{"class":49},[36,126355,31726],{"class":49},[36,126357,30932],{"class":53},[36,126359,126066],{"class":4500},[36,126361,72308],{"class":57},[36,126363,126335],{"class":49},[36,126365,126338],{"class":57},[36,126367,27631],{"class":49},[36,126369,126370],{"class":57}," \u002Fdev\u002FttyUSB0",[36,126372,61],{"class":53},[19,126374,126375],{},[4000,126376],{"alt":31,"src":126377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126379,126380],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126382,125795],{},[19,126384,125798,126385,126150],{},[33,126386,125801],{},[26,126388,126389],{"className":119762,"code":125805,"language":119764,"meta":31,"style":31},[33,126390,126391],{"__ignoreMap":31},[36,126392,126393,126395,126397],{"class":38,"line":39},[36,126394,27093],{"class":4500},[36,126396,121049],{"class":57},[36,126398,125816],{"class":57},[26,126400,126402],{"className":119762,"code":126401,"language":119764,"meta":31,"style":31},"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",[33,126403,126404,126432,126458],{"__ignoreMap":31},[36,126405,126406,126408,126410,126413,126415,126417,126419,126421,126424,126427,126429],{"class":38,"line":39},[36,126407,125829],{"class":53},[36,126409,115],{"class":114},[36,126411,126412],{"class":57},"=\"ttyACM*\",",[36,126414,125837],{"class":4500},[36,126416,125840],{"class":57},[36,126418,125869],{"class":4500},[36,126420,3059],{"class":4500},[36,126422,126423],{"class":57}," ATTRS{idProduct}==\"55d4\",",[36,126425,126426],{"class":57}," ATTRS{serial}==\"0001\",",[36,126428,125851],{"class":57},[36,126430,126431],{"class":57}," SYMLINK+=\"ttyACM_MCU\"\n",[36,126433,126434,126436,126438,126440,126442,126444,126446,126448,126450,126453,126455],{"class":38,"line":46},[36,126435,125829],{"class":53},[36,126437,115],{"class":114},[36,126439,126412],{"class":57},[36,126441,125837],{"class":4500},[36,126443,125840],{"class":57},[36,126445,125869],{"class":4500},[36,126447,3059],{"class":4500},[36,126449,126423],{"class":57},[36,126451,126452],{"class":57}," ATTRS{serial}==\"0002\",",[36,126454,125851],{"class":57},[36,126456,126457],{"class":57}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,126459,126460,126462,126464,126466,126468,126470,126472,126474,126476,126478],{"class":38,"line":82},[36,126461,125829],{"class":53},[36,126463,115],{"class":114},[36,126465,125834],{"class":57},[36,126467,125837],{"class":4500},[36,126469,125840],{"class":57},[36,126471,125869],{"class":4500},[36,126473,3059],{"class":4500},[36,126475,125874],{"class":57},[36,126477,125851],{"class":57},[36,126479,126480],{"class":57}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126482,125914],{},[19,126484,125917],{},[26,126486,126487],{"className":119762,"code":125920,"language":119764,"meta":31,"style":31},[33,126488,126489,126493,126503,126513,126517,126521,126531],{"__ignoreMap":31},[36,126490,126491],{"class":38,"line":39},[36,126492,125927],{"class":42},[36,126494,126495,126497,126499,126501],{"class":38,"line":46},[36,126496,27093],{"class":4500},[36,126498,122513],{"class":57},[36,126500,125936],{"class":57},[36,126502,125939],{"class":57},[36,126504,126505,126507,126509,126511],{"class":38,"line":82},[36,126506,27093],{"class":4500},[36,126508,122513],{"class":57},[36,126510,125936],{"class":57},[36,126512,125950],{"class":57},[36,126514,126515],{"class":38,"line":88},[36,126516,546],{"emptyLinePlaceholder":545},[36,126518,126519],{"class":38,"line":195},[36,126520,125959],{"class":42},[36,126522,126523,126525,126527,126529],{"class":38,"line":1517},[36,126524,27093],{"class":4500},[36,126526,125966],{"class":57},[36,126528,125969],{"class":57},[36,126530,125972],{"class":49},[36,126532,126533,126535,126537],{"class":38,"line":2421},[36,126534,27093],{"class":4500},[36,126536,125966],{"class":57},[36,126538,125981],{"class":57},[19,126540,126541,126542],{},"再重新插拔设备即可，或者 ",[2839,126543,126544],{},"直接重启系统。",[19,126546,125987],{},[19,126548,125990,126549,126290],{},[33,126550,126289],{},[19,126552,126553],{},[4000,126554],{"alt":31,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126557,126298],{},[19,126559,126560,126562],{},[2839,126561,120430],{}," 一些设备可能没有串口号等。",[997,126564,126566],{"id":126565},"_744-其他注意事项","7.4.4 其他注意事项",[19,126568,126569,126570,126572,126573,126576,126577,20928,126580,126583,126584,126586],{},"并非所有的USB设备端口号都是",[33,126571,126024],{},"的格式，比如Arduino的端口号可能是",[33,126574,126575],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,126578,126579],{},"videon",[33,126581,126582],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,126585,126579],{},"端口，绑定时需要关联的也是该接口。",[19,126588,126589,126590,126593,126594,126597,126598,126600,126601,126604,126605,126608,126609,126612,126613,126612,126616,126612,126619,1296],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,126591,126592],{},"KERNEL==\"ttyUSB*\"","修改为",[33,126595,126596],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,126599,126592],{},"修改为类似于",[33,126602,126603],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,126606,126607],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,126610,126611],{},"video0","或",[33,126614,126615],{},"video2",[33,126617,126618],{},"video4",[33,126620,126621],{},"video6",[14,126623,126625],{"id":126624},"_75-挂载内网网页","7.5 挂载内网网页",[19,126627,126628],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126630,126631],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126633,126634],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126636,126637,126638],{},"Termux 下载地址（F-Droid）：",[2923,126639,126640],{"href":126640,"rel":126641},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26381],[19,126643,126644],{},"首先打开app后，先更新软件缓存：",[26,126646,126648],{"className":119762,"code":126647,"language":119764,"meta":31,"style":31},"pkg update\n",[33,126649,126650],{"__ignoreMap":31},[36,126651,126652,126655],{"class":38,"line":39},[36,126653,126654],{"class":4500},"pkg",[36,126656,28754],{"class":57},[19,126658,126659],{},"然后换源",[26,126661,126663],{"className":119762,"code":126662,"language":119764,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,126664,126665],{"__ignoreMap":31},[36,126666,126667,126669,126672],{"class":38,"line":39},[36,126668,125538],{"class":4500},[36,126670,126671],{"class":53}," $PREFIX",[36,126673,126674],{"class":57},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126676,126677],{},"将该文件内容替换为下面：",[26,126679,126681],{"className":119762,"code":126680,"language":119764,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,126682,126683],{"__ignoreMap":31},[36,126684,126685,126688,126691,126694],{"class":38,"line":39},[36,126686,126687],{"class":4500},"deb",[36,126689,126690],{"class":57}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,126692,126693],{"class":57}," stable",[36,126695,126696],{"class":57}," main\n",[3680,126698,126699,126726],{},[436,126700,126701,126702,126704,126705],{},"如果你使用的是",[33,126703,125538],{},"编辑器：",[3680,126706,126707,126714,126720],{},[436,126708,126709,126710,126713],{},"按 ",[33,126711,126712],{},"Ctrl+O"," 保存文件。",[436,126715,126709,126716,126719],{},[33,126717,126718],{},"Enter"," 确认文件名。",[436,126721,126709,126722,126725],{},[33,126723,126724],{},"Ctrl+X"," 退出编辑器。",[436,126727,126701,126728,126704,126731],{},[33,126729,126730],{},"vim",[3680,126732,126733,126739],{},[436,126734,126709,126735,126738],{},[33,126736,126737],{},"Esc"," 退出编辑模式。",[436,126740,126741,126742,126744],{},"输入 ",[33,126743,121687],{}," 保存并退出。",[19,126746,126747],{},"接下来重新更新软件源：",[26,126749,126751],{"className":119762,"code":126750,"language":119764,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,126752,126753],{"__ignoreMap":31},[36,126754,126755,126757,126759,126761,126763],{"class":38,"line":39},[36,126756,126654],{"class":4500},[36,126758,119813],{"class":57},[36,126760,28703],{"class":53},[36,126762,126654],{"class":4500},[36,126764,119799],{"class":57},[19,126766,126767],{},"安装python：",[26,126769,126771],{"className":119762,"code":126770,"language":119764,"meta":31,"style":31},"pkg install python\n",[33,126772,126773],{"__ignoreMap":31},[36,126774,126775,126777,126779],{"class":38,"line":39},[36,126776,126654],{"class":4500},[36,126778,26350],{"class":57},[36,126780,126781],{"class":57}," python\n",[19,126783,126784,28985],{},[2839,126785,126786],{},"通过Termux访问设备存储",[19,126788,126789],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,126791,126793],{"className":119762,"code":126792,"language":119764,"meta":31,"style":31},"termux-setup-storage\n",[33,126794,126795],{"__ignoreMap":31},[36,126796,126797],{"class":38,"line":39},[36,126798,126792],{"class":4500},[433,126800,126801],{},[436,126802,126803,28985,126806],{},[2839,126804,126805],{},"进入HTML文件所在的目录",[433,126807,126808],{},[436,126809,126810,126811,126813],{},"使用",[33,126812,103750],{},"命令进入HTML文件所在的目录：",[26,126815,126817],{"className":119762,"code":126816,"language":119764,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,126818,126819],{"__ignoreMap":31},[36,126820,126821,126823],{"class":38,"line":39},[36,126822,103750],{"class":49},[36,126824,126825],{"class":57}," ~\u002Fyour_html_folder\n",[433,126827,126828],{"start":46},[436,126829,126830,28985,126833,126838,126855],{},[2839,126831,126832],{},"启动Python HTTP服务器",[433,126834,126835],{},[436,126836,126837],{},"运行以下命令启动一个简单的HTTP服务器：",[26,126839,126841],{"className":119762,"code":126840,"language":119764,"meta":31,"style":31},"python -m http.server 8000\n",[33,126842,126843],{"__ignoreMap":31},[36,126844,126845,126847,126849,126852],{"class":38,"line":39},[36,126846,30],{"class":4500},[36,126848,103357],{"class":49},[36,126850,126851],{"class":57}," http.server",[36,126853,126854],{"class":49}," 8000\n",[433,126856,126857],{"start":82},[436,126858,126859,126860,126863],{},"这会在端口",[33,126861,126862],{},"8000","上启动一个Web服务器。",[3680,126865,126866],{},[436,126867,126868],{},"启动服务器后，Termux会显示日志信息，例如：",[26,126870,126872],{"className":123280,"code":126871,"language":123282,"meta":123283,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,126873,126874],{"__ignoreMap":31},[36,126875,126876],{"class":38,"line":39},[36,126877,126871],{},[3680,126879,126880],{},[436,126881,126882],{},"这表示服务器已成功启动。",[19,126884,126885],{},[2839,126886,126887],{},"在浏览器中访问HTML文件",[433,126889,126890],{},[436,126891,126892,28985,126895,126900],{},[2839,126893,126894],{},"在同一设备上访问",[433,126896,126897],{},[436,126898,126899],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,126901,126904],{"className":126902,"code":126903,"language":74150,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,126905,126906],{"__ignoreMap":31},[36,126907,126908,126911],{"class":38,"line":39},[36,126909,126910],{"class":53},"http:",[36,126912,126913],{"class":42},"\u002F\u002Flocalhost:8000\n",[3680,126915,126916],{},[436,126917,126918,126919,126922],{},"如果HTML文件中有",[33,126920,126921],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126924,126926],{"id":126925},"_76-linux重点知识","7.6 Linux重点知识",[997,126928,126930],{"id":126929},"_761-关于点的说明","7.6.1 关于点的说明",[19,126932,126933],{},[4000,126934],{"alt":31,"src":126935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126937,126938],{},"一点本目录，两点上目录",[997,126940,126942],{"id":126941},"_762-目录","7.6.2 目录",[24515,126944,126946],{"id":126945},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126948,126949],{},[2839,126950,126951],{},"\u002Fboot:",[19,126953,126954],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126956,126957],{},[2839,126958,126959],{},"\u002Fetc:",[19,126961,126962],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126964,126965],{},[2839,126966,126967],{},"\u002Flib：",[19,126969,126970],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126972,126973],{},[2839,126974,126975],{},"\u002Fsys:",[19,126977,126978],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24515,126980,126982],{"id":126981},"_7622-指令集合","7.6.2.2 指令集合",[19,126984,126985],{},[2839,126986,126987],{},"\u002Fbin:",[19,126989,126990],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126992,126993],{},[2839,126994,126995],{},"\u002Fsbin:",[19,126997,126998],{},"只有系统管理员才能使用的程序和指令",[24515,127000,127002],{"id":127001},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,127004,127005],{},[2839,127006,127007],{},"\u002Fdev:",[19,127009,127010],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,127012,127013],{},[2839,127014,127015],{},"\u002Fmedia:",[19,127017,127018],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,127020,127021],{},[2839,127022,127023],{},"\u002Fmnt:",[19,127025,127026],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24515,127028,127030],{"id":127029},"_7624-临时文件","7.6.2.4 临时文件",[19,127032,127033],{},[2839,127034,127035],{},"\u002Frun:",[19,127037,127038],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,127040,127041],{},[2839,127042,127043],{},"\u002Flost+found:",[19,127045,127046],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,127048,127049],{},[2839,127050,127051],{},"\u002Ftmp:",[19,127053,127054],{},"这个目录是用来存放一些临时文件的",[24515,127056,127058],{"id":127057},"_7625-账户","7.6.2.5 账户",[19,127060,127061],{},[2839,127062,127063],{},"\u002Froot：",[19,127065,127066],{},"系统管理员的用户主目录",[19,127068,127069,28985],{},[2839,127070,127071],{},"\u002Fhome",[19,127073,127074],{},"用户的主目录，以用户的账号命名的",[19,127076,127077,28985],{},[2839,127078,127079],{},"\u002Fusr",[19,127081,127082],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127084,127085],{},[2839,127086,127087],{},"\u002Fusr\u002Fbin：",[19,127089,127090],{},"系统用户使用的应用程序与指令",[19,127092,127093],{},[2839,127094,127095],{},"\u002Fusr\u002Fsbin：",[19,127097,127098],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127100,127101],{},[2839,127102,127103],{},"\u002Fusr\u002Fsrc：",[19,127105,127106],{},"内核源代码默认的放置目录",[24515,127108,127110],{"id":127109},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,127112,127113],{},[2839,127114,127115],{},"\u002Fvar：",[19,127117,127118],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,127120,127121],{},[2839,127122,127123],{},"\u002Fproc:",[19,127125,127126,127127,127130],{},"管理 ",[2839,127128,127129],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24515,127132,127134],{"id":127133},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127136,127137],{},[2839,127138,127139],{},"\u002Fopt:",[19,127141,127142],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127144,127145],{},[2839,127146,127147],{},"\u002Fsrv:",[19,127149,127150],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[997,127152,127154],{"id":127153},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127156,127157],{},[4000,127158],{"alt":31,"src":127159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127161,127162],{},"windows-->linux:",[19,127164,127165],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127167,127168],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127170,127171],{},"linux传输文件到windows",[19,127173,127174],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[997,127176,127178],{"id":127177},"_764-易忘知识","7.6.4 易忘知识",[19,127180,127181],{},"操作系统内核查看",[26,127183,127184],{"className":119762,"code":123754,"language":119764,"meta":31,"style":31},[33,127185,127186],{"__ignoreMap":31},[36,127187,127188,127190],{"class":38,"line":39},[36,127189,72691],{"class":4500},[36,127191,123763],{"class":49},[19,127193,127194],{},[4000,127195],{"alt":31,"src":127196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127198,127199],{},[4000,127200],{"alt":31,"src":127201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,127203,127205],{"className":119762,"code":127204,"language":119764,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,127206,127207,127219],{"__ignoreMap":31},[36,127208,127209,127211,127214,127217],{"class":38,"line":39},[36,127210,123971],{"class":4500},[36,127212,127213],{"class":57}," mvtest",[36,127215,127216],{"class":57}," mvtest2",[36,127218,5206],{"class":53},[36,127220,127221],{"class":38,"line":46},[36,127222,127223],{"class":4500},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127225,127226],{},[4000,127227],{"alt":31,"src":127228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127230,127231],{},[4000,127232],{"alt":31,"src":127233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127235,127236,127237,127240],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,127238,127239],{},"du -a"," 可以快速查看磁盘使用细节。",[997,127242,127244],{"id":127243},"_765-vim","7.6.5 Vim",[19,127246,127247],{},[4000,127248],{"alt":31,"src":127249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127251,127252],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127254,127255],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127257,127258],{},[2839,127259,127260],{},"1.命令模式：",[19,127262,127263],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127265,127266],{},"x 删除当前光标所在处的字符",[19,127268,127269],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127271,127272],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127274,127275],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127277,127278],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127280,127281],{},"dd 剪切当前行",[19,127283,127284],{},"yy 复制当前行",[19,127286,127287],{},"p 粘贴剪贴板内容到光标下方",[19,127289,127290],{},"P 粘贴剪贴板内容到光标上方",[19,127292,127293],{},"u 撤销上一次操作",[19,127295,127296],{},"ctrl+r 重做上一次操作",[19,127298,127299,127301],{},[3471,127300],{}," 保存文件",[19,127303,127304,127306],{},[3321,127305],{}," 退出Vim编辑器",[19,127308,127309,127311],{},[3321,127310],{},"! 强制退出Vim编辑器，不保存修改",[19,127313,127314],{},[2839,127315,127316],{},"2.输入模式：",[19,127318,127319],{},[4000,127320],{"alt":31,"src":127321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127323,127324],{},[2839,127325,127326],{},"3.底线命令模式：",[19,127328,127329],{},[4000,127330],{"alt":31,"src":127331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127333,127334],{},"按下esc可以退出底线命令模式",[997,127336,127338],{"id":127337},"_766-apt","7.6.6 apt",[19,127340,127341],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[997,127343,127345],{"id":127344},"_767-home与root的区别","7.6.7 home与root的区别",[19,127347,127348],{},[4000,127349],{"alt":31,"src":127350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127352,127353],{},[4000,127354],{"alt":31,"src":127355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127357,127358],{},[4000,127359],{"alt":31,"src":127360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127362,127363],{},[4000,127364],{"alt":31,"src":127365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[997,127367,127369],{"id":127368},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127371,127372],{},[2923,127373,127374],{"href":127374,"rel":127375},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26381],[433,127377,127378,127381],{},[436,127379,127380],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[436,127382,127383],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127385,127386],{},[4000,127387],{"alt":31,"src":127388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127390,127391],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127393,127394],{},[4000,127395],{"alt":31,"src":127396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,127398,127400],{"className":123280,"code":127399,"language":123282,"meta":123283,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,127401,127402,127407],{"__ignoreMap":31},[36,127403,127404],{"class":38,"line":39},[36,127405,127406],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,127408,127409],{"class":38,"line":46},[36,127410,127411],{},".\u002Fpycharm.sh\n",[19,127413,127414],{},"3️⃣创建.desktop文件",[19,127416,127417],{},[2839,127418,127419],{},"原理：",[3680,127421,127422,127432],{},[436,127423,127424,127425,127431],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2839,127426,127427,127430],{},[33,127428,127429],{},".desktop"," 文件"," 来识别应用。",[436,127433,127434,127436,127437],{},[33,127435,127429],{}," 文件相当于一个“应用注册表”，告诉系统：",[3680,127438,127439,127442,127445,127448,127451],{},[436,127440,127441],{},"应用名字（Name）",[436,127443,127444],{},"图标（Icon）",[436,127446,127447],{},"执行命令（Exec）",[436,127449,127450],{},"分类（Categories）",[436,127452,127453],{},"是否需要终端（Terminal）",[26,127455,127457],{"className":123280,"code":127456,"language":123282,"meta":123283,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,127458,127459,127464],{"__ignoreMap":31},[36,127460,127461],{"class":38,"line":39},[36,127462,127463],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,127465,127466],{"class":38,"line":46},[36,127467,127468],{},"nano pycharm.desktop\n",[19,127470,127471],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,127473,127475],{"className":123280,"code":127474,"language":123282,"meta":123283,"style":31},"[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",[33,127476,127477,127482,127487,127492,127497,127502,127507,127512,127517,127522],{"__ignoreMap":31},[36,127478,127479],{"class":38,"line":39},[36,127480,127481],{},"[Desktop Entry]\n",[36,127483,127484],{"class":38,"line":46},[36,127485,127486],{},"Version=1.0\n",[36,127488,127489],{"class":38,"line":82},[36,127490,127491],{},"Type=Application\n",[36,127493,127494],{"class":38,"line":88},[36,127495,127496],{},"Name=PyCharm\n",[36,127498,127499],{"class":38,"line":195},[36,127500,127501],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,127503,127504],{"class":38,"line":1517},[36,127505,127506],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,127508,127509],{"class":38,"line":2421},[36,127510,127511],{},"Comment=JetBrains PyCharm IDE\n",[36,127513,127514],{"class":38,"line":2446},[36,127515,127516],{},"Categories=Development;IDE;\n",[36,127518,127519],{"class":38,"line":2469},[36,127520,127521],{},"Terminal=false\n",[36,127523,127524],{"class":38,"line":2492},[36,127525,127526],{},"StartupWMClass=jetbrains-pycharm\n",[3680,127528,127529,127535,127541,127547],{},[436,127530,127531,127534],{},[33,127532,127533],{},"Exec"," → 点击图标时执行的命令",[436,127536,127537,127540],{},[33,127538,127539],{},"Icon"," → 显示在菜单和桌面上的图标",[436,127542,127543,127546],{},[33,127544,127545],{},"Terminal=false"," → 不打开终端",[436,127548,127549,127552],{},[33,127550,127551],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127554,127555,127556],"blockquote",{},[19,127557,127558,127559,127561,127562],{},"可以理解成 ",[33,127560,127429],{}," 文件是 Linux 的 ",[2839,127563,127564],{},"快捷方式配置文件",[19,127566,127567],{},"4️⃣设置可执行权限",[26,127569,127571],{"className":123280,"code":127570,"language":123282,"meta":123283,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,127572,127573],{"__ignoreMap":31},[36,127574,127575],{"class":38,"line":39},[36,127576,127570],{},[19,127578,127579],{},"5️⃣桌面图标启动的话如下：",[26,127581,127583],{"className":123280,"code":127582,"language":123282,"meta":123283,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,127584,127585,127590],{"__ignoreMap":31},[36,127586,127587],{"class":38,"line":39},[36,127588,127589],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,127591,127592],{"class":38,"line":46},[36,127593,127594],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[433,127596,127597],{"start":82},[436,127598,127599],{},"下载Appimage文件实现软件的安装",[19,127601,127602],{},"1️⃣先下载appimage",[19,127604,127605],{},[2923,127606,127607],{"href":127607,"rel":127608},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26381],[19,127610,127611],{},[4000,127612],{"alt":31,"src":127613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127615,127616],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127618,127619],{},[4000,127620],{"alt":31,"src":127621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127623,127624],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127626,127627],{},[4000,127628],{"alt":31,"src":127629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127631,127632],{},[4000,127633],{"alt":31,"src":127634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127636,127637,127638,127641],{},"3️⃣给他们放在",[33,127639,127640],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127643,127644],{},"4️⃣给软件执行权限",[26,127646,127648],{"className":123280,"code":127647,"language":123282,"meta":123283,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,127649,127650,127655],{"__ignoreMap":31},[36,127651,127652],{"class":38,"line":39},[36,127653,127654],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,127656,127657],{"class":38,"line":46},[36,127658,127659],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127661,127662],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,127664,127666],{"className":119762,"code":127665,"language":119764,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,127667,127668,127675,127682,127688],{"__ignoreMap":31},[36,127669,127670,127672],{"class":38,"line":39},[36,127671,103750],{"class":49},[36,127673,127674],{"class":57}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,127676,127677,127679],{"class":38,"line":46},[36,127678,103757],{"class":4500},[36,127680,127681],{"class":57}," .\u002Fqqmusic.desktop\n",[36,127683,127684,127686],{"class":38,"line":82},[36,127685,126730],{"class":4500},[36,127687,127681],{"class":57},[36,127689,127690,127692,127694,127696],{"class":38,"line":88},[36,127691,27093],{"class":4500},[36,127693,27096],{"class":57},[36,127695,125597],{"class":57},[36,127697,127681],{"class":57},[19,127699,127700,127702],{},[33,127701,103757],{},"：一个 Linux 命令，主要功能是：",[3680,127704,127705,127708],{},[436,127706,127707],{},"如果文件不存在，就创建一个新的空文件",[436,127709,127710],{},"如果文件已存在，就更新该文件的最后修改时间",[26,127712,127714],{"className":123280,"code":127713,"language":123282,"meta":123283,"style":31},"[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",[33,127715,127716,127720,127725,127730,127735,127739,127744],{"__ignoreMap":31},[36,127717,127718],{"class":38,"line":39},[36,127719,127481],{},[36,127721,127722],{"class":38,"line":46},[36,127723,127724],{},"Name=QQ音乐\n",[36,127726,127727],{"class":38,"line":82},[36,127728,127729],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,127731,127732],{"class":38,"line":88},[36,127733,127734],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,127736,127737],{"class":38,"line":195},[36,127738,127491],{},[36,127740,127741],{"class":38,"line":1517},[36,127742,127743],{},"Categories=Audio;Music;Player;\n",[36,127745,127746],{"class":38,"line":2421},[36,127747,127748],{},"Comment=QQ Music Client for Linux\n",[19,127750,127751],{},"将文件复制进去",[19,127753,127754],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127756,127757],{},[4000,127758],{"alt":31,"src":127759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127761,127762],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127764,127765],{},[4000,127766],{"alt":31,"src":127767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127769,127770,127771,127774,127775,127778],{},"如果你用的不是KDE，那么也可以直接修改",[33,127772,127773],{},"qqmuic.desktop","：在exec的末尾加上",[33,127776,127777],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,127780,127782],{"className":123280,"code":127781,"language":123282,"meta":123283,"style":31},"[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",[33,127783,127784,127788,127792,127797,127801,127805,127809],{"__ignoreMap":31},[36,127785,127786],{"class":38,"line":39},[36,127787,127481],{},[36,127789,127790],{"class":38,"line":46},[36,127791,127724],{},[36,127793,127794],{"class":38,"line":82},[36,127795,127796],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,127798,127799],{"class":38,"line":88},[36,127800,127734],{},[36,127802,127803],{"class":38,"line":195},[36,127804,127491],{},[36,127806,127807],{"class":38,"line":1517},[36,127808,127743],{},[36,127810,127811],{"class":38,"line":2421},[36,127812,127748],{},[19,127814,127815],{},[4000,127816],{"alt":31,"src":127817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127819,127820],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,127822,127824],{"className":123280,"code":127823,"language":123282,"meta":123283,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,127825,127826],{"__ignoreMap":31},[36,127827,127828],{"class":38,"line":39},[36,127829,127823],{},[433,127831,127832],{"start":88},[436,127833,127834],{},"去Flathub上安装软件",[19,127836,127837],{},[2923,127838,127839],{"href":127839,"rel":127840},"https:\u002F\u002Fflathub.org\u002F",[26381],[19,127842,127843],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127845,127846],{},[4000,127847],{"alt":31,"src":127848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,127850,127852],{"className":123280,"code":127851,"language":123282,"meta":123283,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,127853,127854],{"__ignoreMap":31},[36,127855,127856],{"class":38,"line":39},[36,127857,127851],{},[19,127859,127860],{},[4000,127861],{"alt":31,"src":127862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127864,127865],{},"2️⃣运行软件",[19,127867,127868],{},"a.官方方式：",[19,127870,127871],{},[4000,127872],{"alt":31,"src":127873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,127875,127876],{"className":123280,"code":127851,"language":123282,"meta":123283,"style":31},[33,127877,127878],{"__ignoreMap":31},[36,127879,127880],{"class":38,"line":39},[36,127881,127851],{},[19,127883,127884],{},"b.当普通软件运行：",[19,127886,127887],{},[4000,127888],{"alt":31,"src":127889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127891,127892],{},[4000,127893],{"alt":31,"src":127894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2602,127896,127897],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":46,"depth":46,"links":127899},[127900,127901,127906,127907,127913,127914],{"id":124633,"depth":46,"text":124634},{"id":124975,"depth":46,"text":124976,"children":127902},[127903,127904,127905],{"id":124979,"depth":82,"text":124980},{"id":125046,"depth":82,"text":125047},{"id":125307,"depth":82,"text":125308},{"id":125460,"depth":46,"text":125461},{"id":125698,"depth":46,"text":125699,"children":127908},[127909,127910,127911,127912],{"id":125750,"depth":82,"text":125751},{"id":126035,"depth":82,"text":126036},{"id":126306,"depth":82,"text":126307},{"id":126565,"depth":82,"text":126566},{"id":126624,"depth":46,"text":126625},{"id":126925,"depth":46,"text":126926,"children":127915},[127916,127917,127918,127919,127920,127921,127922,127923],{"id":126929,"depth":82,"text":126930},{"id":126941,"depth":82,"text":126942},{"id":127153,"depth":82,"text":127154},{"id":127177,"depth":82,"text":127178},{"id":127243,"depth":82,"text":127244},{"id":127337,"depth":82,"text":127338},{"id":127344,"depth":82,"text":127345},{"id":127368,"depth":82,"text":127369},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124625,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127930,"title":127931,"body":127932,"description":2630,"extension":2631,"meta":127936,"navigation":545,"path":127937,"seo":127938,"stem":127939,"__hash__":127940},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127933,"toc":127934},[],{"title":31,"searchDepth":46,"depth":46,"links":127935},[],{"category":32773},"\u002Fwiki\u002F2025-01-27-linux",{"title":127931,"description":2630},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127942,"title":127943,"body":127944,"description":127948,"extension":2631,"meta":128338,"navigation":545,"path":128339,"seo":128340,"stem":128341,"__hash__":128342},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127945,"toc":128336},[127946,127949,127953,127970,127973,128026,128030,128032,128072,128081,128085,128088,128328,128333],[19,127947,127948],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127950,127952],{"id":127951},"_1ubuntu环境配置","1.Ubuntu环境配置",[433,127954,127955,127958,127961,127964,127967],{},[436,127956,127957],{},"ubuntu环境换源",[436,127959,127960],{},"安装cuda",[436,127962,127963],{},"安装miniconda",[436,127965,127966],{},"安装pytorch",[436,127968,127969],{},"安装genesis",[19,127971,127972],{},"参考链接：",[26,127974,127976],{"className":26338,"code":127975,"language":26340,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,127977,127978],{"__ignoreMap":31},[36,127979,127980,127983,127986,127989,127991,127994,127997,127999,128002,128005,128007,128010,128013,128015,128018,128021,128023],{"class":38,"line":39},[36,127981,127982],{"class":4500},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,127984,127985],{"class":57},"=blogdetail",[36,127987,127988],{"class":53},"&sharetype",[36,127990,115],{"class":114},[36,127992,127993],{"class":57},"blogdetail",[36,127995,127996],{"class":53},"&sharerId",[36,127998,115],{"class":114},[36,128000,128001],{"class":57},"144728092",[36,128003,128004],{"class":53},"&sharerefer",[36,128006,115],{"class":114},[36,128008,128009],{"class":57},"PC",[36,128011,128012],{"class":53},"&sharesource",[36,128014,115],{"class":114},[36,128016,128017],{"class":57},"qq_69379513",[36,128019,128020],{"class":53},"&sharefrom",[36,128022,115],{"class":114},[36,128024,128025],{"class":57},"from_link\n",[10,128027,128029],{"id":128028},"_2genesis-报错issue","2.Genesis 报错issue",[19,128031,127972],{},[26,128033,128034],{"className":26338,"code":127975,"language":26340,"meta":31,"style":31},[33,128035,128036],{"__ignoreMap":31},[36,128037,128038,128040,128042,128044,128046,128048,128050,128052,128054,128056,128058,128060,128062,128064,128066,128068,128070],{"class":38,"line":39},[36,128039,127982],{"class":4500},[36,128041,127985],{"class":57},[36,128043,127988],{"class":53},[36,128045,115],{"class":114},[36,128047,127993],{"class":57},[36,128049,127996],{"class":53},[36,128051,115],{"class":114},[36,128053,128001],{"class":57},[36,128055,128004],{"class":53},[36,128057,115],{"class":114},[36,128059,128009],{"class":57},[36,128061,128012],{"class":53},[36,128063,115],{"class":114},[36,128065,128017],{"class":57},[36,128067,128020],{"class":53},[36,128069,115],{"class":114},[36,128071,128025],{"class":57},[26,128073,128075],{"className":26338,"code":128074,"language":26340,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,128076,128077],{"__ignoreMap":31},[36,128078,128079],{"class":38,"line":39},[36,128080,128074],{"class":4500},[10,128082,128084],{"id":128083},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128086,128087],{},"hello_robot.py",[26,128089,128091],{"className":28,"code":128090,"language":30,"meta":31,"style":31},"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",[33,128092,128093,128099,128114,128118,128130,128142,128146,128159,128163,128182,128192,128202,128216,128220,128224,128229,128233,128243,128250,128264,128270,128280,128285,128289,128307,128312,128316,128323],{"__ignoreMap":31},[36,128094,128095,128097],{"class":38,"line":39},[36,128096,537],{"class":114},[36,128098,47805],{"class":53},[36,128100,128101,128104,128107,128109,128111],{"class":38,"line":46},[36,128102,128103],{"class":53},"os.environ[",[36,128105,128106],{"class":57},"'PYOPENGL_PLATFORM'",[36,128108,6974],{"class":53},[36,128110,115],{"class":114},[36,128112,128113],{"class":57}," 'glx'\n",[36,128115,128116],{"class":38,"line":82},[36,128117,546],{"emptyLinePlaceholder":545},[36,128119,128120,128122,128125,128127],{"class":38,"line":88},[36,128121,537],{"class":114},[36,128123,128124],{"class":53}," genesis ",[36,128126,33887],{"class":114},[36,128128,128129],{"class":53}," gs\n",[36,128131,128132,128134,128137,128139],{"class":38,"line":195},[36,128133,33241],{"class":114},[36,128135,128136],{"class":53}," pynput ",[36,128138,537],{"class":114},[36,128140,128141],{"class":53}," keyboard\n",[36,128143,128144],{"class":38,"line":1517},[36,128145,546],{"emptyLinePlaceholder":545},[36,128147,128148,128151,128154,128156],{"class":38,"line":2421},[36,128149,128150],{"class":53},"gs.init(",[36,128152,128153],{"class":1997},"backend",[36,128155,115],{"class":114},[36,128157,128158],{"class":53},"gs.gpu)\n",[36,128160,128161],{"class":38,"line":2446},[36,128162,546],{"emptyLinePlaceholder":545},[36,128164,128165,128168,128170,128173,128176,128178,128180],{"class":38,"line":2469},[36,128166,128167],{"class":53},"scene ",[36,128169,115],{"class":114},[36,128171,128172],{"class":53}," gs.Scene(",[36,128174,128175],{"class":1997},"show_viewer",[36,128177,115],{"class":114},[36,128179,189],{"class":49},[36,128181,61],{"class":53},[36,128183,128184,128187,128189],{"class":38,"line":2492},[36,128185,128186],{"class":53},"plane ",[36,128188,115],{"class":114},[36,128190,128191],{"class":53}," scene.add_entity(gs.morphs.Plane())\n",[36,128193,128194,128197,128199],{"class":38,"line":4150},[36,128195,128196],{"class":53},"franka ",[36,128198,115],{"class":114},[36,128200,128201],{"class":53}," scene.add_entity(\n",[36,128203,128204,128207,128209,128211,128214],{"class":38,"line":4155},[36,128205,128206],{"class":53},"    gs.morphs.MJCF(",[36,128208,47854],{"class":1997},[36,128210,115],{"class":114},[36,128212,128213],{"class":57},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,128215,40547],{"class":53},[36,128217,128218],{"class":38,"line":4161},[36,128219,61],{"class":53},[36,128221,128222],{"class":38,"line":4166},[36,128223,546],{"emptyLinePlaceholder":545},[36,128225,128226],{"class":38,"line":4180},[36,128227,128228],{"class":53},"scene.build()\n",[36,128230,128231],{"class":38,"line":4185},[36,128232,546],{"emptyLinePlaceholder":545},[36,128234,128235,128237,128240],{"class":38,"line":4191},[36,128236,34450],{"class":114},[36,128238,128239],{"class":4500}," on_press",[36,128241,128242],{"class":53},"(key):\n",[36,128244,128245,128248],{"class":38,"line":4212},[36,128246,128247],{"class":114},"    try",[36,128249,6270],{"class":53},[36,128251,128252,128254,128257,128259,128262],{"class":38,"line":4217},[36,128253,5029],{"class":114},[36,128255,128256],{"class":53}," key.char ",[36,128258,1377],{"class":114},[36,128260,128261],{"class":57}," 'q'",[36,128263,6270],{"class":53},[36,128265,128266,128268],{"class":38,"line":4231},[36,128267,18250],{"class":114},[36,128269,590],{"class":49},[36,128271,128272,128275,128278],{"class":38,"line":4236},[36,128273,128274],{"class":114},"    except",[36,128276,128277],{"class":49}," AttributeError",[36,128279,6270],{"class":53},[36,128281,128282],{"class":38,"line":4264},[36,128283,128284],{"class":114},"        pass\n",[36,128286,128287],{"class":38,"line":4269},[36,128288,546],{"emptyLinePlaceholder":545},[36,128290,128291,128294,128296,128299,128302,128304],{"class":38,"line":4286},[36,128292,128293],{"class":53},"listener ",[36,128295,115],{"class":114},[36,128297,128298],{"class":53}," keyboard.Listener(",[36,128300,128301],{"class":1997},"on_press",[36,128303,115],{"class":114},[36,128305,128306],{"class":53},"on_press)\n",[36,128308,128309],{"class":38,"line":4291},[36,128310,128311],{"class":53},"listener.start()\n",[36,128313,128314],{"class":38,"line":4296},[36,128315,546],{"emptyLinePlaceholder":545},[36,128317,128318,128320],{"class":38,"line":4301},[36,128319,111133],{"class":114},[36,128321,128322],{"class":53}," listener.running:\n",[36,128324,128325],{"class":38,"line":4315},[36,128326,128327],{"class":53},"    scene.step()\n",[19,128329,128330],{},[4000,128331],{"alt":31,"src":128332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2602,128334,128335],{},"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":31,"searchDepth":46,"depth":46,"links":128337},[],{"category":25895},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127943,"description":127948},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128344,"title":128345,"body":128346,"description":2630,"extension":2631,"meta":128361,"navigation":545,"path":128362,"seo":128363,"stem":128364,"__hash__":128365},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128347,"toc":128358},[128348,128351,128355],[10,128349,128345],{"id":128350},"_1-基础知识",[14,128352,128354],{"id":128353},"_11-js的组成","1.1 js的组成",[19,128356,128357],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":46,"depth":46,"links":128359},[128360],{"id":128353,"depth":46,"text":128354},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128345,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128367,"title":128368,"body":128369,"description":2630,"extension":2631,"meta":128508,"navigation":545,"path":128509,"seo":128510,"stem":128511,"__hash__":128512},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128370,"toc":128496},[128371,128374,128378,128381,128385,128395,128399,128402,128405,128408,128412,128419,128425,128429,128435,128446,128450,128453,128457,128460,128464,128467,128471,128474,128478,128481,128484,128487,128490,128493],[10,128372,128368],{"id":128373},"_2-vscode必备内容",[14,128375,128377],{"id":128376},"_21-标签分类","2.1 标签分类",[19,128379,128380],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128382,128384],{"id":128383},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128386,128387,128388,128390,128391,128394],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,128389,2911],{}," 然后按 ",[33,128392,128393],{},"Tab","，快速自动生成基本结构。",[14,128396,128398],{"id":128397},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128400,128401],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128403,128404],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128406,128407],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128409,128411],{"id":128410},"_24-视图缩放","2.4 视图缩放",[19,128413,128414,128415,128418],{},"缩放视图 ",[33,128416,128417],{},"ctrl+"," 可实现代码增大。",[19,128420,128421,128424],{},[33,128422,128423],{},"ctrl-"," 可实现代码减小。",[14,128426,128428],{"id":128427},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128430,128431,128432,1296],{},"VSCode 新建文件快捷键为 ",[33,128433,128434],{},"ctrl+N",[19,128436,128437,128438,128441,128442,128445],{},"保存快捷键为 ",[33,128439,128440],{},"ctrl+S","，将文本保存为 ",[33,128443,128444],{},".html"," 文件。",[14,128447,128449],{"id":128448},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128451,128452],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128454,128456],{"id":128455},"_27-vscode-icons","2.7 vscode-icons",[19,128458,128459],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128461,128463],{"id":128462},"_28-easy-less","2.8 Easy LESS",[19,128465,128466],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128468,128470],{"id":128469},"_29-会了吧插件","2.9 会了吧插件",[19,128472,128473],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128475,128477],{"id":128476},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128479,128480],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128482,128483],{},"②选定多个相同的单词:ctrl+D",[19,128485,128486],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128488,128489],{},"④全局替换某些单词:ctrl+h",[19,128491,128492],{},"⑤快速定位到某一行:ctrl+g",[19,128494,128495],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":46,"depth":46,"links":128497},[128498,128499,128500,128501,128502,128503,128504,128505,128506,128507],{"id":128376,"depth":46,"text":128377},{"id":128383,"depth":46,"text":128384},{"id":128397,"depth":46,"text":128398},{"id":128410,"depth":46,"text":128411},{"id":128427,"depth":46,"text":128428},{"id":128448,"depth":46,"text":128449},{"id":128455,"depth":46,"text":128456},{"id":128462,"depth":46,"text":128463},{"id":128469,"depth":46,"text":128470},{"id":128476,"depth":46,"text":128477},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128368,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128514,"title":128515,"body":128516,"description":2630,"extension":2631,"meta":128675,"navigation":545,"path":128676,"seo":128677,"stem":128678,"__hash__":128679},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128517,"toc":128667},[128518,128521,128525,128535,128541,128547,128551,128560,128564,128569,128572,128575,128579,128582,128592,128601,128610,128619,128629,128636,128641,128646,128659],[10,128519,128515],{"id":128520},"_3-html文本与容器标签",[14,128522,128524],{"id":128523},"_31-标题标签","3.1 标题标签",[19,128526,128527,128530,128531,128534],{},[33,128528,128529],{},"\u003Ch1>","我是一级标签",[33,128532,128533],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128536,128537,128530,128539],{},[33,128538,128529],{},[33,128540,128533],{},[19,128542,125798,128543,128546],{},[33,128544,128545],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128548,128550],{"id":128549},"_32-段落标签","3.2 段落标签",[19,128552,128553,128556,128557],{},[33,128554,128555],{},"\u003Cp>","....",[33,128558,128559],{},"\u003C\u002Fp>",[14,128561,128563],{"id":128562},"_33-换行标签","3.3 换行标签",[19,128565,128566],{},[33,128567,128568],{},"\u003Cbr \u002F>",[19,128570,128571],{},"具有强制换行的作用",[19,128573,128574],{},"单标签",[14,128576,128578],{"id":128577},"_34-文本格式化标签","3.4 文本格式化标签",[19,128580,128581],{},"提供粗体、斜体和下划线等效果",[19,128583,128584,128585,85020,128588,128591],{},"加粗：",[33,128586,128587],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,128589,128590],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128593,128594,128595,85020,128598,128591],{},"斜体：",[33,128596,128597],{},"\u003Cem>...\u003C\u002Fem>",[33,128599,128600],{},"\u003Ci>...\u003C\u002Fi>",[19,128602,128603,128604,85020,128607,128591],{},"删除线：",[33,128605,128606],{},"\u003Cdel>...\u003C\u002Fdel>",[33,128608,128609],{},"\u003Cs>...\u003C\u002Fs>",[19,128611,128612,128613,85020,128616,128591],{},"下划线：",[33,128614,128615],{},"\u003Cins>...\u003C\u002Fins>",[33,128617,128618],{},"\u003Cu>...\u003C\u002Fu>",[14,128620,128622,128623,20928,128626,105166],{"id":128621},"_35-div和span标签","3.5 ",[33,128624,128625],{},"\u003Cdiv>",[33,128627,128628],{},"\u003Cspan>",[19,128630,128631,1292,128633,128635],{},[33,128632,128625],{},[33,128634,128628],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128637,128638],{},[33,128639,128640],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128642,128643],{},[33,128644,128645],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128647,128648,128649,128651,128652,128654,128655,128658],{},"两者特点：①",[33,128650,128625],{}," 标签用来布局，但一行通常只放一个 ",[33,128653,128625],{},"。可以理解为一个大盒子，独占一行，在 ",[33,128656,128657],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128660,79734,128661,128663,128664,128666],{},[33,128662,128628],{}," 标签也可用于布局，一行可以放多个 ",[33,128665,128628],{},"，可理解为小盒子。",{"title":31,"searchDepth":46,"depth":46,"links":128668},[128669,128670,128671,128672,128673],{"id":128523,"depth":46,"text":128524},{"id":128549,"depth":46,"text":128550},{"id":128562,"depth":46,"text":128563},{"id":128577,"depth":46,"text":128578},{"id":128621,"depth":46,"text":128674},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128515,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128681,"title":128682,"body":128683,"description":2630,"extension":2631,"meta":128880,"navigation":545,"path":128881,"seo":128882,"stem":128883,"__hash__":128884},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128684,"toc":128872},[128685,128688,128692,128695,128701,128708,128714,128720,128723,128726,128729,128732,128735,128738,128741,128745,128748,128751,128754,128760,128766,128772,128779,128783,128789,128795,128798,128801,128807,128813,128819,128822,128825,128829,128832,128842,128848,128852,128861,128865,128868],[10,128686,128682],{"id":128687},"_4-html图像与链接",[14,128689,128691],{"id":128690},"_41-图像标签","4.1 图像标签",[19,128693,128694],{},"（1）标签",[19,128696,128697,128700],{},[33,128698,128699],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128702,128703,128704,128707],{},"src是",[33,128705,128706],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128709,128710,128711],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,128712,128713],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128715,128716,128717],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,128718,128719],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128721,128722],{},"width:像素，设置图像的宽度",[19,128724,128725],{},"height:像素，设置图像的高度",[19,128727,128728],{},"border：像素，设置图像的边框粗细",[19,128730,128731],{},"（2）图像标签属性的注意点：",[19,128733,128734],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128736,128737],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128739,128740],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128742,128744],{"id":128743},"_42-路径注意要点","4.2 路径注意要点：",[19,128746,128747],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128749,128750],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128752,128753],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128755,128756,128757],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,128758,128759],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128761,128762,128763],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,128764,128765],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128767,128768,128769],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,128770,128771],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128773,128774,128775,1822],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2923,128776,128777],{"href":128777,"rel":128778},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26381],[14,128780,128782],{"id":128781},"_43-超链接标签","4.3 超链接标签",[19,128784,128785,128788],{},[33,128786,128787],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128790,128791,128792],{},"①语法格式：",[33,128793,128794],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128796,128797],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128799,128800],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128802,128803,128804],{},"③链接分类：外部链接：",[33,128805,128806],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128808,128809,128810],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,128811,128812],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128814,128815,128816],{},"空链接：如果当时没有确定链接目标时，",[33,128817,128818],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128820,128821],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128823,128824],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128826,128828],{"id":128827},"_44-锚点链接","4.4 锚点链接",[19,128830,128831],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128833,128834,128835,128838,128839],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,128836,128837],{},"\u003Ca href=\"#two\">","第二级",[33,128840,128841],{},"\u003C\u002Fa>",[19,128843,128844,128845],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,128846,128847],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128849,128851],{"id":128850},"_45-注释标签","4.5 注释标签",[19,128853,128854,128857,128858],{},[33,128855,128856],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,128859,128860],{},"ctrl+\u002F",[14,128862,128864],{"id":128863},"_46-特殊字符","4.6 特殊字符",[19,128866,128867],{},"可以实现添加多个空格",[4000,128869],{"style":128870,"src":128871},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":46,"depth":46,"links":128873},[128874,128875,128876,128877,128878,128879],{"id":128690,"depth":46,"text":128691},{"id":128743,"depth":46,"text":128744},{"id":128781,"depth":46,"text":128782},{"id":128827,"depth":46,"text":128828},{"id":128850,"depth":46,"text":128851},{"id":128863,"depth":46,"text":128864},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128682,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128886,"title":128887,"body":128888,"description":2630,"extension":2631,"meta":129181,"navigation":545,"path":129182,"seo":129183,"stem":129184,"__hash__":129185},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128889,"toc":129172},[128890,128893,128897,128900,128903,128906,128909,128912,128915,128918,128921,128924,128944,128950,128954,128957,128960,128963,128966,128969,128972,128976,128979,128982,128985,128988,129001,129006,129009,129012,129027,129030,129033,129036,129039,129042,129046,129049,129056,129059,129062,129065,129068,129071,129077,129080,129083,129089,129092,129095,129098,129104,129107,129110,129124,129131,129134,129137,129144,129153,129156,129159,129162,129166,129169],[10,128891,128887],{"id":128892},"_5-html表格列表与表单",[14,128894,128896],{"id":128895},"_51-表格标签","5.1 表格标签",[19,128898,128899],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128901,128902],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128904,128905],{},"②表格基本语法：",[4000,128907],{"style":128870,"src":128908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128910,128911],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[4000,128913],{"style":128870,"src":128914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128916,128917],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[4000,128919],{"style":128870,"src":128920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128922,128923],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128925,128926,128929,128930,128932,128933,128936,128937,128939,128940,128943],{},[33,128927,128928],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,128931,128928],{},"内部必须拥有",[33,128934,128935],{},"\u003Ctr>","标签，一般位于第一行，",[33,128938,128928],{},"比",[33,128941,128942],{},"\u003Cth>","范围广",[19,128945,128946,128949],{},[33,128947,128948],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128951,128953],{"id":128952},"_52-合并单元格","5.2 合并单元格",[19,128955,128956],{},"（1）合并单元格方式：",[19,128958,128959],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128961,128962],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128964,128965],{},"（2）目标单元格：",[19,128967,128968],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128970,128971],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128973,128975],{"id":128974},"_53-列表标签","5.3 列表标签",[19,128977,128978],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128980,128981],{},"①无序列表：",[4000,128983],{"style":128870,"src":128984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128986,128987],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128989,128990,128993,128994,128997,128998,129000],{},[33,128991,128992],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,128995,128996],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,128999,128992],{},"中输入其他标签或文字是不对的",[19,129002,129003,129005],{},[33,129004,128996],{},"之间相当于一个容器，可以容纳所有元素",[19,129007,129008],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129010,129011],{},"在css中去除前边的小圆点采用如下代码:",[26,129013,129017],{"className":129014,"code":129015,"language":129016,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,129018,129019],{"__ignoreMap":31},[36,129020,129021,129024],{"class":38,"line":39},[36,129022,129023],{"class":53794},"list-style",[36,129025,129026],{"class":53},": none;\n",[19,129028,129029],{},"②有序列表：",[4000,129031],{"style":128870,"src":129032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129034,129035],{},"③自定义列表：",[4000,129037],{"style":128870,"src":129038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[4000,129040],{"style":128870,"src":129041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129043,129045],{"id":129044},"_54-表单标签","5.4 表单标签",[19,129047,129048],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129050,129051,129052,129055],{},"（1）表单域：包含单元素的区域，",[33,129053,129054],{},"\u003Cform>","标签可以实现信息的收集和传递。",[4000,129057],{"style":128870,"src":129058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129060,129061],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129063,129064],{},"表单元素提交必须有name属性",[19,129066,129067],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129069,129070],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129072,79711,129073,129076],{},[33,129074,129075],{},"\u003Cinput>","输入表单元素",[4000,129078],{"style":128870,"src":129079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[4000,129081],{"style":128870,"src":129082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129084,129085,129086],{},"单选按钮：",[33,129087,129088],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[4000,129090],{"style":128870,"src":129091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129093,129094],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[4000,129096],{"style":128870,"src":129097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129099,129100,129103],{},[2839,129101,129102],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129105,129106],{},"②select下拉表单元素：可以节约页面控件",[4000,129108],{"style":128870,"src":129109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129111,129112,16317,129114,129117,129118,129120,129121,129123],{},[2839,129113,2731],{},[33,129115,129116],{},"\u003Cselect>","中至少包含一对",[33,129119,105187],{},"；在",[33,129122,105187],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129125,129126,129127,129130],{},"③",[33,129128,129129],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[4000,129132],{"style":128870,"src":129133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129135,129136],{},"3行20列",[14,129138,129140,129141,105166],{"id":129139},"_55-lable标签","5.5 ",[33,129142,129143],{},"\u003Clable>",[19,129145,129146,129147,129149,129150,129152],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,129148,129143],{},"标签用于绑定一个表单标签，当点击",[33,129151,129143],{},"标签内的文本",[19,129154,129155],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[4000,129157],{"style":128870,"src":129158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[4000,129160],{"style":128870,"src":129161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129163,129165],{"id":129164},"_56-实例","5.6 实例",[4000,129167],{"style":128870,"src":129168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2602,129170,129171],{},"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":31,"searchDepth":46,"depth":46,"links":129173},[129174,129175,129176,129177,129178,129180],{"id":128895,"depth":46,"text":128896},{"id":128952,"depth":46,"text":128953},{"id":128974,"depth":46,"text":128975},{"id":129044,"depth":46,"text":129045},{"id":129139,"depth":46,"text":129179},"5.5 \u003Clable>标签",{"id":129164,"depth":46,"text":129165},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128887,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129187,"title":129188,"body":129189,"description":2630,"extension":2631,"meta":129738,"navigation":545,"path":129739,"seo":129740,"stem":129741,"__hash__":129742},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129190,"toc":129713},[129191,129194,129198,129201,129204,129208,129211,129214,129217,129220,129223,129226,129229,129233,129236,129240,129243,129246,129249,129253,129256,129259,129262,129268,129271,129274,129277,129280,129283,129286,129289,129322,129326,129329,129332,129335,129339,129342,129345,129348,129351,129354,129358,129361,129364,129367,129371,129374,129378,129381,129385,129388,129393,129397,129400,129404,129407,129410,129413,129416,129443,129446,129450,129453,129456,129461,129464,129467,129471,129474,129479,129482,129485,129488,129492,129495,129498,129501,129505,129508,129511,129514,129518,129522,129525,129565,129568,129572,129579,129582,129586,129589,129635,129639,129642,129645,129648,129676,129680,129683,129710],[10,129192,129188],{"id":129193},"_6-css语法与文本样式",[14,129195,129197],{"id":129196},"_61-css语法规范","6.1 css语法规范",[19,129199,129200],{},"由两部分组成，选择器及一条或多条声明",[4000,129202],{"style":128870,"src":129203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129205,129206],{},[2839,129207,2731],{},[19,129209,129210],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129212,129213],{},"②属性与属性值以“键值对”的形式出现",[19,129215,129216],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129218,129219],{},"④属性和属性值之间用英文“;”分开",[4000,129221],{"style":128870,"src":129222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[4000,129224],{"style":128870,"src":129225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[4000,129227],{"style":128870,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129230,129232],{"id":129231},"_62-css选择器","6.2 css选择器",[19,129234,129235],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[997,129237,129239],{"id":129238},"_621-标签选择器","6.2.1 标签选择器",[19,129241,129242],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129244,129245],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[4000,129247],{"style":128870,"src":129248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[997,129250,129252],{"id":129251},"_622-类选择器","6.2.2 类选择器",[19,129254,129255],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129257,129258],{},"②样例",[4000,129260],{"style":128870,"src":129261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129263,129264,129265,129267],{},"③ ",[2839,129266,129102],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129269,129270],{},"可以理解为给这个标签起了个名字，来表示；",[19,129272,129273],{},"长名称或词组可以使用横线来为选择器命名；",[19,129275,129276],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129278,129279],{},"命名要有意义；",[4000,129281],{"style":128870,"src":129282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129284,129285],{},"类选择器也可以指定特殊的元素p.center{}",[19,129287,129288],{},"p.center和.center都对",[26,129290,129292],{"className":129014,"code":129291,"language":129016,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,129293,129294,129299,129308,129318],{"__ignoreMap":31},[36,129295,129296],{"class":38,"line":39},[36,129297,129298],{"class":42},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,129300,129301,129303,129306],{"class":38,"line":46},[36,129302,19],{"class":53794},[36,129304,129305],{"class":4500},".center",[36,129307,18091],{"class":53},[36,129309,129310,129312,129314,129316],{"class":38,"line":82},[36,129311,73012],{"class":49},[36,129313,53931],{"class":53},[36,129315,54086],{"class":49},[36,129317,3833],{"class":53},[36,129319,129320],{"class":38,"line":88},[36,129321,4103],{"class":53},[997,129323,129325],{"id":129324},"_623-多类名使用","6.2.3 多类名使用",[19,129327,129328],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[4000,129330],{"style":128870,"src":129331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129333,129334],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[997,129336,129338],{"id":129337},"_624-id选择器","6.2.4 id选择器",[19,129340,129341],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129343,129344],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[4000,129346],{"style":128870,"src":129347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129349,129350],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129352,129353],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[997,129355,129357],{"id":129356},"_625-通配符选择器","6.2.5 通配符选择器",[19,129359,129360],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129362,129363],{},"* {",[19,129365,129366],{},"color=\"red\"}",[997,129368,129370],{"id":129369},"_626-总结","6.2.6 总结",[4000,129372],{"style":128870,"src":129373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129375,129377],{"id":129376},"_63-css字体属性","6.3 css字体属性",[19,129379,129380],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[997,129382,129384],{"id":129383},"_631-字体系列","6.3.1 字体系列",[19,129386,129387],{},"font-family: '宋体';",[19,129389,129390,129392],{},[2839,129391,2731],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[997,129394,129396],{"id":129395},"_632-字体大小","6.3.2 字体大小",[19,129398,129399],{},"font-size: 20px",[19,129401,129402,28985],{},[2839,129403,129102],{},[19,129405,129406],{},"①px（像素）大小是网页的最常用单位",[19,129408,129409],{},"②谷歌浏览器默认为16px",[19,129411,129412],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129414,129415],{},"④可以给body指定整个页面的大小：会自动引用",[26,129417,129419],{"className":129014,"code":129418,"language":129016,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,129420,129421,129427,129439],{"__ignoreMap":31},[36,129422,129423,129425],{"class":38,"line":39},[36,129424,54294],{"class":53794},[36,129426,18091],{"class":53},[36,129428,129429,129431,129433,129435,129437],{"class":38,"line":46},[36,129430,73112],{"class":49},[36,129432,53931],{"class":53},[36,129434,3277],{"class":49},[36,129436,53986],{"class":114},[36,129438,3833],{"class":53},[36,129440,129441],{"class":38,"line":82},[36,129442,4103],{"class":53},[19,129444,129445],{},"⑤标题标签比较特殊，需要单独指定大小",[997,129447,129449],{"id":129448},"_633-字体粗细","6.3.3 字体粗细",[19,129451,129452],{},"font-weight: bold;",[19,129454,129455],{},"font-weight: 100；",[19,129457,129458,129460],{},[2839,129459,2731],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129462,129463],{},"font-weight= 400;",[19,129465,129466],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[997,129468,129470],{"id":129469},"_634-文字样式","6.3.4 文字样式",[19,129472,129473],{},"font-style: normal；",[19,129475,129476,28985],{},[2839,129477,129478],{},"属性值",[19,129480,129481],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129483,129484],{},"②italic：浏览器会显示斜体的字体样式",[4000,129486],{"style":128870,"src":129487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[997,129489,129491],{"id":129490},"_635-字体符合属性","6.3.5 字体符合属性",[4000,129493],{"style":128870,"src":129494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[4000,129496],{"style":128870,"src":129497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129499,129500],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129502,129503,28985],{},[2839,129504,129102],{},[19,129506,129507],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129509,129510],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129512,129513],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129515,129517],{"id":129516},"_64-css-test文本属性","6.4 css test文本属性",[997,129519,129521],{"id":129520},"_641-文本颜色","6.4.1 文本颜色",[19,129523,129524],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,129526,129528],{"className":129014,"code":129527,"language":129016,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,129529,129530,129535,129541,129551,129556,129561],{"__ignoreMap":31},[36,129531,129532],{"class":38,"line":39},[36,129533,129534],{"class":42},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,129536,129537,129539],{"class":38,"line":46},[36,129538,19],{"class":53794},[36,129540,18091],{"class":53},[36,129542,129543,129545,129547,129549],{"class":38,"line":82},[36,129544,73391],{"class":49},[36,129546,53931],{"class":53},[36,129548,59911],{"class":49},[36,129550,3833],{"class":53},[36,129552,129553],{"class":38,"line":88},[36,129554,129555],{"class":42},"  \u002F* color: #ff0000; *\u002F\n",[36,129557,129558],{"class":38,"line":195},[36,129559,129560],{"class":42},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,129562,129563],{"class":38,"line":1517},[36,129564,4103],{"class":53},[4000,129566],{"style":128870,"src":129567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[997,129569,129571],{"id":129570},"_642-对齐文本","6.4.2 对齐文本",[19,129573,129574,129575,129578],{},"text-align属于用于设置元素内文本内容的 ",[2839,129576,129577],{},"水平对齐"," 方式",[19,129580,129581],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[997,129583,129585],{"id":129584},"_643-装饰文本","6.4.3 装饰文本",[19,129587,129588],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,129590,129592],{"className":129014,"code":129591,"language":129016,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,129593,129594,129600,129610,129614,129620,129631],{"__ignoreMap":31},[36,129595,129596,129598],{"class":38,"line":39},[36,129597,2923],{"class":53794},[36,129599,18091],{"class":53},[36,129601,129602,129604,129606,129608],{"class":38,"line":46},[36,129603,72988],{"class":49},[36,129605,53931],{"class":53},[36,129607,57228],{"class":49},[36,129609,3833],{"class":53},[36,129611,129612],{"class":38,"line":82},[36,129613,4103],{"class":53},[36,129615,129616,129618],{"class":38,"line":88},[36,129617,19],{"class":53794},[36,129619,18091],{"class":53},[36,129621,129622,129624,129626,129629],{"class":38,"line":195},[36,129623,72988],{"class":49},[36,129625,53931],{"class":53},[36,129627,129628],{"class":49},"underline",[36,129630,3833],{"class":53},[36,129632,129633],{"class":38,"line":1517},[36,129634,4103],{"class":53},[997,129636,129638],{"id":129637},"_644-文本缩进","6.4.4 文本缩进",[19,129640,129641],{},"实现文本的第一行首行缩进自己指定的距离",[19,129643,129644],{},"20px往右边走；-20px往左边走",[19,129646,129647],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,129649,129651],{"className":129014,"code":129650,"language":129016,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,129652,129653,129659,129672],{"__ignoreMap":31},[36,129654,129655,129657],{"class":38,"line":39},[36,129656,19],{"class":53794},[36,129658,18091],{"class":53},[36,129660,129661,129664,129666,129668,129670],{"class":38,"line":46},[36,129662,129663],{"class":49},"  text-indent",[36,129665,53931],{"class":53},[36,129667,1188],{"class":49},[36,129669,26070],{"class":114},[36,129671,3833],{"class":53},[36,129673,129674],{"class":38,"line":82},[36,129675,4103],{"class":53},[997,129677,129679],{"id":129678},"_645-行间距","6.4.5 行间距",[19,129681,129682],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,129684,129686],{"className":129014,"code":129685,"language":129016,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,129687,129688,129694,129706],{"__ignoreMap":31},[36,129689,129690,129692],{"class":38,"line":39},[36,129691,19],{"class":53794},[36,129693,18091],{"class":53},[36,129695,129696,129699,129701,129704],{"class":38,"line":46},[36,129697,129698],{"class":49},"  line-height",[36,129700,53931],{"class":53},[36,129702,129703],{"class":49},"1.6",[36,129705,3833],{"class":53},[36,129707,129708],{"class":38,"line":82},[36,129709,4103],{"class":53},[2602,129711,129712],{},"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":31,"searchDepth":46,"depth":46,"links":129714},[129715,129716,129724,129731],{"id":129196,"depth":46,"text":129197},{"id":129231,"depth":46,"text":129232,"children":129717},[129718,129719,129720,129721,129722,129723],{"id":129238,"depth":82,"text":129239},{"id":129251,"depth":82,"text":129252},{"id":129324,"depth":82,"text":129325},{"id":129337,"depth":82,"text":129338},{"id":129356,"depth":82,"text":129357},{"id":129369,"depth":82,"text":129370},{"id":129376,"depth":46,"text":129377,"children":129725},[129726,129727,129728,129729,129730],{"id":129383,"depth":82,"text":129384},{"id":129395,"depth":82,"text":129396},{"id":129448,"depth":82,"text":129449},{"id":129469,"depth":82,"text":129470},{"id":129490,"depth":82,"text":129491},{"id":129516,"depth":46,"text":129517,"children":129732},[129733,129734,129735,129736,129737],{"id":129520,"depth":82,"text":129521},{"id":129570,"depth":82,"text":129571},{"id":129584,"depth":82,"text":129585},{"id":129637,"depth":82,"text":129638},{"id":129678,"depth":82,"text":129679},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129188,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129744,"title":129745,"body":129746,"description":2630,"extension":2631,"meta":130395,"navigation":545,"path":130396,"seo":130397,"stem":130398,"__hash__":130399},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129747,"toc":130376},[129748,129751,129755,129759,129819,129823,129833,129836,129839,129843,129868,129872,129875,129878,129881,129884,129887,129891,129894,129897,129939,129942,129968,129974,129977,129981,129985,129991,129994,129997,130000,130003,130006,130009,130054,130058,130061,130064,130068,130072,130101,130104,130109,130112,130115,130118,130121,130125,130129,130132,130134,130137,130141,130144,130148,130151,130154,130157,130161,130165,130171,130181,130184,130187,130190,130193,130196,130319,130327,130335,130373],[10,129749,129745],{"id":129750},"_7-css引入方式与选择器进阶",[14,129752,129754],{"id":129753},"_71-css引入方式","7.1 css引入方式",[997,129756,129758],{"id":129757},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,129760,129764],{"className":129761,"code":129762,"language":129763,"meta":31,"style":31},"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",[33,129765,129766,129774,129781,129793,129806,129811],{"__ignoreMap":31},[36,129767,129768,129770,129772],{"class":38,"line":39},[36,129769,1507],{"class":53},[36,129771,2602],{"class":53794},[36,129773,53801],{"class":53},[36,129775,129776,129779],{"class":38,"line":46},[36,129777,129778],{"class":53794},"  h1",[36,129780,18091],{"class":53},[36,129782,129783,129786,129788,129791],{"class":38,"line":82},[36,129784,129785],{"class":49},"    color",[36,129787,53931],{"class":53},[36,129789,129790],{"class":49},"blue",[36,129792,3833],{"class":53},[36,129794,129795,129798,129800,129802,129804],{"class":38,"line":88},[36,129796,129797],{"class":49},"    font-size",[36,129799,53931],{"class":53},[36,129801,3476],{"class":49},[36,129803,53986],{"class":114},[36,129805,3833],{"class":53},[36,129807,129808],{"class":38,"line":195},[36,129809,129810],{"class":53},"  }\n",[36,129812,129813,129815,129817],{"class":38,"line":1517},[36,129814,54279],{"class":53},[36,129816,2602],{"class":53794},[36,129818,53801],{"class":53},[19,129820,129821,28985],{},[2839,129822,129102],{},[19,129824,79711,129825,129828,129829,129832],{},[33,129826,129827],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,129830,129831],{},"\u003Chead>","标签中",[19,129834,129835],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129837,129838],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[997,129840,129842],{"id":129841},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,129844,129846],{"className":129761,"code":129845,"language":129763,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,129847,129848],{"__ignoreMap":31},[36,129849,129850,129852,129854,129856,129858,129861,129864,129866],{"class":38,"line":39},[36,129851,1507],{"class":53},[36,129853,19],{"class":53794},[36,129855,65114],{"class":4500},[36,129857,115],{"class":53},[36,129859,129860],{"class":57},"\"color: red; font-size: 16px;\"",[36,129862,129863],{"class":53},">这是一个段落\u003C\u002F",[36,129865,19],{"class":53794},[36,129867,53801],{"class":53},[19,129869,129870,28985],{},[2839,129871,129102],{},[19,129873,129874],{},"①style其实就是标签的属性",[19,129876,129877],{},"②在双引号中间，写法要符合css规范",[19,129879,129880],{},"③可以控制当前的标签设置样式",[19,129882,129883],{},"④书写繁琐，简单时才用",[19,129885,129886],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[997,129888,129890],{"id":129889},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129892,129893],{},"使用最多，单独建一个css文件，然后html引用",[19,129895,129896],{},"①css文件部分： style.css",[26,129898,129900],{"className":129014,"code":129899,"language":129016,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,129901,129902,129907,129913,129923,129935],{"__ignoreMap":31},[36,129903,129904],{"class":38,"line":39},[36,129905,129906],{"class":42},"\u002F* style.css *\u002F\n",[36,129908,129909,129911],{"class":38,"line":46},[36,129910,10],{"class":53794},[36,129912,18091],{"class":53},[36,129914,129915,129917,129919,129921],{"class":38,"line":82},[36,129916,73391],{"class":49},[36,129918,53931],{"class":53},[36,129920,129790],{"class":49},[36,129922,3833],{"class":53},[36,129924,129925,129927,129929,129931,129933],{"class":38,"line":88},[36,129926,73112],{"class":49},[36,129928,53931],{"class":53},[36,129930,3476],{"class":49},[36,129932,53986],{"class":114},[36,129934,3833],{"class":53},[36,129936,129937],{"class":38,"line":195},[36,129938,4103],{"class":53},[19,129940,129941],{},"②html部分",[26,129943,129945],{"className":129761,"code":129944,"language":129763,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,129946,129947],{"__ignoreMap":31},[36,129948,129949,129951,129953,129955,129957,129959,129961,129963,129966],{"class":38,"line":39},[36,129950,1507],{"class":53},[36,129952,71492],{"class":53794},[36,129954,71495],{"class":4500},[36,129956,115],{"class":53},[36,129958,71500],{"class":57},[36,129960,63545],{"class":4500},[36,129962,115],{"class":53},[36,129964,129965],{"class":57},"\"style.css\"",[36,129967,53801],{"class":53},[19,129969,129970,129973],{},[33,129971,129972],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129975,129976],{},"ctrl+0回到页面原来大小",[14,129978,129980],{"id":129979},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[997,129982,129984],{"id":129983},"_721-快速生成html","7.2.1 快速生成html",[19,129986,129987,129988],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,129989,129990],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129992,129993],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129995,129996],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129998,129999],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130001,130002],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130004,130005],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130007,130008],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,130010,130012],{"className":129761,"code":130011,"language":129763,"meta":31,"style":31},"\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",[33,130013,130014,130019,130024,130029,130034,130039,130044,130049],{"__ignoreMap":31},[36,130015,130016],{"class":38,"line":39},[36,130017,130018],{"class":42},"\u003C!-- Emmet 语法示例 -->\n",[36,130020,130021],{"class":38,"line":46},[36,130022,130023],{"class":42},"\u003C!-- div*3        → 生成3个div -->\n",[36,130025,130026],{"class":38,"line":82},[36,130027,130028],{"class":42},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,130030,130031],{"class":38,"line":88},[36,130032,130033],{"class":42},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,130035,130036],{"class":38,"line":195},[36,130037,130038],{"class":42},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,130040,130041],{"class":38,"line":1517},[36,130042,130043],{"class":42},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,130045,130046],{"class":38,"line":2421},[36,130047,130048],{"class":42},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,130050,130051],{"class":38,"line":2446},[36,130052,130053],{"class":42},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[997,130055,130057],{"id":130056},"_722-快速生成css","7.2.2 快速生成css",[19,130059,130060],{},"简写开头",[19,130062,130063],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130065,130067],{"id":130066},"_73-css复合选择器","7.3 css复合选择器",[997,130069,130071],{"id":130070},"_731-后代选择器","7.3.1 后代选择器",[26,130073,130075],{"className":129014,"code":130074,"language":129016,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,130076,130077,130087,130097],{"__ignoreMap":31},[36,130078,130079,130082,130085],{"class":38,"line":39},[36,130080,130081],{"class":4500},".parent",[36,130083,130084],{"class":4500}," .child",[36,130086,18091],{"class":53},[36,130088,130089,130091,130093,130095],{"class":38,"line":46},[36,130090,73391],{"class":49},[36,130092,53931],{"class":53},[36,130094,129790],{"class":49},[36,130096,3833],{"class":53},[36,130098,130099],{"class":38,"line":82},[36,130100,4103],{"class":53},[19,130102,130103],{},"元素1 元素2 {样式声明}",[19,130105,130106],{},[2839,130107,130108],{},"注意点:",[19,130110,130111],{},"①元素1和元素2中间用空格隔开",[19,130113,130114],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130116,130117],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130119,130120],{},"④元素1和元素2可以是任意基础选择器",[997,130122,130124],{"id":130123},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130126,130127],{},[2839,130128,130108],{},[19,130130,130131],{},"①元素1和元素2中间用大于号隔开",[19,130133,130114],{},[19,130135,130136],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[997,130138,130140],{"id":130139},"_733-并集选择器","7.3.3 并集选择器",[19,130142,130143],{},"元素1，元素2 {样式声明}",[19,130145,130146],{},[2839,130147,130108],{},[19,130149,130150],{},"①元素1和元素2中间用逗号隔开",[19,130152,130153],{},"②逗号可以理解为和的意思",[19,130155,130156],{},"③并集选择器通常用于集体声明",[997,130158,130160],{"id":130159},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130162,130163],{},[2839,130164,130108],{},[19,130166,130167,130168,130170],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71492,130169],{},"－:visited－:hover－:active。",[19,130172,130173,130174,130177,130178,28254],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130175,130176],"hover",{}," 、 ",[130179,130180],"first-child",{},[19,130182,130183],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130185,130186],{},"link对没访问的进行设置",[19,130188,130189],{},"vistied对已访问的进行改变",[19,130191,130192],{},"hover鼠标经过就会变",[19,130194,130195],{},"active常按(点)就会变",[26,130197,130199],{"className":129014,"code":130198,"language":129016,"meta":31,"style":31},"\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",[33,130200,130201,130206,130215,130225,130235,130239,130248,130259,130263,130271,130281,130291,130295,130304,130315],{"__ignoreMap":31},[36,130202,130203],{"class":38,"line":39},[36,130204,130205],{"class":42},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,130207,130208,130210,130213],{"class":38,"line":46},[36,130209,2923],{"class":53794},[36,130211,130212],{"class":4500},":link",[36,130214,18091],{"class":53},[36,130216,130217,130219,130221,130223],{"class":38,"line":82},[36,130218,73391],{"class":49},[36,130220,53931],{"class":53},[36,130222,64857],{"class":49},[36,130224,3833],{"class":53},[36,130226,130227,130229,130231,130233],{"class":38,"line":88},[36,130228,72988],{"class":49},[36,130230,53931],{"class":53},[36,130232,57228],{"class":49},[36,130234,3833],{"class":53},[36,130236,130237],{"class":38,"line":195},[36,130238,4103],{"class":53},[36,130240,130241,130243,130246],{"class":38,"line":1517},[36,130242,2923],{"class":53794},[36,130244,130245],{"class":4500},":visited",[36,130247,18091],{"class":53},[36,130249,130250,130252,130254,130257],{"class":38,"line":2421},[36,130251,73391],{"class":49},[36,130253,53931],{"class":53},[36,130255,130256],{"class":49},"purple",[36,130258,3833],{"class":53},[36,130260,130261],{"class":38,"line":2446},[36,130262,4103],{"class":53},[36,130264,130265,130267,130269],{"class":38,"line":2469},[36,130266,2923],{"class":53794},[36,130268,63428],{"class":4500},[36,130270,18091],{"class":53},[36,130272,130273,130275,130277,130279],{"class":38,"line":2492},[36,130274,73391],{"class":49},[36,130276,53931],{"class":53},[36,130278,57380],{"class":49},[36,130280,3833],{"class":53},[36,130282,130283,130285,130287,130289],{"class":38,"line":4150},[36,130284,72988],{"class":49},[36,130286,53931],{"class":53},[36,130288,129628],{"class":49},[36,130290,3833],{"class":53},[36,130292,130293],{"class":38,"line":4155},[36,130294,4103],{"class":53},[36,130296,130297,130299,130302],{"class":38,"line":4161},[36,130298,2923],{"class":53794},[36,130300,130301],{"class":4500},":active",[36,130303,18091],{"class":53},[36,130305,130306,130308,130310,130313],{"class":38,"line":4166},[36,130307,73391],{"class":49},[36,130309,53931],{"class":53},[36,130311,130312],{"class":49},"green",[36,130314,3833],{"class":53},[36,130316,130317],{"class":38,"line":4180},[36,130318,4103],{"class":53},[997,130320,130322,130323,130326],{"id":130321},"_735-伪类选择器","7.3.5 ",[130324,130325],"focus",{},"伪类选择器",[19,130328,130329,130331,130332,130334],{},[130324,130330],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,130333,129075],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,130336,130338],{"className":129014,"code":130337,"language":129016,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,130339,130340,130348,130359,130369],{"__ignoreMap":31},[36,130341,130342,130344,130346],{"class":38,"line":39},[36,130343,913],{"class":53794},[36,130345,64388],{"class":4500},[36,130347,18091],{"class":53},[36,130349,130350,130353,130355,130357],{"class":38,"line":46},[36,130351,130352],{"class":49},"  border-color",[36,130354,53931],{"class":53},[36,130356,57380],{"class":49},[36,130358,3833],{"class":53},[36,130360,130361,130363,130365,130367],{"class":38,"line":82},[36,130362,73284],{"class":49},[36,130364,53931],{"class":53},[36,130366,57228],{"class":49},[36,130368,3833],{"class":53},[36,130370,130371],{"class":38,"line":88},[36,130372,4103],{"class":53},[2602,130374,130375],{},"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":31,"searchDepth":46,"depth":46,"links":130377},[130378,130383,130387],{"id":129753,"depth":46,"text":129754,"children":130379},[130380,130381,130382],{"id":129757,"depth":82,"text":129758},{"id":129841,"depth":82,"text":129842},{"id":129889,"depth":82,"text":129890},{"id":129979,"depth":46,"text":129980,"children":130384},[130385,130386],{"id":129983,"depth":82,"text":129984},{"id":130056,"depth":82,"text":130057},{"id":130066,"depth":46,"text":130067,"children":130388},[130389,130390,130391,130392,130393],{"id":130070,"depth":82,"text":130071},{"id":130123,"depth":82,"text":130124},{"id":130139,"depth":82,"text":130140},{"id":130159,"depth":82,"text":130160},{"id":130321,"depth":82,"text":130394},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129745,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130401,"title":130402,"body":130403,"description":2630,"extension":2631,"meta":132326,"navigation":545,"path":132327,"seo":132328,"stem":132329,"__hash__":132330},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130404,"toc":132300},[130405,130408,130412,130421,130425,130451,130456,130459,130462,130465,130468,130472,130475,130485,130493,130497,130532,130537,130540,130543,130546,130549,130553,130556,130565,130569,130582,130587,130590,130593,130596,130600,130603,130607,130610,130665,130668,130699,130702,130756,130760,130763,130929,131052,131055,131058,131061,131064,131068,131071,131075,131078,131081,131085,131088,131119,131146,131174,131177,131181,131207,131250,131254,131348,131351,131378,131381,131384,131387,131390,131393,131396,131399,131402,131405,131409,131466,131493,131497,131545,131549,131590,131592,131595,131598,131601,131604,131608,131700,131703,131706,131709,131713,131836,132037,132041,132045,132048,132051,132054,132058,132061,132064,132089,132092,132095,132098,132101,132104,132108,132116,132178,132181,132239,132242,132245,132248,132251,132254,132257,132260,132297],[10,130406,130402],{"id":130407},"_8-css显示模式与背景特性",[14,130409,130411],{"id":130410},"_81-css元素显示模式","8.1 css元素显示模式",[19,130413,130414,130415,130417,130418,130420],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,130416,128625],{},"自己占一行，比如一行可以放多个",[33,130419,128628],{},"，HTML 元素一般分为块元素和行内元素两种类型",[997,130422,130424],{"id":130423},"_811-块元素","8.1.1 块元素",[19,130426,130427,130428,130430,130431,273,130434,273,130436,273,130438,273,130441,273,130444,130447,130448,130450],{},"常见的块元素有",[33,130429,128529],{},"~",[33,130432,130433],{},"\u003Ch6>",[33,130435,128555],{},[33,130437,128625],{},[33,130439,130440],{},"\u003Cul>",[33,130442,130443],{},"\u003Col>",[33,130445,130446],{},"\u003Cli>","等，其中 ",[33,130449,128625],{}," 标签是最典型的块元素",[19,130452,130453],{},[2839,130454,130455],{},"块级元素的特点：",[19,130457,130458],{},"① 比较霸道，自己独占一行。",[19,130460,130461],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130463,130464],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130466,130467],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130469,130470],{},[2839,130471,2731],{},[19,130473,130474],{},"①文字类的元素内不能使用块级元素",[19,130476,79734,130477,130479,130480,130482,130483],{},[33,130478,128555],{}," 标签主要用于存放文字，因此 ",[33,130481,128555],{}," 里面不能放块级元素，特别是不能放",[33,130484,128625],{},[19,130486,130487,130488,130430,130490,130492],{},"⑥同理， ",[33,130489,128529],{},[33,130491,130433],{},"等都是文字类块级标签，里面也不能放其他块级元素",[997,130494,130496],{"id":130495},"_812-行内元素","8.1.2 行内元素",[19,130498,130499,130500,273,130502,273,130505,273,130508,273,130511,273,130514,273,130517,273,130520,273,130523,273,130526,130528,130529,130531],{},"常见的行内元素有 ",[33,130501,128787],{},[33,130503,130504],{},"\u003Cstrong>",[33,130506,130507],{},"\u003Cb>",[33,130509,130510],{},"\u003Cem>",[33,130512,130513],{},"\u003Ci>",[33,130515,130516],{},"\u003Cdel>",[33,130518,130519],{},"\u003Cs>",[33,130521,130522],{},"\u003Cins>",[33,130524,130525],{},"\u003Cu>",[33,130527,128628],{}," 等，其中 ",[33,130530,128628],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130533,130534],{},[2839,130535,130536],{},"特点：",[19,130538,130539],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130541,130542],{},"② 高、宽直接设置是无效的。",[19,130544,130545],{},"③ 默认宽度就是它本身内容的宽度。",[19,130547,130548],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130550,130551],{},[2839,130552,2731],{},[19,130554,130555],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130557,130558,130559,130561,130562,130564],{},"②特殊情况链接 ",[33,130560,128787],{}," 里面可以放块级元素，但是给 ",[33,130563,128787],{}," 转换一下块级模式最安全",[997,130566,130568],{"id":130567},"_813-行内块元素","8.1.3 行内块元素",[19,130570,130571,130572,273,130575,273,130578,130581],{},"在行内元素中有几个特殊的标签 —— ",[33,130573,130574],{},"\u003Cimg \u002F>",[33,130576,130577],{},"\u003Cinput \u002F>",[33,130579,130580],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130583,130584],{},[2839,130585,130586],{},"行内块元素的特点：",[19,130588,130589],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130591,130592],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130594,130595],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[997,130597,130599],{"id":130598},"_814-总结","8.1.4 总结",[4000,130601],{"style":128870,"src":130602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[997,130604,130606],{"id":130605},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130608,130609],{},"①转换为块元素：display:block;",[26,130611,130613],{"className":129014,"code":130612,"language":129016,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,130614,130615,130620,130626,130637,130649,130661],{"__ignoreMap":31},[36,130616,130617],{"class":38,"line":39},[36,130618,130619],{"class":42},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,130621,130622,130624],{"class":38,"line":46},[36,130623,2923],{"class":53794},[36,130625,18091],{"class":53},[36,130627,130628,130631,130633,130635],{"class":38,"line":82},[36,130629,130630],{"class":49},"  display",[36,130632,53931],{"class":53},[36,130634,63357],{"class":49},[36,130636,3833],{"class":53},[36,130638,130639,130641,130643,130645,130647],{"class":38,"line":88},[36,130640,73054],{"class":49},[36,130642,53931],{"class":53},[36,130644,166],{"class":49},[36,130646,53986],{"class":114},[36,130648,3833],{"class":53},[36,130650,130651,130653,130655,130657,130659],{"class":38,"line":195},[36,130652,73274],{"class":49},[36,130654,53931],{"class":53},[36,130656,3082],{"class":49},[36,130658,53986],{"class":114},[36,130660,3833],{"class":53},[36,130662,130663],{"class":38,"line":1517},[36,130664,4103],{"class":53},[19,130666,130667],{},"②转换为行内元素：display:inline;",[26,130669,130671],{"className":129014,"code":130670,"language":129016,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,130672,130673,130678,130684,130695],{"__ignoreMap":31},[36,130674,130675],{"class":38,"line":39},[36,130676,130677],{"class":42},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,130679,130680,130682],{"class":38,"line":46},[36,130681,54105],{"class":53794},[36,130683,18091],{"class":53},[36,130685,130686,130688,130690,130693],{"class":38,"line":82},[36,130687,130630],{"class":49},[36,130689,53931],{"class":53},[36,130691,130692],{"class":49},"inline",[36,130694,3833],{"class":53},[36,130696,130697],{"class":38,"line":88},[36,130698,4103],{"class":53},[19,130700,130701],{},"③转换为行内块：display:inline-block;",[26,130703,130705],{"className":129014,"code":130704,"language":129016,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,130706,130707,130712,130718,130728,130740,130752],{"__ignoreMap":31},[36,130708,130709],{"class":38,"line":39},[36,130710,130711],{"class":42},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,130713,130714,130716],{"class":38,"line":46},[36,130715,36],{"class":53794},[36,130717,18091],{"class":53},[36,130719,130720,130722,130724,130726],{"class":38,"line":82},[36,130721,130630],{"class":49},[36,130723,53931],{"class":53},[36,130725,74869],{"class":49},[36,130727,3833],{"class":53},[36,130729,130730,130732,130734,130736,130738],{"class":38,"line":88},[36,130731,73054],{"class":49},[36,130733,53931],{"class":53},[36,130735,3288],{"class":49},[36,130737,53986],{"class":114},[36,130739,3833],{"class":53},[36,130741,130742,130744,130746,130748,130750],{"class":38,"line":195},[36,130743,73274],{"class":49},[36,130745,53931],{"class":53},[36,130747,3624],{"class":49},[36,130749,53986],{"class":114},[36,130751,3833],{"class":53},[36,130753,130754],{"class":38,"line":1517},[36,130755,4103],{"class":53},[997,130757,130759],{"id":130758},"_816-小米侧边栏","8.1.6 小米侧边栏",[4000,130761],{"style":128870,"src":130762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,130764,130766],{"className":129761,"code":130765,"language":129763,"meta":31,"style":31},"\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",[33,130767,130768,130773,130788,130807,130826,130845,130864,130883,130902,130921],{"__ignoreMap":31},[36,130769,130770],{"class":38,"line":39},[36,130771,130772],{"class":42},"\u003C!-- 小米侧边栏案例 -->\n",[36,130774,130775,130777,130779,130781,130783,130786],{"class":38,"line":46},[36,130776,1507],{"class":53},[36,130778,54105],{"class":53794},[36,130780,55980],{"class":4500},[36,130782,115],{"class":53},[36,130784,130785],{"class":57},"\"sidebar\"",[36,130787,53801],{"class":53},[36,130789,130790,130792,130794,130796,130798,130800,130803,130805],{"class":38,"line":82},[36,130791,54638],{"class":53},[36,130793,2923],{"class":53794},[36,130795,63545],{"class":4500},[36,130797,115],{"class":53},[36,130799,63550],{"class":57},[36,130801,130802],{"class":53},">手机 电话卡\u003C\u002F",[36,130804,2923],{"class":53794},[36,130806,53801],{"class":53},[36,130808,130809,130811,130813,130815,130817,130819,130822,130824],{"class":38,"line":88},[36,130810,54638],{"class":53},[36,130812,2923],{"class":53794},[36,130814,63545],{"class":4500},[36,130816,115],{"class":53},[36,130818,63550],{"class":57},[36,130820,130821],{"class":53},">电视 盒子\u003C\u002F",[36,130823,2923],{"class":53794},[36,130825,53801],{"class":53},[36,130827,130828,130830,130832,130834,130836,130838,130841,130843],{"class":38,"line":195},[36,130829,54638],{"class":53},[36,130831,2923],{"class":53794},[36,130833,63545],{"class":4500},[36,130835,115],{"class":53},[36,130837,63550],{"class":57},[36,130839,130840],{"class":53},">笔记本 平板\u003C\u002F",[36,130842,2923],{"class":53794},[36,130844,53801],{"class":53},[36,130846,130847,130849,130851,130853,130855,130857,130860,130862],{"class":38,"line":1517},[36,130848,54638],{"class":53},[36,130850,2923],{"class":53794},[36,130852,63545],{"class":4500},[36,130854,115],{"class":53},[36,130856,63550],{"class":57},[36,130858,130859],{"class":53},">出行 穿戴\u003C\u002F",[36,130861,2923],{"class":53794},[36,130863,53801],{"class":53},[36,130865,130866,130868,130870,130872,130874,130876,130879,130881],{"class":38,"line":2421},[36,130867,54638],{"class":53},[36,130869,2923],{"class":53794},[36,130871,63545],{"class":4500},[36,130873,115],{"class":53},[36,130875,63550],{"class":57},[36,130877,130878],{"class":53},">智能 路由器\u003C\u002F",[36,130880,2923],{"class":53794},[36,130882,53801],{"class":53},[36,130884,130885,130887,130889,130891,130893,130895,130898,130900],{"class":38,"line":2446},[36,130886,54638],{"class":53},[36,130888,2923],{"class":53794},[36,130890,63545],{"class":4500},[36,130892,115],{"class":53},[36,130894,63550],{"class":57},[36,130896,130897],{"class":53},">健康 儿童\u003C\u002F",[36,130899,2923],{"class":53794},[36,130901,53801],{"class":53},[36,130903,130904,130906,130908,130910,130912,130914,130917,130919],{"class":38,"line":2469},[36,130905,54638],{"class":53},[36,130907,2923],{"class":53794},[36,130909,63545],{"class":4500},[36,130911,115],{"class":53},[36,130913,63550],{"class":57},[36,130915,130916],{"class":53},">耳机 音响\u003C\u002F",[36,130918,2923],{"class":53794},[36,130920,53801],{"class":53},[36,130922,130923,130925,130927],{"class":38,"line":2492},[36,130924,54279],{"class":53},[36,130926,54105],{"class":53794},[36,130928,53801],{"class":53},[26,130930,130932],{"className":129014,"code":130931,"language":129016,"meta":31,"style":31},".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",[33,130933,130934,130943,130953,130966,130978,130990,131002,131012,131023,131027,131037,131048],{"__ignoreMap":31},[36,130935,130936,130939,130941],{"class":38,"line":39},[36,130937,130938],{"class":4500},".sidebar",[36,130940,3936],{"class":53794},[36,130942,18091],{"class":53},[36,130944,130945,130947,130949,130951],{"class":38,"line":46},[36,130946,130630],{"class":49},[36,130948,53931],{"class":53},[36,130950,63357],{"class":49},[36,130952,3833],{"class":53},[36,130954,130955,130957,130959,130962,130964],{"class":38,"line":82},[36,130956,73054],{"class":49},[36,130958,53931],{"class":53},[36,130960,130961],{"class":49},"234",[36,130963,53986],{"class":114},[36,130965,3833],{"class":53},[36,130967,130968,130970,130972,130974,130976],{"class":38,"line":88},[36,130969,73274],{"class":49},[36,130971,53931],{"class":53},[36,130973,3132],{"class":49},[36,130975,53986],{"class":114},[36,130977,3833],{"class":53},[36,130979,130980,130982,130984,130986,130988],{"class":38,"line":195},[36,130981,129698],{"class":49},[36,130983,53931],{"class":53},[36,130985,3132],{"class":49},[36,130987,53986],{"class":114},[36,130989,3833],{"class":53},[36,130991,130992,130994,130996,130998,131000],{"class":38,"line":1517},[36,130993,73309],{"class":49},[36,130995,53931],{"class":53},[36,130997,3624],{"class":49},[36,130999,53986],{"class":114},[36,131001,3833],{"class":53},[36,131003,131004,131006,131008,131010],{"class":38,"line":2421},[36,131005,73391],{"class":49},[36,131007,53931],{"class":53},[36,131009,63330],{"class":49},[36,131011,3833],{"class":53},[36,131013,131014,131016,131018,131021],{"class":38,"line":2446},[36,131015,73364],{"class":49},[36,131017,53931],{"class":53},[36,131019,131020],{"class":49},"#55585a",[36,131022,3833],{"class":53},[36,131024,131025],{"class":38,"line":2469},[36,131026,4103],{"class":53},[36,131028,131029,131031,131033,131035],{"class":38,"line":2492},[36,131030,130938],{"class":4500},[36,131032,3936],{"class":53794},[36,131034,63428],{"class":4500},[36,131036,18091],{"class":53},[36,131038,131039,131041,131043,131046],{"class":38,"line":4150},[36,131040,73364],{"class":49},[36,131042,53931],{"class":53},[36,131044,131045],{"class":49},"#ff6700",[36,131047,3833],{"class":53},[36,131049,131050],{"class":38,"line":4155},[36,131051,4103],{"class":53},[4000,131053],{"style":128870,"src":131054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131056,131057],{},"行高=盒子高度：实现文字的垂直居中",[19,131059,131060],{},"原理讲解：",[4000,131062],{"style":128870,"src":131063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131065,131067],{"id":131066},"_82-css背景","8.2 css背景",[19,131069,131070],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[997,131072,131074],{"id":131073},"_821-背景颜色","8.2.1 背景颜色",[19,131076,131077],{},"background-color:颜色值;",[19,131079,131080],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[997,131082,131084],{"id":131083},"_822-背景图片","8.2.2 背景图片",[19,131086,131087],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,131089,131091],{"className":129014,"code":131090,"language":129016,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,131092,131093,131099,131115],{"__ignoreMap":31},[36,131094,131095,131097],{"class":38,"line":39},[36,131096,54105],{"class":53794},[36,131098,18091],{"class":53},[36,131100,131101,131104,131106,131108,131110,131113],{"class":38,"line":46},[36,131102,131103],{"class":49},"  background-image",[36,131105,53931],{"class":53},[36,131107,64214],{"class":49},[36,131109,54],{"class":53},[36,131111,131112],{"class":1997},"images\u002Fbg.png",[36,131114,5251],{"class":53},[36,131116,131117],{"class":38,"line":82},[36,131118,4103],{"class":53},[206,131120,131121,131130],{},[209,131122,131123],{},[212,131124,131125,131128],{},[215,131126,131127],{"align":26253},"参数值",[215,131129,105169],{"align":26253},[225,131131,131132,131139],{},[212,131133,131134,131136],{},[230,131135,57228],{"align":26253},[230,131137,131138],{"align":26253},"无背景图（默认的）",[212,131140,131141,131143],{},[230,131142,64214],{"align":26253},[230,131144,131145],{"align":26253},"使用绝对或相对地址指定背景图像",[26,131147,131148],{"className":129014,"code":131090,"language":129016,"meta":31,"style":31},[33,131149,131150,131156,131170],{"__ignoreMap":31},[36,131151,131152,131154],{"class":38,"line":39},[36,131153,54105],{"class":53794},[36,131155,18091],{"class":53},[36,131157,131158,131160,131162,131164,131166,131168],{"class":38,"line":46},[36,131159,131103],{"class":49},[36,131161,53931],{"class":53},[36,131163,64214],{"class":49},[36,131165,54],{"class":53},[36,131167,131112],{"class":1997},[36,131169,5251],{"class":53},[36,131171,131172],{"class":38,"line":82},[36,131173,4103],{"class":53},[19,131175,131176],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[997,131178,131180],{"id":131179},"_823-背景平铺","8.2.3 背景平铺",[26,131182,131184],{"className":129014,"code":131183,"language":129016,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,131185,131186,131192,131203],{"__ignoreMap":31},[36,131187,131188,131190],{"class":38,"line":39},[36,131189,54105],{"class":53794},[36,131191,18091],{"class":53},[36,131193,131194,131197,131199,131201],{"class":38,"line":46},[36,131195,131196],{"class":49},"  background-repeat",[36,131198,53931],{"class":53},[36,131200,64224],{"class":49},[36,131202,3833],{"class":53},[36,131204,131205],{"class":38,"line":82},[36,131206,4103],{"class":53},[206,131208,131209,131217],{},[209,131210,131211],{},[212,131212,131213,131215],{},[215,131214,131127],{"align":26253},[215,131216,105169],{"align":26253},[225,131218,131219,131227,131234,131242],{},[212,131220,131221,131224],{},[230,131222,131223],{"align":26253},"repeat",[230,131225,131226],{"align":26253},"背景图像在纵向和横向上平铺（默认的）",[212,131228,131229,131231],{},[230,131230,64224],{"align":26253},[230,131232,131233],{"align":26253},"背景图像不平铺",[212,131235,131236,131239],{},[230,131237,131238],{"align":26253},"repeat-x",[230,131240,131241],{"align":26253},"背景图像在横向上平铺",[212,131243,131244,131247],{},[230,131245,131246],{"align":26253},"repeat-y",[230,131248,131249],{"align":26253},"背景图像在纵向平铺",[997,131251,131253],{"id":131252},"_824-背景图片位置","8.2.4 背景图片位置",[26,131255,131257],{"className":129014,"code":131256,"language":129016,"meta":31,"style":31},"\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",[33,131258,131259,131264,131270,131284,131288,131293,131299,131315,131319,131324,131330,131344],{"__ignoreMap":31},[36,131260,131261],{"class":38,"line":39},[36,131262,131263],{"class":42},"\u002F* 方位名词 *\u002F\n",[36,131265,131266,131268],{"class":38,"line":46},[36,131267,54105],{"class":53794},[36,131269,18091],{"class":53},[36,131271,131272,131275,131277,131279,131282],{"class":38,"line":82},[36,131273,131274],{"class":49},"  background-position",[36,131276,53931],{"class":53},[36,131278,54086],{"class":49},[36,131280,131281],{"class":49}," top",[36,131283,3833],{"class":53},[36,131285,131286],{"class":38,"line":88},[36,131287,4103],{"class":53},[36,131289,131290],{"class":38,"line":195},[36,131291,131292],{"class":42},"\u002F* 精确单位 *\u002F\n",[36,131294,131295,131297],{"class":38,"line":1517},[36,131296,54105],{"class":53794},[36,131298,18091],{"class":53},[36,131300,131301,131303,131305,131307,131309,131311,131313],{"class":38,"line":2421},[36,131302,131274],{"class":49},[36,131304,53931],{"class":53},[36,131306,3376],{"class":49},[36,131308,53986],{"class":114},[36,131310,59994],{"class":49},[36,131312,53986],{"class":114},[36,131314,3833],{"class":53},[36,131316,131317],{"class":38,"line":2446},[36,131318,4103],{"class":53},[36,131320,131321],{"class":38,"line":2469},[36,131322,131323],{"class":42},"\u002F* 混合单位 *\u002F\n",[36,131325,131326,131328],{"class":38,"line":2492},[36,131327,54105],{"class":53794},[36,131329,18091],{"class":53},[36,131331,131332,131334,131336,131338,131340,131342],{"class":38,"line":4150},[36,131333,131274],{"class":49},[36,131335,53931],{"class":53},[36,131337,3376],{"class":49},[36,131339,53986],{"class":114},[36,131341,19662],{"class":49},[36,131343,3833],{"class":53},[36,131345,131346],{"class":38,"line":4155},[36,131347,4103],{"class":53},[19,131349,131350],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[206,131352,131353,131361],{},[209,131354,131355],{},[212,131356,131357,131359],{},[215,131358,131127],{"align":26253},[215,131360,223],{"align":26253},[225,131362,131363,131370],{},[212,131364,131365,131367],{},[230,131366,54462],{"align":26253},[230,131368,131369],{"align":26253},"百分数|由浮点数和单位标识符组成的长度值",[212,131371,131372,131375],{},[230,131373,131374],{"align":26253},"position",[230,131376,131377],{"align":26253},"top|center|bottom|left|center|right 方位名词",[19,131379,131380],{},"其他说明：",[19,131382,131383],{},"①参数是方位名词",[19,131385,131386],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131388,131389],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131391,131392],{},"②参数是精确单位",[19,131394,131395],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131397,131398],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131400,131401],{},"③参数是混合单位",[19,131403,131404],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[997,131406,131408],{"id":131407},"_825-背景图片固定","8.2.5 背景图片固定",[26,131410,131412],{"className":129014,"code":131411,"language":129016,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,131413,131414,131419,131425,131437,131441,131446,131452,131462],{"__ignoreMap":31},[36,131415,131416],{"class":38,"line":39},[36,131417,131418],{"class":42},"\u002F* 背景滚动（默认） *\u002F\n",[36,131420,131421,131423],{"class":38,"line":46},[36,131422,54105],{"class":53794},[36,131424,18091],{"class":53},[36,131426,131427,131430,131432,131435],{"class":38,"line":82},[36,131428,131429],{"class":49},"  background-attachment",[36,131431,53931],{"class":53},[36,131433,131434],{"class":49},"scroll",[36,131436,3833],{"class":53},[36,131438,131439],{"class":38,"line":88},[36,131440,4103],{"class":53},[36,131442,131443],{"class":38,"line":195},[36,131444,131445],{"class":42},"\u002F* 背景固定 *\u002F\n",[36,131447,131448,131450],{"class":38,"line":1517},[36,131449,54105],{"class":53794},[36,131451,18091],{"class":53},[36,131453,131454,131456,131458,131460],{"class":38,"line":2421},[36,131455,131429],{"class":49},[36,131457,53931],{"class":53},[36,131459,88712],{"class":49},[36,131461,3833],{"class":53},[36,131463,131464],{"class":38,"line":2446},[36,131465,4103],{"class":53},[206,131467,131468,131477],{},[209,131469,131470],{},[212,131471,131472,131475],{},[215,131473,131474],{"align":26253},"参数",[215,131476,105169],{"align":26253},[225,131478,131479,131486],{},[212,131480,131481,131483],{},[230,131482,131434],{"align":26253},[230,131484,131485],{"align":26253},"背景图像是随对象内容滚动",[212,131487,131488,131490],{},[230,131489,88712],{"align":26253},[230,131491,131492],{"align":26253},"背景图像固定",[997,131494,131496],{"id":131495},"_826-背景样式合写","8.2.6 背景样式合写",[26,131498,131500],{"className":129014,"code":131499,"language":129016,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,131501,131502,131507,131513,131541],{"__ignoreMap":31},[36,131503,131504],{"class":38,"line":39},[36,131505,131506],{"class":42},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,131508,131509,131511],{"class":38,"line":46},[36,131510,54105],{"class":53794},[36,131512,18091],{"class":53},[36,131514,131515,131517,131519,131521,131524,131526,131528,131530,131532,131535,131537,131539],{"class":38,"line":82},[36,131516,73097],{"class":49},[36,131518,53931],{"class":53},[36,131520,63330],{"class":49},[36,131522,131523],{"class":49}," url",[36,131525,54],{"class":53},[36,131527,131112],{"class":1997},[36,131529,16236],{"class":53},[36,131531,64224],{"class":49},[36,131533,131534],{"class":49}," fixed",[36,131536,19662],{"class":49},[36,131538,131281],{"class":49},[36,131540,3833],{"class":53},[36,131542,131543],{"class":38,"line":88},[36,131544,4103],{"class":53},[997,131546,131548],{"id":131547},"_827-背景色半透明","8.2.7 背景色半透明",[26,131550,131552],{"className":129014,"code":131551,"language":129016,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,131553,131554,131560,131586],{"__ignoreMap":31},[36,131555,131556,131558],{"class":38,"line":39},[36,131557,54105],{"class":53794},[36,131559,18091],{"class":53},[36,131561,131562,131564,131566,131568,131570,131572,131574,131576,131578,131580,131582,131584],{"class":38,"line":46},[36,131563,73097],{"class":49},[36,131565,53931],{"class":53},[36,131567,57601],{"class":49},[36,131569,54],{"class":53},[36,131571,713],{"class":49},[36,131573,14958],{"class":53},[36,131575,713],{"class":49},[36,131577,14958],{"class":53},[36,131579,713],{"class":49},[36,131581,14958],{"class":53},[36,131583,102997],{"class":49},[36,131585,5251],{"class":53},[36,131587,131588],{"class":38,"line":82},[36,131589,4103],{"class":53},[19,131591,101872],{},[19,131593,131594],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131596,131597],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131599,131600],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131602,131603],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[997,131605,131607],{"id":131606},"_828-总结","8.2.8 总结",[206,131609,131610,131621],{},[209,131611,131612],{},[212,131613,131614,131617,131619],{},[215,131615,131616],{"align":26253},"属性",[215,131618,105169],{"align":26253},[215,131620,2842],{"align":26253},[225,131622,131623,131634,131645,131656,131667,131678,131689],{},[212,131624,131625,131628,131631],{},[230,131626,131627],{"align":26253},"background-color",[230,131629,131630],{"align":26253},"背景颜色",[230,131632,131633],{"align":26253},"预定义的颜色值\u002F十六进制\u002FRGB代码",[212,131635,131636,131639,131642],{},[230,131637,131638],{"align":26253},"background-image",[230,131640,131641],{"align":26253},"背景图片",[230,131643,131644],{"align":26253},"url(图片路径)",[212,131646,131647,131650,131653],{},[230,131648,131649],{"align":26253},"background-repeat",[230,131651,131652],{"align":26253},"是否平铺",[230,131654,131655],{"align":26253},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[212,131657,131658,131661,131664],{},[230,131659,131660],{"align":26253},"background-position",[230,131662,131663],{"align":26253},"背景位置",[230,131665,131666],{"align":26253},"length\u002Fposition 分别是x和y坐标",[212,131668,131669,131672,131675],{},[230,131670,131671],{"align":26253},"background-attachment",[230,131673,131674],{"align":26253},"背景附着",[230,131676,131677],{"align":26253},"scroll(背景滚动) \u002Ffixed (背景固定)",[212,131679,131680,131683,131686],{},[230,131681,131682],{"align":26253},"背景简写",[230,131684,131685],{"align":26253},"书写更简单",[230,131687,131688],{"align":26253},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[212,131690,131691,131694,131697],{},[230,131692,131693],{"align":26253},"背景半透明",[230,131695,131696],{"align":26253},"背景颜色半透明",[230,131698,131699],{"align":26253},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131701,131702],{},"颜色渐变：",[4000,131704],{"style":128870,"src":131705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[4000,131707],{"style":128870,"src":131708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[997,131710,131712],{"id":131711},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,131714,131716],{"className":129761,"code":131715,"language":129763,"meta":31,"style":31},"\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",[33,131717,131718,131733,131752,131771,131790,131809,131828],{"__ignoreMap":31},[36,131719,131720,131722,131724,131726,131728,131731],{"class":38,"line":39},[36,131721,1507],{"class":53},[36,131723,54105],{"class":53794},[36,131725,55980],{"class":4500},[36,131727,115],{"class":53},[36,131729,131730],{"class":57},"\"nav\"",[36,131732,53801],{"class":53},[36,131734,131735,131737,131739,131741,131743,131745,131748,131750],{"class":38,"line":46},[36,131736,54638],{"class":53},[36,131738,2923],{"class":53794},[36,131740,63545],{"class":4500},[36,131742,115],{"class":53},[36,131744,63550],{"class":57},[36,131746,131747],{"class":53},">五彩导航1\u003C\u002F",[36,131749,2923],{"class":53794},[36,131751,53801],{"class":53},[36,131753,131754,131756,131758,131760,131762,131764,131767,131769],{"class":38,"line":82},[36,131755,54638],{"class":53},[36,131757,2923],{"class":53794},[36,131759,63545],{"class":4500},[36,131761,115],{"class":53},[36,131763,63550],{"class":57},[36,131765,131766],{"class":53},">五彩导航2\u003C\u002F",[36,131768,2923],{"class":53794},[36,131770,53801],{"class":53},[36,131772,131773,131775,131777,131779,131781,131783,131786,131788],{"class":38,"line":88},[36,131774,54638],{"class":53},[36,131776,2923],{"class":53794},[36,131778,63545],{"class":4500},[36,131780,115],{"class":53},[36,131782,63550],{"class":57},[36,131784,131785],{"class":53},">五彩导航3\u003C\u002F",[36,131787,2923],{"class":53794},[36,131789,53801],{"class":53},[36,131791,131792,131794,131796,131798,131800,131802,131805,131807],{"class":38,"line":195},[36,131793,54638],{"class":53},[36,131795,2923],{"class":53794},[36,131797,63545],{"class":4500},[36,131799,115],{"class":53},[36,131801,63550],{"class":57},[36,131803,131804],{"class":53},">五彩导航4\u003C\u002F",[36,131806,2923],{"class":53794},[36,131808,53801],{"class":53},[36,131810,131811,131813,131815,131817,131819,131821,131824,131826],{"class":38,"line":1517},[36,131812,54638],{"class":53},[36,131814,2923],{"class":53794},[36,131816,63545],{"class":4500},[36,131818,115],{"class":53},[36,131820,63550],{"class":57},[36,131822,131823],{"class":53},">五彩导航5\u003C\u002F",[36,131825,2923],{"class":53794},[36,131827,53801],{"class":53},[36,131829,131830,131832,131834],{"class":38,"line":2421},[36,131831,54279],{"class":53},[36,131833,54105],{"class":53794},[36,131835,53801],{"class":53},[26,131837,131839],{"className":129014,"code":131838,"language":129016,"meta":31,"style":31},".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",[33,131840,131841,131850,131860,131872,131884,131894,131906,131916,131920,131945,131968,131991,132014],{"__ignoreMap":31},[36,131842,131843,131846,131848],{"class":38,"line":39},[36,131844,131845],{"class":4500},".nav",[36,131847,3936],{"class":53794},[36,131849,18091],{"class":53},[36,131851,131852,131854,131856,131858],{"class":38,"line":46},[36,131853,130630],{"class":49},[36,131855,53931],{"class":53},[36,131857,74869],{"class":49},[36,131859,3833],{"class":53},[36,131861,131862,131864,131866,131868,131870],{"class":38,"line":82},[36,131863,73054],{"class":49},[36,131865,53931],{"class":53},[36,131867,3493],{"class":49},[36,131869,53986],{"class":114},[36,131871,3833],{"class":53},[36,131873,131874,131876,131878,131880,131882],{"class":38,"line":88},[36,131875,73274],{"class":49},[36,131877,53931],{"class":53},[36,131879,3532],{"class":49},[36,131881,53986],{"class":114},[36,131883,3833],{"class":53},[36,131885,131886,131888,131890,131892],{"class":38,"line":195},[36,131887,73012],{"class":49},[36,131889,53931],{"class":53},[36,131891,54086],{"class":49},[36,131893,3833],{"class":53},[36,131895,131896,131898,131900,131902,131904],{"class":38,"line":1517},[36,131897,129698],{"class":49},[36,131899,53931],{"class":53},[36,131901,3532],{"class":49},[36,131903,53986],{"class":114},[36,131905,3833],{"class":53},[36,131907,131908,131910,131912,131914],{"class":38,"line":2421},[36,131909,73391],{"class":49},[36,131911,53931],{"class":53},[36,131913,63330],{"class":49},[36,131915,3833],{"class":53},[36,131917,131918],{"class":38,"line":2446},[36,131919,4103],{"class":53},[36,131921,131922,131924,131926,131929,131931,131933,131936,131938,131940,131942],{"class":38,"line":2469},[36,131923,131845],{"class":4500},[36,131925,3936],{"class":53794},[36,131927,131928],{"class":4500},":nth-child",[36,131930,54],{"class":53},[36,131932,707],{"class":49},[36,131934,131935],{"class":53},") { ",[36,131937,131627],{"class":49},[36,131939,53931],{"class":53},[36,131941,131045],{"class":49},[36,131943,131944],{"class":53},"; }\n",[36,131946,131947,131949,131951,131953,131955,131957,131959,131961,131963,131966],{"class":38,"line":2492},[36,131948,131845],{"class":4500},[36,131950,3936],{"class":53794},[36,131952,131928],{"class":4500},[36,131954,54],{"class":53},[36,131956,1188],{"class":49},[36,131958,131935],{"class":53},[36,131960,131627],{"class":49},[36,131962,53931],{"class":53},[36,131964,131965],{"class":49},"#ff0000",[36,131967,131944],{"class":53},[36,131969,131970,131972,131974,131976,131978,131980,131982,131984,131986,131989],{"class":38,"line":4150},[36,131971,131845],{"class":4500},[36,131973,3936],{"class":53794},[36,131975,131928],{"class":4500},[36,131977,54],{"class":53},[36,131979,2767],{"class":49},[36,131981,131935],{"class":53},[36,131983,131627],{"class":49},[36,131985,53931],{"class":53},[36,131987,131988],{"class":49},"#00a4ff",[36,131990,131944],{"class":53},[36,131992,131993,131995,131997,131999,132001,132003,132005,132007,132009,132012],{"class":38,"line":4155},[36,131994,131845],{"class":4500},[36,131996,3936],{"class":53794},[36,131998,131928],{"class":4500},[36,132000,54],{"class":53},[36,132002,2977],{"class":49},[36,132004,131935],{"class":53},[36,132006,131627],{"class":49},[36,132008,53931],{"class":53},[36,132010,132011],{"class":49},"#ff00ff",[36,132013,131944],{"class":53},[36,132015,132016,132018,132020,132022,132024,132026,132028,132030,132032,132035],{"class":38,"line":4161},[36,132017,131845],{"class":4500},[36,132019,3936],{"class":53794},[36,132021,131928],{"class":4500},[36,132023,54],{"class":53},[36,132025,1134],{"class":49},[36,132027,131935],{"class":53},[36,132029,131627],{"class":49},[36,132031,53931],{"class":53},[36,132033,132034],{"class":49},"#00ff00",[36,132036,131944],{"class":53},[14,132038,132040],{"id":132039},"_83-css三大特性","8.3 css三大特性",[997,132042,132044],{"id":132043},"_831-层叠性","8.3.1 层叠性",[19,132046,132047],{},"为了解决样式冲突问题",[19,132049,132050],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132052,132053],{},"   ②样式不冲突，不会层叠",[997,132055,132057],{"id":132056},"_832-继承性","8.3.2 继承性",[19,132059,132060],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132062,132063],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,132065,132067],{"className":129014,"code":132066,"language":129016,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,132068,132069,132075,132085],{"__ignoreMap":31},[36,132070,132071,132073],{"class":38,"line":39},[36,132072,19],{"class":53794},[36,132074,18091],{"class":53},[36,132076,132077,132079,132081,132083],{"class":38,"line":46},[36,132078,73391],{"class":49},[36,132080,53931],{"class":53},[36,132082,64857],{"class":49},[36,132084,3833],{"class":53},[36,132086,132087],{"class":38,"line":82},[36,132088,4103],{"class":53},[4000,132090],{"style":128870,"src":132091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132093,132094],{},"解释：①行高可以跟单位也可以不跟单位",[19,132096,132097],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132099,132100],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132102,132103],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[997,132105,132107],{"id":132106},"_833-优先级","8.3.3 优先级",[433,132109,132110,132113],{},[436,132111,132112],{},"选择器相同，则执行层叠性",[436,132114,132115],{},"选择器不同，则根据选择器权重执行",[206,132117,132118,132128],{},[209,132119,132120],{},[212,132121,132122,132125],{},[215,132123,132124],{"align":26253},"选择器",[215,132126,132127],{"align":26253},"选择器权重",[225,132129,132130,132138,132146,132154,132162,132170],{},[212,132131,132132,132135],{},[230,132133,132134],{"align":26253},"继承 或者*",[230,132136,132137],{"align":26253},"0，0，0，0",[212,132139,132140,132143],{},[230,132141,132142],{"align":26253},"标签选择器",[230,132144,132145],{"align":26253},"0，0，0，1",[212,132147,132148,132151],{},[230,132149,132150],{"align":26253},"类选择器，伪类选择器",[230,132152,132153],{"align":26253},"0，0，1，0",[212,132155,132156,132159],{},[230,132157,132158],{"align":26253},"ID选择器",[230,132160,132161],{"align":26253},"0，1，0，0",[212,132163,132164,132167],{},[230,132165,132166],{"align":26253},"行内样式",[230,132168,132169],{"align":26253},"1，0，0，0",[212,132171,132172,132175],{},[230,132173,132174],{"align":26253},"！important",[230,132176,132177],{"align":26253},"无穷大",[19,132179,132180],{},"! important用法：",[26,132182,132184],{"className":129014,"code":132183,"language":129016,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,132185,132186,132191,132197,132210,132214,132219,132225,132235],{"__ignoreMap":31},[36,132187,132188],{"class":38,"line":39},[36,132189,132190],{"class":42},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,132192,132193,132195],{"class":38,"line":46},[36,132194,54105],{"class":53794},[36,132196,18091],{"class":53},[36,132198,132199,132201,132203,132205,132208],{"class":38,"line":82},[36,132200,73391],{"class":49},[36,132202,53931],{"class":53},[36,132204,54139],{"class":49},[36,132206,132207],{"class":114}," !important",[36,132209,3833],{"class":53},[36,132211,132212],{"class":38,"line":88},[36,132213,4103],{"class":53},[36,132215,132216],{"class":38,"line":195},[36,132217,132218],{"class":42},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,132220,132221,132223],{"class":38,"line":1517},[36,132222,54105],{"class":53794},[36,132224,18091],{"class":53},[36,132226,132227,132229,132231,132233],{"class":38,"line":2421},[36,132228,73391],{"class":49},[36,132230,53931],{"class":53},[36,132232,59911],{"class":49},[36,132234,3833],{"class":53},[36,132236,132237],{"class":38,"line":2446},[36,132238,4103],{"class":53},[19,132240,132241],{},"优先级注意点：",[19,132243,132244],{},"①权重是有4组数字组成,但是不会有进位",[19,132246,132247],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132249,132250],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132252,132253],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132255,132256],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132258,132259],{},"⑥复合选择器",[206,132261,132262,132272],{},[209,132263,132264],{},[212,132265,132266,132269],{},[215,132267,132268],{"align":26253},"div ul li",[215,132270,132271],{"align":26253},"0,0,0,3",[225,132273,132274,132282,132290],{},[212,132275,132276,132279],{},[230,132277,132278],{"align":26253},".nav ul li",[230,132280,132281],{"align":26253},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[212,132283,132284,132287],{},[230,132285,132286],{"align":26253},"a:hover",[230,132288,132289],{"align":26253},"0,0,1,1",[212,132291,132292,132295],{},[230,132293,132294],{"align":26253},".nav a",[230,132296,132289],{"align":26253},[2602,132298,132299],{},"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":31,"searchDepth":46,"depth":46,"links":132301},[132302,132310,132321],{"id":130410,"depth":46,"text":130411,"children":132303},[132304,132305,132306,132307,132308,132309],{"id":130423,"depth":82,"text":130424},{"id":130495,"depth":82,"text":130496},{"id":130567,"depth":82,"text":130568},{"id":130598,"depth":82,"text":130599},{"id":130605,"depth":82,"text":130606},{"id":130758,"depth":82,"text":130759},{"id":131066,"depth":46,"text":131067,"children":132311},[132312,132313,132314,132315,132316,132317,132318,132319,132320],{"id":131073,"depth":82,"text":131074},{"id":131083,"depth":82,"text":131084},{"id":131179,"depth":82,"text":131180},{"id":131252,"depth":82,"text":131253},{"id":131407,"depth":82,"text":131408},{"id":131495,"depth":82,"text":131496},{"id":131547,"depth":82,"text":131548},{"id":131606,"depth":82,"text":131607},{"id":131711,"depth":82,"text":131712},{"id":132039,"depth":46,"text":132040,"children":132322},[132323,132324,132325],{"id":132043,"depth":82,"text":132044},{"id":132056,"depth":82,"text":132057},{"id":132106,"depth":82,"text":132107},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130402,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132332,"title":132333,"body":132334,"description":2630,"extension":2631,"meta":133924,"navigation":545,"path":133925,"seo":133926,"stem":133927,"__hash__":133928},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132335,"toc":133903},[132336,132339,132343,132346,132349,132352,132355,132358,132361,132364,132368,132376,132413,132449,132452,132466,132471,132505,132508,132601,132606,132609,132639,132642,132647,132655,132659,132666,132712,132756,132761,132764,132767,132770,132773,132776,132779,132781,132784,132788,132793,132837,132842,132845,132848,132885,132890,132893,132896,132899,132902,132934,132937,132940,132943,132975,132978,132981,132984,132988,132991,133023,133026,133030,133050,133053,133061,133064,133068,133073,133076,133108,133113,133116,133154,133158,133163,133166,133169,133200,133203,133220,133225,133277,133337,133342,133396,133434,133438,133442,133445,133449,133457,133460,133462,133473,133478,133526,133560,133563,133566,133569,133572,133616,133619,133622,133625,133628,133631,133634,133678,133681,133684,133687,133690,133693,133696,133702,133705,133749,133752,133755,133758,133761,133764,133808,133811,133813,133816,133820,133824,133862,133866,133869,133872,133876,133884,133888,133891,133894,133897,133900],[10,132337,132333],{"id":132338},"_9-css盒模型浮动与切图",[14,132340,132342],{"id":132341},"_91-盒子模型","9.1 盒子模型",[19,132344,132345],{},"利用盒子来设计网页",[19,132347,132348],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132350,132351],{},"网页布局设置：",[19,132353,132354],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132356,132357],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132359,132360],{},"③往盒子里装内容",[4000,132362],{"style":128870,"src":132363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[997,132365,132367],{"id":132366},"_911-边框border","9.1.1 边框（border）",[433,132369,132370,132373],{},[436,132371,132372],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[436,132374,132375],{},"语法",[26,132377,132379],{"className":129014,"code":132378,"language":129016,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,132380,132381,132386,132392,132409],{"__ignoreMap":31},[36,132382,132383],{"class":38,"line":39},[36,132384,132385],{"class":42},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,132387,132388,132390],{"class":38,"line":46},[36,132389,54105],{"class":53794},[36,132391,18091],{"class":53},[36,132393,132394,132396,132398,132400,132402,132404,132407],{"class":38,"line":82},[36,132395,73382],{"class":49},[36,132397,53931],{"class":53},[36,132399,707],{"class":49},[36,132401,53986],{"class":114},[36,132403,54015],{"class":49},[36,132405,132406],{"class":49}," #ccc",[36,132408,3833],{"class":53},[36,132410,132411],{"class":38,"line":88},[36,132412,4103],{"class":53},[206,132414,132415,132423],{},[209,132416,132417],{},[212,132418,132419,132421],{},[215,132420,131616],{"align":26253},[215,132422,105169],{"align":26253},[225,132424,132425,132433,132441],{},[212,132426,132427,132430],{},[230,132428,132429],{"align":26253},"border-width",[230,132431,132432],{"align":26253},"定义边框粗细，单位是px",[212,132434,132435,132438],{},[230,132436,132437],{"align":26253},"border-style",[230,132439,132440],{"align":26253},"边框的样式",[212,132442,132443,132446],{},[230,132444,132445],{"align":26253},"border-color",[230,132447,132448],{"align":26253},"边框的颜色",[19,132450,132451],{},"边框样式 border-style 可以设置如下值：",[3680,132453,132454,132457,132460,132463],{},[436,132455,132456],{},"none：没有边框即忽略所有边框的宽度（默认值）",[436,132458,132459],{},"solid：边框为单实线(最为常用的)",[436,132461,132462],{},"dashed：边框为虚线",[436,132464,132465],{},"dotted：边框为点线",[433,132467,132468],{"start":82},[436,132469,132470],{},"边框的合写分写",[26,132472,132473],{"className":129014,"code":132378,"language":129016,"meta":31,"style":31},[33,132474,132475,132479,132485,132501],{"__ignoreMap":31},[36,132476,132477],{"class":38,"line":39},[36,132478,132385],{"class":42},[36,132480,132481,132483],{"class":38,"line":46},[36,132482,54105],{"class":53794},[36,132484,18091],{"class":53},[36,132486,132487,132489,132491,132493,132495,132497,132499],{"class":38,"line":82},[36,132488,73382],{"class":49},[36,132490,53931],{"class":53},[36,132492,707],{"class":49},[36,132494,53986],{"class":114},[36,132496,54015],{"class":49},[36,132498,132406],{"class":49},[36,132500,3833],{"class":53},[36,132502,132503],{"class":38,"line":88},[36,132504,4103],{"class":53},[19,132506,132507],{},"边框分开写法：",[26,132509,132511],{"className":129014,"code":132510,"language":129016,"meta":31,"style":31},"\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",[33,132512,132513,132518,132524,132542,132560,132579,132597],{"__ignoreMap":31},[36,132514,132515],{"class":38,"line":39},[36,132516,132517],{"class":42},"\u002F* 边框分开写法 *\u002F\n",[36,132519,132520,132522],{"class":38,"line":46},[36,132521,54105],{"class":53794},[36,132523,18091],{"class":53},[36,132525,132526,132529,132531,132533,132535,132537,132540],{"class":38,"line":82},[36,132527,132528],{"class":49},"  border-top",[36,132530,53931],{"class":53},[36,132532,707],{"class":49},[36,132534,53986],{"class":114},[36,132536,54015],{"class":49},[36,132538,132539],{"class":49}," #000",[36,132541,3833],{"class":53},[36,132543,132544,132547,132549,132551,132553,132555,132558],{"class":38,"line":88},[36,132545,132546],{"class":49},"  border-right",[36,132548,53931],{"class":53},[36,132550,1188],{"class":49},[36,132552,53986],{"class":114},[36,132554,64729],{"class":49},[36,132556,132557],{"class":49}," #333",[36,132559,3833],{"class":53},[36,132561,132562,132565,132567,132569,132571,132574,132577],{"class":38,"line":195},[36,132563,132564],{"class":49},"  border-bottom",[36,132566,53931],{"class":53},[36,132568,2767],{"class":49},[36,132570,53986],{"class":114},[36,132572,132573],{"class":49}," dotted",[36,132575,132576],{"class":49}," #666",[36,132578,3833],{"class":53},[36,132580,132581,132584,132586,132588,132590,132592,132595],{"class":38,"line":1517},[36,132582,132583],{"class":49},"  border-left",[36,132585,53931],{"class":53},[36,132587,707],{"class":49},[36,132589,53986],{"class":114},[36,132591,54015],{"class":49},[36,132593,132594],{"class":49}," #999",[36,132596,3833],{"class":53},[36,132598,132599],{"class":38,"line":2421},[36,132600,4103],{"class":53},[433,132602,132603],{"start":88},[436,132604,132605],{},"表格的细线边框",[19,132607,132608],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,132610,132612],{"className":129014,"code":132611,"language":129016,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,132613,132614,132619,132625,132635],{"__ignoreMap":31},[36,132615,132616],{"class":38,"line":39},[36,132617,132618],{"class":42},"\u002F* 表格细线边框合并 *\u002F\n",[36,132620,132621,132623],{"class":38,"line":46},[36,132622,206],{"class":53794},[36,132624,18091],{"class":53},[36,132626,132627,132629,132631,132633],{"class":38,"line":82},[36,132628,73064],{"class":49},[36,132630,53931],{"class":53},[36,132632,67523],{"class":49},[36,132634,3833],{"class":53},[36,132636,132637],{"class":38,"line":88},[36,132638,4103],{"class":53},[19,132640,132641],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[433,132643,132644],{"start":195},[436,132645,132646],{},"解决边框额外增加盒子的实际大小的方法：",[3680,132648,132649,132652],{},[436,132650,132651],{},"测量盒子大小的时候,不量边框",[436,132653,132654],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[997,132656,132658],{"id":132657},"_912-内边距","9.1.2 内边距",[433,132660,132661,132664],{},[436,132662,132663],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[436,132665,132375],{},[206,132667,132668,132678],{},[209,132669,132670],{},[212,132671,132672,132675],{},[215,132673,132674],{"align":26253},"值的个数",[215,132676,132677],{"align":26253},"表达意思",[225,132679,132680,132688,132696,132704],{},[212,132681,132682,132685],{},[230,132683,132684],{"align":26253},"padding: 5px;",[230,132686,132687],{"align":26253},"1个值，代表上下左右都有5个元素",[212,132689,132690,132693],{},[230,132691,132692],{"align":26253},"padding: 5px 10px;",[230,132694,132695],{"align":26253},"2个值，代表上下内边距为5像素，左右内边距为10像素",[212,132697,132698,132701],{},[230,132699,132700],{"align":26253},"padding: 5px 10px 20px;",[230,132702,132703],{"align":26253},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[212,132705,132706,132709],{},[230,132707,132708],{"align":26253},"padding: 5px 10px 20px 30px;",[230,132710,132711],{"align":26253},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[206,132713,132714,132722],{},[209,132715,132716],{},[212,132717,132718,132720],{},[215,132719,131616],{"align":26253},[215,132721,105169],{"align":26253},[225,132723,132724,132732,132740,132748],{},[212,132725,132726,132729],{},[230,132727,132728],{"align":26253},"padding-left",[230,132730,132731],{"align":26253},"左内边距",[212,132733,132734,132737],{},[230,132735,132736],{"align":26253},"padding-right",[230,132738,132739],{"align":26253},"右内边距",[212,132741,132742,132745],{},[230,132743,132744],{"align":26253},"padding-top",[230,132746,132747],{"align":26253},"上内边距",[212,132749,132750,132753],{},[230,132751,132752],{"align":26253},"padding-bottom",[230,132754,132755],{"align":26253},"下内边距",[433,132757,132758],{"start":82},[436,132759,132760],{},"内边距会影响盒子的实际大小",[19,132762,132763],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132765,132766],{},"①内容和边框有了距离，添加了内边距",[19,132768,132769],{},"②padding影响了盒子实际大小",[19,132771,132772],{},"内边距对盒子大小的影响：",[19,132774,132775],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132777,132778],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132780,97698],{},[19,132782,132783],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[997,132785,132787],{"id":132786},"_913-外边距","9.1.3 外边距",[433,132789,132790],{},[436,132791,132792],{},"控制盒子与盒子之间的距离",[206,132794,132795,132803],{},[209,132796,132797],{},[212,132798,132799,132801],{},[215,132800,131616],{"align":26253},[215,132802,105169],{"align":26253},[225,132804,132805,132813,132821,132829],{},[212,132806,132807,132810],{},[230,132808,132809],{"align":26253},"margin-left",[230,132811,132812],{"align":26253},"左外边距",[212,132814,132815,132818],{},[230,132816,132817],{"align":26253},"margin-right",[230,132819,132820],{"align":26253},"右外边距",[212,132822,132823,132826],{},[230,132824,132825],{"align":26253},"margin-top",[230,132827,132828],{"align":26253},"上外边距",[212,132830,132831,132834],{},[230,132832,132833],{"align":26253},"margin-bottom",[230,132835,132836],{"align":26253},"下外边距",[433,132838,132839],{"start":46},[436,132840,132841],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132843,132844],{},"①盒子必须指定了宽度（width）",[19,132846,132847],{},"②盒子左右的外边距都设置为 auto",[26,132849,132851],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,132852,132853,132858,132865,132881],{"__ignoreMap":31},[36,132854,132855],{"class":38,"line":39},[36,132856,132857],{"class":42},"\u002F* margin 复合写法（同上） *\u002F\n",[36,132859,132860,132863],{"class":38,"line":46},[36,132861,132862],{"class":4500},".box",[36,132864,18091],{"class":53},[36,132866,132867,132869,132871,132873,132875,132878],{"class":38,"line":82},[36,132868,72956],{"class":49},[36,132870,53931],{"class":53},[36,132872,713],{"class":49},[36,132874,54050],{"class":49},[36,132876,132877],{"class":53},";  ",[36,132879,132880],{"class":42},"\u002F* 块级盒子水平居中 *\u002F\n",[36,132882,132883],{"class":38,"line":88},[36,132884,4103],{"class":53},[433,132886,132887],{"start":82},[436,132888,132889],{},"外边距塌陷问题",[19,132891,132892],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[4000,132894],{"style":128870,"src":132895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132897,132898],{},"解决方案：",[19,132900,132901],{},"①可以为父亲元素定义上边距",[26,132903,132904],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,132905,132906,132910,132916,132930],{"__ignoreMap":31},[36,132907,132908],{"class":38,"line":39},[36,132909,132857],{"class":42},[36,132911,132912,132914],{"class":38,"line":46},[36,132913,132862],{"class":4500},[36,132915,18091],{"class":53},[36,132917,132918,132920,132922,132924,132926,132928],{"class":38,"line":82},[36,132919,72956],{"class":49},[36,132921,53931],{"class":53},[36,132923,713],{"class":49},[36,132925,54050],{"class":49},[36,132927,132877],{"class":53},[36,132929,132880],{"class":42},[36,132931,132932],{"class":38,"line":88},[36,132933,4103],{"class":53},[19,132935,132936],{},"②可以为父亲元素定义上内边距",[19,132938,132939],{},"③可以为父亲元素添加overflow:hidden",[4000,132941],{"style":128870,"src":132942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,132944,132945],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,132946,132947,132951,132957,132971],{"__ignoreMap":31},[36,132948,132949],{"class":38,"line":39},[36,132950,132857],{"class":42},[36,132952,132953,132955],{"class":38,"line":46},[36,132954,132862],{"class":4500},[36,132956,18091],{"class":53},[36,132958,132959,132961,132963,132965,132967,132969],{"class":38,"line":82},[36,132960,72956],{"class":49},[36,132962,53931],{"class":53},[36,132964,713],{"class":49},[36,132966,54050],{"class":49},[36,132968,132877],{"class":53},[36,132970,132880],{"class":42},[36,132972,132973],{"class":38,"line":88},[36,132974,4103],{"class":53},[4000,132976],{"style":128870,"src":132977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132979,132980],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132982,132983],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[997,132985,132987],{"id":132986},"_914-清除内外边距","9.1.4 清除内外边距",[19,132989,132990],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,132992,132993],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,132994,132995,132999,133005,133019],{"__ignoreMap":31},[36,132996,132997],{"class":38,"line":39},[36,132998,132857],{"class":42},[36,133000,133001,133003],{"class":38,"line":46},[36,133002,132862],{"class":4500},[36,133004,18091],{"class":53},[36,133006,133007,133009,133011,133013,133015,133017],{"class":38,"line":82},[36,133008,72956],{"class":49},[36,133010,53931],{"class":53},[36,133012,713],{"class":49},[36,133014,54050],{"class":49},[36,133016,132877],{"class":53},[36,133018,132880],{"class":42},[36,133020,133021],{"class":38,"line":88},[36,133022,4103],{"class":53},[19,133024,133025],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[997,133027,133029],{"id":133028},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3680,133031,133032,133035,133038,133041,133044,133047],{},[436,133033,133034],{},"文件→打开 ：可以打开我们要测量的图片",[436,133036,133037],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[436,133039,133040],{},"右击标尺，把里面的单位改为像素",[436,133042,133043],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[436,133045,133046],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[436,133048,133049],{},"用选区拖动 可以测量大小",[4000,133051],{"style":128870,"src":133052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3680,133054,133055,133058],{},[436,133056,133057],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[436,133059,133060],{},"吸管取色工具",[4000,133062],{"style":128870,"src":133063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[997,133065,133067],{"id":133066},"_916-案例","9.1.6 案例",[433,133069,133070],{},[436,133071,133072],{},"小米商品",[4000,133074],{"style":128870,"src":133075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,133077,133078],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,133079,133080,133084,133090,133104],{"__ignoreMap":31},[36,133081,133082],{"class":38,"line":39},[36,133083,132857],{"class":42},[36,133085,133086,133088],{"class":38,"line":46},[36,133087,132862],{"class":4500},[36,133089,18091],{"class":53},[36,133091,133092,133094,133096,133098,133100,133102],{"class":38,"line":82},[36,133093,72956],{"class":49},[36,133095,53931],{"class":53},[36,133097,713],{"class":49},[36,133099,54050],{"class":49},[36,133101,132877],{"class":53},[36,133103,132880],{"class":42},[36,133105,133106],{"class":38,"line":88},[36,133107,4103],{"class":53},[433,133109,133110],{"start":46},[436,133111,133112],{},"快报模块",[4000,133114],{"style":128870,"src":133115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,133117,133119],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,133120,133121,133126,133141,133146],{"__ignoreMap":31},[36,133122,133123],{"class":38,"line":39},[36,133124,133125],{"class":42},"\u003C!-- HTML 代码示例 -->\n",[36,133127,133128,133130,133132,133134,133136,133139],{"class":38,"line":46},[36,133129,1507],{"class":53},[36,133131,54105],{"class":53794},[36,133133,55980],{"class":4500},[36,133135,115],{"class":53},[36,133137,133138],{"class":57},"\"example\"",[36,133140,53801],{"class":53},[36,133142,133143],{"class":38,"line":82},[36,133144,133145],{"class":53},"  示例内容\n",[36,133147,133148,133150,133152],{"class":38,"line":88},[36,133149,54279],{"class":53},[36,133151,54105],{"class":53794},[36,133153,53801],{"class":53},[997,133155,133157],{"id":133156},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[433,133159,133160],{},[436,133161,133162],{},"圆角边框",[19,133164,133165],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[4000,133167],{"style":128870,"src":133168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,133170,133172],{"className":129014,"code":133171,"language":129016,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,133173,133174,133180,133196],{"__ignoreMap":31},[36,133175,133176,133178],{"class":38,"line":39},[36,133177,54105],{"class":53794},[36,133179,18091],{"class":53},[36,133181,133182,133184,133186,133188,133190,133192,133194],{"class":38,"line":46},[36,133183,73382],{"class":49},[36,133185,53931],{"class":53},[36,133187,707],{"class":49},[36,133189,53986],{"class":114},[36,133191,54015],{"class":49},[36,133193,132406],{"class":49},[36,133195,3833],{"class":53},[36,133197,133198],{"class":38,"line":82},[36,133199,4103],{"class":53},[19,133201,133202],{},"解释:",[3680,133204,133205,133208,133211,133214,133217],{},[436,133206,133207],{},"参数值可以为数值或百分比的形式",[436,133209,133210],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[436,133212,133213],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[436,133215,133216],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[436,133218,133219],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[433,133221,133222],{"start":46},[436,133223,133224],{},"盒子阴影",[26,133226,133228],{"className":129014,"code":133227,"language":129016,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,133229,133230,133236,133273],{"__ignoreMap":31},[36,133231,133232,133234],{"class":38,"line":39},[36,133233,54105],{"class":53794},[36,133235,18091],{"class":53},[36,133237,133238,133241,133243,133245,133247,133249,133251,133253,133255,133257,133259,133261,133263,133265,133267,133269,133271],{"class":38,"line":46},[36,133239,133240],{"class":49},"  box-shadow",[36,133242,53931],{"class":53},[36,133244,713],{"class":49},[36,133246,1140],{"class":49},[36,133248,53986],{"class":114},[36,133250,931],{"class":49},[36,133252,53986],{"class":114},[36,133254,81250],{"class":49},[36,133256,54],{"class":53},[36,133258,713],{"class":49},[36,133260,14958],{"class":53},[36,133262,713],{"class":49},[36,133264,14958],{"class":53},[36,133266,713],{"class":49},[36,133268,14958],{"class":53},[36,133270,2559],{"class":49},[36,133272,5251],{"class":53},[36,133274,133275],{"class":38,"line":82},[36,133276,4103],{"class":53},[206,133278,133279,133287],{},[209,133280,133281],{},[212,133282,133283,133285],{},[215,133284,2842],{"align":26253},[215,133286,30001],{"align":26253},[225,133288,133289,133297,133305,133313,133321,133329],{},[212,133290,133291,133294],{},[230,133292,133293],{"align":26253},"h-shadow",[230,133295,133296],{"align":26253},"必需,水平阴影的位置,允许负值",[212,133298,133299,133302],{},[230,133300,133301],{"align":26253},"v-shadow",[230,133303,133304],{"align":26253},"必需,垂直阴影的位置,允许负值",[212,133306,133307,133310],{},[230,133308,133309],{"align":26253},"blur",[230,133311,133312],{"align":26253},"可选,模糊距离,就是影子的虚实",[212,133314,133315,133318],{},[230,133316,133317],{"align":26253},"spread",[230,133319,133320],{"align":26253},"可选,阴影尺寸",[212,133322,133323,133326],{},[230,133324,133325],{"align":26253},"color",[230,133327,133328],{"align":26253},"可选,阴影的颜色",[212,133330,133331,133334],{},[230,133332,133333],{"align":26253},"inset",[230,133335,133336],{"align":26253},"可选,将外部阴影(outset)改为内部阴影",[433,133338,133339],{"start":82},[436,133340,133341],{},"文字阴影",[26,133343,133345],{"className":129014,"code":133344,"language":129016,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,133346,133347,133353,133392],{"__ignoreMap":31},[36,133348,133349,133351],{"class":38,"line":39},[36,133350,19],{"class":53794},[36,133352,18091],{"class":53},[36,133354,133355,133358,133360,133362,133364,133366,133368,133370,133372,133374,133376,133378,133380,133382,133384,133386,133388,133390],{"class":38,"line":46},[36,133356,133357],{"class":49},"  text-shadow",[36,133359,53931],{"class":53},[36,133361,707],{"class":49},[36,133363,53986],{"class":114},[36,133365,733],{"class":49},[36,133367,53986],{"class":114},[36,133369,1140],{"class":49},[36,133371,53986],{"class":114},[36,133373,81250],{"class":49},[36,133375,54],{"class":53},[36,133377,713],{"class":49},[36,133379,14958],{"class":53},[36,133381,713],{"class":49},[36,133383,14958],{"class":53},[36,133385,713],{"class":49},[36,133387,14958],{"class":53},[36,133389,102997],{"class":49},[36,133391,5251],{"class":53},[36,133393,133394],{"class":38,"line":82},[36,133395,4103],{"class":53},[206,133397,133398,133406],{},[209,133399,133400],{},[212,133401,133402,133404],{},[215,133403,2842],{"align":26253},[215,133405,30001],{"align":26253},[225,133407,133408,133414,133421,133428],{},[212,133409,133410,133412],{},[230,133411,133293],{"align":26253},[230,133413,133296],{"align":26253},[212,133415,133416,133418],{},[230,133417,133301],{"align":26253},[230,133419,133420],{"align":26253},"必需,垂直阴影位置,允许负值",[212,133422,133423,133425],{},[230,133424,133309],{"align":26253},[230,133426,133427],{"align":26253},"可选,模糊的距离",[212,133429,133430,133432],{},[230,133431,133325],{"align":26253},[230,133433,133328],{"align":26253},[14,133435,133437],{"id":133436},"_92-浮动","9.2 浮动",[997,133439,133441],{"id":133440},"_921-浮动介绍","9.2.1 浮动介绍",[19,133443,133444],{},"在16.2中详细介绍",[997,133446,133448],{"id":133447},"_922-清除浮动","9.2.2 清除浮动",[433,133450,133451,133454],{},[436,133452,133453],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[436,133455,133456],{},"清除浮动的本质",[19,133458,133459],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133461,695],{},[3680,133463,133464,133467,133470],{},[436,133465,133466],{},"如果父盒子本身有高度，则不需要清除浮动",[436,133468,133469],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[436,133471,133472],{},"父级有了高度，就不会影响下面的标准流了",[433,133474,133475],{"start":82},[436,133476,133477],{},"清除浮动样式",[26,133479,133481],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,133482,133483,133490,133501,133505,133512,133522],{"__ignoreMap":31},[36,133484,133485,133488],{"class":38,"line":39},[36,133486,133487],{"class":4500},".left",[36,133489,18091],{"class":53},[36,133491,133492,133495,133497,133499],{"class":38,"line":46},[36,133493,133494],{"class":49},"  float",[36,133496,53931],{"class":53},[36,133498,26253],{"class":49},[36,133500,3833],{"class":53},[36,133502,133503],{"class":38,"line":82},[36,133504,4103],{"class":53},[36,133506,133507,133510],{"class":38,"line":88},[36,133508,133509],{"class":4500},".right",[36,133511,18091],{"class":53},[36,133513,133514,133516,133518,133520],{"class":38,"line":195},[36,133515,133494],{"class":49},[36,133517,53931],{"class":53},[36,133519,75008],{"class":49},[36,133521,3833],{"class":53},[36,133523,133524],{"class":38,"line":1517},[36,133525,4103],{"class":53},[206,133527,133528,133536],{},[209,133529,133530],{},[212,133531,133532,133534],{},[215,133533,129478],{"align":26253},[215,133535,30001],{"align":26253},[225,133537,133538,133545,133552],{},[212,133539,133540,133542],{},[230,133541,26253],{"align":26253},[230,133543,133544],{"align":26253},"不允许左侧有浮动元素（清除左侧浮动的影响）",[212,133546,133547,133549],{},[230,133548,75008],{"align":26253},[230,133550,133551],{"align":26253},"不允许右侧有浮动元素（清除右侧浮动的影响）",[212,133553,133554,133557],{},[230,133555,133556],{"align":26253},"both",[230,133558,133559],{"align":26253},"同时清除左右侧浮动的影响",[19,133561,133562],{},"法一",[19,133564,133565],{},"额外标签法也称为隔墙法",[19,133567,133568],{},"使用方式：",[19,133570,133571],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,133573,133574],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,133575,133576,133582,133592,133596,133602,133612],{"__ignoreMap":31},[36,133577,133578,133580],{"class":38,"line":39},[36,133579,133487],{"class":4500},[36,133581,18091],{"class":53},[36,133583,133584,133586,133588,133590],{"class":38,"line":46},[36,133585,133494],{"class":49},[36,133587,53931],{"class":53},[36,133589,26253],{"class":49},[36,133591,3833],{"class":53},[36,133593,133594],{"class":38,"line":82},[36,133595,4103],{"class":53},[36,133597,133598,133600],{"class":38,"line":88},[36,133599,133509],{"class":4500},[36,133601,18091],{"class":53},[36,133603,133604,133606,133608,133610],{"class":38,"line":195},[36,133605,133494],{"class":49},[36,133607,53931],{"class":53},[36,133609,75008],{"class":49},[36,133611,3833],{"class":53},[36,133613,133614],{"class":38,"line":1517},[36,133615,4103],{"class":53},[19,133617,133618],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133620,133621],{},"优点： 通俗易懂，书写方便",[19,133623,133624],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133626,133627],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133629,133630],{},"法二",[19,133632,133633],{},"父级添加overflow属性",[26,133635,133636],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,133637,133638,133644,133654,133658,133664,133674],{"__ignoreMap":31},[36,133639,133640,133642],{"class":38,"line":39},[36,133641,133487],{"class":4500},[36,133643,18091],{"class":53},[36,133645,133646,133648,133650,133652],{"class":38,"line":46},[36,133647,133494],{"class":49},[36,133649,53931],{"class":53},[36,133651,26253],{"class":49},[36,133653,3833],{"class":53},[36,133655,133656],{"class":38,"line":82},[36,133657,4103],{"class":53},[36,133659,133660,133662],{"class":38,"line":88},[36,133661,133509],{"class":4500},[36,133663,18091],{"class":53},[36,133665,133666,133668,133670,133672],{"class":38,"line":195},[36,133667,133494],{"class":49},[36,133669,53931],{"class":53},[36,133671,75008],{"class":49},[36,133673,3833],{"class":53},[36,133675,133676],{"class":38,"line":1517},[36,133677,4103],{"class":53},[19,133679,133680],{},"overflow: hidden;",[19,133682,133683],{},"优点：代码简洁",[19,133685,133686],{},"缺点：无法显示溢出的部分",[19,133688,133689],{},"注意：是给父元素添加代码",[19,133691,133692],{},"法三",[19,133694,133695],{},"父级添加after伪元素",[19,133697,133698,133701],{},[133699,133700],"after",{}," 方式是额外标签法的升级版",[19,133703,133704],{},"使用的时候复制就可以",[26,133706,133707],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,133708,133709,133715,133725,133729,133735,133745],{"__ignoreMap":31},[36,133710,133711,133713],{"class":38,"line":39},[36,133712,133487],{"class":4500},[36,133714,18091],{"class":53},[36,133716,133717,133719,133721,133723],{"class":38,"line":46},[36,133718,133494],{"class":49},[36,133720,53931],{"class":53},[36,133722,26253],{"class":49},[36,133724,3833],{"class":53},[36,133726,133727],{"class":38,"line":82},[36,133728,4103],{"class":53},[36,133730,133731,133733],{"class":38,"line":88},[36,133732,133509],{"class":4500},[36,133734,18091],{"class":53},[36,133736,133737,133739,133741,133743],{"class":38,"line":195},[36,133738,133494],{"class":49},[36,133740,53931],{"class":53},[36,133742,75008],{"class":49},[36,133744,3833],{"class":53},[36,133746,133747],{"class":38,"line":1517},[36,133748,4103],{"class":53},[19,133750,133751],{},"优点：没有增加标签，结构更简单",[19,133753,133754],{},"缺点：照顾低版本浏览器",[19,133756,133757],{},"代表网站： 百度、淘宝网、网易等",[19,133759,133760],{},"法四",[19,133762,133763],{},"父级添加双伪元素",[26,133765,133766],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,133767,133768,133774,133784,133788,133794,133804],{"__ignoreMap":31},[36,133769,133770,133772],{"class":38,"line":39},[36,133771,133487],{"class":4500},[36,133773,18091],{"class":53},[36,133775,133776,133778,133780,133782],{"class":38,"line":46},[36,133777,133494],{"class":49},[36,133779,53931],{"class":53},[36,133781,26253],{"class":49},[36,133783,3833],{"class":53},[36,133785,133786],{"class":38,"line":82},[36,133787,4103],{"class":53},[36,133789,133790,133792],{"class":38,"line":88},[36,133791,133509],{"class":4500},[36,133793,18091],{"class":53},[36,133795,133796,133798,133800,133802],{"class":38,"line":195},[36,133797,133494],{"class":49},[36,133799,53931],{"class":53},[36,133801,75008],{"class":49},[36,133803,3833],{"class":53},[36,133805,133806],{"class":38,"line":1517},[36,133807,4103],{"class":53},[19,133809,133810],{},"优点：代码更简洁",[19,133812,133754],{},[19,133814,133815],{},"代表网站：小米、腾讯等",[14,133817,133819],{"id":133818},"_93-ps切图","9.3 PS切图",[997,133821,133823],{"id":133822},"_931-常见图片格式","9.3.1 常见图片格式",[206,133825,133826,133836],{},[209,133827,133828],{},[212,133829,133830,133833],{},[215,133831,133832],{"align":26253},"jpg图像格式",[215,133834,133835],{"align":26253},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[225,133837,133838,133846,133854],{},[212,133839,133840,133843],{},[230,133841,133842],{"align":26253},"gif图像格式",[230,133844,133845],{"align":26253},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[212,133847,133848,133851],{},[230,133849,133850],{"align":26253},"png图像格式",[230,133852,133853],{"align":26253},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[212,133855,133856,133859],{},[230,133857,133858],{"align":26253},"PSD图像格式",[230,133860,133861],{"align":26253},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[997,133863,133865],{"id":133864},"_932-图层切图","9.3.2 图层切图",[19,133867,133868],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133870,133871],{},"按住shift选中两个图层->图层菜单->合并图层",[997,133873,133875],{"id":133874},"_933-切片切图","9.3.3 切片切图",[3680,133877,133878,133881],{},[436,133879,133880],{},"利用切片工具手动划出",[436,133882,133883],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[997,133885,133887],{"id":133886},"_934-切图步骤","9.3.4 切图步骤",[19,133889,133890],{},"用切片工具选中：",[4000,133892],{"style":128870,"src":133893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133895,133896],{},"文件 -> 导出",[4000,133898],{"style":128870,"src":133899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2602,133901,133902],{},"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":31,"searchDepth":46,"depth":46,"links":133904},[133905,133914,133918],{"id":132341,"depth":46,"text":132342,"children":133906},[133907,133908,133909,133910,133911,133912,133913],{"id":132366,"depth":82,"text":132367},{"id":132657,"depth":82,"text":132658},{"id":132786,"depth":82,"text":132787},{"id":132986,"depth":82,"text":132987},{"id":133028,"depth":82,"text":133029},{"id":133066,"depth":82,"text":133067},{"id":133156,"depth":82,"text":133157},{"id":133436,"depth":46,"text":133437,"children":133915},[133916,133917],{"id":133440,"depth":82,"text":133441},{"id":133447,"depth":82,"text":133448},{"id":133818,"depth":46,"text":133819,"children":133919},[133920,133921,133922,133923],{"id":133822,"depth":82,"text":133823},{"id":133864,"depth":82,"text":133865},{"id":133874,"depth":82,"text":133875},{"id":133886,"depth":82,"text":133887},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132333,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133930,"title":133931,"body":133932,"description":2630,"extension":2631,"meta":134572,"navigation":545,"path":134573,"seo":134574,"stem":134575,"__hash__":134576},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133933,"toc":134560},[133934,133937,133941,133967,134001,134005,134009,134012,134053,134060,134070,134078,134080,134083,134086,134089,134096,134110,134114,134117,134146,134150,134153,134167,134171,134174,134202,134206,134209,134235,134239,134244,134277,134282,134310,134314,134331,134377,134382,134426,134443,134550,134558],[10,133935,133931],{"id":133936},"_10-css规范与学成在线案例",[14,133938,133940],{"id":133939},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[433,133942,133943,133949,133955,133961],{},[436,133944,133945,133948],{},[2839,133946,133947],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[436,133950,133951,133954],{},[2839,133952,133953],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[436,133956,133957,133960],{},[2839,133958,133959],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[436,133962,133963,133966],{},[2839,133964,133965],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,133968,133969],{"className":129014,"code":132378,"language":129016,"meta":31,"style":31},[33,133970,133971,133975,133981,133997],{"__ignoreMap":31},[36,133972,133973],{"class":38,"line":39},[36,133974,132385],{"class":42},[36,133976,133977,133979],{"class":38,"line":46},[36,133978,54105],{"class":53794},[36,133980,18091],{"class":53},[36,133982,133983,133985,133987,133989,133991,133993,133995],{"class":38,"line":82},[36,133984,73382],{"class":49},[36,133986,53931],{"class":53},[36,133988,707],{"class":49},[36,133990,53986],{"class":114},[36,133992,54015],{"class":49},[36,133994,132406],{"class":49},[36,133996,3833],{"class":53},[36,133998,133999],{"class":38,"line":88},[36,134000,4103],{"class":53},[14,134002,134004],{"id":134003},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[997,134006,134008],{"id":134007},"_1021-header头部制作","10.2.1 header头部制作",[4000,134010],{"style":128870,"src":134011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3680,134013,134014,134021,134028,134034,134041,134047],{},[436,134015,134016,134017,134020],{},"1号是版心盒子 ",[2839,134018,134019],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[436,134022,134023,134024,134027],{},"版心盒子 里面包含 2号盒子 ",[2839,134025,134026],{},"logo"," 图标",[436,134029,134030,134031,134033],{},"版心盒子 里面包含 3号盒子 ",[2839,134032,56207],{}," 导航栏",[436,134035,134036,134037,134040],{},"版心盒子 里面包含 4号盒子 ",[2839,134038,134039],{},"search"," 搜索框",[436,134042,134043,134044,134046],{},"版心盒子 里面包含 5号盒子 ",[2839,134045,505],{}," 个人信息",[436,134048,134049,134050],{},"注意，要求里面的 ",[2839,134051,134052],{},"4个子盒子 必须都浮动",[433,134054,134055],{},[436,134056,134057],{},[2839,134058,134059],{},"导航栏注意点:",[19,134061,134062,134063,134066,134067],{},"实际开发中， ",[2839,134064,134065],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2839,134068,134069],{},"用 li 包含链接(li+a)的做法",[3680,134071,134072,134075],{},[436,134073,134074],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[436,134076,134077],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134079,695],{},[19,134081,134082],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134084,134085],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134087,134088],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[433,134090,134091],{"start":46},[436,134092,134093],{},[2839,134094,134095],{},"4号盒子search的细节：",[3680,134097,134098,134101,134104],{},[436,134099,134100],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[436,134102,134103],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[436,134105,134106,134109],{},[33,134107,134108],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[997,134111,134113],{"id":134112},"_1022-banner制作","10.2.2 banner制作",[4000,134115],{"style":128870,"src":134116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3680,134118,134119,134126,134132,134139],{},[436,134120,134121,134122,134125],{},"1号盒子是通栏的大盒子 ",[2839,134123,134124],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[436,134127,134128,134129,134131],{},"2号盒子是版心 ",[2839,134130,3471],{}," ， 要水平居中对齐",[436,134133,134134,134135,134138],{},"3号盒子版心内，左对齐 ",[2839,134136,134137],{},"subnav"," 侧导航栏",[436,134140,134141,134142,134145],{},"4号盒子版心内，右对齐 ",[2839,134143,134144],{},"course"," 课程",[997,134147,134149],{"id":134148},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[4000,134151],{"style":128870,"src":134152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3680,134154,134155,134158,134161,134164],{},[436,134156,134157],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[436,134159,134160],{},"1号盒子是标题 H3 左侧浮动",[436,134162,134163],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[436,134165,134166],{},"3号盒子 右浮动 mod 修改",[997,134168,134170],{"id":134169},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[4000,134172],{"style":128870,"src":134173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3680,134175,134176,134182,134189,134196,134199],{},[436,134177,134178,134179,134181],{},"1号盒子为最大的盒子 ",[2839,134180,56208],{}," 版心水平居中对齐",[436,134183,134184,134185,134188],{},"2号盒子为上面部分 ",[2839,134186,134187],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[436,134190,134191,134192,134195],{},"3号盒子为底下部分 ",[2839,134193,134194],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[436,134197,134198],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[436,134200,134201],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[997,134203,134205],{"id":134204},"_1025-底部模块制作","10.2.5 底部模块制作",[4000,134207],{"style":128870,"src":134208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3680,134210,134211,134218,134221,134228],{},[436,134212,134213,134214,134217],{},"1号盒子通栏大盒子 底部 ",[2839,134215,134216],{},"footer"," 给高度 底色是白色",[436,134219,134220],{},"2号盒子版心水平居中",[436,134222,134223,134224,134227],{},"3号盒子版权 ",[2839,134225,134226],{},"copyright"," 左对齐",[436,134229,134230,134231,134234],{},"4号盒子 链接组 ",[2839,134232,134233],{},"links"," 右对齐",[997,134236,134238],{"id":134237},"_1026-代码模块","10.2.6 代码模块",[433,134240,134241],{},[436,134242,134243],{},"html部分",[26,134245,134247],{"className":129761,"code":134246,"language":129763,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,134248,134249],{"__ignoreMap":31},[36,134250,134251,134253,134255,134257,134259,134262,134265,134267,134270,134273,134275],{"class":38,"line":39},[36,134252,1507],{"class":53},[36,134254,2923],{"class":53794},[36,134256,63545],{"class":4500},[36,134258,115],{"class":53},[36,134260,134261],{"class":57},"\"https:\u002F\u002Fexample.com\"",[36,134263,134264],{"class":4500}," target",[36,134266,115],{"class":53},[36,134268,134269],{"class":57},"\"_blank\"",[36,134271,134272],{"class":53},">链接文字\u003C\u002F",[36,134274,2923],{"class":53794},[36,134276,53801],{"class":53},[433,134278,134279],{"start":46},[436,134280,134281],{},"css部分",[26,134283,134284],{"className":129761,"code":134246,"language":129763,"meta":31,"style":31},[33,134285,134286],{"__ignoreMap":31},[36,134287,134288,134290,134292,134294,134296,134298,134300,134302,134304,134306,134308],{"class":38,"line":39},[36,134289,1507],{"class":53},[36,134291,2923],{"class":53794},[36,134293,63545],{"class":4500},[36,134295,115],{"class":53},[36,134297,134261],{"class":57},[36,134299,134264],{"class":4500},[36,134301,115],{"class":53},[36,134303,134269],{"class":57},[36,134305,134272],{"class":53},[36,134307,2923],{"class":53794},[36,134309,53801],{"class":53},[997,134311,134313],{"id":134312},"_1027-收获","10.2.7 收获",[433,134315,134316,134319,134322,134325,134328],{},[436,134317,134318],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[436,134320,134321],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[436,134323,134324],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[436,134326,134327],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[436,134329,134330],{},"遗忘代码",[26,134332,134334],{"className":129014,"code":134333,"language":129016,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,134335,134336,134358,134363,134373],{"__ignoreMap":31},[36,134337,134338,134340,134342,134344,134346,134348,134350,134352,134354,134356],{"class":38,"line":39},[36,134339,54105],{"class":53794},[36,134341,14958],{"class":53},[36,134343,19],{"class":53794},[36,134345,14958],{"class":53},[36,134347,10],{"class":53794},[36,134349,14958],{"class":53},[36,134351,3680],{"class":53794},[36,134353,14958],{"class":53},[36,134355,436],{"class":53794},[36,134357,18091],{"class":53},[36,134359,134360],{"class":38,"line":46},[36,134361,134362],{"class":42},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,134364,134365,134367,134369,134371],{"class":38,"line":82},[36,134366,130630],{"class":49},[36,134368,53931],{"class":53},[36,134370,63357],{"class":49},[36,134372,3833],{"class":53},[36,134374,134375],{"class":38,"line":88},[36,134376,4103],{"class":53},[433,134378,134379],{"start":1517},[436,134380,134381],{},"html引css的程序",[26,134383,134384],{"className":129014,"code":134333,"language":129016,"meta":31,"style":31},[33,134385,134386,134408,134412,134422],{"__ignoreMap":31},[36,134387,134388,134390,134392,134394,134396,134398,134400,134402,134404,134406],{"class":38,"line":39},[36,134389,54105],{"class":53794},[36,134391,14958],{"class":53},[36,134393,19],{"class":53794},[36,134395,14958],{"class":53},[36,134397,10],{"class":53794},[36,134399,14958],{"class":53},[36,134401,3680],{"class":53794},[36,134403,14958],{"class":53},[36,134405,436],{"class":53794},[36,134407,18091],{"class":53},[36,134409,134410],{"class":38,"line":46},[36,134411,134362],{"class":42},[36,134413,134414,134416,134418,134420],{"class":38,"line":82},[36,134415,130630],{"class":49},[36,134417,53931],{"class":53},[36,134419,63357],{"class":49},[36,134421,3833],{"class":53},[36,134423,134424],{"class":38,"line":88},[36,134425,4103],{"class":53},[433,134427,134428,134431,134434,134437,134440],{"start":2421},[436,134429,134430],{},"浮动的盒子不会有外边距合并问题",[436,134432,134433],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[436,134435,134436],{},"ctrl+g快速定位行；shift+alt多个光标",[436,134438,134439],{},"学习上方各个模块的选择器起名方法，以后就这样用",[436,134441,134442],{},"在写选择器时尽量写全一些，例如",[26,134444,134446],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},"\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",[33,134447,134448,134453,134469,134474,134489,134494,134509,134514,134529,134534],{"__ignoreMap":31},[36,134449,134450],{"class":38,"line":39},[36,134451,134452],{"class":42},"\u002F* 静态定位（默认） *\u002F\n",[36,134454,134455,134458,134460,134462,134464,134467],{"class":38,"line":46},[36,134456,134457],{"class":4500},".static",[36,134459,82290],{"class":53},[36,134461,131374],{"class":49},[36,134463,53931],{"class":53},[36,134465,134466],{"class":49},"static",[36,134468,131944],{"class":53},[36,134470,134471],{"class":38,"line":82},[36,134472,134473],{"class":42},"\u002F* 相对定位 *\u002F\n",[36,134475,134476,134479,134481,134483,134485,134487],{"class":38,"line":88},[36,134477,134478],{"class":4500},".relative",[36,134480,82290],{"class":53},[36,134482,131374],{"class":49},[36,134484,53931],{"class":53},[36,134486,57255],{"class":49},[36,134488,131944],{"class":53},[36,134490,134491],{"class":38,"line":195},[36,134492,134493],{"class":42},"\u002F* 绝对定位 *\u002F\n",[36,134495,134496,134499,134501,134503,134505,134507],{"class":38,"line":1517},[36,134497,134498],{"class":4500},".absolute",[36,134500,82290],{"class":53},[36,134502,131374],{"class":49},[36,134504,53931],{"class":53},[36,134506,57322],{"class":49},[36,134508,131944],{"class":53},[36,134510,134511],{"class":38,"line":2421},[36,134512,134513],{"class":42},"\u002F* 固定定位 *\u002F\n",[36,134515,134516,134519,134521,134523,134525,134527],{"class":38,"line":2446},[36,134517,134518],{"class":4500},".fixed",[36,134520,82290],{"class":53},[36,134522,131374],{"class":49},[36,134524,53931],{"class":53},[36,134526,88712],{"class":49},[36,134528,131944],{"class":53},[36,134530,134531],{"class":38,"line":2469},[36,134532,134533],{"class":42},"\u002F* 粘性定位 *\u002F\n",[36,134535,134536,134539,134541,134543,134545,134548],{"class":38,"line":2492},[36,134537,134538],{"class":4500},".sticky",[36,134540,82290],{"class":53},[36,134542,131374],{"class":49},[36,134544,53931],{"class":53},[36,134546,134547],{"class":49},"sticky",[36,134549,131944],{"class":53},[433,134551,134552,134555],{"start":4155},[436,134553,134554],{},"一定要用好注释",[436,134556,134557],{},"浮动的盒子不会有外边距合并的问题",[2602,134559,133902],{},{"title":31,"searchDepth":46,"depth":46,"links":134561},[134562,134563],{"id":133939,"depth":46,"text":133940},{"id":134003,"depth":46,"text":134004,"children":134564},[134565,134566,134567,134568,134569,134570,134571],{"id":134007,"depth":82,"text":134008},{"id":134112,"depth":82,"text":134113},{"id":134148,"depth":82,"text":134149},{"id":134169,"depth":82,"text":134170},{"id":134204,"depth":82,"text":134205},{"id":134237,"depth":82,"text":134238},{"id":134312,"depth":82,"text":134313},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133931,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134578,"title":134579,"body":134580,"description":2630,"extension":2631,"meta":136066,"navigation":545,"path":136067,"seo":136068,"stem":136069,"__hash__":136070},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134581,"toc":136058},[134582,134585,134589,134593,134604,134608,134625,134669,134702,134705,134722,134725,134728,134772,134776,134780,134783,134786,134790,134793,134804,134867,134908,134911,134926,134980,134988,134991,135002,135056,135082,135085,135098,135152,135184,135238,135261,135315,135318,135321,135328,135382,135403,135457,135460,135463,135548,135556,135613,135636,135640,135643,135661,135665,135684,135738,135776,135780,135783,135786,135808,135812,135820,135823,135828,135839,135842,135846,135860,135904,135907,135911,135914,135919,135945,135950,136027,136030,136034,136037,136040,136043,136046,136049,136052,136055],[10,134583,134579],{"id":134584},"_11-传统布局与定位体系",[14,134586,134588],{"id":134587},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[997,134590,134592],{"id":134591},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3680,134594,134595,134598,134601],{},[436,134596,134597],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[436,134599,134600],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[436,134602,134603],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[997,134605,134607],{"id":134606},"_1112-浮动","11.1.2 浮动",[3680,134609,134610,134613,134616,134619,134622],{},[436,134611,134612],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[436,134614,134615],{},"浮动可以改变元素标签默认的排列方式",[436,134617,134618],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[436,134620,134621],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[436,134623,134624],{},"在使用行内块转换时盒子之间是有空隙的",[26,134626,134627],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,134628,134629,134635,134645,134649,134655,134665],{"__ignoreMap":31},[36,134630,134631,134633],{"class":38,"line":39},[36,134632,133487],{"class":4500},[36,134634,18091],{"class":53},[36,134636,134637,134639,134641,134643],{"class":38,"line":46},[36,134638,133494],{"class":49},[36,134640,53931],{"class":53},[36,134642,26253],{"class":49},[36,134644,3833],{"class":53},[36,134646,134647],{"class":38,"line":82},[36,134648,4103],{"class":53},[36,134650,134651,134653],{"class":38,"line":88},[36,134652,133509],{"class":4500},[36,134654,18091],{"class":53},[36,134656,134657,134659,134661,134663],{"class":38,"line":195},[36,134658,133494],{"class":49},[36,134660,53931],{"class":53},[36,134662,75008],{"class":49},[36,134664,3833],{"class":53},[36,134666,134667],{"class":38,"line":1517},[36,134668,4103],{"class":53},[206,134670,134671,134679],{},[209,134672,134673],{},[212,134674,134675,134677],{},[215,134676,129478],{"align":26253},[215,134678,30001],{"align":26253},[225,134680,134681,134688,134695],{},[212,134682,134683,134685],{},[230,134684,57228],{"align":26253},[230,134686,134687],{"align":26253},"元素不浮动（默认值）",[212,134689,134690,134692],{},[230,134691,26253],{"align":26253},[230,134693,134694],{"align":26253},"元素向左浮动",[212,134696,134697,134699],{},[230,134698,75008],{"align":26253},[230,134700,134701],{"align":26253},"元素向右浮动",[19,134703,134704],{},"浮动重点：",[3680,134706,134707,134710,134713,134716,134719],{},[436,134708,134709],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[436,134711,134712],{},"浮动的元素会一行内显示并且元素顶部对齐",[436,134714,134715],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[436,134717,134718],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[436,134720,134721],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134723,134724],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134726,134727],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,134729,134730],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,134731,134732,134738,134748,134752,134758,134768],{"__ignoreMap":31},[36,134733,134734,134736],{"class":38,"line":39},[36,134735,133487],{"class":4500},[36,134737,18091],{"class":53},[36,134739,134740,134742,134744,134746],{"class":38,"line":46},[36,134741,133494],{"class":49},[36,134743,53931],{"class":53},[36,134745,26253],{"class":49},[36,134747,3833],{"class":53},[36,134749,134750],{"class":38,"line":82},[36,134751,4103],{"class":53},[36,134753,134754,134756],{"class":38,"line":88},[36,134755,133509],{"class":4500},[36,134757,18091],{"class":53},[36,134759,134760,134762,134764,134766],{"class":38,"line":195},[36,134761,133494],{"class":49},[36,134763,53931],{"class":53},[36,134765,75008],{"class":49},[36,134767,3833],{"class":53},[36,134769,134770],{"class":38,"line":1517},[36,134771,4103],{"class":53},[997,134773,134775],{"id":134774},"_1113-定位","11.1.3 定位",[24515,134777,134779],{"id":134778},"_11131-使用场景","11.1.3.1 使用场景",[19,134781,134782],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134784,134785],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24515,134787,134789],{"id":134788},"_11132-定位组成","11.1.3.2 定位组成",[19,134791,134792],{},"定位 = 定位模式 + 边偏移",[433,134794,134795],{},[436,134796,134797,134800,134801],{},[2839,134798,134799],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2839,134802,134803],{},"定位模式",[26,134805,134807],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,134808,134809,134815,134829,134846,134863],{"__ignoreMap":31},[36,134810,134811,134813],{"class":38,"line":39},[36,134812,132862],{"class":4500},[36,134814,18091],{"class":53},[36,134816,134817,134820,134822,134824,134826],{"class":38,"line":46},[36,134818,134819],{"class":49},"  position",[36,134821,53931],{"class":53},[36,134823,57255],{"class":49},[36,134825,132877],{"class":53},[36,134827,134828],{"class":42},"\u002F* 定位模式 *\u002F\n",[36,134830,134831,134834,134836,134838,134840,134843],{"class":38,"line":82},[36,134832,134833],{"class":49},"  top",[36,134835,53931],{"class":53},[36,134837,1317],{"class":49},[36,134839,53986],{"class":114},[36,134841,134842],{"class":53},";           ",[36,134844,134845],{"class":42},"\u002F* 边偏移：上 *\u002F\n",[36,134847,134848,134851,134853,134855,134857,134860],{"class":38,"line":88},[36,134849,134850],{"class":49},"  left",[36,134852,53931],{"class":53},[36,134854,3376],{"class":49},[36,134856,53986],{"class":114},[36,134858,134859],{"class":53},";          ",[36,134861,134862],{"class":42},"\u002F* 边偏移：左 *\u002F\n",[36,134864,134865],{"class":38,"line":195},[36,134866,4103],{"class":53},[206,134868,134869,134878],{},[209,134870,134871],{},[212,134872,134873,134875],{},[215,134874,2842],{"align":26253},[215,134876,134877],{"align":26253},"语义",[225,134879,134880,134887,134894,134901],{},[212,134881,134882,134884],{},[230,134883,134466],{"align":26253},[230,134885,134886],{"align":26253},"静态定位",[212,134888,134889,134891],{},[230,134890,57255],{"align":26253},[230,134892,134893],{"align":26253},"相对定位",[212,134895,134896,134898],{},[230,134897,57322],{"align":26253},[230,134899,134900],{"align":26253},"绝对定位",[212,134902,134903,134905],{},[230,134904,88712],{"align":26253},[230,134906,134907],{"align":26253},"固定定位",[19,134909,134910],{},"（1）静态定位：",[3680,134912,134913,134924],{},[436,134914,134915,134916,134919,134920,134923],{},"静态定位是元素的 ",[2839,134917,134918],{},"默认定位方式"," ， ",[2839,134921,134922],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[436,134925,7712],{},[26,134927,134928],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,134929,134930,134936,134948,134962,134976],{"__ignoreMap":31},[36,134931,134932,134934],{"class":38,"line":39},[36,134933,132862],{"class":4500},[36,134935,18091],{"class":53},[36,134937,134938,134940,134942,134944,134946],{"class":38,"line":46},[36,134939,134819],{"class":49},[36,134941,53931],{"class":53},[36,134943,57255],{"class":49},[36,134945,132877],{"class":53},[36,134947,134828],{"class":42},[36,134949,134950,134952,134954,134956,134958,134960],{"class":38,"line":82},[36,134951,134833],{"class":49},[36,134953,53931],{"class":53},[36,134955,1317],{"class":49},[36,134957,53986],{"class":114},[36,134959,134842],{"class":53},[36,134961,134845],{"class":42},[36,134963,134964,134966,134968,134970,134972,134974],{"class":38,"line":88},[36,134965,134850],{"class":49},[36,134967,53931],{"class":53},[36,134969,3376],{"class":49},[36,134971,53986],{"class":114},[36,134973,134859],{"class":53},[36,134975,134862],{"class":42},[36,134977,134978],{"class":38,"line":195},[36,134979,4103],{"class":53},[3680,134981,134982,134985],{},[436,134983,134984],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[436,134986,134987],{},"静态定位在布局时我们几乎不用的",[19,134989,134990],{},"（2）相对定位",[3680,134992,134993,135000],{},[436,134994,134995,134996,134999],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2839,134997,134998],{},"原来的位置"," 来说的（自恋型）",[436,135001,7712],{},[26,135003,135004],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135005,135006,135012,135024,135038,135052],{"__ignoreMap":31},[36,135007,135008,135010],{"class":38,"line":39},[36,135009,132862],{"class":4500},[36,135011,18091],{"class":53},[36,135013,135014,135016,135018,135020,135022],{"class":38,"line":46},[36,135015,134819],{"class":49},[36,135017,53931],{"class":53},[36,135019,57255],{"class":49},[36,135021,132877],{"class":53},[36,135023,134828],{"class":42},[36,135025,135026,135028,135030,135032,135034,135036],{"class":38,"line":82},[36,135027,134833],{"class":49},[36,135029,53931],{"class":53},[36,135031,1317],{"class":49},[36,135033,53986],{"class":114},[36,135035,134842],{"class":53},[36,135037,134845],{"class":42},[36,135039,135040,135042,135044,135046,135048,135050],{"class":38,"line":88},[36,135041,134850],{"class":49},[36,135043,53931],{"class":53},[36,135045,3376],{"class":49},[36,135047,53986],{"class":114},[36,135049,134859],{"class":53},[36,135051,134862],{"class":42},[36,135053,135054],{"class":38,"line":195},[36,135055,4103],{"class":53},[3680,135057,135058],{},[436,135059,135060,135061,135063,135064,135066,135067,135070,135071,135074,135075,135077,135078,135081],{},"相对定位的特点：",[56210,135062],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56210,135065],{},"  ② ",[2839,135068,135069],{},"原来"," 在标准流的 ",[2839,135072,135073],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56210,135076],{},"  ③因此， ",[2839,135079,135080],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135083,135084],{},"（3）绝对定位",[3680,135086,135087,135096],{},[436,135088,135089,135091,135092,135095],{},[2839,135090,134900],{}," 是元素在移动位置的时候，是相对于它 ",[2839,135093,135094],{},"祖先元素"," 来说的（拼爹型）",[436,135097,7712],{},[26,135099,135100],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135101,135102,135108,135120,135134,135148],{"__ignoreMap":31},[36,135103,135104,135106],{"class":38,"line":39},[36,135105,132862],{"class":4500},[36,135107,18091],{"class":53},[36,135109,135110,135112,135114,135116,135118],{"class":38,"line":46},[36,135111,134819],{"class":49},[36,135113,53931],{"class":53},[36,135115,57255],{"class":49},[36,135117,132877],{"class":53},[36,135119,134828],{"class":42},[36,135121,135122,135124,135126,135128,135130,135132],{"class":38,"line":82},[36,135123,134833],{"class":49},[36,135125,53931],{"class":53},[36,135127,1317],{"class":49},[36,135129,53986],{"class":114},[36,135131,134842],{"class":53},[36,135133,134845],{"class":42},[36,135135,135136,135138,135140,135142,135144,135146],{"class":38,"line":88},[36,135137,134850],{"class":49},[36,135139,53931],{"class":53},[36,135141,3376],{"class":49},[36,135143,53986],{"class":114},[36,135145,134859],{"class":53},[36,135147,134862],{"class":42},[36,135149,135150],{"class":38,"line":195},[36,135151,4103],{"class":53},[3680,135153,135154,135169,135178,135181],{},[436,135155,135156,135157,135159,135160,135162,135163,135165,135166,135168],{},"绝对定位的特点：",[56210,135158],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56210,135161],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56210,135164],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56210,135167],{},"  (4)固定定位",[436,135170,135171,135173,135174,135177],{},[2839,135172,134907],{}," 是元素 ",[2839,135175,135176],{},"固定于浏览器可视区的位置"," 。（认死理型）",[436,135179,135180],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[436,135182,135183],{},"语法:",[26,135185,135186],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135187,135188,135194,135206,135220,135234],{"__ignoreMap":31},[36,135189,135190,135192],{"class":38,"line":39},[36,135191,132862],{"class":4500},[36,135193,18091],{"class":53},[36,135195,135196,135198,135200,135202,135204],{"class":38,"line":46},[36,135197,134819],{"class":49},[36,135199,53931],{"class":53},[36,135201,57255],{"class":49},[36,135203,132877],{"class":53},[36,135205,134828],{"class":42},[36,135207,135208,135210,135212,135214,135216,135218],{"class":38,"line":82},[36,135209,134833],{"class":49},[36,135211,53931],{"class":53},[36,135213,1317],{"class":49},[36,135215,53986],{"class":114},[36,135217,134842],{"class":53},[36,135219,134845],{"class":42},[36,135221,135222,135224,135226,135228,135230,135232],{"class":38,"line":88},[36,135223,134850],{"class":49},[36,135225,53931],{"class":53},[36,135227,3376],{"class":49},[36,135229,53986],{"class":114},[36,135231,134859],{"class":53},[36,135233,134862],{"class":42},[36,135235,135236],{"class":38,"line":195},[36,135237,4103],{"class":53},[3680,135239,135240,135249],{},[436,135241,135242,135243,135245,135246,135248],{},"特点:",[56210,135244],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56210,135247],{},"  ②固定定位不再占有原先的位置,完全脱标",[436,135250,135251,135252,135254,135255,135257,135258,135260],{},"固定在版心位置的方法:",[56210,135253],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56210,135256],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56210,135259],{},"  实例：",[26,135262,135263],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135264,135265,135271,135283,135297,135311],{"__ignoreMap":31},[36,135266,135267,135269],{"class":38,"line":39},[36,135268,132862],{"class":4500},[36,135270,18091],{"class":53},[36,135272,135273,135275,135277,135279,135281],{"class":38,"line":46},[36,135274,134819],{"class":49},[36,135276,53931],{"class":53},[36,135278,57255],{"class":49},[36,135280,132877],{"class":53},[36,135282,134828],{"class":42},[36,135284,135285,135287,135289,135291,135293,135295],{"class":38,"line":82},[36,135286,134833],{"class":49},[36,135288,53931],{"class":53},[36,135290,1317],{"class":49},[36,135292,53986],{"class":114},[36,135294,134842],{"class":53},[36,135296,134845],{"class":42},[36,135298,135299,135301,135303,135305,135307,135309],{"class":38,"line":88},[36,135300,134850],{"class":49},[36,135302,53931],{"class":53},[36,135304,3376],{"class":49},[36,135306,53986],{"class":114},[36,135308,134859],{"class":53},[36,135310,134862],{"class":42},[36,135312,135313],{"class":38,"line":195},[36,135314,4103],{"class":53},[4000,135316],{"style":128870,"src":135317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135319,135320],{},"(5)粘性定位",[3680,135322,135323,135326],{},[436,135324,135325],{},"粘性定位可以被认为是相对定位和固定定位的混合",[436,135327,7712],{},[26,135329,135330],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135331,135332,135338,135350,135364,135378],{"__ignoreMap":31},[36,135333,135334,135336],{"class":38,"line":39},[36,135335,132862],{"class":4500},[36,135337,18091],{"class":53},[36,135339,135340,135342,135344,135346,135348],{"class":38,"line":46},[36,135341,134819],{"class":49},[36,135343,53931],{"class":53},[36,135345,57255],{"class":49},[36,135347,132877],{"class":53},[36,135349,134828],{"class":42},[36,135351,135352,135354,135356,135358,135360,135362],{"class":38,"line":82},[36,135353,134833],{"class":49},[36,135355,53931],{"class":53},[36,135357,1317],{"class":49},[36,135359,53986],{"class":114},[36,135361,134842],{"class":53},[36,135363,134845],{"class":42},[36,135365,135366,135368,135370,135372,135374,135376],{"class":38,"line":88},[36,135367,134850],{"class":49},[36,135369,53931],{"class":53},[36,135371,3376],{"class":49},[36,135373,53986],{"class":114},[36,135375,134859],{"class":53},[36,135377,134862],{"class":42},[36,135379,135380],{"class":38,"line":195},[36,135381,4103],{"class":53},[3680,135383,135384],{},[436,135385,135386,135387,135389,135390,135392,135393,135395,135396,135399,135400,135402],{},"粘性定位的特点：",[56210,135388],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56210,135391],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56210,135394],{},"  ③必须添加 top 、left、right、bottom ",[2839,135397,135398],{},"其中一个"," 才有效",[56210,135401],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,135404,135405],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135406,135407,135413,135425,135439,135453],{"__ignoreMap":31},[36,135408,135409,135411],{"class":38,"line":39},[36,135410,132862],{"class":4500},[36,135412,18091],{"class":53},[36,135414,135415,135417,135419,135421,135423],{"class":38,"line":46},[36,135416,134819],{"class":49},[36,135418,53931],{"class":53},[36,135420,57255],{"class":49},[36,135422,132877],{"class":53},[36,135424,134828],{"class":42},[36,135426,135427,135429,135431,135433,135435,135437],{"class":38,"line":82},[36,135428,134833],{"class":49},[36,135430,53931],{"class":53},[36,135432,1317],{"class":49},[36,135434,53986],{"class":114},[36,135436,134842],{"class":53},[36,135438,134845],{"class":42},[36,135440,135441,135443,135445,135447,135449,135451],{"class":38,"line":88},[36,135442,134850],{"class":49},[36,135444,53931],{"class":53},[36,135446,3376],{"class":49},[36,135448,53986],{"class":114},[36,135450,134859],{"class":53},[36,135452,134862],{"class":42},[36,135454,135455],{"class":38,"line":195},[36,135456,4103],{"class":53},[4000,135458],{"style":128870,"src":135459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135461,135462],{},"(6)总结",[206,135464,135465,135480],{},[209,135466,135467],{},[212,135468,135469,135471,135474,135477],{},[215,135470,134803],{"align":26253},[215,135472,135473],{"align":26253},"是否脱标",[215,135475,135476],{"align":26253},"移动位置",[215,135478,135479],{"align":26253},"是否常用",[225,135481,135482,135495,135509,135523,135536],{},[212,135483,135484,135487,135489,135492],{},[230,135485,135486],{"align":26253},"Static 静态定位",[230,135488,107149],{"align":26253},[230,135490,135491],{"align":26253},"不能使用边偏移",[230,135493,135494],{"align":26253},"很少",[212,135496,135497,135500,135503,135506],{},[230,135498,135499],{"align":26253},"Relative 相对定位",[230,135501,135502],{"align":26253},"否(占有位置)",[230,135504,135505],{"align":26253},"相对于自身位置移动",[230,135507,135508],{"align":26253},"基本单独使用",[212,135510,135511,135514,135517,135520],{},[230,135512,135513],{"align":26253},"Absolute 绝对定位",[230,135515,135516],{"align":26253},"是(不占有位置)",[230,135518,135519],{"align":26253},"带有定位的父级",[230,135521,135522],{"align":26253},"要和定位父级元素搭配使用",[212,135524,135525,135528,135530,135533],{},[230,135526,135527],{"align":26253},"Fixed 固定定位",[230,135529,135516],{"align":26253},[230,135531,135532],{"align":26253},"浏览器可视区",[230,135534,135535],{"align":26253},"单独使用,不需要父级",[212,135537,135538,135541,135543,135545],{},[230,135539,135540],{"align":26253},"Sticky 粘性定位",[230,135542,135502],{"align":26253},[230,135544,135532],{"align":26253},[230,135546,135547],{"align":26253},"当前阶段少",[433,135549,135550],{"start":46},[436,135551,135552,135555],{},[2839,135553,135554],{},"边偏移"," 则决定了该元素的最终位置",[206,135557,135558,135569],{},[209,135559,135560],{},[212,135561,135562,135565,135567],{},[215,135563,135564],{"align":26253},"边偏移属性",[215,135566,220],{"align":26253},[215,135568,30001],{"align":26253},[225,135570,135571,135582,135593,135603],{},[212,135572,135573,135576,135579],{},[230,135574,135575],{"align":26253},"top",[230,135577,135578],{"align":26253},"top: 80px;",[230,135580,135581],{"align":26253},"顶端偏移量，定义元素相对于父元素上边线的距离",[212,135583,135584,135587,135590],{},[230,135585,135586],{"align":26253},"bottom",[230,135588,135589],{"align":26253},"bottom: 80px ;",[230,135591,135592],{"align":26253},"底部偏移量，定义元素相对于其父元素下边线的距离",[212,135594,135595,135597,135600],{},[230,135596,26253],{"align":26253},[230,135598,135599],{"align":26253},"left: 80px ;",[230,135601,135602],{"align":26253},"左侧偏移量，定义元素相对于其父元素左边线的距离",[212,135604,135605,135607,135610],{},[230,135606,75008],{"align":26253},[230,135608,135609],{"align":26253},"right: 80px ;",[230,135611,135612],{"align":26253},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3680,135614,135615],{},[436,135616,695,135617,135619,135620,135622,135623,135625,135626,135629,135630,135632,135633,135635],{},[56210,135618],{},"  ① ",[2839,135621,135554],{}," 需要和 ",[2839,135624,134803],{}," 联合使用， ",[2839,135627,135628],{},"单独使用无效"," ；",[56210,135631],{},"  ②top和bottom不要同时使用",[56210,135634],{},"  ③left和right不要同时使用",[24515,135637,135639],{"id":135638},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135641,135642],{},"子级是绝对定位的话，父级要用相对定位",[3680,135644,135645,135648,135651,135654],{},[436,135646,135647],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[436,135649,135650],{},"父盒子需要加定位限制子盒子在父盒子内显示",[436,135652,135653],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[436,135655,135656,135657,135660],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2839,135658,135659],{},"子绝父绝"," 也会遇到",[24515,135662,135664],{"id":135663},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3680,135666,135667,135682],{},[436,135668,135669,135670,135673,135674,135677,135678,135681],{},"在使用 ",[2839,135671,135672],{},"定位"," 布局时，可能会 ",[2839,135675,135676],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2839,135679,135680],{},"z-index"," 来控制盒子的前后次序 (z轴)",[436,135683,7712],{},[26,135685,135686],{"className":129014,"code":134806,"language":129016,"meta":31,"style":31},[33,135687,135688,135694,135706,135720,135734],{"__ignoreMap":31},[36,135689,135690,135692],{"class":38,"line":39},[36,135691,132862],{"class":4500},[36,135693,18091],{"class":53},[36,135695,135696,135698,135700,135702,135704],{"class":38,"line":46},[36,135697,134819],{"class":49},[36,135699,53931],{"class":53},[36,135701,57255],{"class":49},[36,135703,132877],{"class":53},[36,135705,134828],{"class":42},[36,135707,135708,135710,135712,135714,135716,135718],{"class":38,"line":82},[36,135709,134833],{"class":49},[36,135711,53931],{"class":53},[36,135713,1317],{"class":49},[36,135715,53986],{"class":114},[36,135717,134842],{"class":53},[36,135719,134845],{"class":42},[36,135721,135722,135724,135726,135728,135730,135732],{"class":38,"line":88},[36,135723,134850],{"class":49},[36,135725,53931],{"class":53},[36,135727,3376],{"class":49},[36,135729,53986],{"class":114},[36,135731,134859],{"class":53},[36,135733,134862],{"class":42},[36,135735,135736],{"class":38,"line":195},[36,135737,4103],{"class":53},[3680,135739,135740],{},[436,135741,135742,135743,135619,135745,135747,135748,130177,135751,85020,135754,135756,135757,135759,135760,135763,135764,135629,135767,135769,135770,135773,135775],{},"z-index的特性",[56210,135744],{},[2839,135746,129478],{}," ： ",[2839,135749,135750],{},"正整数",[2839,135752,135753],{},"负整数",[2839,135755,713],{}," ，默认值是 0，数值越大，盒子越靠上；",[56210,135758],{},"  ②如果 ",[2839,135761,135762],{},"属性值相同"," ，则按照书写顺序， ",[2839,135765,135766],{},"后来居上",[56210,135768],{},"  ③数字后面 ",[2839,135771,135772],{},"不能加单位",[56210,135774],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24515,135777,135779],{"id":135778},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135781,135782],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135784,135785],{},"方法:",[3680,135787,135788,135798],{},[436,135789,135790,135791,135794,135795],{},"left: 50%; 让 ",[2839,135792,135793],{},"盒子的左侧"," 移动到 ",[2839,135796,135797],{},"父级元素的水平中心位置",[436,135799,135800,135801,135804,135805],{},"margin-left: -100px; 让盒子 ",[2839,135802,135803],{},"向左"," 移动 ",[2839,135806,135807],{},"自身宽度的一半",[24515,135809,135811],{"id":135810},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[433,135813,135814,135817],{},[436,135815,135816],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[436,135818,135819],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135821,135822],{},"也就是说绝对定位和固定定位和浮动类似",[433,135824,135825],{"start":82},[436,135826,135827],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3680,135829,135830,135833,135836],{},[436,135831,135832],{},"可以用inline-block 转换为行内块",[436,135834,135835],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[436,135837,135838],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135840,135841],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24515,135843,135845],{"id":135844},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[433,135847,135848,135851,135854,135857],{},[436,135849,135850],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[436,135852,135853],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[436,135855,135856],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[436,135858,135859],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,135861,135862],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,135863,135864,135870,135880,135884,135890,135900],{"__ignoreMap":31},[36,135865,135866,135868],{"class":38,"line":39},[36,135867,133487],{"class":4500},[36,135869,18091],{"class":53},[36,135871,135872,135874,135876,135878],{"class":38,"line":46},[36,135873,133494],{"class":49},[36,135875,53931],{"class":53},[36,135877,26253],{"class":49},[36,135879,3833],{"class":53},[36,135881,135882],{"class":38,"line":82},[36,135883,4103],{"class":53},[36,135885,135886,135888],{"class":38,"line":88},[36,135887,133509],{"class":4500},[36,135889,18091],{"class":53},[36,135891,135892,135894,135896,135898],{"class":38,"line":195},[36,135893,133494],{"class":49},[36,135895,53931],{"class":53},[36,135897,75008],{"class":49},[36,135899,3833],{"class":53},[36,135901,135902],{"class":38,"line":1517},[36,135903,4103],{"class":53},[4000,135905],{"style":128870,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24515,135908,135910],{"id":135909},"_11138-轮播图","11.1.3.8 轮播图",[4000,135912],{"style":128870,"src":135913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[433,135915,135916],{},[436,135917,135918],{},"制作顺序:",[3680,135920,135921,135924,135927,135936],{},[436,135922,135923],{},"大盒子我们类名为： tb-promo 淘宝广告",[436,135925,135926],{},"里面先放一张图片",[436,135928,135929,135930,135932,135933,135935],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56210,135931],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56210,135934],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[436,135937,135938,135939,135941,135942,135944],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56210,135940],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56210,135943],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[433,135946,135947],{"start":46},[436,135948,135949],{},"代码模块",[26,135951,135953],{"className":129014,"code":135952,"language":129016,"meta":31,"style":31},"\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",[33,135954,135955,135960,135967,135977,135987,135997,136001,136006,136013,136023],{"__ignoreMap":31},[36,135956,135957],{"class":38,"line":39},[36,135958,135959],{"class":42},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,135961,135962,135965],{"class":38,"line":46},[36,135963,135964],{"class":4500},".son",[36,135966,18091],{"class":53},[36,135968,135969,135971,135973,135975],{"class":38,"line":82},[36,135970,134819],{"class":49},[36,135972,53931],{"class":53},[36,135974,57322],{"class":49},[36,135976,3833],{"class":53},[36,135978,135979,135981,135983,135985],{"class":38,"line":88},[36,135980,134833],{"class":49},[36,135982,53931],{"class":53},[36,135984,713],{"class":49},[36,135986,3833],{"class":53},[36,135988,135989,135991,135993,135995],{"class":38,"line":195},[36,135990,134850],{"class":49},[36,135992,53931],{"class":53},[36,135994,713],{"class":49},[36,135996,3833],{"class":53},[36,135998,135999],{"class":38,"line":1517},[36,136000,4103],{"class":53},[36,136002,136003],{"class":38,"line":2421},[36,136004,136005],{"class":42},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,136007,136008,136011],{"class":38,"line":2446},[36,136009,136010],{"class":4500},".father",[36,136012,18091],{"class":53},[36,136014,136015,136017,136019,136021],{"class":38,"line":2469},[36,136016,134819],{"class":49},[36,136018,53931],{"class":53},[36,136020,57255],{"class":49},[36,136022,3833],{"class":53},[36,136024,136025],{"class":38,"line":2492},[36,136026,4103],{"class":53},[19,136028,136029],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[997,136031,136033],{"id":136032},"_1114-定位数值的移动","11.1.4 定位数值的移动",[4000,136035],{"style":128870,"src":136036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136038,136039],{},"✨ 黄金口诀：",[19,136041,136042],{},"\"TOP正下负上，LEFT正右负左\"",[19,136044,136045],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136047,136048],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136050,136051],{},"✨ 简单记：",[19,136053,136054],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2602,136056,136057],{},"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":31,"searchDepth":46,"depth":46,"links":136059},[136060],{"id":134587,"depth":46,"text":134588,"children":136061},[136062,136063,136064,136065],{"id":134591,"depth":82,"text":134592},{"id":134606,"depth":82,"text":134607},{"id":134774,"depth":82,"text":134775},{"id":136032,"depth":82,"text":136033},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134579,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136072,"title":136073,"body":136074,"description":2630,"extension":2631,"meta":137497,"navigation":545,"path":137498,"seo":137499,"stem":137500,"__hash__":137501},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136075,"toc":137476},[136076,136079,136083,136091,136095,136100,136108,136120,136124,136129,136137,136148,136152,136157,136198,136206,136210,136213,136216,136219,136313,136316,136410,136413,136507,136510,136513,136548,136551,136554,136584,136587,136590,136593,136596,136599,136602,136605,136675,136678,136682,136686,136727,136731,136737,136740,136743,136747,136750,136753,136756,136837,136840,136843,136847,136851,136854,136857,136860,136863,136866,136872,136881,136885,136904,136908,136918,136921,136924,136927,136930,136933,136936,136939,136942,136951,136955,136964,136967,136972,137025,137030,137196,137199,137202,137207,137210,137213,137216,137219,137224,137372,137375,137378,137383,137386,137391,137425,137428,137431,137435,137438,137445,137448,137451,137454,137457,137460,137463,137466,137470,137473],[10,136077,136073],{"id":136078},"_12-显示隐藏与图形资源",[14,136080,136082],{"id":136081},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3680,136084,136085,136088],{},[436,136086,136087],{},"目的:让一个元素在页面中消失或者显示出来",[436,136089,136090],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[997,136092,136094],{"id":136093},"_1211-display-显示","12.1.1 display 显示",[433,136096,136097],{},[436,136098,136099],{},"display 设置或检索对象是否及如何显示",[3680,136101,136102,136105],{},[436,136103,136104],{},"display: none;隐藏对象",[436,136106,136107],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[433,136109,136110,136117],{"start":46},[436,136111,136112,136113,136116],{},"特点： display 隐藏元素后， ",[2839,136114,136115],{},"不再占"," 有原来的位置",[436,136118,136119],{},"在js中使用非常的广泛",[997,136121,136123],{"id":136122},"_1212-visibility可见性","12.1.2 visibility可见性",[433,136125,136126],{},[436,136127,136128],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3680,136130,136131,136134],{},[436,136132,136133],{},"visibility： visible；元素可见",[436,136135,136136],{},"visibility：hidden；元素隐藏",[433,136138,136139,136142,136145],{"start":46},[436,136140,136141],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[436,136143,136144],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[436,136146,136147],{},"隐藏后继续占有原有位置",[997,136149,136151],{"id":136150},"_1213-overflow溢出","12.1.3 overflow溢出",[3680,136153,136154],{},[436,136155,136156],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[206,136158,136159,136167],{},[209,136160,136161],{},[212,136162,136163,136165],{},[215,136164,129478],{"align":26253},[215,136166,30001],{"align":26253},[225,136168,136169,136177,136184,136191],{},[212,136170,136171,136174],{},[230,136172,136173],{"align":26253},"visible",[230,136175,136176],{"align":26253},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[212,136178,136179,136181],{},[230,136180,64202],{"align":26253},[230,136182,136183],{"align":26253},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[212,136185,136186,136188],{},[230,136187,131434],{"align":26253},[230,136189,136190],{"align":26253},"不管超出内容否，总是显示滚动条",[212,136192,136193,136195],{},[230,136194,75149],{"align":26253},[230,136196,136197],{"align":26253},"超出自动显示滚动条，不超出不显示滚动条",[3680,136199,136200,136203],{},[436,136201,136202],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[436,136204,136205],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[997,136207,136209],{"id":136208},"_1214-案例收获","12.1.4 案例收获",[4000,136211],{"style":128870,"src":136212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136214,136215],{},"问题：没做出来动态效果，使用hover没实现",[19,136217,136218],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,136220,136221],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,136222,136223,136227,136241,136245,136259,136263,136277,136281,136295,136299],{"__ignoreMap":31},[36,136224,136225],{"class":38,"line":39},[36,136226,134452],{"class":42},[36,136228,136229,136231,136233,136235,136237,136239],{"class":38,"line":46},[36,136230,134457],{"class":4500},[36,136232,82290],{"class":53},[36,136234,131374],{"class":49},[36,136236,53931],{"class":53},[36,136238,134466],{"class":49},[36,136240,131944],{"class":53},[36,136242,136243],{"class":38,"line":82},[36,136244,134473],{"class":42},[36,136246,136247,136249,136251,136253,136255,136257],{"class":38,"line":88},[36,136248,134478],{"class":4500},[36,136250,82290],{"class":53},[36,136252,131374],{"class":49},[36,136254,53931],{"class":53},[36,136256,57255],{"class":49},[36,136258,131944],{"class":53},[36,136260,136261],{"class":38,"line":195},[36,136262,134493],{"class":42},[36,136264,136265,136267,136269,136271,136273,136275],{"class":38,"line":1517},[36,136266,134498],{"class":4500},[36,136268,82290],{"class":53},[36,136270,131374],{"class":49},[36,136272,53931],{"class":53},[36,136274,57322],{"class":49},[36,136276,131944],{"class":53},[36,136278,136279],{"class":38,"line":2421},[36,136280,134513],{"class":42},[36,136282,136283,136285,136287,136289,136291,136293],{"class":38,"line":2446},[36,136284,134518],{"class":4500},[36,136286,82290],{"class":53},[36,136288,131374],{"class":49},[36,136290,53931],{"class":53},[36,136292,88712],{"class":49},[36,136294,131944],{"class":53},[36,136296,136297],{"class":38,"line":2469},[36,136298,134533],{"class":42},[36,136300,136301,136303,136305,136307,136309,136311],{"class":38,"line":2492},[36,136302,134538],{"class":4500},[36,136304,82290],{"class":53},[36,136306,131374],{"class":49},[36,136308,53931],{"class":53},[36,136310,134547],{"class":49},[36,136312,131944],{"class":53},[19,136314,136315],{},"完整代码：",[26,136317,136318],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,136319,136320,136324,136338,136342,136356,136360,136374,136378,136392,136396],{"__ignoreMap":31},[36,136321,136322],{"class":38,"line":39},[36,136323,134452],{"class":42},[36,136325,136326,136328,136330,136332,136334,136336],{"class":38,"line":46},[36,136327,134457],{"class":4500},[36,136329,82290],{"class":53},[36,136331,131374],{"class":49},[36,136333,53931],{"class":53},[36,136335,134466],{"class":49},[36,136337,131944],{"class":53},[36,136339,136340],{"class":38,"line":82},[36,136341,134473],{"class":42},[36,136343,136344,136346,136348,136350,136352,136354],{"class":38,"line":88},[36,136345,134478],{"class":4500},[36,136347,82290],{"class":53},[36,136349,131374],{"class":49},[36,136351,53931],{"class":53},[36,136353,57255],{"class":49},[36,136355,131944],{"class":53},[36,136357,136358],{"class":38,"line":195},[36,136359,134493],{"class":42},[36,136361,136362,136364,136366,136368,136370,136372],{"class":38,"line":1517},[36,136363,134498],{"class":4500},[36,136365,82290],{"class":53},[36,136367,131374],{"class":49},[36,136369,53931],{"class":53},[36,136371,57322],{"class":49},[36,136373,131944],{"class":53},[36,136375,136376],{"class":38,"line":2421},[36,136377,134513],{"class":42},[36,136379,136380,136382,136384,136386,136388,136390],{"class":38,"line":2446},[36,136381,134518],{"class":4500},[36,136383,82290],{"class":53},[36,136385,131374],{"class":49},[36,136387,53931],{"class":53},[36,136389,88712],{"class":49},[36,136391,131944],{"class":53},[36,136393,136394],{"class":38,"line":2469},[36,136395,134533],{"class":42},[36,136397,136398,136400,136402,136404,136406,136408],{"class":38,"line":2492},[36,136399,134538],{"class":4500},[36,136401,82290],{"class":53},[36,136403,131374],{"class":49},[36,136405,53931],{"class":53},[36,136407,134547],{"class":49},[36,136409,131944],{"class":53},[19,136411,136412],{},"分布思路重点详解：",[26,136414,136415],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,136416,136417,136421,136435,136439,136453,136457,136471,136475,136489,136493],{"__ignoreMap":31},[36,136418,136419],{"class":38,"line":39},[36,136420,134452],{"class":42},[36,136422,136423,136425,136427,136429,136431,136433],{"class":38,"line":46},[36,136424,134457],{"class":4500},[36,136426,82290],{"class":53},[36,136428,131374],{"class":49},[36,136430,53931],{"class":53},[36,136432,134466],{"class":49},[36,136434,131944],{"class":53},[36,136436,136437],{"class":38,"line":82},[36,136438,134473],{"class":42},[36,136440,136441,136443,136445,136447,136449,136451],{"class":38,"line":88},[36,136442,134478],{"class":4500},[36,136444,82290],{"class":53},[36,136446,131374],{"class":49},[36,136448,53931],{"class":53},[36,136450,57255],{"class":49},[36,136452,131944],{"class":53},[36,136454,136455],{"class":38,"line":195},[36,136456,134493],{"class":42},[36,136458,136459,136461,136463,136465,136467,136469],{"class":38,"line":1517},[36,136460,134498],{"class":4500},[36,136462,82290],{"class":53},[36,136464,131374],{"class":49},[36,136466,53931],{"class":53},[36,136468,57322],{"class":49},[36,136470,131944],{"class":53},[36,136472,136473],{"class":38,"line":2421},[36,136474,134513],{"class":42},[36,136476,136477,136479,136481,136483,136485,136487],{"class":38,"line":2446},[36,136478,134518],{"class":4500},[36,136480,82290],{"class":53},[36,136482,131374],{"class":49},[36,136484,53931],{"class":53},[36,136486,88712],{"class":49},[36,136488,131944],{"class":53},[36,136490,136491],{"class":38,"line":2469},[36,136492,134533],{"class":42},[36,136494,136495,136497,136499,136501,136503,136505],{"class":38,"line":2492},[36,136496,134538],{"class":4500},[36,136498,82290],{"class":53},[36,136500,131374],{"class":49},[36,136502,53931],{"class":53},[36,136504,134547],{"class":49},[36,136506,131944],{"class":53},[4000,136508],{"style":128870,"src":136509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136511,136512],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,136514,136516],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,136517,136518],{"__ignoreMap":31},[36,136519,136520,136522,136524,136526,136528,136531,136533,136535,136538,136541,136543,136546],{"class":38,"line":39},[36,136521,1507],{"class":53},[36,136523,4000],{"class":53794},[36,136525,57730],{"class":4500},[36,136527,115],{"class":53},[36,136529,136530],{"class":57},"\"images\u002Fpic.jpg\"",[36,136532,57738],{"class":4500},[36,136534,115],{"class":53},[36,136536,136537],{"class":57},"\"描述文字\"",[36,136539,136540],{"class":4500}," title",[36,136542,115],{"class":53},[36,136544,136545],{"class":57},"\"悬停提示\"",[36,136547,53801],{"class":53},[4000,136549],{"style":128870,"src":136550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136552,136553],{},"制造遮罩层",[26,136555,136556],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,136557,136558],{"__ignoreMap":31},[36,136559,136560,136562,136564,136566,136568,136570,136572,136574,136576,136578,136580,136582],{"class":38,"line":39},[36,136561,1507],{"class":53},[36,136563,4000],{"class":53794},[36,136565,57730],{"class":4500},[36,136567,115],{"class":53},[36,136569,136530],{"class":57},[36,136571,57738],{"class":4500},[36,136573,115],{"class":53},[36,136575,136537],{"class":57},[36,136577,136540],{"class":4500},[36,136579,115],{"class":53},[36,136581,136545],{"class":57},[36,136583,53801],{"class":53},[19,136585,136586],{},"此时是这样的为标准流",[4000,136588],{"style":128870,"src":136589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136591,136592],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136594,136595],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136597,136598],{},"让他在中间，用center(background-position)",[19,136600,136601],{},"将需要变的尽可能放到一个盒子中",[19,136603,136604],{},"放大盒子上内部盒子发生变化",[26,136606,136608],{"className":129014,"code":136607,"language":129016,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,136609,136610,136616,136626,136630,136637,136647,136659,136671],{"__ignoreMap":31},[36,136611,136612,136614],{"class":38,"line":39},[36,136613,130081],{"class":4500},[36,136615,18091],{"class":53},[36,136617,136618,136620,136622,136624],{"class":38,"line":46},[36,136619,134819],{"class":49},[36,136621,53931],{"class":53},[36,136623,57255],{"class":49},[36,136625,3833],{"class":53},[36,136627,136628],{"class":38,"line":82},[36,136629,4103],{"class":53},[36,136631,136632,136635],{"class":38,"line":88},[36,136633,136634],{"class":4500},".child",[36,136636,18091],{"class":53},[36,136638,136639,136641,136643,136645],{"class":38,"line":195},[36,136640,134819],{"class":49},[36,136642,53931],{"class":53},[36,136644,57322],{"class":49},[36,136646,3833],{"class":53},[36,136648,136649,136651,136653,136655,136657],{"class":38,"line":1517},[36,136650,134833],{"class":49},[36,136652,53931],{"class":53},[36,136654,3332],{"class":49},[36,136656,1095],{"class":114},[36,136658,3833],{"class":53},[36,136660,136661,136663,136665,136667,136669],{"class":38,"line":2421},[36,136662,134850],{"class":49},[36,136664,53931],{"class":53},[36,136666,3332],{"class":49},[36,136668,1095],{"class":114},[36,136670,3833],{"class":53},[36,136672,136673],{"class":38,"line":2446},[36,136674,4103],{"class":53},[19,136676,136677],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136679,136681],{"id":136680},"_122-精灵图","12.2 精灵图",[997,136683,136685],{"id":136684},"_1221-理解","12.2.1 理解",[433,136687,136688,136706],{},[436,136689,136690,136691,134919,136694,136697,136698,136701,136702,136705],{},"目的： ",[2839,136692,136693],{},"为了有效地减少服务器接收和发送请求的次数",[2839,136695,136696],{},"提高"," 页面的 ",[2839,136699,136700],{},"加载速度"," ，出现了 ",[2839,136703,136704],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[436,136707,136708,136709,136711,136712,136714,136715,136717,136718,136720,136721,136723,136724,136726],{},"使用精灵图核心：",[56210,136710],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56210,136713],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56210,136716],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56210,136719],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56210,136722],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56210,136725],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[997,136728,136730],{"id":136729},"_1222-扒图","12.2.2 扒图",[26,136732,136735],{"className":136733,"code":136734,"language":690},[688],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,136736,136734],{"__ignoreMap":31},[4000,136738],{"style":128870,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[4000,136741],{"style":128870,"src":136742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[997,136744,136746],{"id":136745},"_1223-精灵图的实现","12.2.3 精灵图的实现",[4000,136748],{"style":128870,"src":136749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136751,136752],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[4000,136754],{"style":128870,"src":136755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,136757,136759],{"className":129014,"code":136758,"language":129016,"meta":31,"style":31},"\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",[33,136760,136761,136766,136773,136785,136797,136816,136833],{"__ignoreMap":31},[36,136762,136763],{"class":38,"line":39},[36,136764,136765],{"class":42},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,136767,136768,136771],{"class":38,"line":46},[36,136769,136770],{"class":4500},".icon",[36,136772,18091],{"class":53},[36,136774,136775,136777,136779,136781,136783],{"class":38,"line":82},[36,136776,73054],{"class":49},[36,136778,53931],{"class":53},[36,136780,3376],{"class":49},[36,136782,53986],{"class":114},[36,136784,3833],{"class":53},[36,136786,136787,136789,136791,136793,136795],{"class":38,"line":88},[36,136788,73274],{"class":49},[36,136790,53931],{"class":53},[36,136792,3376],{"class":49},[36,136794,53986],{"class":114},[36,136796,3833],{"class":53},[36,136798,136799,136801,136803,136805,136807,136810,136812,136814],{"class":38,"line":195},[36,136800,73097],{"class":49},[36,136802,53931],{"class":53},[36,136804,64214],{"class":49},[36,136806,54],{"class":53},[36,136808,136809],{"class":1997},"sprites.png",[36,136811,16236],{"class":53},[36,136813,64224],{"class":49},[36,136815,3833],{"class":53},[36,136817,136818,136820,136822,136824,136826,136829,136831],{"class":38,"line":1517},[36,136819,131274],{"class":49},[36,136821,53931],{"class":53},[36,136823,54257],{"class":49},[36,136825,53986],{"class":114},[36,136827,136828],{"class":49}," -20",[36,136830,53986],{"class":114},[36,136832,3833],{"class":53},[36,136834,136835],{"class":38,"line":2421},[36,136836,4103],{"class":53},[4000,136838],{"style":128870,"src":136839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136841,136842],{},"在前端中坐标轴的正方向是右和下",[14,136844,136846],{"id":136845},"_123-字体图标","12.3 字体图标",[997,136848,136850],{"id":136849},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136852,136853],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136855,136856],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136858,136859],{},"1.图片文件还是比较大的。",[19,136861,136862],{},"2.图片本身放大和缩小会失真。",[19,136864,136865],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136867,136868,136869,28254],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2839,136870,136871],{},"字体图标 iconfont",[19,136873,136874,136877,136878,1296],{},[2839,136875,136876],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2839,136879,136880],{},"展示的是图标，本质属于字体",[997,136882,136884],{"id":136883},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3680,136886,136887,136892,136895,136898,136901],{},[436,136888,136889,136891],{},[2839,136890,28389],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[436,136893,136894],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[436,136896,136897],{},"兼容性：几乎支持所有的浏览器，请放心使用",[436,136899,136900],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[436,136902,136903],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[997,136905,136907],{"id":136906},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3680,136909,136910],{},[436,136911,136912,136913],{},"icomoon字体库：",[2923,136914,136917],{"href":136915,"rel":136916},"http:\u002F\u002Ficomoon.io\u002F",[26381],"http:\u002F\u002Ficomoon.io",[19,136919,136920],{},"进去之后点icomoon app",[4000,136922],{"style":128870,"src":136923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136925,136926],{},"可以对其编辑：",[4000,136928],{"style":128870,"src":136929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136931,136932],{},"生成字体：",[4000,136934],{"style":128870,"src":136935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136937,136938],{},"下载：",[4000,136940],{"style":128870,"src":136941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3680,136943,136944],{},[436,136945,136946,136947],{},"阿里iconfont字体库： ",[2923,136948,136949],{"href":136949,"rel":136950},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26381],[997,136952,136954],{"id":136953},"_1234-字体图标的引入","12.3.4 字体图标的引入",[433,136956,136957],{},[436,136958,136959,136960,136963],{},"把下载包里面的 ",[2839,136961,136962],{},"fonts"," 文件夹放入页面根目录下",[4000,136965],{"style":128870,"src":136966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[433,136968,136969],{"start":46},[436,136970,136971],{},"字体文件格式",[206,136973,136974,136983],{},[209,136975,136976],{},[212,136977,136978,136981],{},[215,136979,136980],{"align":26253},"格式",[215,136982,26256],{"align":26253},[225,136984,136985,136995,137005,137015],{},[212,136986,136987,136992],{},[230,136988,136989],{"align":26253},[2839,136990,136991],{},".ttf",[230,136993,136994],{"align":26253},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[212,136996,136997,137002],{},[230,136998,136999],{"align":26253},[2839,137000,137001],{},".woff",[230,137003,137004],{"align":26253},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[212,137006,137007,137012],{},[230,137008,137009],{"align":26253},[2839,137010,137011],{},".eot",[230,137013,137014],{"align":26253},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[212,137016,137017,137022],{},[230,137018,137019],{"align":26253},[2839,137020,137021],{},"svg",[230,137023,137024],{"align":26253},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[433,137026,137027],{"start":82},[436,137028,137029],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,137031,137033],{"className":129014,"code":137032,"language":129016,"meta":31,"style":31},"\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",[33,137034,137035,137040,137047,137059,137075,137100,137121,137141,137161,137165,137171,137181,137192],{"__ignoreMap":31},[36,137036,137037],{"class":38,"line":39},[36,137038,137039],{"class":42},"\u002F* 引入字体图标 *\u002F\n",[36,137041,137042,137045],{"class":38,"line":46},[36,137043,137044],{"class":114},"@font-face",[36,137046,18091],{"class":53},[36,137048,137049,137052,137054,137057],{"class":38,"line":82},[36,137050,137051],{"class":49},"  font-family",[36,137053,53931],{"class":53},[36,137055,137056],{"class":57},"'icomoon'",[36,137058,3833],{"class":53},[36,137060,137061,137064,137066,137068,137070,137073],{"class":38,"line":88},[36,137062,137063],{"class":49},"  src",[36,137065,53931],{"class":53},[36,137067,64214],{"class":49},[36,137069,54],{"class":53},[36,137071,137072],{"class":57},"'fonts\u002Ficomoon.eot'",[36,137074,5251],{"class":53},[36,137076,137077,137079,137081,137083,137085,137088,137090,137093,137095,137098],{"class":38,"line":195},[36,137078,137063],{"class":49},[36,137080,53931],{"class":53},[36,137082,64214],{"class":49},[36,137084,54],{"class":53},[36,137086,137087],{"class":57},"'fonts\u002Ficomoon.eot?#iefix'",[36,137089,16236],{"class":53},[36,137091,137092],{"class":49},"format",[36,137094,54],{"class":53},[36,137096,137097],{"class":57},"'embedded-opentype'",[36,137099,40547],{"class":53},[36,137101,137102,137105,137107,137110,137112,137114,137116,137119],{"class":38,"line":1517},[36,137103,137104],{"class":49},"       url",[36,137106,54],{"class":53},[36,137108,137109],{"class":57},"'fonts\u002Ficomoon.woff'",[36,137111,16236],{"class":53},[36,137113,137092],{"class":49},[36,137115,54],{"class":53},[36,137117,137118],{"class":57},"'woff'",[36,137120,40547],{"class":53},[36,137122,137123,137125,137127,137130,137132,137134,137136,137139],{"class":38,"line":2421},[36,137124,137104],{"class":49},[36,137126,54],{"class":53},[36,137128,137129],{"class":57},"'fonts\u002Ficomoon.ttf'",[36,137131,16236],{"class":53},[36,137133,137092],{"class":49},[36,137135,54],{"class":53},[36,137137,137138],{"class":57},"'truetype'",[36,137140,40547],{"class":53},[36,137142,137143,137145,137147,137150,137152,137154,137156,137159],{"class":38,"line":2446},[36,137144,137104],{"class":49},[36,137146,54],{"class":53},[36,137148,137149],{"class":57},"'fonts\u002Ficomoon.svg#icomoon'",[36,137151,16236],{"class":53},[36,137153,137092],{"class":49},[36,137155,54],{"class":53},[36,137157,137158],{"class":57},"'svg'",[36,137160,5251],{"class":53},[36,137162,137163],{"class":38,"line":2469},[36,137164,4103],{"class":53},[36,137166,137167,137169],{"class":38,"line":2492},[36,137168,136770],{"class":4500},[36,137170,18091],{"class":53},[36,137172,137173,137175,137177,137179],{"class":38,"line":4150},[36,137174,137051],{"class":49},[36,137176,53931],{"class":53},[36,137178,137056],{"class":57},[36,137180,3833],{"class":53},[36,137182,137183,137186,137188,137190],{"class":38,"line":4155},[36,137184,137185],{"class":49},"  font-style",[36,137187,53931],{"class":53},[36,137189,66329],{"class":49},[36,137191,3833],{"class":53},[36,137193,137194],{"class":38,"line":4161},[36,137195,4103],{"class":53},[19,137197,137198],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[4000,137200],{"style":128870,"src":137201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[433,137203,137204],{"start":88},[436,137205,137206],{},"添加字体",[4000,137208],{"style":128870,"src":137209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137211,137212],{},"复制：",[4000,137214],{"style":128870,"src":137215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137217,137218],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[433,137220,137221],{"start":195},[436,137222,137223],{},"代码展示：",[26,137225,137226],{"className":129014,"code":137032,"language":129016,"meta":31,"style":31},[33,137227,137228,137232,137238,137248,137262,137284,137302,137320,137338,137342,137348,137358,137368],{"__ignoreMap":31},[36,137229,137230],{"class":38,"line":39},[36,137231,137039],{"class":42},[36,137233,137234,137236],{"class":38,"line":46},[36,137235,137044],{"class":114},[36,137237,18091],{"class":53},[36,137239,137240,137242,137244,137246],{"class":38,"line":82},[36,137241,137051],{"class":49},[36,137243,53931],{"class":53},[36,137245,137056],{"class":57},[36,137247,3833],{"class":53},[36,137249,137250,137252,137254,137256,137258,137260],{"class":38,"line":88},[36,137251,137063],{"class":49},[36,137253,53931],{"class":53},[36,137255,64214],{"class":49},[36,137257,54],{"class":53},[36,137259,137072],{"class":57},[36,137261,5251],{"class":53},[36,137263,137264,137266,137268,137270,137272,137274,137276,137278,137280,137282],{"class":38,"line":195},[36,137265,137063],{"class":49},[36,137267,53931],{"class":53},[36,137269,64214],{"class":49},[36,137271,54],{"class":53},[36,137273,137087],{"class":57},[36,137275,16236],{"class":53},[36,137277,137092],{"class":49},[36,137279,54],{"class":53},[36,137281,137097],{"class":57},[36,137283,40547],{"class":53},[36,137285,137286,137288,137290,137292,137294,137296,137298,137300],{"class":38,"line":1517},[36,137287,137104],{"class":49},[36,137289,54],{"class":53},[36,137291,137109],{"class":57},[36,137293,16236],{"class":53},[36,137295,137092],{"class":49},[36,137297,54],{"class":53},[36,137299,137118],{"class":57},[36,137301,40547],{"class":53},[36,137303,137304,137306,137308,137310,137312,137314,137316,137318],{"class":38,"line":2421},[36,137305,137104],{"class":49},[36,137307,54],{"class":53},[36,137309,137129],{"class":57},[36,137311,16236],{"class":53},[36,137313,137092],{"class":49},[36,137315,54],{"class":53},[36,137317,137138],{"class":57},[36,137319,40547],{"class":53},[36,137321,137322,137324,137326,137328,137330,137332,137334,137336],{"class":38,"line":2446},[36,137323,137104],{"class":49},[36,137325,54],{"class":53},[36,137327,137149],{"class":57},[36,137329,16236],{"class":53},[36,137331,137092],{"class":49},[36,137333,54],{"class":53},[36,137335,137158],{"class":57},[36,137337,5251],{"class":53},[36,137339,137340],{"class":38,"line":2469},[36,137341,4103],{"class":53},[36,137343,137344,137346],{"class":38,"line":2492},[36,137345,136770],{"class":4500},[36,137347,18091],{"class":53},[36,137349,137350,137352,137354,137356],{"class":38,"line":4150},[36,137351,137051],{"class":49},[36,137353,53931],{"class":53},[36,137355,137056],{"class":57},[36,137357,3833],{"class":53},[36,137359,137360,137362,137364,137366],{"class":38,"line":4155},[36,137361,137185],{"class":49},[36,137363,53931],{"class":53},[36,137365,66329],{"class":49},[36,137367,3833],{"class":53},[36,137369,137370],{"class":38,"line":4161},[36,137371,4103],{"class":53},[4000,137373],{"style":128870,"src":137374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137376,137377],{},"更加细节展示：",[433,137379,137380],{},[436,137381,137382],{},"html 标签内添加小图标",[4000,137384],{"style":128870,"src":137385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[433,137387,137388],{"start":46},[436,137389,137390],{},"给标签定义字体",[26,137392,137393],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,137394,137395,137399,137413,137417],{"__ignoreMap":31},[36,137396,137397],{"class":38,"line":39},[36,137398,133125],{"class":42},[36,137400,137401,137403,137405,137407,137409,137411],{"class":38,"line":46},[36,137402,1507],{"class":53},[36,137404,54105],{"class":53794},[36,137406,55980],{"class":4500},[36,137408,115],{"class":53},[36,137410,133138],{"class":57},[36,137412,53801],{"class":53},[36,137414,137415],{"class":38,"line":82},[36,137416,133145],{"class":53},[36,137418,137419,137421,137423],{"class":38,"line":88},[36,137420,54279],{"class":53},[36,137422,54105],{"class":53794},[36,137424,53801],{"class":53},[19,137426,137427],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[4000,137429],{"style":128870,"src":137430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[997,137432,137434],{"id":137433},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137436,137437],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137439,137440,137441,137444],{},"把压缩包里面的 ",[2839,137442,137443],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137446,137447],{},"打开网站，点下方：",[4000,137449],{"style":128870,"src":137450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[4000,137452],{"style":128870,"src":137453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[4000,137455],{"style":128870,"src":137456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137458,137459],{},"点yes重新加载",[19,137461,137462],{},"然后重复之前的操作就可以实现了",[19,137464,137465],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[997,137467,137469],{"id":137468},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[4000,137471],{"style":128870,"src":137472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2602,137474,137475],{},"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":31,"searchDepth":46,"depth":46,"links":137477},[137478,137484,137489],{"id":136081,"depth":46,"text":136082,"children":137479},[137480,137481,137482,137483],{"id":136093,"depth":82,"text":136094},{"id":136122,"depth":82,"text":136123},{"id":136150,"depth":82,"text":136151},{"id":136208,"depth":82,"text":136209},{"id":136680,"depth":46,"text":136681,"children":137485},[137486,137487,137488],{"id":136684,"depth":82,"text":136685},{"id":136729,"depth":82,"text":136730},{"id":136745,"depth":82,"text":136746},{"id":136845,"depth":46,"text":136846,"children":137490},[137491,137492,137493,137494,137495,137496],{"id":136849,"depth":82,"text":136850},{"id":136883,"depth":82,"text":136884},{"id":136906,"depth":82,"text":136907},{"id":136953,"depth":82,"text":136954},{"id":137433,"depth":82,"text":137434},{"id":137468,"depth":82,"text":137469},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136073,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137503,"title":137504,"body":137505,"description":2630,"extension":2631,"meta":138732,"navigation":545,"path":138733,"seo":138734,"stem":138735,"__hash__":138736},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137506,"toc":138713},[137507,137510,137514,137517,137531,137599,137629,137632,137636,137640,137742,137789,137793,137796,137799,137833,137836,137839,137842,137845,137848,137851,137854,137856,137859,137862,137865,137868,137871,137874,137877,137905,137908,137912,137915,137922,137925,137928,137954,137957,137961,137964,137967,137974,137978,137981,137983,138015,138018,138021,138033,138039,138042,138045,138048,138050,138054,138057,138060,138063,138108,138112,138114,138117,138124,138166,138169,138173,138178,138192,138196,138199,138202,138205,138208,138211,138245,138248,138251,138305,138308,138311,138314,138317,138369,138372,138375,138424,138428,138430,138433,138436,138439,138442,138445,138503,138506,138512,138515,138518,138550,138553,138557,138561,138564,138596,138600,138603,138647,138651,138654,138657,138660,138663,138666,138669,138672,138674,138677,138679,138682,138685,138688,138691,138696,138699,138701,138704,138707,138710],[10,137508,137504],{"id":137509},"_13-界面样式与布局技巧",[14,137511,137513],{"id":137512},"_131-css三角","13.1 css三角",[19,137515,137516],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3680,137518,137519,137522,137525,137528],{},[436,137520,137521],{},"用css 边框可以模拟三角效果",[436,137523,137524],{},"宽度高度为0",[436,137526,137527],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[436,137529,137530],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,137532,137534],{"className":129014,"code":137533,"language":129016,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,137535,137536,137541,137548,137558,137568,137584,137595],{"__ignoreMap":31},[36,137537,137538],{"class":38,"line":39},[36,137539,137540],{"class":42},"\u002F* CSS 实现三角形 *\u002F\n",[36,137542,137543,137546],{"class":38,"line":46},[36,137544,137545],{"class":4500},".triangle",[36,137547,18091],{"class":53},[36,137549,137550,137552,137554,137556],{"class":38,"line":82},[36,137551,73054],{"class":49},[36,137553,53931],{"class":53},[36,137555,713],{"class":49},[36,137557,3833],{"class":53},[36,137559,137560,137562,137564,137566],{"class":38,"line":88},[36,137561,73274],{"class":49},[36,137563,53931],{"class":53},[36,137565,713],{"class":49},[36,137567,3833],{"class":53},[36,137569,137570,137572,137574,137576,137578,137580,137582],{"class":38,"line":195},[36,137571,73382],{"class":49},[36,137573,53931],{"class":53},[36,137575,1317],{"class":49},[36,137577,53986],{"class":114},[36,137579,54015],{"class":49},[36,137581,66479],{"class":49},[36,137583,3833],{"class":53},[36,137585,137586,137589,137591,137593],{"class":38,"line":1517},[36,137587,137588],{"class":49},"  border-bottom-color",[36,137590,53931],{"class":53},[36,137592,64857],{"class":49},[36,137594,3833],{"class":53},[36,137596,137597],{"class":38,"line":2421},[36,137598,4103],{"class":53},[26,137600,137601],{"className":129014,"code":133171,"language":129016,"meta":31,"style":31},[33,137602,137603,137609,137625],{"__ignoreMap":31},[36,137604,137605,137607],{"class":38,"line":39},[36,137606,54105],{"class":53794},[36,137608,18091],{"class":53},[36,137610,137611,137613,137615,137617,137619,137621,137623],{"class":38,"line":46},[36,137612,73382],{"class":49},[36,137614,53931],{"class":53},[36,137616,707],{"class":49},[36,137618,53986],{"class":114},[36,137620,54015],{"class":49},[36,137622,132406],{"class":49},[36,137624,3833],{"class":53},[36,137626,137627],{"class":38,"line":82},[36,137628,4103],{"class":53},[4000,137630],{"style":128870,"src":137631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137633,137635],{"id":137634},"_132-css用户界面样式","13.2 css用户界面样式",[997,137637,137639],{"id":137638},"_1321-鼠标样式","13.2.1 鼠标样式",[26,137641,137643],{"className":129014,"code":137642,"language":129016,"meta":31,"style":31},"\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",[33,137644,137645,137650,137669,137687,137706,137723],{"__ignoreMap":31},[36,137646,137647],{"class":38,"line":39},[36,137648,137649],{"class":42},"\u002F* 鼠标样式 *\u002F\n",[36,137651,137652,137654,137656,137659,137661,137663,137666],{"class":38,"line":46},[36,137653,54105],{"class":53794},[36,137655,82290],{"class":53},[36,137657,137658],{"class":49},"cursor",[36,137660,53931],{"class":53},[36,137662,64518],{"class":49},[36,137664,137665],{"class":53},"; }   ",[36,137667,137668],{"class":42},"\u002F* 手型 *\u002F\n",[36,137670,137671,137673,137675,137677,137679,137682,137684],{"class":38,"line":82},[36,137672,54105],{"class":53794},[36,137674,82290],{"class":53},[36,137676,137658],{"class":49},[36,137678,53931],{"class":53},[36,137680,137681],{"class":49},"default",[36,137683,137665],{"class":53},[36,137685,137686],{"class":42},"\u002F* 默认 *\u002F\n",[36,137688,137689,137691,137693,137695,137697,137700,137703],{"class":38,"line":88},[36,137690,54105],{"class":53794},[36,137692,82290],{"class":53},[36,137694,137658],{"class":49},[36,137696,53931],{"class":53},[36,137698,137699],{"class":49},"move",[36,137701,137702],{"class":53},"; }      ",[36,137704,137705],{"class":42},"\u002F* 移动 *\u002F\n",[36,137707,137708,137710,137712,137714,137716,137718,137720],{"class":38,"line":195},[36,137709,54105],{"class":53794},[36,137711,82290],{"class":53},[36,137713,137658],{"class":49},[36,137715,53931],{"class":53},[36,137717,690],{"class":49},[36,137719,137702],{"class":53},[36,137721,137722],{"class":42},"\u002F* 文本 *\u002F\n",[36,137724,137725,137727,137729,137731,137733,137736,137739],{"class":38,"line":1517},[36,137726,54105],{"class":53794},[36,137728,82290],{"class":53},[36,137730,137658],{"class":49},[36,137732,53931],{"class":53},[36,137734,137735],{"class":49},"not-allowed",[36,137737,137738],{"class":53},"; } ",[36,137740,137741],{"class":42},"\u002F* 禁止 *\u002F\n",[206,137743,137744,137752],{},[209,137745,137746],{},[212,137747,137748,137750],{},[215,137749,129478],{"align":26253},[215,137751,30001],{"align":26253},[225,137753,137754,137761,137768,137775,137782],{},[212,137755,137756,137758],{},[230,137757,137681],{"align":26253},[230,137759,137760],{"align":26253},"小白 默认",[212,137762,137763,137765],{},[230,137764,64518],{"align":26253},[230,137766,137767],{"align":26253},"小手",[212,137769,137770,137772],{},[230,137771,137699],{"align":26253},[230,137773,137774],{"align":26253},"移动",[212,137776,137777,137779],{},[230,137778,690],{"align":26253},[230,137780,137781],{"align":26253},"文本",[212,137783,137784,137786],{},[230,137785,137735],{"align":26253},[230,137787,137788],{"align":26253},"禁止",[997,137790,137792],{"id":137791},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137794,137795],{},"去除表单轮廓线",[19,137797,137798],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,137800,137801],{"className":129014,"code":132378,"language":129016,"meta":31,"style":31},[33,137802,137803,137807,137813,137829],{"__ignoreMap":31},[36,137804,137805],{"class":38,"line":39},[36,137806,132385],{"class":42},[36,137808,137809,137811],{"class":38,"line":46},[36,137810,54105],{"class":53794},[36,137812,18091],{"class":53},[36,137814,137815,137817,137819,137821,137823,137825,137827],{"class":38,"line":82},[36,137816,73382],{"class":49},[36,137818,53931],{"class":53},[36,137820,707],{"class":49},[36,137822,53986],{"class":114},[36,137824,54015],{"class":49},[36,137826,132406],{"class":49},[36,137828,3833],{"class":53},[36,137830,137831],{"class":38,"line":88},[36,137832,4103],{"class":53},[19,137834,137835],{},"文本域：",[4000,137837],{"style":128870,"src":137838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137840,137841],{},"此时会有一个空白区域",[4000,137843],{"style":128870,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137846,137847],{},"写在同一行就不会出现这个问题",[4000,137849],{"style":128870,"src":137850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137852,137853],{},"文本域是行内块元素，一定记住！！！",[19,137855,100709],{},[4000,137857],{"style":128870,"src":137858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137860,137861],{},"文本域尽量放在一行",[19,137863,137864],{},"知识回顾：cols是列，rols是行",[4000,137866],{"style":128870,"src":137867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137869,137870],{},"它可以进行拖动，显然这是我们不愿意看到的",[4000,137872],{"style":128870,"src":137873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137875,137876],{},"使用resize进行解决",[26,137878,137880],{"className":129014,"code":137879,"language":129016,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,137881,137882,137888,137901],{"__ignoreMap":31},[36,137883,137884,137886],{"class":38,"line":39},[36,137885,913],{"class":53794},[36,137887,18091],{"class":53},[36,137889,137890,137892,137894,137896,137898],{"class":38,"line":46},[36,137891,73284],{"class":49},[36,137893,53931],{"class":53},[36,137895,57228],{"class":49},[36,137897,132877],{"class":53},[36,137899,137900],{"class":42},"\u002F* 取消表单轮廓线 *\u002F\n",[36,137902,137903],{"class":38,"line":82},[36,137904,4103],{"class":53},[19,137906,137907],{},"此时就无法通过右下方实现拖动了",[997,137909,137911],{"id":137910},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137913,137914],{},"实现一个盒子中的文字和图片对齐",[19,137916,137917,137918,137921],{},"用于设置一个元素的 ",[2839,137919,137920],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137923,137924],{},"图片和文字默认是基线对齐",[4000,137926],{"style":128870,"src":137927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,137929,137930],{"className":129014,"code":137879,"language":129016,"meta":31,"style":31},[33,137931,137932,137938,137950],{"__ignoreMap":31},[36,137933,137934,137936],{"class":38,"line":39},[36,137935,913],{"class":53794},[36,137937,18091],{"class":53},[36,137939,137940,137942,137944,137946,137948],{"class":38,"line":46},[36,137941,73284],{"class":49},[36,137943,53931],{"class":53},[36,137945,57228],{"class":49},[36,137947,132877],{"class":53},[36,137949,137900],{"class":42},[36,137951,137952],{"class":38,"line":82},[36,137953,4103],{"class":53},[4000,137955],{"style":128870,"src":137956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24515,137958,137960],{"id":137959},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137962,137963],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[4000,137965],{"style":128870,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137968,137969,137970,137973],{},"此时可以给图片、表单这些行内块元素的 ",[2839,137971,137972],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24515,137975,137977],{"id":137976},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137979,137980],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137982,17155],{},[26,137984,137986],{"className":129014,"code":137985,"language":129016,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,137987,137988,137993,137999,138011],{"__ignoreMap":31},[36,137989,137990],{"class":38,"line":39},[36,137991,137992],{"class":42},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,137994,137995,137997],{"class":38,"line":46},[36,137996,4000],{"class":53794},[36,137998,18091],{"class":53},[36,138000,138001,138004,138006,138009],{"class":38,"line":82},[36,138002,138003],{"class":49},"  vertical-align",[36,138005,53931],{"class":53},[36,138007,138008],{"class":49},"middle",[36,138010,3833],{"class":53},[36,138012,138013],{"class":38,"line":88},[36,138014,4103],{"class":53},[4000,138016],{"style":128870,"src":138017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138019,138020],{},"主要解决方法有两种：",[433,138022,138023],{},[436,138024,138025,138028,138029,138032],{},[2839,138026,138027],{},"给图片"," 添加 ",[2839,138030,138031],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138034,138035,138036],{},"2.把图片转换为块级元素 ",[2839,138037,138038],{},"display: block",[19,138040,138041],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138043,138044],{},"img {",[19,138046,138047],{},"vertical-align:middle;",[19,138049,2070],{},[997,138051,138053],{"id":138052},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138055,138056],{},"效果：",[4000,138058],{"style":128870,"src":138059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138061,138062],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,138064,138066],{"className":129014,"code":138065,"language":129016,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,138067,138068,138073,138079,138089,138094,138104],{"__ignoreMap":31},[36,138069,138070],{"class":38,"line":39},[36,138071,138072],{"class":42},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,138074,138075,138077],{"class":38,"line":46},[36,138076,4000],{"class":53794},[36,138078,18091],{"class":53},[36,138080,138081,138083,138085,138087],{"class":38,"line":82},[36,138082,138003],{"class":49},[36,138084,53931],{"class":53},[36,138086,138008],{"class":49},[36,138088,3833],{"class":53},[36,138090,138091],{"class":38,"line":88},[36,138092,138093],{"class":42},"  \u002F* 或 *\u002F\n",[36,138095,138096,138098,138100,138102],{"class":38,"line":195},[36,138097,130630],{"class":49},[36,138099,53931],{"class":53},[36,138101,63357],{"class":49},[36,138103,3833],{"class":53},[36,138105,138106],{"class":38,"line":1517},[36,138107,4103],{"class":53},[997,138109,138111],{"id":138110},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138113,138056],{},[4000,138115],{"style":128870,"src":138116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138118,138119,138120,138123],{},"多行文本溢出显示省略号， ",[2839,138121,138122],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,138125,138126],{"className":129014,"code":138065,"language":129016,"meta":31,"style":31},[33,138127,138128,138132,138138,138148,138152,138162],{"__ignoreMap":31},[36,138129,138130],{"class":38,"line":39},[36,138131,138072],{"class":42},[36,138133,138134,138136],{"class":38,"line":46},[36,138135,4000],{"class":53794},[36,138137,18091],{"class":53},[36,138139,138140,138142,138144,138146],{"class":38,"line":82},[36,138141,138003],{"class":49},[36,138143,53931],{"class":53},[36,138145,138008],{"class":49},[36,138147,3833],{"class":53},[36,138149,138150],{"class":38,"line":88},[36,138151,138093],{"class":42},[36,138153,138154,138156,138158,138160],{"class":38,"line":195},[36,138155,130630],{"class":49},[36,138157,53931],{"class":53},[36,138159,63357],{"class":49},[36,138161,3833],{"class":53},[36,138163,138164],{"class":38,"line":1517},[36,138165,4103],{"class":53},[19,138167,138168],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138170,138172],{"id":138171},"_133-常见布局技巧","13.3 常见布局技巧",[19,138174,138175],{},[2839,138176,138177],{},"巧妙利用一个技术更快更好的布局：",[433,138179,138180,138183,138186,138189],{},[436,138181,138182],{},"margin负值的运用",[436,138184,138185],{},"文字围绕浮动元素",[436,138187,138188],{},"行内块的巧妙运用",[436,138190,138191],{},"CSS三角强化",[997,138193,138195],{"id":138194},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138197,138198],{},"应用场景：",[4000,138200],{"style":128870,"src":138201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[4000,138203],{"style":128870,"src":138204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138206,138207],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138209,138210],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,138212,138213],{"className":129014,"code":132378,"language":129016,"meta":31,"style":31},[33,138214,138215,138219,138225,138241],{"__ignoreMap":31},[36,138216,138217],{"class":38,"line":39},[36,138218,132385],{"class":42},[36,138220,138221,138223],{"class":38,"line":46},[36,138222,54105],{"class":53794},[36,138224,18091],{"class":53},[36,138226,138227,138229,138231,138233,138235,138237,138239],{"class":38,"line":82},[36,138228,73382],{"class":49},[36,138230,53931],{"class":53},[36,138232,707],{"class":49},[36,138234,53986],{"class":114},[36,138236,54015],{"class":49},[36,138238,132406],{"class":49},[36,138240,3833],{"class":53},[36,138242,138243],{"class":38,"line":88},[36,138244,4103],{"class":53},[4000,138246],{"style":128870,"src":138247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138249,138250],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,138252,138254],{"className":129014,"code":138253,"language":129016,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138255,138256,138261,138267,138277,138289,138301],{"__ignoreMap":31},[36,138257,138258],{"class":38,"line":39},[36,138259,138260],{"class":42},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,138262,138263,138265],{"class":38,"line":46},[36,138264,132862],{"class":4500},[36,138266,18091],{"class":53},[36,138268,138269,138271,138273,138275],{"class":38,"line":82},[36,138270,134819],{"class":49},[36,138272,53931],{"class":53},[36,138274,57255],{"class":49},[36,138276,3833],{"class":53},[36,138278,138279,138281,138283,138285,138287],{"class":38,"line":88},[36,138280,134833],{"class":49},[36,138282,53931],{"class":53},[36,138284,1317],{"class":49},[36,138286,53986],{"class":114},[36,138288,3833],{"class":53},[36,138290,138291,138293,138295,138297,138299],{"class":38,"line":195},[36,138292,134850],{"class":49},[36,138294,53931],{"class":53},[36,138296,3376],{"class":49},[36,138298,53986],{"class":114},[36,138300,3833],{"class":53},[36,138302,138303],{"class":38,"line":1517},[36,138304,4103],{"class":53},[19,138306,138307],{},"加上上述代码会发现：",[4000,138309],{"style":128870,"src":138310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138312,138313],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138315,138316],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,138318,138319],{"className":129014,"code":138253,"language":129016,"meta":31,"style":31},[33,138320,138321,138325,138331,138341,138353,138365],{"__ignoreMap":31},[36,138322,138323],{"class":38,"line":39},[36,138324,138260],{"class":42},[36,138326,138327,138329],{"class":38,"line":46},[36,138328,132862],{"class":4500},[36,138330,18091],{"class":53},[36,138332,138333,138335,138337,138339],{"class":38,"line":82},[36,138334,134819],{"class":49},[36,138336,53931],{"class":53},[36,138338,57255],{"class":49},[36,138340,3833],{"class":53},[36,138342,138343,138345,138347,138349,138351],{"class":38,"line":88},[36,138344,134833],{"class":49},[36,138346,53931],{"class":53},[36,138348,1317],{"class":49},[36,138350,53986],{"class":114},[36,138352,3833],{"class":53},[36,138354,138355,138357,138359,138361,138363],{"class":38,"line":195},[36,138356,134850],{"class":49},[36,138358,53931],{"class":53},[36,138360,3376],{"class":49},[36,138362,53986],{"class":114},[36,138364,3833],{"class":53},[36,138366,138367],{"class":38,"line":1517},[36,138368,4103],{"class":53},[19,138370,138371],{},"解决方式2：",[19,138373,138374],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,138376,138378],{"className":129014,"code":138377,"language":129016,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138379,138380,138386,138396,138408,138420],{"__ignoreMap":31},[36,138381,138382,138384],{"class":38,"line":39},[36,138383,54105],{"class":53794},[36,138385,18091],{"class":53},[36,138387,138388,138390,138392,138394],{"class":38,"line":46},[36,138389,134819],{"class":49},[36,138391,53931],{"class":53},[36,138393,57255],{"class":49},[36,138395,3833],{"class":53},[36,138397,138398,138400,138402,138404,138406],{"class":38,"line":82},[36,138399,134833],{"class":49},[36,138401,53931],{"class":53},[36,138403,1317],{"class":49},[36,138405,53986],{"class":114},[36,138407,3833],{"class":53},[36,138409,138410,138412,138414,138416,138418],{"class":38,"line":88},[36,138411,134850],{"class":49},[36,138413,53931],{"class":53},[36,138415,3376],{"class":49},[36,138417,53986],{"class":114},[36,138419,3833],{"class":53},[36,138421,138422],{"class":38,"line":195},[36,138423,4103],{"class":53},[997,138425,138427],{"id":138426},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138429,138198],{},[4000,138431],{"style":128870,"src":138432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138434,138435],{},"实现结构图：",[4000,138437],{"style":128870,"src":138438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138440,138441],{},"巧妙运用浮动元素不会压住文字的特性",[19,138443,138444],{},"代码显示：",[26,138446,138448],{"className":129014,"code":138447,"language":129016,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,138449,138450,138456,138466,138470,138475,138479,138485,138499],{"__ignoreMap":31},[36,138451,138452,138454],{"class":38,"line":39},[36,138453,132862],{"class":4500},[36,138455,18091],{"class":53},[36,138457,138458,138460,138462,138464],{"class":38,"line":46},[36,138459,133494],{"class":49},[36,138461,53931],{"class":53},[36,138463,26253],{"class":49},[36,138465,3833],{"class":53},[36,138467,138468],{"class":38,"line":82},[36,138469,4103],{"class":53},[36,138471,138472],{"class":38,"line":88},[36,138473,138474],{"class":53},"```Css\n",[36,138476,138477],{"class":38,"line":195},[36,138478,132857],{"class":42},[36,138480,138481,138483],{"class":38,"line":1517},[36,138482,132862],{"class":4500},[36,138484,18091],{"class":53},[36,138486,138487,138489,138491,138493,138495,138497],{"class":38,"line":2421},[36,138488,72956],{"class":49},[36,138490,53931],{"class":53},[36,138492,713],{"class":49},[36,138494,54050],{"class":49},[36,138496,132877],{"class":53},[36,138498,132880],{"class":42},[36,138500,138501],{"class":38,"line":2446},[36,138502,4103],{"class":53},[19,138504,138505],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,138507,138510],{"className":138508,"code":138509,"language":690},[688],"\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",[33,138511,138509],{"__ignoreMap":31},[4000,138513],{"style":128870,"src":138514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138516,138517],{},"最终展示结果：",[26,138519,138520],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,138521,138522,138526,138532,138546],{"__ignoreMap":31},[36,138523,138524],{"class":38,"line":39},[36,138525,132857],{"class":42},[36,138527,138528,138530],{"class":38,"line":46},[36,138529,132862],{"class":4500},[36,138531,18091],{"class":53},[36,138533,138534,138536,138538,138540,138542,138544],{"class":38,"line":82},[36,138535,72956],{"class":49},[36,138537,53931],{"class":53},[36,138539,713],{"class":49},[36,138541,54050],{"class":49},[36,138543,132877],{"class":53},[36,138545,132880],{"class":42},[36,138547,138548],{"class":38,"line":88},[36,138549,4103],{"class":53},[4000,138551],{"style":128870,"src":138552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138554,138556],{"id":138555},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[997,138558,138560],{"id":138559},"_1341-原理","13.4.1 原理",[4000,138562],{"style":128870,"src":138563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,138565,138566],{"className":129014,"code":132850,"language":129016,"meta":31,"style":31},[33,138567,138568,138572,138578,138592],{"__ignoreMap":31},[36,138569,138570],{"class":38,"line":39},[36,138571,132857],{"class":42},[36,138573,138574,138576],{"class":38,"line":46},[36,138575,132862],{"class":4500},[36,138577,18091],{"class":53},[36,138579,138580,138582,138584,138586,138588,138590],{"class":38,"line":82},[36,138581,72956],{"class":49},[36,138583,53931],{"class":53},[36,138585,713],{"class":49},[36,138587,54050],{"class":49},[36,138589,132877],{"class":53},[36,138591,132880],{"class":42},[36,138593,138594],{"class":38,"line":88},[36,138595,4103],{"class":53},[997,138597,138599],{"id":138598},"_1342-实例","13.4.2 实例",[4000,138601],{"style":128870,"src":138602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,138604,138605],{"className":129014,"code":133480,"language":129016,"meta":31,"style":31},[33,138606,138607,138613,138623,138627,138633,138643],{"__ignoreMap":31},[36,138608,138609,138611],{"class":38,"line":39},[36,138610,133487],{"class":4500},[36,138612,18091],{"class":53},[36,138614,138615,138617,138619,138621],{"class":38,"line":46},[36,138616,133494],{"class":49},[36,138618,53931],{"class":53},[36,138620,26253],{"class":49},[36,138622,3833],{"class":53},[36,138624,138625],{"class":38,"line":82},[36,138626,4103],{"class":53},[36,138628,138629,138631],{"class":38,"line":88},[36,138630,133509],{"class":4500},[36,138632,18091],{"class":53},[36,138634,138635,138637,138639,138641],{"class":38,"line":195},[36,138636,133494],{"class":49},[36,138638,53931],{"class":53},[36,138640,75008],{"class":49},[36,138642,3833],{"class":53},[36,138644,138645],{"class":38,"line":1517},[36,138646,4103],{"class":53},[14,138648,138650],{"id":138649},"_135-css的初始化","13.5 css的初始化",[19,138652,138653],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138655,138656],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138658,138659],{},"每个网页都必须首先进行 CSS初始化。",[19,138661,138662],{},"这里我们以 京东CSS初始化代码为例。",[19,138664,138665],{},"在网页右键查看网页源代码",[19,138667,138668],{},"找到css的link引入语句",[19,138670,138671],{},"然后ctrl+f 输入body",[19,138673,79711],{},[4000,138675],{"style":128870,"src":138676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138678,79734],{},[4000,138680],{"style":128870,"src":138681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138683,138684],{},"③打开了网页上传压缩的代码",[4000,138686],{"style":128870,"src":138687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138689,138690],{},"④从body前可以查看这个网页的初始化代码",[19,138692,138693],{},[2839,138694,138695],{},"Unicode编码字体：",[19,138697,138698],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138700,85688],{},[19,138702,138703],{},"黑体 \\9ED1\\4F53",[19,138705,138706],{},"宋体 \\5B8B\\4F53",[19,138708,138709],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2602,138711,138712],{},"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":31,"searchDepth":46,"depth":46,"links":138714},[138715,138716,138723,138727,138731],{"id":137512,"depth":46,"text":137513},{"id":137634,"depth":46,"text":137635,"children":138717},[138718,138719,138720,138721,138722],{"id":137638,"depth":82,"text":137639},{"id":137791,"depth":82,"text":137792},{"id":137910,"depth":82,"text":137911},{"id":138052,"depth":82,"text":138053},{"id":138110,"depth":82,"text":138111},{"id":138171,"depth":46,"text":138172,"children":138724},[138725,138726],{"id":138194,"depth":82,"text":138195},{"id":138426,"depth":82,"text":138427},{"id":138555,"depth":46,"text":138556,"children":138728},[138729,138730],{"id":138559,"depth":82,"text":138560},{"id":138598,"depth":82,"text":138599},{"id":138649,"depth":46,"text":138650},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137504,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138738,"title":138739,"body":138740,"description":2630,"extension":2631,"meta":140425,"navigation":545,"path":140426,"seo":140427,"stem":140428,"__hash__":140429},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138741,"toc":140414},[138742,138745,138749,138753,138756,138763,138766,138769,138807,138810,138812,138826,138830,138839,138843,138848,138851,138854,138857,138892,138897,138900,138930,138933,138938,138941,138944,138974,138977,139031,139034,139038,139043,139055,139058,139062,139092,139095,139100,139103,139133,139136,139140,139157,139161,139165,139168,139201,139204,139208,139211,139214,139217,139220,139223,139334,139337,139340,139343,139445,139448,139452,139456,139460,139463,139503,139506,139508,139524,139528,139531,139536,139616,139619,139622,139748,139753,139756,139764,139767,139772,139857,139860,139864,139867,139870,139874,139894,139899,139983,139986,139991,139994,139997,140075,140078,140081,140084,140087,140090,140095,140098,140101,140173,140176,140181,140184,140281,140284,140290,140293,140296,140299,140302,140305,140308,140311,140314,140318,140323,140326,140359,140364,140367,140408,140411],[10,138743,138739],{"id":138744},"_14-html5与css3新特性",[14,138746,138748],{"id":138747},"_141-html5的新特性","14.1 HTML5的新特性",[997,138750,138752],{"id":138751},"_1411-基本标签","14.1.1 基本标签",[19,138754,138755],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138757,138758,138759,138762],{},"这些新特性都有兼容性问题，基本是 ",[2839,138760,138761],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138764,138765],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138767,138768],{},"现在使用的是新特性：",[3680,138770,138771,138777,138783,138789,138795,138801],{},[436,138772,138773,138776],{},[33,138774,138775],{},"\u003Cheader>"," 头部标签",[436,138778,138779,138782],{},[33,138780,138781],{},"\u003Cnav>"," 导航标签",[436,138784,138785,138788],{},[33,138786,138787],{},"\u003Carticle>"," 内容标签",[436,138790,138791,138794],{},[33,138792,138793],{},"\u003Csection>"," 定义文档某个区域",[436,138796,138797,138800],{},[33,138798,138799],{},"\u003Caside>"," 侧边栏标签",[436,138802,138803,138806],{},[33,138804,138805],{},"\u003Cfooter>"," 尾部标签",[4000,138808],{"style":128870,"src":138809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138811,2731],{},[3680,138813,138814,138817,138820,138823],{},[436,138815,138816],{},"这种语义化标准主要是针对搜索引擎的",[436,138818,138819],{},"这些标签页面中可以经常使用",[436,138821,138822],{},"在IE9中，需要把这些元素转换为块级元素",[436,138824,138825],{},"移动端更喜欢使用这些标签",[997,138827,138829],{"id":138828},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138831,138832,138833,138835,138836,138838],{},"音频 ",[2839,138834,30685],{}," 和视频 ",[2839,138837,30694],{}," 两个标签",[24515,138840,138842],{"id":138841},"_14121-视频标签-video","14.1.2.1 视频标签- video",[433,138844,138845],{},[436,138846,138847],{},"支持格式：",[4000,138849],{"style":128870,"src":138850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138852,138853],{},"尽量使用MP4，兼容性好",[19,138855,138856],{},"用MP4就可以",[26,138858,138860],{"className":129761,"code":138859,"language":129763,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,138861,138862],{"__ignoreMap":31},[36,138863,138864,138866,138868,138870,138872,138875,138877,138880,138883,138886,138888,138890],{"class":38,"line":39},[36,138865,1507],{"class":53},[36,138867,30694],{"class":53794},[36,138869,57730],{"class":4500},[36,138871,115],{"class":53},[36,138873,138874],{"class":57},"\"movie.mp4\"",[36,138876,94901],{"class":4500},[36,138878,138879],{"class":4500}," autoplay",[36,138881,138882],{"class":4500}," muted",[36,138884,138885],{"class":4500}," loop",[36,138887,57805],{"class":53},[36,138889,30694],{"class":53794},[36,138891,53801],{"class":53},[433,138893,138894],{"start":46},[436,138895,138896],{},"兼容写法",[19,138898,138899],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,138901,138902],{"className":129761,"code":138859,"language":129763,"meta":31,"style":31},[33,138903,138904],{"__ignoreMap":31},[36,138905,138906,138908,138910,138912,138914,138916,138918,138920,138922,138924,138926,138928],{"class":38,"line":39},[36,138907,1507],{"class":53},[36,138909,30694],{"class":53794},[36,138911,57730],{"class":4500},[36,138913,115],{"class":53},[36,138915,138874],{"class":57},[36,138917,94901],{"class":4500},[36,138919,138879],{"class":4500},[36,138921,138882],{"class":4500},[36,138923,138885],{"class":4500},[36,138925,57805],{"class":53},[36,138927,30694],{"class":53794},[36,138929,53801],{"class":53},[19,138931,138932],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[433,138934,138935],{"start":82},[436,138936,138937],{},"video常用属性",[4000,138939],{"style":128870,"src":138940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138942,138943],{},"poster属性后面是跟的等待加载图片的地址",[26,138945,138946],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,138947,138948],{"__ignoreMap":31},[36,138949,138950,138952,138954,138956,138958,138960,138962,138964,138966,138968,138970,138972],{"class":38,"line":39},[36,138951,1507],{"class":53},[36,138953,4000],{"class":53794},[36,138955,57730],{"class":4500},[36,138957,115],{"class":53},[36,138959,136530],{"class":57},[36,138961,57738],{"class":4500},[36,138963,115],{"class":53},[36,138965,136537],{"class":57},[36,138967,136540],{"class":4500},[36,138969,115],{"class":53},[36,138971,136545],{"class":57},[36,138973,53801],{"class":53},[19,138975,138976],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,138978,138980],{"className":129014,"code":138979,"language":129016,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,138981,138982,138987,138993,139017,139022,139027],{"__ignoreMap":31},[36,138983,138984],{"class":38,"line":39},[36,138985,138986],{"class":42},"\u002F* 2D 位移 *\u002F\n",[36,138988,138989,138991],{"class":38,"line":46},[36,138990,54105],{"class":53794},[36,138992,18091],{"class":53},[36,138994,138995,138998,139000,139003,139005,139007,139009,139011,139013,139015],{"class":38,"line":82},[36,138996,138997],{"class":49},"  transform",[36,138999,53931],{"class":53},[36,139001,139002],{"class":49},"translate",[36,139004,54],{"class":53},[36,139006,166],{"class":49},[36,139008,53986],{"class":114},[36,139010,14958],{"class":53},[36,139012,3332],{"class":49},[36,139014,53986],{"class":114},[36,139016,5251],{"class":53},[36,139018,139019],{"class":38,"line":88},[36,139020,139021],{"class":42},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,139023,139024],{"class":38,"line":195},[36,139025,139026],{"class":42},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,139028,139029],{"class":38,"line":1517},[36,139030,4103],{"class":53},[19,139032,139033],{},"muted:自动静音属性",[24515,139035,139037],{"id":139036},"_14122-音频标签audio","14.1.2.2 音频标签audio",[433,139039,139040],{},[436,139041,139042],{},"基本使用",[19,139044,139045,139046,139051,139052],{},"当前 ",[2839,139047,139048],{},[33,139049,139050],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2839,139053,139054],{},"mp3格式",[4000,139056],{"style":128870,"src":139057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[433,139059,139060],{"start":46},[436,139061,138896],{},[26,139063,139064],{"className":129761,"code":138859,"language":129763,"meta":31,"style":31},[33,139065,139066],{"__ignoreMap":31},[36,139067,139068,139070,139072,139074,139076,139078,139080,139082,139084,139086,139088,139090],{"class":38,"line":39},[36,139069,1507],{"class":53},[36,139071,30694],{"class":53794},[36,139073,57730],{"class":4500},[36,139075,115],{"class":53},[36,139077,138874],{"class":57},[36,139079,94901],{"class":4500},[36,139081,138879],{"class":4500},[36,139083,138882],{"class":4500},[36,139085,138885],{"class":4500},[36,139087,57805],{"class":53},[36,139089,30694],{"class":53794},[36,139091,53801],{"class":53},[19,139093,139094],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[433,139096,139097],{"start":82},[436,139098,139099],{},"常用属性",[4000,139101],{"style":128870,"src":139102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,139104,139105],{"className":129761,"code":138859,"language":129763,"meta":31,"style":31},[33,139106,139107],{"__ignoreMap":31},[36,139108,139109,139111,139113,139115,139117,139119,139121,139123,139125,139127,139129,139131],{"class":38,"line":39},[36,139110,1507],{"class":53},[36,139112,30694],{"class":53794},[36,139114,57730],{"class":4500},[36,139116,115],{"class":53},[36,139118,138874],{"class":57},[36,139120,94901],{"class":4500},[36,139122,138879],{"class":4500},[36,139124,138882],{"class":4500},[36,139126,138885],{"class":4500},[36,139128,57805],{"class":53},[36,139130,30694],{"class":53794},[36,139132,53801],{"class":53},[19,139134,139135],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24515,139137,139139],{"id":139138},"_14123-总结","14.1.2.3 总结",[3680,139141,139142,139145,139148,139151,139154],{},[436,139143,139144],{},"音频标签和视频标签使用方式基本一致",[436,139146,139147],{},"浏览器支持情况不同",[436,139149,139150],{},"谷歌浏览器把音频和视频自动播放禁止了",[436,139152,139153],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[436,139155,139156],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[997,139158,139160],{"id":139159},"_1413-表单元素","14.1.3 表单元素",[24515,139162,139164],{"id":139163},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[4000,139166],{"style":128870,"src":139167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,139169,139171],{"className":129761,"code":139170,"language":129763,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,139172,139173],{"__ignoreMap":31},[36,139174,139175,139177,139179,139181,139183,139185,139187,139189,139192,139194,139196,139199],{"class":38,"line":39},[36,139176,1507],{"class":53},[36,139178,913],{"class":53794},[36,139180,56317],{"class":4500},[36,139182,115],{"class":53},[36,139184,65187],{"class":57},[36,139186,17440],{"class":4500},[36,139188,115],{"class":53},[36,139190,139191],{"class":57},"\"username\"",[36,139193,63508],{"class":4500},[36,139195,115],{"class":53},[36,139197,139198],{"class":57},"\"请输入用户名\"",[36,139200,53801],{"class":53},[4000,139202],{"style":128870,"src":139203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24515,139205,139207],{"id":139206},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[4000,139209],{"style":128870,"src":139210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139212,139213],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139215,139216],{},"快捷操作：",[4000,139218],{"style":128870,"src":139219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139221,139222],{},"例子1：",[26,139224,139226],{"className":129761,"code":139225,"language":129763,"meta":31,"style":31},"\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",[33,139227,139228,139251,139278,139307,139326],{"__ignoreMap":31},[36,139229,139230,139232,139234,139236,139238,139241,139244,139246,139249],{"class":38,"line":39},[36,139231,1507],{"class":53},[36,139233,69112],{"class":53794},[36,139235,69115],{"class":4500},[36,139237,115],{"class":53},[36,139239,139240],{"class":57},"\"\u002Fsubmit\"",[36,139242,139243],{"class":4500}," method",[36,139245,115],{"class":53},[36,139247,139248],{"class":57},"\"post\"",[36,139250,53801],{"class":53},[36,139252,139253,139255,139257,139259,139261,139263,139265,139267,139269,139271,139273,139276],{"class":38,"line":46},[36,139254,54638],{"class":53},[36,139256,913],{"class":53794},[36,139258,56317],{"class":4500},[36,139260,115],{"class":53},[36,139262,65187],{"class":57},[36,139264,17440],{"class":4500},[36,139266,115],{"class":53},[36,139268,139191],{"class":57},[36,139270,63508],{"class":4500},[36,139272,115],{"class":53},[36,139274,139275],{"class":57},"\"用户名\"",[36,139277,53801],{"class":53},[36,139279,139280,139282,139284,139286,139288,139291,139293,139295,139298,139300,139302,139305],{"class":38,"line":82},[36,139281,54638],{"class":53},[36,139283,913],{"class":53794},[36,139285,56317],{"class":4500},[36,139287,115],{"class":53},[36,139289,139290],{"class":57},"\"password\"",[36,139292,17440],{"class":4500},[36,139294,115],{"class":53},[36,139296,139297],{"class":57},"\"pwd\"",[36,139299,63508],{"class":4500},[36,139301,115],{"class":53},[36,139303,139304],{"class":57},"\"密码\"",[36,139306,53801],{"class":53},[36,139308,139309,139311,139313,139315,139317,139319,139322,139324],{"class":38,"line":88},[36,139310,54638],{"class":53},[36,139312,56380],{"class":53794},[36,139314,56317],{"class":4500},[36,139316,115],{"class":53},[36,139318,69135],{"class":57},[36,139320,139321],{"class":53},">提交\u003C\u002F",[36,139323,56380],{"class":53794},[36,139325,53801],{"class":53},[36,139327,139328,139330,139332],{"class":38,"line":195},[36,139329,54279],{"class":53},[36,139331,69112],{"class":53794},[36,139333,53801],{"class":53},[4000,139335],{"style":128870,"src":139336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139338,139339],{},"value是表单域的内容",[19,139341,139342],{},"例子2：",[26,139344,139345],{"className":129761,"code":139225,"language":129763,"meta":31,"style":31},[33,139346,139347,139367,139393,139419,139437],{"__ignoreMap":31},[36,139348,139349,139351,139353,139355,139357,139359,139361,139363,139365],{"class":38,"line":39},[36,139350,1507],{"class":53},[36,139352,69112],{"class":53794},[36,139354,69115],{"class":4500},[36,139356,115],{"class":53},[36,139358,139240],{"class":57},[36,139360,139243],{"class":4500},[36,139362,115],{"class":53},[36,139364,139248],{"class":57},[36,139366,53801],{"class":53},[36,139368,139369,139371,139373,139375,139377,139379,139381,139383,139385,139387,139389,139391],{"class":38,"line":46},[36,139370,54638],{"class":53},[36,139372,913],{"class":53794},[36,139374,56317],{"class":4500},[36,139376,115],{"class":53},[36,139378,65187],{"class":57},[36,139380,17440],{"class":4500},[36,139382,115],{"class":53},[36,139384,139191],{"class":57},[36,139386,63508],{"class":4500},[36,139388,115],{"class":53},[36,139390,139275],{"class":57},[36,139392,53801],{"class":53},[36,139394,139395,139397,139399,139401,139403,139405,139407,139409,139411,139413,139415,139417],{"class":38,"line":82},[36,139396,54638],{"class":53},[36,139398,913],{"class":53794},[36,139400,56317],{"class":4500},[36,139402,115],{"class":53},[36,139404,139290],{"class":57},[36,139406,17440],{"class":4500},[36,139408,115],{"class":53},[36,139410,139297],{"class":57},[36,139412,63508],{"class":4500},[36,139414,115],{"class":53},[36,139416,139304],{"class":57},[36,139418,53801],{"class":53},[36,139420,139421,139423,139425,139427,139429,139431,139433,139435],{"class":38,"line":88},[36,139422,54638],{"class":53},[36,139424,56380],{"class":53794},[36,139426,56317],{"class":4500},[36,139428,115],{"class":53},[36,139430,69135],{"class":57},[36,139432,139321],{"class":53},[36,139434,56380],{"class":53794},[36,139436,53801],{"class":53},[36,139438,139439,139441,139443],{"class":38,"line":195},[36,139440,54279],{"class":53},[36,139442,69112],{"class":53794},[36,139444,53801],{"class":53},[4000,139446],{"style":128870,"src":139447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139449,139451],{"id":139450},"_142-css新特性","14.2 CSS新特性",[997,139453,139455],{"id":139454},"_1421-新增选择器","14.2.1 新增选择器",[24515,139457,139459],{"id":139458},"_14211-属性选择器","14.2.1.1 属性选择器",[4000,139461],{"style":128870,"src":139462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,139464,139466],{"className":129014,"code":139465,"language":129016,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,139467,139468,139483,139499],{"__ignoreMap":31},[36,139469,139470,139472,139474,139476,139478,139480],{"class":38,"line":39},[36,139471,913],{"class":53794},[36,139473,3566],{"class":53},[36,139475,618],{"class":4500},[36,139477,115],{"class":114},[36,139479,65187],{"class":57},[36,139481,139482],{"class":53},"] {\n",[36,139484,139485,139487,139489,139491,139493,139495,139497],{"class":38,"line":46},[36,139486,73382],{"class":49},[36,139488,53931],{"class":53},[36,139490,707],{"class":49},[36,139492,53986],{"class":114},[36,139494,54015],{"class":49},[36,139496,132594],{"class":49},[36,139498,3833],{"class":53},[36,139500,139501],{"class":38,"line":82},[36,139502,4103],{"class":53},[4000,139504],{"style":128870,"src":139505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139507,2731],{},[3680,139509,139510,139513,139516,139519],{},[436,139511,139512],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[436,139514,139515],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[436,139517,139518],{},"属性选择器也可以选择出来自定义的属性",[436,139520,139521,139523],{},[2839,139522,695],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24515,139525,139527],{"id":139526},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[4000,139529],{"style":128870,"src":139530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[433,139532,139533],{},[436,139534,139535],{},"fist-child",[26,139537,139539],{"className":129014,"code":139538,"language":129016,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,139540,139541,139546,139561,139581,139599],{"__ignoreMap":31},[36,139542,139543],{"class":38,"line":39},[36,139544,139545],{"class":42},"\u002F* 属性选择器 *\u002F\n",[36,139547,139548,139550,139552,139554,139556,139558],{"class":38,"line":46},[36,139549,913],{"class":53794},[36,139551,3566],{"class":53},[36,139553,618],{"class":4500},[36,139555,115],{"class":114},[36,139557,65187],{"class":57},[36,139559,139560],{"class":53},"] { }\n",[36,139562,139563,139565,139567,139569,139572,139575,139578],{"class":38,"line":82},[36,139564,913],{"class":53794},[36,139566,3566],{"class":53},[36,139568,519],{"class":4500},[36,139570,139571],{"class":114},"^=",[36,139573,139574],{"class":57},"\"icon\"",[36,139576,139577],{"class":53},"] { }  ",[36,139579,139580],{"class":42},"\u002F* 以 icon 开头 *\u002F\n",[36,139582,139583,139585,139587,139589,139592,139594,139596],{"class":38,"line":88},[36,139584,913],{"class":53794},[36,139586,3566],{"class":53},[36,139588,519],{"class":4500},[36,139590,139591],{"class":114},"$=",[36,139593,139574],{"class":57},[36,139595,139577],{"class":53},[36,139597,139598],{"class":42},"\u002F* 以 icon 结尾 *\u002F\n",[36,139600,139601,139603,139605,139607,139609,139611,139613],{"class":38,"line":195},[36,139602,913],{"class":53794},[36,139604,3566],{"class":53},[36,139606,519],{"class":4500},[36,139608,1244],{"class":114},[36,139610,139574],{"class":57},[36,139612,139577],{"class":53},[36,139614,139615],{"class":42},"\u002F* 包含 icon *\u002F\n",[19,139617,139618],{},"ul的第一个儿子文本为红色",[19,139620,139621],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,139623,139625],{"className":129014,"code":139624,"language":129016,"meta":31,"style":31},".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",[33,139626,139627,139633,139643,139647,139651,139656,139669,139682,139698,139715,139732],{"__ignoreMap":31},[36,139628,139629,139631],{"class":38,"line":39},[36,139630,129305],{"class":4500},[36,139632,18091],{"class":53},[36,139634,139635,139637,139639,139641],{"class":38,"line":46},[36,139636,73391],{"class":49},[36,139638,53931],{"class":53},[36,139640,59911],{"class":49},[36,139642,3833],{"class":53},[36,139644,139645],{"class":38,"line":82},[36,139646,4103],{"class":53},[36,139648,139649],{"class":38,"line":88},[36,139650,138474],{"class":53},[36,139652,139653],{"class":38,"line":195},[36,139654,139655],{"class":42},"\u002F* 结构伪类选择器 *\u002F\n",[36,139657,139658,139660,139663,139666],{"class":38,"line":1517},[36,139659,436],{"class":53794},[36,139661,139662],{"class":4500},":first-child",[36,139664,139665],{"class":53}," { }           ",[36,139667,139668],{"class":42},"\u002F* 第一个 *\u002F\n",[36,139670,139671,139673,139676,139679],{"class":38,"line":2421},[36,139672,436],{"class":53794},[36,139674,139675],{"class":4500},":last-child",[36,139677,139678],{"class":53}," { }            ",[36,139680,139681],{"class":42},"\u002F* 最后一个 *\u002F\n",[36,139683,139684,139686,139688,139690,139692,139695],{"class":38,"line":2446},[36,139685,436],{"class":53794},[36,139687,131928],{"class":4500},[36,139689,54],{"class":53},[36,139691,1188],{"class":49},[36,139693,139694],{"class":53},") { }          ",[36,139696,139697],{"class":42},"\u002F* 第2个 *\u002F\n",[36,139699,139700,139702,139704,139706,139709,139712],{"class":38,"line":2469},[36,139701,436],{"class":53794},[36,139703,131928],{"class":4500},[36,139705,54],{"class":53},[36,139707,139708],{"class":49},"2n",[36,139710,139711],{"class":53},") { }         ",[36,139713,139714],{"class":42},"\u002F* 偶数 *\u002F\n",[36,139716,139717,139719,139721,139723,139726,139729],{"class":38,"line":2492},[36,139718,436],{"class":53794},[36,139720,131928],{"class":4500},[36,139722,54],{"class":53},[36,139724,139725],{"class":49},"2n+1",[36,139727,139728],{"class":53},") { }       ",[36,139730,139731],{"class":42},"\u002F* 奇数 *\u002F\n",[36,139733,139734,139736,139738,139740,139743,139745],{"class":38,"line":4150},[36,139735,436],{"class":53794},[36,139737,131928],{"class":4500},[36,139739,54],{"class":53},[36,139741,139742],{"class":49},"-n+3",[36,139744,139728],{"class":53},[36,139746,139747],{"class":42},"\u002F* 前3个 *\u002F\n",[54105,139749,139752],{"className":139750},[139751],"example","\n  示例内容\n",[19,139754,139755],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3680,139757,139758],{},[436,139759,139760,139763],{},[33,139761,139762],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139765,139766],{},"也就是说它选择的是熊大",[433,139768,139769],{"start":1517},[436,139770,139771],{},"权重",[26,139773,139775],{"className":129014,"code":139774,"language":129016,"meta":31,"style":31},"\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",[33,139776,139777,139781,139791,139801,139815,139829,139843],{"__ignoreMap":31},[36,139778,139779],{"class":38,"line":39},[36,139780,139655],{"class":42},[36,139782,139783,139785,139787,139789],{"class":38,"line":46},[36,139784,436],{"class":53794},[36,139786,139662],{"class":4500},[36,139788,139665],{"class":53},[36,139790,139668],{"class":42},[36,139792,139793,139795,139797,139799],{"class":38,"line":82},[36,139794,436],{"class":53794},[36,139796,139675],{"class":4500},[36,139798,139678],{"class":53},[36,139800,139681],{"class":42},[36,139802,139803,139805,139807,139809,139811,139813],{"class":38,"line":88},[36,139804,436],{"class":53794},[36,139806,131928],{"class":4500},[36,139808,54],{"class":53},[36,139810,1188],{"class":49},[36,139812,139694],{"class":53},[36,139814,139697],{"class":42},[36,139816,139817,139819,139821,139823,139825,139827],{"class":38,"line":195},[36,139818,436],{"class":53794},[36,139820,131928],{"class":4500},[36,139822,54],{"class":53},[36,139824,139708],{"class":49},[36,139826,139711],{"class":53},[36,139828,139714],{"class":42},[36,139830,139831,139833,139835,139837,139839,139841],{"class":38,"line":1517},[36,139832,436],{"class":53794},[36,139834,131928],{"class":4500},[36,139836,54],{"class":53},[36,139838,139725],{"class":49},[36,139840,139728],{"class":53},[36,139842,139731],{"class":42},[36,139844,139845,139847,139849,139851,139853,139855],{"class":38,"line":2421},[36,139846,436],{"class":53794},[36,139848,131928],{"class":4500},[36,139850,54],{"class":53},[36,139852,139742],{"class":49},[36,139854,139728],{"class":53},[36,139856,139747],{"class":42},[19,139858,139859],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24515,139861,139863],{"id":139862},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139865,139866],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[4000,139868],{"style":128870,"src":139869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[433,139871,139872],{},[436,139873,2731],{},[3680,139875,139876,139879,139882,139885,139888,139891],{},[436,139877,139878],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[436,139880,139881],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[436,139883,139884],{},"语法： element::before {}",[436,139886,139887],{},"before 和 after 必须有 content 属性",[436,139889,139890],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[436,139892,139893],{},"伪元素选择器和标签选择器一样，权重为 1",[433,139895,139896],{"start":46},[436,139897,139898],{},"实例",[26,139900,139901],{"className":129014,"code":139774,"language":129016,"meta":31,"style":31},[33,139902,139903,139907,139917,139927,139941,139955,139969],{"__ignoreMap":31},[36,139904,139905],{"class":38,"line":39},[36,139906,139655],{"class":42},[36,139908,139909,139911,139913,139915],{"class":38,"line":46},[36,139910,436],{"class":53794},[36,139912,139662],{"class":4500},[36,139914,139665],{"class":53},[36,139916,139668],{"class":42},[36,139918,139919,139921,139923,139925],{"class":38,"line":82},[36,139920,436],{"class":53794},[36,139922,139675],{"class":4500},[36,139924,139678],{"class":53},[36,139926,139681],{"class":42},[36,139928,139929,139931,139933,139935,139937,139939],{"class":38,"line":88},[36,139930,436],{"class":53794},[36,139932,131928],{"class":4500},[36,139934,54],{"class":53},[36,139936,1188],{"class":49},[36,139938,139694],{"class":53},[36,139940,139697],{"class":42},[36,139942,139943,139945,139947,139949,139951,139953],{"class":38,"line":195},[36,139944,436],{"class":53794},[36,139946,131928],{"class":4500},[36,139948,54],{"class":53},[36,139950,139708],{"class":49},[36,139952,139711],{"class":53},[36,139954,139714],{"class":42},[36,139956,139957,139959,139961,139963,139965,139967],{"class":38,"line":1517},[36,139958,436],{"class":53794},[36,139960,131928],{"class":4500},[36,139962,54],{"class":53},[36,139964,139725],{"class":49},[36,139966,139728],{"class":53},[36,139968,139731],{"class":42},[36,139970,139971,139973,139975,139977,139979,139981],{"class":38,"line":2421},[36,139972,436],{"class":53794},[36,139974,131928],{"class":4500},[36,139976,54],{"class":53},[36,139978,139742],{"class":49},[36,139980,139728],{"class":53},[36,139982,139747],{"class":42},[4000,139984],{"style":128870,"src":139985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[433,139987,139988],{"start":82},[436,139989,139990],{},"使用场景1",[4000,139992],{"style":128870,"src":139993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139995,139996],{},"不需要再加盒子来整红色那部分了",[26,139998,140000],{"className":129014,"code":139999,"language":129016,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,140001,140002,140007,140016,140027,140037,140041,140050,140061,140071],{"__ignoreMap":31},[36,140003,140004],{"class":38,"line":39},[36,140005,140006],{"class":42},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,140008,140009,140011,140014],{"class":38,"line":46},[36,140010,54105],{"class":53794},[36,140012,140013],{"class":4500},"::before",[36,140015,18091],{"class":53},[36,140017,140018,140021,140023,140025],{"class":38,"line":82},[36,140019,140020],{"class":49},"  content",[36,140022,53931],{"class":53},[36,140024,10179],{"class":57},[36,140026,3833],{"class":53},[36,140028,140029,140031,140033,140035],{"class":38,"line":88},[36,140030,130630],{"class":49},[36,140032,53931],{"class":53},[36,140034,63357],{"class":49},[36,140036,3833],{"class":53},[36,140038,140039],{"class":38,"line":195},[36,140040,4103],{"class":53},[36,140042,140043,140045,140048],{"class":38,"line":1517},[36,140044,54105],{"class":53794},[36,140046,140047],{"class":4500},"::after",[36,140049,18091],{"class":53},[36,140051,140052,140054,140056,140059],{"class":38,"line":2421},[36,140053,140020],{"class":49},[36,140055,53931],{"class":53},[36,140057,140058],{"class":57},"\"→\"",[36,140060,3833],{"class":53},[36,140062,140063,140065,140067,140069],{"class":38,"line":2446},[36,140064,73391],{"class":49},[36,140066,53931],{"class":53},[36,140068,64558],{"class":49},[36,140070,3833],{"class":53},[36,140072,140073],{"class":38,"line":2469},[36,140074,4103],{"class":53},[4000,140076],{"style":128870,"src":140077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140079,140080],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[4000,140082],{"style":128870,"src":140083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140085,140086],{},"但是在引用时需要先转义一下",[19,140088,140089],{},"content='\\e930'",[433,140091,140092],{"start":88},[436,140093,140094],{},"使用场景2",[19,140096,140097],{},"仿土豆效果",[19,140099,140100],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,140102,140103],{"className":129014,"code":139999,"language":129016,"meta":31,"style":31},[33,140104,140105,140109,140117,140127,140137,140141,140149,140159,140169],{"__ignoreMap":31},[36,140106,140107],{"class":38,"line":39},[36,140108,140006],{"class":42},[36,140110,140111,140113,140115],{"class":38,"line":46},[36,140112,54105],{"class":53794},[36,140114,140013],{"class":4500},[36,140116,18091],{"class":53},[36,140118,140119,140121,140123,140125],{"class":38,"line":82},[36,140120,140020],{"class":49},[36,140122,53931],{"class":53},[36,140124,10179],{"class":57},[36,140126,3833],{"class":53},[36,140128,140129,140131,140133,140135],{"class":38,"line":88},[36,140130,130630],{"class":49},[36,140132,53931],{"class":53},[36,140134,63357],{"class":49},[36,140136,3833],{"class":53},[36,140138,140139],{"class":38,"line":195},[36,140140,4103],{"class":53},[36,140142,140143,140145,140147],{"class":38,"line":1517},[36,140144,54105],{"class":53794},[36,140146,140047],{"class":4500},[36,140148,18091],{"class":53},[36,140150,140151,140153,140155,140157],{"class":38,"line":2421},[36,140152,140020],{"class":49},[36,140154,53931],{"class":53},[36,140156,140058],{"class":57},[36,140158,3833],{"class":53},[36,140160,140161,140163,140165,140167],{"class":38,"line":2446},[36,140162,73391],{"class":49},[36,140164,53931],{"class":53},[36,140166,64558],{"class":49},[36,140168,3833],{"class":53},[36,140170,140171],{"class":38,"line":2469},[36,140172,4103],{"class":53},[4000,140174],{"style":128870,"src":140175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[433,140177,140178],{"start":195},[436,140179,140180],{},"使用场景3",[19,140182,140183],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,140185,140187],{"className":129014,"code":140186,"language":129016,"meta":31,"style":31},".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",[33,140188,140189,140195,140205,140209,140213,140217,140225,140235,140245,140249,140257,140267,140277],{"__ignoreMap":31},[36,140190,140191,140193],{"class":38,"line":39},[36,140192,132862],{"class":4500},[36,140194,18091],{"class":53},[36,140196,140197,140199,140201,140203],{"class":38,"line":46},[36,140198,133494],{"class":49},[36,140200,53931],{"class":53},[36,140202,26253],{"class":49},[36,140204,3833],{"class":53},[36,140206,140207],{"class":38,"line":82},[36,140208,4103],{"class":53},[36,140210,140211],{"class":38,"line":88},[36,140212,138474],{"class":53},[36,140214,140215],{"class":38,"line":195},[36,140216,140006],{"class":42},[36,140218,140219,140221,140223],{"class":38,"line":1517},[36,140220,54105],{"class":53794},[36,140222,140013],{"class":4500},[36,140224,18091],{"class":53},[36,140226,140227,140229,140231,140233],{"class":38,"line":2421},[36,140228,140020],{"class":49},[36,140230,53931],{"class":53},[36,140232,10179],{"class":57},[36,140234,3833],{"class":53},[36,140236,140237,140239,140241,140243],{"class":38,"line":2446},[36,140238,130630],{"class":49},[36,140240,53931],{"class":53},[36,140242,63357],{"class":49},[36,140244,3833],{"class":53},[36,140246,140247],{"class":38,"line":2469},[36,140248,4103],{"class":53},[36,140250,140251,140253,140255],{"class":38,"line":2492},[36,140252,54105],{"class":53794},[36,140254,140047],{"class":4500},[36,140256,18091],{"class":53},[36,140258,140259,140261,140263,140265],{"class":38,"line":4150},[36,140260,140020],{"class":49},[36,140262,53931],{"class":53},[36,140264,140058],{"class":57},[36,140266,3833],{"class":53},[36,140268,140269,140271,140273,140275],{"class":38,"line":4155},[36,140270,73391],{"class":49},[36,140272,53931],{"class":53},[36,140274,64558],{"class":49},[36,140276,3833],{"class":53},[36,140278,140279],{"class":38,"line":4161},[36,140280,4103],{"class":53},[19,140282,140283],{},"div {\nmargin: 0 auto;\n}",[26,140285,140288],{"className":140286,"code":140287,"language":690},[688],"\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",[33,140289,140287],{"__ignoreMap":31},[19,140291,140292],{},"如果想让多个元素都发生变化",[19,140294,140295],{},"不能如下操作：",[19,140297,140298],{},"transition: width 2s ease 0.5s;",[19,140300,140301],{},"transition: height 2s ease 0.5s;不对！！！",[19,140303,140304],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140306,140307],{},"使用如下：加逗号隔开",[19,140309,140310],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140312,140313],{},"transition all 2s ease;",[997,140315,140317],{"id":140316},"_1426-过渡练习","14.2.6 过渡练习",[433,140319,140320],{},[436,140321,140322],{},"进度条",[4000,140324],{"style":128870,"src":140325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,140327,140329],{"className":129014,"code":140328,"language":129016,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,140330,140331,140337,140355],{"__ignoreMap":31},[36,140332,140333,140335],{"class":38,"line":39},[36,140334,54105],{"class":53794},[36,140336,18091],{"class":53},[36,140338,140339,140342,140344,140346,140349,140351,140353],{"class":38,"line":46},[36,140340,140341],{"class":49},"  transition",[36,140343,53931],{"class":53},[36,140345,30632],{"class":49},[36,140347,140348],{"class":49}," 0.3",[36,140350,3371],{"class":114},[36,140352,81163],{"class":49},[36,140354,3833],{"class":53},[36,140356,140357],{"class":38,"line":82},[36,140358,4103],{"class":53},[433,140360,140361],{"start":46},[436,140362,140363],{},"小米logo",[19,140365,140366],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,140368,140370],{"className":129014,"code":140369,"language":129016,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,140371,140372,140377,140383,140399,140404],{"__ignoreMap":31},[36,140373,140374],{"class":38,"line":39},[36,140375,140376],{"class":42},"\u002F* CSS3 过渡 *\u002F\n",[36,140378,140379,140381],{"class":38,"line":46},[36,140380,54105],{"class":53794},[36,140382,18091],{"class":53},[36,140384,140385,140387,140389,140391,140393,140395,140397],{"class":38,"line":82},[36,140386,140341],{"class":49},[36,140388,53931],{"class":53},[36,140390,30632],{"class":49},[36,140392,140348],{"class":49},[36,140394,3371],{"class":114},[36,140396,81163],{"class":49},[36,140398,3833],{"class":53},[36,140400,140401],{"class":38,"line":88},[36,140402,140403],{"class":42},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,140405,140406],{"class":38,"line":195},[36,140407,4103],{"class":53},[19,140409,140410],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2602,140412,140413],{},"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":31,"searchDepth":46,"depth":46,"links":140415},[140416,140421],{"id":138747,"depth":46,"text":138748,"children":140417},[140418,140419,140420],{"id":138751,"depth":82,"text":138752},{"id":138828,"depth":82,"text":138829},{"id":139159,"depth":82,"text":139160},{"id":139450,"depth":46,"text":139451,"children":140422},[140423,140424],{"id":139454,"depth":82,"text":139455},{"id":140316,"depth":82,"text":140317},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138739,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140431,"title":140432,"body":140433,"description":2630,"extension":2631,"meta":142177,"navigation":545,"path":142178,"seo":142179,"stem":142180,"__hash__":142181},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140434,"toc":142158},[140435,140438,140442,140445,140451,140457,140461,140463,140466,140469,140472,140475,140478,140481,140484,140488,140492,140495,140498,140501,140505,140508,140511,140516,140519,140522,140525,140529,140532,140541,140544,140547,140551,140554,140557,140562,140569,140583,140591,140598,140603,140606,140609,140612,140619,140623,140629,140635,140638,140641,140646,140652,140654,140662,140667,140670,140676,140678,140683,140688,140691,140693,140698,140701,140706,140711,140745,140749,140753,140756,140760,140763,140849,140852,140889,140892,140928,140932,140937,140950,141004,141006,141034,141036,141064,141070,141084,141086,141130,141132,141176,141179,141186,141197,141199,141226,141228,141254,141261,141277,141279,141373,141375,141469,141476,141479,141484,141490,141564,141567,141569,141605,141607,141643,141646,141653,141672,141675,141678,141680,141705,141707,141731,141734,141737,141767,141771,141774,141837,141839,141905,141907,141971,141974,142006,142008,142034,142036,142062,142065,142096,142098,142124,142126,142152,142155],[10,140436,140432],{"id":140437},"_15-品优购项目上篇-搭建与公共模块",[14,140439,140441],{"id":140440},"_151-项目规划","15.1 项目规划",[4000,140443],{"style":128870,"src":140444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140446,140447,140450],{},[2839,140448,140449],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140452,140453,140456],{},[2839,140454,140455],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140458,140460],{"id":140459},"_152-项目介绍","15.2 项目介绍",[19,140462,140449],{},[4000,140464],{"style":128870,"src":140465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140467,140468],{},"主页：",[4000,140470],{"style":128870,"src":140471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140473,140474],{},"列表页：",[4000,140476],{"style":128870,"src":140477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140479,140480],{},"注册页：",[4000,140482],{"style":128870,"src":140483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140485,140487],{"id":140486},"_153-项目搭建工作","15.3 项目搭建工作",[997,140489,140491],{"id":140490},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[4000,140493],{"style":128870,"src":140494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140496,140497],{},"经常更换的图片要放到upload文件夹中",[19,140499,140500],{},"不经常换的放到images文件夹中",[997,140502,140504],{"id":140503},"_1532-创建文件如下","15.3.2 创建文件如下",[4000,140506],{"style":128870,"src":140507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[4000,140509],{"style":128870,"src":140510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140512,140513],{},[2839,140514,140515],{},"初始化样式：",[19,140517,140518],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140520,140521],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140523,140524],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[997,140526,140528],{"id":140527},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140530,140531],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140533,140534,140535,140540],{},"这里最典型的应用就是 ",[2839,140536,140537],{},[33,140538,140539],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[4000,140542],{"style":128870,"src":140543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140545,140546],{},"通过link方法来引入",[997,140548,140550],{"id":140549},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[4000,140552],{"style":128870,"src":140553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140555,140556],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[433,140558,140559],{},[436,140560,140561],{},"制作favicon图标",[19,140563,140564,140565,140568],{},"①把品优购图标切成 ",[33,140566,140567],{},"png"," 图片",[19,140570,140571,140572,140574,140575,140578,140579],{},"②把 ",[33,140573,140567],{}," 图片转换为 ",[33,140576,140577],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2923,140580,140581],{"href":140581,"rel":140582},"http:\u002F\u002Fwww.bitbug.net\u002F",[26381],[433,140584,140585,140588],{"start":46},[436,140586,140587],{},"favicon图标放到网站根目录下",[436,140589,140590],{},"HTML页面引入favicon",[19,140592,140593,140594,140597],{},"在html 页面里面的 ",[33,140595,140596],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140599,140600],{},[33,140601,140602],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140604,140605],{},"复制这行代码或者在生成这个的网站进行复制",[4000,140607],{"style":128870,"src":140608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140610,140611],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140613,140614,140615],{},"例如:",[2923,140616,140617],{"href":140617,"rel":140618},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26381],[997,140620,140622],{"id":140621},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140624,140625,140628],{},[2839,140626,140627],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140630,140631,140634],{},[2839,140632,140633],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140636,140637],{},"页面必须有三个标签用来符合 SEO 优化",[4000,140639],{"style":128870,"src":140640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[433,140642,140643],{},[436,140644,140645],{},"title网站标题",[19,140647,140648,140651],{},[2839,140649,140650],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140653,71277],{},[3680,140655,140656,140659],{},[436,140657,140658],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[436,140660,140661],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[433,140663,140664],{"start":46},[436,140665,140666],{},"description网站描述",[19,140668,140669],{},"简要说明我们网站主要是做什么的",[19,140671,140672,140675],{},[2839,140673,140674],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140677,71277],{},[19,140679,140680],{},[33,140681,140682],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[433,140684,140685],{"start":82},[436,140686,140687],{},"keywords关键词",[19,140689,140690],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140692,71277],{},[19,140694,140695],{},[33,140696,140697],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140699,140700],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140702,140703],{},[2839,140704,140705],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[433,140707,140708],{"start":88},[436,140709,140710],{},"代码总结",[26,140712,140713],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,140714,140715,140719,140733,140737],{"__ignoreMap":31},[36,140716,140717],{"class":38,"line":39},[36,140718,133125],{"class":42},[36,140720,140721,140723,140725,140727,140729,140731],{"class":38,"line":46},[36,140722,1507],{"class":53},[36,140724,54105],{"class":53794},[36,140726,55980],{"class":4500},[36,140728,115],{"class":53},[36,140730,133138],{"class":57},[36,140732,53801],{"class":53},[36,140734,140735],{"class":38,"line":82},[36,140736,133145],{"class":53},[36,140738,140739,140741,140743],{"class":38,"line":88},[36,140740,54279],{"class":53},[36,140742,54105],{"class":53794},[36,140744,53801],{"class":53},[14,140746,140748],{"id":140747},"_154-项目公共部分制作","15.4 项目公共部分制作",[997,140750,140752],{"id":140751},"_1541-常用模块类命名","15.4.1 常用模块类命名",[4000,140754],{"style":128870,"src":140755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[997,140757,140759],{"id":140758},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140761,140762],{},"布局思路：",[3680,140764,140765,140768,140771,140793,140826],{},[436,140766,140767],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[436,140769,140770],{},"里面包含版心的盒子",[436,140772,140773,140774],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3680,140775,140776,140784,140790],{},[436,140777,140778,140779,708,140781,140783],{},"1 号盒子 里面包含一个",[33,140780,3680],{},[33,140782,3680],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[436,140785,140786,140787,140789],{},"里面的内容是水平排列，所以需要给",[33,140788,436],{},"设置浮动",[436,140791,140792],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[436,140794,140795,140796],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3680,140797,140798,140812,140817],{},[436,140799,140800,140801,708,140803,140805,140806,140808,140809,140811],{},"2 号盒子 里面包含一个",[33,140802,3680],{},[33,140804,3680],{},"包裹",[33,140807,436],{},"，中间的",[33,140810,3595],{},"可以用样式去设置，也可以用字符 |",[436,140813,140814,140815,140789],{},"里面内容水平排列，给",[33,140816,436],{},[436,140818,140819,140820,140822,140823,140825],{},"找到里面所有偶数的 ",[33,140821,436],{}," 设置样式（偶数的 ",[33,140824,436],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[436,140827,140828,140829],{},"需要用到字体图标",[3680,140830,140831,140837,140840,140843,140846],{},[436,140832,140833,140834],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,140835,140836],{},"arrow-icon",[436,140838,140839],{},"先要引入字体图片的资源",[436,140841,140842],{},"在样式里面利用 font-face 来进行声明",[436,140844,140845],{},"在伪元素的 content属性设置 图标的编码",[436,140847,140848],{},"给伪元素设置font-family属性",[19,140850,140851],{},"结构实例代码：",[26,140853,140855],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,140856,140857,140865,140875,140885],{"__ignoreMap":31},[36,140858,140859,140861,140863],{"class":38,"line":39},[36,140860,54105],{"class":53794},[36,140862,140013],{"class":4500},[36,140864,18091],{"class":53},[36,140866,140867,140869,140871,140873],{"class":38,"line":46},[36,140868,140020],{"class":49},[36,140870,53931],{"class":53},[36,140872,10179],{"class":57},[36,140874,3833],{"class":53},[36,140876,140877,140879,140881,140883],{"class":38,"line":82},[36,140878,130630],{"class":49},[36,140880,53931],{"class":53},[36,140882,63357],{"class":49},[36,140884,3833],{"class":53},[36,140886,140887],{"class":38,"line":88},[36,140888,4103],{"class":53},[19,140890,140891],{},"样式实例代码：",[26,140893,140894],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,140895,140896,140904,140914,140924],{"__ignoreMap":31},[36,140897,140898,140900,140902],{"class":38,"line":39},[36,140899,54105],{"class":53794},[36,140901,140013],{"class":4500},[36,140903,18091],{"class":53},[36,140905,140906,140908,140910,140912],{"class":38,"line":46},[36,140907,140020],{"class":49},[36,140909,53931],{"class":53},[36,140911,10179],{"class":57},[36,140913,3833],{"class":53},[36,140915,140916,140918,140920,140922],{"class":38,"line":82},[36,140917,130630],{"class":49},[36,140919,53931],{"class":53},[36,140921,63357],{"class":49},[36,140923,3833],{"class":53},[36,140925,140926],{"class":38,"line":88},[36,140927,4103],{"class":53},[997,140929,140931],{"id":140930},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3680,140933,140934],{},[436,140935,140936],{},"header 盒子必须要有高度",[19,140938,140939,140940,140942,140943],{},"1 号盒子是 ",[33,140941,134026],{}," 标志定位，在正常开发过程中， ",[2839,140944,140945,140946,140949],{},"logo的布局其实是有讲究的，需要进行 ",[33,140947,140948],{},"logoSEO","的优化 （★★★）",[3680,140951,140952,140960,140968,140995],{},[436,140953,140954,140956,140957,140959],{},[33,140955,134026],{}," 里面首先放一个 ",[33,140958,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[436,140961,140962,140964,140965,140967],{},[33,140963,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,140966,134026],{}," 的背景图片给链接即可",[436,140969,140970,140971],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3680,140972,140973,140988],{},[436,140974,140975,140976,140979,140980,140983,140984,140987],{},"方法1：",[33,140977,140978],{},"text-indent"," 移到盒子外面（",[33,140981,140982],{},"text-indent: -9999px",") ，然后 ",[33,140985,140986],{},"overflow:hidden"," ，淘宝的做法",[436,140989,140990,140991,140994],{},"方法2：直接给 ",[33,140992,140993],{},"font-size: 0;"," 就看不到文字了，京东的做法",[436,140996,140997,140998,141000,141001,141003],{},"最后给链接一个 ",[33,140999,53901],{}," 属性，这样鼠标放到 ",[33,141002,134026],{}," 上就可以看到提示文字了",[19,141005,140851],{},[26,141007,141008],{"className":129761,"code":134246,"language":129763,"meta":31,"style":31},[33,141009,141010],{"__ignoreMap":31},[36,141011,141012,141014,141016,141018,141020,141022,141024,141026,141028,141030,141032],{"class":38,"line":39},[36,141013,1507],{"class":53},[36,141015,2923],{"class":53794},[36,141017,63545],{"class":4500},[36,141019,115],{"class":53},[36,141021,134261],{"class":57},[36,141023,134264],{"class":4500},[36,141025,115],{"class":53},[36,141027,134269],{"class":57},[36,141029,134272],{"class":53},[36,141031,2923],{"class":53794},[36,141033,53801],{"class":53},[19,141035,140891],{},[26,141037,141038],{"className":129761,"code":134246,"language":129763,"meta":31,"style":31},[33,141039,141040],{"__ignoreMap":31},[36,141041,141042,141044,141046,141048,141050,141052,141054,141056,141058,141060,141062],{"class":38,"line":39},[36,141043,1507],{"class":53},[36,141045,2923],{"class":53794},[36,141047,63545],{"class":4500},[36,141049,115],{"class":53},[36,141051,134261],{"class":57},[36,141053,134264],{"class":4500},[36,141055,115],{"class":53},[36,141057,134269],{"class":57},[36,141059,134272],{"class":53},[36,141061,2923],{"class":53794},[36,141063,53801],{"class":53},[19,141065,141066,141067,141069],{},"2 号盒子是 ",[33,141068,134039],{}," 搜索模块定位",[3680,141071,141072,141075,141078,141081],{},[436,141073,141074],{},"search盒子利用定位的方式放在对应的位置",[436,141076,141077],{},"search盒子设置绝对定位，header盒子设置相对定位",[436,141079,141080],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[436,141082,141083],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141085,140851],{},[26,141087,141088],{"className":129014,"code":134333,"language":129016,"meta":31,"style":31},[33,141089,141090,141112,141116,141126],{"__ignoreMap":31},[36,141091,141092,141094,141096,141098,141100,141102,141104,141106,141108,141110],{"class":38,"line":39},[36,141093,54105],{"class":53794},[36,141095,14958],{"class":53},[36,141097,19],{"class":53794},[36,141099,14958],{"class":53},[36,141101,10],{"class":53794},[36,141103,14958],{"class":53},[36,141105,3680],{"class":53794},[36,141107,14958],{"class":53},[36,141109,436],{"class":53794},[36,141111,18091],{"class":53},[36,141113,141114],{"class":38,"line":46},[36,141115,134362],{"class":42},[36,141117,141118,141120,141122,141124],{"class":38,"line":82},[36,141119,130630],{"class":49},[36,141121,53931],{"class":53},[36,141123,63357],{"class":49},[36,141125,3833],{"class":53},[36,141127,141128],{"class":38,"line":88},[36,141129,4103],{"class":53},[19,141131,140891],{},[26,141133,141134],{"className":129014,"code":134333,"language":129016,"meta":31,"style":31},[33,141135,141136,141158,141162,141172],{"__ignoreMap":31},[36,141137,141138,141140,141142,141144,141146,141148,141150,141152,141154,141156],{"class":38,"line":39},[36,141139,54105],{"class":53794},[36,141141,14958],{"class":53},[36,141143,19],{"class":53794},[36,141145,14958],{"class":53},[36,141147,10],{"class":53794},[36,141149,14958],{"class":53},[36,141151,3680],{"class":53794},[36,141153,14958],{"class":53},[36,141155,436],{"class":53794},[36,141157,18091],{"class":53},[36,141159,141160],{"class":38,"line":46},[36,141161,134362],{"class":42},[36,141163,141164,141166,141168,141170],{"class":38,"line":82},[36,141165,130630],{"class":49},[36,141167,53931],{"class":53},[36,141169,63357],{"class":49},[36,141171,3833],{"class":53},[36,141173,141174],{"class":38,"line":88},[36,141175,4103],{"class":53},[19,141177,141178],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141180,141181,141182,141185],{},"3 号盒子是 ",[33,141183,141184],{},"hotwords"," 热词模块定位",[3680,141187,141188,141191,141194],{},[436,141189,141190],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[436,141192,141193],{},"给里面所有的a标签设置 左右10px的外边距",[436,141195,141196],{},"给第一个a标签设置文字变红色（#c81623）",[19,141198,140851],{},[26,141200,141202],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,141203,141204,141210,141222],{"__ignoreMap":31},[36,141205,141206,141208],{"class":38,"line":39},[36,141207,54105],{"class":53794},[36,141209,18091],{"class":53},[36,141211,141212,141214,141216,141218,141220],{"class":38,"line":46},[36,141213,72956],{"class":49},[36,141215,53931],{"class":53},[36,141217,713],{"class":49},[36,141219,54050],{"class":49},[36,141221,3833],{"class":53},[36,141223,141224],{"class":38,"line":82},[36,141225,4103],{"class":53},[19,141227,140891],{},[26,141229,141230],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,141231,141232,141238,141250],{"__ignoreMap":31},[36,141233,141234,141236],{"class":38,"line":39},[36,141235,54105],{"class":53794},[36,141237,18091],{"class":53},[36,141239,141240,141242,141244,141246,141248],{"class":38,"line":46},[36,141241,72956],{"class":49},[36,141243,53931],{"class":53},[36,141245,713],{"class":49},[36,141247,54050],{"class":49},[36,141249,3833],{"class":53},[36,141251,141252],{"class":38,"line":82},[36,141253,4103],{"class":53},[19,141255,141256,141257,141260],{},"4 号盒子是 ",[33,141258,141259],{},"shopcar"," 购物车模块",[3680,141262,141263,141268,141271,141274],{},[436,141264,125798,141265,141267],{},[33,141266,141259],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[436,141269,141270],{},"count 统计部分用绝对定位做",[436,141272,141273],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[436,141275,141276],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141278,140851],{},[26,141280,141281],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,141282,141283,141287,141301,141305,141319,141323,141337,141341,141355,141359],{"__ignoreMap":31},[36,141284,141285],{"class":38,"line":39},[36,141286,134452],{"class":42},[36,141288,141289,141291,141293,141295,141297,141299],{"class":38,"line":46},[36,141290,134457],{"class":4500},[36,141292,82290],{"class":53},[36,141294,131374],{"class":49},[36,141296,53931],{"class":53},[36,141298,134466],{"class":49},[36,141300,131944],{"class":53},[36,141302,141303],{"class":38,"line":82},[36,141304,134473],{"class":42},[36,141306,141307,141309,141311,141313,141315,141317],{"class":38,"line":88},[36,141308,134478],{"class":4500},[36,141310,82290],{"class":53},[36,141312,131374],{"class":49},[36,141314,53931],{"class":53},[36,141316,57255],{"class":49},[36,141318,131944],{"class":53},[36,141320,141321],{"class":38,"line":195},[36,141322,134493],{"class":42},[36,141324,141325,141327,141329,141331,141333,141335],{"class":38,"line":1517},[36,141326,134498],{"class":4500},[36,141328,82290],{"class":53},[36,141330,131374],{"class":49},[36,141332,53931],{"class":53},[36,141334,57322],{"class":49},[36,141336,131944],{"class":53},[36,141338,141339],{"class":38,"line":2421},[36,141340,134513],{"class":42},[36,141342,141343,141345,141347,141349,141351,141353],{"class":38,"line":2446},[36,141344,134518],{"class":4500},[36,141346,82290],{"class":53},[36,141348,131374],{"class":49},[36,141350,53931],{"class":53},[36,141352,88712],{"class":49},[36,141354,131944],{"class":53},[36,141356,141357],{"class":38,"line":2469},[36,141358,134533],{"class":42},[36,141360,141361,141363,141365,141367,141369,141371],{"class":38,"line":2492},[36,141362,134538],{"class":4500},[36,141364,82290],{"class":53},[36,141366,131374],{"class":49},[36,141368,53931],{"class":53},[36,141370,134547],{"class":49},[36,141372,131944],{"class":53},[19,141374,140891],{},[26,141376,141377],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,141378,141379,141383,141397,141401,141415,141419,141433,141437,141451,141455],{"__ignoreMap":31},[36,141380,141381],{"class":38,"line":39},[36,141382,134452],{"class":42},[36,141384,141385,141387,141389,141391,141393,141395],{"class":38,"line":46},[36,141386,134457],{"class":4500},[36,141388,82290],{"class":53},[36,141390,131374],{"class":49},[36,141392,53931],{"class":53},[36,141394,134466],{"class":49},[36,141396,131944],{"class":53},[36,141398,141399],{"class":38,"line":82},[36,141400,134473],{"class":42},[36,141402,141403,141405,141407,141409,141411,141413],{"class":38,"line":88},[36,141404,134478],{"class":4500},[36,141406,82290],{"class":53},[36,141408,131374],{"class":49},[36,141410,53931],{"class":53},[36,141412,57255],{"class":49},[36,141414,131944],{"class":53},[36,141416,141417],{"class":38,"line":195},[36,141418,134493],{"class":42},[36,141420,141421,141423,141425,141427,141429,141431],{"class":38,"line":1517},[36,141422,134498],{"class":4500},[36,141424,82290],{"class":53},[36,141426,131374],{"class":49},[36,141428,53931],{"class":53},[36,141430,57322],{"class":49},[36,141432,131944],{"class":53},[36,141434,141435],{"class":38,"line":2421},[36,141436,134513],{"class":42},[36,141438,141439,141441,141443,141445,141447,141449],{"class":38,"line":2446},[36,141440,134518],{"class":4500},[36,141442,82290],{"class":53},[36,141444,131374],{"class":49},[36,141446,53931],{"class":53},[36,141448,88712],{"class":49},[36,141450,131944],{"class":53},[36,141452,141453],{"class":38,"line":2469},[36,141454,134533],{"class":42},[36,141456,141457,141459,141461,141463,141465,141467],{"class":38,"line":2492},[36,141458,134538],{"class":4500},[36,141460,82290],{"class":53},[36,141462,131374],{"class":49},[36,141464,53931],{"class":53},[36,141466,134547],{"class":49},[36,141468,131944],{"class":53},[997,141470,141472,141473,141475],{"id":141471},"_1544-nav导航模块制作","15.4.4 ",[33,141474,56207],{},"导航模块制作",[4000,141477],{"style":128870,"src":141478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141480,141481,141483],{},[33,141482,56207],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141485,141486,141487],{},"1 号盒子左侧浮动，",[33,141488,141489],{},"dropdown",[3680,141491,141492,141502,141510,141516,141524,141534,141542,141553],{},[436,141493,141494,141495,1292,141498,141501],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,141496,141497],{},".dt",[33,141499,141500],{},".dd"," 两个盒子",[436,141503,141504,141506,141507,141509],{},[33,141505,141497],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,141508,141500],{}," 挤到下面去了",[436,141511,141512,141513,141515],{},"给 ",[33,141514,141500],{}," 盒子设置宽度 和 高度，以及背景颜色",[436,141517,141512,141518,141520,141521,122702],{},[33,141519,141500],{}," 盒子里面定义 无序列表 （",[33,141522,141523],{},"ul > li > a",[436,141525,141526,141527,141529,141530,141533],{},"每个 ",[33,141528,436],{}," 都有一个高度（",[33,141531,141532],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[436,141535,141512,141536,141538,141539,122702],{},[33,141537,436],{}," 里面的a设置文字大小（",[33,141540,141541],{},"14px",[436,141543,141512,141544,141546,141547,141549,141550,141552],{},[33,141545,436],{}," 设置 ",[33,141548,130175],{},"，当鼠标移入的时候，让",[33,141551,436],{},"的背景变成白色，让里面的文字变成红色",[436,141554,141555,141557,141558,141560,141561,141563],{},[33,141556,436],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,141559,436],{},"的右侧，那么给",[33,141562,436],{},"设置相对定位",[19,141565,141566],{},"一定要注意相关性",[19,141568,140851],{},[26,141570,141571],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,141572,141573,141581,141591,141601],{"__ignoreMap":31},[36,141574,141575,141577,141579],{"class":38,"line":39},[36,141576,54105],{"class":53794},[36,141578,140013],{"class":4500},[36,141580,18091],{"class":53},[36,141582,141583,141585,141587,141589],{"class":38,"line":46},[36,141584,140020],{"class":49},[36,141586,53931],{"class":53},[36,141588,10179],{"class":57},[36,141590,3833],{"class":53},[36,141592,141593,141595,141597,141599],{"class":38,"line":82},[36,141594,130630],{"class":49},[36,141596,53931],{"class":53},[36,141598,63357],{"class":49},[36,141600,3833],{"class":53},[36,141602,141603],{"class":38,"line":88},[36,141604,4103],{"class":53},[19,141606,140891],{},[26,141608,141609],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,141610,141611,141619,141629,141639],{"__ignoreMap":31},[36,141612,141613,141615,141617],{"class":38,"line":39},[36,141614,54105],{"class":53794},[36,141616,140013],{"class":4500},[36,141618,18091],{"class":53},[36,141620,141621,141623,141625,141627],{"class":38,"line":46},[36,141622,140020],{"class":49},[36,141624,53931],{"class":53},[36,141626,10179],{"class":57},[36,141628,3833],{"class":53},[36,141630,141631,141633,141635,141637],{"class":38,"line":82},[36,141632,130630],{"class":49},[36,141634,53931],{"class":53},[36,141636,63357],{"class":49},[36,141638,3833],{"class":53},[36,141640,141641],{"class":38,"line":88},[36,141642,4103],{"class":53},[19,141644,141645],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141647,141648,141649,141652],{},"2 号盒子左侧浮动，",[33,141650,141651],{},"navitems"," 导航栏组",[3680,141654,141655,141660,141669],{},[436,141656,141657,141658],{},"里面结构是 ",[33,141659,141523],{},[436,141661,141662,141663,141665,141666,141668],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,141664,2923],{},"左右的",[33,141667,33387],{},"把两侧撑开",[436,141670,141671],{},"让文字垂直居中（行高等于高度）",[4000,141673],{"style":128870,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141676,141677],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141679,140851],{},[26,141681,141683],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,141684,141685,141691,141701],{"__ignoreMap":31},[36,141686,141687,141689],{"class":38,"line":39},[36,141688,132862],{"class":4500},[36,141690,18091],{"class":53},[36,141692,141693,141695,141697,141699],{"class":38,"line":46},[36,141694,133494],{"class":49},[36,141696,53931],{"class":53},[36,141698,26253],{"class":49},[36,141700,3833],{"class":53},[36,141702,141703],{"class":38,"line":82},[36,141704,4103],{"class":53},[19,141706,140891],{},[26,141708,141709],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,141710,141711,141717,141727],{"__ignoreMap":31},[36,141712,141713,141715],{"class":38,"line":39},[36,141714,132862],{"class":4500},[36,141716,18091],{"class":53},[36,141718,141719,141721,141723,141725],{"class":38,"line":46},[36,141720,133494],{"class":49},[36,141722,53931],{"class":53},[36,141724,26253],{"class":49},[36,141726,3833],{"class":53},[36,141728,141729],{"class":38,"line":82},[36,141730,4103],{"class":53},[19,141732,141733],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[4000,141735],{"style":128870,"src":141736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,141738,141739],{"className":129014,"code":133171,"language":129016,"meta":31,"style":31},[33,141740,141741,141747,141763],{"__ignoreMap":31},[36,141742,141743,141745],{"class":38,"line":39},[36,141744,54105],{"class":53794},[36,141746,18091],{"class":53},[36,141748,141749,141751,141753,141755,141757,141759,141761],{"class":38,"line":46},[36,141750,73382],{"class":49},[36,141752,53931],{"class":53},[36,141754,707],{"class":49},[36,141756,53986],{"class":114},[36,141758,54015],{"class":49},[36,141760,132406],{"class":49},[36,141762,3833],{"class":53},[36,141764,141765],{"class":38,"line":82},[36,141766,4103],{"class":53},[997,141768,141770],{"id":141769},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[4000,141772],{"style":128870,"src":141773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3680,141775,141776,141781,141786],{},[436,141777,141778,141780],{},[33,141779,134216],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[436,141782,141783,141785],{},[33,141784,134216],{}," 里面有一个大的版心",[436,141787,141788,141789,141792,141793],{},"版心里面包含 1 号盒子，",[33,141790,141791],{},"mod_service"," 是服务模块，mod 是模块的意思",[3680,141794,141795,141800,141813,141829,141834],{},[436,141796,141512,141797,141799],{},[33,141798,141791],{}," 设置高度（80px）和下边框",[436,141801,141802,141803,141806,141807,141809,141810,141812],{},"在里面定义 ",[33,141804,141805],{},"ul > li"," ,每个",[33,141808,436],{}," 宽度是300px 高度是 50px，给每个",[33,141811,436],{},"设置35px的左内边距",[436,141814,141815,141816,141818,141819,141821,141822,141824,141825,20928,141827,122702],{},"在每个",[33,141817,436],{},"里面，放一个 ",[33,141820,25427],{},"（里面放图标），一个",[33,141823,54105],{},"（里面放",[33,141826,54105],{},[33,141828,19],{},[436,141830,141512,141831,141833],{},[33,141832,25427],{},"设置浮动，让h5与这个div左右排列",[436,141835,141836],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141838,140851],{},[26,141840,141842],{"className":129014,"code":141841,"language":129016,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,141843,141844,141850,141862,141874,141901],{"__ignoreMap":31},[36,141845,141846,141848],{"class":38,"line":39},[36,141847,136770],{"class":4500},[36,141849,18091],{"class":53},[36,141851,141852,141854,141856,141858,141860],{"class":38,"line":46},[36,141853,73054],{"class":49},[36,141855,53931],{"class":53},[36,141857,3376],{"class":49},[36,141859,53986],{"class":114},[36,141861,3833],{"class":53},[36,141863,141864,141866,141868,141870,141872],{"class":38,"line":82},[36,141865,73274],{"class":49},[36,141867,53931],{"class":53},[36,141869,3376],{"class":49},[36,141871,53986],{"class":114},[36,141873,3833],{"class":53},[36,141875,141876,141878,141880,141882,141884,141886,141888,141890,141893,141895,141897,141899],{"class":38,"line":88},[36,141877,73097],{"class":49},[36,141879,53931],{"class":53},[36,141881,64214],{"class":49},[36,141883,54],{"class":53},[36,141885,136809],{"class":1997},[36,141887,16236],{"class":53},[36,141889,64224],{"class":49},[36,141891,141892],{"class":49}," -10",[36,141894,53986],{"class":114},[36,141896,136828],{"class":49},[36,141898,53986],{"class":114},[36,141900,3833],{"class":53},[36,141902,141903],{"class":38,"line":195},[36,141904,4103],{"class":53},[19,141906,140891],{},[26,141908,141909],{"className":129014,"code":141841,"language":129016,"meta":31,"style":31},[33,141910,141911,141917,141929,141941,141967],{"__ignoreMap":31},[36,141912,141913,141915],{"class":38,"line":39},[36,141914,136770],{"class":4500},[36,141916,18091],{"class":53},[36,141918,141919,141921,141923,141925,141927],{"class":38,"line":46},[36,141920,73054],{"class":49},[36,141922,53931],{"class":53},[36,141924,3376],{"class":49},[36,141926,53986],{"class":114},[36,141928,3833],{"class":53},[36,141930,141931,141933,141935,141937,141939],{"class":38,"line":82},[36,141932,73274],{"class":49},[36,141934,53931],{"class":53},[36,141936,3376],{"class":49},[36,141938,53986],{"class":114},[36,141940,3833],{"class":53},[36,141942,141943,141945,141947,141949,141951,141953,141955,141957,141959,141961,141963,141965],{"class":38,"line":88},[36,141944,73097],{"class":49},[36,141946,53931],{"class":53},[36,141948,64214],{"class":49},[36,141950,54],{"class":53},[36,141952,136809],{"class":1997},[36,141954,16236],{"class":53},[36,141956,64224],{"class":49},[36,141958,141892],{"class":49},[36,141960,53986],{"class":114},[36,141962,136828],{"class":49},[36,141964,53986],{"class":114},[36,141966,3833],{"class":53},[36,141968,141969],{"class":38,"line":195},[36,141970,4103],{"class":53},[19,141972,141973],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3680,141975,141976,141979,141985,141991,142003],{},[436,141977,141978],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[436,141980,141981,141982,122702],{},"里面的布局利用 自定义列表来实现（",[33,141983,141984],{},"dl > dt + dd",[436,141986,141512,141987,141990],{},[33,141988,141989],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[436,141992,141512,141993,141996,141997,20928,141999,142002],{},[33,141994,141995],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,141998,141995],{},[33,142000,142001],{},"dd","之间有些距离",[436,142004,142005],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142007,140851],{},[26,142009,142010],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,142011,142012,142018,142030],{"__ignoreMap":31},[36,142013,142014,142016],{"class":38,"line":39},[36,142015,54105],{"class":53794},[36,142017,18091],{"class":53},[36,142019,142020,142022,142024,142026,142028],{"class":38,"line":46},[36,142021,72956],{"class":49},[36,142023,53931],{"class":53},[36,142025,713],{"class":49},[36,142027,54050],{"class":49},[36,142029,3833],{"class":53},[36,142031,142032],{"class":38,"line":82},[36,142033,4103],{"class":53},[19,142035,140891],{},[26,142037,142038],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,142039,142040,142046,142058],{"__ignoreMap":31},[36,142041,142042,142044],{"class":38,"line":39},[36,142043,54105],{"class":53794},[36,142045,18091],{"class":53},[36,142047,142048,142050,142052,142054,142056],{"class":38,"line":46},[36,142049,72956],{"class":49},[36,142051,53931],{"class":53},[36,142053,713],{"class":49},[36,142055,54050],{"class":49},[36,142057,3833],{"class":53},[36,142059,142060],{"class":38,"line":82},[36,142061,4103],{"class":53},[19,142063,142064],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3680,142066,142067,142076,142079,142090],{},[436,142068,142069,142070,142072,142073,142075],{},"分为上下两块，上面是 ",[33,142071,134233],{}," 友情链接，下面是 ",[33,142074,134226],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[436,142077,142078],{},"把内容分别复制到相应模块中",[436,142080,141512,142081,142083,142084,142086,142087,142089],{},[33,142082,134233],{}," 设置 15px 的下外边距，给",[33,142085,134233],{}," 里面 的 ",[33,142088,2923],{}," 标签设置 左右 3px 的外边距",[436,142091,142092,142093,142095],{},"给",[33,142094,134226],{}," 设置 20px 的行高",[19,142097,140851],{},[26,142099,142100],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,142101,142102,142108,142120],{"__ignoreMap":31},[36,142103,142104,142106],{"class":38,"line":39},[36,142105,54105],{"class":53794},[36,142107,18091],{"class":53},[36,142109,142110,142112,142114,142116,142118],{"class":38,"line":46},[36,142111,72956],{"class":49},[36,142113,53931],{"class":53},[36,142115,713],{"class":49},[36,142117,54050],{"class":49},[36,142119,3833],{"class":53},[36,142121,142122],{"class":38,"line":82},[36,142123,4103],{"class":53},[19,142125,140891],{},[26,142127,142128],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,142129,142130,142136,142148],{"__ignoreMap":31},[36,142131,142132,142134],{"class":38,"line":39},[36,142133,54105],{"class":53794},[36,142135,18091],{"class":53},[36,142137,142138,142140,142142,142144,142146],{"class":38,"line":46},[36,142139,72956],{"class":49},[36,142141,53931],{"class":53},[36,142143,713],{"class":49},[36,142145,54050],{"class":49},[36,142147,3833],{"class":53},[36,142149,142150],{"class":38,"line":82},[36,142151,4103],{"class":53},[19,142153,142154],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2602,142156,142157],{},"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":31,"searchDepth":46,"depth":46,"links":142159},[142160,142161,142162,142169],{"id":140440,"depth":46,"text":140441},{"id":140459,"depth":46,"text":140460},{"id":140486,"depth":46,"text":140487,"children":142163},[142164,142165,142166,142167,142168],{"id":140490,"depth":82,"text":140491},{"id":140503,"depth":82,"text":140504},{"id":140527,"depth":82,"text":140528},{"id":140549,"depth":82,"text":140550},{"id":140621,"depth":82,"text":140622},{"id":140747,"depth":46,"text":140748,"children":142170},[142171,142172,142173,142174,142176],{"id":140751,"depth":82,"text":140752},{"id":140758,"depth":82,"text":140759},{"id":140930,"depth":82,"text":140931},{"id":141471,"depth":82,"text":142175},"15.4.4 nav导航模块制作",{"id":141769,"depth":82,"text":141770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140432,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142183,"title":142184,"body":142185,"description":2630,"extension":2631,"meta":144587,"navigation":545,"path":144588,"seo":144589,"stem":144590,"__hash__":144591},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142186,"toc":144564},[142187,142190,142194,142198,142210,142213,142216,142219,142230,142232,142256,142258,142282,142287,142290,142292,142328,142330,142366,142369,142374,142377,142380,142383,142413,142420,142423,142433,142435,142469,142472,142506,142512,142529,142531,142567,142569,142605,142610,142635,142637,142663,142665,142689,142696,142699,142763,142765,142807,142809,142849,142856,142861,142863,142893,142895,142925,142929,142932,142939,142951,142953,142979,142981,143005,143008,143010,143034,143040,143050,143052,143082,143084,143114,143121,143162,143164,143200,143202,143238,143242,143245,143248,143251,143257,143262,143265,143288,143291,143315,143318,143342,143347,143350,143353,143356,143359,143362,143436,143438,143468,143470,143500,143503,143506,143538,143542,143546,143560,143569,143572,143577,143579,143673,143675,143769,143792,143794,143818,143820,143844,143851,143854,143864,143866,143890,143895,143903,143905,143935,143940,143980,143982,144008,144010,144036,144040,144043,144048,144051,144055,144063,144070,144078,144080,144110,144112,144142,144150,144153,144156,144158,144188,144190,144220,144223,144228,144230,144254,144256,144280,144283,144368,144370,144394,144396,144420,144424,144426,144450,144452,144486,144490,144504,144507,144512,144515,144520,144523,144553,144561],[10,142188,142184],{"id":142189},"_16-品优购项目下篇-主体与页面开发",[14,142191,142193],{"id":142192},"_161-项目主体模块制作","16.1 项目主体模块制作",[997,142195,142197],{"id":142196},"_1611-首页制作","16.1.1 首页制作",[19,142199,142200,142202,142203,142205,142206,142209],{},[2839,142201,104531],{}," 主体模块是 ",[2839,142204,76543],{}," 里面专有的，注意需要新的样式文件 ",[2839,142207,142208],{},"index.css，"," 就不要写在common.css中了",[4000,142211],{"style":128870,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[4000,142214],{"style":128870,"src":142215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142217,142218],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3680,142220,142221,142224,142227],{},[436,142222,142223],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[436,142225,142226],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[436,142228,142229],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142231,140851],{},[26,142233,142234],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,142235,142236,142242,142252],{"__ignoreMap":31},[36,142237,142238,142240],{"class":38,"line":39},[36,142239,132862],{"class":4500},[36,142241,18091],{"class":53},[36,142243,142244,142246,142248,142250],{"class":38,"line":46},[36,142245,133494],{"class":49},[36,142247,53931],{"class":53},[36,142249,26253],{"class":49},[36,142251,3833],{"class":53},[36,142253,142254],{"class":38,"line":82},[36,142255,4103],{"class":53},[19,142257,140891],{},[26,142259,142260],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,142261,142262,142268,142278],{"__ignoreMap":31},[36,142263,142264,142266],{"class":38,"line":39},[36,142265,132862],{"class":4500},[36,142267,18091],{"class":53},[36,142269,142270,142272,142274,142276],{"class":38,"line":46},[36,142271,133494],{"class":49},[36,142273,53931],{"class":53},[36,142275,26253],{"class":49},[36,142277,3833],{"class":53},[36,142279,142280],{"class":38,"line":82},[36,142281,4103],{"class":53},[433,142283,142284],{},[436,142285,142286],{},"左侧focus模块制作",[4000,142288],{"style":128870,"src":142289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142291,140851],{},[26,142293,142294],{"className":129014,"code":130337,"language":129016,"meta":31,"style":31},[33,142295,142296,142304,142314,142324],{"__ignoreMap":31},[36,142297,142298,142300,142302],{"class":38,"line":39},[36,142299,913],{"class":53794},[36,142301,64388],{"class":4500},[36,142303,18091],{"class":53},[36,142305,142306,142308,142310,142312],{"class":38,"line":46},[36,142307,130352],{"class":49},[36,142309,53931],{"class":53},[36,142311,57380],{"class":49},[36,142313,3833],{"class":53},[36,142315,142316,142318,142320,142322],{"class":38,"line":82},[36,142317,73284],{"class":49},[36,142319,53931],{"class":53},[36,142321,57228],{"class":49},[36,142323,3833],{"class":53},[36,142325,142326],{"class":38,"line":88},[36,142327,4103],{"class":53},[19,142329,140891],{},[26,142331,142332],{"className":129014,"code":130337,"language":129016,"meta":31,"style":31},[33,142333,142334,142342,142352,142362],{"__ignoreMap":31},[36,142335,142336,142338,142340],{"class":38,"line":39},[36,142337,913],{"class":53794},[36,142339,64388],{"class":4500},[36,142341,18091],{"class":53},[36,142343,142344,142346,142348,142350],{"class":38,"line":46},[36,142345,130352],{"class":49},[36,142347,53931],{"class":53},[36,142349,57380],{"class":49},[36,142351,3833],{"class":53},[36,142353,142354,142356,142358,142360],{"class":38,"line":82},[36,142355,73284],{"class":49},[36,142357,53931],{"class":53},[36,142359,57228],{"class":49},[36,142361,3833],{"class":53},[36,142363,142364],{"class":38,"line":88},[36,142365,4103],{"class":53},[19,142367,142368],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[433,142370,142371],{"start":46},[436,142372,142373],{},"右侧newsflash模块制作",[4000,142375],{"style":128870,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142378,142379],{},"右侧的模块 分为上中下三个盒子",[19,142381,142382],{},"结构代码：",[26,142384,142385],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,142386,142387],{"__ignoreMap":31},[36,142388,142389,142391,142393,142395,142397,142399,142401,142403,142405,142407,142409,142411],{"class":38,"line":39},[36,142390,1507],{"class":53},[36,142392,4000],{"class":53794},[36,142394,57730],{"class":4500},[36,142396,115],{"class":53},[36,142398,136530],{"class":57},[36,142400,57738],{"class":4500},[36,142402,115],{"class":53},[36,142404,136537],{"class":57},[36,142406,136540],{"class":4500},[36,142408,115],{"class":53},[36,142410,136545],{"class":57},[36,142412,53801],{"class":53},[19,142414,142415,142416,142419],{},"1 号盒子为 ",[33,142417,142418],{},"news"," 新闻模块 高度为 165px",[4000,142421],{"style":128870,"src":142422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142424,142425,142426,142429,142430],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,142427,142428],{},"news-hd","，下面是 ",[33,142431,142432],{},"news-bd",[19,142434,142382],{},[26,142436,142437],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,142438,142439,142443,142457,142461],{"__ignoreMap":31},[36,142440,142441],{"class":38,"line":39},[36,142442,133125],{"class":42},[36,142444,142445,142447,142449,142451,142453,142455],{"class":38,"line":46},[36,142446,1507],{"class":53},[36,142448,54105],{"class":53794},[36,142450,55980],{"class":4500},[36,142452,115],{"class":53},[36,142454,133138],{"class":57},[36,142456,53801],{"class":53},[36,142458,142459],{"class":38,"line":82},[36,142460,133145],{"class":53},[36,142462,142463,142465,142467],{"class":38,"line":88},[36,142464,54279],{"class":53},[36,142466,54105],{"class":53794},[36,142468,53801],{"class":53},[19,142470,142471],{},"样式代码：",[26,142473,142474],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,142475,142476,142480,142494,142498],{"__ignoreMap":31},[36,142477,142478],{"class":38,"line":39},[36,142479,133125],{"class":42},[36,142481,142482,142484,142486,142488,142490,142492],{"class":38,"line":46},[36,142483,1507],{"class":53},[36,142485,54105],{"class":53794},[36,142487,55980],{"class":4500},[36,142489,115],{"class":53},[36,142491,133138],{"class":57},[36,142493,53801],{"class":53},[36,142495,142496],{"class":38,"line":82},[36,142497,133145],{"class":53},[36,142499,142500,142502,142504],{"class":38,"line":88},[36,142501,54279],{"class":53},[36,142503,54105],{"class":53794},[36,142505,53801],{"class":53},[19,142507,142508,142509,142511],{},"上面是",[33,142510,142428],{},"，设置高度是 33px，设置下边框",[3680,142513,142514,142520],{},[436,142515,142516,142517,142519],{},"里面放一个",[33,142518,25427],{}," 标题",[436,142521,142522,142523,142525,142526,142528],{},"放一个a",[33,142524,105166],{},"，内容是 更多，然后让 ",[33,142527,2923],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142530,142382],{},[26,142532,142533],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,142534,142535,142543,142553,142563],{"__ignoreMap":31},[36,142536,142537,142539,142541],{"class":38,"line":39},[36,142538,54105],{"class":53794},[36,142540,140013],{"class":4500},[36,142542,18091],{"class":53},[36,142544,142545,142547,142549,142551],{"class":38,"line":46},[36,142546,140020],{"class":49},[36,142548,53931],{"class":53},[36,142550,10179],{"class":57},[36,142552,3833],{"class":53},[36,142554,142555,142557,142559,142561],{"class":38,"line":82},[36,142556,130630],{"class":49},[36,142558,53931],{"class":53},[36,142560,63357],{"class":49},[36,142562,3833],{"class":53},[36,142564,142565],{"class":38,"line":88},[36,142566,4103],{"class":53},[19,142568,142471],{},[26,142570,142571],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,142572,142573,142581,142591,142601],{"__ignoreMap":31},[36,142574,142575,142577,142579],{"class":38,"line":39},[36,142576,54105],{"class":53794},[36,142578,140013],{"class":4500},[36,142580,18091],{"class":53},[36,142582,142583,142585,142587,142589],{"class":38,"line":46},[36,142584,140020],{"class":49},[36,142586,53931],{"class":53},[36,142588,10179],{"class":57},[36,142590,3833],{"class":53},[36,142592,142593,142595,142597,142599],{"class":38,"line":82},[36,142594,130630],{"class":49},[36,142596,53931],{"class":53},[36,142598,63357],{"class":49},[36,142600,3833],{"class":53},[36,142602,142603],{"class":38,"line":88},[36,142604,4103],{"class":53},[19,142606,142607,142608],{},"下面是",[33,142609,142432],{},[3680,142611,142612,142620],{},[436,142613,142614,142615,1292,142617,142619],{},"里面包含 ",[33,142616,3680],{},[33,142618,436],{}," 还有链接",[436,142621,142092,142622,142624,142625,142627,142628,142631,142632],{},[33,142623,436],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,142626,133680],{}," 2.设置 ",[33,142629,142630],{},"white-space: nowrap;"," 3. 设置 ",[33,142633,142634],{},"text-overflow: ellipsis;",[19,142636,142382],{},[26,142638,142640],{"className":129014,"code":142639,"language":129016,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,142641,142642,142648,142659],{"__ignoreMap":31},[36,142643,142644,142646],{"class":38,"line":39},[36,142645,54105],{"class":53794},[36,142647,18091],{"class":53},[36,142649,142650,142653,142655,142657],{"class":38,"line":46},[36,142651,142652],{"class":49},"  overflow",[36,142654,53931],{"class":53},[36,142656,64202],{"class":49},[36,142658,3833],{"class":53},[36,142660,142661],{"class":38,"line":82},[36,142662,4103],{"class":53},[19,142664,142471],{},[26,142666,142667],{"className":129014,"code":142639,"language":129016,"meta":31,"style":31},[33,142668,142669,142675,142685],{"__ignoreMap":31},[36,142670,142671,142673],{"class":38,"line":39},[36,142672,54105],{"class":53794},[36,142674,18091],{"class":53},[36,142676,142677,142679,142681,142683],{"class":38,"line":46},[36,142678,142652],{"class":49},[36,142680,53931],{"class":53},[36,142682,64202],{"class":49},[36,142684,3833],{"class":53},[36,142686,142687],{"class":38,"line":82},[36,142688,4103],{"class":53},[19,142690,142691,142692,142695],{},"2 号盒子为 ",[33,142693,142694],{},"lifeservice"," 生活服务模块 高度为 209px",[4000,142697],{"style":128870,"src":142698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3680,142700,142701,142704,142714,142738,142749],{},[436,142702,142703],{},"设置边框（左右下边框）",[436,142705,142706,142707,142710,142711,142713],{},"里面的内容 是 ",[33,142708,142709],{},"ul > 12*li","，给",[33,142712,436],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[436,142715,142716,142717],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3680,142718,142719,142724,142733],{},[436,142720,142721,142723],{},[33,142722,142694],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[436,142725,142726,142727,142729,142730,142732],{},"可以让 ",[33,142728,142694],{}," 里面的 ",[33,142731,3680],{}," 宽度为 252，就可以装的下 4 个 小 li",[436,142734,142735,142737],{},[33,142736,142694],{}," 盒子 overflow 隐藏多余的部分就可以了",[436,142739,118933,142740,142742,142743,142745,142746,142748],{},[33,142741,436],{}," 里面放一个 ",[33,142744,3122],{},"（里面放图标），下面的文本用 ",[33,142747,19],{}," 标签包裹",[436,142750,141512,142751,142753,142754,142756,142757,141546,142759,142762],{},[33,142752,3122],{}," 设置 24px宽和28px的高（注意 ",[33,142755,3122],{}," 是行内元素， 转成行内块），给 ",[33,142758,436],{},[33,142760,142761],{},"text-align:center"," 让里面内容居中显示",[19,142764,142382],{},[26,142766,142768],{"className":129014,"code":142767,"language":129016,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,142769,142770,142788,142793,142803],{"__ignoreMap":31},[36,142771,142772,142774,142776,142778,142780,142782,142784,142786],{"class":38,"line":39},[36,142773,36],{"class":53794},[36,142775,14958],{"class":53},[36,142777,2923],{"class":53794},[36,142779,14958],{"class":53},[36,142781,26070],{"class":53794},[36,142783,14958],{"class":53},[36,142785,2839],{"class":53794},[36,142787,18091],{"class":53},[36,142789,142790],{"class":38,"line":46},[36,142791,142792],{"class":42},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,142794,142795,142797,142799,142801],{"class":38,"line":82},[36,142796,130630],{"class":49},[36,142798,53931],{"class":53},[36,142800,130692],{"class":49},[36,142802,3833],{"class":53},[36,142804,142805],{"class":38,"line":88},[36,142806,4103],{"class":53},[19,142808,142471],{},[26,142810,142811],{"className":129014,"code":142767,"language":129016,"meta":31,"style":31},[33,142812,142813,142831,142835,142845],{"__ignoreMap":31},[36,142814,142815,142817,142819,142821,142823,142825,142827,142829],{"class":38,"line":39},[36,142816,36],{"class":53794},[36,142818,14958],{"class":53},[36,142820,2923],{"class":53794},[36,142822,14958],{"class":53},[36,142824,26070],{"class":53794},[36,142826,14958],{"class":53},[36,142828,2839],{"class":53794},[36,142830,18091],{"class":53},[36,142832,142833],{"class":38,"line":46},[36,142834,142792],{"class":42},[36,142836,142837,142839,142841,142843],{"class":38,"line":82},[36,142838,130630],{"class":49},[36,142840,53931],{"class":53},[36,142842,130692],{"class":49},[36,142844,3833],{"class":53},[36,142846,142847],{"class":38,"line":88},[36,142848,4103],{"class":53},[19,142850,142851,142852,142855],{},"3 号盒子为 ",[33,142853,142854],{},"bargain"," 特价商品",[3680,142857,142858],{},[436,142859,142860],{},"这个比较简单，直接插入一张图片即可",[19,142862,142382],{},[26,142864,142865],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,142866,142867],{"__ignoreMap":31},[36,142868,142869,142871,142873,142875,142877,142879,142881,142883,142885,142887,142889,142891],{"class":38,"line":39},[36,142870,1507],{"class":53},[36,142872,4000],{"class":53794},[36,142874,57730],{"class":4500},[36,142876,115],{"class":53},[36,142878,136530],{"class":57},[36,142880,57738],{"class":4500},[36,142882,115],{"class":53},[36,142884,136537],{"class":57},[36,142886,136540],{"class":4500},[36,142888,115],{"class":53},[36,142890,136545],{"class":57},[36,142892,53801],{"class":53},[19,142894,142471],{},[26,142896,142897],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,142898,142899],{"__ignoreMap":31},[36,142900,142901,142903,142905,142907,142909,142911,142913,142915,142917,142919,142921,142923],{"class":38,"line":39},[36,142902,1507],{"class":53},[36,142904,4000],{"class":53794},[36,142906,57730],{"class":4500},[36,142908,115],{"class":53},[36,142910,136530],{"class":57},[36,142912,57738],{"class":4500},[36,142914,115],{"class":53},[36,142916,136537],{"class":57},[36,142918,136540],{"class":4500},[36,142920,115],{"class":53},[36,142922,136545],{"class":57},[36,142924,53801],{"class":53},[997,142926,142928],{"id":142927},"_1612-推荐模块制作","16.1.2 推荐模块制作",[4000,142930],{"style":128870,"src":142931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142933,142934,142935,142938],{},"大盒子 ",[33,142936,142937],{},"recom"," 推荐模块 recommend",[3680,142940,142941],{},[436,142942,142943,142944,142946,142947,142950],{},"给这个 ",[33,142945,142937],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,142948,142949],{},"#ebebeb","），设置距离上边 12px",[19,142952,142382],{},[26,142954,142956],{"className":129014,"code":142955,"language":129016,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,142957,142958,142964,142975],{"__ignoreMap":31},[36,142959,142960,142962],{"class":38,"line":39},[36,142961,54105],{"class":53794},[36,142963,18091],{"class":53},[36,142965,142966,142968,142970,142973],{"class":38,"line":46},[36,142967,73364],{"class":49},[36,142969,53931],{"class":53},[36,142971,142972],{"class":49},"#f0f0f0",[36,142974,3833],{"class":53},[36,142976,142977],{"class":38,"line":82},[36,142978,4103],{"class":53},[19,142980,142471],{},[26,142982,142983],{"className":129014,"code":142955,"language":129016,"meta":31,"style":31},[33,142984,142985,142991,143001],{"__ignoreMap":31},[36,142986,142987,142989],{"class":38,"line":39},[36,142988,54105],{"class":53794},[36,142990,18091],{"class":53},[36,142992,142993,142995,142997,142999],{"class":38,"line":46},[36,142994,73364],{"class":49},[36,142996,53931],{"class":53},[36,142998,142972],{"class":49},[36,143000,3833],{"class":53},[36,143002,143003],{"class":38,"line":82},[36,143004,4103],{"class":53},[19,143006,143007],{},"里面包含 2 个盒子， 浮动即可",[19,143009,142382],{},[26,143011,143012],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143013,143014,143020,143030],{"__ignoreMap":31},[36,143015,143016,143018],{"class":38,"line":39},[36,143017,132862],{"class":4500},[36,143019,18091],{"class":53},[36,143021,143022,143024,143026,143028],{"class":38,"line":46},[36,143023,133494],{"class":49},[36,143025,53931],{"class":53},[36,143027,26253],{"class":49},[36,143029,3833],{"class":53},[36,143031,143032],{"class":38,"line":82},[36,143033,4103],{"class":53},[19,143035,143036,143037],{},"1 号盒子 ",[33,143038,143039],{},"recom_hd",[3680,143041,143042,143045],{},[436,143043,143044],{},"设置宽度205px，高度163px",[436,143046,142516,143047,143049],{},[33,143048,4000],{},"标签，插入图片即可",[19,143051,142382],{},[26,143053,143054],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,143055,143056],{"__ignoreMap":31},[36,143057,143058,143060,143062,143064,143066,143068,143070,143072,143074,143076,143078,143080],{"class":38,"line":39},[36,143059,1507],{"class":53},[36,143061,4000],{"class":53794},[36,143063,57730],{"class":4500},[36,143065,115],{"class":53},[36,143067,136530],{"class":57},[36,143069,57738],{"class":4500},[36,143071,115],{"class":53},[36,143073,136537],{"class":57},[36,143075,136540],{"class":4500},[36,143077,115],{"class":53},[36,143079,136545],{"class":57},[36,143081,53801],{"class":53},[19,143083,142471],{},[26,143085,143086],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,143087,143088],{"__ignoreMap":31},[36,143089,143090,143092,143094,143096,143098,143100,143102,143104,143106,143108,143110,143112],{"class":38,"line":39},[36,143091,1507],{"class":53},[36,143093,4000],{"class":53794},[36,143095,57730],{"class":4500},[36,143097,115],{"class":53},[36,143099,136530],{"class":57},[36,143101,57738],{"class":4500},[36,143103,115],{"class":53},[36,143105,136537],{"class":57},[36,143107,136540],{"class":4500},[36,143109,115],{"class":53},[36,143111,136545],{"class":57},[36,143113,53801],{"class":53},[19,143115,143116,143117,143120],{},"2 号盒子 ",[33,143118,143119],{},"recom_bd"," ，注意里面的小竖线",[3680,143122,143123,143134,143137,143142,143147],{},[436,143124,143125,143126,143128,143129,143131,143132],{},"右侧结构里面放 ",[33,143127,3680],{}," 包含 4个 ",[33,143130,436],{},"，每个li里面包含一个",[33,143133,4000],{},[436,143135,143136],{},"直接利用切片工具把里面的内容当成一张图片",[436,143138,141512,143139,143141],{},[33,143140,436],{}," 设置浮动",[436,143143,141512,143144,143146],{},[33,143145,4000],{}," 设置宽高，宽度 248px，高度 163px",[436,143148,143149,143150,142710,143153,143155,143156,143158,143159],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,143151,143152],{},"top 10px",[33,143154,436],{},"设置相对定位（注意，最后一个",[33,143157,436],{},"不用设置伪元素），可以利用 ",[33,143160,143161],{},"nth-child(-n+3){...}",[19,143163,142382],{},[26,143165,143166],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,143167,143168,143176,143186,143196],{"__ignoreMap":31},[36,143169,143170,143172,143174],{"class":38,"line":39},[36,143171,54105],{"class":53794},[36,143173,140013],{"class":4500},[36,143175,18091],{"class":53},[36,143177,143178,143180,143182,143184],{"class":38,"line":46},[36,143179,140020],{"class":49},[36,143181,53931],{"class":53},[36,143183,10179],{"class":57},[36,143185,3833],{"class":53},[36,143187,143188,143190,143192,143194],{"class":38,"line":82},[36,143189,130630],{"class":49},[36,143191,53931],{"class":53},[36,143193,63357],{"class":49},[36,143195,3833],{"class":53},[36,143197,143198],{"class":38,"line":88},[36,143199,4103],{"class":53},[19,143201,142471],{},[26,143203,143204],{"className":129014,"code":140854,"language":129016,"meta":31,"style":31},[33,143205,143206,143214,143224,143234],{"__ignoreMap":31},[36,143207,143208,143210,143212],{"class":38,"line":39},[36,143209,54105],{"class":53794},[36,143211,140013],{"class":4500},[36,143213,18091],{"class":53},[36,143215,143216,143218,143220,143222],{"class":38,"line":46},[36,143217,140020],{"class":49},[36,143219,53931],{"class":53},[36,143221,10179],{"class":57},[36,143223,3833],{"class":53},[36,143225,143226,143228,143230,143232],{"class":38,"line":82},[36,143227,130630],{"class":49},[36,143229,53931],{"class":53},[36,143231,63357],{"class":49},[36,143233,3833],{"class":53},[36,143235,143236],{"class":38,"line":88},[36,143237,4103],{"class":53},[997,143239,143241],{"id":143240},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[4000,143243],{"style":128870,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143246,143247],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143249,143250],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143252,143253,143256],{},[33,143254,143255],{},"box_hd"," 制作",[19,143258,143036,143259,143261],{},[33,143260,143255],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[4000,143263],{"style":128870,"src":143264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3680,143266,143267,143272,143277,143280],{},[436,143268,143269,143271],{},[33,143270,143255],{}," 给 30px 的高度，2个像素的下边框",[436,143273,143274,143275],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,143276,141523],{},[436,143278,143279],{},"左侧盒左浮动，右侧盒子右浮动",[436,143281,143282,143284,143285,143287],{},[33,143283,2923],{},"标签之间的距离用左右的",[33,143286,33387],{},"撑开即可",[19,143289,143290],{},"结构代码",[26,143292,143293],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143294,143295,143301,143311],{"__ignoreMap":31},[36,143296,143297,143299],{"class":38,"line":39},[36,143298,132862],{"class":4500},[36,143300,18091],{"class":53},[36,143302,143303,143305,143307,143309],{"class":38,"line":46},[36,143304,133494],{"class":49},[36,143306,53931],{"class":53},[36,143308,26253],{"class":49},[36,143310,3833],{"class":53},[36,143312,143313],{"class":38,"line":82},[36,143314,4103],{"class":53},[19,143316,143317],{},"样式代码",[26,143319,143320],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143321,143322,143328,143338],{"__ignoreMap":31},[36,143323,143324,143326],{"class":38,"line":39},[36,143325,132862],{"class":4500},[36,143327,18091],{"class":53},[36,143329,143330,143332,143334,143336],{"class":38,"line":46},[36,143331,133494],{"class":49},[36,143333,53931],{"class":53},[36,143335,26253],{"class":49},[36,143337,3833],{"class":53},[36,143339,143340],{"class":38,"line":82},[36,143341,4103],{"class":53},[19,143343,143344,143256],{},[33,143345,143346],{},"box_bd",[19,143348,143349],{},"2 号盒子 box_bd，不要给高度",[4000,143351],{"style":128870,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143354,143355],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143357,143358],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143360,143361],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3680,143363,143364,143376,143392],{},[436,143365,143366,143368,143369,143372,143373,143375],{},[33,143367,143346],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,143370,143371],{},"tab_content","，在",[33,143374,143371],{}," 里面包裹tab选项卡对应的内容",[436,143377,143378,143379,143382,143383,143385,143386,143388,143389,143391],{},"内容被一个大盒子包裹（",[33,143380,143381],{},"tab_list_item","），里面是 ",[33,143384,3680],{}," 包裹 5个 ",[33,143387,436],{},"，每个",[33,143390,436],{},"设置对应的宽度，然后设置浮动",[436,143393,143394,143395,143397,143398,143400,143401],{},"而这5个",[33,143396,436],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,143399,436],{},"设置",[3680,143402,143403,143421,143424],{},[436,143404,143405,143406,143408,143409,143411,143412,143414,143415,143417,143418,143420],{},"第一个小 ",[33,143407,436],{}," 分为上下结构，上面是 ",[33,143410,3680],{}," 包裹 ",[33,143413,436],{}," ，",[33,143416,436],{},"里面包裹 ",[33,143419,2923],{},"，下面插入一张图片",[436,143422,143423],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[436,143425,143426,143427,143429,143430,143432,143433,143435],{},"后面的小 ",[33,143428,436],{}," 里面先放一个",[33,143431,2923],{},"标签，然后在",[33,143434,2923],{},"标签里面插入图片即可",[19,143437,143290],{},[26,143439,143440],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,143441,143442],{"__ignoreMap":31},[36,143443,143444,143446,143448,143450,143452,143454,143456,143458,143460,143462,143464,143466],{"class":38,"line":39},[36,143445,1507],{"class":53},[36,143447,4000],{"class":53794},[36,143449,57730],{"class":4500},[36,143451,115],{"class":53},[36,143453,136530],{"class":57},[36,143455,57738],{"class":4500},[36,143457,115],{"class":53},[36,143459,136537],{"class":57},[36,143461,136540],{"class":4500},[36,143463,115],{"class":53},[36,143465,136545],{"class":57},[36,143467,53801],{"class":53},[19,143469,143317],{},[26,143471,143472],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,143473,143474],{"__ignoreMap":31},[36,143475,143476,143478,143480,143482,143484,143486,143488,143490,143492,143494,143496,143498],{"class":38,"line":39},[36,143477,1507],{"class":53},[36,143479,4000],{"class":53794},[36,143481,57730],{"class":4500},[36,143483,115],{"class":53},[36,143485,136530],{"class":57},[36,143487,57738],{"class":4500},[36,143489,115],{"class":53},[36,143491,136537],{"class":57},[36,143493,136540],{"class":4500},[36,143495,115],{"class":53},[36,143497,136545],{"class":57},[36,143499,53801],{"class":53},[19,143501,143502],{},"tab栏切换需求！！！！！！介绍：",[4000,143504],{"style":128870,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3680,143507,143508,143516,143522,143525],{},[436,143509,143510,143513,143514],{},[33,143511,143512],{},"tab","栏的布局是 ",[33,143515,141523],{},[436,143517,143518,143519,143521],{},"有多少个",[33,143520,143512],{},"选项卡，那么对应就有多少个内容",[436,143523,143524],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[436,143526,143527,143528,143531,143532,143534,143535,143537],{},"等后面我们学习了",[33,143529,143530],{},"js","之后，我们就会配合",[33,143533,143530],{},"来实现，",[33,143536,143512],{},"栏的切换",[14,143539,143541],{"id":143540},"_162-列表制作","16.2 列表制作",[997,143543,143545],{"id":143544},"_1621-准备工作","16.2.1 准备工作",[3680,143547,143548,143551,143554,143557],{},[436,143549,143550],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[436,143552,143553],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[436,143555,143556],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[436,143558,143559],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[997,143561,143563,143564,1292,143566,143568],{"id":143562},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,143565,134019],{},[33,143567,56207],{}," 修改",[4000,143570],{"style":128870,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3680,143573,143574],{},[436,143575,143576],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143578,142382],{},[26,143580,143581],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,143582,143583,143587,143601,143605,143619,143623,143637,143641,143655,143659],{"__ignoreMap":31},[36,143584,143585],{"class":38,"line":39},[36,143586,134452],{"class":42},[36,143588,143589,143591,143593,143595,143597,143599],{"class":38,"line":46},[36,143590,134457],{"class":4500},[36,143592,82290],{"class":53},[36,143594,131374],{"class":49},[36,143596,53931],{"class":53},[36,143598,134466],{"class":49},[36,143600,131944],{"class":53},[36,143602,143603],{"class":38,"line":82},[36,143604,134473],{"class":42},[36,143606,143607,143609,143611,143613,143615,143617],{"class":38,"line":88},[36,143608,134478],{"class":4500},[36,143610,82290],{"class":53},[36,143612,131374],{"class":49},[36,143614,53931],{"class":53},[36,143616,57255],{"class":49},[36,143618,131944],{"class":53},[36,143620,143621],{"class":38,"line":195},[36,143622,134493],{"class":42},[36,143624,143625,143627,143629,143631,143633,143635],{"class":38,"line":1517},[36,143626,134498],{"class":4500},[36,143628,82290],{"class":53},[36,143630,131374],{"class":49},[36,143632,53931],{"class":53},[36,143634,57322],{"class":49},[36,143636,131944],{"class":53},[36,143638,143639],{"class":38,"line":2421},[36,143640,134513],{"class":42},[36,143642,143643,143645,143647,143649,143651,143653],{"class":38,"line":2446},[36,143644,134518],{"class":4500},[36,143646,82290],{"class":53},[36,143648,131374],{"class":49},[36,143650,53931],{"class":53},[36,143652,88712],{"class":49},[36,143654,131944],{"class":53},[36,143656,143657],{"class":38,"line":2469},[36,143658,134533],{"class":42},[36,143660,143661,143663,143665,143667,143669,143671],{"class":38,"line":2492},[36,143662,134538],{"class":4500},[36,143664,82290],{"class":53},[36,143666,131374],{"class":49},[36,143668,53931],{"class":53},[36,143670,134547],{"class":49},[36,143672,131944],{"class":53},[19,143674,142471],{},[26,143676,143677],{"className":129014,"code":134445,"language":129016,"meta":31,"style":31},[33,143678,143679,143683,143697,143701,143715,143719,143733,143737,143751,143755],{"__ignoreMap":31},[36,143680,143681],{"class":38,"line":39},[36,143682,134452],{"class":42},[36,143684,143685,143687,143689,143691,143693,143695],{"class":38,"line":46},[36,143686,134457],{"class":4500},[36,143688,82290],{"class":53},[36,143690,131374],{"class":49},[36,143692,53931],{"class":53},[36,143694,134466],{"class":49},[36,143696,131944],{"class":53},[36,143698,143699],{"class":38,"line":82},[36,143700,134473],{"class":42},[36,143702,143703,143705,143707,143709,143711,143713],{"class":38,"line":88},[36,143704,134478],{"class":4500},[36,143706,82290],{"class":53},[36,143708,131374],{"class":49},[36,143710,53931],{"class":53},[36,143712,57255],{"class":49},[36,143714,131944],{"class":53},[36,143716,143717],{"class":38,"line":195},[36,143718,134493],{"class":42},[36,143720,143721,143723,143725,143727,143729,143731],{"class":38,"line":1517},[36,143722,134498],{"class":4500},[36,143724,82290],{"class":53},[36,143726,131374],{"class":49},[36,143728,53931],{"class":53},[36,143730,57322],{"class":49},[36,143732,131944],{"class":53},[36,143734,143735],{"class":38,"line":2421},[36,143736,134513],{"class":42},[36,143738,143739,143741,143743,143745,143747,143749],{"class":38,"line":2446},[36,143740,134518],{"class":4500},[36,143742,82290],{"class":53},[36,143744,131374],{"class":49},[36,143746,53931],{"class":53},[36,143748,88712],{"class":49},[36,143750,131944],{"class":53},[36,143752,143753],{"class":38,"line":2469},[36,143754,134533],{"class":42},[36,143756,143757,143759,143761,143763,143765,143767],{"class":38,"line":2492},[36,143758,134538],{"class":4500},[36,143760,82290],{"class":53},[36,143762,131374],{"class":49},[36,143764,53931],{"class":53},[36,143766,134547],{"class":49},[36,143768,131944],{"class":53},[3680,143770,143771,143782],{},[436,143772,143773,143774,143777,143778,1292,143780],{},"1 号盒子左侧浮动 ",[33,143775,143776],{},"sk_list"," 里面包含 ",[33,143779,3680],{},[33,143781,436],{},[436,143783,143784,143785,143777,143788,1292,143790],{},"2 号盒子左侧浮动 ",[33,143786,143787],{},"sk_con",[33,143789,3680],{},[33,143791,436],{},[19,143793,142382],{},[26,143795,143796],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143797,143798,143804,143814],{"__ignoreMap":31},[36,143799,143800,143802],{"class":38,"line":39},[36,143801,132862],{"class":4500},[36,143803,18091],{"class":53},[36,143805,143806,143808,143810,143812],{"class":38,"line":46},[36,143807,133494],{"class":49},[36,143809,53931],{"class":53},[36,143811,26253],{"class":49},[36,143813,3833],{"class":53},[36,143815,143816],{"class":38,"line":82},[36,143817,4103],{"class":53},[19,143819,142471],{},[26,143821,143822],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143823,143824,143830,143840],{"__ignoreMap":31},[36,143825,143826,143828],{"class":38,"line":39},[36,143827,132862],{"class":4500},[36,143829,18091],{"class":53},[36,143831,143832,143834,143836,143838],{"class":38,"line":46},[36,143833,133494],{"class":49},[36,143835,53931],{"class":53},[36,143837,26253],{"class":49},[36,143839,3833],{"class":53},[36,143841,143842],{"class":38,"line":82},[36,143843,4103],{"class":53},[997,143845,143847,143848],{"id":143846},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,143849,143850],{},"sk_container",[4000,143852],{"style":128870,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3680,143855,143856,143861],{},[436,143857,143036,143858,143860],{},[33,143859,143850],{}," 给宽度 1200，不要给高度",[436,143862,143863],{},"一定不要忘记清除浮动",[19,143865,142382],{},[26,143867,143868],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,143869,143870,143876,143886],{"__ignoreMap":31},[36,143871,143872,143874],{"class":38,"line":39},[36,143873,132862],{"class":4500},[36,143875,18091],{"class":53},[36,143877,143878,143880,143882,143884],{"class":38,"line":46},[36,143879,133494],{"class":49},[36,143881,53931],{"class":53},[36,143883,26253],{"class":49},[36,143885,3833],{"class":53},[36,143887,143888],{"class":38,"line":82},[36,143889,4103],{"class":53},[433,143891,143892],{},[436,143893,143894],{},"sk_hd制作",[3680,143896,143897],{},[436,143898,143116,143899,143902],{},[33,143900,143901],{},"sk_hd"," ，插入图片即可",[19,143904,142382],{},[26,143906,143907],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,143908,143909],{"__ignoreMap":31},[36,143910,143911,143913,143915,143917,143919,143921,143923,143925,143927,143929,143931,143933],{"class":38,"line":39},[36,143912,1507],{"class":53},[36,143914,4000],{"class":53794},[36,143916,57730],{"class":4500},[36,143918,115],{"class":53},[36,143920,136530],{"class":57},[36,143922,57738],{"class":4500},[36,143924,115],{"class":53},[36,143926,136537],{"class":57},[36,143928,136540],{"class":4500},[36,143930,115],{"class":53},[36,143932,136545],{"class":57},[36,143934,53801],{"class":53},[433,143936,143937],{"start":46},[436,143938,143939],{},"sk_bd制作",[3680,143941,143942],{},[436,143943,143944,143945,143948,143949,1292,143951,143953],{},"3 号盒子 ",[33,143946,143947],{},"sk_bd"," ，里面包含很多的 ",[33,143950,3680],{},[33,143952,436],{},[3680,143954,143955,143964],{},[436,143956,143957,143958,143960,143961,143963],{},"当鼠标移入到 ",[33,143959,436],{}," 上面的时候显示红色的边框，在这里先给 ",[33,143962,436],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[436,143965,143966,143967,143969,143970,143972,143973,143976,143977,143979],{},"由于给每个 ",[33,143968,436],{}," 都设置了外边距，导致一行的最后一个 ",[33,143971,436],{}," 掉了下来，在这里我们利用 ",[33,143974,143975],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,143978,436],{},"，去掉外边距就好了",[19,143981,142382],{},[26,143983,143984],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,143985,143986,143992,144004],{"__ignoreMap":31},[36,143987,143988,143990],{"class":38,"line":39},[36,143989,54105],{"class":53794},[36,143991,18091],{"class":53},[36,143993,143994,143996,143998,144000,144002],{"class":38,"line":46},[36,143995,72956],{"class":49},[36,143997,53931],{"class":53},[36,143999,713],{"class":49},[36,144001,54050],{"class":49},[36,144003,3833],{"class":53},[36,144005,144006],{"class":38,"line":82},[36,144007,4103],{"class":53},[19,144009,142471],{},[26,144011,144012],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,144013,144014,144020,144032],{"__ignoreMap":31},[36,144015,144016,144018],{"class":38,"line":39},[36,144017,54105],{"class":53794},[36,144019,18091],{"class":53},[36,144021,144022,144024,144026,144028,144030],{"class":38,"line":46},[36,144023,72956],{"class":49},[36,144025,53931],{"class":53},[36,144027,713],{"class":49},[36,144029,54050],{"class":49},[36,144031,3833],{"class":53},[36,144033,144034],{"class":38,"line":82},[36,144035,4103],{"class":53},[14,144037,144039],{"id":144038},"_163-注册页面制作","16.3 注册页面制作",[4000,144041],{"style":128870,"src":144042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144044,144045,144047],{},[2839,144046,695],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[4000,144049],{"style":128870,"src":144050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[997,144052,144054],{"id":144053},"_1631-准备工作","16.3.1 准备工作",[3680,144056,144057,144060],{},[436,144058,144059],{},"创建register.html，引入 base.css，引入favicon图标",[436,144061,144062],{},"创建register.css ，在html页面进行引入",[997,144064,144066,144067,144069],{"id":144065},"_1632-header-头部实现","16.3.2 ",[33,144068,134019],{}," 头部实现",[3680,144071,144072,144075],{},[436,144073,144074],{},"整个内容用 版心 进行包裹",[436,144076,144077],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144079,142382],{},[26,144081,144082],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,144083,144084],{"__ignoreMap":31},[36,144085,144086,144088,144090,144092,144094,144096,144098,144100,144102,144104,144106,144108],{"class":38,"line":39},[36,144087,1507],{"class":53},[36,144089,4000],{"class":53794},[36,144091,57730],{"class":4500},[36,144093,115],{"class":53},[36,144095,136530],{"class":57},[36,144097,57738],{"class":4500},[36,144099,115],{"class":53},[36,144101,136537],{"class":57},[36,144103,136540],{"class":4500},[36,144105,115],{"class":53},[36,144107,136545],{"class":57},[36,144109,53801],{"class":53},[19,144111,142471],{},[26,144113,144114],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,144115,144116],{"__ignoreMap":31},[36,144117,144118,144120,144122,144124,144126,144128,144130,144132,144134,144136,144138,144140],{"class":38,"line":39},[36,144119,1507],{"class":53},[36,144121,4000],{"class":53794},[36,144123,57730],{"class":4500},[36,144125,115],{"class":53},[36,144127,136530],{"class":57},[36,144129,57738],{"class":4500},[36,144131,115],{"class":53},[36,144133,136537],{"class":57},[36,144135,136540],{"class":4500},[36,144137,115],{"class":53},[36,144139,136545],{"class":57},[36,144141,53801],{"class":53},[997,144143,144145,144146,144149],{"id":144144},"_1633-registerarea-主体模块实现","16.3.3 ",[33,144147,144148],{},"registerarea"," 主体模块实现",[4000,144151],{"style":128870,"src":144152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144154,144155],{},"整个大盒子 高度为 522px，设置4个边框",[19,144157,142382],{},[26,144159,144160],{"className":129014,"code":133171,"language":129016,"meta":31,"style":31},[33,144161,144162,144168,144184],{"__ignoreMap":31},[36,144163,144164,144166],{"class":38,"line":39},[36,144165,54105],{"class":53794},[36,144167,18091],{"class":53},[36,144169,144170,144172,144174,144176,144178,144180,144182],{"class":38,"line":46},[36,144171,73382],{"class":49},[36,144173,53931],{"class":53},[36,144175,707],{"class":49},[36,144177,53986],{"class":114},[36,144179,54015],{"class":49},[36,144181,132406],{"class":49},[36,144183,3833],{"class":53},[36,144185,144186],{"class":38,"line":82},[36,144187,4103],{"class":53},[19,144189,142471],{},[26,144191,144192],{"className":129014,"code":133171,"language":129016,"meta":31,"style":31},[33,144193,144194,144200,144216],{"__ignoreMap":31},[36,144195,144196,144198],{"class":38,"line":39},[36,144197,54105],{"class":53794},[36,144199,18091],{"class":53},[36,144201,144202,144204,144206,144208,144210,144212,144214],{"class":38,"line":46},[36,144203,73382],{"class":49},[36,144205,53931],{"class":53},[36,144207,707],{"class":49},[36,144209,53986],{"class":114},[36,144211,54015],{"class":49},[36,144213,132406],{"class":49},[36,144215,3833],{"class":53},[36,144217,144218],{"class":38,"line":82},[36,144219,4103],{"class":53},[19,144221,144222],{},"1号盒子 是一个 h3 标签，放标题",[3680,144224,144225],{},[436,144226,144227],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144229,142382],{},[26,144231,144232],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,144233,144234,144240,144250],{"__ignoreMap":31},[36,144235,144236,144238],{"class":38,"line":39},[36,144237,132862],{"class":4500},[36,144239,18091],{"class":53},[36,144241,144242,144244,144246,144248],{"class":38,"line":46},[36,144243,133494],{"class":49},[36,144245,53931],{"class":53},[36,144247,26253],{"class":49},[36,144249,3833],{"class":53},[36,144251,144252],{"class":38,"line":82},[36,144253,4103],{"class":53},[19,144255,142471],{},[26,144257,144258],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,144259,144260,144266,144276],{"__ignoreMap":31},[36,144261,144262,144264],{"class":38,"line":39},[36,144263,132862],{"class":4500},[36,144265,18091],{"class":53},[36,144267,144268,144270,144272,144274],{"class":38,"line":46},[36,144269,133494],{"class":49},[36,144271,53931],{"class":53},[36,144273,26253],{"class":49},[36,144275,3833],{"class":53},[36,144277,144278],{"class":38,"line":82},[36,144279,4103],{"class":53},[19,144281,144282],{},"2号盒子 里面放注册的内容",[3680,144284,144285,144288,144297,144311,144324,144327,144330,144348,144362],{},[436,144286,144287],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[436,144289,144290,144291,144293,144294,144296],{},"里面的内容利用 ",[33,144292,3680],{}," 包含 ",[33,144295,436],{}," 来实现的（不需要用表格）",[436,144298,141526,144299,144301,144302,144304,144305,144307,144308,144310],{},[33,144300,436],{}," 里面，左侧放 ",[33,144303,36109],{}," 标签， 中间放",[33,144306,913],{}," 标签， 右侧放 ",[33,144309,36],{}," 提示信息",[436,144312,144313,144314,144316,144317,144319,144320,144323],{},"左侧 ",[33,144315,36109],{},"里面的文字都是右对齐，我们可以给",[33,144318,36109],{},"设置一个宽度（88px），然后利用",[33,144321,144322],{},"text-align"," 来设置右对齐",[436,144325,144326],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[436,144328,144329],{},"右侧 span修饰一下文字颜色",[436,144331,144332,144333],{},"提示信息的样式优化",[3680,144334,144335,144338,144341],{},[436,144336,144337],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[436,144339,144340],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[436,144342,144343,144344,144347],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,144345,144346],{},"vertical-algin"," 来设置 图片与文字对齐方式",[436,144349,144350,144351],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3680,144352,144353,144359],{},[436,144354,144355,144356,144358],{},"设置 ",[33,144357,26070],{}," 的 左右 12px 的内边距，设置一下文字颜色",[436,144360,144361],{},"分别设置 背景颜色",[436,144363,144364,144365,144367],{},"同意协议 和 完成注册 都是用 ",[33,144366,436],{}," 进行包裹",[19,144369,142382],{},[26,144371,144372],{"className":129014,"code":142955,"language":129016,"meta":31,"style":31},[33,144373,144374,144380,144390],{"__ignoreMap":31},[36,144375,144376,144378],{"class":38,"line":39},[36,144377,54105],{"class":53794},[36,144379,18091],{"class":53},[36,144381,144382,144384,144386,144388],{"class":38,"line":46},[36,144383,73364],{"class":49},[36,144385,53931],{"class":53},[36,144387,142972],{"class":49},[36,144389,3833],{"class":53},[36,144391,144392],{"class":38,"line":82},[36,144393,4103],{"class":53},[19,144395,142471],{},[26,144397,144398],{"className":129014,"code":142955,"language":129016,"meta":31,"style":31},[33,144399,144400,144406,144416],{"__ignoreMap":31},[36,144401,144402,144404],{"class":38,"line":39},[36,144403,54105],{"class":53794},[36,144405,18091],{"class":53},[36,144407,144408,144410,144412,144414],{"class":38,"line":46},[36,144409,73364],{"class":49},[36,144411,53931],{"class":53},[36,144413,142972],{"class":49},[36,144415,3833],{"class":53},[36,144417,144418],{"class":38,"line":82},[36,144419,4103],{"class":53},[997,144421,144423],{"id":144422},"_1634-底部实现","16.3.4 底部实现",[19,144425,142382],{},[26,144427,144428],{"className":129014,"code":142955,"language":129016,"meta":31,"style":31},[33,144429,144430,144436,144446],{"__ignoreMap":31},[36,144431,144432,144434],{"class":38,"line":39},[36,144433,54105],{"class":53794},[36,144435,18091],{"class":53},[36,144437,144438,144440,144442,144444],{"class":38,"line":46},[36,144439,73364],{"class":49},[36,144441,53931],{"class":53},[36,144443,142972],{"class":49},[36,144445,3833],{"class":53},[36,144447,144448],{"class":38,"line":82},[36,144449,4103],{"class":53},[19,144451,142471],{},[26,144453,144454],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,144455,144456,144460,144474,144478],{"__ignoreMap":31},[36,144457,144458],{"class":38,"line":39},[36,144459,133125],{"class":42},[36,144461,144462,144464,144466,144468,144470,144472],{"class":38,"line":46},[36,144463,1507],{"class":53},[36,144465,54105],{"class":53794},[36,144467,55980],{"class":4500},[36,144469,115],{"class":53},[36,144471,133138],{"class":57},[36,144473,53801],{"class":53},[36,144475,144476],{"class":38,"line":82},[36,144477,133145],{"class":53},[36,144479,144480,144482,144484],{"class":38,"line":88},[36,144481,54279],{"class":53},[36,144483,54105],{"class":53794},[36,144485,53801],{"class":53},[14,144487,144489],{"id":144488},"_164-项目总结","16.4 项目总结",[433,144491,144492,144495,144498,144501],{},[436,144493,144494],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[436,144496,144497],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[436,144499,144500],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[436,144502,144503],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[4000,144505],{"style":128870,"src":144506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[433,144508,144509],{"start":195},[436,144510,144511],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[4000,144513],{"style":128870,"src":144514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[433,144516,144517],{"start":1517},[436,144518,144519],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[4000,144521],{"style":128870,"src":144522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,144524,144525],{"className":129761,"code":139170,"language":129763,"meta":31,"style":31},[33,144526,144527],{"__ignoreMap":31},[36,144528,144529,144531,144533,144535,144537,144539,144541,144543,144545,144547,144549,144551],{"class":38,"line":39},[36,144530,1507],{"class":53},[36,144532,913],{"class":53794},[36,144534,56317],{"class":4500},[36,144536,115],{"class":53},[36,144538,65187],{"class":57},[36,144540,17440],{"class":4500},[36,144542,115],{"class":53},[36,144544,139191],{"class":57},[36,144546,63508],{"class":4500},[36,144548,115],{"class":53},[36,144550,139198],{"class":57},[36,144552,53801],{"class":53},[433,144554,144555,144558],{"start":2421},[436,144556,144557],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[436,144559,144560],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2602,144562,144563],{},"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":31,"searchDepth":46,"depth":46,"links":144565},[144566,144571,144578,144586],{"id":142192,"depth":46,"text":142193,"children":144567},[144568,144569,144570],{"id":142196,"depth":82,"text":142197},{"id":142927,"depth":82,"text":142928},{"id":143240,"depth":82,"text":143241},{"id":143540,"depth":46,"text":143541,"children":144572},[144573,144574,144576],{"id":143544,"depth":82,"text":143545},{"id":143562,"depth":82,"text":144575},"16.2.2 列表页 header 和 nav 修改",{"id":143846,"depth":82,"text":144577},"16.2.3 列表页主体 sk_container",{"id":144038,"depth":46,"text":144039,"children":144579},[144580,144581,144583,144585],{"id":144053,"depth":82,"text":144054},{"id":144065,"depth":82,"text":144582},"16.3.2 header 头部实现",{"id":144144,"depth":82,"text":144584},"16.3.3 registerarea 主体模块实现",{"id":144422,"depth":82,"text":144423},{"id":144488,"depth":46,"text":144489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142184,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144593,"title":144594,"body":144595,"description":2630,"extension":2631,"meta":144703,"navigation":545,"path":144704,"seo":144705,"stem":144706,"__hash__":144707},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144596,"toc":144698},[144597,144600,144604,144607,144610,144619,144628,144632,144637,144644,144662,144665,144668,144671,144674,144677,144680,144683,144686,144689,144692,144695],[10,144598,144594],{"id":144599},"_17-web服务器与网站发布",[14,144601,144603],{"id":144602},"_171-web服务器","17.1 Web服务器",[19,144605,144606],{},"把自己网站上传到服务器上，可以让其他人访问",[4000,144608],{"style":128870,"src":144609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144611,144612,144615,144616],{},[2839,144613,144614],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2839,144617,144618],{},"Web 服务器等",[19,144620,144621,144622,1292,144625,28254],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2839,144623,144624],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2839,144626,144627],{},"远程服务器",[997,144629,144631],{"id":144630},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144633,144634],{},[2839,144635,144636],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144638,144639,144640],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2923,144641,144642],{"href":144642,"rel":144643},"http:\u002F\u002Ffree.3v.do\u002F",[26381],[3680,144645,144646,144649,144652,144659],{},[436,144647,144648],{},"去免费空间网站注册账号。",[436,144650,144651],{},"记录下主机名、用户名、密码、域名。",[436,144653,144654,144655,144658],{},"利用 ",[33,144656,144657],{},"utftp"," 软件 上传网站到远程服务器",[436,144660,144661],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144663,144664],{},"使用软件上传，对上传软件文件进行解压",[4000,144666],{"style":128870,"src":144667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[4000,144669],{"style":128870,"src":144670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144672,144673],{},"输入刚刚申请的服务器账号信息：",[4000,144675],{"style":128870,"src":144676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[4000,144678],{"style":128870,"src":144679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[4000,144681],{"style":128870,"src":144682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[4000,144684],{"style":128870,"src":144685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144687,144688],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[4000,144690],{"style":128870,"src":144691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144693,144694],{},"浏览器输入域名即可访问",[19,144696,144697],{},"首页一定必须是index",{"title":31,"searchDepth":46,"depth":46,"links":144699},[144700],{"id":144602,"depth":46,"text":144603,"children":144701},[144702],{"id":144630,"depth":82,"text":144631},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144594,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144709,"title":144710,"body":144711,"description":2630,"extension":2631,"meta":145638,"navigation":545,"path":145639,"seo":145640,"stem":145641,"__hash__":145642},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144712,"toc":145621},[144713,144716,144720,144723,144726,144737,144740,144744,144748,144753,144756,144759,144762,144765,144769,144795,144799,144803,144806,144809,144813,144846,144850,144853,144856,144920,144924,144928,144931,144934,144937,144941,144986,144990,144993,145023,145027,145031,145034,145037,145041,145044,145113,145116,145224,145226,145232,145236,145239,145242,145338,145341,145345,145369,145373,145376,145380,145383,145387,145390,145393,145396,145399,145403,145406,145409,145413,145417,145420,145423,145426,145429,145433,145436,145440,145443,145446,145491,145495,145499,145502,145505,145508,145540,145544,145547,145581,145585,145588,145618],[10,144714,144710],{"id":144715},"_18-2d动画与3d转换",[14,144717,144719],{"id":144718},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144721,144722],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144724,144725],{},"转换（transform）你可以简单理解为变形",[3680,144727,144728,144731,144734],{},[436,144729,144730],{},"移动：translate",[436,144732,144733],{},"旋转：rotate",[436,144735,144736],{},"缩放：scale",[4000,144738],{"style":128870,"src":144739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[997,144741,144743],{"id":144742},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24515,144745,144747],{"id":144746},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144749,144750,144751],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2839,144752,135672],{},[4000,144754],{"style":128870,"src":144755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144757,144758],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144760,144761],{},"对于行内元素无效",[19,144763,144764],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24515,144766,144768],{"id":144767},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,144770,144771],{"className":129014,"code":141201,"language":129016,"meta":31,"style":31},[33,144772,144773,144779,144791],{"__ignoreMap":31},[36,144774,144775,144777],{"class":38,"line":39},[36,144776,54105],{"class":53794},[36,144778,18091],{"class":53},[36,144780,144781,144783,144785,144787,144789],{"class":38,"line":46},[36,144782,72956],{"class":49},[36,144784,53931],{"class":53},[36,144786,713],{"class":49},[36,144788,54050],{"class":49},[36,144790,3833],{"class":53},[36,144792,144793],{"class":38,"line":82},[36,144794,4103],{"class":53},[997,144796,144798],{"id":144797},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24515,144800,144802],{"id":144801},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144804,144805],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[4000,144807],{"style":128870,"src":144808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24515,144810,144812],{"id":144811},"_18122-旋转效果","18.1.2.2 旋转效果",[26,144814,144816],{"className":129014,"code":144815,"language":129016,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,144817,144818,144824,144842],{"__ignoreMap":31},[36,144819,144820,144822],{"class":38,"line":39},[36,144821,54105],{"class":53794},[36,144823,18091],{"class":53},[36,144825,144826,144828,144830,144833,144835,144837,144840],{"class":38,"line":46},[36,144827,138997],{"class":49},[36,144829,53931],{"class":53},[36,144831,144832],{"class":49},"rotate",[36,144834,54],{"class":53},[36,144836,3207],{"class":49},[36,144838,144839],{"class":114},"deg",[36,144841,5251],{"class":53},[36,144843,144844],{"class":38,"line":82},[36,144845,4103],{"class":53},[24515,144847,144849],{"id":144848},"_18123-三角做法","18.1.2.3 三角做法",[19,144851,144852],{},"该下标当经过最外层大盒子时会实现向上反转",[4000,144854],{"style":128870,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,144857,144858],{"className":129014,"code":137533,"language":129016,"meta":31,"style":31},[33,144859,144860,144864,144870,144880,144890,144906,144916],{"__ignoreMap":31},[36,144861,144862],{"class":38,"line":39},[36,144863,137540],{"class":42},[36,144865,144866,144868],{"class":38,"line":46},[36,144867,137545],{"class":4500},[36,144869,18091],{"class":53},[36,144871,144872,144874,144876,144878],{"class":38,"line":82},[36,144873,73054],{"class":49},[36,144875,53931],{"class":53},[36,144877,713],{"class":49},[36,144879,3833],{"class":53},[36,144881,144882,144884,144886,144888],{"class":38,"line":88},[36,144883,73274],{"class":49},[36,144885,53931],{"class":53},[36,144887,713],{"class":49},[36,144889,3833],{"class":53},[36,144891,144892,144894,144896,144898,144900,144902,144904],{"class":38,"line":195},[36,144893,73382],{"class":49},[36,144895,53931],{"class":53},[36,144897,1317],{"class":49},[36,144899,53986],{"class":114},[36,144901,54015],{"class":49},[36,144903,66479],{"class":49},[36,144905,3833],{"class":53},[36,144907,144908,144910,144912,144914],{"class":38,"line":1517},[36,144909,137588],{"class":49},[36,144911,53931],{"class":53},[36,144913,64857],{"class":49},[36,144915,3833],{"class":53},[36,144917,144918],{"class":38,"line":2421},[36,144919,4103],{"class":53},[997,144921,144923],{"id":144922},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24515,144925,144927],{"id":144926},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144929,144930],{},"设置中心点",[4000,144932],{"style":128870,"src":144933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144935,144936],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24515,144938,144940],{"id":144939},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,144942,144944],{"className":129014,"code":144943,"language":129016,"meta":31,"style":31},"\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",[33,144945,144946,144951,144957,144972,144977,144982],{"__ignoreMap":31},[36,144947,144948],{"class":38,"line":39},[36,144949,144950],{"class":42},"\u002F* 转换中心点 *\u002F\n",[36,144952,144953,144955],{"class":38,"line":46},[36,144954,54105],{"class":53794},[36,144956,18091],{"class":53},[36,144958,144959,144962,144964,144966,144968,144970],{"class":38,"line":82},[36,144960,144961],{"class":49},"  transform-origin",[36,144963,53931],{"class":53},[36,144965,54086],{"class":49},[36,144967,19662],{"class":49},[36,144969,132877],{"class":53},[36,144971,137686],{"class":42},[36,144973,144974],{"class":38,"line":88},[36,144975,144976],{"class":42},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,144978,144979],{"class":38,"line":195},[36,144980,144981],{"class":42},"  \u002F* transform-origin: left top; *\u002F\n",[36,144983,144984],{"class":38,"line":1517},[36,144985,4103],{"class":53},[24515,144987,144989],{"id":144988},"_18133-旋转案例","18.1.3.3 旋转案例",[4000,144991],{"style":128870,"src":144992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,144994,144995],{"className":129014,"code":144815,"language":129016,"meta":31,"style":31},[33,144996,144997,145003,145019],{"__ignoreMap":31},[36,144998,144999,145001],{"class":38,"line":39},[36,145000,54105],{"class":53794},[36,145002,18091],{"class":53},[36,145004,145005,145007,145009,145011,145013,145015,145017],{"class":38,"line":46},[36,145006,138997],{"class":49},[36,145008,53931],{"class":53},[36,145010,144832],{"class":49},[36,145012,54],{"class":53},[36,145014,3207],{"class":49},[36,145016,144839],{"class":114},[36,145018,5251],{"class":53},[36,145020,145021],{"class":38,"line":82},[36,145022,4103],{"class":53},[997,145024,145026],{"id":145025},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24515,145028,145030],{"id":145029},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145032,145033],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[4000,145035],{"style":128870,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24515,145038,145040],{"id":145039},"_18142-分页按钮","18.1.4.2 分页按钮",[4000,145042],{"style":128870,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,145045,145047],{"className":129014,"code":145046,"language":129016,"meta":31,"style":31},"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",[33,145048,145049,145055,145071,145075,145079,145084,145090,145104,145109],{"__ignoreMap":31},[36,145050,145051,145053],{"class":38,"line":39},[36,145052,54105],{"class":53794},[36,145054,18091],{"class":53},[36,145056,145057,145059,145061,145064,145066,145069],{"class":38,"line":46},[36,145058,138997],{"class":49},[36,145060,53931],{"class":53},[36,145062,145063],{"class":49},"scale",[36,145065,54],{"class":53},[36,145067,145068],{"class":49},"1.2",[36,145070,5251],{"class":53},[36,145072,145073],{"class":38,"line":82},[36,145074,4103],{"class":53},[36,145076,145077],{"class":38,"line":88},[36,145078,138474],{"class":53},[36,145080,145081],{"class":38,"line":195},[36,145082,145083],{"class":42},"\u002F* 2D 缩放 *\u002F\n",[36,145085,145086,145088],{"class":38,"line":1517},[36,145087,54105],{"class":53794},[36,145089,18091],{"class":53},[36,145091,145092,145094,145096,145098,145100,145102],{"class":38,"line":2421},[36,145093,138997],{"class":49},[36,145095,53931],{"class":53},[36,145097,145063],{"class":49},[36,145099,54],{"class":53},[36,145101,145068],{"class":49},[36,145103,5251],{"class":53},[36,145105,145106],{"class":38,"line":2446},[36,145107,145108],{"class":42},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,145110,145111],{"class":38,"line":2469},[36,145112,4103],{"class":53},[19,145114,145115],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,145117,145119],{"className":129014,"code":145118,"language":129016,"meta":31,"style":31},"\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",[33,145120,145121,145126,145136,145157,145178,145182,145187,145193,145220],{"__ignoreMap":31},[36,145122,145123],{"class":38,"line":39},[36,145124,145125],{"class":42},"\u002F* 定义动画 *\u002F\n",[36,145127,145128,145131,145134],{"class":38,"line":46},[36,145129,145130],{"class":114},"@keyframes",[36,145132,145133],{"class":1997}," move",[36,145135,18091],{"class":53},[36,145137,145138,145141,145143,145145,145147,145150,145152,145154],{"class":38,"line":82},[36,145139,145140],{"class":4500},"  0%",[36,145142,82290],{"class":53},[36,145144,50630],{"class":49},[36,145146,53931],{"class":53},[36,145148,145149],{"class":49},"translateX",[36,145151,54],{"class":53},[36,145153,713],{"class":49},[36,145155,145156],{"class":53},"); }\n",[36,145158,145159,145162,145164,145166,145168,145170,145172,145174,145176],{"class":38,"line":88},[36,145160,145161],{"class":4500},"  100%",[36,145163,82290],{"class":53},[36,145165,50630],{"class":49},[36,145167,53931],{"class":53},[36,145169,145149],{"class":49},[36,145171,54],{"class":53},[36,145173,166],{"class":49},[36,145175,53986],{"class":114},[36,145177,145156],{"class":53},[36,145179,145180],{"class":38,"line":195},[36,145181,4103],{"class":53},[36,145183,145184],{"class":38,"line":1517},[36,145185,145186],{"class":42},"\u002F* 调用动画 *\u002F\n",[36,145188,145189,145191],{"class":38,"line":2421},[36,145190,54105],{"class":53794},[36,145192,18091],{"class":53},[36,145194,145195,145198,145200,145202,145204,145206,145208,145210,145212,145215,145218],{"class":38,"line":2446},[36,145196,145197],{"class":49},"  animation",[36,145199,53931],{"class":53},[36,145201,137699],{"class":49},[36,145203,733],{"class":49},[36,145205,3371],{"class":114},[36,145207,81163],{"class":49},[36,145209,6624],{"class":49},[36,145211,3371],{"class":114},[36,145213,145214],{"class":49}," infinite",[36,145216,145217],{"class":49}," alternate",[36,145219,3833],{"class":53},[36,145221,145222],{"class":38,"line":2469},[36,145223,4103],{"class":53},[19,145225,145115],{},[26,145227,145230],{"className":145228,"code":145229,"language":690},[688],"\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",[33,145231,145229],{"__ignoreMap":31},[24515,145233,145235],{"id":145234},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145237,145238],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[4000,145240],{"style":128870,"src":145241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,145243,145244],{"className":129014,"code":145118,"language":129016,"meta":31,"style":31},[33,145245,145246,145250,145258,145276,145296,145300,145304,145310,145334],{"__ignoreMap":31},[36,145247,145248],{"class":38,"line":39},[36,145249,145125],{"class":42},[36,145251,145252,145254,145256],{"class":38,"line":46},[36,145253,145130],{"class":114},[36,145255,145133],{"class":1997},[36,145257,18091],{"class":53},[36,145259,145260,145262,145264,145266,145268,145270,145272,145274],{"class":38,"line":82},[36,145261,145140],{"class":4500},[36,145263,82290],{"class":53},[36,145265,50630],{"class":49},[36,145267,53931],{"class":53},[36,145269,145149],{"class":49},[36,145271,54],{"class":53},[36,145273,713],{"class":49},[36,145275,145156],{"class":53},[36,145277,145278,145280,145282,145284,145286,145288,145290,145292,145294],{"class":38,"line":88},[36,145279,145161],{"class":4500},[36,145281,82290],{"class":53},[36,145283,50630],{"class":49},[36,145285,53931],{"class":53},[36,145287,145149],{"class":49},[36,145289,54],{"class":53},[36,145291,166],{"class":49},[36,145293,53986],{"class":114},[36,145295,145156],{"class":53},[36,145297,145298],{"class":38,"line":195},[36,145299,4103],{"class":53},[36,145301,145302],{"class":38,"line":1517},[36,145303,145186],{"class":42},[36,145305,145306,145308],{"class":38,"line":2421},[36,145307,54105],{"class":53794},[36,145309,18091],{"class":53},[36,145311,145312,145314,145316,145318,145320,145322,145324,145326,145328,145330,145332],{"class":38,"line":2446},[36,145313,145197],{"class":49},[36,145315,53931],{"class":53},[36,145317,137699],{"class":49},[36,145319,733],{"class":49},[36,145321,3371],{"class":114},[36,145323,81163],{"class":49},[36,145325,6624],{"class":49},[36,145327,3371],{"class":114},[36,145329,145214],{"class":49},[36,145331,145217],{"class":49},[36,145333,3833],{"class":53},[36,145335,145336],{"class":38,"line":2469},[36,145337,4103],{"class":53},[19,145339,145340],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[997,145342,145344],{"id":145343},"_1823-知识点回顾","18.2.3 知识点回顾",[26,145346,145347],{"className":129014,"code":131183,"language":129016,"meta":31,"style":31},[33,145348,145349,145355,145365],{"__ignoreMap":31},[36,145350,145351,145353],{"class":38,"line":39},[36,145352,54105],{"class":53794},[36,145354,18091],{"class":53},[36,145356,145357,145359,145361,145363],{"class":38,"line":46},[36,145358,131196],{"class":49},[36,145360,53931],{"class":53},[36,145362,64224],{"class":49},[36,145364,3833],{"class":53},[36,145366,145367],{"class":38,"line":82},[36,145368,4103],{"class":53},[14,145370,145372],{"id":145371},"_183-3d-转换","18.3 3D 转换",[19,145374,145375],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[997,145377,145379],{"id":145378},"_1831-坐标轴认识","18.3.1 坐标轴认识",[4000,145381],{"style":128870,"src":145382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[997,145384,145386],{"id":145385},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[4000,145388],{"style":128870,"src":145389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145391,145392],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145394,145395],{},"translate3d的效果需要搭配透视perspective来使用",[4000,145397],{"style":128870,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[997,145400,145402],{"id":145401},"_1833-透视-perspective","18.3.3 透视 perspective",[4000,145404],{"style":128870,"src":145405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145407,145408],{},"透视写在父盒子上，单位为像素",[997,145410,145412],{"id":145411},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24515,145414,145416],{"id":145415},"_18341-分开解释","18.3.4.1 分开解释",[4000,145418],{"style":128870,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[4000,145421],{"style":128870,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[4000,145424],{"style":128870,"src":145425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145427,145428],{},"总结来说就是左手原则",[24515,145430,145432],{"id":145431},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[4000,145434],{"style":128870,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[997,145437,145439],{"id":145438},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[4000,145441],{"style":128870,"src":145442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[4000,145444],{"style":128870,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,145447,145449],{"className":129014,"code":145448,"language":129016,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,145450,145451,145457,145470,145487],{"__ignoreMap":31},[36,145452,145453,145455],{"class":38,"line":39},[36,145454,54105],{"class":53794},[36,145456,18091],{"class":53},[36,145458,145459,145462,145464,145466,145468],{"class":38,"line":46},[36,145460,145461],{"class":49},"  perspective",[36,145463,53931],{"class":53},[36,145465,67562],{"class":49},[36,145467,53986],{"class":114},[36,145469,3833],{"class":53},[36,145471,145472,145474,145476,145479,145481,145483,145485],{"class":38,"line":82},[36,145473,138997],{"class":49},[36,145475,53931],{"class":53},[36,145477,145478],{"class":49},"rotateX",[36,145480,54],{"class":53},[36,145482,3207],{"class":49},[36,145484,144839],{"class":114},[36,145486,5251],{"class":53},[36,145488,145489],{"class":38,"line":88},[36,145490,4103],{"class":53},[997,145492,145494],{"id":145493},"_1836-案例","18.3.6 案例",[24515,145496,145498],{"id":145497},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[4000,145500],{"style":128870,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[4000,145503],{"style":128870,"src":145504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[4000,145506],{"style":128870,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,145509,145511],{"className":129014,"code":145510,"language":129016,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,145512,145513,145518,145524,145536],{"__ignoreMap":31},[36,145514,145515],{"class":38,"line":39},[36,145516,145517],{"class":42},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,145519,145520,145522],{"class":38,"line":46},[36,145521,136010],{"class":4500},[36,145523,18091],{"class":53},[36,145525,145526,145528,145530,145532,145534],{"class":38,"line":82},[36,145527,145461],{"class":49},[36,145529,53931],{"class":53},[36,145531,67562],{"class":49},[36,145533,53986],{"class":114},[36,145535,3833],{"class":53},[36,145537,145538],{"class":38,"line":88},[36,145539,4103],{"class":53},[24515,145541,145543],{"id":145542},"_18362-3d导航栏","18.3.6.2 3D导航栏",[4000,145545],{"style":128870,"src":145546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,145548,145549],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,145550,145551,145555,145569,145573],{"__ignoreMap":31},[36,145552,145553],{"class":38,"line":39},[36,145554,133125],{"class":42},[36,145556,145557,145559,145561,145563,145565,145567],{"class":38,"line":46},[36,145558,1507],{"class":53},[36,145560,54105],{"class":53794},[36,145562,55980],{"class":4500},[36,145564,115],{"class":53},[36,145566,133138],{"class":57},[36,145568,53801],{"class":53},[36,145570,145571],{"class":38,"line":82},[36,145572,133145],{"class":53},[36,145574,145575,145577,145579],{"class":38,"line":88},[36,145576,54279],{"class":53},[36,145578,54105],{"class":53794},[36,145580,53801],{"class":53},[24515,145582,145584],{"id":145583},"_18363-旋转木马","18.3.6.3 旋转木马",[4000,145586],{"style":128870,"src":145587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,145589,145590],{"className":129014,"code":144815,"language":129016,"meta":31,"style":31},[33,145591,145592,145598,145614],{"__ignoreMap":31},[36,145593,145594,145596],{"class":38,"line":39},[36,145595,54105],{"class":53794},[36,145597,18091],{"class":53},[36,145599,145600,145602,145604,145606,145608,145610,145612],{"class":38,"line":46},[36,145601,138997],{"class":49},[36,145603,53931],{"class":53},[36,145605,144832],{"class":49},[36,145607,54],{"class":53},[36,145609,3207],{"class":49},[36,145611,144839],{"class":114},[36,145613,5251],{"class":53},[36,145615,145616],{"class":38,"line":82},[36,145617,4103],{"class":53},[2602,145619,145620],{},"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":31,"searchDepth":46,"depth":46,"links":145622},[145623,145630],{"id":144718,"depth":46,"text":144719,"children":145624},[145625,145626,145627,145628,145629],{"id":144742,"depth":82,"text":144743},{"id":144797,"depth":82,"text":144798},{"id":144922,"depth":82,"text":144923},{"id":145025,"depth":82,"text":145026},{"id":145343,"depth":82,"text":145344},{"id":145371,"depth":46,"text":145372,"children":145631},[145632,145633,145634,145635,145636,145637],{"id":145378,"depth":82,"text":145379},{"id":145385,"depth":82,"text":145386},{"id":145401,"depth":82,"text":145402},{"id":145411,"depth":82,"text":145412},{"id":145438,"depth":82,"text":145439},{"id":145493,"depth":82,"text":145494},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144710,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145644,"title":145645,"body":145646,"description":2630,"extension":2631,"meta":145849,"navigation":545,"path":145850,"seo":145851,"stem":145852,"__hash__":145853},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145647,"toc":145838},[145648,145651,145655,145658,145661,145665,145668,145671,145674,145678,145681,145685,145688,145692,145695,145699,145713,145717,145742,145745,145748,145765,145769,145773,145776,145779,145783,145786,145789,145807,145811,145814,145828,145832,145835],[10,145649,145645],{"id":145650},"_19-移动端基础-前缀现状与视口",[14,145652,145654],{"id":145653},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[4000,145656],{"style":128870,"src":145657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145659,145660],{},"意思就是加个前缀，增加兼容性",[14,145662,145664],{"id":145663},"_192-移动端现状认识","19.2 移动端现状认识",[4000,145666],{"style":128870,"src":145667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145669,145670],{},"调试方法：",[4000,145672],{"style":128870,"src":145673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145675,145677],{"id":145676},"_193-视口","19.3 视口",[19,145679,145680],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[997,145682,145684],{"id":145683},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[4000,145686],{"style":128870,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[997,145689,145691],{"id":145690},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[4000,145693],{"style":128870,"src":145694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[997,145696,145698],{"id":145697},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3680,145700,145701,145704,145707,145710],{},[436,145702,145703],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[436,145705,145706],{},"理想视口，对设备来讲，是最理想的视口尺寸",[436,145708,145709],{},"需要手动添写meta视口标签通知浏览器操作",[436,145711,145712],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[997,145714,145716],{"id":145715},"_1934-meta视口标签","19.3.4 meta视口标签",[26,145718,145720],{"className":129761,"code":145719,"language":129763,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,145721,145722],{"__ignoreMap":31},[36,145723,145724,145726,145728,145730,145732,145734,145736,145738,145740],{"class":38,"line":39},[36,145725,1507],{"class":53},[36,145727,53838],{"class":53794},[36,145729,17440],{"class":4500},[36,145731,115],{"class":53},[36,145733,53885],{"class":57},[36,145735,53865],{"class":4500},[36,145737,115],{"class":53},[36,145739,53892],{"class":57},[36,145741,53801],{"class":53},[4000,145743],{"style":128870,"src":145744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145746,145747],{},"标准视口设置：",[433,145749,145750,145753,145756,145759,145762],{},[436,145751,145752],{},"视口宽度和设备保持一致",[436,145754,145755],{},"视口的默认缩放比例1.0",[436,145757,145758],{},"不允许用户自行缩放",[436,145760,145761],{},"最大允许的缩放比例1.0",[436,145763,145764],{},"最小允许的缩放比例1.0",[997,145766,145768],{"id":145767},"_1935-二倍图","19.3.5 二倍图",[24515,145770,145772],{"id":145771},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[4000,145774],{"style":128870,"src":145775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[4000,145777],{"style":128870,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24515,145780,145782],{"id":145781},"_19352-多倍图","19.3.5.2 多倍图",[4000,145784],{"style":128870,"src":145785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145787,145788],{},"二倍图法，代码如下：",[26,145790,145792],{"className":129014,"code":145791,"language":129016,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,145793,145794,145799],{"__ignoreMap":31},[36,145795,145796],{"class":38,"line":39},[36,145797,145798],{"class":42},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,145800,145801,145804],{"class":38,"line":46},[36,145802,145803],{"class":53794},"background-size",[36,145805,145806],{"class":53},": 50% 50%;\n",[24515,145808,145810],{"id":145809},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[4000,145812],{"style":128870,"src":145813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[433,145815,145816,145819,145822,145825],{},[436,145817,145818],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[436,145820,145821],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[436,145823,145824],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[436,145826,145827],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24515,145829,145831],{"id":145830},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[4000,145833],{"style":128870,"src":145834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2602,145836,145837],{},"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":31,"searchDepth":46,"depth":46,"links":145839},[145840,145841,145842],{"id":145653,"depth":46,"text":145654},{"id":145663,"depth":46,"text":145664},{"id":145676,"depth":46,"text":145677,"children":145843},[145844,145845,145846,145847,145848],{"id":145683,"depth":82,"text":145684},{"id":145690,"depth":82,"text":145691},{"id":145697,"depth":82,"text":145698},{"id":145715,"depth":82,"text":145716},{"id":145767,"depth":82,"text":145768},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145645,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145855,"title":145856,"body":145857,"description":2630,"extension":2631,"meta":146734,"navigation":545,"path":146735,"seo":146736,"stem":146737,"__hash__":146738},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145858,"toc":146718},[145859,145862,145866,145873,145876,145883,145886,145891,145894,145898,145902,145909,145912,145915,145919,145922,145925,145928,145931,145934,145938,145941,145945,145947,145950,145953,145956,145959,145961,145964,145966,145996,145998,146028,146032,146035,146039,146042,146059,146062,146065,146141,146143,146146,146149,146152,146155,146157,146160,146163,146167,146189,146192,146195,146199,146202,146208,146211,146215,146218,146221,146225,146228,146231,146234,146238,146241,146244,146247,146250,146254,146257,146261,146268,146271,146274,146277,146280,146290,146293,146296,146303,146306,146310,146313,146316,146320,146323,146326,146329,146374,146377,146380,146383,146385,146514,146516,146554,146557,146560,146562,146680,146682,146716],[10,145860,145856],{"id":145861},"_20-移动端布局实战上篇",[14,145863,145865],{"id":145864},"_201-移动端主流方案","20.1 移动端主流方案",[433,145867,145868],{},[436,145869,145870],{},[2839,145871,145872],{},"单独移动端页面（主流）",[4000,145874],{"style":128870,"src":145875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[433,145877,145878],{"start":46},[436,145879,145880],{},[2839,145881,145882],{},"响应式兼容PC移动端",[4000,145884],{"style":128870,"src":145885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[433,145887,145888],{"start":82},[436,145889,145890],{},"两种页面选型布局方式",[4000,145892],{"style":128870,"src":145893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145895,145897],{"id":145896},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[997,145899,145901],{"id":145900},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145903,145904,145905],{},"官网地址： ",[2923,145906,145907],{"href":145907,"rel":145908},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26381],[4000,145910],{"style":128870,"src":145911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[4000,145913],{"style":128870,"src":145914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[997,145916,145918],{"id":145917},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[4000,145920],{"style":128870,"src":145921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[4000,145923],{"style":128870,"src":145924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145926,145927],{},"去除高亮：",[19,145929,145930],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145932,145933],{},"-webkit- tap-highlight-color: transparent;",[14,145935,145937],{"id":145936},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[4000,145939],{"style":128870,"src":145940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145942,145944],{"id":145943},"_204-流式布局案例","20.4 流式布局案例",[19,145946,2731],{},[19,145948,145949],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145951,145952],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145954,145955],{},"图片格式：",[4000,145957],{"style":128870,"src":145958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145960,138056],{},[4000,145962],{"style":128870,"src":145963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145965,142382],{},[26,145967,145968],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,145969,145970],{"__ignoreMap":31},[36,145971,145972,145974,145976,145978,145980,145982,145984,145986,145988,145990,145992,145994],{"class":38,"line":39},[36,145973,1507],{"class":53},[36,145975,4000],{"class":53794},[36,145977,57730],{"class":4500},[36,145979,115],{"class":53},[36,145981,136530],{"class":57},[36,145983,57738],{"class":4500},[36,145985,115],{"class":53},[36,145987,136537],{"class":57},[36,145989,136540],{"class":4500},[36,145991,115],{"class":53},[36,145993,136545],{"class":57},[36,145995,53801],{"class":53},[19,145997,142471],{},[26,145999,146000],{"className":129761,"code":136515,"language":129763,"meta":31,"style":31},[33,146001,146002],{"__ignoreMap":31},[36,146003,146004,146006,146008,146010,146012,146014,146016,146018,146020,146022,146024,146026],{"class":38,"line":39},[36,146005,1507],{"class":53},[36,146007,4000],{"class":53794},[36,146009,57730],{"class":4500},[36,146011,115],{"class":53},[36,146013,136530],{"class":57},[36,146015,57738],{"class":4500},[36,146017,115],{"class":53},[36,146019,136537],{"class":57},[36,146021,136540],{"class":4500},[36,146023,115],{"class":53},[36,146025,136545],{"class":57},[36,146027,53801],{"class":53},[14,146029,146031],{"id":146030},"_205-flex布局","20.5 flex布局",[4000,146033],{"style":128870,"src":146034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[997,146036,146038],{"id":146037},"_2051-布局原理","20.5.1 布局原理",[19,146040,146041],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3680,146043,146044,146047,146050,146053,146056],{},[436,146045,146046],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[436,146048,146049],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[436,146051,146052],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[436,146054,146055],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[436,146057,146058],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146060,146061],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146063,146064],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,146066,146068],{"className":129014,"code":146067,"language":129016,"meta":31,"style":31},"\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",[33,146069,146070,146075,146082,146092,146104,146115,146126,146137],{"__ignoreMap":31},[36,146071,146072],{"class":38,"line":39},[36,146073,146074],{"class":42},"\u002F* Flex 弹性布局 *\u002F\n",[36,146076,146077,146080],{"class":38,"line":46},[36,146078,146079],{"class":4500},".container",[36,146081,18091],{"class":53},[36,146083,146084,146086,146088,146090],{"class":38,"line":82},[36,146085,130630],{"class":49},[36,146087,53931],{"class":53},[36,146089,53971],{"class":49},[36,146091,3833],{"class":53},[36,146093,146094,146097,146099,146102],{"class":38,"line":88},[36,146095,146096],{"class":49},"  flex-direction",[36,146098,53931],{"class":53},[36,146100,146101],{"class":49},"row",[36,146103,3833],{"class":53},[36,146105,146106,146109,146111,146113],{"class":38,"line":195},[36,146107,146108],{"class":49},"  justify-content",[36,146110,53931],{"class":53},[36,146112,54162],{"class":49},[36,146114,3833],{"class":53},[36,146116,146117,146120,146122,146124],{"class":38,"line":1517},[36,146118,146119],{"class":49},"  align-items",[36,146121,53931],{"class":53},[36,146123,54086],{"class":49},[36,146125,3833],{"class":53},[36,146127,146128,146131,146133,146135],{"class":38,"line":2421},[36,146129,146130],{"class":49},"  flex-wrap",[36,146132,53931],{"class":53},[36,146134,81093],{"class":49},[36,146136,3833],{"class":53},[36,146138,146139],{"class":38,"line":2446},[36,146140,4103],{"class":53},[19,146142,72939],{},[19,146144,146145],{},".form-item .male-label {",[19,146147,146148],{},"   margin-right: 20px;",[19,146150,146151],{},"   display: inline-flex;",[19,146153,146154],{},"   align-items: center;",[19,146156,2070],{},[4000,146158],{"style":128870,"src":146159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[4000,146161],{"style":128870,"src":146162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[997,146164,146166],{"id":146165},"_2052-常见父项属性","20.5.2 常见父项属性",[433,146168,146169,146172,146175,146178,146181,146184,146187],{},[436,146170,146171],{},"flex-direction：设置主轴的方向",[436,146173,146174],{},"justify-content：设置主轴上的子元素排列方式",[436,146176,146177],{},"flex-wrap：设置子元素是否换行",[436,146179,146180],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[436,146182,146183],{},"align-items：设置侧轴上的子元素排列方式（单行）",[436,146185,146186],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[436,146188,146171],{},[4000,146190],{"style":128870,"src":146191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[4000,146193],{"style":128870,"src":146194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[433,146196,146197],{"start":46},[436,146198,146174],{},[4000,146200],{"style":128870,"src":146201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146203,146204,146207],{},[33,146205,146206],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146209,146210],{},"跟着主轴走",[433,146212,146213],{"start":82},[436,146214,146177],{},[4000,146216],{"style":128870,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146219,146220],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[433,146222,146223],{"start":88},[436,146224,146180],{},[4000,146226],{"style":128870,"src":146227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146229,146230],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146232,146233],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[433,146235,146236],{"start":195},[436,146237,146183],{},[4000,146239],{"style":128870,"src":146240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146242,146243],{},"align-items与align-content之间的区别：",[19,146245,146246],{},"单找items，多找content",[4000,146248],{"style":128870,"src":146249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[433,146251,146252],{"start":1517},[436,146253,146186],{},[4000,146255],{"style":128870,"src":146256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[997,146258,146260],{"id":146259},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[433,146262,146263],{},[436,146264,146265],{},[2839,146266,146267],{},"flex 属性",[19,146269,146270],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[4000,146272],{"style":128870,"src":146273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146275,146276],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146278,146279],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[433,146281,146282],{"start":46},[436,146283,146284,16317,146287],{},[2839,146285,146286],{},"align-self",[2839,146288,146289],{},"控制子项自己在侧轴上的排列方式",[4000,146291],{"style":128870,"src":146292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146294,146295],{},"单个子盒子在父盒子侧轴上的排列方式",[433,146297,146298],{"start":82},[436,146299,146300,146302],{},[2839,146301,97775],{}," 属性定义项目的排列顺序",[4000,146304],{"style":128870,"src":146305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[997,146307,146309],{"id":146308},"_2054-背景线性渐变","20.5.4 背景线性渐变",[4000,146311],{"style":128870,"src":146312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146314,146315],{},"必须要添加浏览器的私有前缀",[997,146317,146319],{"id":146318},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146321,146322],{},"学到最重要的知识：",[19,146324,146325],{},"flex处理这样的布局思路",[4000,146327],{"style":128870,"src":146328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,146330,146332],{"className":129014,"code":146331,"language":129016,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,146333,146334,146340,146350,146360,146370],{"__ignoreMap":31},[36,146335,146336,146338],{"class":38,"line":39},[36,146337,146079],{"class":4500},[36,146339,18091],{"class":53},[36,146341,146342,146344,146346,146348],{"class":38,"line":46},[36,146343,130630],{"class":49},[36,146345,53931],{"class":53},[36,146347,53971],{"class":49},[36,146349,3833],{"class":53},[36,146351,146352,146354,146356,146358],{"class":38,"line":82},[36,146353,146108],{"class":49},[36,146355,53931],{"class":53},[36,146357,54086],{"class":49},[36,146359,3833],{"class":53},[36,146361,146362,146364,146366,146368],{"class":38,"line":88},[36,146363,146119],{"class":49},[36,146365,53931],{"class":53},[36,146367,54086],{"class":49},[36,146369,3833],{"class":53},[36,146371,146372],{"class":38,"line":195},[36,146373,4103],{"class":53},[19,146375,146376],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146378,146379],{},"使用属性选择器",[4000,146381],{"style":128870,"src":146382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146384,71376],{},[26,146386,146388],{"className":129761,"code":146387,"language":129763,"meta":31,"style":31},"\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",[33,146389,146390,146395,146409,146414,146434,146439,146458,146463,146482,146487,146506],{"__ignoreMap":31},[36,146391,146392],{"class":38,"line":39},[36,146393,146394],{"class":42},"\u003C!-- 携程网移动端案例结构 -->\n",[36,146396,146397,146399,146401,146403,146405,146407],{"class":38,"line":46},[36,146398,1507],{"class":53},[36,146400,54105],{"class":53794},[36,146402,55980],{"class":4500},[36,146404,115],{"class":53},[36,146406,94801],{"class":57},[36,146408,53801],{"class":53},[36,146410,146411],{"class":38,"line":82},[36,146412,146413],{"class":42},"  \u003C!-- 搜索栏 -->\n",[36,146415,146416,146418,146420,146422,146424,146427,146430,146432],{"class":38,"line":88},[36,146417,54638],{"class":53},[36,146419,54105],{"class":53794},[36,146421,55980],{"class":4500},[36,146423,115],{"class":53},[36,146425,146426],{"class":57},"\"search-index\"",[36,146428,146429],{"class":53},">...\u003C\u002F",[36,146431,54105],{"class":53794},[36,146433,53801],{"class":53},[36,146435,146436],{"class":38,"line":195},[36,146437,146438],{"class":42},"  \u003C!-- 焦点图 -->\n",[36,146440,146441,146443,146445,146447,146449,146452,146454,146456],{"class":38,"line":1517},[36,146442,54638],{"class":53},[36,146444,54105],{"class":53794},[36,146446,55980],{"class":4500},[36,146448,115],{"class":53},[36,146450,146451],{"class":57},"\"focus\"",[36,146453,146429],{"class":53},[36,146455,54105],{"class":53794},[36,146457,53801],{"class":53},[36,146459,146460],{"class":38,"line":2421},[36,146461,146462],{"class":42},"  \u003C!-- 主导航 -->\n",[36,146464,146465,146467,146469,146471,146473,146476,146478,146480],{"class":38,"line":2446},[36,146466,54638],{"class":53},[36,146468,54105],{"class":53794},[36,146470,55980],{"class":4500},[36,146472,115],{"class":53},[36,146474,146475],{"class":57},"\"local-nav\"",[36,146477,146429],{"class":53},[36,146479,54105],{"class":53794},[36,146481,53801],{"class":53},[36,146483,146484],{"class":38,"line":2469},[36,146485,146486],{"class":42},"  \u003C!-- 子导航 -->\n",[36,146488,146489,146491,146493,146495,146497,146500,146502,146504],{"class":38,"line":2492},[36,146490,54638],{"class":53},[36,146492,54105],{"class":53794},[36,146494,55980],{"class":4500},[36,146496,115],{"class":53},[36,146498,146499],{"class":57},"\"nav-common\"",[36,146501,146429],{"class":53},[36,146503,54105],{"class":53794},[36,146505,53801],{"class":53},[36,146507,146508,146510,146512],{"class":38,"line":4150},[36,146509,54279],{"class":53},[36,146511,54105],{"class":53794},[36,146513,53801],{"class":53},[19,146515,72939],{},[26,146517,146518],{"className":129014,"code":139465,"language":129016,"meta":31,"style":31},[33,146519,146520,146534,146550],{"__ignoreMap":31},[36,146521,146522,146524,146526,146528,146530,146532],{"class":38,"line":39},[36,146523,913],{"class":53794},[36,146525,3566],{"class":53},[36,146527,618],{"class":4500},[36,146529,115],{"class":114},[36,146531,65187],{"class":57},[36,146533,139482],{"class":53},[36,146535,146536,146538,146540,146542,146544,146546,146548],{"class":38,"line":46},[36,146537,73382],{"class":49},[36,146539,53931],{"class":53},[36,146541,707],{"class":49},[36,146543,53986],{"class":114},[36,146545,54015],{"class":49},[36,146547,132594],{"class":49},[36,146549,3833],{"class":53},[36,146551,146552],{"class":38,"line":82},[36,146553,4103],{"class":53},[19,146555,146556],{},"总代码和效果展示：",[4000,146558],{"style":128870,"src":146559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146561,71376],{},[26,146563,146564],{"className":129761,"code":146387,"language":129763,"meta":31,"style":31},[33,146565,146566,146570,146584,146588,146606,146610,146628,146632,146650,146654,146672],{"__ignoreMap":31},[36,146567,146568],{"class":38,"line":39},[36,146569,146394],{"class":42},[36,146571,146572,146574,146576,146578,146580,146582],{"class":38,"line":46},[36,146573,1507],{"class":53},[36,146575,54105],{"class":53794},[36,146577,55980],{"class":4500},[36,146579,115],{"class":53},[36,146581,94801],{"class":57},[36,146583,53801],{"class":53},[36,146585,146586],{"class":38,"line":82},[36,146587,146413],{"class":42},[36,146589,146590,146592,146594,146596,146598,146600,146602,146604],{"class":38,"line":88},[36,146591,54638],{"class":53},[36,146593,54105],{"class":53794},[36,146595,55980],{"class":4500},[36,146597,115],{"class":53},[36,146599,146426],{"class":57},[36,146601,146429],{"class":53},[36,146603,54105],{"class":53794},[36,146605,53801],{"class":53},[36,146607,146608],{"class":38,"line":195},[36,146609,146438],{"class":42},[36,146611,146612,146614,146616,146618,146620,146622,146624,146626],{"class":38,"line":1517},[36,146613,54638],{"class":53},[36,146615,54105],{"class":53794},[36,146617,55980],{"class":4500},[36,146619,115],{"class":53},[36,146621,146451],{"class":57},[36,146623,146429],{"class":53},[36,146625,54105],{"class":53794},[36,146627,53801],{"class":53},[36,146629,146630],{"class":38,"line":2421},[36,146631,146462],{"class":42},[36,146633,146634,146636,146638,146640,146642,146644,146646,146648],{"class":38,"line":2446},[36,146635,54638],{"class":53},[36,146637,54105],{"class":53794},[36,146639,55980],{"class":4500},[36,146641,115],{"class":53},[36,146643,146475],{"class":57},[36,146645,146429],{"class":53},[36,146647,54105],{"class":53794},[36,146649,53801],{"class":53},[36,146651,146652],{"class":38,"line":2469},[36,146653,146486],{"class":42},[36,146655,146656,146658,146660,146662,146664,146666,146668,146670],{"class":38,"line":2492},[36,146657,54638],{"class":53},[36,146659,54105],{"class":53794},[36,146661,55980],{"class":4500},[36,146663,115],{"class":53},[36,146665,146499],{"class":57},[36,146667,146429],{"class":53},[36,146669,54105],{"class":53794},[36,146671,53801],{"class":53},[36,146673,146674,146676,146678],{"class":38,"line":4150},[36,146675,54279],{"class":53},[36,146677,54105],{"class":53794},[36,146679,53801],{"class":53},[19,146681,72939],{},[26,146683,146684],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,146685,146686,146690,146704,146708],{"__ignoreMap":31},[36,146687,146688],{"class":38,"line":39},[36,146689,133125],{"class":42},[36,146691,146692,146694,146696,146698,146700,146702],{"class":38,"line":46},[36,146693,1507],{"class":53},[36,146695,54105],{"class":53794},[36,146697,55980],{"class":4500},[36,146699,115],{"class":53},[36,146701,133138],{"class":57},[36,146703,53801],{"class":53},[36,146705,146706],{"class":38,"line":82},[36,146707,133145],{"class":53},[36,146709,146710,146712,146714],{"class":38,"line":88},[36,146711,54279],{"class":53},[36,146713,54105],{"class":53794},[36,146715,53801],{"class":53},[2602,146717,140413],{},{"title":31,"searchDepth":46,"depth":46,"links":146719},[146720,146721,146725,146726,146727],{"id":145864,"depth":46,"text":145865},{"id":145896,"depth":46,"text":145897,"children":146722},[146723,146724],{"id":145900,"depth":82,"text":145901},{"id":145917,"depth":82,"text":145918},{"id":145936,"depth":46,"text":145937},{"id":145943,"depth":46,"text":145944},{"id":146030,"depth":46,"text":146031,"children":146728},[146729,146730,146731,146732,146733],{"id":146037,"depth":82,"text":146038},{"id":146165,"depth":82,"text":146166},{"id":146259,"depth":82,"text":146260},{"id":146308,"depth":82,"text":146309},{"id":146318,"depth":82,"text":146319},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145856,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146740,"title":146741,"body":146742,"description":2630,"extension":2631,"meta":147969,"navigation":545,"path":147970,"seo":147971,"stem":147972,"__hash__":147973},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146743,"toc":147947},[146744,146747,146751,146755,146758,146761,146765,146770,146773,146776,146779,146782,146785,146842,146845,146850,146853,146856,146860,146871,146875,146878,146881,146888,146893,146897,146900,146906,146909,146913,146916,146923,146926,146929,146936,146939,146946,146949,146952,146959,146962,146965,146967,146984,146988,146991,146994,146997,147001,147004,147007,147010,147013,147016,147019,147021,147024,147027,147089,147092,147202,147209,147215,147218,147221,147225,147228,147232,147237,147240,147247,147250,147256,147261,147264,147267,147270,147273,147276,147279,147282,147285,147341,147343,147369,147373,147376,147379,147382,147390,147393,147396,147400,147456,147459,147463,147469,147480,147483,147488,147491,147494,147500,147503,147506,147509,147512,147515,147518,147521,147524,147549,147555,147558,147561,147564,147567,147570,147573,147578,147581,147584,147587,147595,147598,147605,147608,147611,147613,147637,147639,147642,147645,147648,147651,147654,147657,147660,147694,147697,147700,147734,147741,147744,147747,147750,147753,147756,147759,147766,147769,147772,147775,147778,147785,147788,147791,147798,147801,147804,147808,147811,147814,147817,147820,147823,147826,147829,147832,147834,147858,147860,147884,147888,147899,147902,147905,147908,147911,147914,147917,147920,147923,147926,147929,147932,147935,147938,147941,147944],[10,146745,146741],{"id":146746},"_21-移动端布局实战下篇",[14,146748,146750],{"id":146749},"_211-rem适配布局","21.1 rem适配布局",[997,146752,146754],{"id":146753},"_2111-rem单位","21.1.1 rem单位",[4000,146756],{"style":128870,"src":146757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146759,146760],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[997,146762,146764],{"id":146763},"_2112-媒体查询","21.1.2 媒体查询",[433,146766,146767],{},[436,146768,146769],{},"参数介绍",[4000,146771],{"style":128870,"src":146772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[4000,146774],{"style":128870,"src":146775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[4000,146777],{"style":128870,"src":146778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[4000,146780],{"style":128870,"src":146781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[4000,146783],{"style":128870,"src":146784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,146786,146788],{"className":129014,"code":146787,"language":129016,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,146789,146790,146795,146814,146821,146834,146838],{"__ignoreMap":31},[36,146791,146792],{"class":38,"line":39},[36,146793,146794],{"class":42},"\u002F* 媒体查询 *\u002F\n",[36,146796,146797,146800,146802,146805,146807,146810,146812],{"class":38,"line":46},[36,146798,146799],{"class":114},"@media",[36,146801,4196],{"class":53},[36,146803,146804],{"class":49},"max-width",[36,146806,53931],{"class":53},[36,146808,146809],{"class":49},"768",[36,146811,53986],{"class":114},[36,146813,14965],{"class":53},[36,146815,146816,146819],{"class":38,"line":82},[36,146817,146818],{"class":4500},"  .container",[36,146820,18091],{"class":53},[36,146822,146823,146826,146828,146830,146832],{"class":38,"line":88},[36,146824,146825],{"class":49},"    width",[36,146827,53931],{"class":53},[36,146829,166],{"class":49},[36,146831,1095],{"class":114},[36,146833,3833],{"class":53},[36,146835,146836],{"class":38,"line":195},[36,146837,129810],{"class":53},[36,146839,146840],{"class":38,"line":1517},[36,146841,4103],{"class":53},[19,146843,146844],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[433,146846,146847],{"start":46},[436,146848,146849],{},"引入资源",[4000,146851],{"style":128870,"src":146852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146854,146855],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[997,146857,146859],{"id":146858},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3680,146861,146862,146865,146868],{},[436,146863,146864],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[436,146866,146867],{},"媒体查询可以根据不同设备宽度来修改样式",[436,146869,146870],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146872,146874],{"id":146873},"_212-less基础","21.2 Less基础",[19,146876,146877],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146879,146880],{},"Less可以解决该问题，它是css的扩展语言",[19,146882,146883,146884],{},"Less中文网址： ",[2923,146885,146886],{"href":146886,"rel":146887},"http:\u002F\u002Flesscss.cn\u002F",[26381],[19,146889,146890],{},[2839,146891,146892],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[997,146894,146896],{"id":146895},"_2121-less安装","21.2.1 less安装",[19,146898,146899],{},"如果使用vscode，则无需进行下方安装步骤",[19,146901,146902],{},[2923,146903,146904],{"href":146904,"rel":146905},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26381],[4000,146907],{"style":128870,"src":146908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[997,146910,146912],{"id":146911},"_2122-less使用","21.2.2 less使用",[19,146914,146915],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[433,146917,146918],{},[436,146919,146920],{},[2839,146921,146922],{},"Less 变量",[4000,146924],{"style":128870,"src":146925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[4000,146927],{"style":128870,"src":146928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[433,146930,146931],{"start":46},[436,146932,146933],{},[2839,146934,146935],{},"Less 编译",[4000,146937],{"style":128870,"src":146938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[433,146940,146941],{"start":82},[436,146942,146943],{},[2839,146944,146945],{},"Less 嵌套",[4000,146947],{"style":128870,"src":146948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[4000,146950],{"style":128870,"src":146951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[433,146953,146954],{"start":88},[436,146955,146956],{},[2839,146957,146958],{},"Less 运算",[4000,146960],{"style":128870,"src":146961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146963,146964],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146966,2731],{},[3680,146968,146969,146972,146975,146978,146981],{},[436,146970,146971],{},"乘号（*）和除号（\u002F）的写法",[436,146973,146974],{},"运算符中间左右有个空格隔开 1px + 5",[436,146976,146977],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[436,146979,146980],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[436,146982,146983],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146985,146987],{"id":146986},"_213-rem-适配方案","21.3 rem 适配方案",[19,146989,146990],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146992,146993],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[4000,146995],{"style":128870,"src":146996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[997,146998,147000],{"id":146999},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147002,147003],{},"rem + 媒体查询 + less 技术",[4000,147005],{"style":128870,"src":147006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147008,147009],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147011,147012],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[4000,147014],{"style":128870,"src":147015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147017,147018],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147020,17155],{},[4000,147022],{"style":128870,"src":147023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147025,147026],{},"index.html:",[26,147028,147030],{"className":129014,"code":147029,"language":129016,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,147031,147032,147037,147043,147059,147063,147069,147085],{"__ignoreMap":31},[36,147033,147034],{"class":38,"line":39},[36,147035,147036],{"class":42},"\u002F* rem 适配方案 *\u002F\n",[36,147038,147039,147041],{"class":38,"line":46},[36,147040,53131],{"class":53794},[36,147042,18091],{"class":53},[36,147044,147045,147047,147049,147052,147054,147056],{"class":38,"line":82},[36,147046,73112],{"class":49},[36,147048,53931],{"class":53},[36,147050,147051],{"class":49},"62.5",[36,147053,1095],{"class":114},[36,147055,132877],{"class":53},[36,147057,147058],{"class":42},"\u002F* 1rem = 10px *\u002F\n",[36,147060,147061],{"class":38,"line":88},[36,147062,4103],{"class":53},[36,147064,147065,147067],{"class":38,"line":195},[36,147066,132862],{"class":4500},[36,147068,18091],{"class":53},[36,147070,147071,147073,147075,147077,147080,147082],{"class":38,"line":1517},[36,147072,73054],{"class":49},[36,147074,53931],{"class":53},[36,147076,1317],{"class":49},[36,147078,147079],{"class":114},"rem",[36,147081,132877],{"class":53},[36,147083,147084],{"class":42},"\u002F* 100px *\u002F\n",[36,147086,147087],{"class":38,"line":2421},[36,147088,4103],{"class":53},[19,147090,147091],{},"common.less",[26,147093,147095],{"className":129014,"code":147094,"language":129016,"meta":31,"style":31},"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",[33,147096,147097,147103,147118,147122,147128,147142,147146,147150,147154,147160,147174,147178,147184,147198],{"__ignoreMap":31},[36,147098,147099,147101],{"class":38,"line":39},[36,147100,53131],{"class":53794},[36,147102,18091],{"class":53},[36,147104,147105,147107,147109,147111,147113,147115],{"class":38,"line":46},[36,147106,73112],{"class":49},[36,147108,53931],{"class":53},[36,147110,147051],{"class":49},[36,147112,1095],{"class":114},[36,147114,28580],{"class":53},[36,147116,147117],{"class":42},"\u002F* 10px *\u002F\n",[36,147119,147120],{"class":38,"line":82},[36,147121,4103],{"class":53},[36,147123,147124,147126],{"class":38,"line":88},[36,147125,54105],{"class":53794},[36,147127,18091],{"class":53},[36,147129,147130,147132,147134,147136,147138,147140],{"class":38,"line":195},[36,147131,73054],{"class":49},[36,147133,53931],{"class":53},[36,147135,1317],{"class":49},[36,147137,147079],{"class":114},[36,147139,28580],{"class":53},[36,147141,147084],{"class":42},[36,147143,147144],{"class":38,"line":1517},[36,147145,4103],{"class":53},[36,147147,147148],{"class":38,"line":2421},[36,147149,138474],{"class":53},[36,147151,147152],{"class":38,"line":2446},[36,147153,147036],{"class":42},[36,147155,147156,147158],{"class":38,"line":2469},[36,147157,53131],{"class":53794},[36,147159,18091],{"class":53},[36,147161,147162,147164,147166,147168,147170,147172],{"class":38,"line":2492},[36,147163,73112],{"class":49},[36,147165,53931],{"class":53},[36,147167,147051],{"class":49},[36,147169,1095],{"class":114},[36,147171,132877],{"class":53},[36,147173,147058],{"class":42},[36,147175,147176],{"class":38,"line":4150},[36,147177,4103],{"class":53},[36,147179,147180,147182],{"class":38,"line":4155},[36,147181,132862],{"class":4500},[36,147183,18091],{"class":53},[36,147185,147186,147188,147190,147192,147194,147196],{"class":38,"line":4161},[36,147187,73054],{"class":49},[36,147189,53931],{"class":53},[36,147191,1317],{"class":49},[36,147193,147079],{"class":114},[36,147195,132877],{"class":53},[36,147197,147084],{"class":42},[36,147199,147200],{"class":38,"line":4166},[36,147201,4103],{"class":53},[19,147203,147204,147205,147208],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[26070,147206,147207],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,147210,147213],{"className":147211,"code":147212,"language":690},[688],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,147214,147212],{"__ignoreMap":31},[19,147216,147217],{},"less保存时会自动变成.css文件",[19,147219,147220],{},"好好搞懂上述代码写法",[997,147222,147224],{"id":147223},"_2132-样式导入样式","21.3.2 样式导入样式",[4000,147226],{"style":128870,"src":147227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[997,147229,147231],{"id":147230},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[433,147233,147234],{},[436,147235,147236],{},"准备工作",[4000,147238],{"style":128870,"src":147239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147241,147242,147243],{},"github地址：",[2923,147244,147245],{"href":147245,"rel":147246},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26381],[19,147248,147249],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147251,147252,147253],{},"js文件引入到index.html中使用的是",[33,147254,147255],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[433,147257,147258],{"start":46},[436,147259,147260],{},"vscode插件",[4000,147262],{"style":128870,"src":147263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147265,147266],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147268,147269],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[4000,147271],{"style":128870,"src":147272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147274,147275],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[4000,147277],{"style":128870,"src":147278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147280,147281],{},"修改成75就可以，alt+z为快捷键",[19,147283,147284],{},"index.css：",[26,147286,147287],{"className":129014,"code":147029,"language":129016,"meta":31,"style":31},[33,147288,147289,147293,147299,147313,147317,147323,147337],{"__ignoreMap":31},[36,147290,147291],{"class":38,"line":39},[36,147292,147036],{"class":42},[36,147294,147295,147297],{"class":38,"line":46},[36,147296,53131],{"class":53794},[36,147298,18091],{"class":53},[36,147300,147301,147303,147305,147307,147309,147311],{"class":38,"line":82},[36,147302,73112],{"class":49},[36,147304,53931],{"class":53},[36,147306,147051],{"class":49},[36,147308,1095],{"class":114},[36,147310,132877],{"class":53},[36,147312,147058],{"class":42},[36,147314,147315],{"class":38,"line":88},[36,147316,4103],{"class":53},[36,147318,147319,147321],{"class":38,"line":195},[36,147320,132862],{"class":4500},[36,147322,18091],{"class":53},[36,147324,147325,147327,147329,147331,147333,147335],{"class":38,"line":1517},[36,147326,73054],{"class":49},[36,147328,53931],{"class":53},[36,147330,1317],{"class":49},[36,147332,147079],{"class":114},[36,147334,132877],{"class":53},[36,147336,147084],{"class":42},[36,147338,147339],{"class":38,"line":2421},[36,147340,4103],{"class":53},[19,147342,147026],{},[26,147344,147345],{"className":129014,"code":129418,"language":129016,"meta":31,"style":31},[33,147346,147347,147353,147365],{"__ignoreMap":31},[36,147348,147349,147351],{"class":38,"line":39},[36,147350,54294],{"class":53794},[36,147352,18091],{"class":53},[36,147354,147355,147357,147359,147361,147363],{"class":38,"line":46},[36,147356,73112],{"class":49},[36,147358,53931],{"class":53},[36,147360,3277],{"class":49},[36,147362,53986],{"class":114},[36,147364,3833],{"class":53},[36,147366,147367],{"class":38,"line":82},[36,147368,4103],{"class":53},[14,147370,147372],{"id":147371},"_214-响应式开发","21.4 响应式开发",[19,147374,147375],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[4000,147377],{"style":128870,"src":147378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147380,147381],{},"做法：",[3680,147383,147384,147387],{},[436,147385,147386],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[436,147388,147389],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[4000,147391],{"style":128870,"src":147392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147394,147395],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[997,147397,147399],{"id":147398},"_2141-简单代码示范","21.4.1 简单代码示范",[26,147401,147402],{"className":129014,"code":147029,"language":129016,"meta":31,"style":31},[33,147403,147404,147408,147414,147428,147432,147438,147452],{"__ignoreMap":31},[36,147405,147406],{"class":38,"line":39},[36,147407,147036],{"class":42},[36,147409,147410,147412],{"class":38,"line":46},[36,147411,53131],{"class":53794},[36,147413,18091],{"class":53},[36,147415,147416,147418,147420,147422,147424,147426],{"class":38,"line":82},[36,147417,73112],{"class":49},[36,147419,53931],{"class":53},[36,147421,147051],{"class":49},[36,147423,1095],{"class":114},[36,147425,132877],{"class":53},[36,147427,147058],{"class":42},[36,147429,147430],{"class":38,"line":88},[36,147431,4103],{"class":53},[36,147433,147434,147436],{"class":38,"line":195},[36,147435,132862],{"class":4500},[36,147437,18091],{"class":53},[36,147439,147440,147442,147444,147446,147448,147450],{"class":38,"line":1517},[36,147441,73054],{"class":49},[36,147443,53931],{"class":53},[36,147445,1317],{"class":49},[36,147447,147079],{"class":114},[36,147449,132877],{"class":53},[36,147451,147084],{"class":42},[36,147453,147454],{"class":38,"line":2421},[36,147455,4103],{"class":53},[19,147457,147458],{},"父盒子一般命名为container",[997,147460,147462],{"id":147461},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147464,147465,147466],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2839,147467,147468],{},"使得 Web 开发更加快捷",[3680,147470,147471],{},[436,147472,147473,147474],{},"官网：",[2839,147475,147476],{},[2923,147477,147478],{"href":147478,"rel":147479},"http:\u002F\u002Fgetbootstrap.com\u002F",[26381],[19,147481,147482],{},"可以直接去官网拿现成的东西",[433,147484,147485],{},[436,147486,147487],{},"Bootstrap的使用",[19,147489,147490],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147492,147493],{},"Bootstrap 使用四步曲：",[19,147495,147496,147499],{},[2839,147497,147498],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[4000,147501],{"style":128870,"src":147502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147504,147505],{},"打开Bootstrap官网，然后下载",[4000,147507],{"style":128870,"src":147508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[4000,147510],{"style":128870,"src":147511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147513,147514],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147516,147517],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147519,147520],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[4000,147522],{"style":128870,"src":147523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,147525,147527],{"className":129014,"code":147526,"language":129016,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,147528,147529,147535,147545],{"__ignoreMap":31},[36,147530,147531,147533],{"class":38,"line":39},[36,147532,129305],{"class":4500},[36,147534,18091],{"class":53},[36,147536,147537,147539,147541,147543],{"class":38,"line":46},[36,147538,73391],{"class":49},[36,147540,53931],{"class":53},[36,147542,59911],{"class":49},[36,147544,3833],{"class":53},[36,147546,147547],{"class":38,"line":82},[36,147548,4103],{"class":53},[19,147550,147551,147554],{},[33,147552,147553],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[4000,147556],{"style":128870,"src":147557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[4000,147559],{"style":128870,"src":147560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[4000,147562],{"style":128870,"src":147563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147565,147566],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[4000,147568],{"style":128870,"src":147569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147571,147572],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[433,147574,147575],{"start":46},[436,147576,147577],{},"布局容器",[4000,147579],{"style":128870,"src":147580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147582,147583],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147585,147586],{},"container-fluid用于移动式布局比较方便",[433,147588,147589],{"start":82},[436,147590,147591,147592],{},"bootstrap ",[2839,147593,147594],{},"栅格系统原理",[4000,147596],{"style":128870,"src":147597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[433,147599,147600],{"start":88},[436,147601,147602],{},[2839,147603,147604],{},"栅格选项参数",[4000,147606],{"style":128870,"src":147607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147609,147610],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147612,17155],{},[26,147614,147615],{"className":129014,"code":147526,"language":129016,"meta":31,"style":31},[33,147616,147617,147623,147633],{"__ignoreMap":31},[36,147618,147619,147621],{"class":38,"line":39},[36,147620,129305],{"class":4500},[36,147622,18091],{"class":53},[36,147624,147625,147627,147629,147631],{"class":38,"line":46},[36,147626,73391],{"class":49},[36,147628,53931],{"class":53},[36,147630,59911],{"class":49},[36,147632,3833],{"class":53},[36,147634,147635],{"class":38,"line":82},[36,147636,4103],{"class":53},[19,147638,138056],{},[4000,147640],{"style":128870,"src":147641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147643,147644],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147646,147647],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147649,147650],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147652,147653],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147655,147656],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147658,147659],{},"汇总展示说明：",[26,147661,147662],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,147663,147664,147668,147682,147686],{"__ignoreMap":31},[36,147665,147666],{"class":38,"line":39},[36,147667,133125],{"class":42},[36,147669,147670,147672,147674,147676,147678,147680],{"class":38,"line":46},[36,147671,1507],{"class":53},[36,147673,54105],{"class":53794},[36,147675,55980],{"class":4500},[36,147677,115],{"class":53},[36,147679,133138],{"class":57},[36,147681,53801],{"class":53},[36,147683,147684],{"class":38,"line":82},[36,147685,133145],{"class":53},[36,147687,147688,147690,147692],{"class":38,"line":88},[36,147689,54279],{"class":53},[36,147691,54105],{"class":53794},[36,147693,53801],{"class":53},[4000,147695],{"style":128870,"src":147696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147698,147699],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,147701,147702],{"className":129761,"code":133118,"language":129763,"meta":31,"style":31},[33,147703,147704,147708,147722,147726],{"__ignoreMap":31},[36,147705,147706],{"class":38,"line":39},[36,147707,133125],{"class":42},[36,147709,147710,147712,147714,147716,147718,147720],{"class":38,"line":46},[36,147711,1507],{"class":53},[36,147713,54105],{"class":53794},[36,147715,55980],{"class":4500},[36,147717,115],{"class":53},[36,147719,133138],{"class":57},[36,147721,53801],{"class":53},[36,147723,147724],{"class":38,"line":82},[36,147725,133145],{"class":53},[36,147727,147728,147730,147732],{"class":38,"line":88},[36,147729,54279],{"class":53},[36,147731,54105],{"class":53794},[36,147733,53801],{"class":53},[433,147735,147736],{"start":195},[436,147737,147738],{},[2839,147739,147740],{},"列嵌套",[4000,147742],{"style":128870,"src":147743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147745,147746],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147748,147749],{},"没加row内部这样：",[4000,147751],{"style":128870,"src":147752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147754,147755],{},"加上row之后内部为：",[4000,147757],{"style":128870,"src":147758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[433,147760,147761],{"start":1517},[436,147762,147763],{},[2839,147764,147765],{},"列偏移",[4000,147767],{"style":128870,"src":147768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147770,147771],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147773,147774],{},"要加偏移量，即偏移份数",[19,147776,147777],{},"偏移的份数=12-两个盒子的份数",[433,147779,147780],{"start":2421},[436,147781,147782],{},[2839,147783,147784],{},"列排序",[4000,147786],{"style":128870,"src":147787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147789,147790],{},"pull拉左；push推右",[433,147792,147793],{"start":2446},[436,147794,147795],{},[2839,147796,147797],{},"响应式工具",[4000,147799],{"style":128870,"src":147800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147802,147803],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[997,147805,147807],{"id":147806},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147809,147810],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147812,147813],{},"ul {",[19,147815,147816],{},"list-style: none;",[19,147818,147819],{},"margin:0;",[19,147821,147822],{},"padding:0; }",[4000,147824],{"style":128870,"src":147825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[4000,147827],{"style":128870,"src":147828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147830,147831],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147833,71376],{},[26,147835,147836],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,147837,147838,147844,147854],{"__ignoreMap":31},[36,147839,147840,147842],{"class":38,"line":39},[36,147841,132862],{"class":4500},[36,147843,18091],{"class":53},[36,147845,147846,147848,147850,147852],{"class":38,"line":46},[36,147847,133494],{"class":49},[36,147849,53931],{"class":53},[36,147851,26253],{"class":49},[36,147853,3833],{"class":53},[36,147855,147856],{"class":38,"line":82},[36,147857,4103],{"class":53},[19,147859,72939],{},[26,147861,147862],{"className":129014,"code":141682,"language":129016,"meta":31,"style":31},[33,147863,147864,147870,147880],{"__ignoreMap":31},[36,147865,147866,147868],{"class":38,"line":39},[36,147867,132862],{"class":4500},[36,147869,18091],{"class":53},[36,147871,147872,147874,147876,147878],{"class":38,"line":46},[36,147873,133494],{"class":49},[36,147875,53931],{"class":53},[36,147877,26253],{"class":49},[36,147879,3833],{"class":53},[36,147881,147882],{"class":38,"line":82},[36,147883,4103],{"class":53},[14,147885,147887],{"id":147886},"_215-swiper-插件使用","21.5 swiper 插件使用",[3680,147889,147890,147893,147896],{},[436,147891,147892],{},"下载需要的css和js文件html页面中 引入相关文件",[436,147894,147895],{},"官网找到类似案例，复制html结构，css样式 js 语法",[436,147897,147898],{},"根据需求定制修改模块",[4000,147900],{"style":128870,"src":147901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147903,147904],{},"解压后将这两部分放到项目中",[4000,147906],{"style":128870,"src":147907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147909,147910],{},"这个插件可以帮助我们实现轮播图效果",[19,147912,147913],{},"用法：",[4000,147915],{"style":128870,"src":147916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147918,147919],{},"找到自己喜欢的",[4000,147921],{"style":128870,"src":147922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147924,147925],{},"右键，查看网页源代码",[4000,147927],{"style":128870,"src":147928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147930,147931],{},"复制人家的结构内容",[19,147933,147934],{},"然后去看API文档：",[4000,147936],{"style":128870,"src":147937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147939,147940],{},"可以看看如何修改样式",[19,147942,147943],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2602,147945,147946],{},"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":31,"searchDepth":46,"depth":46,"links":147948},[147949,147954,147958,147963,147968],{"id":146749,"depth":46,"text":146750,"children":147950},[147951,147952,147953],{"id":146753,"depth":82,"text":146754},{"id":146763,"depth":82,"text":146764},{"id":146858,"depth":82,"text":146859},{"id":146873,"depth":46,"text":146874,"children":147955},[147956,147957],{"id":146895,"depth":82,"text":146896},{"id":146911,"depth":82,"text":146912},{"id":146986,"depth":46,"text":146987,"children":147959},[147960,147961,147962],{"id":146999,"depth":82,"text":147000},{"id":147223,"depth":82,"text":147224},{"id":147230,"depth":82,"text":147231},{"id":147371,"depth":46,"text":147372,"children":147964},[147965,147966,147967],{"id":147398,"depth":82,"text":147399},{"id":147461,"depth":82,"text":147462},{"id":147806,"depth":82,"text":147807},{"id":147886,"depth":46,"text":147887},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146741,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147975,"title":147976,"body":147977,"description":2630,"extension":2631,"meta":148197,"navigation":545,"path":148198,"seo":148199,"stem":148200,"__hash__":148201},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147978,"toc":148193},[147979,147982,147986,147989,148004,148009,148012,148017,148052,148057,148069,148074,148087,148092,148109,148114,148134,148139,148157,148160,148163,148166,148169,148173,148176,148179,148182,148185,148188,148191],[10,147980,147976],{"id":147981},"_22-代码提交与新型相对单位",[14,147983,147985],{"id":147984},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147987,147988],{},"法1：",[433,147990,147991,147998,148001],{},[436,147992,147993,147994],{},"登录网站注册：",[2923,147995,147996],{"href":147996,"rel":147997},"https:\u002F\u002Fgitee.com\u002F",[26381],[436,147999,148000],{},"码云创建新的仓库",[436,148002,148003],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3680,148005,148006],{},[436,148007,148008],{},"在网站根目录右键-- Git Bash Here",[4000,148010],{"style":128870,"src":148011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3680,148013,148014],{},[436,148015,148016],{},"如果是第一次利用git提交，请配置好全局选项",[26,148018,148020],{"className":119762,"code":148019,"language":119764,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,148021,148022,148038],{"__ignoreMap":31},[36,148023,148024,148027,148029,148032,148035],{"class":38,"line":39},[36,148025,148026],{"class":4500},"git",[36,148028,122185],{"class":57},[36,148030,148031],{"class":49}," --global",[36,148033,148034],{"class":57}," user.name",[36,148036,148037],{"class":57}," \"你的名字\"\n",[36,148039,148040,148042,148044,148046,148049],{"class":38,"line":46},[36,148041,148026],{"class":4500},[36,148043,122185],{"class":57},[36,148045,148031],{"class":49},[36,148047,148048],{"class":57}," user.email",[36,148050,148051],{"class":57}," \"你的邮箱\"\n",[3680,148053,148054],{},[436,148055,148056],{},"初始化仓库",[26,148058,148060],{"className":119762,"code":148059,"language":119764,"meta":31,"style":31},"git init\n",[33,148061,148062],{"__ignoreMap":31},[36,148063,148064,148066],{"class":38,"line":39},[36,148065,148026],{"class":4500},[36,148067,148068],{"class":57}," init\n",[3680,148070,148071],{},[436,148072,148073],{},"把本地文件放到暂存区",[26,148075,148077],{"className":119762,"code":148076,"language":119764,"meta":31,"style":31},"git add .\n",[33,148078,148079],{"__ignoreMap":31},[36,148080,148081,148083,148085],{"class":38,"line":39},[36,148082,148026],{"class":4500},[36,148084,7738],{"class":57},[36,148086,31251],{"class":57},[3680,148088,148089],{},[436,148090,148091],{},"把本地文件放到本地仓库里面",[26,148093,148095],{"className":119762,"code":148094,"language":119764,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,148096,148097],{"__ignoreMap":31},[36,148098,148099,148101,148104,148106],{"class":38,"line":39},[36,148100,148026],{"class":4500},[36,148102,148103],{"class":57}," commit",[36,148105,103357],{"class":49},[36,148107,148108],{"class":57}," \"first commit\"\n",[3680,148110,148111],{},[436,148112,148113],{},"链接远程仓库",[26,148115,148117],{"className":119762,"code":148116,"language":119764,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,148118,148119],{"__ignoreMap":31},[36,148120,148121,148123,148126,148128,148131],{"class":38,"line":39},[36,148122,148026],{"class":4500},[36,148124,148125],{"class":57}," remote",[36,148127,7738],{"class":57},[36,148129,148130],{"class":57}," origin",[36,148132,148133],{"class":57}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3680,148135,148136],{},[436,148137,148138],{},"把本地仓库的文件推送到远程仓库 push",[26,148140,148142],{"className":119762,"code":148141,"language":119764,"meta":31,"style":31},"git push -u origin master\n",[33,148143,148144],{"__ignoreMap":31},[36,148145,148146,148148,148150,148152,148154],{"class":38,"line":39},[36,148147,148026],{"class":4500},[36,148149,31526],{"class":57},[36,148151,30801],{"class":49},[36,148153,148130],{"class":57},[36,148155,148156],{"class":57}," master\n",[4000,148158],{"style":128870,"src":148159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148161,148162],{},"上方方法暂未实现，后边学完git后在整",[19,148164,148165],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[4000,148167],{"style":128870,"src":148168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148170,148172],{"id":148171},"_222-新型相对单位","22.2 新型相对单位",[4000,148174],{"style":128870,"src":148175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[4000,148177],{"style":128870,"src":148178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148180,148181],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148183,148184],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[4000,148186],{"style":128870,"src":148187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148189,148190],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2602,148192,26474],{},{"title":31,"searchDepth":46,"depth":46,"links":148194},[148195,148196],{"id":147984,"depth":46,"text":147985},{"id":148171,"depth":46,"text":148172},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147976,"description":2630},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148203,"title":148204,"body":148205,"description":148209,"extension":2631,"meta":148210,"navigation":545,"path":148211,"seo":148212,"stem":148213,"__hash__":148214},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148206,"toc":148207},[],{"title":31,"searchDepth":46,"depth":46,"links":148208},[],"自己正经开始学编程的第一门语言！",{"category":95317},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148204,"description":148209},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148216,"title":148217,"body":148218,"description":2630,"extension":2631,"meta":149357,"navigation":545,"path":149358,"seo":149359,"stem":149360,"__hash__":149361},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148219,"toc":149333},[148220,148223,148227,148230,148233,148258,148261,148267,148271,148274,148301,148304,148344,148347,148359,148362,148368,148372,148376,148403,148420,148427,148431,148434,148460,148463,148467,148470,148510,148513,148530,148536,148540,148545,148589,148592,148610,148613,148681,148685,148692,148695,148710,148713,148722,148725,148736,148739,148748,148751,148768,148771,148786,148790,148794,148797,148799,148819,148823,148826,148829,148840,148843,148849,148853,148859,148886,148889,148901,148904,148915,148918,148924,148928,148934,148983,148986,149024,149027,149060,149063,149097,149101,149104,149124,149127,149160,149163,149176,149180,149184,149190,149193,149206,149210,149213,149219,149222,149226,149229,149232,149281,149285,149301,149307,149314,149320,149330],[10,148221,148217],{"id":148222},"_1-python环境与第一个程序",[14,148224,148226],{"id":148225},"_11-什么是python","1.1 什么是Python",[19,148228,148229],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148231,148232],{},"理解 Python 时抓住三个关键词：",[433,148234,148235,148238,148241],{},[436,148236,148237],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[436,148239,148240],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[436,148242,148243,148244,273,148247,273,148250,273,148253,273,148255,1296],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,148245,148246],{},"os",[33,148248,148249],{},"sys",[33,148251,148252],{},"json",[33,148254,60350],{},[33,148256,148257],{},"datetime",[19,148259,148260],{},"Python 程序的运行链路：",[26,148262,148265],{"className":148263,"code":148264,"language":690,"meta":31},[688],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,148266,148264],{"__ignoreMap":31},[14,148268,148270],{"id":148269},"_12-python解释器","1.2 Python解释器",[19,148272,148273],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,148275,148277],{"className":26338,"code":148276,"language":26340,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,148278,148279,148285,148291,148296],{"__ignoreMap":31},[36,148280,148281,148283],{"class":38,"line":39},[36,148282,30],{"class":4500},[36,148284,28805],{"class":49},[36,148286,148287,148289],{"class":38,"line":46},[36,148288,103354],{"class":4500},[36,148290,28805],{"class":49},[36,148292,148293],{"class":38,"line":82},[36,148294,148295],{"class":4500},"python\n",[36,148297,148298],{"class":38,"line":88},[36,148299,148300],{"class":4500},"python3\n",[19,148302,148303],{},"进入交互模式后，可以直接输入表达式：",[26,148305,148307],{"className":28,"code":148306,"language":30,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,148308,148309,148320,148325,148339],{"__ignoreMap":31},[36,148310,148311,148314,148316,148318],{"class":38,"line":39},[36,148312,148313],{"class":114},">>>",[36,148315,733],{"class":49},[36,148317,730],{"class":114},[36,148319,1237],{"class":49},[36,148321,148322],{"class":38,"line":46},[36,148323,148324],{"class":49},"3\n",[36,148326,148327,148329,148332,148334,148337],{"class":38,"line":82},[36,148328,148313],{"class":114},[36,148330,148331],{"class":49}," print",[36,148333,54],{"class":53},[36,148335,148336],{"class":57},"\"hello python\"",[36,148338,61],{"class":53},[36,148340,148341],{"class":38,"line":88},[36,148342,148343],{"class":53},"hello python\n",[19,148345,148346],{},"退出交互模式：",[26,148348,148350],{"className":28,"code":148349,"language":30,"meta":31,"style":31},"exit()\n",[33,148351,148352],{"__ignoreMap":31},[36,148353,148354,148357],{"class":38,"line":39},[36,148355,148356],{"class":49},"exit",[36,148358,4513],{"class":53},[19,148360,148361],{},"或使用快捷键：",[26,148363,148366],{"className":148364,"code":148365,"language":690,"meta":31},[688],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,148367,148365],{"__ignoreMap":31},[14,148369,148371],{"id":148370},"_13-安装python","1.3 安装Python",[997,148373,148375],{"id":148374},"_131-windows安装","1.3.1 Windows安装",[433,148377,148378,148385,148388,148394,148400],{},[436,148379,148380,148381],{},"打开 Python 官网：",[2923,148382,148383],{"href":148383,"rel":148384},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26381],[436,148386,148387],{},"下载 Windows Installer。",[436,148389,148390,148391,1296],{},"安装时勾选 ",[33,148392,148393],{},"Add Python to PATH",[436,148395,148396,148397,1296],{},"点击 ",[33,148398,148399],{},"Install Now",[436,148401,148402],{},"安装完成后打开命令提示符验证：",[26,148404,148406],{"className":26338,"code":148405,"language":26340,"meta":31,"style":31},"python --version\npip --version\n",[33,148407,148408,148414],{"__ignoreMap":31},[36,148409,148410,148412],{"class":38,"line":39},[36,148411,30],{"class":4500},[36,148413,28805],{"class":49},[36,148415,148416,148418],{"class":38,"line":46},[36,148417,26347],{"class":4500},[36,148419,28805],{"class":49},[19,148421,148422,148423,148426],{},"如果提示 ",[33,148424,148425],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[997,148428,148430],{"id":148429},"_132-macos安装","1.3.2 macOS安装",[19,148432,148433],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,148435,148437],{"className":26338,"code":148436,"language":26340,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,148438,148439,148448,148454],{"__ignoreMap":31},[36,148440,148441,148444,148446],{"class":38,"line":39},[36,148442,148443],{"class":4500},"brew",[36,148445,26350],{"class":57},[36,148447,126781],{"class":57},[36,148449,148450,148452],{"class":38,"line":46},[36,148451,103354],{"class":4500},[36,148453,28805],{"class":49},[36,148455,148456,148458],{"class":38,"line":82},[36,148457,122166],{"class":4500},[36,148459,28805],{"class":49},[19,148461,148462],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[997,148464,148466],{"id":148465},"_133-linux安装","1.3.3 Linux安装",[19,148468,148469],{},"Ubuntu\u002FDebian：",[26,148471,148473],{"className":26338,"code":148472,"language":26340,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,148474,148475,148483,148498,148504],{"__ignoreMap":31},[36,148476,148477,148479,148481],{"class":38,"line":39},[36,148478,27093],{"class":4500},[36,148480,119783],{"class":57},[36,148482,28754],{"class":57},[36,148484,148485,148487,148489,148491,148493,148495],{"class":38,"line":46},[36,148486,27093],{"class":4500},[36,148488,119783],{"class":57},[36,148490,26350],{"class":57},[36,148492,106874],{"class":57},[36,148494,103273],{"class":57},[36,148496,148497],{"class":57}," python3-venv\n",[36,148499,148500,148502],{"class":38,"line":82},[36,148501,103354],{"class":4500},[36,148503,28805],{"class":49},[36,148505,148506,148508],{"class":38,"line":88},[36,148507,122166],{"class":4500},[36,148509,28805],{"class":49},[19,148511,148512],{},"Fedora：",[26,148514,148516],{"className":26338,"code":148515,"language":26340,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,148517,148518],{"__ignoreMap":31},[36,148519,148520,148522,148524,148526,148528],{"class":38,"line":39},[36,148521,27093],{"class":4500},[36,148523,28827],{"class":57},[36,148525,26350],{"class":57},[36,148527,106874],{"class":57},[36,148529,122231],{"class":57},[19,148531,148532,148533,148535],{},"Linux 上通常使用 ",[33,148534,103354],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148537,148539],{"id":148538},"_14-pip包管理器","1.4 pip包管理器",[19,148541,148542,148544],{},[33,148543,26347],{}," 用来安装第三方库。",[26,148546,148548],{"className":26338,"code":148547,"language":26340,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,148549,148550,148559,148568,148576,148582],{"__ignoreMap":31},[36,148551,148552,148554,148556],{"class":38,"line":39},[36,148553,26347],{"class":4500},[36,148555,26350],{"class":57},[36,148557,148558],{"class":57}," requests\n",[36,148560,148561,148563,148566],{"class":38,"line":46},[36,148562,26347],{"class":4500},[36,148564,148565],{"class":57}," uninstall",[36,148567,148558],{"class":57},[36,148569,148570,148572,148574],{"class":38,"line":82},[36,148571,26347],{"class":4500},[36,148573,120040],{"class":57},[36,148575,148558],{"class":57},[36,148577,148578,148580],{"class":38,"line":88},[36,148579,26347],{"class":4500},[36,148581,121421],{"class":57},[36,148583,148584,148586],{"class":38,"line":195},[36,148585,26347],{"class":4500},[36,148587,148588],{"class":57}," freeze\n",[19,148590,148591],{},"国内网络较慢时可以临时使用镜像：",[26,148593,148595],{"className":26338,"code":148594,"language":26340,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,148596,148597],{"__ignoreMap":31},[36,148598,148599,148601,148603,148606,148608],{"class":38,"line":39},[36,148600,26347],{"class":4500},[36,148602,26350],{"class":57},[36,148604,148605],{"class":57}," requests",[36,148607,28942],{"class":49},[36,148609,122194],{"class":57},[19,148611,148612],{},"常见第三方库：",[206,148614,148615,148624],{},[209,148616,148617],{},[212,148618,148619,148622],{},[215,148620,148621],{},"库",[215,148623,105169],{},[225,148625,148626,148634,148641,148649,148657,148665,148673],{},[212,148627,148628,148631],{},[230,148629,148630],{},"requests",[230,148632,148633],{},"网络请求",[212,148635,148636,148638],{},[230,148637,103102],{},[230,148639,148640],{},"数值计算",[212,148642,148643,148646],{},[230,148644,148645],{},"pandas",[230,148647,148648],{},"表格数据处理",[212,148650,148651,148654],{},[230,148652,148653],{},"matplotlib",[230,148655,148656],{},"绘图",[212,148658,148659,148662],{},[230,148660,148661],{},"pyecharts",[230,148663,148664],{},"ECharts 图表",[212,148666,148667,148670],{},[230,148668,148669],{},"flask",[230,148671,148672],{},"Web 后端",[212,148674,148675,148678],{},[230,148676,148677],{},"pytest",[230,148679,148680],{},"自动化测试",[14,148682,148684],{"id":148683},"_15-虚拟环境","1.5 虚拟环境",[19,148686,148687,148688,148691],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,148689,148690],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148693,148694],{},"创建虚拟环境：",[26,148696,148698],{"className":26338,"code":148697,"language":26340,"meta":31,"style":31},"python -m venv .venv\n",[33,148699,148700],{"__ignoreMap":31},[36,148701,148702,148704,148706,148708],{"class":38,"line":39},[36,148703,30],{"class":4500},[36,148705,103357],{"class":49},[36,148707,103360],{"class":57},[36,148709,103363],{"class":57},[19,148711,148712],{},"Windows 激活：",[26,148714,148716],{"className":26338,"code":148715,"language":26340,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,148717,148718],{"__ignoreMap":31},[36,148719,148720],{"class":38,"line":39},[36,148721,148715],{"class":4500},[19,148723,148724],{},"macOS\u002FLinux 激活：",[26,148726,148728],{"className":26338,"code":148727,"language":26340,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,148729,148730],{"__ignoreMap":31},[36,148731,148732,148734],{"class":38,"line":39},[36,148733,103368],{"class":49},[36,148735,103371],{"class":57},[19,148737,148738],{},"退出虚拟环境：",[26,148740,148742],{"className":26338,"code":148741,"language":26340,"meta":31,"style":31},"deactivate\n",[33,148743,148744],{"__ignoreMap":31},[36,148745,148746],{"class":38,"line":39},[36,148747,148741],{"class":4500},[19,148749,148750],{},"保存依赖：",[26,148752,148754],{"className":26338,"code":148753,"language":26340,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,148755,148756],{"__ignoreMap":31},[36,148757,148758,148760,148763,148765],{"class":38,"line":39},[36,148759,26347],{"class":4500},[36,148761,148762],{"class":57}," freeze",[36,148764,1320],{"class":114},[36,148766,148767],{"class":57}," requirements.txt\n",[19,148769,148770],{},"安装依赖：",[26,148772,148774],{"className":26338,"code":148773,"language":26340,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,148775,148776],{"__ignoreMap":31},[36,148777,148778,148780,148782,148784],{"class":38,"line":39},[36,148779,26347],{"class":4500},[36,148781,26350],{"class":57},[36,148783,122105],{"class":49},[36,148785,148767],{"class":57},[14,148787,148789],{"id":148788},"_16-开发工具","1.6 开发工具",[997,148791,148793],{"id":148792},"_161-pycharm","1.6.1 PyCharm",[19,148795,148796],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148798,124526],{},[433,148800,148801,148804,148807,148813,148816],{},[436,148802,148803],{},"New Project：创建项目。",[436,148805,148806],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[436,148808,148809,148810,128445],{},"New Python File：创建 ",[33,148811,148812],{},".py",[436,148814,148815],{},"Run：运行当前文件。",[436,148817,148818],{},"Debug：断点调试。",[997,148820,148822],{"id":148821},"_162-vs-code","1.6.2 VS Code",[19,148824,148825],{},"VS Code 轻量，适合后续多语言开发。",[19,148827,148828],{},"建议安装插件：",[433,148830,148831,148834,148837],{},[436,148832,148833],{},"Python。",[436,148835,148836],{},"Pylance。",[436,148838,148839],{},"Jupyter。",[19,148841,148842],{},"选择解释器：",[26,148844,148847],{"className":148845,"code":148846,"language":690,"meta":31},[688],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,148848,148846],{"__ignoreMap":31},[14,148850,148852],{"id":148851},"_17-第一个python程序","1.7 第一个Python程序",[19,148854,148855,148856,27135],{},"创建文件 ",[33,148857,148858],{},"hello.py",[26,148860,148862],{"className":28,"code":148861,"language":30,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,148863,148864,148875],{"__ignoreMap":31},[36,148865,148866,148868,148870,148873],{"class":38,"line":39},[36,148867,50],{"class":49},[36,148869,54],{"class":53},[36,148871,148872],{"class":57},"\"Hello World\"",[36,148874,61],{"class":53},[36,148876,148877,148879,148881,148884],{"class":38,"line":46},[36,148878,50],{"class":49},[36,148880,54],{"class":53},[36,148882,148883],{"class":57},"\"你好，Python\"",[36,148885,61],{"class":53},[19,148887,148888],{},"在终端运行：",[26,148890,148892],{"className":26338,"code":148891,"language":26340,"meta":31,"style":31},"python hello.py\n",[33,148893,148894],{"__ignoreMap":31},[36,148895,148896,148898],{"class":38,"line":39},[36,148897,30],{"class":4500},[36,148899,148900],{"class":57}," hello.py\n",[19,148902,148903],{},"或：",[26,148905,148907],{"className":26338,"code":148906,"language":26340,"meta":31,"style":31},"python3 hello.py\n",[33,148908,148909],{"__ignoreMap":31},[36,148910,148911,148913],{"class":38,"line":39},[36,148912,103354],{"class":4500},[36,148914,148900],{"class":57},[19,148916,148917],{},"输出：",[26,148919,148922],{"className":148920,"code":148921,"language":690,"meta":31},[688],"Hello World\n你好，Python\n",[33,148923,148921],{"__ignoreMap":31},[14,148925,148927],{"id":148926},"_18-print函数","1.8 print函数",[19,148929,148930,148933],{},[33,148931,148932],{},"print()"," 用来输出内容。",[26,148935,148937],{"className":28,"code":148936,"language":30,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,148938,148939,148949,148959,148969],{"__ignoreMap":31},[36,148940,148941,148943,148945,148947],{"class":38,"line":39},[36,148942,50],{"class":49},[36,148944,54],{"class":53},[36,148946,58],{"class":57},[36,148948,61],{"class":53},[36,148950,148951,148953,148955,148957],{"class":38,"line":46},[36,148952,50],{"class":49},[36,148954,54],{"class":53},[36,148956,166],{"class":49},[36,148958,61],{"class":53},[36,148960,148961,148963,148965,148967],{"class":38,"line":82},[36,148962,50],{"class":49},[36,148964,54],{"class":53},[36,148966,174],{"class":49},[36,148968,61],{"class":53},[36,148970,148971,148973,148975,148977,148979,148981],{"class":38,"line":88},[36,148972,50],{"class":49},[36,148974,54],{"class":53},[36,148976,1742],{"class":57},[36,148978,14958],{"class":53},[36,148980,3326],{"class":49},[36,148982,61],{"class":53},[19,148984,148985],{},"多个内容用逗号隔开，默认中间加空格：",[26,148987,148989],{"className":28,"code":148988,"language":30,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,148990,148991,148999,149007],{"__ignoreMap":31},[36,148992,148993,148995,148997],{"class":38,"line":39},[36,148994,360],{"class":53},[36,148996,115],{"class":114},[36,148998,462],{"class":57},[36,149000,149001,149003,149005],{"class":38,"line":46},[36,149002,111],{"class":53},[36,149004,115],{"class":114},[36,149006,374],{"class":49},[36,149008,149009,149011,149013,149016,149019,149021],{"class":38,"line":82},[36,149010,50],{"class":49},[36,149012,54],{"class":53},[36,149014,149015],{"class":57},"\"姓名:\"",[36,149017,149018],{"class":53},", name, ",[36,149020,1742],{"class":57},[36,149022,149023],{"class":53},", age)\n",[19,149025,149026],{},"修改分隔符：",[26,149028,149030],{"className":28,"code":149029,"language":30,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,149031,149032],{"__ignoreMap":31},[36,149033,149034,149036,149038,149041,149043,149045,149047,149049,149051,149054,149056,149058],{"class":38,"line":39},[36,149035,50],{"class":49},[36,149037,54],{"class":53},[36,149039,149040],{"class":57},"\"2024\"",[36,149042,14958],{"class":53},[36,149044,778],{"class":57},[36,149046,14958],{"class":53},[36,149048,778],{"class":57},[36,149050,14958],{"class":53},[36,149052,149053],{"class":1997},"sep",[36,149055,115],{"class":114},[36,149057,34985],{"class":57},[36,149059,61],{"class":53},[19,149061,149062],{},"修改结尾符：",[26,149064,149066],{"className":28,"code":149065,"language":30,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,149067,149068,149086],{"__ignoreMap":31},[36,149069,149070,149072,149074,149076,149078,149080,149082,149084],{"class":38,"line":39},[36,149071,50],{"class":49},[36,149073,54],{"class":53},[36,149075,58],{"class":57},[36,149077,14958],{"class":53},[36,149079,48299],{"class":1997},[36,149081,115],{"class":114},[36,149083,6890],{"class":57},[36,149085,61],{"class":53},[36,149087,149088,149090,149092,149095],{"class":38,"line":46},[36,149089,50],{"class":49},[36,149091,54],{"class":53},[36,149093,149094],{"class":57},"\"python\"",[36,149096,61],{"class":53},[14,149098,149100],{"id":149099},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149102,149103],{},"交互运行适合临时验证：",[26,149105,149107],{"className":28,"code":149106,"language":30,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,149108,149109,149119],{"__ignoreMap":31},[36,149110,149111,149113,149115,149117],{"class":38,"line":39},[36,149112,148313],{"class":114},[36,149114,931],{"class":49},[36,149116,9045],{"class":114},[36,149118,1247],{"class":49},[36,149120,149121],{"class":38,"line":46},[36,149122,149123],{"class":49},"30\n",[19,149125,149126],{},"脚本运行适合保存程序：",[26,149128,149130],{"className":28,"code":149129,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,149131,149132,149140,149148],{"__ignoreMap":31},[36,149133,149134,149136,149138],{"class":38,"line":39},[36,149135,1881],{"class":53},[36,149137,115],{"class":114},[36,149139,2111],{"class":49},[36,149141,149142,149144,149146],{"class":38,"line":46},[36,149143,2116],{"class":53},[36,149145,115],{"class":114},[36,149147,1227],{"class":49},[36,149149,149150,149152,149155,149157],{"class":38,"line":82},[36,149151,50],{"class":49},[36,149153,149154],{"class":53},"(price ",[36,149156,1050],{"class":114},[36,149158,149159],{"class":53}," count)\n",[19,149161,149162],{},"实际学习中推荐：",[433,149164,149165,149168,149173],{},[436,149166,149167],{},"临时试一个语法，用交互模式。",[436,149169,149170,149171,128445],{},"写完整练习，用 ",[33,149172,148812],{},[436,149174,149175],{},"写项目，用独立目录和虚拟环境。",[14,149177,149179],{"id":149178},"_110-常见错误","1.10 常见错误",[997,149181,149183],{"id":149182},"_1101-命令找不到","1.10.1 命令找不到",[26,149185,149188],{"className":149186,"code":149187,"language":690,"meta":31},[688],"python: command not found\n",[33,149189,149187],{"__ignoreMap":31},[19,149191,149192],{},"原因：",[433,149194,149195,149198,149201],{},[436,149196,149197],{},"没安装 Python。",[436,149199,149200],{},"PATH 没配置。",[436,149202,149203,149204,1296],{},"Linux\u002FmacOS 应该使用 ",[33,149205,103354],{},[997,149207,149209],{"id":149208},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149211,149212],{},"不要把文件命名为：",[26,149214,149217],{"className":149215,"code":149216,"language":690,"meta":31},[688],"random.py\njson.py\ntime.py\nrequests.py\n",[33,149218,149216],{"__ignoreMap":31},[19,149220,149221],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[997,149223,149225],{"id":149224},"_1103-中文乱码","1.10.3 中文乱码",[19,149227,149228],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149230,149231],{},"如果读写文件出现乱码，要明确指定编码：",[26,149233,149235],{"className":28,"code":149234,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,149236,149237,149271],{"__ignoreMap":31},[36,149238,149239,149241,149244,149246,149249,149251,149254,149256,149259,149261,149264,149266,149268],{"class":38,"line":39},[36,149240,110303],{"class":114},[36,149242,149243],{"class":49}," open",[36,149245,54],{"class":53},[36,149247,149248],{"class":57},"\"data.txt\"",[36,149250,14958],{"class":53},[36,149252,149253],{"class":57},"\"r\"",[36,149255,14958],{"class":53},[36,149257,149258],{"class":1997},"encoding",[36,149260,115],{"class":114},[36,149262,149263],{"class":57},"\"utf-8\"",[36,149265,16236],{"class":53},[36,149267,33887],{"class":114},[36,149269,149270],{"class":53}," f:\n",[36,149272,149273,149276,149278],{"class":38,"line":46},[36,149274,149275],{"class":53},"    content ",[36,149277,115],{"class":114},[36,149279,149280],{"class":53}," f.read()\n",[14,149282,149284],{"id":149283},"_111-本章练习","1.11 本章练习",[433,149286,149287,149290,149296],{},[436,149288,149289],{},"安装 Python，并在终端输出版本号。",[436,149291,149292,149293,149295],{},"新建 ",[33,149294,148858],{},"，输出自己的姓名、年龄、学习目标。",[436,149297,600,149298,149300],{},[33,149299,148932],{}," 输出下面格式：",[26,149302,149305],{"className":149303,"code":149304,"language":690,"meta":31},[688],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,149306,149304],{"__ignoreMap":31},[433,149308,149309],{"start":88},[436,149310,600,149311,149313],{},[33,149312,149053],{}," 输出日期：",[26,149315,149318],{"className":149316,"code":149317,"language":690,"meta":31},[688],"2024-10-10\n",[33,149319,149317],{"__ignoreMap":31},[433,149321,149322],{"start":195},[436,149323,600,149324,149326,149327,149329],{},[33,149325,48299],{}," 让两次 ",[33,149328,148932],{}," 输出在同一行。",[2602,149331,149332],{},"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":31,"searchDepth":46,"depth":46,"links":149334},[149335,149336,149337,149342,149343,149344,149348,149349,149350,149351,149356],{"id":148225,"depth":46,"text":148226},{"id":148269,"depth":46,"text":148270},{"id":148370,"depth":46,"text":148371,"children":149338},[149339,149340,149341],{"id":148374,"depth":82,"text":148375},{"id":148429,"depth":82,"text":148430},{"id":148465,"depth":82,"text":148466},{"id":148538,"depth":46,"text":148539},{"id":148683,"depth":46,"text":148684},{"id":148788,"depth":46,"text":148789,"children":149345},[149346,149347],{"id":148792,"depth":82,"text":148793},{"id":148821,"depth":82,"text":148822},{"id":148851,"depth":46,"text":148852},{"id":148926,"depth":46,"text":148927},{"id":149099,"depth":46,"text":149100},{"id":149178,"depth":46,"text":149179,"children":149352},[149353,149354,149355],{"id":149182,"depth":82,"text":149183},{"id":149208,"depth":82,"text":149209},{"id":149224,"depth":82,"text":149225},{"id":149283,"depth":46,"text":149284},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148217,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149363,"title":149364,"body":149365,"description":2630,"extension":2631,"meta":151769,"navigation":545,"path":151770,"seo":151771,"stem":151772,"__hash__":151773},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149366,"toc":151754},[149367,149370,149374,149377,149380,149397,149400,149442,149445,149449,149452,149455,149492,149495,149529,149532,149624,149628,149642,149645,149672,149675,149679,149782,149789,149792,149809,149813,149820,150009,150012,150085,150089,150092,150176,150179,150211,150215,150419,150422,150426,150432,150534,150537,150793,150797,150800,150803,150817,150819,151005,151009,151371,151377,151381,151384,151508,151511,151690,151693,151697,151730,151734,151751],[10,149368,149364],{"id":149369},"_10-json与pyecharts折线图",[14,149371,149373],{"id":149372},"_101-数据可视化","10.1 数据可视化",[19,149375,149376],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149378,149379],{},"常见图表：",[433,149381,149382,149385,149388,149391,149394],{},[436,149383,149384],{},"折线图：看趋势。",[436,149386,149387],{},"柱状图：看分类对比。",[436,149389,149390],{},"饼图：看占比。",[436,149392,149393],{},"地图：看地域分布。",[436,149395,149396],{},"散点图：看两个变量之间的关系。",[19,149398,149399],{},"Python 可视化常用库：",[206,149401,149402,149410],{},[209,149403,149404],{},[212,149405,149406,149408],{},[215,149407,148621],{},[215,149409,26256],{},[225,149411,149412,149419,149427,149434],{},[212,149413,149414,149416],{},[230,149415,148653],{},[230,149417,149418],{},"基础、经典、可定制",[212,149420,149421,149424],{},[230,149422,149423],{},"seaborn",[230,149425,149426],{},"统计图表更美观",[212,149428,149429,149431],{},[230,149430,148661],{},[230,149432,149433],{},"生成交互式网页图表",[212,149435,149436,149439],{},[230,149437,149438],{},"plotly",[230,149440,149441],{},"交互图表能力强",[19,149443,149444],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149446,149448],{"id":149447},"_102-json回顾","10.2 JSON回顾",[19,149450,149451],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149453,149454],{},"Python 字典：",[26,149456,149458],{"className":28,"code":149457,"language":30,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,149459,149460,149468,149479,149488],{"__ignoreMap":31},[36,149461,149462,149464,149466],{"class":38,"line":39},[36,149463,104131],{"class":53},[36,149465,115],{"class":114},[36,149467,18091],{"class":53},[36,149469,149470,149473,149475,149477],{"class":38,"line":46},[36,149471,149472],{"class":57},"    \"name\"",[36,149474,53931],{"class":53},[36,149476,71756],{"class":57},[36,149478,33970],{"class":53},[36,149480,149481,149484,149486],{"class":38,"line":82},[36,149482,149483],{"class":57},"    \"value\"",[36,149485,53931],{"class":53},[36,149487,99934],{"class":49},[36,149489,149490],{"class":38,"line":88},[36,149491,4103],{"class":53},[19,149493,149494],{},"JSON 字符串：",[26,149496,149499],{"className":149497,"code":149498,"language":148252,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,149500,149501,149505,149516,149525],{"__ignoreMap":31},[36,149502,149503],{"class":38,"line":39},[36,149504,4084],{"class":53},[36,149506,149507,149510,149512,149514],{"class":38,"line":46},[36,149508,149509],{"class":49},"  \"name\"",[36,149511,53931],{"class":53},[36,149513,71756],{"class":57},[36,149515,33970],{"class":53},[36,149517,149518,149521,149523],{"class":38,"line":82},[36,149519,149520],{"class":49},"  \"value\"",[36,149522,53931],{"class":53},[36,149524,99934],{"class":49},[36,149526,149527],{"class":38,"line":88},[36,149528,4103],{"class":53},[19,149530,149531],{},"Python 与 JSON 的转换：",[26,149533,149535],{"className":28,"code":149534,"language":30,"meta":31,"style":31},"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",[33,149536,149537,149544,149548,149573,149577,149596,149603,149607,149617],{"__ignoreMap":31},[36,149538,149539,149541],{"class":38,"line":39},[36,149540,537],{"class":114},[36,149542,149543],{"class":53}," json\n",[36,149545,149546],{"class":38,"line":46},[36,149547,546],{"emptyLinePlaceholder":545},[36,149549,149550,149552,149554,149556,149558,149560,149562,149564,149567,149569,149571],{"class":38,"line":82},[36,149551,104131],{"class":53},[36,149553,115],{"class":114},[36,149555,6979],{"class":53},[36,149557,65167],{"class":57},[36,149559,53931],{"class":53},[36,149561,71756],{"class":57},[36,149563,14958],{"class":53},[36,149565,149566],{"class":57},"\"value\"",[36,149568,53931],{"class":53},[36,149570,166],{"class":49},[36,149572,4103],{"class":53},[36,149574,149575],{"class":38,"line":88},[36,149576,546],{"emptyLinePlaceholder":545},[36,149578,149579,149582,149584,149587,149590,149592,149594],{"class":38,"line":195},[36,149580,149581],{"class":53},"json_text ",[36,149583,115],{"class":114},[36,149585,149586],{"class":53}," json.dumps(data, ",[36,149588,149589],{"class":1997},"ensure_ascii",[36,149591,115],{"class":114},[36,149593,276],{"class":49},[36,149595,61],{"class":53},[36,149597,149598,149600],{"class":38,"line":1517},[36,149599,50],{"class":49},[36,149601,149602],{"class":53},"(json_text)\n",[36,149604,149605],{"class":38,"line":2421},[36,149606,546],{"emptyLinePlaceholder":545},[36,149608,149609,149612,149614],{"class":38,"line":2446},[36,149610,149611],{"class":53},"new_data ",[36,149613,115],{"class":114},[36,149615,149616],{"class":53}," json.loads(json_text)\n",[36,149618,149619,149621],{"class":38,"line":2469},[36,149620,50],{"class":49},[36,149622,149623],{"class":53},"(new_data)\n",[14,149625,149627],{"id":149626},"_103-安装pyecharts","10.3 安装pyecharts",[26,149629,149631],{"className":26338,"code":149630,"language":26340,"meta":31,"style":31},"pip install pyecharts\n",[33,149632,149633],{"__ignoreMap":31},[36,149634,149635,149637,149639],{"class":38,"line":39},[36,149636,26347],{"class":4500},[36,149638,26350],{"class":57},[36,149640,149641],{"class":57}," pyecharts\n",[19,149643,149644],{},"验证：",[26,149646,149648],{"className":28,"code":149647,"language":30,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,149649,149650,149656,149660],{"__ignoreMap":31},[36,149651,149652,149654],{"class":38,"line":39},[36,149653,537],{"class":114},[36,149655,149641],{"class":53},[36,149657,149658],{"class":38,"line":46},[36,149659,546],{"emptyLinePlaceholder":545},[36,149661,149662,149664,149667,149670],{"class":38,"line":82},[36,149663,50],{"class":49},[36,149665,149666],{"class":53},"(pyecharts.",[36,149668,149669],{"class":49},"__version__",[36,149671,61],{"class":53},[19,149673,149674],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149676,149678],{"id":149677},"_104-第一个折线图","10.4 第一个折线图",[26,149680,149682],{"className":28,"code":149681,"language":30,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,149683,149684,149696,149700,149710,149740,149772],{"__ignoreMap":31},[36,149685,149686,149688,149691,149693],{"class":38,"line":39},[36,149687,33241],{"class":114},[36,149689,149690],{"class":53}," pyecharts.charts ",[36,149692,537],{"class":114},[36,149694,149695],{"class":53}," Line\n",[36,149697,149698],{"class":38,"line":46},[36,149699,546],{"emptyLinePlaceholder":545},[36,149701,149702,149705,149707],{"class":38,"line":82},[36,149703,149704],{"class":53},"line ",[36,149706,115],{"class":114},[36,149708,149709],{"class":53}," Line()\n",[36,149711,149712,149715,149718,149720,149723,149725,149728,149730,149733,149735,149738],{"class":38,"line":88},[36,149713,149714],{"class":53},"line.add_xaxis([",[36,149716,149717],{"class":57},"\"周一\"",[36,149719,14958],{"class":53},[36,149721,149722],{"class":57},"\"周二\"",[36,149724,14958],{"class":53},[36,149726,149727],{"class":57},"\"周三\"",[36,149729,14958],{"class":53},[36,149731,149732],{"class":57},"\"周四\"",[36,149734,14958],{"class":53},[36,149736,149737],{"class":57},"\"周五\"",[36,149739,7188],{"class":53},[36,149741,149742,149745,149748,149750,149752,149754,149756,149758,149760,149762,149765,149767,149770],{"class":38,"line":195},[36,149743,149744],{"class":53},"line.add_yaxis(",[36,149746,149747],{"class":57},"\"销售额\"",[36,149749,80002],{"class":53},[36,149751,166],{"class":49},[36,149753,14958],{"class":53},[36,149755,3493],{"class":49},[36,149757,14958],{"class":53},[36,149759,3538],{"class":49},[36,149761,14958],{"class":53},[36,149763,149764],{"class":49},"150",[36,149766,14958],{"class":53},[36,149768,149769],{"class":49},"180",[36,149771,7188],{"class":53},[36,149773,149774,149777,149780],{"class":38,"line":1517},[36,149775,149776],{"class":53},"line.render(",[36,149778,149779],{"class":57},"\"line.html\"",[36,149781,61],{"class":53},[19,149783,149784,149785,149788],{},"运行后会生成 ",[33,149786,149787],{},"line.html","，用浏览器打开即可看到图表。",[19,149790,149791],{},"核心步骤：",[433,149793,149794,149797,149800,149803,149806],{},[436,149795,149796],{},"导入图表类。",[436,149798,149799],{},"创建图表对象。",[436,149801,149802],{},"添加 x 轴数据。",[436,149804,149805],{},"添加 y 轴数据。",[436,149807,149808],{},"渲染为 HTML。",[14,149810,149812],{"id":149811},"_105-全局配置","10.5 全局配置",[19,149814,149815,149816,149819],{},"常用配置在 ",[33,149817,149818],{},"pyecharts.options"," 中。",[26,149821,149823],{"className":28,"code":149822,"language":30,"meta":31,"style":31},"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",[33,149824,149825,149842,149852,149856,149864,149888,149916,149921,149940,149959,149977,149997,150001],{"__ignoreMap":31},[36,149826,149827,149829,149832,149834,149837,149839],{"class":38,"line":39},[36,149828,33241],{"class":114},[36,149830,149831],{"class":53}," pyecharts ",[36,149833,537],{"class":114},[36,149835,149836],{"class":53}," options ",[36,149838,33887],{"class":114},[36,149840,149841],{"class":53}," opts\n",[36,149843,149844,149846,149848,149850],{"class":38,"line":46},[36,149845,33241],{"class":114},[36,149847,149690],{"class":53},[36,149849,537],{"class":114},[36,149851,149695],{"class":53},[36,149853,149854],{"class":38,"line":82},[36,149855,546],{"emptyLinePlaceholder":545},[36,149857,149858,149860,149862],{"class":38,"line":88},[36,149859,149704],{"class":53},[36,149861,115],{"class":114},[36,149863,149709],{"class":53},[36,149865,149866,149868,149870,149872,149874,149876,149878,149880,149882,149884,149886],{"class":38,"line":195},[36,149867,149714],{"class":53},[36,149869,149717],{"class":57},[36,149871,14958],{"class":53},[36,149873,149722],{"class":57},[36,149875,14958],{"class":53},[36,149877,149727],{"class":57},[36,149879,14958],{"class":53},[36,149881,149732],{"class":57},[36,149883,14958],{"class":53},[36,149885,149737],{"class":57},[36,149887,7188],{"class":53},[36,149889,149890,149892,149894,149896,149898,149900,149902,149904,149906,149908,149910,149912,149914],{"class":38,"line":1517},[36,149891,149744],{"class":53},[36,149893,149747],{"class":57},[36,149895,80002],{"class":53},[36,149897,166],{"class":49},[36,149899,14958],{"class":53},[36,149901,3493],{"class":49},[36,149903,14958],{"class":53},[36,149905,3538],{"class":49},[36,149907,14958],{"class":53},[36,149909,149764],{"class":49},[36,149911,14958],{"class":53},[36,149913,149769],{"class":49},[36,149915,7188],{"class":53},[36,149917,149918],{"class":38,"line":2421},[36,149919,149920],{"class":53},"line.set_global_opts(\n",[36,149922,149923,149926,149928,149931,149933,149935,149938],{"class":38,"line":2446},[36,149924,149925],{"class":1997},"    title_opts",[36,149927,115],{"class":114},[36,149929,149930],{"class":53},"opts.TitleOpts(",[36,149932,53901],{"class":1997},[36,149934,115],{"class":114},[36,149936,149937],{"class":57},"\"一周销售额\"",[36,149939,40547],{"class":53},[36,149941,149942,149945,149947,149950,149952,149954,149957],{"class":38,"line":2469},[36,149943,149944],{"class":1997},"    xaxis_opts",[36,149946,115],{"class":114},[36,149948,149949],{"class":53},"opts.AxisOpts(",[36,149951,1998],{"class":1997},[36,149953,115],{"class":114},[36,149955,149956],{"class":57},"\"日期\"",[36,149958,40547],{"class":53},[36,149960,149961,149964,149966,149968,149970,149972,149975],{"class":38,"line":2492},[36,149962,149963],{"class":1997},"    yaxis_opts",[36,149965,115],{"class":114},[36,149967,149949],{"class":53},[36,149969,1998],{"class":1997},[36,149971,115],{"class":114},[36,149973,149974],{"class":57},"\"金额\"",[36,149976,40547],{"class":53},[36,149978,149979,149982,149984,149987,149990,149992,149995],{"class":38,"line":4150},[36,149980,149981],{"class":1997},"    tooltip_opts",[36,149983,115],{"class":114},[36,149985,149986],{"class":53},"opts.TooltipOpts(",[36,149988,149989],{"class":1997},"trigger",[36,149991,115],{"class":114},[36,149993,149994],{"class":57},"\"axis\"",[36,149996,40547],{"class":53},[36,149998,149999],{"class":38,"line":4155},[36,150000,61],{"class":53},[36,150002,150003,150005,150007],{"class":38,"line":4161},[36,150004,149776],{"class":53},[36,150006,149779],{"class":57},[36,150008,61],{"class":53},[19,150010,150011],{},"常见全局配置：",[206,150013,150014,150023],{},[209,150015,150016],{},[212,150017,150018,150021],{},[215,150019,150020],{},"配置",[215,150022,105169],{},[225,150024,150025,150035,150045,150055,150065,150075],{},[212,150026,150027,150032],{},[230,150028,150029],{},[33,150030,150031],{},"TitleOpts",[230,150033,150034],{},"标题",[212,150036,150037,150042],{},[230,150038,150039],{},[33,150040,150041],{},"LegendOpts",[230,150043,150044],{},"图例",[212,150046,150047,150052],{},[230,150048,150049],{},[33,150050,150051],{},"TooltipOpts",[230,150053,150054],{},"提示框",[212,150056,150057,150062],{},[230,150058,150059],{},[33,150060,150061],{},"AxisOpts",[230,150063,150064],{},"坐标轴",[212,150066,150067,150072],{},[230,150068,150069],{},[33,150070,150071],{},"VisualMapOpts",[230,150073,150074],{},"视觉映射",[212,150076,150077,150082],{},[230,150078,150079],{},[33,150080,150081],{},"DataZoomOpts",[230,150083,150084],{},"区域缩放",[14,150086,150088],{"id":150087},"_106-系列配置","10.6 系列配置",[19,150090,150091],{},"系列配置作用于某一组数据。",[26,150093,150095],{"className":28,"code":150094,"language":30,"meta":31,"style":31},"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",[33,150096,150097,150102,150113,150142,150153,150172],{"__ignoreMap":31},[36,150098,150099],{"class":38,"line":39},[36,150100,150101],{"class":53},"line.add_yaxis(\n",[36,150103,150104,150107,150109,150111],{"class":38,"line":46},[36,150105,150106],{"class":1997},"    series_name",[36,150108,115],{"class":114},[36,150110,149747],{"class":57},[36,150112,33970],{"class":53},[36,150114,150115,150118,150120,150122,150124,150126,150128,150130,150132,150134,150136,150138,150140],{"class":38,"line":82},[36,150116,150117],{"class":1997},"    y_axis",[36,150119,115],{"class":114},[36,150121,3566],{"class":53},[36,150123,166],{"class":49},[36,150125,14958],{"class":53},[36,150127,3493],{"class":49},[36,150129,14958],{"class":53},[36,150131,3538],{"class":49},[36,150133,14958],{"class":53},[36,150135,149764],{"class":49},[36,150137,14958],{"class":53},[36,150139,149769],{"class":49},[36,150141,90315],{"class":53},[36,150143,150144,150147,150149,150151],{"class":38,"line":88},[36,150145,150146],{"class":1997},"    is_smooth",[36,150148,115],{"class":114},[36,150150,189],{"class":49},[36,150152,33970],{"class":53},[36,150154,150155,150158,150160,150163,150166,150168,150170],{"class":38,"line":195},[36,150156,150157],{"class":1997},"    label_opts",[36,150159,115],{"class":114},[36,150161,150162],{"class":53},"opts.LabelOpts(",[36,150164,150165],{"class":1997},"is_show",[36,150167,115],{"class":114},[36,150169,189],{"class":49},[36,150171,40547],{"class":53},[36,150173,150174],{"class":38,"line":1517},[36,150175,61],{"class":53},[19,150177,150178],{},"常用参数：",[433,150180,150181,150187,150193,150199,150205],{},[436,150182,150183,150186],{},[33,150184,150185],{},"series_name","：系列名称。",[436,150188,150189,150192],{},[33,150190,150191],{},"y_axis","：y 轴数据。",[436,150194,150195,150198],{},[33,150196,150197],{},"is_smooth","：是否平滑曲线。",[436,150200,150201,150204],{},[33,150202,150203],{},"label_opts","：标签配置。",[436,150206,150207,150210],{},[33,150208,150209],{},"symbol_size","：标记点大小。",[14,150212,150214],{"id":150213},"_107-多条折线","10.7 多条折线",[26,150216,150218],{"className":28,"code":150217,"language":30,"meta":31,"style":31},"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",[33,150219,150220,150234,150244,150248,150277,150281,150289,150294,150332,150369,150373,150390,150406,150410],{"__ignoreMap":31},[36,150221,150222,150224,150226,150228,150230,150232],{"class":38,"line":39},[36,150223,33241],{"class":114},[36,150225,149831],{"class":53},[36,150227,537],{"class":114},[36,150229,149836],{"class":53},[36,150231,33887],{"class":114},[36,150233,149841],{"class":53},[36,150235,150236,150238,150240,150242],{"class":38,"line":46},[36,150237,33241],{"class":114},[36,150239,149690],{"class":53},[36,150241,537],{"class":114},[36,150243,149695],{"class":53},[36,150245,150246],{"class":38,"line":82},[36,150247,546],{"emptyLinePlaceholder":545},[36,150249,150250,150253,150255,150257,150259,150261,150263,150265,150267,150269,150271,150273,150275],{"class":38,"line":88},[36,150251,150252],{"class":53},"dates ",[36,150254,115],{"class":114},[36,150256,54720],{"class":53},[36,150258,149717],{"class":57},[36,150260,14958],{"class":53},[36,150262,149722],{"class":57},[36,150264,14958],{"class":53},[36,150266,149727],{"class":57},[36,150268,14958],{"class":53},[36,150270,149732],{"class":57},[36,150272,14958],{"class":53},[36,150274,149737],{"class":57},[36,150276,35748],{"class":53},[36,150278,150279],{"class":38,"line":195},[36,150280,546],{"emptyLinePlaceholder":545},[36,150282,150283,150285,150287],{"class":38,"line":1517},[36,150284,149704],{"class":53},[36,150286,115],{"class":114},[36,150288,149709],{"class":53},[36,150290,150291],{"class":38,"line":2421},[36,150292,150293],{"class":53},"line.add_xaxis(dates)\n",[36,150295,150296,150298,150301,150303,150305,150307,150310,150312,150314,150316,150318,150320,150322,150324,150326,150328,150330],{"class":38,"line":2446},[36,150297,149744],{"class":53},[36,150299,150300],{"class":57},"\"线上销售\"",[36,150302,80002],{"class":53},[36,150304,166],{"class":49},[36,150306,14958],{"class":53},[36,150308,150309],{"class":49},"130",[36,150311,14958],{"class":53},[36,150313,3493],{"class":49},[36,150315,14958],{"class":53},[36,150317,23566],{"class":49},[36,150319,14958],{"class":53},[36,150321,4259],{"class":49},[36,150323,114671],{"class":53},[36,150325,150197],{"class":1997},[36,150327,115],{"class":114},[36,150329,189],{"class":49},[36,150331,61],{"class":53},[36,150333,150334,150336,150339,150341,150343,150345,150347,150349,150351,150353,150355,150357,150359,150361,150363,150365,150367],{"class":38,"line":2469},[36,150335,149744],{"class":53},[36,150337,150338],{"class":57},"\"线下销售\"",[36,150340,80002],{"class":53},[36,150342,3288],{"class":49},[36,150344,14958],{"class":53},[36,150346,3538],{"class":49},[36,150348,14958],{"class":53},[36,150350,166],{"class":49},[36,150352,14958],{"class":53},[36,150354,3493],{"class":49},[36,150356,14958],{"class":53},[36,150358,149764],{"class":49},[36,150360,114671],{"class":53},[36,150362,150197],{"class":1997},[36,150364,115],{"class":114},[36,150366,189],{"class":49},[36,150368,61],{"class":53},[36,150370,150371],{"class":38,"line":2492},[36,150372,149920],{"class":53},[36,150374,150375,150377,150379,150381,150383,150385,150388],{"class":38,"line":4150},[36,150376,149925],{"class":1997},[36,150378,115],{"class":114},[36,150380,149930],{"class":53},[36,150382,53901],{"class":1997},[36,150384,115],{"class":114},[36,150386,150387],{"class":57},"\"线上线下销售趋势\"",[36,150389,40547],{"class":53},[36,150391,150392,150394,150396,150398,150400,150402,150404],{"class":38,"line":4155},[36,150393,149981],{"class":1997},[36,150395,115],{"class":114},[36,150397,149986],{"class":53},[36,150399,149989],{"class":1997},[36,150401,115],{"class":114},[36,150403,149994],{"class":57},[36,150405,40547],{"class":53},[36,150407,150408],{"class":38,"line":4161},[36,150409,61],{"class":53},[36,150411,150412,150414,150417],{"class":38,"line":4166},[36,150413,149776],{"class":53},[36,150415,150416],{"class":57},"\"sales.html\"",[36,150418,61],{"class":53},[19,150420,150421],{},"多条折线适合比较不同指标或不同地区。",[14,150423,150425],{"id":150424},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150427,150428,150429,27135],{},"假设 ",[33,150430,150431],{},"sales.json",[26,150433,150435],{"className":149497,"code":150434,"language":148252,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,150436,150437,150442,150474,150502,150530],{"__ignoreMap":31},[36,150438,150439],{"class":38,"line":39},[36,150440,150441],{"class":53},"[\n",[36,150443,150444,150447,150450,150452,150454,150456,150459,150461,150463,150465,150468,150470,150472],{"class":38,"line":46},[36,150445,150446],{"class":53},"  {",[36,150448,150449],{"class":49},"\"date\"",[36,150451,53931],{"class":53},[36,150453,149717],{"class":57},[36,150455,14958],{"class":53},[36,150457,150458],{"class":49},"\"online\"",[36,150460,53931],{"class":53},[36,150462,166],{"class":49},[36,150464,14958],{"class":53},[36,150466,150467],{"class":49},"\"offline\"",[36,150469,53931],{"class":53},[36,150471,3288],{"class":49},[36,150473,7461],{"class":53},[36,150475,150476,150478,150480,150482,150484,150486,150488,150490,150492,150494,150496,150498,150500],{"class":38,"line":82},[36,150477,150446],{"class":53},[36,150479,150449],{"class":49},[36,150481,53931],{"class":53},[36,150483,149722],{"class":57},[36,150485,14958],{"class":53},[36,150487,150458],{"class":49},[36,150489,53931],{"class":53},[36,150491,150309],{"class":49},[36,150493,14958],{"class":53},[36,150495,150467],{"class":49},[36,150497,53931],{"class":53},[36,150499,3538],{"class":49},[36,150501,7461],{"class":53},[36,150503,150504,150506,150508,150510,150512,150514,150516,150518,150520,150522,150524,150526,150528],{"class":38,"line":88},[36,150505,150446],{"class":53},[36,150507,150449],{"class":49},[36,150509,53931],{"class":53},[36,150511,149727],{"class":57},[36,150513,14958],{"class":53},[36,150515,150458],{"class":49},[36,150517,53931],{"class":53},[36,150519,3493],{"class":49},[36,150521,14958],{"class":53},[36,150523,150467],{"class":49},[36,150525,53931],{"class":53},[36,150527,166],{"class":49},[36,150529,4103],{"class":53},[36,150531,150532],{"class":38,"line":195},[36,150533,35748],{"class":53},[19,150535,150536],{},"读取并绘图：",[26,150538,150540],{"className":28,"code":150539,"language":30,"meta":31,"style":31},"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",[33,150541,150542,150548,150562,150572,150576,150608,150621,150625,150633,150642,150651,150655,150667,150676,150685,150694,150698,150706,150710,150727,150744,150748,150765,150781,150785],{"__ignoreMap":31},[36,150543,150544,150546],{"class":38,"line":39},[36,150545,537],{"class":114},[36,150547,149543],{"class":53},[36,150549,150550,150552,150554,150556,150558,150560],{"class":38,"line":46},[36,150551,33241],{"class":114},[36,150553,149831],{"class":53},[36,150555,537],{"class":114},[36,150557,149836],{"class":53},[36,150559,33887],{"class":114},[36,150561,149841],{"class":53},[36,150563,150564,150566,150568,150570],{"class":38,"line":82},[36,150565,33241],{"class":114},[36,150567,149690],{"class":53},[36,150569,537],{"class":114},[36,150571,149695],{"class":53},[36,150573,150574],{"class":38,"line":88},[36,150575,546],{"emptyLinePlaceholder":545},[36,150577,150578,150580,150582,150584,150587,150589,150591,150593,150595,150597,150599,150601,150603,150606],{"class":38,"line":195},[36,150579,110303],{"class":114},[36,150581,149243],{"class":49},[36,150583,54],{"class":53},[36,150585,150586],{"class":57},"\"sales.json\"",[36,150588,14958],{"class":53},[36,150590,149253],{"class":57},[36,150592,14958],{"class":53},[36,150594,149258],{"class":1997},[36,150596,115],{"class":114},[36,150598,149263],{"class":57},[36,150600,16236],{"class":53},[36,150602,33887],{"class":114},[36,150604,150605],{"class":1997}," file",[36,150607,6270],{"class":53},[36,150609,150610,150612,150614,150617,150619],{"class":38,"line":1517},[36,150611,103895],{"class":53},[36,150613,115],{"class":114},[36,150615,150616],{"class":53}," json.load(",[36,150618,47854],{"class":1997},[36,150620,61],{"class":53},[36,150622,150623],{"class":38,"line":2421},[36,150624,546],{"emptyLinePlaceholder":545},[36,150626,150627,150629,150631],{"class":38,"line":2446},[36,150628,150252],{"class":53},[36,150630,115],{"class":114},[36,150632,54332],{"class":53},[36,150634,150635,150638,150640],{"class":38,"line":2469},[36,150636,150637],{"class":53},"online_sales ",[36,150639,115],{"class":114},[36,150641,54332],{"class":53},[36,150643,150644,150647,150649],{"class":38,"line":2492},[36,150645,150646],{"class":53},"offline_sales ",[36,150648,115],{"class":114},[36,150650,54332],{"class":53},[36,150652,150653],{"class":38,"line":4150},[36,150654,546],{"emptyLinePlaceholder":545},[36,150656,150657,150659,150662,150664],{"class":38,"line":4155},[36,150658,5556],{"class":114},[36,150660,150661],{"class":53}," item ",[36,150663,28556],{"class":114},[36,150665,150666],{"class":53}," data:\n",[36,150668,150669,150672,150674],{"class":38,"line":4161},[36,150670,150671],{"class":53},"    dates.append(item[",[36,150673,150449],{"class":57},[36,150675,7188],{"class":53},[36,150677,150678,150681,150683],{"class":38,"line":4166},[36,150679,150680],{"class":53},"    online_sales.append(item[",[36,150682,150458],{"class":57},[36,150684,7188],{"class":53},[36,150686,150687,150690,150692],{"class":38,"line":4180},[36,150688,150689],{"class":53},"    offline_sales.append(item[",[36,150691,150467],{"class":57},[36,150693,7188],{"class":53},[36,150695,150696],{"class":38,"line":4185},[36,150697,546],{"emptyLinePlaceholder":545},[36,150699,150700,150702,150704],{"class":38,"line":4191},[36,150701,149704],{"class":53},[36,150703,115],{"class":114},[36,150705,149709],{"class":53},[36,150707,150708],{"class":38,"line":4212},[36,150709,150293],{"class":53},[36,150711,150712,150714,150716,150719,150721,150723,150725],{"class":38,"line":4217},[36,150713,149744],{"class":53},[36,150715,150300],{"class":57},[36,150717,150718],{"class":53},", online_sales, ",[36,150720,150197],{"class":1997},[36,150722,115],{"class":114},[36,150724,189],{"class":49},[36,150726,61],{"class":53},[36,150728,150729,150731,150733,150736,150738,150740,150742],{"class":38,"line":4231},[36,150730,149744],{"class":53},[36,150732,150338],{"class":57},[36,150734,150735],{"class":53},", offline_sales, ",[36,150737,150197],{"class":1997},[36,150739,115],{"class":114},[36,150741,189],{"class":49},[36,150743,61],{"class":53},[36,150745,150746],{"class":38,"line":4236},[36,150747,149920],{"class":53},[36,150749,150750,150752,150754,150756,150758,150760,150763],{"class":38,"line":4264},[36,150751,149925],{"class":1997},[36,150753,115],{"class":114},[36,150755,149930],{"class":53},[36,150757,53901],{"class":1997},[36,150759,115],{"class":114},[36,150761,150762],{"class":57},"\"销售趋势\"",[36,150764,40547],{"class":53},[36,150766,150767,150769,150771,150773,150775,150777,150779],{"class":38,"line":4269},[36,150768,149981],{"class":1997},[36,150770,115],{"class":114},[36,150772,149986],{"class":53},[36,150774,149989],{"class":1997},[36,150776,115],{"class":114},[36,150778,149994],{"class":57},[36,150780,40547],{"class":53},[36,150782,150783],{"class":38,"line":4286},[36,150784,61],{"class":53},[36,150786,150787,150789,150791],{"class":38,"line":4291},[36,150788,149776],{"class":53},[36,150790,150416],{"class":57},[36,150792,61],{"class":53},[14,150794,150796],{"id":150795},"_109-数据清洗","10.9 数据清洗",[19,150798,150799],{},"真实数据经常不整齐，需要清洗。",[19,150801,150802],{},"常见问题：",[433,150804,150805,150808,150811,150814],{},[436,150806,150807],{},"数字是字符串。",[436,150809,150810],{},"字段缺失。",[436,150812,150813],{},"空值。",[436,150815,150816],{},"日期格式不统一。",[19,150818,814],{},[26,150820,150822],{"className":28,"code":150821,"language":30,"meta":31,"style":31},"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",[33,150823,150824,150833,150856,150876,150897,150901,150905,150913,150922,150926,150937,150951,150960,150965,150969,150977,150987,150991,150998],{"__ignoreMap":31},[36,150825,150826,150829,150831],{"class":38,"line":39},[36,150827,150828],{"class":53},"raw_data ",[36,150830,115],{"class":114},[36,150832,57938],{"class":53},[36,150834,150835,150838,150840,150842,150844,150846,150849,150851,150854],{"class":38,"line":46},[36,150836,150837],{"class":53},"    {",[36,150839,150449],{"class":57},[36,150841,53931],{"class":53},[36,150843,149717],{"class":57},[36,150845,14958],{"class":53},[36,150847,150848],{"class":57},"\"sales\"",[36,150850,53931],{"class":53},[36,150852,150853],{"class":57},"\"100\"",[36,150855,7461],{"class":53},[36,150857,150858,150860,150862,150864,150866,150868,150870,150872,150874],{"class":38,"line":82},[36,150859,150837],{"class":53},[36,150861,150449],{"class":57},[36,150863,53931],{"class":53},[36,150865,149722],{"class":57},[36,150867,14958],{"class":53},[36,150869,150848],{"class":57},[36,150871,53931],{"class":53},[36,150873,10179],{"class":57},[36,150875,7461],{"class":53},[36,150877,150878,150880,150882,150884,150886,150888,150890,150892,150895],{"class":38,"line":88},[36,150879,150837],{"class":53},[36,150881,150449],{"class":57},[36,150883,53931],{"class":53},[36,150885,149727],{"class":57},[36,150887,14958],{"class":53},[36,150889,150848],{"class":57},[36,150891,53931],{"class":53},[36,150893,150894],{"class":57},"\"120\"",[36,150896,7461],{"class":53},[36,150898,150899],{"class":38,"line":195},[36,150900,35748],{"class":53},[36,150902,150903],{"class":38,"line":1517},[36,150904,546],{"emptyLinePlaceholder":545},[36,150906,150907,150909,150911],{"class":38,"line":2421},[36,150908,150252],{"class":53},[36,150910,115],{"class":114},[36,150912,54332],{"class":53},[36,150914,150915,150918,150920],{"class":38,"line":2446},[36,150916,150917],{"class":53},"sales ",[36,150919,115],{"class":114},[36,150921,54332],{"class":53},[36,150923,150924],{"class":38,"line":2469},[36,150925,546],{"emptyLinePlaceholder":545},[36,150927,150928,150930,150932,150934],{"class":38,"line":2492},[36,150929,5556],{"class":114},[36,150931,150661],{"class":53},[36,150933,28556],{"class":114},[36,150935,150936],{"class":53}," raw_data:\n",[36,150938,150939,150942,150944,150947,150949],{"class":38,"line":4150},[36,150940,150941],{"class":53},"    value ",[36,150943,115],{"class":114},[36,150945,150946],{"class":53}," item.get(",[36,150948,150848],{"class":57},[36,150950,61],{"class":53},[36,150952,150953,150955,150957],{"class":38,"line":4155},[36,150954,5632],{"class":114},[36,150956,41430],{"class":114},[36,150958,150959],{"class":53}," value:\n",[36,150961,150962],{"class":38,"line":4161},[36,150963,150964],{"class":114},"        continue\n",[36,150966,150967],{"class":38,"line":4166},[36,150968,546],{"emptyLinePlaceholder":545},[36,150970,150971,150973,150975],{"class":38,"line":4180},[36,150972,150671],{"class":53},[36,150974,150449],{"class":57},[36,150976,7188],{"class":53},[36,150978,150979,150982,150984],{"class":38,"line":4185},[36,150980,150981],{"class":53},"    sales.append(",[36,150983,232],{"class":49},[36,150985,150986],{"class":53},"(value))\n",[36,150988,150989],{"class":38,"line":4191},[36,150990,546],{"emptyLinePlaceholder":545},[36,150992,150993,150995],{"class":38,"line":4212},[36,150994,50],{"class":49},[36,150996,150997],{"class":53},"(dates)\n",[36,150999,151000,151002],{"class":38,"line":4217},[36,151001,50],{"class":49},[36,151003,151004],{"class":53},"(sales)\n",[14,151006,151008],{"id":151007},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,151010,151012],{"className":28,"code":151011,"language":30,"meta":31,"style":31},"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",[33,151013,151014,151028,151038,151042,151050,151071,151093,151115,151137,151159,151163,151167,151189,151210,151214,151222,151226,151230,151240,151249,151259,151275,151279,151283,151300,151316,151332,151348,151358,151362],{"__ignoreMap":31},[36,151015,151016,151018,151020,151022,151024,151026],{"class":38,"line":39},[36,151017,33241],{"class":114},[36,151019,149831],{"class":53},[36,151021,537],{"class":114},[36,151023,149836],{"class":53},[36,151025,33887],{"class":114},[36,151027,149841],{"class":53},[36,151029,151030,151032,151034,151036],{"class":38,"line":46},[36,151031,33241],{"class":114},[36,151033,149690],{"class":53},[36,151035,537],{"class":114},[36,151037,149695],{"class":53},[36,151039,151040],{"class":38,"line":82},[36,151041,546],{"emptyLinePlaceholder":545},[36,151043,151044,151046,151048],{"class":38,"line":88},[36,151045,150917],{"class":53},[36,151047,115],{"class":114},[36,151049,57938],{"class":53},[36,151051,151052,151054,151056,151058,151061,151063,151065,151067,151069],{"class":38,"line":195},[36,151053,150837],{"class":53},[36,151055,150449],{"class":57},[36,151057,53931],{"class":53},[36,151059,151060],{"class":57},"\"2024-10-01\"",[36,151062,14958],{"class":53},[36,151064,86565],{"class":57},[36,151066,53931],{"class":53},[36,151068,94501],{"class":49},[36,151070,7461],{"class":53},[36,151072,151073,151075,151077,151079,151082,151084,151086,151088,151091],{"class":38,"line":1517},[36,151074,150837],{"class":53},[36,151076,150449],{"class":57},[36,151078,53931],{"class":53},[36,151080,151081],{"class":57},"\"2024-10-02\"",[36,151083,14958],{"class":53},[36,151085,86565],{"class":57},[36,151087,53931],{"class":53},[36,151089,151090],{"class":49},"1800",[36,151092,7461],{"class":53},[36,151094,151095,151097,151099,151101,151104,151106,151108,151110,151113],{"class":38,"line":2421},[36,151096,150837],{"class":53},[36,151098,150449],{"class":57},[36,151100,53931],{"class":53},[36,151102,151103],{"class":57},"\"2024-10-03\"",[36,151105,14958],{"class":53},[36,151107,86565],{"class":57},[36,151109,53931],{"class":53},[36,151111,151112],{"class":49},"1500",[36,151114,7461],{"class":53},[36,151116,151117,151119,151121,151123,151126,151128,151130,151132,151135],{"class":38,"line":2446},[36,151118,150837],{"class":53},[36,151120,150449],{"class":57},[36,151122,53931],{"class":53},[36,151124,151125],{"class":57},"\"2024-10-04\"",[36,151127,14958],{"class":53},[36,151129,86565],{"class":57},[36,151131,53931],{"class":53},[36,151133,151134],{"class":49},"2100",[36,151136,7461],{"class":53},[36,151138,151139,151141,151143,151145,151148,151150,151152,151154,151157],{"class":38,"line":2469},[36,151140,150837],{"class":53},[36,151142,150449],{"class":57},[36,151144,53931],{"class":53},[36,151146,151147],{"class":57},"\"2024-10-05\"",[36,151149,14958],{"class":53},[36,151151,86565],{"class":57},[36,151153,53931],{"class":53},[36,151155,151156],{"class":49},"2600",[36,151158,7461],{"class":53},[36,151160,151161],{"class":38,"line":2492},[36,151162,35748],{"class":53},[36,151164,151165],{"class":38,"line":4150},[36,151166,546],{"emptyLinePlaceholder":545},[36,151168,151169,151171,151173,151176,151178,151180,151182,151184,151186],{"class":38,"line":4155},[36,151170,150252],{"class":53},[36,151172,115],{"class":114},[36,151174,151175],{"class":53}," [item[",[36,151177,150449],{"class":57},[36,151179,6974],{"class":53},[36,151181,5556],{"class":114},[36,151183,150661],{"class":53},[36,151185,28556],{"class":114},[36,151187,151188],{"class":53}," sales]\n",[36,151190,151191,151194,151196,151198,151200,151202,151204,151206,151208],{"class":38,"line":4161},[36,151192,151193],{"class":53},"amounts ",[36,151195,115],{"class":114},[36,151197,151175],{"class":53},[36,151199,86565],{"class":57},[36,151201,6974],{"class":53},[36,151203,5556],{"class":114},[36,151205,150661],{"class":53},[36,151207,28556],{"class":114},[36,151209,151188],{"class":53},[36,151211,151212],{"class":38,"line":4166},[36,151213,546],{"emptyLinePlaceholder":545},[36,151215,151216,151218,151220],{"class":38,"line":4180},[36,151217,149704],{"class":53},[36,151219,115],{"class":114},[36,151221,149709],{"class":53},[36,151223,151224],{"class":38,"line":4185},[36,151225,150293],{"class":53},[36,151227,151228],{"class":38,"line":4191},[36,151229,150101],{"class":53},[36,151231,151232,151234,151236,151238],{"class":38,"line":4212},[36,151233,150106],{"class":1997},[36,151235,115],{"class":114},[36,151237,149747],{"class":57},[36,151239,33970],{"class":53},[36,151241,151242,151244,151246],{"class":38,"line":4217},[36,151243,150117],{"class":1997},[36,151245,115],{"class":114},[36,151247,151248],{"class":53},"amounts,\n",[36,151250,151251,151253,151255,151257],{"class":38,"line":4231},[36,151252,150146],{"class":1997},[36,151254,115],{"class":114},[36,151256,189],{"class":49},[36,151258,33970],{"class":53},[36,151260,151261,151263,151265,151267,151269,151271,151273],{"class":38,"line":4236},[36,151262,150157],{"class":1997},[36,151264,115],{"class":114},[36,151266,150162],{"class":53},[36,151268,150165],{"class":1997},[36,151270,115],{"class":114},[36,151272,189],{"class":49},[36,151274,40547],{"class":53},[36,151276,151277],{"class":38,"line":4264},[36,151278,61],{"class":53},[36,151280,151281],{"class":38,"line":4269},[36,151282,149920],{"class":53},[36,151284,151285,151287,151289,151291,151293,151295,151298],{"class":38,"line":4286},[36,151286,149925],{"class":1997},[36,151288,115],{"class":114},[36,151290,149930],{"class":53},[36,151292,53901],{"class":1997},[36,151294,115],{"class":114},[36,151296,151297],{"class":57},"\"每日销售额\"",[36,151299,40547],{"class":53},[36,151301,151302,151304,151306,151308,151310,151312,151314],{"class":38,"line":4291},[36,151303,149944],{"class":1997},[36,151305,115],{"class":114},[36,151307,149949],{"class":53},[36,151309,1998],{"class":1997},[36,151311,115],{"class":114},[36,151313,149956],{"class":57},[36,151315,40547],{"class":53},[36,151317,151318,151320,151322,151324,151326,151328,151330],{"class":38,"line":4296},[36,151319,149963],{"class":1997},[36,151321,115],{"class":114},[36,151323,149949],{"class":53},[36,151325,1998],{"class":1997},[36,151327,115],{"class":114},[36,151329,149974],{"class":57},[36,151331,40547],{"class":53},[36,151333,151334,151336,151338,151340,151342,151344,151346],{"class":38,"line":4301},[36,151335,149981],{"class":1997},[36,151337,115],{"class":114},[36,151339,149986],{"class":53},[36,151341,149989],{"class":1997},[36,151343,115],{"class":114},[36,151345,149994],{"class":57},[36,151347,40547],{"class":53},[36,151349,151350,151353,151355],{"class":38,"line":4315},[36,151351,151352],{"class":1997},"    datazoom_opts",[36,151354,115],{"class":114},[36,151356,151357],{"class":53},"[opts.DataZoomOpts()],\n",[36,151359,151360],{"class":38,"line":4320},[36,151361,61],{"class":53},[36,151363,151364,151366,151369],{"class":38,"line":5109},[36,151365,149776],{"class":53},[36,151367,151368],{"class":57},"\"daily_sales.html\"",[36,151370,61],{"class":53},[19,151372,151373,151376],{},[33,151374,151375],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151378,151380],{"id":151379},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151382,151383],{},"如果数据结构如下：",[26,151385,151387],{"className":28,"code":151386,"language":30,"meta":31,"style":31},"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",[33,151388,151389,151397,151405,151427,151448,151453,151460,151480,151500,151504],{"__ignoreMap":31},[36,151390,151391,151393,151395],{"class":38,"line":39},[36,151392,104131],{"class":53},[36,151394,115],{"class":114},[36,151396,18091],{"class":53},[36,151398,151399,151402],{"class":38,"line":46},[36,151400,151401],{"class":57},"    \"北京\"",[36,151403,151404],{"class":53},": [\n",[36,151406,151407,151409,151411,151413,151416,151418,151421,151423,151425],{"class":38,"line":82},[36,151408,7448],{"class":53},[36,151410,150449],{"class":57},[36,151412,53931],{"class":53},[36,151414,151415],{"class":57},"\"2024-01-01\"",[36,151417,14958],{"class":53},[36,151419,151420],{"class":57},"\"confirm\"",[36,151422,53931],{"class":53},[36,151424,1317],{"class":49},[36,151426,7461],{"class":53},[36,151428,151429,151431,151433,151435,151438,151440,151442,151444,151446],{"class":38,"line":88},[36,151430,7448],{"class":53},[36,151432,150449],{"class":57},[36,151434,53931],{"class":53},[36,151436,151437],{"class":57},"\"2024-01-02\"",[36,151439,14958],{"class":53},[36,151441,151420],{"class":57},[36,151443,53931],{"class":53},[36,151445,3176],{"class":49},[36,151447,7461],{"class":53},[36,151449,151450],{"class":38,"line":195},[36,151451,151452],{"class":53},"    ],\n",[36,151454,151455,151458],{"class":38,"line":1517},[36,151456,151457],{"class":57},"    \"上海\"",[36,151459,151404],{"class":53},[36,151461,151462,151464,151466,151468,151470,151472,151474,151476,151478],{"class":38,"line":2421},[36,151463,7448],{"class":53},[36,151465,150449],{"class":57},[36,151467,53931],{"class":53},[36,151469,151415],{"class":57},[36,151471,14958],{"class":53},[36,151473,151420],{"class":57},[36,151475,53931],{"class":53},[36,151477,3076],{"class":49},[36,151479,7461],{"class":53},[36,151481,151482,151484,151486,151488,151490,151492,151494,151496,151498],{"class":38,"line":2446},[36,151483,7448],{"class":53},[36,151485,150449],{"class":57},[36,151487,53931],{"class":53},[36,151489,151437],{"class":57},[36,151491,14958],{"class":53},[36,151493,151420],{"class":57},[36,151495,53931],{"class":53},[36,151497,3201],{"class":49},[36,151499,7461],{"class":53},[36,151501,151502],{"class":38,"line":2469},[36,151503,151452],{"class":53},[36,151505,151506],{"class":38,"line":2492},[36,151507,4103],{"class":53},[19,151509,151510],{},"绘制多地区趋势：",[26,151512,151514],{"className":28,"code":151513,"language":30,"meta":31,"style":31},"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",[33,151515,151516,151530,151540,151544,151569,151573,151581,151585,151589,151601,151623,151636,151640,151644,151661,151677,151681],{"__ignoreMap":31},[36,151517,151518,151520,151522,151524,151526,151528],{"class":38,"line":39},[36,151519,33241],{"class":114},[36,151521,149831],{"class":53},[36,151523,537],{"class":114},[36,151525,149836],{"class":53},[36,151527,33887],{"class":114},[36,151529,149841],{"class":53},[36,151531,151532,151534,151536,151538],{"class":38,"line":46},[36,151533,33241],{"class":114},[36,151535,149690],{"class":53},[36,151537,537],{"class":114},[36,151539,149695],{"class":53},[36,151541,151542],{"class":38,"line":82},[36,151543,546],{"emptyLinePlaceholder":545},[36,151545,151546,151548,151550,151552,151554,151556,151558,151560,151562,151565,151567],{"class":38,"line":88},[36,151547,150252],{"class":53},[36,151549,115],{"class":114},[36,151551,151175],{"class":53},[36,151553,150449],{"class":57},[36,151555,6974],{"class":53},[36,151557,5556],{"class":114},[36,151559,150661],{"class":53},[36,151561,28556],{"class":114},[36,151563,151564],{"class":53}," data[",[36,151566,71756],{"class":57},[36,151568,80011],{"class":53},[36,151570,151571],{"class":38,"line":195},[36,151572,546],{"emptyLinePlaceholder":545},[36,151574,151575,151577,151579],{"class":38,"line":1517},[36,151576,149704],{"class":53},[36,151578,115],{"class":114},[36,151580,149709],{"class":53},[36,151582,151583],{"class":38,"line":2421},[36,151584,150293],{"class":53},[36,151586,151587],{"class":38,"line":2446},[36,151588,546],{"emptyLinePlaceholder":545},[36,151590,151591,151593,151596,151598],{"class":38,"line":2469},[36,151592,5556],{"class":114},[36,151594,151595],{"class":53}," city, records ",[36,151597,28556],{"class":114},[36,151599,151600],{"class":53}," data.items():\n",[36,151602,151603,151606,151608,151610,151612,151614,151616,151618,151620],{"class":38,"line":2492},[36,151604,151605],{"class":53},"    values ",[36,151607,115],{"class":114},[36,151609,151175],{"class":53},[36,151611,151420],{"class":57},[36,151613,6974],{"class":53},[36,151615,5556],{"class":114},[36,151617,150661],{"class":53},[36,151619,28556],{"class":114},[36,151621,151622],{"class":53}," records]\n",[36,151624,151625,151628,151630,151632,151634],{"class":38,"line":4150},[36,151626,151627],{"class":53},"    line.add_yaxis(city, values, ",[36,151629,150197],{"class":1997},[36,151631,115],{"class":114},[36,151633,189],{"class":49},[36,151635,61],{"class":53},[36,151637,151638],{"class":38,"line":4155},[36,151639,546],{"emptyLinePlaceholder":545},[36,151641,151642],{"class":38,"line":4161},[36,151643,149920],{"class":53},[36,151645,151646,151648,151650,151652,151654,151656,151659],{"class":38,"line":4166},[36,151647,149925],{"class":1997},[36,151649,115],{"class":114},[36,151651,149930],{"class":53},[36,151653,53901],{"class":1997},[36,151655,115],{"class":114},[36,151657,151658],{"class":57},"\"多地区趋势图\"",[36,151660,40547],{"class":53},[36,151662,151663,151665,151667,151669,151671,151673,151675],{"class":38,"line":4180},[36,151664,149981],{"class":1997},[36,151666,115],{"class":114},[36,151668,149986],{"class":53},[36,151670,149989],{"class":1997},[36,151672,115],{"class":114},[36,151674,149994],{"class":57},[36,151676,40547],{"class":53},[36,151678,151679],{"class":38,"line":4185},[36,151680,61],{"class":53},[36,151682,151683,151685,151688],{"class":38,"line":4191},[36,151684,149776],{"class":53},[36,151686,151687],{"class":57},"\"trend.html\"",[36,151689,61],{"class":53},[19,151691,151692],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151694,151696],{"id":151695},"_1012-易错点","10.12 易错点",[433,151698,151699,151705,151711,151721,151727],{},[436,151700,151701,151704],{},[33,151702,151703],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[436,151706,151707,151710],{},[33,151708,151709],{},"render()"," 生成的是 HTML，不是图片。",[436,151712,151713,151714,151717,151718,1296],{},"JSON 字符串用 ",[33,151715,151716],{},"json.loads()","，JSON 文件用 ",[33,151719,151720],{},"json.load()",[436,151722,151723,151724,1296],{},"中文 JSON 保存时加 ",[33,151725,151726],{},"ensure_ascii=False",[436,151728,151729],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151731,151733],{"id":151732},"_1013-本章练习","10.13 本章练习",[433,151735,151736,151739,151742,151745,151748],{},[436,151737,151738],{},"安装 pyecharts 并生成第一个折线图。",[436,151740,151741],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[436,151743,151744],{},"绘制两条折线，对比线上和线下销售额。",[436,151746,151747],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[436,151749,151750],{},"对含有空值的销售数据进行清洗后再绘图。",[2602,151752,151753],{},"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":31,"searchDepth":46,"depth":46,"links":151755},[151756,151757,151758,151759,151760,151761,151762,151763,151764,151765,151766,151767,151768],{"id":149372,"depth":46,"text":149373},{"id":149447,"depth":46,"text":149448},{"id":149626,"depth":46,"text":149627},{"id":149677,"depth":46,"text":149678},{"id":149811,"depth":46,"text":149812},{"id":150087,"depth":46,"text":150088},{"id":150213,"depth":46,"text":150214},{"id":150424,"depth":46,"text":150425},{"id":150795,"depth":46,"text":150796},{"id":151007,"depth":46,"text":151008},{"id":151379,"depth":46,"text":151380},{"id":151695,"depth":46,"text":151696},{"id":151732,"depth":46,"text":151733},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149364,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151775,"title":151776,"body":151777,"description":2630,"extension":2631,"meta":154134,"navigation":545,"path":154135,"seo":154136,"stem":154137,"__hash__":154138},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151778,"toc":154111},[151779,151782,151786,151789,151792,151866,151869,151960,151963,151967,151970,152014,152027,152031,152034,152101,152104,152108,152111,152195,152203,152207,152212,152353,152356,152367,152373,152379,152493,152497,152500,152503,152755,152758,152762,152765,152869,152872,152876,153027,153031,153038,153151,153155,153158,153264,153267,153271,153274,153305,153308,153413,153416,153420,153424,153434,153502,153506,153513,153577,153580,153584,153590,153686,153695,153699,154023,154032,154036,154064,154068,154108],[10,151780,151776],{"id":151781},"_11-面向对象基础",[14,151783,151785],{"id":151784},"_111-什么是面向对象","11.1 什么是面向对象",[19,151787,151788],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151790,151791],{},"面向过程：",[26,151793,151795],{"className":28,"code":151794,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[33,151796,151797,151805,151813,151817,151827,151857,151861],{"__ignoreMap":31},[36,151798,151799,151801,151803],{"class":38,"line":39},[36,151800,360],{"class":53},[36,151802,115],{"class":114},[36,151804,365],{"class":57},[36,151806,151807,151809,151811],{"class":38,"line":46},[36,151808,111],{"class":53},[36,151810,115],{"class":114},[36,151812,374],{"class":49},[36,151814,151815],{"class":38,"line":82},[36,151816,546],{"emptyLinePlaceholder":545},[36,151818,151819,151821,151824],{"class":38,"line":88},[36,151820,34450],{"class":114},[36,151822,151823],{"class":4500}," introduce",[36,151825,151826],{"class":53},"(name, age):\n",[36,151828,151829,151831,151833,151835,151838,151840,151842,151844,151847,151849,151851,151853,151855],{"class":38,"line":195},[36,151830,33803],{"class":49},[36,151832,54],{"class":53},[36,151834,2060],{"class":114},[36,151836,151837],{"class":57},"\"我叫",[36,151839,2065],{"class":49},[36,151841,1998],{"class":53},[36,151843,2070],{"class":49},[36,151845,151846],{"class":57},"，今年",[36,151848,2065],{"class":49},[36,151850,2006],{"class":53},[36,151852,2070],{"class":49},[36,151854,2248],{"class":57},[36,151856,61],{"class":53},[36,151858,151859],{"class":38,"line":1517},[36,151860,546],{"emptyLinePlaceholder":545},[36,151862,151863],{"class":38,"line":2421},[36,151864,151865],{"class":53},"introduce(name, age)\n",[19,151867,151868],{},"面向对象：",[26,151870,151872],{"className":28,"code":151871,"language":30,"meta":31,"style":31},"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",[33,151873,151874,151882,151890,151919,151923,151927,151937,151946,151955],{"__ignoreMap":31},[36,151875,151876,151878,151880],{"class":38,"line":39},[36,151877,519],{"class":114},[36,151879,10425],{"class":4500},[36,151881,6270],{"class":53},[36,151883,151884,151886,151888],{"class":38,"line":46},[36,151885,33305],{"class":114},[36,151887,151823],{"class":4500},[36,151889,33311],{"class":53},[36,151891,151892,151894,151896,151898,151900,151903,151905,151907,151909,151911,151913,151915,151917],{"class":38,"line":82},[36,151893,34954],{"class":49},[36,151895,54],{"class":53},[36,151897,2060],{"class":114},[36,151899,151837],{"class":57},[36,151901,151902],{"class":49},"{self",[36,151904,82782],{"class":53},[36,151906,2070],{"class":49},[36,151908,151846],{"class":57},[36,151910,151902],{"class":49},[36,151912,82794],{"class":53},[36,151914,2070],{"class":49},[36,151916,2248],{"class":57},[36,151918,61],{"class":53},[36,151920,151921],{"class":38,"line":88},[36,151922,546],{"emptyLinePlaceholder":545},[36,151924,151925],{"class":38,"line":195},[36,151926,546],{"emptyLinePlaceholder":545},[36,151928,151929,151932,151934],{"class":38,"line":1517},[36,151930,151931],{"class":53},"student ",[36,151933,115],{"class":114},[36,151935,151936],{"class":53}," Student()\n",[36,151938,151939,151942,151944],{"class":38,"line":2421},[36,151940,151941],{"class":53},"student.name ",[36,151943,115],{"class":114},[36,151945,365],{"class":57},[36,151947,151948,151951,151953],{"class":38,"line":2446},[36,151949,151950],{"class":53},"student.age ",[36,151952,115],{"class":114},[36,151954,374],{"class":49},[36,151956,151957],{"class":38,"line":2469},[36,151958,151959],{"class":53},"student.introduce()\n",[19,151961,151962],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151964,151966],{"id":151965},"_112-类和对象","11.2 类和对象",[19,151968,151969],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,151971,151973],{"className":28,"code":151972,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,151974,151975,151983,151988,151992,151996,152005],{"__ignoreMap":31},[36,151976,151977,151979,151981],{"class":38,"line":39},[36,151978,519],{"class":114},[36,151980,10425],{"class":4500},[36,151982,6270],{"class":53},[36,151984,151985],{"class":38,"line":46},[36,151986,151987],{"class":114},"    pass\n",[36,151989,151990],{"class":38,"line":82},[36,151991,546],{"emptyLinePlaceholder":545},[36,151993,151994],{"class":38,"line":88},[36,151995,546],{"emptyLinePlaceholder":545},[36,151997,151998,152001,152003],{"class":38,"line":195},[36,151999,152000],{"class":53},"student1 ",[36,152002,115],{"class":114},[36,152004,151936],{"class":53},[36,152006,152007,152010,152012],{"class":38,"line":1517},[36,152008,152009],{"class":53},"student2 ",[36,152011,115],{"class":114},[36,152013,151936],{"class":53},[19,152015,152016,152019,152020,1292,152023,152026],{},[33,152017,152018],{},"Student"," 是类，",[33,152021,152022],{},"student1",[33,152024,152025],{},"student2"," 是对象。",[14,152028,152030],{"id":152029},"_113-属性","11.3 属性",[19,152032,152033],{},"属性是对象保存的数据。",[26,152035,152037],{"className":28,"code":152036,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,152038,152039,152047,152051,152055,152059,152067,152075,152083,152087,152094],{"__ignoreMap":31},[36,152040,152041,152043,152045],{"class":38,"line":39},[36,152042,519],{"class":114},[36,152044,10425],{"class":4500},[36,152046,6270],{"class":53},[36,152048,152049],{"class":38,"line":46},[36,152050,151987],{"class":114},[36,152052,152053],{"class":38,"line":82},[36,152054,546],{"emptyLinePlaceholder":545},[36,152056,152057],{"class":38,"line":88},[36,152058,546],{"emptyLinePlaceholder":545},[36,152060,152061,152063,152065],{"class":38,"line":195},[36,152062,151931],{"class":53},[36,152064,115],{"class":114},[36,152066,151936],{"class":53},[36,152068,152069,152071,152073],{"class":38,"line":1517},[36,152070,151941],{"class":53},[36,152072,115],{"class":114},[36,152074,365],{"class":57},[36,152076,152077,152079,152081],{"class":38,"line":2421},[36,152078,151950],{"class":53},[36,152080,115],{"class":114},[36,152082,374],{"class":49},[36,152084,152085],{"class":38,"line":2446},[36,152086,546],{"emptyLinePlaceholder":545},[36,152088,152089,152091],{"class":38,"line":2469},[36,152090,50],{"class":49},[36,152092,152093],{"class":53},"(student.name)\n",[36,152095,152096,152098],{"class":38,"line":2492},[36,152097,50],{"class":49},[36,152099,152100],{"class":53},"(student.age)\n",[19,152102,152103],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152105,152107],{"id":152106},"_114-方法","11.4 方法",[19,152109,152110],{},"类中的函数叫方法。",[26,152112,152113],{"className":28,"code":151871,"language":30,"meta":31,"style":31},[33,152114,152115,152123,152131,152159,152163,152167,152175,152183,152191],{"__ignoreMap":31},[36,152116,152117,152119,152121],{"class":38,"line":39},[36,152118,519],{"class":114},[36,152120,10425],{"class":4500},[36,152122,6270],{"class":53},[36,152124,152125,152127,152129],{"class":38,"line":46},[36,152126,33305],{"class":114},[36,152128,151823],{"class":4500},[36,152130,33311],{"class":53},[36,152132,152133,152135,152137,152139,152141,152143,152145,152147,152149,152151,152153,152155,152157],{"class":38,"line":82},[36,152134,34954],{"class":49},[36,152136,54],{"class":53},[36,152138,2060],{"class":114},[36,152140,151837],{"class":57},[36,152142,151902],{"class":49},[36,152144,82782],{"class":53},[36,152146,2070],{"class":49},[36,152148,151846],{"class":57},[36,152150,151902],{"class":49},[36,152152,82794],{"class":53},[36,152154,2070],{"class":49},[36,152156,2248],{"class":57},[36,152158,61],{"class":53},[36,152160,152161],{"class":38,"line":88},[36,152162,546],{"emptyLinePlaceholder":545},[36,152164,152165],{"class":38,"line":195},[36,152166,546],{"emptyLinePlaceholder":545},[36,152168,152169,152171,152173],{"class":38,"line":1517},[36,152170,151931],{"class":53},[36,152172,115],{"class":114},[36,152174,151936],{"class":53},[36,152176,152177,152179,152181],{"class":38,"line":2421},[36,152178,151941],{"class":53},[36,152180,115],{"class":114},[36,152182,365],{"class":57},[36,152184,152185,152187,152189],{"class":38,"line":2446},[36,152186,151950],{"class":53},[36,152188,115],{"class":114},[36,152190,374],{"class":49},[36,152192,152193],{"class":38,"line":2469},[36,152194,151959],{"class":53},[19,152196,152197,152199,152200,152202],{},[33,152198,33327],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,152201,33327],{},"，Python 会自动传。",[14,152204,152206],{"id":152205},"_115-构造方法__init__","11.5 构造方法__init__",[19,152208,152209,152211],{},[33,152210,33333],{}," 在对象创建时自动执行，用于初始化属性。",[26,152213,152215],{"className":28,"code":152214,"language":30,"meta":31,"style":31},"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",[33,152216,152217,152225,152234,152246,152258,152269,152273,152281,152319,152323,152327,152349],{"__ignoreMap":31},[36,152218,152219,152221,152223],{"class":38,"line":39},[36,152220,519],{"class":114},[36,152222,10425],{"class":4500},[36,152224,6270],{"class":53},[36,152226,152227,152229,152231],{"class":38,"line":46},[36,152228,33305],{"class":114},[36,152230,33308],{"class":49},[36,152232,152233],{"class":53},"(self, name, age, score):\n",[36,152235,152236,152238,152241,152243],{"class":38,"line":82},[36,152237,33349],{"class":49},[36,152239,152240],{"class":53},".name ",[36,152242,115],{"class":114},[36,152244,152245],{"class":53}," name\n",[36,152247,152248,152250,152253,152255],{"class":38,"line":88},[36,152249,33349],{"class":49},[36,152251,152252],{"class":53},".age ",[36,152254,115],{"class":114},[36,152256,152257],{"class":53}," age\n",[36,152259,152260,152262,152265,152267],{"class":38,"line":195},[36,152261,33349],{"class":49},[36,152263,152264],{"class":53},".score ",[36,152266,115],{"class":114},[36,152268,4117],{"class":53},[36,152270,152271],{"class":38,"line":1517},[36,152272,546],{"emptyLinePlaceholder":545},[36,152274,152275,152277,152279],{"class":38,"line":2421},[36,152276,33305],{"class":114},[36,152278,151823],{"class":4500},[36,152280,33311],{"class":53},[36,152282,152283,152285,152287,152289,152291,152293,152295,152297,152299,152301,152303,152305,152308,152310,152313,152315,152317],{"class":38,"line":2446},[36,152284,34954],{"class":49},[36,152286,54],{"class":53},[36,152288,2060],{"class":114},[36,152290,151837],{"class":57},[36,152292,151902],{"class":49},[36,152294,82782],{"class":53},[36,152296,2070],{"class":49},[36,152298,151846],{"class":57},[36,152300,151902],{"class":49},[36,152302,82794],{"class":53},[36,152304,2070],{"class":49},[36,152306,152307],{"class":57},"岁，成绩",[36,152309,151902],{"class":49},[36,152311,152312],{"class":53},".score",[36,152314,2070],{"class":49},[36,152316,1822],{"class":57},[36,152318,61],{"class":53},[36,152320,152321],{"class":38,"line":2469},[36,152322,546],{"emptyLinePlaceholder":545},[36,152324,152325],{"class":38,"line":2492},[36,152326,546],{"emptyLinePlaceholder":545},[36,152328,152329,152331,152333,152336,152339,152341,152343,152345,152347],{"class":38,"line":4150},[36,152330,151931],{"class":53},[36,152332,115],{"class":114},[36,152334,152335],{"class":53}," Student(",[36,152337,152338],{"class":57},"\"小明\"",[36,152340,14958],{"class":53},[36,152342,3326],{"class":49},[36,152344,14958],{"class":53},[36,152346,3662],{"class":49},[36,152348,61],{"class":53},[36,152350,152351],{"class":38,"line":4155},[36,152352,151959],{"class":53},[19,152354,152355],{},"构造方法的好处：",[433,152357,152358,152361,152364],{},[436,152359,152360],{},"创建对象时必须提供必要数据。",[436,152362,152363],{},"属性初始化集中，不容易漏。",[436,152365,152366],{},"对象状态更完整。",[14,152368,152370,152371],{"id":152369},"_116-str","11.6 ",[2839,152372,256],{},[19,152374,152375,152376,1296],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,152377,152378],{},"__str__",[26,152380,152382],{"className":28,"code":152381,"language":30,"meta":31,"style":31},"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",[33,152383,152384,152392,152401,152411,152421,152425,152434,152462,152466,152470,152486],{"__ignoreMap":31},[36,152385,152386,152388,152390],{"class":38,"line":39},[36,152387,519],{"class":114},[36,152389,10425],{"class":4500},[36,152391,6270],{"class":53},[36,152393,152394,152396,152398],{"class":38,"line":46},[36,152395,33305],{"class":114},[36,152397,33308],{"class":49},[36,152399,152400],{"class":53},"(self, name, age):\n",[36,152402,152403,152405,152407,152409],{"class":38,"line":82},[36,152404,33349],{"class":49},[36,152406,152240],{"class":53},[36,152408,115],{"class":114},[36,152410,152245],{"class":53},[36,152412,152413,152415,152417,152419],{"class":38,"line":88},[36,152414,33349],{"class":49},[36,152416,152252],{"class":53},[36,152418,115],{"class":114},[36,152420,152257],{"class":53},[36,152422,152423],{"class":38,"line":195},[36,152424,546],{"emptyLinePlaceholder":545},[36,152426,152427,152429,152432],{"class":38,"line":1517},[36,152428,33305],{"class":114},[36,152430,152431],{"class":49}," __str__",[36,152433,33311],{"class":53},[36,152435,152436,152438,152441,152444,152446,152448,152450,152453,152455,152457,152459],{"class":38,"line":2421},[36,152437,17273],{"class":114},[36,152439,152440],{"class":114}," f",[36,152442,152443],{"class":57},"\"Student(name=",[36,152445,151902],{"class":49},[36,152447,82782],{"class":53},[36,152449,2070],{"class":49},[36,152451,152452],{"class":57},", age=",[36,152454,151902],{"class":49},[36,152456,82794],{"class":53},[36,152458,2070],{"class":49},[36,152460,152461],{"class":57},")\"\n",[36,152463,152464],{"class":38,"line":2446},[36,152465,546],{"emptyLinePlaceholder":545},[36,152467,152468],{"class":38,"line":2469},[36,152469,546],{"emptyLinePlaceholder":545},[36,152471,152472,152474,152476,152478,152480,152482,152484],{"class":38,"line":2492},[36,152473,151931],{"class":53},[36,152475,115],{"class":114},[36,152477,152335],{"class":53},[36,152479,152338],{"class":57},[36,152481,14958],{"class":53},[36,152483,3326],{"class":49},[36,152485,61],{"class":53},[36,152487,152488,152490],{"class":38,"line":4150},[36,152489,50],{"class":49},[36,152491,152492],{"class":53},"(student)\n",[14,152494,152496],{"id":152495},"_117-封装","11.7 封装",[19,152498,152499],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152501,152502],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,152504,152506],{"className":28,"code":152505,"language":30,"meta":31,"style":31},"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",[33,152507,152508,152517,152526,152538,152550,152554,152563,152572,152576,152586,152599,152610,152615,152626,152630,152639,152651,152662,152666,152679,152690,152694,152704,152708,152712,152730,152739,152748],{"__ignoreMap":31},[36,152509,152510,152512,152515],{"class":38,"line":39},[36,152511,519],{"class":114},[36,152513,152514],{"class":4500}," Account",[36,152516,6270],{"class":53},[36,152518,152519,152521,152523],{"class":38,"line":46},[36,152520,33305],{"class":114},[36,152522,33308],{"class":49},[36,152524,152525],{"class":53},"(self, owner, balance):\n",[36,152527,152528,152530,152533,152535],{"class":38,"line":82},[36,152529,33349],{"class":49},[36,152531,152532],{"class":53},".owner ",[36,152534,115],{"class":114},[36,152536,152537],{"class":53}," owner\n",[36,152539,152540,152542,152545,152547],{"class":38,"line":88},[36,152541,33349],{"class":49},[36,152543,152544],{"class":53},".__balance ",[36,152546,115],{"class":114},[36,152548,152549],{"class":53}," balance\n",[36,152551,152552],{"class":38,"line":195},[36,152553,546],{"emptyLinePlaceholder":545},[36,152555,152556,152558,152561],{"class":38,"line":1517},[36,152557,33305],{"class":114},[36,152559,152560],{"class":4500}," get_balance",[36,152562,33311],{"class":53},[36,152564,152565,152567,152569],{"class":38,"line":2421},[36,152566,17273],{"class":114},[36,152568,41373],{"class":49},[36,152570,152571],{"class":53},".__balance\n",[36,152573,152574],{"class":38,"line":2446},[36,152575,546],{"emptyLinePlaceholder":545},[36,152577,152578,152580,152583],{"class":38,"line":2469},[36,152579,33305],{"class":114},[36,152581,152582],{"class":4500}," deposit",[36,152584,152585],{"class":53},"(self, money):\n",[36,152587,152588,152590,152593,152595,152597],{"class":38,"line":2492},[36,152589,5029],{"class":114},[36,152591,152592],{"class":53}," money ",[36,152594,4126],{"class":114},[36,152596,6624],{"class":49},[36,152598,6270],{"class":53},[36,152600,152601,152603,152605,152608],{"class":38,"line":4150},[36,152602,37150],{"class":49},[36,152604,54],{"class":53},[36,152606,152607],{"class":57},"\"存款金额必须大于0\"",[36,152609,61],{"class":53},[36,152611,152612],{"class":38,"line":4155},[36,152613,152614],{"class":114},"            return\n",[36,152616,152617,152619,152621,152623],{"class":38,"line":4161},[36,152618,33349],{"class":49},[36,152620,152544],{"class":53},[36,152622,1224],{"class":114},[36,152624,152625],{"class":53}," money\n",[36,152627,152628],{"class":38,"line":4166},[36,152629,546],{"emptyLinePlaceholder":545},[36,152631,152632,152634,152637],{"class":38,"line":4180},[36,152633,33305],{"class":114},[36,152635,152636],{"class":4500}," withdraw",[36,152638,152585],{"class":53},[36,152640,152641,152643,152645,152647,152649],{"class":38,"line":4185},[36,152642,5029],{"class":114},[36,152644,152592],{"class":53},[36,152646,4126],{"class":114},[36,152648,6624],{"class":49},[36,152650,6270],{"class":53},[36,152652,152653,152655,152657,152660],{"class":38,"line":4191},[36,152654,37150],{"class":49},[36,152656,54],{"class":53},[36,152658,152659],{"class":57},"\"取款金额必须大于0\"",[36,152661,61],{"class":53},[36,152663,152664],{"class":38,"line":4212},[36,152665,152614],{"class":114},[36,152667,152668,152670,152672,152674,152676],{"class":38,"line":4217},[36,152669,5029],{"class":114},[36,152671,152592],{"class":53},[36,152673,3633],{"class":114},[36,152675,41373],{"class":49},[36,152677,152678],{"class":53},".__balance:\n",[36,152680,152681,152683,152685,152688],{"class":38,"line":4231},[36,152682,37150],{"class":49},[36,152684,54],{"class":53},[36,152686,152687],{"class":57},"\"余额不足\"",[36,152689,61],{"class":53},[36,152691,152692],{"class":38,"line":4236},[36,152693,152614],{"class":114},[36,152695,152696,152698,152700,152702],{"class":38,"line":4264},[36,152697,33349],{"class":49},[36,152699,152544],{"class":53},[36,152701,1234],{"class":114},[36,152703,152625],{"class":53},[36,152705,152706],{"class":38,"line":4269},[36,152707,546],{"emptyLinePlaceholder":545},[36,152709,152710],{"class":38,"line":4286},[36,152711,546],{"emptyLinePlaceholder":545},[36,152713,152714,152717,152719,152722,152724,152726,152728],{"class":38,"line":4291},[36,152715,152716],{"class":53},"account ",[36,152718,115],{"class":114},[36,152720,152721],{"class":53}," Account(",[36,152723,152338],{"class":57},[36,152725,14958],{"class":53},[36,152727,8937],{"class":49},[36,152729,61],{"class":53},[36,152731,152732,152735,152737],{"class":38,"line":4296},[36,152733,152734],{"class":53},"account.deposit(",[36,152736,4259],{"class":49},[36,152738,61],{"class":53},[36,152740,152741,152744,152746],{"class":38,"line":4301},[36,152742,152743],{"class":53},"account.withdraw(",[36,152745,166],{"class":49},[36,152747,61],{"class":53},[36,152749,152750,152752],{"class":38,"line":4315},[36,152751,50],{"class":49},[36,152753,152754],{"class":53},"(account.get_balance())\n",[19,152756,152757],{},"封装的意义是避免外部随意修改内部状态。",[14,152759,152761],{"id":152760},"_118-继承","11.8 继承",[19,152763,152764],{},"继承可以让子类复用父类的属性和方法。",[26,152766,152768],{"className":28,"code":152767,"language":30,"meta":31,"style":31},"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",[33,152769,152770,152779,152788,152799,152803,152807,152821,152830,152841,152845,152849,152859,152864],{"__ignoreMap":31},[36,152771,152772,152774,152777],{"class":38,"line":39},[36,152773,519],{"class":114},[36,152775,152776],{"class":4500}," Animal",[36,152778,6270],{"class":53},[36,152780,152781,152783,152786],{"class":38,"line":46},[36,152782,33305],{"class":114},[36,152784,152785],{"class":4500}," eat",[36,152787,33311],{"class":53},[36,152789,152790,152792,152794,152797],{"class":38,"line":82},[36,152791,34954],{"class":49},[36,152793,54],{"class":53},[36,152795,152796],{"class":57},"\"吃东西\"",[36,152798,61],{"class":53},[36,152800,152801],{"class":38,"line":88},[36,152802,546],{"emptyLinePlaceholder":545},[36,152804,152805],{"class":38,"line":195},[36,152806,546],{"emptyLinePlaceholder":545},[36,152808,152809,152811,152814,152816,152819],{"class":38,"line":1517},[36,152810,519],{"class":114},[36,152812,152813],{"class":4500}," Dog",[36,152815,54],{"class":53},[36,152817,152818],{"class":4500},"Animal",[36,152820,33290],{"class":53},[36,152822,152823,152825,152828],{"class":38,"line":2421},[36,152824,33305],{"class":114},[36,152826,152827],{"class":4500}," bark",[36,152829,33311],{"class":53},[36,152831,152832,152834,152836,152839],{"class":38,"line":2446},[36,152833,34954],{"class":49},[36,152835,54],{"class":53},[36,152837,152838],{"class":57},"\"汪汪\"",[36,152840,61],{"class":53},[36,152842,152843],{"class":38,"line":2469},[36,152844,546],{"emptyLinePlaceholder":545},[36,152846,152847],{"class":38,"line":2492},[36,152848,546],{"emptyLinePlaceholder":545},[36,152850,152851,152854,152856],{"class":38,"line":4150},[36,152852,152853],{"class":53},"dog ",[36,152855,115],{"class":114},[36,152857,152858],{"class":53}," Dog()\n",[36,152860,152861],{"class":38,"line":4155},[36,152862,152863],{"class":53},"dog.eat()\n",[36,152865,152866],{"class":38,"line":4161},[36,152867,152868],{"class":53},"dog.bark()\n",[19,152870,152871],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152873,152875],{"id":152874},"_119-方法重写","11.9 方法重写",[26,152877,152879],{"className":28,"code":152878,"language":30,"meta":31,"style":31},"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",[33,152880,152881,152889,152898,152909,152913,152917,152929,152937,152947,152951,152955,152968,152976,152987,152991,152995,153003,153013,153017,153022],{"__ignoreMap":31},[36,152882,152883,152885,152887],{"class":38,"line":39},[36,152884,519],{"class":114},[36,152886,152776],{"class":4500},[36,152888,6270],{"class":53},[36,152890,152891,152893,152896],{"class":38,"line":46},[36,152892,33305],{"class":114},[36,152894,152895],{"class":4500}," speak",[36,152897,33311],{"class":53},[36,152899,152900,152902,152904,152907],{"class":38,"line":82},[36,152901,34954],{"class":49},[36,152903,54],{"class":53},[36,152905,152906],{"class":57},"\"动物叫\"",[36,152908,61],{"class":53},[36,152910,152911],{"class":38,"line":88},[36,152912,546],{"emptyLinePlaceholder":545},[36,152914,152915],{"class":38,"line":195},[36,152916,546],{"emptyLinePlaceholder":545},[36,152918,152919,152921,152923,152925,152927],{"class":38,"line":1517},[36,152920,519],{"class":114},[36,152922,152813],{"class":4500},[36,152924,54],{"class":53},[36,152926,152818],{"class":4500},[36,152928,33290],{"class":53},[36,152930,152931,152933,152935],{"class":38,"line":2421},[36,152932,33305],{"class":114},[36,152934,152895],{"class":4500},[36,152936,33311],{"class":53},[36,152938,152939,152941,152943,152945],{"class":38,"line":2446},[36,152940,34954],{"class":49},[36,152942,54],{"class":53},[36,152944,152838],{"class":57},[36,152946,61],{"class":53},[36,152948,152949],{"class":38,"line":2469},[36,152950,546],{"emptyLinePlaceholder":545},[36,152952,152953],{"class":38,"line":2492},[36,152954,546],{"emptyLinePlaceholder":545},[36,152956,152957,152959,152962,152964,152966],{"class":38,"line":4150},[36,152958,519],{"class":114},[36,152960,152961],{"class":4500}," Cat",[36,152963,54],{"class":53},[36,152965,152818],{"class":4500},[36,152967,33290],{"class":53},[36,152969,152970,152972,152974],{"class":38,"line":4155},[36,152971,33305],{"class":114},[36,152973,152895],{"class":4500},[36,152975,33311],{"class":53},[36,152977,152978,152980,152982,152985],{"class":38,"line":4161},[36,152979,34954],{"class":49},[36,152981,54],{"class":53},[36,152983,152984],{"class":57},"\"喵喵\"",[36,152986,61],{"class":53},[36,152988,152989],{"class":38,"line":4166},[36,152990,546],{"emptyLinePlaceholder":545},[36,152992,152993],{"class":38,"line":4180},[36,152994,546],{"emptyLinePlaceholder":545},[36,152996,152997,152999,153001],{"class":38,"line":4185},[36,152998,152853],{"class":53},[36,153000,115],{"class":114},[36,153002,152858],{"class":53},[36,153004,153005,153008,153010],{"class":38,"line":4191},[36,153006,153007],{"class":53},"cat ",[36,153009,115],{"class":114},[36,153011,153012],{"class":53}," Cat()\n",[36,153014,153015],{"class":38,"line":4212},[36,153016,546],{"emptyLinePlaceholder":545},[36,153018,153019],{"class":38,"line":4217},[36,153020,153021],{"class":53},"dog.speak()\n",[36,153023,153024],{"class":38,"line":4231},[36,153025,153026],{"class":53},"cat.speak()\n",[14,153028,153030],{"id":153029},"_1110-super","11.10 super",[19,153032,153033,153034,153037],{},"子类可以通过 ",[33,153035,153036],{},"super()"," 调用父类方法。",[26,153039,153041],{"className":28,"code":153040,"language":30,"meta":31,"style":31},"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",[33,153042,153043,153051,153060,153070,153074,153078,153090,153099,153110,153120,153124,153128,153144],{"__ignoreMap":31},[36,153044,153045,153047,153049],{"class":38,"line":39},[36,153046,519],{"class":114},[36,153048,18088],{"class":4500},[36,153050,6270],{"class":53},[36,153052,153053,153055,153057],{"class":38,"line":46},[36,153054,33305],{"class":114},[36,153056,33308],{"class":49},[36,153058,153059],{"class":53},"(self, name):\n",[36,153061,153062,153064,153066,153068],{"class":38,"line":82},[36,153063,33349],{"class":49},[36,153065,152240],{"class":53},[36,153067,115],{"class":114},[36,153069,152245],{"class":53},[36,153071,153072],{"class":38,"line":88},[36,153073,546],{"emptyLinePlaceholder":545},[36,153075,153076],{"class":38,"line":195},[36,153077,546],{"emptyLinePlaceholder":545},[36,153079,153080,153082,153084,153086,153088],{"class":38,"line":1517},[36,153081,519],{"class":114},[36,153083,10425],{"class":4500},[36,153085,54],{"class":53},[36,153087,21564],{"class":4500},[36,153089,33290],{"class":53},[36,153091,153092,153094,153096],{"class":38,"line":2421},[36,153093,33305],{"class":114},[36,153095,33308],{"class":49},[36,153097,153098],{"class":53},"(self, name, score):\n",[36,153100,153101,153103,153105,153107],{"class":38,"line":2446},[36,153102,33321],{"class":49},[36,153104,19779],{"class":53},[36,153106,33333],{"class":49},[36,153108,153109],{"class":53},"(name)\n",[36,153111,153112,153114,153116,153118],{"class":38,"line":2469},[36,153113,33349],{"class":49},[36,153115,152264],{"class":53},[36,153117,115],{"class":114},[36,153119,4117],{"class":53},[36,153121,153122],{"class":38,"line":2492},[36,153123,546],{"emptyLinePlaceholder":545},[36,153125,153126],{"class":38,"line":4150},[36,153127,546],{"emptyLinePlaceholder":545},[36,153129,153130,153132,153134,153136,153138,153140,153142],{"class":38,"line":4155},[36,153131,151931],{"class":53},[36,153133,115],{"class":114},[36,153135,152335],{"class":53},[36,153137,152338],{"class":57},[36,153139,14958],{"class":53},[36,153141,3662],{"class":49},[36,153143,61],{"class":53},[36,153145,153146,153148],{"class":38,"line":4161},[36,153147,50],{"class":49},[36,153149,153150],{"class":53},"(student.name, student.score)\n",[14,153152,153154],{"id":153153},"_1111-多态","11.11 多态",[19,153156,153157],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,153159,153161],{"className":28,"code":153160,"language":30,"meta":31,"style":31},"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",[33,153162,153163,153171,153179,153189,153193,153197,153205,153213,153223,153227,153231,153241,153246,153250,153254,153259],{"__ignoreMap":31},[36,153164,153165,153167,153169],{"class":38,"line":39},[36,153166,519],{"class":114},[36,153168,152813],{"class":4500},[36,153170,6270],{"class":53},[36,153172,153173,153175,153177],{"class":38,"line":46},[36,153174,33305],{"class":114},[36,153176,152895],{"class":4500},[36,153178,33311],{"class":53},[36,153180,153181,153183,153185,153187],{"class":38,"line":82},[36,153182,34954],{"class":49},[36,153184,54],{"class":53},[36,153186,152838],{"class":57},[36,153188,61],{"class":53},[36,153190,153191],{"class":38,"line":88},[36,153192,546],{"emptyLinePlaceholder":545},[36,153194,153195],{"class":38,"line":195},[36,153196,546],{"emptyLinePlaceholder":545},[36,153198,153199,153201,153203],{"class":38,"line":1517},[36,153200,519],{"class":114},[36,153202,152961],{"class":4500},[36,153204,6270],{"class":53},[36,153206,153207,153209,153211],{"class":38,"line":2421},[36,153208,33305],{"class":114},[36,153210,152895],{"class":4500},[36,153212,33311],{"class":53},[36,153214,153215,153217,153219,153221],{"class":38,"line":2446},[36,153216,34954],{"class":49},[36,153218,54],{"class":53},[36,153220,152984],{"class":57},[36,153222,61],{"class":53},[36,153224,153225],{"class":38,"line":2469},[36,153226,546],{"emptyLinePlaceholder":545},[36,153228,153229],{"class":38,"line":2492},[36,153230,546],{"emptyLinePlaceholder":545},[36,153232,153233,153235,153238],{"class":38,"line":4150},[36,153234,34450],{"class":114},[36,153236,153237],{"class":4500}," make_sound",[36,153239,153240],{"class":53},"(animal):\n",[36,153242,153243],{"class":38,"line":4155},[36,153244,153245],{"class":53},"    animal.speak()\n",[36,153247,153248],{"class":38,"line":4161},[36,153249,546],{"emptyLinePlaceholder":545},[36,153251,153252],{"class":38,"line":4166},[36,153253,546],{"emptyLinePlaceholder":545},[36,153255,153256],{"class":38,"line":4180},[36,153257,153258],{"class":53},"make_sound(Dog())\n",[36,153260,153261],{"class":38,"line":4185},[36,153262,153263],{"class":53},"make_sound(Cat())\n",[19,153265,153266],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153268,153270],{"id":153269},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153272,153273],{},"实例属性属于对象：",[26,153275,153277],{"className":28,"code":153276,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,153278,153279,153287,153295],{"__ignoreMap":31},[36,153280,153281,153283,153285],{"class":38,"line":39},[36,153282,519],{"class":114},[36,153284,10425],{"class":4500},[36,153286,6270],{"class":53},[36,153288,153289,153291,153293],{"class":38,"line":46},[36,153290,33305],{"class":114},[36,153292,33308],{"class":49},[36,153294,153059],{"class":53},[36,153296,153297,153299,153301,153303],{"class":38,"line":82},[36,153298,33349],{"class":49},[36,153300,152240],{"class":53},[36,153302,115],{"class":114},[36,153304,152245],{"class":53},[19,153306,153307],{},"类属性属于类，所有对象共享：",[26,153309,153311],{"className":28,"code":153310,"language":30,"meta":31,"style":31},"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",[33,153312,153313,153321,153331,153335,153343,153353,153357,153361,153374,153388,153392,153399,153406],{"__ignoreMap":31},[36,153314,153315,153317,153319],{"class":38,"line":39},[36,153316,519],{"class":114},[36,153318,10425],{"class":4500},[36,153320,6270],{"class":53},[36,153322,153323,153326,153328],{"class":38,"line":46},[36,153324,153325],{"class":53},"    school ",[36,153327,115],{"class":114},[36,153329,153330],{"class":57}," \"黑马学校\"\n",[36,153332,153333],{"class":38,"line":82},[36,153334,546],{"emptyLinePlaceholder":545},[36,153336,153337,153339,153341],{"class":38,"line":88},[36,153338,33305],{"class":114},[36,153340,33308],{"class":49},[36,153342,153059],{"class":53},[36,153344,153345,153347,153349,153351],{"class":38,"line":195},[36,153346,33349],{"class":49},[36,153348,152240],{"class":53},[36,153350,115],{"class":114},[36,153352,152245],{"class":53},[36,153354,153355],{"class":38,"line":1517},[36,153356,546],{"emptyLinePlaceholder":545},[36,153358,153359],{"class":38,"line":2421},[36,153360,546],{"emptyLinePlaceholder":545},[36,153362,153363,153366,153368,153370,153372],{"class":38,"line":2446},[36,153364,153365],{"class":53},"s1 ",[36,153367,115],{"class":114},[36,153369,152335],{"class":53},[36,153371,152338],{"class":57},[36,153373,61],{"class":53},[36,153375,153376,153379,153381,153383,153386],{"class":38,"line":2469},[36,153377,153378],{"class":53},"s2 ",[36,153380,115],{"class":114},[36,153382,152335],{"class":53},[36,153384,153385],{"class":57},"\"小红\"",[36,153387,61],{"class":53},[36,153389,153390],{"class":38,"line":2492},[36,153391,546],{"emptyLinePlaceholder":545},[36,153393,153394,153396],{"class":38,"line":4150},[36,153395,50],{"class":49},[36,153397,153398],{"class":53},"(s1.school)\n",[36,153400,153401,153403],{"class":38,"line":4155},[36,153402,50],{"class":49},[36,153404,153405],{"class":53},"(s2.school)\n",[36,153407,153408,153410],{"class":38,"line":4161},[36,153409,50],{"class":49},[36,153411,153412],{"class":53},"(Student.school)\n",[19,153414,153415],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153417,153419],{"id":153418},"_1113-类方法和静态方法","11.13 类方法和静态方法",[997,153421,153423],{"id":153422},"_11131-类方法","11.13.1 类方法",[19,153425,153426,153427,153430,153431,1296],{},"类方法使用 ",[33,153428,153429],{},"@classmethod","，第一个参数通常是 ",[33,153432,153433],{},"cls",[26,153435,153437],{"className":28,"code":153436,"language":30,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,153438,153439,153447,153455,153459,153467,153477,153487,153491,153495],{"__ignoreMap":31},[36,153440,153441,153443,153445],{"class":38,"line":39},[36,153442,519],{"class":114},[36,153444,10425],{"class":4500},[36,153446,6270],{"class":53},[36,153448,153449,153451,153453],{"class":38,"line":46},[36,153450,153325],{"class":53},[36,153452,115],{"class":114},[36,153454,153330],{"class":57},[36,153456,153457],{"class":38,"line":82},[36,153458,546],{"emptyLinePlaceholder":545},[36,153460,153461,153464],{"class":38,"line":88},[36,153462,153463],{"class":4500},"    @",[36,153465,153466],{"class":49},"classmethod\n",[36,153468,153469,153471,153474],{"class":38,"line":195},[36,153470,33305],{"class":114},[36,153472,153473],{"class":4500}," get_school",[36,153475,153476],{"class":53},"(cls):\n",[36,153478,153479,153481,153484],{"class":38,"line":1517},[36,153480,17273],{"class":114},[36,153482,153483],{"class":49}," cls",[36,153485,153486],{"class":53},".school\n",[36,153488,153489],{"class":38,"line":2421},[36,153490,546],{"emptyLinePlaceholder":545},[36,153492,153493],{"class":38,"line":2446},[36,153494,546],{"emptyLinePlaceholder":545},[36,153496,153497,153499],{"class":38,"line":2469},[36,153498,50],{"class":49},[36,153500,153501],{"class":53},"(Student.get_school())\n",[997,153503,153505],{"id":153504},"_11132-静态方法","11.13.2 静态方法",[19,153507,153508,153509,153512],{},"静态方法使用 ",[33,153510,153511],{},"@staticmethod","，不需要访问实例和类。",[26,153514,153516],{"className":28,"code":153515,"language":30,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,153517,153518,153527,153534,153543,153554,153558,153562],{"__ignoreMap":31},[36,153519,153520,153522,153525],{"class":38,"line":39},[36,153521,519],{"class":114},[36,153523,153524],{"class":4500}," MathUtils",[36,153526,6270],{"class":53},[36,153528,153529,153531],{"class":38,"line":46},[36,153530,153463],{"class":4500},[36,153532,153533],{"class":49},"staticmethod\n",[36,153535,153536,153538,153540],{"class":38,"line":82},[36,153537,33305],{"class":114},[36,153539,7738],{"class":4500},[36,153541,153542],{"class":53},"(a, b):\n",[36,153544,153545,153547,153549,153551],{"class":38,"line":88},[36,153546,17273],{"class":114},[36,153548,13392],{"class":53},[36,153550,121],{"class":114},[36,153552,153553],{"class":53}," b\n",[36,153555,153556],{"class":38,"line":195},[36,153557,546],{"emptyLinePlaceholder":545},[36,153559,153560],{"class":38,"line":1517},[36,153561,546],{"emptyLinePlaceholder":545},[36,153563,153564,153566,153569,153571,153573,153575],{"class":38,"line":2421},[36,153565,50],{"class":49},[36,153567,153568],{"class":53},"(MathUtils.add(",[36,153570,707],{"class":49},[36,153572,14958],{"class":53},[36,153574,1188],{"class":49},[36,153576,625],{"class":53},[19,153578,153579],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153581,153583],{"id":153582},"_1114-dataclass","11.14 dataclass",[19,153585,153586,153589],{},[33,153587,153588],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,153591,153593],{"className":28,"code":153592,"language":30,"meta":31,"style":31},"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",[33,153594,153595,153607,153611,153615,153620,153628,153636,153644,153652,153656,153660,153680],{"__ignoreMap":31},[36,153596,153597,153599,153602,153604],{"class":38,"line":39},[36,153598,33241],{"class":114},[36,153600,153601],{"class":53}," dataclasses ",[36,153603,537],{"class":114},[36,153605,153606],{"class":53}," dataclass\n",[36,153608,153609],{"class":38,"line":46},[36,153610,546],{"emptyLinePlaceholder":545},[36,153612,153613],{"class":38,"line":82},[36,153614,546],{"emptyLinePlaceholder":545},[36,153616,153617],{"class":38,"line":88},[36,153618,153619],{"class":4500},"@dataclass\n",[36,153621,153622,153624,153626],{"class":38,"line":195},[36,153623,519],{"class":114},[36,153625,10425],{"class":4500},[36,153627,6270],{"class":53},[36,153629,153630,153633],{"class":38,"line":1517},[36,153631,153632],{"class":53},"    name: ",[36,153634,153635],{"class":49},"str\n",[36,153637,153638,153641],{"class":38,"line":2421},[36,153639,153640],{"class":53},"    age: ",[36,153642,153643],{"class":49},"int\n",[36,153645,153646,153649],{"class":38,"line":2446},[36,153647,153648],{"class":53},"    score: ",[36,153650,153651],{"class":49},"float\n",[36,153653,153654],{"class":38,"line":2469},[36,153655,546],{"emptyLinePlaceholder":545},[36,153657,153658],{"class":38,"line":2492},[36,153659,546],{"emptyLinePlaceholder":545},[36,153661,153662,153664,153666,153668,153670,153672,153674,153676,153678],{"class":38,"line":4150},[36,153663,151931],{"class":53},[36,153665,115],{"class":114},[36,153667,152335],{"class":53},[36,153669,152338],{"class":57},[36,153671,14958],{"class":53},[36,153673,3326],{"class":49},[36,153675,14958],{"class":53},[36,153677,3662],{"class":49},[36,153679,61],{"class":53},[36,153681,153682,153684],{"class":38,"line":4155},[36,153683,50],{"class":49},[36,153685,152492],{"class":53},[19,153687,153688,153689,273,153691,153694],{},"它会自动生成 ",[33,153690,33333],{},[33,153692,153693],{},"__repr__"," 等方法。适合数据模型类。",[14,153696,153698],{"id":153697},"_1115-小案例学生类","11.15 小案例：学生类",[26,153700,153702],{"className":28,"code":153701,"language":30,"meta":31,"style":31},"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",[33,153703,153704,153712,153721,153733,153743,153753,153763,153767,153776,153789,153793,153802,153808,153820,153832,153844,153856,153860,153864,153870,153880,153889,153899,153907,153915,153924,153928,153932,153940,153976,153980,153984,154009,154016],{"__ignoreMap":31},[36,153705,153706,153708,153710],{"class":38,"line":39},[36,153707,519],{"class":114},[36,153709,10425],{"class":4500},[36,153711,6270],{"class":53},[36,153713,153714,153716,153718],{"class":38,"line":46},[36,153715,33305],{"class":114},[36,153717,33308],{"class":49},[36,153719,153720],{"class":53},"(self, student_id, name, age, score):\n",[36,153722,153723,153725,153728,153730],{"class":38,"line":82},[36,153724,33349],{"class":49},[36,153726,153727],{"class":53},".student_id ",[36,153729,115],{"class":114},[36,153731,153732],{"class":53}," student_id\n",[36,153734,153735,153737,153739,153741],{"class":38,"line":88},[36,153736,33349],{"class":49},[36,153738,152240],{"class":53},[36,153740,115],{"class":114},[36,153742,152245],{"class":53},[36,153744,153745,153747,153749,153751],{"class":38,"line":195},[36,153746,33349],{"class":49},[36,153748,152252],{"class":53},[36,153750,115],{"class":114},[36,153752,152257],{"class":53},[36,153754,153755,153757,153759,153761],{"class":38,"line":1517},[36,153756,33349],{"class":49},[36,153758,152264],{"class":53},[36,153760,115],{"class":114},[36,153762,4117],{"class":53},[36,153764,153765],{"class":38,"line":2421},[36,153766,546],{"emptyLinePlaceholder":545},[36,153768,153769,153771,153774],{"class":38,"line":2446},[36,153770,33305],{"class":114},[36,153772,153773],{"class":4500}," is_passed",[36,153775,33311],{"class":53},[36,153777,153778,153780,153782,153784,153786],{"class":38,"line":2469},[36,153779,17273],{"class":114},[36,153781,41373],{"class":49},[36,153783,152264],{"class":53},[36,153785,1490],{"class":114},[36,153787,153788],{"class":49}," 60\n",[36,153790,153791],{"class":38,"line":2492},[36,153792,546],{"emptyLinePlaceholder":545},[36,153794,153795,153797,153800],{"class":38,"line":4150},[36,153796,33305],{"class":114},[36,153798,153799],{"class":4500}," to_dict",[36,153801,33311],{"class":53},[36,153803,153804,153806],{"class":38,"line":4155},[36,153805,17273],{"class":114},[36,153807,18091],{"class":53},[36,153809,153810,153813,153815,153817],{"class":38,"line":4161},[36,153811,153812],{"class":57},"            \"student_id\"",[36,153814,53931],{"class":53},[36,153816,33327],{"class":49},[36,153818,153819],{"class":53},".student_id,\n",[36,153821,153822,153825,153827,153829],{"class":38,"line":4166},[36,153823,153824],{"class":57},"            \"name\"",[36,153826,53931],{"class":53},[36,153828,33327],{"class":49},[36,153830,153831],{"class":53},".name,\n",[36,153833,153834,153837,153839,153841],{"class":38,"line":4180},[36,153835,153836],{"class":57},"            \"age\"",[36,153838,53931],{"class":53},[36,153840,33327],{"class":49},[36,153842,153843],{"class":53},".age,\n",[36,153845,153846,153849,153851,153853],{"class":38,"line":4185},[36,153847,153848],{"class":57},"            \"score\"",[36,153850,53931],{"class":53},[36,153852,33327],{"class":49},[36,153854,153855],{"class":53},".score,\n",[36,153857,153858],{"class":38,"line":4191},[36,153859,5061],{"class":53},[36,153861,153862],{"class":38,"line":4212},[36,153863,546],{"emptyLinePlaceholder":545},[36,153865,153866,153868],{"class":38,"line":4217},[36,153867,153463],{"class":4500},[36,153869,153466],{"class":49},[36,153871,153872,153874,153877],{"class":38,"line":4231},[36,153873,33305],{"class":114},[36,153875,153876],{"class":4500}," from_dict",[36,153878,153879],{"class":53},"(cls, data):\n",[36,153881,153882,153884,153886],{"class":38,"line":4236},[36,153883,17273],{"class":114},[36,153885,153483],{"class":49},[36,153887,153888],{"class":53},"(\n",[36,153890,153891,153894,153897],{"class":38,"line":4264},[36,153892,153893],{"class":53},"            data[",[36,153895,153896],{"class":57},"\"student_id\"",[36,153898,90315],{"class":53},[36,153900,153901,153903,153905],{"class":38,"line":4269},[36,153902,153893],{"class":53},[36,153904,65167],{"class":57},[36,153906,90315],{"class":53},[36,153908,153909,153911,153913],{"class":38,"line":4286},[36,153910,153893],{"class":53},[36,153912,71611],{"class":57},[36,153914,90315],{"class":53},[36,153916,153917,153919,153922],{"class":38,"line":4291},[36,153918,153893],{"class":53},[36,153920,153921],{"class":57},"\"score\"",[36,153923,90315],{"class":53},[36,153925,153926],{"class":38,"line":4296},[36,153927,40626],{"class":53},[36,153929,153930],{"class":38,"line":4301},[36,153931,546],{"emptyLinePlaceholder":545},[36,153933,153934,153936,153938],{"class":38,"line":4315},[36,153935,33305],{"class":114},[36,153937,152431],{"class":49},[36,153939,33311],{"class":53},[36,153941,153942,153944,153946,153948,153950,153953,153955,153958,153960,153962,153964,153966,153968,153970,153972,153974],{"class":38,"line":4320},[36,153943,17273],{"class":114},[36,153945,152440],{"class":114},[36,153947,1822],{"class":57},[36,153949,151902],{"class":49},[36,153951,153952],{"class":53},".student_id",[36,153954,2070],{"class":49},[36,153956,153957],{"class":49}," {self",[36,153959,82782],{"class":53},[36,153961,2070],{"class":49},[36,153963,153957],{"class":49},[36,153965,82794],{"class":53},[36,153967,2070],{"class":49},[36,153969,153957],{"class":49},[36,153971,152312],{"class":53},[36,153973,2070],{"class":49},[36,153975,1620],{"class":57},[36,153977,153978],{"class":38,"line":5109},[36,153979,546],{"emptyLinePlaceholder":545},[36,153981,153982],{"class":38,"line":5123},[36,153983,546],{"emptyLinePlaceholder":545},[36,153985,153986,153988,153990,153992,153995,153997,153999,154001,154003,154005,154007],{"class":38,"line":5131},[36,153987,151931],{"class":53},[36,153989,115],{"class":114},[36,153991,152335],{"class":53},[36,153993,153994],{"class":57},"\"001\"",[36,153996,14958],{"class":53},[36,153998,152338],{"class":57},[36,154000,14958],{"class":53},[36,154002,3326],{"class":49},[36,154004,14958],{"class":53},[36,154006,3662],{"class":49},[36,154008,61],{"class":53},[36,154010,154011,154013],{"class":38,"line":5136},[36,154012,50],{"class":49},[36,154014,154015],{"class":53},"(student.is_passed())\n",[36,154017,154018,154020],{"class":38,"line":5142},[36,154019,50],{"class":49},[36,154021,154022],{"class":53},"(student.to_dict())\n",[19,154024,154025,1292,154028,154031],{},[33,154026,154027],{},"to_dict()",[33,154029,154030],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154033,154035],{"id":154034},"_1116-易错点","11.16 易错点",[433,154037,154038,154044,154050,154055,154058,154061],{},[436,154039,154040,154041,1296],{},"类名推荐使用大驼峰，如 ",[33,154042,154043],{},"StudentManager",[436,154045,154046,154047,154049],{},"方法第一个参数必须写 ",[33,154048,33327],{},"，调用时不用传。",[436,154051,154052,154054],{},[33,154053,33333],{}," 不是普通方法，它在创建对象时自动执行。",[436,154056,154057],{},"私有属性不是绝对安全，只是约定和名称改写。",[436,154059,154060],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[436,154062,154063],{},"类中方法太多时，说明职责可能过重。",[14,154065,154067],{"id":154066},"_1117-本章练习","11.17 本章练习",[433,154069,154070,154076,154082,154087,154100],{},[436,154071,154072,154073,154075],{},"定义 ",[33,154074,152018],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[436,154077,154072,154078,154081],{},[33,154079,154080],{},"Account"," 类，实现存款、取款、查询余额。",[436,154083,154072,154084,154086],{},[33,154085,19744],{}," 类，计算圆的周长和面积。",[436,154088,154072,154089,273,154092,154095,154096,154099],{},[33,154090,154091],{},"Dog",[33,154093,154094],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,154097,154098],{},"speak()"," 方法。",[436,154101,600,154102,154104,154105,1296],{},[33,154103,153588],{}," 定义一个商品类 ",[33,154106,154107],{},"Product",[2602,154109,154110],{},"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":31,"searchDepth":46,"depth":46,"links":154112},[154113,154114,154115,154116,154117,154118,154120,154121,154122,154123,154124,154125,154126,154130,154131,154132,154133],{"id":151784,"depth":46,"text":151785},{"id":151965,"depth":46,"text":151966},{"id":152029,"depth":46,"text":152030},{"id":152106,"depth":46,"text":152107},{"id":152205,"depth":46,"text":152206},{"id":152369,"depth":46,"text":154119},"11.6 str",{"id":152495,"depth":46,"text":152496},{"id":152760,"depth":46,"text":152761},{"id":152874,"depth":46,"text":152875},{"id":153029,"depth":46,"text":153030},{"id":153153,"depth":46,"text":153154},{"id":153269,"depth":46,"text":153270},{"id":153418,"depth":46,"text":153419,"children":154127},[154128,154129],{"id":153422,"depth":82,"text":153423},{"id":153504,"depth":82,"text":153505},{"id":153582,"depth":46,"text":153583},{"id":153697,"depth":46,"text":153698},{"id":154034,"depth":46,"text":154035},{"id":154066,"depth":46,"text":154067},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151776,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154140,"title":154141,"body":154142,"description":2630,"extension":2631,"meta":157451,"navigation":545,"path":157452,"seo":157453,"stem":157454,"__hash__":157455},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154143,"toc":157427},[154144,154147,154151,154154,154157,154186,154189,154197,154201,154205,154208,154231,154234,154240,154244,155688,155691,155712,155716,155719,155731,155734,155918,155921,156046,156049,156053,156057,156193,156197,156283,156287,156369,156373,156410,156414,156602,156606,156609,156839,156843,156846,157027,157030,157034,157037,157043,157046,157072,157076,157079,157093,157096,157121,157124,157138,157141,157158,157161,157178,157181,157198,157202,157228,157232,157255,157259,157262,157264,157270,157272,157293,157296,157302,157308,157312,157315,157391,157394,157398,157424],[10,154145,154141],{"id":154146},"_12-综合案例与复习路线",[14,154148,154150],{"id":154149},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,154152,154153],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,154155,154156],{},"一个合格的入门综合项目最好覆盖：",[433,154158,154159,154162,154165,154168,154171,154174,154177,154180,154183],{},[436,154160,154161],{},"输入输出。",[436,154163,154164],{},"判断和循环。",[436,154166,154167],{},"函数拆分。",[436,154169,154170],{},"列表、字典等容器。",[436,154172,154173],{},"文件持久化。",[436,154175,154176],{},"异常处理。",[436,154178,154179],{},"模块拆分。",[436,154181,154182],{},"可选：面向对象。",[436,154184,154185],{},"可选：数据可视化。",[19,154187,154188],{},"本章整理两个方向：",[433,154190,154191,154194],{},[436,154192,154193],{},"学生管理系统。",[436,154195,154196],{},"销售数据统计和可视化。",[14,154198,154200],{"id":154199},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[997,154202,154204],{"id":154203},"_1221-需求","12.2.1 需求",[19,154206,154207],{},"实现一个命令行学生管理系统：",[433,154209,154210,154213,154216,154219,154222,154225,154228],{},[436,154211,154212],{},"添加学生。",[436,154214,154215],{},"删除学生。",[436,154217,154218],{},"修改学生。",[436,154220,154221],{},"查询学生。",[436,154223,154224],{},"显示所有学生。",[436,154226,154227],{},"保存到 JSON 文件。",[436,154229,154230],{},"程序启动时自动读取 JSON 文件。",[19,154232,154233],{},"学生字段：",[26,154235,154238],{"className":154236,"code":154237,"language":690,"meta":31},[688],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,154239,154237],{"__ignoreMap":31},[14,154241,154243],{"id":154242},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,154245,154247],{"className":28,"code":154246,"language":30,"meta":31,"style":31},"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",[33,154248,154249,154255,154265,154269,154283,154287,154291,154300,154312,154318,154322,154328,154359,154369,154376,154387,154393,154397,154401,154411,154442,154468,154472,154476,154485,154496,154507,154518,154529,154540,154551,154562,154566,154570,154580,154592,154608,154615,154622,154626,154630,154640,154648,154655,154668,154678,154689,154693,154697,154706,154714,154720,154732,154740,154751,154755,154759,154768,154784,154788,154795,154806,154811,154815,154830,154844,154859,154863,154868,154876,154884,154892,154900,154904,154909,154920,154924,154928,154937,154952,154962,154966,154978,154989,154993,154997,155002,155006,155017,155021,155025,155034,155049,155057,155061,155073,155083,155087,155091,155106,155119,155132,155136,155149,155161,155173,155177,155181,155192,155196,155200,155209,155224,155232,155236,155248,155258,155262,155266,155271,155275,155279,155289,155295,155317,155336,155355,155374,155379,155383,155387,155396,155404,155415,155419,155423,155449,155459,155464,155468,155472,155480,155490,155494,155502,155507,155523,155527,155541,155546,155560,155565,155578,155583,155596,155601,155614,155619,155632,155643,155647,155653,155664,155668,155672,155684],{"__ignoreMap":31},[36,154250,154251,154253],{"class":38,"line":39},[36,154252,537],{"class":114},[36,154254,149543],{"class":53},[36,154256,154257,154259,154261,154263],{"class":38,"line":46},[36,154258,33241],{"class":114},[36,154260,110781],{"class":53},[36,154262,537],{"class":114},[36,154264,110786],{"class":53},[36,154266,154267],{"class":38,"line":82},[36,154268,546],{"emptyLinePlaceholder":545},[36,154270,154271,154274,154276,154278,154281],{"class":38,"line":88},[36,154272,154273],{"class":49},"DATA_FILE",[36,154275,498],{"class":114},[36,154277,111015],{"class":53},[36,154279,154280],{"class":57},"\"students.json\"",[36,154282,61],{"class":53},[36,154284,154285],{"class":38,"line":195},[36,154286,546],{"emptyLinePlaceholder":545},[36,154288,154289],{"class":38,"line":1517},[36,154290,546],{"emptyLinePlaceholder":545},[36,154292,154293,154295,154298],{"class":38,"line":2421},[36,154294,34450],{"class":114},[36,154296,154297],{"class":4500}," load_students",[36,154299,34456],{"class":53},[36,154301,154302,154304,154306,154309],{"class":38,"line":2446},[36,154303,5632],{"class":114},[36,154305,41430],{"class":114},[36,154307,154308],{"class":49}," DATA_FILE",[36,154310,154311],{"class":53},".exists():\n",[36,154313,154314,154316],{"class":38,"line":2469},[36,154315,17273],{"class":114},[36,154317,54332],{"class":53},[36,154319,154320],{"class":38,"line":2492},[36,154321,546],{"emptyLinePlaceholder":545},[36,154323,154324,154326],{"class":38,"line":4150},[36,154325,128247],{"class":114},[36,154327,6270],{"class":53},[36,154329,154330,154333,154335,154337,154339,154341,154343,154345,154347,154349,154351,154353,154355,154357],{"class":38,"line":4155},[36,154331,154332],{"class":114},"        with",[36,154334,149243],{"class":49},[36,154336,54],{"class":53},[36,154338,154273],{"class":49},[36,154340,14958],{"class":53},[36,154342,149253],{"class":57},[36,154344,14958],{"class":53},[36,154346,149258],{"class":1997},[36,154348,115],{"class":114},[36,154350,149263],{"class":57},[36,154352,16236],{"class":53},[36,154354,33887],{"class":114},[36,154356,150605],{"class":1997},[36,154358,6270],{"class":53},[36,154360,154361,154363,154365,154367],{"class":38,"line":4161},[36,154362,18250],{"class":114},[36,154364,150616],{"class":53},[36,154366,47854],{"class":1997},[36,154368,61],{"class":53},[36,154370,154371,154373],{"class":38,"line":4166},[36,154372,128274],{"class":114},[36,154374,154375],{"class":53}," json.JSONDecodeError:\n",[36,154377,154378,154380,154382,154385],{"class":38,"line":4180},[36,154379,34954],{"class":49},[36,154381,54],{"class":53},[36,154383,154384],{"class":57},"\"数据文件格式错误，已使用空数据启动\"",[36,154386,61],{"class":53},[36,154388,154389,154391],{"class":38,"line":4185},[36,154390,17273],{"class":114},[36,154392,54332],{"class":53},[36,154394,154395],{"class":38,"line":4191},[36,154396,546],{"emptyLinePlaceholder":545},[36,154398,154399],{"class":38,"line":4212},[36,154400,546],{"emptyLinePlaceholder":545},[36,154402,154403,154405,154408],{"class":38,"line":4217},[36,154404,34450],{"class":114},[36,154406,154407],{"class":4500}," save_students",[36,154409,154410],{"class":53},"(students):\n",[36,154412,154413,154415,154417,154419,154421,154423,154426,154428,154430,154432,154434,154436,154438,154440],{"class":38,"line":4231},[36,154414,36678],{"class":114},[36,154416,149243],{"class":49},[36,154418,54],{"class":53},[36,154420,154273],{"class":49},[36,154422,14958],{"class":53},[36,154424,154425],{"class":57},"\"w\"",[36,154427,14958],{"class":53},[36,154429,149258],{"class":1997},[36,154431,115],{"class":114},[36,154433,149263],{"class":57},[36,154435,16236],{"class":53},[36,154437,33887],{"class":114},[36,154439,150605],{"class":1997},[36,154441,6270],{"class":53},[36,154443,154444,154447,154449,154451,154453,154455,154457,154459,154462,154464,154466],{"class":38,"line":4236},[36,154445,154446],{"class":53},"        json.dump(students, ",[36,154448,47854],{"class":1997},[36,154450,14958],{"class":53},[36,154452,149589],{"class":1997},[36,154454,115],{"class":114},[36,154456,276],{"class":49},[36,154458,14958],{"class":53},[36,154460,154461],{"class":1997},"indent",[36,154463,115],{"class":114},[36,154465,1188],{"class":49},[36,154467,61],{"class":53},[36,154469,154470],{"class":38,"line":4264},[36,154471,546],{"emptyLinePlaceholder":545},[36,154473,154474],{"class":38,"line":4269},[36,154475,546],{"emptyLinePlaceholder":545},[36,154477,154478,154480,154483],{"class":38,"line":4286},[36,154479,34450],{"class":114},[36,154481,154482],{"class":4500}," show_menu",[36,154484,34456],{"class":53},[36,154486,154487,154489,154491,154494],{"class":38,"line":4291},[36,154488,33803],{"class":49},[36,154490,54],{"class":53},[36,154492,154493],{"class":57},"\"====== 学生管理系统 ======\"",[36,154495,61],{"class":53},[36,154497,154498,154500,154502,154505],{"class":38,"line":4296},[36,154499,33803],{"class":49},[36,154501,54],{"class":53},[36,154503,154504],{"class":57},"\"1. 添加学生\"",[36,154506,61],{"class":53},[36,154508,154509,154511,154513,154516],{"class":38,"line":4301},[36,154510,33803],{"class":49},[36,154512,54],{"class":53},[36,154514,154515],{"class":57},"\"2. 删除学生\"",[36,154517,61],{"class":53},[36,154519,154520,154522,154524,154527],{"class":38,"line":4315},[36,154521,33803],{"class":49},[36,154523,54],{"class":53},[36,154525,154526],{"class":57},"\"3. 修改学生\"",[36,154528,61],{"class":53},[36,154530,154531,154533,154535,154538],{"class":38,"line":4320},[36,154532,33803],{"class":49},[36,154534,54],{"class":53},[36,154536,154537],{"class":57},"\"4. 查询学生\"",[36,154539,61],{"class":53},[36,154541,154542,154544,154546,154549],{"class":38,"line":5109},[36,154543,33803],{"class":49},[36,154545,54],{"class":53},[36,154547,154548],{"class":57},"\"5. 显示所有学生\"",[36,154550,61],{"class":53},[36,154552,154553,154555,154557,154560],{"class":38,"line":5123},[36,154554,33803],{"class":49},[36,154556,54],{"class":53},[36,154558,154559],{"class":57},"\"0. 退出系统\"",[36,154561,61],{"class":53},[36,154563,154564],{"class":38,"line":5131},[36,154565,546],{"emptyLinePlaceholder":545},[36,154567,154568],{"class":38,"line":5136},[36,154569,546],{"emptyLinePlaceholder":545},[36,154571,154572,154574,154577],{"class":38,"line":5142},[36,154573,34450],{"class":114},[36,154575,154576],{"class":4500}," find_student",[36,154578,154579],{"class":53},"(students, student_id):\n",[36,154581,154582,154584,154587,154589],{"class":38,"line":5148},[36,154583,5732],{"class":114},[36,154585,154586],{"class":53}," student ",[36,154588,28556],{"class":114},[36,154590,154591],{"class":53}," students:\n",[36,154593,154594,154596,154599,154601,154603,154605],{"class":38,"line":5153},[36,154595,5029],{"class":114},[36,154597,154598],{"class":53}," student[",[36,154600,153896],{"class":57},[36,154602,6974],{"class":53},[36,154604,1377],{"class":114},[36,154606,154607],{"class":53}," student_id:\n",[36,154609,154610,154612],{"class":38,"line":10475},[36,154611,18250],{"class":114},[36,154613,154614],{"class":53}," student\n",[36,154616,154617,154619],{"class":38,"line":10499},[36,154618,6621],{"class":114},[36,154620,154621],{"class":49}," None\n",[36,154623,154624],{"class":38,"line":10504},[36,154625,546],{"emptyLinePlaceholder":545},[36,154627,154628],{"class":38,"line":10510},[36,154629,546],{"emptyLinePlaceholder":545},[36,154631,154632,154634,154637],{"class":38,"line":10537},[36,154633,34450],{"class":114},[36,154635,154636],{"class":4500}," input_int",[36,154638,154639],{"class":53},"(prompt):\n",[36,154641,154642,154644,154646],{"class":38,"line":10542},[36,154643,4785],{"class":114},[36,154645,97770],{"class":49},[36,154647,6270],{"class":53},[36,154649,154650,154653],{"class":38,"line":10548},[36,154651,154652],{"class":114},"        try",[36,154654,6270],{"class":53},[36,154656,154657,154659,154661,154663,154665],{"class":38,"line":10560},[36,154658,18250],{"class":114},[36,154660,837],{"class":49},[36,154662,54],{"class":53},[36,154664,913],{"class":49},[36,154666,154667],{"class":53},"(prompt))\n",[36,154669,154670,154673,154676],{"class":38,"line":10572},[36,154671,154672],{"class":114},"        except",[36,154674,154675],{"class":49}," ValueError",[36,154677,6270],{"class":53},[36,154679,154680,154682,154684,154687],{"class":38,"line":10584},[36,154681,37150],{"class":49},[36,154683,54],{"class":53},[36,154685,154686],{"class":57},"\"请输入整数\"",[36,154688,61],{"class":53},[36,154690,154691],{"class":38,"line":12241},[36,154692,546],{"emptyLinePlaceholder":545},[36,154694,154695],{"class":38,"line":12266},[36,154696,546],{"emptyLinePlaceholder":545},[36,154698,154699,154701,154704],{"class":38,"line":12289},[36,154700,34450],{"class":114},[36,154702,154703],{"class":4500}," input_float",[36,154705,154639],{"class":53},[36,154707,154708,154710,154712],{"class":38,"line":12313},[36,154709,4785],{"class":114},[36,154711,97770],{"class":49},[36,154713,6270],{"class":53},[36,154715,154716,154718],{"class":38,"line":12318},[36,154717,154652],{"class":114},[36,154719,6270],{"class":53},[36,154721,154722,154724,154726,154728,154730],{"class":38,"line":12323},[36,154723,18250],{"class":114},[36,154725,985],{"class":49},[36,154727,54],{"class":53},[36,154729,913],{"class":49},[36,154731,154667],{"class":53},[36,154733,154734,154736,154738],{"class":38,"line":12328},[36,154735,154672],{"class":114},[36,154737,154675],{"class":49},[36,154739,6270],{"class":53},[36,154741,154742,154744,154746,154749],{"class":38,"line":12337},[36,154743,37150],{"class":49},[36,154745,54],{"class":53},[36,154747,154748],{"class":57},"\"请输入数字\"",[36,154750,61],{"class":53},[36,154752,154753],{"class":38,"line":12342},[36,154754,546],{"emptyLinePlaceholder":545},[36,154756,154757],{"class":38,"line":12348},[36,154758,546],{"emptyLinePlaceholder":545},[36,154760,154761,154763,154766],{"class":38,"line":12369},[36,154762,34450],{"class":114},[36,154764,154765],{"class":4500}," add_student",[36,154767,154410],{"class":53},[36,154769,154770,154773,154775,154777,154779,154782],{"class":38,"line":12375},[36,154771,154772],{"class":53},"    student_id ",[36,154774,115],{"class":114},[36,154776,871],{"class":49},[36,154778,54],{"class":53},[36,154780,154781],{"class":57},"\"请输入学号:\"",[36,154783,61],{"class":53},[36,154785,154786],{"class":38,"line":12389},[36,154787,546],{"emptyLinePlaceholder":545},[36,154789,154790,154792],{"class":38,"line":12395},[36,154791,5632],{"class":114},[36,154793,154794],{"class":53}," find_student(students, student_id):\n",[36,154796,154797,154799,154801,154804],{"class":38,"line":12422},[36,154798,34954],{"class":49},[36,154800,54],{"class":53},[36,154802,154803],{"class":57},"\"学号已存在\"",[36,154805,61],{"class":53},[36,154807,154808],{"class":38,"line":12431},[36,154809,154810],{"class":114},"        return\n",[36,154812,154813],{"class":38,"line":12437},[36,154814,546],{"emptyLinePlaceholder":545},[36,154816,154817,154820,154822,154824,154826,154828],{"class":38,"line":12445},[36,154818,154819],{"class":53},"    name ",[36,154821,115],{"class":114},[36,154823,871],{"class":49},[36,154825,54],{"class":53},[36,154827,2175],{"class":57},[36,154829,61],{"class":53},[36,154831,154832,154835,154837,154840,154842],{"class":38,"line":12450},[36,154833,154834],{"class":53},"    age ",[36,154836,115],{"class":114},[36,154838,154839],{"class":53}," input_int(",[36,154841,2223],{"class":57},[36,154843,61],{"class":53},[36,154845,154846,154849,154851,154854,154857],{"class":38,"line":19122},[36,154847,154848],{"class":53},"    score ",[36,154850,115],{"class":114},[36,154852,154853],{"class":53}," input_float(",[36,154855,154856],{"class":57},"\"请输入成绩:\"",[36,154858,61],{"class":53},[36,154860,154861],{"class":38,"line":19128},[36,154862,546],{"emptyLinePlaceholder":545},[36,154864,154865],{"class":38,"line":19151},[36,154866,154867],{"class":53},"    students.append({\n",[36,154869,154870,154873],{"class":38,"line":19157},[36,154871,154872],{"class":57},"        \"student_id\"",[36,154874,154875],{"class":53},": student_id,\n",[36,154877,154878,154881],{"class":38,"line":19180},[36,154879,154880],{"class":57},"        \"name\"",[36,154882,154883],{"class":53},": name,\n",[36,154885,154886,154889],{"class":38,"line":19194},[36,154887,154888],{"class":57},"        \"age\"",[36,154890,154891],{"class":53},": age,\n",[36,154893,154894,154897],{"class":38,"line":19214},[36,154895,154896],{"class":57},"        \"score\"",[36,154898,154899],{"class":53},": score,\n",[36,154901,154902],{"class":38,"line":19220},[36,154903,35962],{"class":53},[36,154905,154906],{"class":38,"line":19231},[36,154907,154908],{"class":53},"    save_students(students)\n",[36,154910,154911,154913,154915,154918],{"class":38,"line":19254},[36,154912,33803],{"class":49},[36,154914,54],{"class":53},[36,154916,154917],{"class":57},"\"添加成功\"",[36,154919,61],{"class":53},[36,154921,154922],{"class":38,"line":19276},[36,154923,546],{"emptyLinePlaceholder":545},[36,154925,154926],{"class":38,"line":19281},[36,154927,546],{"emptyLinePlaceholder":545},[36,154929,154930,154932,154935],{"class":38,"line":19287},[36,154931,34450],{"class":114},[36,154933,154934],{"class":4500}," delete_student",[36,154936,154410],{"class":53},[36,154938,154939,154941,154943,154945,154947,154950],{"class":38,"line":19301},[36,154940,154772],{"class":53},[36,154942,115],{"class":114},[36,154944,871],{"class":49},[36,154946,54],{"class":53},[36,154948,154949],{"class":57},"\"请输入要删除的学号:\"",[36,154951,61],{"class":53},[36,154953,154954,154957,154959],{"class":38,"line":19314},[36,154955,154956],{"class":53},"    student ",[36,154958,115],{"class":114},[36,154960,154961],{"class":53}," find_student(students, student_id)\n",[36,154963,154964],{"class":38,"line":19319},[36,154965,546],{"emptyLinePlaceholder":545},[36,154967,154968,154970,154972,154974,154976],{"class":38,"line":19333},[36,154969,5632],{"class":114},[36,154971,154586],{"class":53},[36,154973,41427],{"class":114},[36,154975,41433],{"class":49},[36,154977,6270],{"class":53},[36,154979,154980,154982,154984,154987],{"class":38,"line":19338},[36,154981,34954],{"class":49},[36,154983,54],{"class":53},[36,154985,154986],{"class":57},"\"学生不存在\"",[36,154988,61],{"class":53},[36,154990,154991],{"class":38,"line":19344},[36,154992,154810],{"class":114},[36,154994,154995],{"class":38,"line":19349},[36,154996,546],{"emptyLinePlaceholder":545},[36,154998,154999],{"class":38,"line":19363},[36,155000,155001],{"class":53},"    students.remove(student)\n",[36,155003,155004],{"class":38,"line":19368},[36,155005,154908],{"class":53},[36,155007,155008,155010,155012,155015],{"class":38,"line":19373},[36,155009,33803],{"class":49},[36,155011,54],{"class":53},[36,155013,155014],{"class":57},"\"删除成功\"",[36,155016,61],{"class":53},[36,155018,155019],{"class":38,"line":19387},[36,155020,546],{"emptyLinePlaceholder":545},[36,155022,155023],{"class":38,"line":19399},[36,155024,546],{"emptyLinePlaceholder":545},[36,155026,155027,155029,155032],{"class":38,"line":19404},[36,155028,34450],{"class":114},[36,155030,155031],{"class":4500}," update_student",[36,155033,154410],{"class":53},[36,155035,155036,155038,155040,155042,155044,155047],{"class":38,"line":19417},[36,155037,154772],{"class":53},[36,155039,115],{"class":114},[36,155041,871],{"class":49},[36,155043,54],{"class":53},[36,155045,155046],{"class":57},"\"请输入要修改的学号:\"",[36,155048,61],{"class":53},[36,155050,155051,155053,155055],{"class":38,"line":19422},[36,155052,154956],{"class":53},[36,155054,115],{"class":114},[36,155056,154961],{"class":53},[36,155058,155059],{"class":38,"line":19427},[36,155060,546],{"emptyLinePlaceholder":545},[36,155062,155063,155065,155067,155069,155071],{"class":38,"line":19432},[36,155064,5632],{"class":114},[36,155066,154586],{"class":53},[36,155068,41427],{"class":114},[36,155070,41433],{"class":49},[36,155072,6270],{"class":53},[36,155074,155075,155077,155079,155081],{"class":38,"line":19445},[36,155076,34954],{"class":49},[36,155078,54],{"class":53},[36,155080,154986],{"class":57},[36,155082,61],{"class":53},[36,155084,155085],{"class":38,"line":19450},[36,155086,154810],{"class":114},[36,155088,155089],{"class":38,"line":35135},[36,155090,546],{"emptyLinePlaceholder":545},[36,155092,155093,155095,155097,155099,155101,155104],{"class":38,"line":35141},[36,155094,154819],{"class":53},[36,155096,115],{"class":114},[36,155098,871],{"class":49},[36,155100,54],{"class":53},[36,155102,155103],{"class":57},"\"请输入新姓名:\"",[36,155105,61],{"class":53},[36,155107,155108,155110,155112,155114,155117],{"class":38,"line":35147},[36,155109,154834],{"class":53},[36,155111,115],{"class":114},[36,155113,154839],{"class":53},[36,155115,155116],{"class":57},"\"请输入新年龄:\"",[36,155118,61],{"class":53},[36,155120,155121,155123,155125,155127,155130],{"class":38,"line":35153},[36,155122,154848],{"class":53},[36,155124,115],{"class":114},[36,155126,154853],{"class":53},[36,155128,155129],{"class":57},"\"请输入新成绩:\"",[36,155131,61],{"class":53},[36,155133,155134],{"class":38,"line":35159},[36,155135,546],{"emptyLinePlaceholder":545},[36,155137,155138,155141,155143,155145,155147],{"class":38,"line":35170},[36,155139,155140],{"class":53},"    student[",[36,155142,65167],{"class":57},[36,155144,6974],{"class":53},[36,155146,115],{"class":114},[36,155148,152245],{"class":53},[36,155150,155151,155153,155155,155157,155159],{"class":38,"line":35176},[36,155152,155140],{"class":53},[36,155154,71611],{"class":57},[36,155156,6974],{"class":53},[36,155158,115],{"class":114},[36,155160,152257],{"class":53},[36,155162,155163,155165,155167,155169,155171],{"class":38,"line":35196},[36,155164,155140],{"class":53},[36,155166,153921],{"class":57},[36,155168,6974],{"class":53},[36,155170,115],{"class":114},[36,155172,4117],{"class":53},[36,155174,155175],{"class":38,"line":35202},[36,155176,546],{"emptyLinePlaceholder":545},[36,155178,155179],{"class":38,"line":35213},[36,155180,154908],{"class":53},[36,155182,155183,155185,155187,155190],{"class":38,"line":35219},[36,155184,33803],{"class":49},[36,155186,54],{"class":53},[36,155188,155189],{"class":57},"\"修改成功\"",[36,155191,61],{"class":53},[36,155193,155194],{"class":38,"line":35225},[36,155195,546],{"emptyLinePlaceholder":545},[36,155197,155198],{"class":38,"line":35231},[36,155199,546],{"emptyLinePlaceholder":545},[36,155201,155202,155204,155207],{"class":38,"line":35237},[36,155203,34450],{"class":114},[36,155205,155206],{"class":4500}," query_student",[36,155208,154410],{"class":53},[36,155210,155211,155213,155215,155217,155219,155222],{"class":38,"line":35243},[36,155212,154772],{"class":53},[36,155214,115],{"class":114},[36,155216,871],{"class":49},[36,155218,54],{"class":53},[36,155220,155221],{"class":57},"\"请输入要查询的学号:\"",[36,155223,61],{"class":53},[36,155225,155226,155228,155230],{"class":38,"line":35249},[36,155227,154956],{"class":53},[36,155229,115],{"class":114},[36,155231,154961],{"class":53},[36,155233,155234],{"class":38,"line":35255},[36,155235,546],{"emptyLinePlaceholder":545},[36,155237,155238,155240,155242,155244,155246],{"class":38,"line":35275},[36,155239,5632],{"class":114},[36,155241,154586],{"class":53},[36,155243,41427],{"class":114},[36,155245,41433],{"class":49},[36,155247,6270],{"class":53},[36,155249,155250,155252,155254,155256],{"class":38,"line":35281},[36,155251,34954],{"class":49},[36,155253,54],{"class":53},[36,155255,154986],{"class":57},[36,155257,61],{"class":53},[36,155259,155260],{"class":38,"line":35297},[36,155261,154810],{"class":114},[36,155263,155264],{"class":38,"line":35303},[36,155265,546],{"emptyLinePlaceholder":545},[36,155267,155268],{"class":38,"line":35317},[36,155269,155270],{"class":53},"    print_student(student)\n",[36,155272,155273],{"class":38,"line":35323},[36,155274,546],{"emptyLinePlaceholder":545},[36,155276,155277],{"class":38,"line":35338},[36,155278,546],{"emptyLinePlaceholder":545},[36,155280,155281,155283,155286],{"class":38,"line":35344},[36,155282,34450],{"class":114},[36,155284,155285],{"class":4500}," print_student",[36,155287,155288],{"class":53},"(student):\n",[36,155290,155291,155293],{"class":38,"line":35353},[36,155292,33803],{"class":49},[36,155294,153888],{"class":53},[36,155296,155297,155300,155302,155304,155307,155310,155312,155315],{"class":38,"line":35359},[36,155298,155299],{"class":114},"        f",[36,155301,1822],{"class":57},[36,155303,2065],{"class":49},[36,155305,155306],{"class":53},"student[",[36,155308,155309],{"class":57},"'student_id'",[36,155311,3614],{"class":53},[36,155313,155314],{"class":49},"}\\t",[36,155316,1620],{"class":57},[36,155318,155319,155321,155323,155325,155327,155330,155332,155334],{"class":38,"line":35368},[36,155320,155299],{"class":114},[36,155322,1822],{"class":57},[36,155324,2065],{"class":49},[36,155326,155306],{"class":53},[36,155328,155329],{"class":57},"'name'",[36,155331,3614],{"class":53},[36,155333,155314],{"class":49},[36,155335,1620],{"class":57},[36,155337,155338,155340,155342,155344,155346,155349,155351,155353],{"class":38,"line":35374},[36,155339,155299],{"class":114},[36,155341,1822],{"class":57},[36,155343,2065],{"class":49},[36,155345,155306],{"class":53},[36,155347,155348],{"class":57},"'age'",[36,155350,3614],{"class":53},[36,155352,155314],{"class":49},[36,155354,1620],{"class":57},[36,155356,155357,155359,155361,155363,155365,155368,155370,155372],{"class":38,"line":35380},[36,155358,155299],{"class":114},[36,155360,1822],{"class":57},[36,155362,2065],{"class":49},[36,155364,155306],{"class":53},[36,155366,155367],{"class":57},"'score'",[36,155369,3614],{"class":53},[36,155371,2070],{"class":49},[36,155373,1620],{"class":57},[36,155375,155376],{"class":38,"line":35389},[36,155377,155378],{"class":53},"    )\n",[36,155380,155381],{"class":38,"line":35395},[36,155382,546],{"emptyLinePlaceholder":545},[36,155384,155385],{"class":38,"line":35406},[36,155386,546],{"emptyLinePlaceholder":545},[36,155388,155389,155391,155394],{"class":38,"line":35412},[36,155390,34450],{"class":114},[36,155392,155393],{"class":4500}," show_all_students",[36,155395,154410],{"class":53},[36,155397,155398,155400,155402],{"class":38,"line":35431},[36,155399,5632],{"class":114},[36,155401,41430],{"class":114},[36,155403,154591],{"class":53},[36,155405,155406,155408,155410,155413],{"class":38,"line":35437},[36,155407,34954],{"class":49},[36,155409,54],{"class":53},[36,155411,155412],{"class":57},"\"暂无学生\"",[36,155414,61],{"class":53},[36,155416,155417],{"class":38,"line":35448},[36,155418,154810],{"class":114},[36,155420,155421],{"class":38,"line":35454},[36,155422,546],{"emptyLinePlaceholder":545},[36,155424,155425,155427,155429,155432,155434,155437,155439,155442,155444,155447],{"class":38,"line":35474},[36,155426,33803],{"class":49},[36,155428,54],{"class":53},[36,155430,155431],{"class":57},"\"学号",[36,155433,1654],{"class":49},[36,155435,155436],{"class":57},"姓名",[36,155438,1654],{"class":49},[36,155440,155441],{"class":57},"年龄",[36,155443,1654],{"class":49},[36,155445,155446],{"class":57},"成绩\"",[36,155448,61],{"class":53},[36,155450,155451,155453,155455,155457],{"class":38,"line":35490},[36,155452,5732],{"class":114},[36,155454,154586],{"class":53},[36,155456,28556],{"class":114},[36,155458,154591],{"class":53},[36,155460,155461],{"class":38,"line":35496},[36,155462,155463],{"class":53},"        print_student(student)\n",[36,155465,155466],{"class":38,"line":35510},[36,155467,546],{"emptyLinePlaceholder":545},[36,155469,155470],{"class":38,"line":35516},[36,155471,546],{"emptyLinePlaceholder":545},[36,155473,155474,155476,155478],{"class":38,"line":35522},[36,155475,34450],{"class":114},[36,155477,4510],{"class":4500},[36,155479,34456],{"class":53},[36,155481,155482,155485,155487],{"class":38,"line":35533},[36,155483,155484],{"class":53},"    students ",[36,155486,115],{"class":114},[36,155488,155489],{"class":53}," load_students()\n",[36,155491,155492],{"class":38,"line":35539},[36,155493,546],{"emptyLinePlaceholder":545},[36,155495,155496,155498,155500],{"class":38,"line":35545},[36,155497,4785],{"class":114},[36,155499,97770],{"class":49},[36,155501,6270],{"class":53},[36,155503,155504],{"class":38,"line":35555},[36,155505,155506],{"class":53},"        show_menu()\n",[36,155508,155509,155512,155514,155516,155518,155521],{"class":38,"line":35561},[36,155510,155511],{"class":53},"        choice ",[36,155513,115],{"class":114},[36,155515,871],{"class":49},[36,155517,54],{"class":53},[36,155519,155520],{"class":57},"\"请输入操作:\"",[36,155522,61],{"class":53},[36,155524,155525],{"class":38,"line":35572},[36,155526,546],{"emptyLinePlaceholder":545},[36,155528,155529,155531,155534,155536,155539],{"class":38,"line":35578},[36,155530,5029],{"class":114},[36,155532,155533],{"class":53}," choice ",[36,155535,1377],{"class":114},[36,155537,155538],{"class":57}," \"1\"",[36,155540,6270],{"class":53},[36,155542,155543],{"class":38,"line":35588},[36,155544,155545],{"class":53},"            add_student(students)\n",[36,155547,155548,155551,155553,155555,155558],{"class":38,"line":35593},[36,155549,155550],{"class":114},"        elif",[36,155552,155533],{"class":53},[36,155554,1377],{"class":114},[36,155556,155557],{"class":57}," \"2\"",[36,155559,6270],{"class":53},[36,155561,155562],{"class":38,"line":35599},[36,155563,155564],{"class":53},"            delete_student(students)\n",[36,155566,155567,155569,155571,155573,155576],{"class":38,"line":35648},[36,155568,155550],{"class":114},[36,155570,155533],{"class":53},[36,155572,1377],{"class":114},[36,155574,155575],{"class":57}," \"3\"",[36,155577,6270],{"class":53},[36,155579,155580],{"class":38,"line":35695},[36,155581,155582],{"class":53},"            update_student(students)\n",[36,155584,155585,155587,155589,155591,155594],{"class":38,"line":35700},[36,155586,155550],{"class":114},[36,155588,155533],{"class":53},[36,155590,1377],{"class":114},[36,155592,155593],{"class":57}," \"4\"",[36,155595,6270],{"class":53},[36,155597,155598],{"class":38,"line":35706},[36,155599,155600],{"class":53},"            query_student(students)\n",[36,155602,155603,155605,155607,155609,155612],{"class":38,"line":35725},[36,155604,155550],{"class":114},[36,155606,155533],{"class":53},[36,155608,1377],{"class":114},[36,155610,155611],{"class":57}," \"5\"",[36,155613,6270],{"class":53},[36,155615,155616],{"class":38,"line":35731},[36,155617,155618],{"class":53},"            show_all_students(students)\n",[36,155620,155621,155623,155625,155627,155630],{"class":38,"line":35751},[36,155622,155550],{"class":114},[36,155624,155533],{"class":53},[36,155626,1377],{"class":114},[36,155628,155629],{"class":57}," \"0\"",[36,155631,6270],{"class":53},[36,155633,155634,155636,155638,155641],{"class":38,"line":35757},[36,155635,37150],{"class":49},[36,155637,54],{"class":53},[36,155639,155640],{"class":57},"\"退出系统\"",[36,155642,61],{"class":53},[36,155644,155645],{"class":38,"line":35763},[36,155646,117564],{"class":114},[36,155648,155649,155651],{"class":38,"line":35773},[36,155650,5066],{"class":114},[36,155652,6270],{"class":53},[36,155654,155655,155657,155659,155662],{"class":38,"line":35778},[36,155656,37150],{"class":49},[36,155658,54],{"class":53},[36,155660,155661],{"class":57},"\"输入错误\"",[36,155663,61],{"class":53},[36,155665,155666],{"class":38,"line":35784},[36,155667,546],{"emptyLinePlaceholder":545},[36,155669,155670],{"class":38,"line":35800},[36,155671,546],{"emptyLinePlaceholder":545},[36,155673,155674,155676,155678,155680,155682],{"class":38,"line":35844},[36,155675,4069],{"class":114},[36,155677,33724],{"class":49},[36,155679,1351],{"class":114},[36,155681,104035],{"class":57},[36,155683,6270],{"class":53},[36,155685,155686],{"class":38,"line":35850},[36,155687,104042],{"class":53},[19,155689,155690],{},"这个项目串联了：",[433,155692,155693,155696,155699,155702,155705,155707],{},[436,155694,155695],{},"菜单循环。",[436,155697,155698],{},"函数封装。",[436,155700,155701],{},"列表字典。",[436,155703,155704],{},"JSON 读写。",[436,155706,154176],{},[436,155708,155709,1296],{},[33,155710,155711],{},"if __name__ == \"__main__\"",[14,155713,155715],{"id":155714},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155717,155718],{},"可以进一步拆成两个类：",[433,155720,155721,155726],{},[436,155722,155723,155725],{},[33,155724,152018],{},"：表示单个学生。",[436,155727,155728,155730],{},[33,155729,154043],{},"：负责学生增删改查和文件保存。",[19,155732,155733],{},"示意代码：",[26,155735,155737],{"className":28,"code":155736,"language":30,"meta":31,"style":31},"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",[33,155738,155739,155749,155753,155757,155761,155769,155776,155782,155788,155794,155798,155806,155812,155822,155832,155842,155852,155856,155860,155866,155874,155882,155890,155898,155906,155914],{"__ignoreMap":31},[36,155740,155741,155743,155745,155747],{"class":38,"line":39},[36,155742,33241],{"class":114},[36,155744,153601],{"class":53},[36,155746,537],{"class":114},[36,155748,153606],{"class":53},[36,155750,155751],{"class":38,"line":46},[36,155752,546],{"emptyLinePlaceholder":545},[36,155754,155755],{"class":38,"line":82},[36,155756,546],{"emptyLinePlaceholder":545},[36,155758,155759],{"class":38,"line":88},[36,155760,153619],{"class":4500},[36,155762,155763,155765,155767],{"class":38,"line":195},[36,155764,519],{"class":114},[36,155766,10425],{"class":4500},[36,155768,6270],{"class":53},[36,155770,155771,155774],{"class":38,"line":1517},[36,155772,155773],{"class":53},"    student_id: ",[36,155775,153635],{"class":49},[36,155777,155778,155780],{"class":38,"line":2421},[36,155779,153632],{"class":53},[36,155781,153635],{"class":49},[36,155783,155784,155786],{"class":38,"line":2446},[36,155785,153640],{"class":53},[36,155787,153643],{"class":49},[36,155789,155790,155792],{"class":38,"line":2469},[36,155791,153648],{"class":53},[36,155793,153651],{"class":49},[36,155795,155796],{"class":38,"line":2492},[36,155797,546],{"emptyLinePlaceholder":545},[36,155799,155800,155802,155804],{"class":38,"line":4150},[36,155801,33305],{"class":114},[36,155803,153799],{"class":4500},[36,155805,33311],{"class":53},[36,155807,155808,155810],{"class":38,"line":4155},[36,155809,17273],{"class":114},[36,155811,18091],{"class":53},[36,155813,155814,155816,155818,155820],{"class":38,"line":4161},[36,155815,153812],{"class":57},[36,155817,53931],{"class":53},[36,155819,33327],{"class":49},[36,155821,153819],{"class":53},[36,155823,155824,155826,155828,155830],{"class":38,"line":4166},[36,155825,153824],{"class":57},[36,155827,53931],{"class":53},[36,155829,33327],{"class":49},[36,155831,153831],{"class":53},[36,155833,155834,155836,155838,155840],{"class":38,"line":4180},[36,155835,153836],{"class":57},[36,155837,53931],{"class":53},[36,155839,33327],{"class":49},[36,155841,153843],{"class":53},[36,155843,155844,155846,155848,155850],{"class":38,"line":4185},[36,155845,153848],{"class":57},[36,155847,53931],{"class":53},[36,155849,33327],{"class":49},[36,155851,153855],{"class":53},[36,155853,155854],{"class":38,"line":4191},[36,155855,5061],{"class":53},[36,155857,155858],{"class":38,"line":4212},[36,155859,546],{"emptyLinePlaceholder":545},[36,155861,155862,155864],{"class":38,"line":4217},[36,155863,153463],{"class":4500},[36,155865,153466],{"class":49},[36,155867,155868,155870,155872],{"class":38,"line":4231},[36,155869,33305],{"class":114},[36,155871,153876],{"class":4500},[36,155873,153879],{"class":53},[36,155875,155876,155878,155880],{"class":38,"line":4236},[36,155877,17273],{"class":114},[36,155879,153483],{"class":49},[36,155881,153888],{"class":53},[36,155883,155884,155886,155888],{"class":38,"line":4264},[36,155885,153893],{"class":53},[36,155887,153896],{"class":57},[36,155889,90315],{"class":53},[36,155891,155892,155894,155896],{"class":38,"line":4269},[36,155893,153893],{"class":53},[36,155895,65167],{"class":57},[36,155897,90315],{"class":53},[36,155899,155900,155902,155904],{"class":38,"line":4286},[36,155901,153893],{"class":53},[36,155903,71611],{"class":57},[36,155905,90315],{"class":53},[36,155907,155908,155910,155912],{"class":38,"line":4291},[36,155909,153893],{"class":53},[36,155911,153921],{"class":57},[36,155913,90315],{"class":53},[36,155915,155916],{"class":38,"line":4296},[36,155917,40626],{"class":53},[19,155919,155920],{},"管理器示意：",[26,155922,155924],{"className":28,"code":155923,"language":30,"meta":31,"style":31},"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",[33,155925,155926,155935,155943,155954,155958,155968,155981,155992,155999,156005,156009,156018,156027,156033,156040],{"__ignoreMap":31},[36,155927,155928,155930,155933],{"class":38,"line":39},[36,155929,519],{"class":114},[36,155931,155932],{"class":4500}," StudentManager",[36,155934,6270],{"class":53},[36,155936,155937,155939,155941],{"class":38,"line":46},[36,155938,33305],{"class":114},[36,155940,33308],{"class":49},[36,155942,33311],{"class":53},[36,155944,155945,155947,155950,155952],{"class":38,"line":82},[36,155946,33349],{"class":49},[36,155948,155949],{"class":53},".students ",[36,155951,115],{"class":114},[36,155953,54332],{"class":53},[36,155955,155956],{"class":38,"line":88},[36,155957,546],{"emptyLinePlaceholder":545},[36,155959,155960,155962,155965],{"class":38,"line":195},[36,155961,33305],{"class":114},[36,155963,155964],{"class":4500}," find_by_id",[36,155966,155967],{"class":53},"(self, student_id):\n",[36,155969,155970,155972,155974,155976,155978],{"class":38,"line":1517},[36,155971,5934],{"class":114},[36,155973,154586],{"class":53},[36,155975,28556],{"class":114},[36,155977,41373],{"class":49},[36,155979,155980],{"class":53},".students:\n",[36,155982,155983,155985,155988,155990],{"class":38,"line":2421},[36,155984,7173],{"class":114},[36,155986,155987],{"class":53}," student.student_id ",[36,155989,1377],{"class":114},[36,155991,154607],{"class":53},[36,155993,155994,155997],{"class":38,"line":2446},[36,155995,155996],{"class":114},"                return",[36,155998,154614],{"class":53},[36,156000,156001,156003],{"class":38,"line":2469},[36,156002,17273],{"class":114},[36,156004,154621],{"class":49},[36,156006,156007],{"class":38,"line":2492},[36,156008,546],{"emptyLinePlaceholder":545},[36,156010,156011,156013,156015],{"class":38,"line":4150},[36,156012,33305],{"class":114},[36,156014,7738],{"class":4500},[36,156016,156017],{"class":53},"(self, student):\n",[36,156019,156020,156022,156024],{"class":38,"line":4155},[36,156021,5029],{"class":114},[36,156023,41373],{"class":49},[36,156025,156026],{"class":53},".find_by_id(student.student_id):\n",[36,156028,156029,156031],{"class":38,"line":4161},[36,156030,18250],{"class":114},[36,156032,590],{"class":49},[36,156034,156035,156037],{"class":38,"line":4166},[36,156036,33349],{"class":49},[36,156038,156039],{"class":53},".students.append(student)\n",[36,156041,156042,156044],{"class":38,"line":4180},[36,156043,17273],{"class":114},[36,156045,394],{"class":49},[19,156047,156048],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,156050,156052],{"id":156051},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[997,156054,156056],{"id":156055},"_1251-数据结构","12.5.1 数据结构",[26,156058,156060],{"className":28,"code":156059,"language":30,"meta":31,"style":31},"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",[33,156061,156062,156070,156101,156131,156160,156189],{"__ignoreMap":31},[36,156063,156064,156066,156068],{"class":38,"line":39},[36,156065,150917],{"class":53},[36,156067,115],{"class":114},[36,156069,57938],{"class":53},[36,156071,156072,156074,156076,156078,156080,156082,156085,156087,156090,156092,156094,156096,156099],{"class":38,"line":46},[36,156073,150837],{"class":53},[36,156075,150449],{"class":57},[36,156077,53931],{"class":53},[36,156079,151060],{"class":57},[36,156081,14958],{"class":53},[36,156083,156084],{"class":57},"\"category\"",[36,156086,53931],{"class":53},[36,156088,156089],{"class":57},"\"手机\"",[36,156091,14958],{"class":53},[36,156093,86565],{"class":57},[36,156095,53931],{"class":53},[36,156097,156098],{"class":49},"12000",[36,156100,7461],{"class":53},[36,156102,156103,156105,156107,156109,156111,156113,156115,156117,156120,156122,156124,156126,156129],{"class":38,"line":82},[36,156104,150837],{"class":53},[36,156106,150449],{"class":57},[36,156108,53931],{"class":53},[36,156110,151060],{"class":57},[36,156112,14958],{"class":53},[36,156114,156084],{"class":57},[36,156116,53931],{"class":53},[36,156118,156119],{"class":57},"\"电脑\"",[36,156121,14958],{"class":53},[36,156123,86565],{"class":57},[36,156125,53931],{"class":53},[36,156127,156128],{"class":49},"18000",[36,156130,7461],{"class":53},[36,156132,156133,156135,156137,156139,156141,156143,156145,156147,156149,156151,156153,156155,156158],{"class":38,"line":88},[36,156134,150837],{"class":53},[36,156136,150449],{"class":57},[36,156138,53931],{"class":53},[36,156140,151081],{"class":57},[36,156142,14958],{"class":53},[36,156144,156084],{"class":57},[36,156146,53931],{"class":53},[36,156148,156089],{"class":57},[36,156150,14958],{"class":53},[36,156152,86565],{"class":57},[36,156154,53931],{"class":53},[36,156156,156157],{"class":49},"15000",[36,156159,7461],{"class":53},[36,156161,156162,156164,156166,156168,156170,156172,156174,156176,156178,156180,156182,156184,156187],{"class":38,"line":195},[36,156163,150837],{"class":53},[36,156165,150449],{"class":57},[36,156167,53931],{"class":53},[36,156169,151081],{"class":57},[36,156171,14958],{"class":53},[36,156173,156084],{"class":57},[36,156175,53931],{"class":53},[36,156177,156119],{"class":57},[36,156179,14958],{"class":53},[36,156181,86565],{"class":57},[36,156183,53931],{"class":53},[36,156185,156186],{"class":49},"16000",[36,156188,7461],{"class":53},[36,156190,156191],{"class":38,"line":1517},[36,156192,35748],{"class":53},[997,156194,156196],{"id":156195},"_1252-按日期统计","12.5.2 按日期统计",[26,156198,156200],{"className":28,"code":156199,"language":30,"meta":31,"style":31},"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",[33,156201,156202,156211,156215,156226,156240,156253,156272,156276],{"__ignoreMap":31},[36,156203,156204,156207,156209],{"class":38,"line":39},[36,156205,156206],{"class":53},"daily_total ",[36,156208,115],{"class":114},[36,156210,90347],{"class":53},[36,156212,156213],{"class":38,"line":46},[36,156214,546],{"emptyLinePlaceholder":545},[36,156216,156217,156219,156221,156223],{"class":38,"line":82},[36,156218,5556],{"class":114},[36,156220,150661],{"class":53},[36,156222,28556],{"class":114},[36,156224,156225],{"class":53}," sales:\n",[36,156227,156228,156231,156233,156236,156238],{"class":38,"line":88},[36,156229,156230],{"class":53},"    date ",[36,156232,115],{"class":114},[36,156234,156235],{"class":53}," item[",[36,156237,150449],{"class":57},[36,156239,35748],{"class":53},[36,156241,156242,156245,156247,156249,156251],{"class":38,"line":195},[36,156243,156244],{"class":53},"    amount ",[36,156246,115],{"class":114},[36,156248,156235],{"class":53},[36,156250,86565],{"class":57},[36,156252,35748],{"class":53},[36,156254,156255,156258,156260,156263,156265,156267,156269],{"class":38,"line":1517},[36,156256,156257],{"class":53},"    daily_total[date] ",[36,156259,115],{"class":114},[36,156261,156262],{"class":53}," daily_total.get(date, ",[36,156264,713],{"class":49},[36,156266,16236],{"class":53},[36,156268,121],{"class":114},[36,156270,156271],{"class":53}," amount\n",[36,156273,156274],{"class":38,"line":2421},[36,156275,546],{"emptyLinePlaceholder":545},[36,156277,156278,156280],{"class":38,"line":2446},[36,156279,50],{"class":49},[36,156281,156282],{"class":53},"(daily_total)\n",[997,156284,156286],{"id":156285},"_1253-按类别统计","12.5.3 按类别统计",[26,156288,156290],{"className":28,"code":156289,"language":30,"meta":31,"style":31},"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",[33,156291,156292,156301,156305,156315,156328,156340,156358,156362],{"__ignoreMap":31},[36,156293,156294,156297,156299],{"class":38,"line":39},[36,156295,156296],{"class":53},"category_total ",[36,156298,115],{"class":114},[36,156300,90347],{"class":53},[36,156302,156303],{"class":38,"line":46},[36,156304,546],{"emptyLinePlaceholder":545},[36,156306,156307,156309,156311,156313],{"class":38,"line":82},[36,156308,5556],{"class":114},[36,156310,150661],{"class":53},[36,156312,28556],{"class":114},[36,156314,156225],{"class":53},[36,156316,156317,156320,156322,156324,156326],{"class":38,"line":88},[36,156318,156319],{"class":53},"    category ",[36,156321,115],{"class":114},[36,156323,156235],{"class":53},[36,156325,156084],{"class":57},[36,156327,35748],{"class":53},[36,156329,156330,156332,156334,156336,156338],{"class":38,"line":195},[36,156331,156244],{"class":53},[36,156333,115],{"class":114},[36,156335,156235],{"class":53},[36,156337,86565],{"class":57},[36,156339,35748],{"class":53},[36,156341,156342,156345,156347,156350,156352,156354,156356],{"class":38,"line":1517},[36,156343,156344],{"class":53},"    category_total[category] ",[36,156346,115],{"class":114},[36,156348,156349],{"class":53}," category_total.get(category, ",[36,156351,713],{"class":49},[36,156353,16236],{"class":53},[36,156355,121],{"class":114},[36,156357,156271],{"class":53},[36,156359,156360],{"class":38,"line":2421},[36,156361,546],{"emptyLinePlaceholder":545},[36,156363,156364,156366],{"class":38,"line":2446},[36,156365,50],{"class":49},[36,156367,156368],{"class":53},"(category_total)\n",[997,156370,156372],{"id":156371},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,156374,156376],{"className":28,"code":156375,"language":30,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,156377,156378,156403],{"__ignoreMap":31},[36,156379,156380,156383,156385,156387,156390,156393,156396,156399,156401],{"class":38,"line":39},[36,156381,156382],{"class":53},"top_date, top_amount ",[36,156384,115],{"class":114},[36,156386,8478],{"class":49},[36,156388,156389],{"class":53},"(daily_total.items(), ",[36,156391,156392],{"class":1997},"key",[36,156394,156395],{"class":114},"=lambda",[36,156397,156398],{"class":53}," item: item[",[36,156400,707],{"class":49},[36,156402,7188],{"class":53},[36,156404,156405,156407],{"class":38,"line":46},[36,156406,50],{"class":49},[36,156408,156409],{"class":53},"(top_date, top_amount)\n",[14,156411,156413],{"id":156412},"_126-绘制柱状图","12.6 绘制柱状图",[26,156415,156417],{"className":28,"code":156416,"language":30,"meta":31,"style":31},"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",[33,156418,156419,156433,156444,156448,156456,156468,156480,156491,156495,156499,156509,156519,156533,156538,156555,156572,156588,156592],{"__ignoreMap":31},[36,156420,156421,156423,156425,156427,156429,156431],{"class":38,"line":39},[36,156422,33241],{"class":114},[36,156424,149831],{"class":53},[36,156426,537],{"class":114},[36,156428,149836],{"class":53},[36,156430,33887],{"class":114},[36,156432,149841],{"class":53},[36,156434,156435,156437,156439,156441],{"class":38,"line":46},[36,156436,33241],{"class":114},[36,156438,149690],{"class":53},[36,156440,537],{"class":114},[36,156442,156443],{"class":53}," Bar\n",[36,156445,156446],{"class":38,"line":82},[36,156447,546],{"emptyLinePlaceholder":545},[36,156449,156450,156452,156454],{"class":38,"line":88},[36,156451,156296],{"class":53},[36,156453,115],{"class":114},[36,156455,18091],{"class":53},[36,156457,156458,156461,156463,156466],{"class":38,"line":195},[36,156459,156460],{"class":57},"    \"手机\"",[36,156462,53931],{"class":53},[36,156464,156465],{"class":49},"27000",[36,156467,33970],{"class":53},[36,156469,156470,156473,156475,156478],{"class":38,"line":1517},[36,156471,156472],{"class":57},"    \"电脑\"",[36,156474,53931],{"class":53},[36,156476,156477],{"class":49},"34000",[36,156479,33970],{"class":53},[36,156481,156482,156485,156487,156489],{"class":38,"line":2421},[36,156483,156484],{"class":57},"    \"耳机\"",[36,156486,53931],{"class":53},[36,156488,126862],{"class":49},[36,156490,33970],{"class":53},[36,156492,156493],{"class":38,"line":2446},[36,156494,4103],{"class":53},[36,156496,156497],{"class":38,"line":2469},[36,156498,546],{"emptyLinePlaceholder":545},[36,156500,156501,156504,156506],{"class":38,"line":2492},[36,156502,156503],{"class":53},"bar ",[36,156505,115],{"class":114},[36,156507,156508],{"class":53}," Bar()\n",[36,156510,156511,156514,156516],{"class":38,"line":4150},[36,156512,156513],{"class":53},"bar.add_xaxis(",[36,156515,296],{"class":49},[36,156517,156518],{"class":53},"(category_total.keys()))\n",[36,156520,156521,156524,156526,156528,156530],{"class":38,"line":4155},[36,156522,156523],{"class":53},"bar.add_yaxis(",[36,156525,149747],{"class":57},[36,156527,14958],{"class":53},[36,156529,296],{"class":49},[36,156531,156532],{"class":53},"(category_total.values()))\n",[36,156534,156535],{"class":38,"line":4161},[36,156536,156537],{"class":53},"bar.set_global_opts(\n",[36,156539,156540,156542,156544,156546,156548,156550,156553],{"class":38,"line":4166},[36,156541,149925],{"class":1997},[36,156543,115],{"class":114},[36,156545,149930],{"class":53},[36,156547,53901],{"class":1997},[36,156549,115],{"class":114},[36,156551,156552],{"class":57},"\"品类销售额\"",[36,156554,40547],{"class":53},[36,156556,156557,156559,156561,156563,156565,156567,156570],{"class":38,"line":4180},[36,156558,149944],{"class":1997},[36,156560,115],{"class":114},[36,156562,149949],{"class":53},[36,156564,1998],{"class":1997},[36,156566,115],{"class":114},[36,156568,156569],{"class":57},"\"品类\"",[36,156571,40547],{"class":53},[36,156573,156574,156576,156578,156580,156582,156584,156586],{"class":38,"line":4185},[36,156575,149963],{"class":1997},[36,156577,115],{"class":114},[36,156579,149949],{"class":53},[36,156581,1998],{"class":1997},[36,156583,115],{"class":114},[36,156585,149747],{"class":57},[36,156587,40547],{"class":53},[36,156589,156590],{"class":38,"line":4191},[36,156591,61],{"class":53},[36,156593,156594,156597,156600],{"class":38,"line":4212},[36,156595,156596],{"class":53},"bar.render(",[36,156598,156599],{"class":57},"\"category_sales.html\"",[36,156601,61],{"class":53},[14,156603,156605],{"id":156604},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156607,156608],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,156610,156612],{"className":28,"code":156611,"language":30,"meta":31,"style":31},"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",[33,156613,156614,156628,156639,156643,156651,156675,156698,156723,156727,156731,156741,156745,156756,156765,156775,156789,156820,156825,156829],{"__ignoreMap":31},[36,156615,156616,156618,156620,156622,156624,156626],{"class":38,"line":39},[36,156617,33241],{"class":114},[36,156619,149831],{"class":53},[36,156621,537],{"class":114},[36,156623,149836],{"class":53},[36,156625,33887],{"class":114},[36,156627,149841],{"class":53},[36,156629,156630,156632,156634,156636],{"class":38,"line":46},[36,156631,33241],{"class":114},[36,156633,149690],{"class":53},[36,156635,537],{"class":114},[36,156637,156638],{"class":53}," Bar, Timeline\n",[36,156640,156641],{"class":38,"line":82},[36,156642,546],{"emptyLinePlaceholder":545},[36,156644,156645,156647,156649],{"class":38,"line":88},[36,156646,104131],{"class":53},[36,156648,115],{"class":114},[36,156650,18091],{"class":53},[36,156652,156653,156656,156659,156661,156663,156665,156667,156669,156671,156673],{"class":38,"line":195},[36,156654,156655],{"class":57},"    \"2024-10-01\"",[36,156657,156658],{"class":53},": {",[36,156660,156089],{"class":57},[36,156662,53931],{"class":53},[36,156664,156098],{"class":49},[36,156666,14958],{"class":53},[36,156668,156119],{"class":57},[36,156670,53931],{"class":53},[36,156672,156128],{"class":49},[36,156674,7461],{"class":53},[36,156676,156677,156680,156682,156684,156686,156688,156690,156692,156694,156696],{"class":38,"line":1517},[36,156678,156679],{"class":57},"    \"2024-10-02\"",[36,156681,156658],{"class":53},[36,156683,156089],{"class":57},[36,156685,53931],{"class":53},[36,156687,156157],{"class":49},[36,156689,14958],{"class":53},[36,156691,156119],{"class":57},[36,156693,53931],{"class":53},[36,156695,156186],{"class":49},[36,156697,7461],{"class":53},[36,156699,156700,156703,156705,156707,156709,156712,156714,156716,156718,156721],{"class":38,"line":2421},[36,156701,156702],{"class":57},"    \"2024-10-03\"",[36,156704,156658],{"class":53},[36,156706,156089],{"class":57},[36,156708,53931],{"class":53},[36,156710,156711],{"class":49},"17000",[36,156713,14958],{"class":53},[36,156715,156119],{"class":57},[36,156717,53931],{"class":53},[36,156719,156720],{"class":49},"19000",[36,156722,7461],{"class":53},[36,156724,156725],{"class":38,"line":2446},[36,156726,4103],{"class":53},[36,156728,156729],{"class":38,"line":2469},[36,156730,546],{"emptyLinePlaceholder":545},[36,156732,156733,156736,156738],{"class":38,"line":2492},[36,156734,156735],{"class":53},"timeline ",[36,156737,115],{"class":114},[36,156739,156740],{"class":53}," Timeline()\n",[36,156742,156743],{"class":38,"line":4150},[36,156744,546],{"emptyLinePlaceholder":545},[36,156746,156747,156749,156752,156754],{"class":38,"line":4155},[36,156748,5556],{"class":114},[36,156750,156751],{"class":53}," date, category_data ",[36,156753,28556],{"class":114},[36,156755,151600],{"class":53},[36,156757,156758,156761,156763],{"class":38,"line":4161},[36,156759,156760],{"class":53},"    bar ",[36,156762,115],{"class":114},[36,156764,156508],{"class":53},[36,156766,156767,156770,156772],{"class":38,"line":4166},[36,156768,156769],{"class":53},"    bar.add_xaxis(",[36,156771,296],{"class":49},[36,156773,156774],{"class":53},"(category_data.keys()))\n",[36,156776,156777,156780,156782,156784,156786],{"class":38,"line":4180},[36,156778,156779],{"class":53},"    bar.add_yaxis(",[36,156781,149747],{"class":57},[36,156783,14958],{"class":53},[36,156785,296],{"class":49},[36,156787,156788],{"class":53},"(category_data.values()))\n",[36,156790,156791,156794,156797,156799,156801,156803,156805,156807,156809,156811,156813,156815,156818],{"class":38,"line":4185},[36,156792,156793],{"class":53},"    bar.set_global_opts(",[36,156795,156796],{"class":1997},"title_opts",[36,156798,115],{"class":114},[36,156800,149930],{"class":53},[36,156802,53901],{"class":1997},[36,156804,115],{"class":114},[36,156806,2060],{"class":114},[36,156808,1822],{"class":57},[36,156810,2065],{"class":49},[36,156812,76411],{"class":53},[36,156814,2070],{"class":49},[36,156816,156817],{"class":57},"销售额\"",[36,156819,625],{"class":53},[36,156821,156822],{"class":38,"line":4191},[36,156823,156824],{"class":53},"    timeline.add(bar, date)\n",[36,156826,156827],{"class":38,"line":4212},[36,156828,546],{"emptyLinePlaceholder":545},[36,156830,156831,156834,156837],{"class":38,"line":4217},[36,156832,156833],{"class":53},"timeline.render(",[36,156835,156836],{"class":57},"\"timeline_sales.html\"",[36,156838,61],{"class":53},[14,156840,156842],{"id":156841},"_128-绘制地图","12.8 绘制地图",[19,156844,156845],{},"地图适合展示地区数据。",[26,156847,156849],{"className":28,"code":156848,"language":30,"meta":31,"style":31},"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",[33,156850,156851,156865,156876,156880,156888,156901,156913,156926,156939,156943,156947,156957,156972,156977,156994,157013,157017],{"__ignoreMap":31},[36,156852,156853,156855,156857,156859,156861,156863],{"class":38,"line":39},[36,156854,33241],{"class":114},[36,156856,149831],{"class":53},[36,156858,537],{"class":114},[36,156860,149836],{"class":53},[36,156862,33887],{"class":114},[36,156864,149841],{"class":53},[36,156866,156867,156869,156871,156873],{"class":38,"line":46},[36,156868,33241],{"class":114},[36,156870,149690],{"class":53},[36,156872,537],{"class":114},[36,156874,156875],{"class":53}," Map\n",[36,156877,156878],{"class":38,"line":82},[36,156879,546],{"emptyLinePlaceholder":545},[36,156881,156882,156884,156886],{"class":38,"line":88},[36,156883,104131],{"class":53},[36,156885,115],{"class":114},[36,156887,57938],{"class":53},[36,156889,156890,156893,156895,156897,156899],{"class":38,"line":195},[36,156891,156892],{"class":53},"    (",[36,156894,71756],{"class":57},[36,156896,14958],{"class":53},[36,156898,3493],{"class":49},[36,156900,40547],{"class":53},[36,156902,156903,156905,156907,156909,156911],{"class":38,"line":1517},[36,156904,156892],{"class":53},[36,156906,71776],{"class":57},[36,156908,14958],{"class":53},[36,156910,149764],{"class":49},[36,156912,40547],{"class":53},[36,156914,156915,156917,156920,156922,156924],{"class":38,"line":2421},[36,156916,156892],{"class":53},[36,156918,156919],{"class":57},"\"广东\"",[36,156921,14958],{"class":53},[36,156923,4259],{"class":49},[36,156925,40547],{"class":53},[36,156927,156928,156930,156933,156935,156937],{"class":38,"line":2446},[36,156929,156892],{"class":53},[36,156931,156932],{"class":57},"\"浙江\"",[36,156934,14958],{"class":53},[36,156936,149769],{"class":49},[36,156938,40547],{"class":53},[36,156940,156941],{"class":38,"line":2469},[36,156942,35748],{"class":53},[36,156944,156945],{"class":38,"line":2492},[36,156946,546],{"emptyLinePlaceholder":545},[36,156948,156949,156952,156954],{"class":38,"line":4150},[36,156950,156951],{"class":53},"map_chart ",[36,156953,115],{"class":114},[36,156955,156956],{"class":53}," Map()\n",[36,156958,156959,156962,156964,156967,156970],{"class":38,"line":4155},[36,156960,156961],{"class":53},"map_chart.add(",[36,156963,149747],{"class":57},[36,156965,156966],{"class":53},", data, ",[36,156968,156969],{"class":57},"\"china\"",[36,156971,61],{"class":53},[36,156973,156974],{"class":38,"line":4161},[36,156975,156976],{"class":53},"map_chart.set_global_opts(\n",[36,156978,156979,156981,156983,156985,156987,156989,156992],{"class":38,"line":4166},[36,156980,149925],{"class":1997},[36,156982,115],{"class":114},[36,156984,149930],{"class":53},[36,156986,53901],{"class":1997},[36,156988,115],{"class":114},[36,156990,156991],{"class":57},"\"地区销售额\"",[36,156993,40547],{"class":53},[36,156995,156996,156999,157001,157004,157007,157009,157011],{"class":38,"line":4180},[36,156997,156998],{"class":1997},"    visualmap_opts",[36,157000,115],{"class":114},[36,157002,157003],{"class":53},"opts.VisualMapOpts(",[36,157005,157006],{"class":1997},"max_",[36,157008,115],{"class":114},[36,157010,4259],{"class":49},[36,157012,40547],{"class":53},[36,157014,157015],{"class":38,"line":4185},[36,157016,61],{"class":53},[36,157018,157019,157022,157025],{"class":38,"line":4191},[36,157020,157021],{"class":53},"map_chart.render(",[36,157023,157024],{"class":57},"\"map_sales.html\"",[36,157026,61],{"class":53},[19,157028,157029],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,157031,157033],{"id":157032},"_129-项目拆分建议","12.9 项目拆分建议",[19,157035,157036],{},"当代码超过一个文件时，可以这样组织：",[26,157038,157041],{"className":157039,"code":157040,"language":690,"meta":31},[688],"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",[33,157042,157040],{"__ignoreMap":31},[19,157044,157045],{},"职责：",[433,157047,157048,157054,157060,157066],{},[436,157049,157050,157053],{},[33,157051,157052],{},"main.py","：程序入口。",[436,157055,157056,157059],{},[33,157057,157058],{},"file_utils.py","：读写 JSON。",[436,157061,157062,157065],{},[33,157063,157064],{},"sales_service.py","：统计销售数据。",[436,157067,157068,157071],{},[33,157069,157070],{},"chart_builder.py","：生成图表。",[14,157073,157075],{"id":157074},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,157077,157078],{},"语法基础：",[433,157080,157081,157084,157087,157090],{},[436,157082,157083],{},"会写变量、注释、输入输出。",[436,157085,157086],{},"会使用 int、float、str、bool。",[436,157088,157089],{},"会做类型转换。",[436,157091,157092],{},"会使用 f-string 格式化输出。",[19,157094,157095],{},"流程控制：",[433,157097,157098,157104,157110,157118],{},[436,157099,157100,157101,1296],{},"会写 ",[33,157102,157103],{},"if elif else",[436,157105,157100,157106,1292,157108,1296],{},[33,157107,111133],{},[33,157109,5556],{},[436,157111,157112,157113,1292,157115,1296],{},"理解 ",[33,157114,4589],{},[33,157116,157117],{},"continue",[436,157119,157120],{},"能写嵌套循环。",[19,157122,157123],{},"函数：",[433,157125,157126,157129,157132,157135],{},[436,157127,157128],{},"会定义和调用函数。",[436,157130,157131],{},"理解参数和返回值。",[436,157133,157134],{},"知道局部变量和全局变量。",[436,157136,157137],{},"会使用默认参数、关键字参数、不定长参数。",[19,157139,157140],{},"容器：",[433,157142,157143,157146,157149,157152,157155],{},[436,157144,157145],{},"会使用列表增删改查。",[436,157147,157148],{},"会遍历列表、字典。",[436,157150,157151],{},"会使用切片。",[436,157153,157154],{},"会用集合去重。",[436,157156,157157],{},"会处理列表嵌套字典。",[19,157159,157160],{},"文件和模块：",[433,157162,157163,157166,157169,157172,157175],{},[436,157164,157165],{},"会读写文本文件。",[436,157167,157168],{},"会读写 JSON。",[436,157170,157171],{},"会捕获常见异常。",[436,157173,157174],{},"会导入模块和第三方包。",[436,157176,157177],{},"会创建简单包结构。",[19,157179,157180],{},"项目能力：",[433,157182,157183,157186,157189,157192,157195],{},[436,157184,157185],{},"能把代码拆成函数。",[436,157187,157188],{},"能把数据保存到文件。",[436,157190,157191],{},"能处理用户输入错误。",[436,157193,157194],{},"能写一个完整菜单程序。",[436,157196,157197],{},"能用 pyecharts 生成图表。",[14,157199,157201],{"id":157200},"_1211-推荐练习顺序","12.11 推荐练习顺序",[433,157203,157204,157207,157210,157213,157216,157219,157222,157225],{},[436,157205,157206],{},"猜数字游戏。",[436,157208,157209],{},"ATM 菜单程序。",[436,157211,157212],{},"学生成绩统计。",[436,157214,157215],{},"学生管理系统函数版。",[436,157217,157218],{},"学生管理系统文件持久化版。",[436,157220,157221],{},"学生管理系统面向对象版。",[436,157223,157224],{},"销售数据统计。",[436,157226,157227],{},"销售数据可视化。",[14,157229,157231],{"id":157230},"_1212-常见学习误区","12.12 常见学习误区",[433,157233,157234,157237,157240,157243,157246,157249,157252],{},[436,157235,157236],{},"只看视频不敲代码。",[436,157238,157239],{},"一报错就复制错误去搜，不先读报错位置。",[436,157241,157242],{},"变量名随便写，后续自己看不懂。",[436,157244,157245],{},"所有代码都写在一个文件一个函数里。",[436,157247,157248],{},"不保存练习代码，复习时没有材料。",[436,157250,157251],{},"还没掌握列表字典就急着学框架。",[436,157253,157254],{},"不会读官方文档，只依赖教程。",[14,157256,157258],{"id":157257},"_1213-如何读报错","12.13 如何读报错",[19,157260,157261],{},"报错通常从下往上看最后几行。",[19,157263,814],{},[26,157265,157268],{"className":157266,"code":157267,"language":690,"meta":31},[688],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,157269,157267],{"__ignoreMap":31},[19,157271,27116],{},[433,157273,157274,157280,157290],{},[436,157275,157276,157277,1296],{},"异常类型是 ",[33,157278,157279],{},"ValueError",[436,157281,109815,157282,157285,157286,157289],{},[33,157283,157284],{},"int()"," 无法把 ",[33,157287,157288],{},"'abc'"," 转成整数。",[436,157291,157292],{},"应该检查输入内容或增加异常处理。",[19,157294,157295],{},"再看文件名和行号：",[26,157297,157300],{"className":157298,"code":157299,"language":690,"meta":31},[688],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,157301,157299],{"__ignoreMap":31},[19,157303,157304,157305,157307],{},"表示错误发生在 ",[33,157306,157052],{}," 第 10 行。",[14,157309,157311],{"id":157310},"_1214-后续学习方向","12.14 后续学习方向",[19,157313,157314],{},"Python 基础完成后，可以按兴趣选择方向：",[433,157316,157317,157329,157338,157350,157361,157370,157380],{},[436,157318,157319,157320,273,157323,273,157326,1296],{},"自动化办公：",[33,157321,157322],{},"openpyxl",[33,157324,157325],{},"python-docx",[33,157327,157328],{},"pdfplumber",[436,157330,157331,157332,273,157334,273,157336,1296],{},"数据分析：",[33,157333,103102],{},[33,157335,148645],{},[33,157337,148653],{},[436,157339,157340,157341,273,157344,273,157347,1296],{},"Web 后端：",[33,157342,157343],{},"Flask",[33,157345,157346],{},"FastAPI",[33,157348,157349],{},"Django",[436,157351,157352,157353,273,157355,273,157358,1296],{},"爬虫：",[33,157354,148630],{},[33,157356,157357],{},"BeautifulSoup",[33,157359,157360],{},"Scrapy",[436,157362,157363,157364,273,157366,157369],{},"测试开发：",[33,157365,148677],{},[33,157367,157368],{},"selenium","、接口测试。",[436,157371,157372,157373,273,157375,273,157377,1296],{},"人工智能：",[33,157374,103102],{},[33,157376,148645],{},[33,157378,157379],{},"pytorch",[436,157381,157382,157383,273,157385,273,157388,1296],{},"运维脚本：",[33,157384,148246],{},[33,157386,157387],{},"subprocess",[33,157389,157390],{},"paramiko",[19,157392,157393],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157395,157397],{"id":157396},"_1215-结课练习","12.15 结课练习",[433,157399,157400,157403,157406,157409,157412,157415,157418,157421],{},[436,157401,157402],{},"完成函数版学生管理系统。",[436,157404,157405],{},"给学生管理系统增加 JSON 持久化。",[436,157407,157408],{},"给学生管理系统增加异常处理。",[436,157410,157411],{},"把学生管理系统改成面向对象版。",[436,157413,157414],{},"使用 pyecharts 绘制学生成绩柱状图。",[436,157416,157417],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[436,157419,157420],{},"按品类统计销售额并绘制柱状图。",[436,157422,157423],{},"写一份自己的 Python 学习路线图。",[2602,157425,157426],{},"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":31,"searchDepth":46,"depth":46,"links":157428},[157429,157430,157433,157434,157435,157441,157442,157443,157444,157445,157446,157447,157448,157449,157450],{"id":154149,"depth":46,"text":154150},{"id":154199,"depth":46,"text":154200,"children":157431},[157432],{"id":154203,"depth":82,"text":154204},{"id":154242,"depth":46,"text":154243},{"id":155714,"depth":46,"text":155715},{"id":156051,"depth":46,"text":156052,"children":157436},[157437,157438,157439,157440],{"id":156055,"depth":82,"text":156056},{"id":156195,"depth":82,"text":156196},{"id":156285,"depth":82,"text":156286},{"id":156371,"depth":82,"text":156372},{"id":156412,"depth":46,"text":156413},{"id":156604,"depth":46,"text":156605},{"id":156841,"depth":46,"text":156842},{"id":157032,"depth":46,"text":157033},{"id":157074,"depth":46,"text":157075},{"id":157200,"depth":46,"text":157201},{"id":157230,"depth":46,"text":157231},{"id":157257,"depth":46,"text":157258},{"id":157310,"depth":46,"text":157311},{"id":157396,"depth":46,"text":157397},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154141,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":4,"title":5,"body":157457,"description":2630,"extension":2631,"meta":159608,"navigation":545,"path":2633,"seo":159609,"stem":2635,"__hash__":2636},{"type":7,"value":157458,"toc":159583},[157459,157461,157463,157465,157467,157485,157487,157507,157509,157511,157531,157533,157553,157555,157557,157591,157593,157699,157701,157703,157739,157741,157761,157763,157765,157767,157777,157805,157807,157839,157841,157861,157863,157891,157893,157895,157899,157973,157975,157980,157994,158030,158032,158034,158078,158080,158114,158116,158146,158148,158182,158184,158212,158214,158232,158234,158236,158334,158336,158404,158406,158450,158452,158476,158482,158484,158486,158546,158552,158576,158578,158614,158676,158678,158680,158712,158714,158750,158752,158804,158806,158830,158832,158858,158860,158862,158864,158920,158922,158958,158960,158988,158990,159080,159082,159084,159154,159156,159200,159202,159206,159244,159246,159290,159292,159336,159338,159340,159350,159352,159518,159520,159540,159558,159562,159564,159576,159581],[10,157460,5],{"id":12},[14,157462,17],{"id":16},[19,157464,21],{},[19,157466,24],{},[26,157468,157469],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,157470,157471,157475],{"__ignoreMap":31},[36,157472,157473],{"class":38,"line":39},[36,157474,43],{"class":42},[36,157476,157477,157479,157481,157483],{"class":38,"line":46},[36,157478,50],{"class":49},[36,157480,54],{"class":53},[36,157482,58],{"class":57},[36,157484,61],{"class":53},[19,157486,64],{},[26,157488,157489],{"className":28,"code":67,"language":30,"meta":31,"style":31},[33,157490,157491,157495,157499,157503],{"__ignoreMap":31},[36,157492,157493],{"class":38,"line":39},[36,157494,74],{"class":57},[36,157496,157497],{"class":38,"line":46},[36,157498,79],{"class":57},[36,157500,157501],{"class":38,"line":82},[36,157502,85],{"class":57},[36,157504,157505],{"class":38,"line":88},[36,157506,74],{"class":57},[19,157508,93],{},[19,157510,96],{},[26,157512,157513],{"className":28,"code":99,"language":30,"meta":31,"style":31},[33,157514,157515,157519],{"__ignoreMap":31},[36,157516,157517],{"class":38,"line":39},[36,157518,106],{"class":42},[36,157520,157521,157523,157525,157527,157529],{"class":38,"line":46},[36,157522,111],{"class":53},[36,157524,115],{"class":114},[36,157526,118],{"class":53},[36,157528,121],{"class":114},[36,157530,124],{"class":49},[19,157532,127],{},[26,157534,157535],{"className":28,"code":130,"language":30,"meta":31,"style":31},[33,157536,157537,157541],{"__ignoreMap":31},[36,157538,157539],{"class":38,"line":39},[36,157540,137],{"class":42},[36,157542,157543,157545,157547,157549,157551],{"class":38,"line":46},[36,157544,111],{"class":53},[36,157546,115],{"class":114},[36,157548,118],{"class":53},[36,157550,121],{"class":114},[36,157552,124],{"class":49},[14,157554,153],{"id":152},[19,157556,156],{},[26,157558,157559],{"className":28,"code":159,"language":30,"meta":31,"style":31},[33,157560,157561,157567,157573,157579,157585],{"__ignoreMap":31},[36,157562,157563,157565],{"class":38,"line":39},[36,157564,166],{"class":49},[36,157566,169],{"class":42},[36,157568,157569,157571],{"class":38,"line":46},[36,157570,174],{"class":49},[36,157572,177],{"class":42},[36,157574,157575,157577],{"class":38,"line":82},[36,157576,58],{"class":57},[36,157578,184],{"class":42},[36,157580,157581,157583],{"class":38,"line":88},[36,157582,189],{"class":49},[36,157584,192],{"class":42},[36,157586,157587,157589],{"class":38,"line":195},[36,157588,198],{"class":49},[36,157590,201],{"class":42},[19,157592,204],{},[206,157594,157595,157605],{},[209,157596,157597],{},[212,157598,157599,157601,157603],{},[215,157600,217],{},[215,157602,220],{},[215,157604,223],{},[225,157606,157607,157617,157627,157637,157649,157659,157669,157679,157689],{},[212,157608,157609,157611,157615],{},[230,157610,232],{},[230,157612,157613],{},[33,157614,166],{},[230,157616,239],{},[212,157618,157619,157621,157625],{},[230,157620,244],{},[230,157622,157623],{},[33,157624,174],{},[230,157626,251],{},[212,157628,157629,157631,157635],{},[230,157630,256],{},[230,157632,157633],{},[33,157634,58],{},[230,157636,263],{},[212,157638,157639,157641,157647],{},[230,157640,268],{},[230,157642,157643,273,157645],{},[33,157644,189],{},[33,157646,276],{},[230,157648,279],{},[212,157650,157651,157653,157657],{},[230,157652,284],{},[230,157654,157655],{},[33,157656,198],{},[230,157658,291],{},[212,157660,157661,157663,157667],{},[230,157662,296],{},[230,157664,157665],{},[33,157666,301],{},[230,157668,304],{},[212,157670,157671,157673,157677],{},[230,157672,309],{},[230,157674,157675],{},[33,157676,314],{},[230,157678,317],{},[212,157680,157681,157683,157687],{},[230,157682,322],{},[230,157684,157685],{},[33,157686,327],{},[230,157688,330],{},[212,157690,157691,157693,157697],{},[230,157692,335],{},[230,157694,157695],{},[33,157696,340],{},[230,157698,343],{},[14,157700,347],{"id":346},[19,157702,350],{},[26,157704,157705],{"className":28,"code":353,"language":30,"meta":31,"style":31},[33,157706,157707,157715,157723,157731],{"__ignoreMap":31},[36,157708,157709,157711,157713],{"class":38,"line":39},[36,157710,360],{"class":53},[36,157712,115],{"class":114},[36,157714,365],{"class":57},[36,157716,157717,157719,157721],{"class":38,"line":46},[36,157718,111],{"class":53},[36,157720,115],{"class":114},[36,157722,374],{"class":49},[36,157724,157725,157727,157729],{"class":38,"line":82},[36,157726,379],{"class":53},[36,157728,115],{"class":114},[36,157730,384],{"class":49},[36,157732,157733,157735,157737],{"class":38,"line":88},[36,157734,389],{"class":53},[36,157736,115],{"class":114},[36,157738,394],{"class":49},[19,157740,397],{},[26,157742,157743],{"className":28,"code":400,"language":30,"meta":31,"style":31},[33,157744,157745,157753],{"__ignoreMap":31},[36,157746,157747,157749,157751],{"class":38,"line":39},[36,157748,407],{"class":53},[36,157750,115],{"class":114},[36,157752,412],{"class":49},[36,157754,157755,157757,157759],{"class":38,"line":46},[36,157756,407],{"class":53},[36,157758,115],{"class":114},[36,157760,421],{"class":57},[19,157762,424],{},[14,157764,428],{"id":427},[19,157766,431],{},[433,157768,157769,157771,157773,157775],{},[436,157770,438],{},[436,157772,441],{},[436,157774,444],{},[436,157776,447],{},[26,157778,157779],{"className":28,"code":450,"language":30,"meta":31,"style":31},[33,157780,157781,157789,157797],{"__ignoreMap":31},[36,157782,157783,157785,157787],{"class":38,"line":39},[36,157784,457],{"class":53},[36,157786,115],{"class":114},[36,157788,462],{"class":57},[36,157790,157791,157793,157795],{"class":38,"line":46},[36,157792,467],{"class":53},[36,157794,115],{"class":114},[36,157796,374],{"class":49},[36,157798,157799,157801,157803],{"class":38,"line":82},[36,157800,476],{"class":53},[36,157802,115],{"class":114},[36,157804,481],{"class":57},[19,157806,484],{},[26,157808,157809],{"className":28,"code":487,"language":30,"meta":31,"style":31},[33,157810,157811,157819,157831],{"__ignoreMap":31},[36,157812,157813,157815,157817],{"class":38,"line":39},[36,157814,495],{"class":494},[36,157816,498],{"class":114},[36,157818,374],{"class":49},[36,157820,157821,157823,157825,157827,157829],{"class":38,"line":46},[36,157822,505],{"class":53},[36,157824,508],{"class":114},[36,157826,360],{"class":53},[36,157828,115],{"class":114},[36,157830,462],{"class":57},[36,157832,157833,157835,157837],{"class":38,"line":82},[36,157834,519],{"class":114},[36,157836,498],{"class":114},[36,157838,524],{"class":57},[19,157840,527],{},[26,157842,157843],{"className":28,"code":530,"language":30,"meta":31,"style":31},[33,157844,157845,157851,157855],{"__ignoreMap":31},[36,157846,157847,157849],{"class":38,"line":39},[36,157848,537],{"class":114},[36,157850,540],{"class":53},[36,157852,157853],{"class":38,"line":46},[36,157854,546],{"emptyLinePlaceholder":545},[36,157856,157857,157859],{"class":38,"line":82},[36,157858,50],{"class":49},[36,157860,553],{"class":53},[19,157862,556],{},[26,157864,157865],{"className":28,"code":559,"language":30,"meta":31,"style":31},[33,157866,157867,157875,157883],{"__ignoreMap":31},[36,157868,157869,157871,157873],{"class":38,"line":39},[36,157870,566],{"class":53},[36,157872,115],{"class":114},[36,157874,365],{"class":57},[36,157876,157877,157879,157881],{"class":38,"line":46},[36,157878,575],{"class":53},[36,157880,115],{"class":114},[36,157882,580],{"class":49},[36,157884,157885,157887,157889],{"class":38,"line":82},[36,157886,585],{"class":53},[36,157888,115],{"class":114},[36,157890,590],{"class":49},[19,157892,593],{},[14,157894,597],{"id":596},[19,157896,600,157897,604],{},[33,157898,603],{},[26,157900,157901],{"className":28,"code":607,"language":30,"meta":31,"style":31},[33,157902,157903,157917,157931,157945,157959],{"__ignoreMap":31},[36,157904,157905,157907,157909,157911,157913,157915],{"class":38,"line":39},[36,157906,50],{"class":49},[36,157908,54],{"class":53},[36,157910,618],{"class":49},[36,157912,54],{"class":53},[36,157914,166],{"class":49},[36,157916,625],{"class":53},[36,157918,157919,157921,157923,157925,157927,157929],{"class":38,"line":46},[36,157920,50],{"class":49},[36,157922,54],{"class":53},[36,157924,618],{"class":49},[36,157926,54],{"class":53},[36,157928,174],{"class":49},[36,157930,625],{"class":53},[36,157932,157933,157935,157937,157939,157941,157943],{"class":38,"line":82},[36,157934,50],{"class":49},[36,157936,54],{"class":53},[36,157938,618],{"class":49},[36,157940,54],{"class":53},[36,157942,58],{"class":57},[36,157944,625],{"class":53},[36,157946,157947,157949,157951,157953,157955,157957],{"class":38,"line":88},[36,157948,50],{"class":49},[36,157950,54],{"class":53},[36,157952,618],{"class":49},[36,157954,54],{"class":53},[36,157956,189],{"class":49},[36,157958,625],{"class":53},[36,157960,157961,157963,157965,157967,157969,157971],{"class":38,"line":195},[36,157962,50],{"class":49},[36,157964,54],{"class":53},[36,157966,618],{"class":49},[36,157968,54],{"class":53},[36,157970,198],{"class":49},[36,157972,625],{"class":53},[19,157974,684],{},[26,157976,157978],{"className":157977,"code":689,"language":690,"meta":31},[688],[33,157979,689],{"__ignoreMap":31},[19,157981,695,157982,698,157984,701,157986,704,157988,708,157990,704,157992,714],{},[33,157983,268],{},[33,157985,232],{},[33,157987,189],{},[33,157989,707],{},[33,157991,276],{},[33,157993,713],{},[26,157995,157996],{"className":28,"code":717,"language":30,"meta":31,"style":31},[33,157997,157998,158014],{"__ignoreMap":31},[36,157999,158000,158002,158004,158006,158008,158010,158012],{"class":38,"line":39},[36,158001,50],{"class":49},[36,158003,54],{"class":53},[36,158005,189],{"class":49},[36,158007,730],{"class":114},[36,158009,733],{"class":49},[36,158011,736],{"class":53},[36,158013,739],{"class":42},[36,158015,158016,158018,158020,158022,158024,158026,158028],{"class":38,"line":46},[36,158017,50],{"class":49},[36,158019,54],{"class":53},[36,158021,276],{"class":49},[36,158023,730],{"class":114},[36,158025,733],{"class":49},[36,158027,754],{"class":53},[36,158029,757],{"class":42},[14,158031,761],{"id":760},[19,158033,764],{},[26,158035,158036],{"className":28,"code":767,"language":30,"meta":31,"style":31},[33,158037,158038,158048,158058,158068],{"__ignoreMap":31},[36,158039,158040,158042,158044,158046],{"class":38,"line":39},[36,158041,232],{"class":49},[36,158043,54],{"class":53},[36,158045,778],{"class":57},[36,158047,61],{"class":53},[36,158049,158050,158052,158054,158056],{"class":38,"line":46},[36,158051,244],{"class":49},[36,158053,54],{"class":53},[36,158055,789],{"class":57},[36,158057,61],{"class":53},[36,158059,158060,158062,158064,158066],{"class":38,"line":82},[36,158061,256],{"class":49},[36,158063,54],{"class":53},[36,158065,166],{"class":49},[36,158067,61],{"class":53},[36,158069,158070,158072,158074,158076],{"class":38,"line":88},[36,158071,268],{"class":49},[36,158073,54],{"class":53},[36,158075,707],{"class":49},[36,158077,61],{"class":53},[19,158079,814],{},[26,158081,158082],{"className":28,"code":817,"language":30,"meta":31,"style":31},[33,158083,158084,158092,158102],{"__ignoreMap":31},[36,158085,158086,158088,158090],{"class":38,"line":39},[36,158087,111],{"class":53},[36,158089,115],{"class":114},[36,158091,828],{"class":57},[36,158093,158094,158096,158098,158100],{"class":38,"line":46},[36,158095,111],{"class":53},[36,158097,115],{"class":114},[36,158099,837],{"class":49},[36,158101,840],{"class":53},[36,158103,158104,158106,158108,158110,158112],{"class":38,"line":82},[36,158105,50],{"class":49},[36,158107,847],{"class":53},[36,158109,121],{"class":114},[36,158111,733],{"class":49},[36,158113,61],{"class":53},[19,158115,856],{},[26,158117,158118],{"className":28,"code":859,"language":30,"meta":31,"style":31},[33,158119,158120,158134],{"__ignoreMap":31},[36,158121,158122,158124,158126,158128,158130,158132],{"class":38,"line":39},[36,158123,866],{"class":53},[36,158125,115],{"class":114},[36,158127,871],{"class":49},[36,158129,54],{"class":53},[36,158131,876],{"class":57},[36,158133,61],{"class":53},[36,158135,158136,158138,158140,158142,158144],{"class":38,"line":46},[36,158137,50],{"class":49},[36,158139,54],{"class":53},[36,158141,618],{"class":49},[36,158143,889],{"class":53},[36,158145,892],{"class":42},[19,158147,895],{},[26,158149,158150],{"className":28,"code":898,"language":30,"meta":31,"style":31},[33,158151,158152,158170],{"__ignoreMap":31},[36,158153,158154,158156,158158,158160,158162,158164,158166,158168],{"class":38,"line":39},[36,158155,866],{"class":53},[36,158157,115],{"class":114},[36,158159,837],{"class":49},[36,158161,54],{"class":53},[36,158163,913],{"class":49},[36,158165,54],{"class":53},[36,158167,876],{"class":57},[36,158169,625],{"class":53},[36,158171,158172,158174,158176,158178,158180],{"class":38,"line":46},[36,158173,50],{"class":49},[36,158175,926],{"class":53},[36,158177,121],{"class":114},[36,158179,931],{"class":49},[36,158181,61],{"class":53},[19,158183,936],{},[26,158185,158186],{"className":28,"code":939,"language":30,"meta":31,"style":31},[33,158187,158188,158200],{"__ignoreMap":31},[36,158189,158190,158192,158194,158196,158198],{"class":38,"line":39},[36,158191,232],{"class":49},[36,158193,54],{"class":53},[36,158195,789],{"class":57},[36,158197,736],{"class":53},[36,158199,954],{"class":42},[36,158201,158202,158204,158206,158208,158210],{"class":38,"line":46},[36,158203,232],{"class":49},[36,158205,54],{"class":53},[36,158207,963],{"class":57},[36,158209,966],{"class":53},[36,158211,954],{"class":42},[19,158213,971],{},[26,158215,158216],{"className":28,"code":974,"language":30,"meta":31,"style":31},[33,158217,158218],{"__ignoreMap":31},[36,158219,158220,158222,158224,158226,158228,158230],{"class":38,"line":39},[36,158221,866],{"class":53},[36,158223,115],{"class":114},[36,158225,985],{"class":49},[36,158227,54],{"class":53},[36,158229,789],{"class":57},[36,158231,61],{"class":53},[14,158233,995],{"id":994},[997,158235,1000],{"id":999},[206,158237,158238,158248],{},[209,158239,158240],{},[212,158241,158242,158244,158246],{},[215,158243,1009],{},[215,158245,223],{},[215,158247,220],{},[225,158249,158250,158262,158274,158286,158298,158310,158322],{},[212,158251,158252,158256,158258],{},[230,158253,158254],{},[33,158255,121],{},[230,158257,1024],{},[230,158259,158260],{},[33,158261,1029],{},[212,158263,158264,158268,158270],{},[230,158265,158266],{},[33,158267,508],{},[230,158269,1038],{},[230,158271,158272],{},[33,158273,1043],{},[212,158275,158276,158280,158282],{},[230,158277,158278],{},[33,158279,1050],{},[230,158281,1053],{},[230,158283,158284],{},[33,158285,1058],{},[212,158287,158288,158292,158294],{},[230,158289,158290],{},[33,158291,1065],{},[230,158293,1068],{},[230,158295,158296],{},[33,158297,1073],{},[212,158299,158300,158304,158306],{},[230,158301,158302],{},[33,158303,1080],{},[230,158305,1083],{},[230,158307,158308],{},[33,158309,1088],{},[212,158311,158312,158316,158318],{},[230,158313,158314],{},[33,158315,1095],{},[230,158317,1098],{},[230,158319,158320],{},[33,158321,1103],{},[212,158323,158324,158328,158330],{},[230,158325,158326],{},[33,158327,1110],{},[230,158329,1113],{},[230,158331,158332],{},[33,158333,1118],{},[19,158335,814],{},[26,158337,158338],{"className":28,"code":1123,"language":30,"meta":31,"style":31},[33,158339,158340,158356,158372,158388],{"__ignoreMap":31},[36,158341,158342,158344,158346,158348,158350,158352,158354],{"class":38,"line":39},[36,158343,50],{"class":49},[36,158345,54],{"class":53},[36,158347,1134],{"class":49},[36,158349,1137],{"class":114},[36,158351,1140],{"class":49},[36,158353,736],{"class":53},[36,158355,1145],{"class":42},[36,158357,158358,158360,158362,158364,158366,158368,158370],{"class":38,"line":46},[36,158359,50],{"class":49},[36,158361,54],{"class":53},[36,158363,1134],{"class":49},[36,158365,1156],{"class":114},[36,158367,1140],{"class":49},[36,158369,754],{"class":53},[36,158371,739],{"class":42},[36,158373,158374,158376,158378,158380,158382,158384,158386],{"class":38,"line":82},[36,158375,50],{"class":49},[36,158377,54],{"class":53},[36,158379,1134],{"class":49},[36,158381,1173],{"class":114},[36,158383,1140],{"class":49},[36,158385,736],{"class":53},[36,158387,757],{"class":42},[36,158389,158390,158392,158394,158396,158398,158400,158402],{"class":38,"line":88},[36,158391,50],{"class":49},[36,158393,54],{"class":53},[36,158395,1188],{"class":49},[36,158397,1191],{"class":114},[36,158399,1194],{"class":49},[36,158401,754],{"class":53},[36,158403,1199],{"class":42},[997,158405,1203],{"id":1202},[26,158407,158408],{"className":28,"code":1206,"language":30,"meta":31,"style":31},[33,158409,158410,158418,158426,158434,158442],{"__ignoreMap":31},[36,158411,158412,158414,158416],{"class":38,"line":39},[36,158413,866],{"class":53},[36,158415,115],{"class":114},[36,158417,1217],{"class":49},[36,158419,158420,158422,158424],{"class":38,"line":46},[36,158421,866],{"class":53},[36,158423,1224],{"class":114},[36,158425,1227],{"class":49},[36,158427,158428,158430,158432],{"class":38,"line":82},[36,158429,866],{"class":53},[36,158431,1234],{"class":114},[36,158433,1237],{"class":49},[36,158435,158436,158438,158440],{"class":38,"line":88},[36,158437,866],{"class":53},[36,158439,1244],{"class":114},[36,158441,1247],{"class":49},[36,158443,158444,158446,158448],{"class":38,"line":195},[36,158445,866],{"class":53},[36,158447,1254],{"class":114},[36,158449,1237],{"class":49},[19,158451,1259],{},[26,158453,158454],{"className":28,"code":1262,"language":30,"meta":31,"style":31},[33,158455,158456,158464],{"__ignoreMap":31},[36,158457,158458,158460,158462],{"class":38,"line":39},[36,158459,866],{"class":53},[36,158461,1224],{"class":114},[36,158463,124],{"class":49},[36,158465,158466,158468,158470,158472,158474],{"class":38,"line":46},[36,158467,866],{"class":53},[36,158469,115],{"class":114},[36,158471,1281],{"class":53},[36,158473,121],{"class":114},[36,158475,124],{"class":49},[19,158477,1288,158478,1292,158480,1296],{},[33,158479,1291],{},[33,158481,1295],{},[997,158483,1300],{"id":1299},[19,158485,1303],{},[26,158487,158488],{"className":28,"code":1306,"language":30,"meta":31,"style":31},[33,158489,158490,158504,158518,158532],{"__ignoreMap":31},[36,158491,158492,158494,158496,158498,158500,158502],{"class":38,"line":39},[36,158493,50],{"class":49},[36,158495,54],{"class":53},[36,158497,1317],{"class":49},[36,158499,1320],{"class":114},[36,158501,1323],{"class":49},[36,158503,61],{"class":53},[36,158505,158506,158508,158510,158512,158514,158516],{"class":38,"line":46},[36,158507,50],{"class":49},[36,158509,54],{"class":53},[36,158511,1317],{"class":49},[36,158513,1336],{"class":114},[36,158515,931],{"class":49},[36,158517,61],{"class":53},[36,158519,158520,158522,158524,158526,158528,158530],{"class":38,"line":82},[36,158521,50],{"class":49},[36,158523,54],{"class":53},[36,158525,1317],{"class":49},[36,158527,1351],{"class":114},[36,158529,1354],{"class":49},[36,158531,61],{"class":53},[36,158533,158534,158536,158538,158540,158542,158544],{"class":38,"line":88},[36,158535,50],{"class":49},[36,158537,54],{"class":53},[36,158539,1317],{"class":49},[36,158541,1367],{"class":114},[36,158543,1354],{"class":49},[36,158545,61],{"class":53},[19,158547,1374,158548,1378,158550,1296],{},[33,158549,1377],{},[33,158551,115],{},[26,158553,158554],{"className":28,"code":1383,"language":30,"meta":31,"style":31},[33,158555,158556,158566],{"__ignoreMap":31},[36,158557,158558,158560,158562,158564],{"class":38,"line":39},[36,158559,111],{"class":53},[36,158561,115],{"class":114},[36,158563,1394],{"class":49},[36,158565,1397],{"class":42},[36,158567,158568,158570,158572,158574],{"class":38,"line":46},[36,158569,111],{"class":53},[36,158571,1377],{"class":114},[36,158573,1394],{"class":49},[36,158575,1408],{"class":42},[997,158577,1412],{"id":1411},[206,158579,158580,158588],{},[209,158581,158582],{},[212,158583,158584,158586],{},[215,158585,1009],{},[215,158587,223],{},[225,158589,158590,158598,158606],{},[212,158591,158592,158596],{},[230,158593,158594],{},[33,158595,1431],{},[230,158597,1434],{},[212,158599,158600,158604],{},[230,158601,158602],{},[33,158603,1441],{},[230,158605,1444],{},[212,158607,158608,158612],{},[230,158609,158610],{},[33,158611,1451],{},[230,158613,1454],{},[26,158615,158616],{"className":28,"code":1457,"language":30,"meta":31,"style":31},[33,158617,158618,158626,158634,158638,158652,158666],{"__ignoreMap":31},[36,158619,158620,158622,158624],{"class":38,"line":39},[36,158621,111],{"class":53},[36,158623,115],{"class":114},[36,158625,1468],{"class":49},[36,158627,158628,158630,158632],{"class":38,"line":46},[36,158629,1473],{"class":53},[36,158631,115],{"class":114},[36,158633,394],{"class":49},[36,158635,158636],{"class":38,"line":82},[36,158637,546],{"emptyLinePlaceholder":545},[36,158639,158640,158642,158644,158646,158648,158650],{"class":38,"line":88},[36,158641,50],{"class":49},[36,158643,847],{"class":53},[36,158645,1490],{"class":114},[36,158647,1394],{"class":49},[36,158649,1495],{"class":114},[36,158651,1498],{"class":53},[36,158653,158654,158656,158658,158660,158662,158664],{"class":38,"line":195},[36,158655,50],{"class":49},[36,158657,847],{"class":53},[36,158659,1507],{"class":114},[36,158661,1394],{"class":49},[36,158663,1512],{"class":114},[36,158665,1498],{"class":53},[36,158667,158668,158670,158672,158674],{"class":38,"line":1517},[36,158669,50],{"class":49},[36,158671,54],{"class":53},[36,158673,1451],{"class":114},[36,158675,1498],{"class":53},[14,158677,1529],{"id":1528},[19,158679,1532],{},[26,158681,158682],{"className":28,"code":1535,"language":30,"meta":31,"style":31},[33,158683,158684,158692,158700,158708],{"__ignoreMap":31},[36,158685,158686,158688,158690],{"class":38,"line":39},[36,158687,1542],{"class":53},[36,158689,115],{"class":114},[36,158691,1547],{"class":57},[36,158693,158694,158696,158698],{"class":38,"line":46},[36,158695,1552],{"class":53},[36,158697,115],{"class":114},[36,158699,365],{"class":57},[36,158701,158702,158704,158706],{"class":38,"line":82},[36,158703,1561],{"class":53},[36,158705,115],{"class":114},[36,158707,1566],{"class":57},[36,158709,158710],{"class":38,"line":88},[36,158711,1571],{"class":57},[19,158713,1574],{},[26,158715,158716],{"className":28,"code":1577,"language":30,"meta":31,"style":31},[33,158717,158718,158726,158734],{"__ignoreMap":31},[36,158719,158720,158722,158724],{"class":38,"line":39},[36,158721,1584],{"class":53},[36,158723,115],{"class":114},[36,158725,1589],{"class":57},[36,158727,158728,158730,158732],{"class":38,"line":46},[36,158729,1594],{"class":53},[36,158731,115],{"class":114},[36,158733,1599],{"class":57},[36,158735,158736,158738,158740,158742,158744,158746,158748],{"class":38,"line":82},[36,158737,1604],{"class":53},[36,158739,115],{"class":114},[36,158741,1609],{"class":57},[36,158743,1612],{"class":49},[36,158745,1615],{"class":57},[36,158747,1612],{"class":49},[36,158749,1620],{"class":57},[19,158751,1623],{},[206,158753,158754,158762],{},[209,158755,158756],{},[212,158757,158758,158760],{},[215,158759,1632],{},[215,158761,1635],{},[225,158763,158764,158772,158780,158788,158796],{},[212,158765,158766,158770],{},[230,158767,158768],{},[33,158769,1644],{},[230,158771,1647],{},[212,158773,158774,158778],{},[230,158775,158776],{},[33,158777,1654],{},[230,158779,1657],{},[212,158781,158782,158786],{},[230,158783,158784],{},[33,158785,1664],{},[230,158787,1667],{},[212,158789,158790,158794],{},[230,158791,158792],{},[33,158793,1612],{},[230,158795,1676],{},[212,158797,158798,158802],{},[230,158799,158800],{},[33,158801,1683],{},[230,158803,1686],{},[14,158805,1690],{"id":1689},[26,158807,158808],{"className":28,"code":1693,"language":30,"meta":31,"style":31},[33,158809,158810,158818],{"__ignoreMap":31},[36,158811,158812,158814,158816],{"class":38,"line":39},[36,158813,360],{"class":53},[36,158815,115],{"class":114},[36,158817,365],{"class":57},[36,158819,158820,158822,158824,158826,158828],{"class":38,"line":46},[36,158821,50],{"class":49},[36,158823,54],{"class":53},[36,158825,1712],{"class":57},[36,158827,730],{"class":114},[36,158829,1717],{"class":53},[19,158831,1720],{},[26,158833,158834],{"className":28,"code":1723,"language":30,"meta":31,"style":31},[33,158835,158836,158844],{"__ignoreMap":31},[36,158837,158838,158840,158842],{"class":38,"line":39},[36,158839,111],{"class":53},[36,158841,115],{"class":114},[36,158843,374],{"class":49},[36,158845,158846,158848,158850,158852,158854,158856],{"class":38,"line":46},[36,158847,50],{"class":49},[36,158849,54],{"class":53},[36,158851,1742],{"class":57},[36,158853,730],{"class":114},[36,158855,1747],{"class":49},[36,158857,1750],{"class":53},[19,158859,1753],{},[14,158861,1757],{"id":1756},[997,158863,1761],{"id":1760},[26,158865,158866],{"className":28,"code":1764,"language":30,"meta":31,"style":31},[33,158867,158868,158876,158884,158892,158896],{"__ignoreMap":31},[36,158869,158870,158872,158874],{"class":38,"line":39},[36,158871,360],{"class":53},[36,158873,115],{"class":114},[36,158875,365],{"class":57},[36,158877,158878,158880,158882],{"class":38,"line":46},[36,158879,111],{"class":53},[36,158881,115],{"class":114},[36,158883,374],{"class":49},[36,158885,158886,158888,158890],{"class":38,"line":82},[36,158887,407],{"class":53},[36,158889,115],{"class":114},[36,158891,1791],{"class":49},[36,158893,158894],{"class":38,"line":88},[36,158895,546],{"emptyLinePlaceholder":545},[36,158897,158898,158900,158902,158904,158906,158908,158910,158912,158914,158916,158918],{"class":38,"line":195},[36,158899,50],{"class":49},[36,158901,54],{"class":53},[36,158903,1804],{"class":57},[36,158905,1807],{"class":49},[36,158907,1810],{"class":57},[36,158909,1813],{"class":49},[36,158911,1816],{"class":57},[36,158913,1819],{"class":49},[36,158915,1822],{"class":57},[36,158917,1173],{"class":114},[36,158919,1827],{"class":53},[19,158921,1830],{},[206,158923,158924,158932],{},[209,158925,158926],{},[212,158927,158928,158930],{},[215,158929,1839],{},[215,158931,223],{},[225,158933,158934,158942,158950],{},[212,158935,158936,158940],{},[230,158937,158938],{},[33,158939,1807],{},[230,158941,263],{},[212,158943,158944,158948],{},[230,158945,158946],{},[33,158947,1813],{},[230,158949,239],{},[212,158951,158952,158956],{},[230,158953,158954],{},[33,158955,1866],{},[230,158957,251],{},[19,158959,1871],{},[26,158961,158962],{"className":28,"code":1874,"language":30,"meta":31,"style":31},[33,158963,158964,158972],{"__ignoreMap":31},[36,158965,158966,158968,158970],{"class":38,"line":39},[36,158967,1881],{"class":53},[36,158969,115],{"class":114},[36,158971,1886],{"class":49},[36,158973,158974,158976,158978,158980,158982,158984,158986],{"class":38,"line":46},[36,158975,50],{"class":49},[36,158977,54],{"class":53},[36,158979,1822],{"class":57},[36,158981,1897],{"class":49},[36,158983,1822],{"class":57},[36,158985,1173],{"class":114},[36,158987,1904],{"class":53},[997,158989,1908],{"id":1907},[26,158991,158992],{"className":28,"code":1911,"language":30,"meta":31,"style":31},[33,158993,158994,159002,159010,159014,159032,159050],{"__ignoreMap":31},[36,158995,158996,158998,159000],{"class":38,"line":39},[36,158997,360],{"class":53},[36,158999,115],{"class":114},[36,159001,365],{"class":57},[36,159003,159004,159006,159008],{"class":38,"line":46},[36,159005,111],{"class":53},[36,159007,115],{"class":114},[36,159009,374],{"class":49},[36,159011,159012],{"class":38,"line":82},[36,159013,546],{"emptyLinePlaceholder":545},[36,159015,159016,159018,159020,159022,159024,159026,159028,159030],{"class":38,"line":88},[36,159017,50],{"class":49},[36,159019,54],{"class":53},[36,159021,1804],{"class":57},[36,159023,1944],{"class":49},[36,159025,1810],{"class":57},[36,159027,1944],{"class":49},[36,159029,1822],{"class":57},[36,159031,1953],{"class":53},[36,159033,159034,159036,159038,159040,159042,159044,159046,159048],{"class":38,"line":195},[36,159035,50],{"class":49},[36,159037,54],{"class":53},[36,159039,1804],{"class":57},[36,159041,1964],{"class":49},[36,159043,1810],{"class":57},[36,159045,1969],{"class":49},[36,159047,1822],{"class":57},[36,159049,1953],{"class":53},[36,159051,159052,159054,159056,159058,159060,159062,159064,159066,159068,159070,159072,159074,159076,159078],{"class":38,"line":1517},[36,159053,50],{"class":49},[36,159055,54],{"class":53},[36,159057,1804],{"class":57},[36,159059,1984],{"class":49},[36,159061,1810],{"class":57},[36,159063,1989],{"class":49},[36,159065,1822],{"class":57},[36,159067,1994],{"class":53},[36,159069,1998],{"class":1997},[36,159071,115],{"class":114},[36,159073,2003],{"class":53},[36,159075,2006],{"class":1997},[36,159077,115],{"class":114},[36,159079,2011],{"class":53},[997,159081,2015],{"id":2014},[19,159083,2018],{},[26,159085,159086],{"className":28,"code":2021,"language":30,"meta":31,"style":31},[33,159087,159088,159096,159104,159112,159116],{"__ignoreMap":31},[36,159089,159090,159092,159094],{"class":38,"line":39},[36,159091,360],{"class":53},[36,159093,115],{"class":114},[36,159095,365],{"class":57},[36,159097,159098,159100,159102],{"class":38,"line":46},[36,159099,111],{"class":53},[36,159101,115],{"class":114},[36,159103,374],{"class":49},[36,159105,159106,159108,159110],{"class":38,"line":82},[36,159107,407],{"class":53},[36,159109,115],{"class":114},[36,159111,1791],{"class":49},[36,159113,159114],{"class":38,"line":88},[36,159115,546],{"emptyLinePlaceholder":545},[36,159117,159118,159120,159122,159124,159126,159128,159130,159132,159134,159136,159138,159140,159142,159144,159146,159148,159150,159152],{"class":38,"line":195},[36,159119,50],{"class":49},[36,159121,54],{"class":53},[36,159123,2060],{"class":114},[36,159125,1804],{"class":57},[36,159127,2065],{"class":49},[36,159129,1998],{"class":53},[36,159131,2070],{"class":49},[36,159133,1810],{"class":57},[36,159135,2065],{"class":49},[36,159137,2006],{"class":53},[36,159139,2070],{"class":49},[36,159141,1816],{"class":57},[36,159143,2065],{"class":49},[36,159145,2085],{"class":53},[36,159147,2088],{"class":114},[36,159149,2070],{"class":49},[36,159151,1822],{"class":57},[36,159153,61],{"class":53},[19,159155,2097],{},[26,159157,159158],{"className":28,"code":2100,"language":30,"meta":31,"style":31},[33,159159,159160,159168,159176],{"__ignoreMap":31},[36,159161,159162,159164,159166],{"class":38,"line":39},[36,159163,1881],{"class":53},[36,159165,115],{"class":114},[36,159167,2111],{"class":49},[36,159169,159170,159172,159174],{"class":38,"line":46},[36,159171,2116],{"class":53},[36,159173,115],{"class":114},[36,159175,1227],{"class":49},[36,159177,159178,159180,159182,159184,159186,159188,159190,159192,159194,159196,159198],{"class":38,"line":82},[36,159179,50],{"class":49},[36,159181,54],{"class":53},[36,159183,2060],{"class":114},[36,159185,2131],{"class":57},[36,159187,2065],{"class":49},[36,159189,1881],{"class":53},[36,159191,1050],{"class":114},[36,159193,2140],{"class":53},[36,159195,2070],{"class":49},[36,159197,2145],{"class":57},[36,159199,61],{"class":53},[14,159201,2151],{"id":2150},[19,159203,159204,2157],{},[33,159205,2156],{},[26,159207,159208],{"className":28,"code":2160,"language":30,"meta":31,"style":31},[33,159209,159210,159224],{"__ignoreMap":31},[36,159211,159212,159214,159216,159218,159220,159222],{"class":38,"line":39},[36,159213,360],{"class":53},[36,159215,115],{"class":114},[36,159217,871],{"class":49},[36,159219,54],{"class":53},[36,159221,2175],{"class":57},[36,159223,61],{"class":53},[36,159225,159226,159228,159230,159232,159234,159236,159238,159240,159242],{"class":38,"line":46},[36,159227,50],{"class":49},[36,159229,54],{"class":53},[36,159231,2060],{"class":114},[36,159233,2188],{"class":57},[36,159235,2065],{"class":49},[36,159237,1998],{"class":53},[36,159239,2070],{"class":49},[36,159241,1822],{"class":57},[36,159243,61],{"class":53},[19,159245,2201],{},[26,159247,159248],{"className":28,"code":2204,"language":30,"meta":31,"style":31},[33,159249,159250,159268],{"__ignoreMap":31},[36,159251,159252,159254,159256,159258,159260,159262,159264,159266],{"class":38,"line":39},[36,159253,111],{"class":53},[36,159255,115],{"class":114},[36,159257,837],{"class":49},[36,159259,54],{"class":53},[36,159261,913],{"class":49},[36,159263,54],{"class":53},[36,159265,2223],{"class":57},[36,159267,625],{"class":53},[36,159269,159270,159272,159274,159276,159278,159280,159282,159284,159286,159288],{"class":38,"line":46},[36,159271,50],{"class":49},[36,159273,54],{"class":53},[36,159275,2060],{"class":114},[36,159277,2236],{"class":57},[36,159279,2065],{"class":49},[36,159281,111],{"class":53},[36,159283,121],{"class":114},[36,159285,2245],{"class":49},[36,159287,2248],{"class":57},[36,159289,61],{"class":53},[19,159291,2253],{},[26,159293,159294],{"className":28,"code":2256,"language":30,"meta":31,"style":31},[33,159295,159296,159314],{"__ignoreMap":31},[36,159297,159298,159300,159302,159304,159306,159308,159310,159312],{"class":38,"line":39},[36,159299,379],{"class":53},[36,159301,115],{"class":114},[36,159303,985],{"class":49},[36,159305,54],{"class":53},[36,159307,913],{"class":49},[36,159309,54],{"class":53},[36,159311,2275],{"class":57},[36,159313,625],{"class":53},[36,159315,159316,159318,159320,159322,159324,159326,159328,159330,159332,159334],{"class":38,"line":46},[36,159317,50],{"class":49},[36,159319,54],{"class":53},[36,159321,2060],{"class":114},[36,159323,2288],{"class":57},[36,159325,2065],{"class":49},[36,159327,2293],{"class":53},[36,159329,2296],{"class":114},[36,159331,2070],{"class":49},[36,159333,2301],{"class":57},[36,159335,61],{"class":53},[14,159337,2307],{"id":2306},[19,159339,2310],{},[433,159341,159342,159344,159346,159348],{},[436,159343,2315],{},[436,159345,2318],{},[436,159347,2321],{},[436,159349,2324],{},[19,159351,2327],{},[26,159353,159354],{"className":28,"code":2330,"language":30,"meta":31,"style":31},[33,159355,159356,159374,159392,159410,159414,159430,159434,159456,159476,159496],{"__ignoreMap":31},[36,159357,159358,159360,159362,159364,159366,159368,159370,159372],{"class":38,"line":39},[36,159359,1881],{"class":53},[36,159361,115],{"class":114},[36,159363,985],{"class":49},[36,159365,54],{"class":53},[36,159367,913],{"class":49},[36,159369,54],{"class":53},[36,159371,2349],{"class":57},[36,159373,625],{"class":53},[36,159375,159376,159378,159380,159382,159384,159386,159388,159390],{"class":38,"line":46},[36,159377,2116],{"class":53},[36,159379,115],{"class":114},[36,159381,837],{"class":49},[36,159383,54],{"class":53},[36,159385,913],{"class":49},[36,159387,54],{"class":53},[36,159389,2368],{"class":57},[36,159391,625],{"class":53},[36,159393,159394,159396,159398,159400,159402,159404,159406,159408],{"class":38,"line":82},[36,159395,2375],{"class":53},[36,159397,115],{"class":114},[36,159399,985],{"class":49},[36,159401,54],{"class":53},[36,159403,913],{"class":49},[36,159405,54],{"class":53},[36,159407,2388],{"class":57},[36,159409,625],{"class":53},[36,159411,159412],{"class":38,"line":88},[36,159413,546],{"emptyLinePlaceholder":545},[36,159415,159416,159418,159420,159422,159424,159426,159428],{"class":38,"line":195},[36,159417,2399],{"class":53},[36,159419,115],{"class":114},[36,159421,2404],{"class":53},[36,159423,1050],{"class":114},[36,159425,2409],{"class":53},[36,159427,1050],{"class":114},[36,159429,2414],{"class":53},[36,159431,159432],{"class":38,"line":1517},[36,159433,546],{"emptyLinePlaceholder":545},[36,159435,159436,159438,159440,159442,159444,159446,159448,159450,159452,159454],{"class":38,"line":2421},[36,159437,50],{"class":49},[36,159439,54],{"class":53},[36,159441,2060],{"class":114},[36,159443,2430],{"class":57},[36,159445,2065],{"class":49},[36,159447,2435],{"class":53},[36,159449,2296],{"class":114},[36,159451,2070],{"class":49},[36,159453,1822],{"class":57},[36,159455,61],{"class":53},[36,159457,159458,159460,159462,159464,159466,159468,159470,159472,159474],{"class":38,"line":2446},[36,159459,50],{"class":49},[36,159461,54],{"class":53},[36,159463,2060],{"class":114},[36,159465,2455],{"class":57},[36,159467,2065],{"class":49},[36,159469,2460],{"class":53},[36,159471,2070],{"class":49},[36,159473,1822],{"class":57},[36,159475,61],{"class":53},[36,159477,159478,159480,159482,159484,159486,159488,159490,159492,159494],{"class":38,"line":2469},[36,159479,50],{"class":49},[36,159481,54],{"class":53},[36,159483,2060],{"class":114},[36,159485,2478],{"class":57},[36,159487,2065],{"class":49},[36,159489,2483],{"class":53},[36,159491,2070],{"class":49},[36,159493,1822],{"class":57},[36,159495,61],{"class":53},[36,159497,159498,159500,159502,159504,159506,159508,159510,159512,159514,159516],{"class":38,"line":2492},[36,159499,50],{"class":49},[36,159501,54],{"class":53},[36,159503,2060],{"class":114},[36,159505,2501],{"class":57},[36,159507,2065],{"class":49},[36,159509,2506],{"class":53},[36,159511,2296],{"class":114},[36,159513,2070],{"class":49},[36,159515,2145],{"class":57},[36,159517,61],{"class":53},[14,159519,2518],{"id":2517},[433,159521,159522,159526,159530,159536,159538],{},[436,159523,159524,2525],{},[33,159525,2156],{},[436,159527,2528,159528,1296],{},[33,159529,2531],{},[436,159531,159532,2536,159534,2539],{},[33,159533,115],{},[33,159535,1377],{},[436,159537,2542],{},[436,159539,2545],{},[26,159541,159542],{"className":28,"code":2548,"language":30,"meta":31,"style":31},[33,159543,159544],{"__ignoreMap":31},[36,159545,159546,159548,159550,159552,159554,159556],{"class":38,"line":39},[36,159547,50],{"class":49},[36,159549,54],{"class":53},[36,159551,2559],{"class":49},[36,159553,730],{"class":114},[36,159555,2564],{"class":49},[36,159557,61],{"class":53},[19,159559,2569,159560,2573],{},[33,159561,2572],{},[14,159563,2577],{"id":2576},[433,159565,159566,159568,159570,159572,159574],{},[436,159567,2582],{},[436,159569,2585],{},[436,159571,2588],{},[436,159573,2591],{},[436,159575,2594],{},[26,159577,159579],{"className":159578,"code":2598,"language":690,"meta":31},[688],[33,159580,2598],{"__ignoreMap":31},[2602,159582,2604],{},{"title":31,"searchDepth":46,"depth":46,"links":159584},[159585,159586,159587,159588,159589,159590,159591,159597,159598,159599,159604,159605,159606,159607],{"id":16,"depth":46,"text":17},{"id":152,"depth":46,"text":153},{"id":346,"depth":46,"text":347},{"id":427,"depth":46,"text":428},{"id":596,"depth":46,"text":597},{"id":760,"depth":46,"text":761},{"id":994,"depth":46,"text":995,"children":159592},[159593,159594,159595,159596],{"id":999,"depth":82,"text":1000},{"id":1202,"depth":82,"text":1203},{"id":1299,"depth":82,"text":1300},{"id":1411,"depth":82,"text":1412},{"id":1528,"depth":46,"text":1529},{"id":1689,"depth":46,"text":1690},{"id":1756,"depth":46,"text":1757,"children":159600},[159601,159602,159603],{"id":1760,"depth":82,"text":1761},{"id":1907,"depth":82,"text":1908},{"id":2014,"depth":82,"text":2015},{"id":2150,"depth":46,"text":2151},{"id":2306,"depth":46,"text":2307},{"id":2517,"depth":46,"text":2518},{"id":2576,"depth":46,"text":2577},{},{"title":5,"description":2630},{"id":159611,"title":159612,"body":159613,"description":2630,"extension":2631,"meta":161249,"navigation":545,"path":161250,"seo":161251,"stem":161252,"__hash__":161253},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159614,"toc":161230},[159615,159618,159622,159625,159640,159643,159671,159675,159725,159727,159743,159746,159772,159775,159779,159846,159849,159865,159869,159872,159990,159993,160000,160049,160055,160059,160062,160175,160178,160182,160186,160189,160239,160243,160246,160296,160300,160303,160341,160345,160348,160394,160397,160432,160436,160441,160444,160490,160492,160559,160563,160569,160680,160689,160693,160695,160706,160708,160874,160878,160880,160894,160896,161110,161114,161133,161150,161153,161199,161203,161227],[10,159616,159612],{"id":159617},"_3-判断语句",[14,159619,159621],{"id":159620},"_31-布尔值","3.1 布尔值",[19,159623,159624],{},"判断语句依赖布尔值：",[26,159626,159628],{"className":28,"code":159627,"language":30,"meta":31,"style":31},"True\nFalse\n",[33,159629,159630,159635],{"__ignoreMap":31},[36,159631,159632],{"class":38,"line":39},[36,159633,159634],{"class":49},"True\n",[36,159636,159637],{"class":38,"line":46},[36,159638,159639],{"class":49},"False\n",[19,159641,159642],{},"比较表达式会产生布尔值：",[26,159644,159646],{"className":28,"code":159645,"language":30,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,159647,159648,159656],{"__ignoreMap":31},[36,159649,159650,159652,159654],{"class":38,"line":39},[36,159651,111],{"class":53},[36,159653,115],{"class":114},[36,159655,374],{"class":49},[36,159657,159658,159660,159662,159664,159666,159668],{"class":38,"line":46},[36,159659,50],{"class":49},[36,159661,847],{"class":53},[36,159663,1490],{"class":114},[36,159665,1394],{"class":49},[36,159667,754],{"class":53},[36,159669,159670],{"class":42},"# True\n",[14,159672,159674],{"id":159673},"_32-if基础语法","3.2 if基础语法",[26,159676,159678],{"className":28,"code":159677,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,159679,159680,159698,159702,159714],{"__ignoreMap":31},[36,159681,159682,159684,159686,159688,159690,159692,159694,159696],{"class":38,"line":39},[36,159683,111],{"class":53},[36,159685,115],{"class":114},[36,159687,837],{"class":49},[36,159689,54],{"class":53},[36,159691,913],{"class":49},[36,159693,54],{"class":53},[36,159695,2223],{"class":57},[36,159697,625],{"class":53},[36,159699,159700],{"class":38,"line":46},[36,159701,546],{"emptyLinePlaceholder":545},[36,159703,159704,159706,159708,159710,159712],{"class":38,"line":82},[36,159705,4069],{"class":114},[36,159707,118],{"class":53},[36,159709,1490],{"class":114},[36,159711,1394],{"class":49},[36,159713,6270],{"class":53},[36,159715,159716,159718,159720,159723],{"class":38,"line":88},[36,159717,33803],{"class":49},[36,159719,54],{"class":53},[36,159721,159722],{"class":57},"\"可以进入网吧\"",[36,159724,61],{"class":53},[19,159726,695],{},[433,159728,159729,159734,159737,159740],{},[436,159730,159731,159733],{},[33,159732,4069],{}," 后面是条件表达式。",[436,159735,159736],{},"条件后面必须写冒号。",[436,159738,159739],{},"条件成立时执行缩进代码块。",[436,159741,159742],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159744,159745],{},"错误示例：",[26,159747,159749],{"className":28,"code":159748,"language":30,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,159750,159751,159761],{"__ignoreMap":31},[36,159752,159753,159755,159757,159759],{"class":38,"line":39},[36,159754,4069],{"class":114},[36,159756,118],{"class":53},[36,159758,1490],{"class":114},[36,159760,374],{"class":49},[36,159762,159763,159765,159767,159770],{"class":38,"line":46},[36,159764,33803],{"class":49},[36,159766,54],{"class":53},[36,159768,159769],{"class":57},"\"可以进入\"",[36,159771,61],{"class":53},[19,159773,159774],{},"缺少冒号。",[14,159776,159778],{"id":159777},"_33-if-else","3.3 if else",[26,159780,159782],{"className":28,"code":159781,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,159783,159784,159802,159806,159818,159829,159835],{"__ignoreMap":31},[36,159785,159786,159788,159790,159792,159794,159796,159798,159800],{"class":38,"line":39},[36,159787,111],{"class":53},[36,159789,115],{"class":114},[36,159791,837],{"class":49},[36,159793,54],{"class":53},[36,159795,913],{"class":49},[36,159797,54],{"class":53},[36,159799,2223],{"class":57},[36,159801,625],{"class":53},[36,159803,159804],{"class":38,"line":46},[36,159805,546],{"emptyLinePlaceholder":545},[36,159807,159808,159810,159812,159814,159816],{"class":38,"line":82},[36,159809,4069],{"class":114},[36,159811,118],{"class":53},[36,159813,1490],{"class":114},[36,159815,1394],{"class":49},[36,159817,6270],{"class":53},[36,159819,159820,159822,159824,159827],{"class":38,"line":88},[36,159821,33803],{"class":49},[36,159823,54],{"class":53},[36,159825,159826],{"class":57},"\"成年人\"",[36,159828,61],{"class":53},[36,159830,159831,159833],{"class":38,"line":195},[36,159832,4239],{"class":114},[36,159834,6270],{"class":53},[36,159836,159837,159839,159841,159844],{"class":38,"line":1517},[36,159838,33803],{"class":49},[36,159840,54],{"class":53},[36,159842,159843],{"class":57},"\"未成年人\"",[36,159845,61],{"class":53},[19,159847,159848],{},"执行逻辑：",[433,159850,159851,159857,159862],{},[436,159852,159853,159854,159856],{},"条件成立，执行 ",[33,159855,4069],{}," 代码块。",[436,159858,159859,159860,159856],{},"条件不成立，执行 ",[33,159861,4239],{},[436,159863,159864],{},"两个代码块只会执行其中一个。",[14,159866,159868],{"id":159867},"_34-if-elif-else","3.4 if elif else",[19,159870,159871],{},"多条件判断：",[26,159873,159875],{"className":28,"code":159874,"language":30,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,159876,159877,159895,159899,159913,159924,159938,159949,159962,159973,159979],{"__ignoreMap":31},[36,159878,159879,159881,159883,159885,159887,159889,159891,159893],{"class":38,"line":39},[36,159880,407],{"class":53},[36,159882,115],{"class":114},[36,159884,837],{"class":49},[36,159886,54],{"class":53},[36,159888,913],{"class":49},[36,159890,54],{"class":53},[36,159892,154856],{"class":57},[36,159894,625],{"class":53},[36,159896,159897],{"class":38,"line":46},[36,159898,546],{"emptyLinePlaceholder":545},[36,159900,159901,159903,159906,159908,159911],{"class":38,"line":82},[36,159902,4069],{"class":114},[36,159904,159905],{"class":53}," score ",[36,159907,1490],{"class":114},[36,159909,159910],{"class":49}," 90",[36,159912,6270],{"class":53},[36,159914,159915,159917,159919,159922],{"class":38,"line":88},[36,159916,33803],{"class":49},[36,159918,54],{"class":53},[36,159920,159921],{"class":57},"\"优秀\"",[36,159923,61],{"class":53},[36,159925,159926,159929,159931,159933,159936],{"class":38,"line":195},[36,159927,159928],{"class":114},"elif",[36,159930,159905],{"class":53},[36,159932,1490],{"class":114},[36,159934,159935],{"class":49}," 80",[36,159937,6270],{"class":53},[36,159939,159940,159942,159944,159947],{"class":38,"line":1517},[36,159941,33803],{"class":49},[36,159943,54],{"class":53},[36,159945,159946],{"class":57},"\"良好\"",[36,159948,61],{"class":53},[36,159950,159951,159953,159955,159957,159960],{"class":38,"line":2421},[36,159952,159928],{"class":114},[36,159954,159905],{"class":53},[36,159956,1490],{"class":114},[36,159958,159959],{"class":49}," 60",[36,159961,6270],{"class":53},[36,159963,159964,159966,159968,159971],{"class":38,"line":2446},[36,159965,33803],{"class":49},[36,159967,54],{"class":53},[36,159969,159970],{"class":57},"\"及格\"",[36,159972,61],{"class":53},[36,159974,159975,159977],{"class":38,"line":2469},[36,159976,4239],{"class":114},[36,159978,6270],{"class":53},[36,159980,159981,159983,159985,159988],{"class":38,"line":2492},[36,159982,33803],{"class":49},[36,159984,54],{"class":53},[36,159986,159987],{"class":57},"\"不及格\"",[36,159989,61],{"class":53},[19,159991,159992],{},"注意判断顺序很重要。",[19,159994,159995,159996,159999],{},"如果把 ",[33,159997,159998],{},"score >= 60"," 放在最前面：",[26,160001,160003],{"className":28,"code":160002,"language":30,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,160004,160005,160017,160027,160039],{"__ignoreMap":31},[36,160006,160007,160009,160011,160013,160015],{"class":38,"line":39},[36,160008,4069],{"class":114},[36,160010,159905],{"class":53},[36,160012,1490],{"class":114},[36,160014,159959],{"class":49},[36,160016,6270],{"class":53},[36,160018,160019,160021,160023,160025],{"class":38,"line":46},[36,160020,33803],{"class":49},[36,160022,54],{"class":53},[36,160024,159970],{"class":57},[36,160026,61],{"class":53},[36,160028,160029,160031,160033,160035,160037],{"class":38,"line":82},[36,160030,159928],{"class":114},[36,160032,159905],{"class":53},[36,160034,1490],{"class":114},[36,160036,159910],{"class":49},[36,160038,6270],{"class":53},[36,160040,160041,160043,160045,160047],{"class":38,"line":88},[36,160042,33803],{"class":49},[36,160044,54],{"class":53},[36,160046,159921],{"class":57},[36,160048,61],{"class":53},[19,160050,160051,160052,160054],{},"成绩 95 会先满足 ",[33,160053,159998],{},"，后面的优秀分支就不会执行。",[14,160056,160058],{"id":160057},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160060,160061],{},"嵌套判断就是在一个判断内部再写判断。",[26,160063,160065],{"className":28,"code":160064,"language":30,"meta":31,"style":31},"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",[33,160066,160067,160085,160100,160104,160116,160130,160140,160147,160158,160164],{"__ignoreMap":31},[36,160068,160069,160071,160073,160075,160077,160079,160081,160083],{"class":38,"line":39},[36,160070,111],{"class":53},[36,160072,115],{"class":114},[36,160074,837],{"class":49},[36,160076,54],{"class":53},[36,160078,913],{"class":49},[36,160080,54],{"class":53},[36,160082,2223],{"class":57},[36,160084,625],{"class":53},[36,160086,160087,160089,160091,160093,160095,160098],{"class":38,"line":46},[36,160088,1473],{"class":53},[36,160090,115],{"class":114},[36,160092,871],{"class":49},[36,160094,54],{"class":53},[36,160096,160097],{"class":57},"\"是否有票(y\u002Fn):\"",[36,160099,61],{"class":53},[36,160101,160102],{"class":38,"line":82},[36,160103,546],{"emptyLinePlaceholder":545},[36,160105,160106,160108,160110,160112,160114],{"class":38,"line":88},[36,160107,4069],{"class":114},[36,160109,118],{"class":53},[36,160111,1490],{"class":114},[36,160113,1394],{"class":49},[36,160115,6270],{"class":53},[36,160117,160118,160120,160123,160125,160128],{"class":38,"line":195},[36,160119,5632],{"class":114},[36,160121,160122],{"class":53}," has_ticket ",[36,160124,1377],{"class":114},[36,160126,160127],{"class":57}," \"y\"",[36,160129,6270],{"class":53},[36,160131,160132,160134,160136,160138],{"class":38,"line":1517},[36,160133,34954],{"class":49},[36,160135,54],{"class":53},[36,160137,159769],{"class":57},[36,160139,61],{"class":53},[36,160141,160142,160145],{"class":38,"line":2421},[36,160143,160144],{"class":114},"    else",[36,160146,6270],{"class":53},[36,160148,160149,160151,160153,160156],{"class":38,"line":2446},[36,160150,34954],{"class":49},[36,160152,54],{"class":53},[36,160154,160155],{"class":57},"\"请先买票\"",[36,160157,61],{"class":53},[36,160159,160160,160162],{"class":38,"line":2469},[36,160161,4239],{"class":114},[36,160163,6270],{"class":53},[36,160165,160166,160168,160170,160173],{"class":38,"line":2492},[36,160167,33803],{"class":49},[36,160169,54],{"class":53},[36,160171,160172],{"class":57},"\"未成年人禁止进入\"",[36,160174,61],{"class":53},[19,160176,160177],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160179,160181],{"id":160180},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[997,160183,160185],{"id":160184},"_361-and","3.6.1 and",[19,160187,160188],{},"两个条件都成立才成立。",[26,160190,160192],{"className":28,"code":160191,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,160193,160194,160202,160210,160214,160229],{"__ignoreMap":31},[36,160195,160196,160198,160200],{"class":38,"line":39},[36,160197,111],{"class":53},[36,160199,115],{"class":114},[36,160201,1468],{"class":49},[36,160203,160204,160206,160208],{"class":38,"line":46},[36,160205,1473],{"class":53},[36,160207,115],{"class":114},[36,160209,394],{"class":49},[36,160211,160212],{"class":38,"line":82},[36,160213,546],{"emptyLinePlaceholder":545},[36,160215,160216,160218,160220,160222,160224,160226],{"class":38,"line":88},[36,160217,4069],{"class":114},[36,160219,118],{"class":53},[36,160221,1490],{"class":114},[36,160223,1394],{"class":49},[36,160225,1495],{"class":114},[36,160227,160228],{"class":53}," has_ticket:\n",[36,160230,160231,160233,160235,160237],{"class":38,"line":195},[36,160232,33803],{"class":49},[36,160234,54],{"class":53},[36,160236,159769],{"class":57},[36,160238,61],{"class":53},[997,160240,160242],{"id":160241},"_362-or","3.6.2 or",[19,160244,160245],{},"只要一个条件成立就成立。",[26,160247,160249],{"className":28,"code":160248,"language":30,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,160250,160251,160260,160269,160273,160285],{"__ignoreMap":31},[36,160252,160253,160256,160258],{"class":38,"line":39},[36,160254,160255],{"class":53},"is_vip ",[36,160257,115],{"class":114},[36,160259,590],{"class":49},[36,160261,160262,160265,160267],{"class":38,"line":46},[36,160263,160264],{"class":53},"coupon ",[36,160266,115],{"class":114},[36,160268,394],{"class":49},[36,160270,160271],{"class":38,"line":82},[36,160272,546],{"emptyLinePlaceholder":545},[36,160274,160275,160277,160280,160282],{"class":38,"line":88},[36,160276,4069],{"class":114},[36,160278,160279],{"class":53}," is_vip ",[36,160281,1441],{"class":114},[36,160283,160284],{"class":53}," coupon:\n",[36,160286,160287,160289,160291,160294],{"class":38,"line":195},[36,160288,33803],{"class":49},[36,160290,54],{"class":53},[36,160292,160293],{"class":57},"\"可以享受优惠\"",[36,160295,61],{"class":53},[997,160297,160299],{"id":160298},"_363-not","3.6.3 not",[19,160301,160302],{},"取反。",[26,160304,160306],{"className":28,"code":160305,"language":30,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,160307,160308,160317,160321,160330],{"__ignoreMap":31},[36,160309,160310,160313,160315],{"class":38,"line":39},[36,160311,160312],{"class":53},"is_closed ",[36,160314,115],{"class":114},[36,160316,590],{"class":49},[36,160318,160319],{"class":38,"line":46},[36,160320,546],{"emptyLinePlaceholder":545},[36,160322,160323,160325,160327],{"class":38,"line":82},[36,160324,4069],{"class":114},[36,160326,41430],{"class":114},[36,160328,160329],{"class":53}," is_closed:\n",[36,160331,160332,160334,160336,160339],{"class":38,"line":88},[36,160333,33803],{"class":49},[36,160335,54],{"class":53},[36,160337,160338],{"class":57},"\"店铺营业中\"",[36,160340,61],{"class":53},[14,160342,160344],{"id":160343},"_37-链式比较","3.7 链式比较",[19,160346,160347],{},"Python 支持链式比较：",[26,160349,160351],{"className":28,"code":160350,"language":30,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,160352,160353,160362,160366,160383],{"__ignoreMap":31},[36,160354,160355,160357,160359],{"class":38,"line":39},[36,160356,407],{"class":53},[36,160358,115],{"class":114},[36,160360,160361],{"class":49}," 85\n",[36,160363,160364],{"class":38,"line":46},[36,160365,546],{"emptyLinePlaceholder":545},[36,160367,160368,160370,160372,160375,160377,160379,160381],{"class":38,"line":82},[36,160369,4069],{"class":114},[36,160371,6624],{"class":49},[36,160373,160374],{"class":114}," \u003C=",[36,160376,159905],{"class":53},[36,160378,4126],{"class":114},[36,160380,8282],{"class":49},[36,160382,6270],{"class":53},[36,160384,160385,160387,160389,160392],{"class":38,"line":88},[36,160386,33803],{"class":49},[36,160388,54],{"class":53},[36,160390,160391],{"class":57},"\"成绩合法\"",[36,160393,61],{"class":53},[19,160395,160396],{},"等价于：",[26,160398,160400],{"className":28,"code":160399,"language":30,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,160401,160402,160422],{"__ignoreMap":31},[36,160403,160404,160406,160408,160410,160412,160414,160416,160418,160420],{"class":38,"line":39},[36,160405,4069],{"class":114},[36,160407,159905],{"class":53},[36,160409,1490],{"class":114},[36,160411,6624],{"class":49},[36,160413,1495],{"class":114},[36,160415,159905],{"class":53},[36,160417,4126],{"class":114},[36,160419,8282],{"class":49},[36,160421,6270],{"class":53},[36,160423,160424,160426,160428,160430],{"class":38,"line":46},[36,160425,33803],{"class":49},[36,160427,54],{"class":53},[36,160429,160391],{"class":57},[36,160431,61],{"class":53},[14,160433,160435],{"id":160434},"_38-真值和假值","3.8 真值和假值",[19,160437,118933,160438,160440],{},[33,160439,4069],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160442,160443],{},"假值：",[26,160445,160447],{"className":28,"code":160446,"language":30,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,160448,160449,160453,160458,160462,160466,160471,160475,160479,160484],{"__ignoreMap":31},[36,160450,160451],{"class":38,"line":39},[36,160452,159639],{"class":49},[36,160454,160455],{"class":38,"line":46},[36,160456,160457],{"class":49},"None\n",[36,160459,160460],{"class":38,"line":82},[36,160461,5616],{"class":49},[36,160463,160464],{"class":38,"line":88},[36,160465,34845],{"class":49},[36,160467,160468],{"class":38,"line":195},[36,160469,160470],{"class":57},"\"\"\n",[36,160472,160473],{"class":38,"line":1517},[36,160474,34860],{"class":53},[36,160476,160477],{"class":38,"line":2421},[36,160478,4513],{"class":53},[36,160480,160481],{"class":38,"line":2446},[36,160482,160483],{"class":53},"{}\n",[36,160485,160486,160488],{"class":38,"line":2469},[36,160487,335],{"class":49},[36,160489,4513],{"class":53},[19,160491,814],{},[26,160493,160495],{"className":28,"code":160494,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,160496,160497,160511,160515,160522,160542,160548],{"__ignoreMap":31},[36,160498,160499,160501,160503,160505,160507,160509],{"class":38,"line":39},[36,160500,360],{"class":53},[36,160502,115],{"class":114},[36,160504,871],{"class":49},[36,160506,54],{"class":53},[36,160508,2175],{"class":57},[36,160510,61],{"class":53},[36,160512,160513],{"class":38,"line":46},[36,160514,546],{"emptyLinePlaceholder":545},[36,160516,160517,160519],{"class":38,"line":82},[36,160518,4069],{"class":114},[36,160520,160521],{"class":53}," name:\n",[36,160523,160524,160526,160528,160530,160532,160534,160536,160538,160540],{"class":38,"line":88},[36,160525,33803],{"class":49},[36,160527,54],{"class":53},[36,160529,2060],{"class":114},[36,160531,2188],{"class":57},[36,160533,2065],{"class":49},[36,160535,1998],{"class":53},[36,160537,2070],{"class":49},[36,160539,1822],{"class":57},[36,160541,61],{"class":53},[36,160543,160544,160546],{"class":38,"line":195},[36,160545,4239],{"class":114},[36,160547,6270],{"class":53},[36,160549,160550,160552,160554,160557],{"class":38,"line":1517},[36,160551,33803],{"class":49},[36,160553,54],{"class":53},[36,160555,160556],{"class":57},"\"姓名不能为空\"",[36,160558,61],{"class":53},[14,160560,160562],{"id":160561},"_39-match语句","3.9 match语句",[19,160564,160565,160566,160568],{},"Python 3.10 开始支持 ",[33,160567,73751],{},"。它适合处理固定选项。",[26,160570,160572],{"className":28,"code":160571,"language":30,"meta":31,"style":31},"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",[33,160573,160574,160590,160594,160601,160611,160622,160631,160642,160651,160662,160669],{"__ignoreMap":31},[36,160575,160576,160579,160581,160583,160585,160588],{"class":38,"line":39},[36,160577,160578],{"class":53},"command ",[36,160580,115],{"class":114},[36,160582,871],{"class":49},[36,160584,54],{"class":53},[36,160586,160587],{"class":57},"\"请输入命令:\"",[36,160589,61],{"class":53},[36,160591,160592],{"class":38,"line":46},[36,160593,546],{"emptyLinePlaceholder":545},[36,160595,160596,160598],{"class":38,"line":82},[36,160597,73751],{"class":114},[36,160599,160600],{"class":53}," command:\n",[36,160602,160603,160606,160609],{"class":38,"line":88},[36,160604,160605],{"class":114},"    case",[36,160607,160608],{"class":57}," \"start\"",[36,160610,6270],{"class":53},[36,160612,160613,160615,160617,160620],{"class":38,"line":195},[36,160614,34954],{"class":49},[36,160616,54],{"class":53},[36,160618,160619],{"class":57},"\"启动\"",[36,160621,61],{"class":53},[36,160623,160624,160626,160629],{"class":38,"line":1517},[36,160625,160605],{"class":114},[36,160627,160628],{"class":57}," \"stop\"",[36,160630,6270],{"class":53},[36,160632,160633,160635,160637,160640],{"class":38,"line":2421},[36,160634,34954],{"class":49},[36,160636,54],{"class":53},[36,160638,160639],{"class":57},"\"停止\"",[36,160641,61],{"class":53},[36,160643,160644,160646,160649],{"class":38,"line":2446},[36,160645,160605],{"class":114},[36,160647,160648],{"class":57}," \"restart\"",[36,160650,6270],{"class":53},[36,160652,160653,160655,160657,160660],{"class":38,"line":2469},[36,160654,34954],{"class":49},[36,160656,54],{"class":53},[36,160658,160659],{"class":57},"\"重启\"",[36,160661,61],{"class":53},[36,160663,160664,160666],{"class":38,"line":2492},[36,160665,160605],{"class":114},[36,160667,160668],{"class":53}," _:\n",[36,160670,160671,160673,160675,160678],{"class":38,"line":4150},[36,160672,34954],{"class":49},[36,160674,54],{"class":53},[36,160676,160677],{"class":57},"\"未知命令\"",[36,160679,61],{"class":53},[19,160681,160682,160683,160685,160686,160688],{},"入门阶段掌握 ",[33,160684,157103],{}," 更重要，",[33,160687,73751],{}," 可以作为补充。",[14,160690,160692],{"id":160691},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160694,2310],{},[433,160696,160697,160700,160703],{},[436,160698,160699],{},"输入成绩。",[436,160701,160702],{},"判断成绩是否合法。",[436,160704,160705],{},"输出等级。",[19,160707,2327],{},[26,160709,160711],{"className":28,"code":160710,"language":30,"meta":31,"style":31},"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",[33,160712,160713,160731,160735,160753,160764,160776,160787,160799,160810,160823,160834,160846,160857,160863],{"__ignoreMap":31},[36,160714,160715,160717,160719,160721,160723,160725,160727,160729],{"class":38,"line":39},[36,160716,407],{"class":53},[36,160718,115],{"class":114},[36,160720,985],{"class":49},[36,160722,54],{"class":53},[36,160724,913],{"class":49},[36,160726,54],{"class":53},[36,160728,154856],{"class":57},[36,160730,625],{"class":53},[36,160732,160733],{"class":38,"line":46},[36,160734,546],{"emptyLinePlaceholder":545},[36,160736,160737,160739,160741,160743,160745,160747,160749,160751],{"class":38,"line":82},[36,160738,4069],{"class":114},[36,160740,41430],{"class":114},[36,160742,6624],{"class":49},[36,160744,160374],{"class":114},[36,160746,159905],{"class":53},[36,160748,4126],{"class":114},[36,160750,8282],{"class":49},[36,160752,6270],{"class":53},[36,160754,160755,160757,160759,160762],{"class":38,"line":88},[36,160756,33803],{"class":49},[36,160758,54],{"class":53},[36,160760,160761],{"class":57},"\"成绩不合法\"",[36,160763,61],{"class":53},[36,160765,160766,160768,160770,160772,160774],{"class":38,"line":195},[36,160767,159928],{"class":114},[36,160769,159905],{"class":53},[36,160771,1490],{"class":114},[36,160773,159910],{"class":49},[36,160775,6270],{"class":53},[36,160777,160778,160780,160782,160785],{"class":38,"line":1517},[36,160779,33803],{"class":49},[36,160781,54],{"class":53},[36,160783,160784],{"class":57},"\"等级:A\"",[36,160786,61],{"class":53},[36,160788,160789,160791,160793,160795,160797],{"class":38,"line":2421},[36,160790,159928],{"class":114},[36,160792,159905],{"class":53},[36,160794,1490],{"class":114},[36,160796,159935],{"class":49},[36,160798,6270],{"class":53},[36,160800,160801,160803,160805,160808],{"class":38,"line":2446},[36,160802,33803],{"class":49},[36,160804,54],{"class":53},[36,160806,160807],{"class":57},"\"等级:B\"",[36,160809,61],{"class":53},[36,160811,160812,160814,160816,160818,160821],{"class":38,"line":2469},[36,160813,159928],{"class":114},[36,160815,159905],{"class":53},[36,160817,1490],{"class":114},[36,160819,160820],{"class":49}," 70",[36,160822,6270],{"class":53},[36,160824,160825,160827,160829,160832],{"class":38,"line":2492},[36,160826,33803],{"class":49},[36,160828,54],{"class":53},[36,160830,160831],{"class":57},"\"等级:C\"",[36,160833,61],{"class":53},[36,160835,160836,160838,160840,160842,160844],{"class":38,"line":4150},[36,160837,159928],{"class":114},[36,160839,159905],{"class":53},[36,160841,1490],{"class":114},[36,160843,159959],{"class":49},[36,160845,6270],{"class":53},[36,160847,160848,160850,160852,160855],{"class":38,"line":4155},[36,160849,33803],{"class":49},[36,160851,54],{"class":53},[36,160853,160854],{"class":57},"\"等级:D\"",[36,160856,61],{"class":53},[36,160858,160859,160861],{"class":38,"line":4161},[36,160860,4239],{"class":114},[36,160862,6270],{"class":53},[36,160864,160865,160867,160869,160872],{"class":38,"line":4166},[36,160866,33803],{"class":49},[36,160868,54],{"class":53},[36,160870,160871],{"class":57},"\"等级:E\"",[36,160873,61],{"class":53},[14,160875,160877],{"id":160876},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160879,2310],{},[433,160881,160882,160885,160888,160891],{},[436,160883,160884],{},"输入消费金额。",[436,160886,160887],{},"输入会员等级，普通、银卡、金卡。",[436,160889,160890],{},"普通不打折，银卡 9 折，金卡 8 折。",[436,160892,160893],{},"满 500 再减 50。",[19,160895,2327],{},[26,160897,160899],{"className":28,"code":160898,"language":30,"meta":31,"style":31},"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",[33,160900,160901,160921,160937,160941,160949,160953,160967,160977,160990,160999,161012,161020,161026,161037,161041,161055,161059,161073,161083,161087],{"__ignoreMap":31},[36,160902,160903,160906,160908,160910,160912,160914,160916,160919],{"class":38,"line":39},[36,160904,160905],{"class":53},"amount ",[36,160907,115],{"class":114},[36,160909,985],{"class":49},[36,160911,54],{"class":53},[36,160913,913],{"class":49},[36,160915,54],{"class":53},[36,160917,160918],{"class":57},"\"请输入消费金额:\"",[36,160920,625],{"class":53},[36,160922,160923,160926,160928,160930,160932,160935],{"class":38,"line":46},[36,160924,160925],{"class":53},"level ",[36,160927,115],{"class":114},[36,160929,871],{"class":49},[36,160931,54],{"class":53},[36,160933,160934],{"class":57},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,160936,61],{"class":53},[36,160938,160939],{"class":38,"line":82},[36,160940,546],{"emptyLinePlaceholder":545},[36,160942,160943,160945,160947],{"class":38,"line":88},[36,160944,2375],{"class":53},[36,160946,115],{"class":114},[36,160948,124],{"class":49},[36,160950,160951],{"class":38,"line":195},[36,160952,546],{"emptyLinePlaceholder":545},[36,160954,160955,160957,160960,160962,160965],{"class":38,"line":1517},[36,160956,4069],{"class":114},[36,160958,160959],{"class":53}," level ",[36,160961,1377],{"class":114},[36,160963,160964],{"class":57}," \"银卡\"",[36,160966,6270],{"class":53},[36,160968,160969,160972,160974],{"class":38,"line":2421},[36,160970,160971],{"class":53},"    discount ",[36,160973,115],{"class":114},[36,160975,160976],{"class":49}," 0.9\n",[36,160978,160979,160981,160983,160985,160988],{"class":38,"line":2446},[36,160980,159928],{"class":114},[36,160982,160959],{"class":53},[36,160984,1377],{"class":114},[36,160986,160987],{"class":57}," \"金卡\"",[36,160989,6270],{"class":53},[36,160991,160992,160994,160996],{"class":38,"line":2469},[36,160993,160971],{"class":53},[36,160995,115],{"class":114},[36,160997,160998],{"class":49}," 0.8\n",[36,161000,161001,161003,161005,161007,161010],{"class":38,"line":2492},[36,161002,159928],{"class":114},[36,161004,160959],{"class":53},[36,161006,1377],{"class":114},[36,161008,161009],{"class":57}," \"普通\"",[36,161011,6270],{"class":53},[36,161013,161014,161016,161018],{"class":38,"line":4150},[36,161015,160971],{"class":53},[36,161017,115],{"class":114},[36,161019,124],{"class":49},[36,161021,161022,161024],{"class":38,"line":4155},[36,161023,4239],{"class":114},[36,161025,6270],{"class":53},[36,161027,161028,161030,161032,161035],{"class":38,"line":4161},[36,161029,33803],{"class":49},[36,161031,54],{"class":53},[36,161033,161034],{"class":57},"\"会员等级输入错误，按普通会员计算\"",[36,161036,61],{"class":53},[36,161038,161039],{"class":38,"line":4166},[36,161040,546],{"emptyLinePlaceholder":545},[36,161042,161043,161046,161048,161051,161053],{"class":38,"line":4180},[36,161044,161045],{"class":53},"pay ",[36,161047,115],{"class":114},[36,161049,161050],{"class":53}," amount ",[36,161052,1050],{"class":114},[36,161054,2414],{"class":53},[36,161056,161057],{"class":38,"line":4185},[36,161058,546],{"emptyLinePlaceholder":545},[36,161060,161061,161063,161066,161068,161071],{"class":38,"line":4191},[36,161062,4069],{"class":114},[36,161064,161065],{"class":53}," pay ",[36,161067,1490],{"class":114},[36,161069,161070],{"class":49}," 500",[36,161072,6270],{"class":53},[36,161074,161075,161078,161080],{"class":38,"line":4212},[36,161076,161077],{"class":53},"    pay ",[36,161079,1234],{"class":114},[36,161081,161082],{"class":49}," 50\n",[36,161084,161085],{"class":38,"line":4217},[36,161086,546],{"emptyLinePlaceholder":545},[36,161088,161089,161091,161093,161095,161097,161099,161102,161104,161106,161108],{"class":38,"line":4231},[36,161090,50],{"class":49},[36,161092,54],{"class":53},[36,161094,2060],{"class":114},[36,161096,2501],{"class":57},[36,161098,2065],{"class":49},[36,161100,161101],{"class":53},"pay",[36,161103,2296],{"class":114},[36,161105,2070],{"class":49},[36,161107,2145],{"class":57},[36,161109,61],{"class":53},[14,161111,161113],{"id":161112},"_312-易错点","3.12 易错点",[433,161115,161116,161119,161122,161125,161130],{},[436,161117,161118],{},"冒号不能漏。",[436,161120,161121],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[436,161123,161124],{},"多分支判断要注意顺序。",[436,161126,161127,161128,1296],{},"判断相等用 ",[33,161129,1377],{},[436,161131,161132],{},"字符串比较区分大小写：",[26,161134,161136],{"className":28,"code":161135,"language":30,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,161137,161138],{"__ignoreMap":31},[36,161139,161140,161143,161145,161147],{"class":38,"line":39},[36,161141,161142],{"class":57},"\"Y\"",[36,161144,1351],{"class":114},[36,161146,160127],{"class":57},[36,161148,161149],{"class":42},"  # False\n",[19,161151,161152],{},"可转换后再判断：",[26,161154,161156],{"className":28,"code":161155,"language":30,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,161157,161158,161175,161188],{"__ignoreMap":31},[36,161159,161160,161163,161165,161167,161169,161172],{"class":38,"line":39},[36,161161,161162],{"class":53},"answer ",[36,161164,115],{"class":114},[36,161166,871],{"class":49},[36,161168,54],{"class":53},[36,161170,161171],{"class":57},"\"是否继续(y\u002Fn):\"",[36,161173,161174],{"class":53},").lower()\n",[36,161176,161177,161179,161182,161184,161186],{"class":38,"line":46},[36,161178,4069],{"class":114},[36,161180,161181],{"class":53}," answer ",[36,161183,1377],{"class":114},[36,161185,160127],{"class":57},[36,161187,6270],{"class":53},[36,161189,161190,161192,161194,161197],{"class":38,"line":82},[36,161191,33803],{"class":49},[36,161193,54],{"class":53},[36,161195,161196],{"class":57},"\"继续\"",[36,161198,61],{"class":53},[14,161200,161202],{"id":161201},"_313-本章练习","3.13 本章练习",[433,161204,161205,161208,161211,161214,161224],{},[436,161206,161207],{},"输入年龄，判断是否成年。",[436,161209,161210],{},"输入年份，判断是否为闰年。",[436,161212,161213],{},"输入三个数字，输出最大值。",[436,161215,161216,161217,161220,161221,161223],{},"写登录判断：用户名是 ",[33,161218,161219],{},"admin"," 且密码是 ",[33,161222,17604],{}," 才登录成功。",[436,161225,161226],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2602,161228,161229],{},"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":31,"searchDepth":46,"depth":46,"links":161231},[161232,161233,161234,161235,161236,161237,161242,161243,161244,161245,161246,161247,161248],{"id":159620,"depth":46,"text":159621},{"id":159673,"depth":46,"text":159674},{"id":159777,"depth":46,"text":159778},{"id":159867,"depth":46,"text":159868},{"id":160057,"depth":46,"text":160058},{"id":160180,"depth":46,"text":160181,"children":161238},[161239,161240,161241],{"id":160184,"depth":82,"text":160185},{"id":160241,"depth":82,"text":160242},{"id":160298,"depth":82,"text":160299},{"id":160343,"depth":46,"text":160344},{"id":160434,"depth":46,"text":160435},{"id":160561,"depth":46,"text":160562},{"id":160691,"depth":46,"text":160692},{"id":160876,"depth":46,"text":160877},{"id":161112,"depth":46,"text":161113},{"id":161201,"depth":46,"text":161202},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159612,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161255,"title":161256,"body":161257,"description":2630,"extension":2631,"meta":163026,"navigation":545,"path":163027,"seo":163028,"stem":163029,"__hash__":163030},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161258,"toc":163006},[161259,161262,161266,161272,161275,161292,161296,161298,161315,161317,161362,161364,161381,161385,161388,161454,161457,161475,161479,161640,161649,161653,161657,161662,161709,161711,161717,161721,161726,161773,161775,161781,161785,161790,161826,161829,161876,161880,161886,161944,161949,161980,161985,161989,162044,162047,162119,162122,162181,162185,162188,162263,162266,162270,162376,162379,162405,162409,162421,162490,162493,162585,162589,162591,162602,162604,162734,162738,162940,162948,162952,162982,162986,163003],[10,161260,161256],{"id":161261},"_4-循环语句",[14,161263,161265],{"id":161264},"_41-为什么需要循环","4.1 为什么需要循环",[19,161267,161268,161269,161271],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,161270,148932],{},"，而应该用循环。",[19,161273,161274],{},"循环适合处理重复任务：",[433,161276,161277,161280,161283,161286,161289],{},[436,161278,161279],{},"重复输出。",[436,161281,161282],{},"重复输入。",[436,161284,161285],{},"遍历数据。",[436,161287,161288],{},"持续执行菜单。",[436,161290,161291],{},"批量处理文件或数据。",[14,161293,161295],{"id":161294},"_42-while循环","4.2 while循环",[19,161297,7712],{},[26,161299,161301],{"className":28,"code":161300,"language":30,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,161302,161303,161310],{"__ignoreMap":31},[36,161304,161305,161307],{"class":38,"line":39},[36,161306,111133],{"class":114},[36,161308,161309],{"class":53}," 条件:\n",[36,161311,161312],{"class":38,"line":46},[36,161313,161314],{"class":53},"    循环体\n",[19,161316,814],{},[26,161318,161320],{"className":28,"code":161319,"language":30,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,161321,161322,161330,161334,161346,161353],{"__ignoreMap":31},[36,161323,161324,161326,161328],{"class":38,"line":39},[36,161325,102624],{"class":53},[36,161327,115],{"class":114},[36,161329,124],{"class":49},[36,161331,161332],{"class":38,"line":46},[36,161333,546],{"emptyLinePlaceholder":545},[36,161335,161336,161338,161340,161342,161344],{"class":38,"line":82},[36,161337,111133],{"class":114},[36,161339,11964],{"class":53},[36,161341,4126],{"class":114},[36,161343,1323],{"class":49},[36,161345,6270],{"class":53},[36,161347,161348,161350],{"class":38,"line":88},[36,161349,33803],{"class":49},[36,161351,161352],{"class":53},"(i)\n",[36,161354,161355,161358,161360],{"class":38,"line":195},[36,161356,161357],{"class":53},"    i ",[36,161359,1224],{"class":114},[36,161361,124],{"class":49},[19,161363,83410],{},[433,161365,161366,161372,161375,161378],{},[436,161367,161368,161369,1296],{},"判断条件 ",[33,161370,161371],{},"i \u003C= 5",[436,161373,161374],{},"条件成立，执行循环体。",[436,161376,161377],{},"执行完后回到条件判断。",[436,161379,161380],{},"条件不成立，退出循环。",[14,161382,161384],{"id":161383},"_43-while累加","4.3 while累加",[19,161386,161387],{},"计算 1 到 100 的和：",[26,161389,161391],{"className":28,"code":161390,"language":30,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,161392,161393,161401,161409,161413,161425,161435,161443,161447],{"__ignoreMap":31},[36,161394,161395,161397,161399],{"class":38,"line":39},[36,161396,102624],{"class":53},[36,161398,115],{"class":114},[36,161400,124],{"class":49},[36,161402,161403,161405,161407],{"class":38,"line":46},[36,161404,2399],{"class":53},[36,161406,115],{"class":114},[36,161408,49830],{"class":49},[36,161410,161411],{"class":38,"line":82},[36,161412,546],{"emptyLinePlaceholder":545},[36,161414,161415,161417,161419,161421,161423],{"class":38,"line":88},[36,161416,111133],{"class":114},[36,161418,11964],{"class":53},[36,161420,4126],{"class":114},[36,161422,8282],{"class":49},[36,161424,6270],{"class":53},[36,161426,161427,161430,161432],{"class":38,"line":195},[36,161428,161429],{"class":53},"    total ",[36,161431,1224],{"class":114},[36,161433,161434],{"class":53}," i\n",[36,161436,161437,161439,161441],{"class":38,"line":1517},[36,161438,161357],{"class":53},[36,161440,1224],{"class":114},[36,161442,124],{"class":49},[36,161444,161445],{"class":38,"line":2421},[36,161446,546],{"emptyLinePlaceholder":545},[36,161448,161449,161451],{"class":38,"line":2446},[36,161450,50],{"class":49},[36,161452,161453],{"class":53},"(total)\n",[19,161455,161456],{},"核心思想：",[433,161458,161459,161464,161469],{},[436,161460,161461,161463],{},[33,161462,3122],{}," 控制循环次数。",[436,161465,161466,161468],{},[33,161467,2506],{}," 保存累加结果。",[436,161470,161471,161472,161474],{},"每轮循环都要更新 ",[33,161473,3122],{},"，否则可能死循环。",[14,161476,161478],{"id":161477},"_44-while猜数字","4.4 while猜数字",[26,161480,161482],{"className":28,"code":161481,"language":30,"meta":31,"style":31},"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",[33,161483,161484,161490,161494,161511,161519,161523,161531,161551,161560,161564,161576,161587,161597,161608,161614,161636],{"__ignoreMap":31},[36,161485,161486,161488],{"class":38,"line":39},[36,161487,537],{"class":114},[36,161489,47828],{"class":53},[36,161491,161492],{"class":38,"line":46},[36,161493,546],{"emptyLinePlaceholder":545},[36,161495,161496,161498,161500,161503,161505,161507,161509],{"class":38,"line":82},[36,161497,161162],{"class":53},[36,161499,115],{"class":114},[36,161501,161502],{"class":53}," random.randint(",[36,161504,707],{"class":49},[36,161506,14958],{"class":53},[36,161508,166],{"class":49},[36,161510,61],{"class":53},[36,161512,161513,161515,161517],{"class":38,"line":88},[36,161514,2116],{"class":53},[36,161516,115],{"class":114},[36,161518,49830],{"class":49},[36,161520,161521],{"class":38,"line":195},[36,161522,546],{"emptyLinePlaceholder":545},[36,161524,161525,161527,161529],{"class":38,"line":1517},[36,161526,111133],{"class":114},[36,161528,97770],{"class":49},[36,161530,6270],{"class":53},[36,161532,161533,161536,161538,161540,161542,161544,161546,161549],{"class":38,"line":2421},[36,161534,161535],{"class":53},"    guess ",[36,161537,115],{"class":114},[36,161539,837],{"class":49},[36,161541,54],{"class":53},[36,161543,913],{"class":49},[36,161545,54],{"class":53},[36,161547,161548],{"class":57},"\"请输入1到100之间的数字:\"",[36,161550,625],{"class":53},[36,161552,161553,161556,161558],{"class":38,"line":2446},[36,161554,161555],{"class":53},"    count ",[36,161557,1224],{"class":114},[36,161559,124],{"class":49},[36,161561,161562],{"class":38,"line":2469},[36,161563,546],{"emptyLinePlaceholder":545},[36,161565,161566,161568,161571,161573],{"class":38,"line":2492},[36,161567,5632],{"class":114},[36,161569,161570],{"class":53}," guess ",[36,161572,3633],{"class":114},[36,161574,161575],{"class":53}," answer:\n",[36,161577,161578,161580,161582,161585],{"class":38,"line":4150},[36,161579,34954],{"class":49},[36,161581,54],{"class":53},[36,161583,161584],{"class":57},"\"猜大了\"",[36,161586,61],{"class":53},[36,161588,161589,161591,161593,161595],{"class":38,"line":4155},[36,161590,41793],{"class":114},[36,161592,161570],{"class":53},[36,161594,1507],{"class":114},[36,161596,161575],{"class":53},[36,161598,161599,161601,161603,161606],{"class":38,"line":4161},[36,161600,34954],{"class":49},[36,161602,54],{"class":53},[36,161604,161605],{"class":57},"\"猜小了\"",[36,161607,61],{"class":53},[36,161609,161610,161612],{"class":38,"line":4166},[36,161611,160144],{"class":114},[36,161613,6270],{"class":53},[36,161615,161616,161618,161620,161622,161625,161627,161629,161631,161634],{"class":38,"line":4180},[36,161617,34954],{"class":49},[36,161619,54],{"class":53},[36,161621,2060],{"class":114},[36,161623,161624],{"class":57},"\"猜对了，一共猜了",[36,161626,2065],{"class":49},[36,161628,2460],{"class":53},[36,161630,2070],{"class":49},[36,161632,161633],{"class":57},"次\"",[36,161635,61],{"class":53},[36,161637,161638],{"class":38,"line":4185},[36,161639,34130],{"class":114},[19,161641,161642,161645,161646,161648],{},[33,161643,161644],{},"while True"," 表示无限循环，通常配合 ",[33,161647,4589],{}," 使用。",[14,161650,161652],{"id":161651},"_45-break和continue","4.5 break和continue",[997,161654,161656],{"id":161655},"_451-break","4.5.1 break",[19,161658,161659,161661],{},[33,161660,4589],{}," 直接结束整个循环。",[26,161663,161665],{"className":28,"code":161664,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,161666,161667,161687,161699,161703],{"__ignoreMap":31},[36,161668,161669,161671,161673,161675,161677,161679,161681,161683,161685],{"class":38,"line":39},[36,161670,5556],{"class":114},[36,161672,11964],{"class":53},[36,161674,28556],{"class":114},[36,161676,34946],{"class":49},[36,161678,54],{"class":53},[36,161680,707],{"class":49},[36,161682,14958],{"class":53},[36,161684,3025],{"class":49},[36,161686,33290],{"class":53},[36,161688,161689,161691,161693,161695,161697],{"class":38,"line":46},[36,161690,5632],{"class":114},[36,161692,11964],{"class":53},[36,161694,1377],{"class":114},[36,161696,1194],{"class":49},[36,161698,6270],{"class":53},[36,161700,161701],{"class":38,"line":82},[36,161702,34130],{"class":114},[36,161704,161705,161707],{"class":38,"line":88},[36,161706,33803],{"class":49},[36,161708,161352],{"class":53},[19,161710,148917],{},[26,161712,161715],{"className":161713,"code":161714,"language":690,"meta":31},[688],"1\n2\n",[33,161716,161714],{"__ignoreMap":31},[997,161718,161720],{"id":161719},"_452-continue","4.5.2 continue",[19,161722,161723,161725],{},[33,161724,157117],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,161727,161729],{"className":28,"code":161728,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,161730,161731,161751,161763,161767],{"__ignoreMap":31},[36,161732,161733,161735,161737,161739,161741,161743,161745,161747,161749],{"class":38,"line":39},[36,161734,5556],{"class":114},[36,161736,11964],{"class":53},[36,161738,28556],{"class":114},[36,161740,34946],{"class":49},[36,161742,54],{"class":53},[36,161744,707],{"class":49},[36,161746,14958],{"class":53},[36,161748,3025],{"class":49},[36,161750,33290],{"class":53},[36,161752,161753,161755,161757,161759,161761],{"class":38,"line":46},[36,161754,5632],{"class":114},[36,161756,11964],{"class":53},[36,161758,1377],{"class":114},[36,161760,1194],{"class":49},[36,161762,6270],{"class":53},[36,161764,161765],{"class":38,"line":82},[36,161766,150964],{"class":114},[36,161768,161769,161771],{"class":38,"line":88},[36,161770,33803],{"class":49},[36,161772,161352],{"class":53},[19,161774,148917],{},[26,161776,161779],{"className":161777,"code":161778,"language":690,"meta":31},[688],"1\n2\n4\n5\n",[33,161780,161778],{"__ignoreMap":31},[14,161782,161784],{"id":161783},"_46-for循环","4.6 for循环",[19,161786,161787,161789],{},[33,161788,5556],{}," 常用于遍历序列。",[26,161791,161793],{"className":28,"code":161792,"language":30,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,161794,161795,161804,161808,161819],{"__ignoreMap":31},[36,161796,161797,161799,161801],{"class":38,"line":39},[36,161798,360],{"class":53},[36,161800,115],{"class":114},[36,161802,161803],{"class":57}," \"python\"\n",[36,161805,161806],{"class":38,"line":46},[36,161807,546],{"emptyLinePlaceholder":545},[36,161809,161810,161812,161815,161817],{"class":38,"line":82},[36,161811,5556],{"class":114},[36,161813,161814],{"class":53}," ch ",[36,161816,28556],{"class":114},[36,161818,160521],{"class":53},[36,161820,161821,161823],{"class":38,"line":88},[36,161822,33803],{"class":49},[36,161824,161825],{"class":53},"(ch)\n",[19,161827,161828],{},"遍历列表：",[26,161830,161832],{"className":28,"code":161831,"language":30,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,161833,161834,161856,161860,161870],{"__ignoreMap":31},[36,161835,161836,161839,161841,161843,161845,161847,161849,161851,161854],{"class":38,"line":39},[36,161837,161838],{"class":53},"students ",[36,161840,115],{"class":114},[36,161842,54720],{"class":53},[36,161844,152338],{"class":57},[36,161846,14958],{"class":53},[36,161848,153385],{"class":57},[36,161850,14958],{"class":53},[36,161852,161853],{"class":57},"\"小刚\"",[36,161855,35748],{"class":53},[36,161857,161858],{"class":38,"line":46},[36,161859,546],{"emptyLinePlaceholder":545},[36,161861,161862,161864,161866,161868],{"class":38,"line":82},[36,161863,5556],{"class":114},[36,161865,154586],{"class":53},[36,161867,28556],{"class":114},[36,161869,154591],{"class":53},[36,161871,161872,161874],{"class":38,"line":88},[36,161873,33803],{"class":49},[36,161875,152492],{"class":53},[14,161877,161879],{"id":161878},"_47-range函数","4.7 range函数",[19,161881,161882,161885],{},[33,161883,161884],{},"range()"," 用于生成整数序列。",[26,161887,161889],{"className":28,"code":161888,"language":30,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,161890,161891,161905,161923],{"__ignoreMap":31},[36,161892,161893,161895,161897,161899,161902],{"class":38,"line":39},[36,161894,35917],{"class":49},[36,161896,54],{"class":53},[36,161898,1134],{"class":49},[36,161900,161901],{"class":53},")          ",[36,161903,161904],{"class":42},"# 0,1,2,3,4\n",[36,161906,161907,161909,161911,161913,161915,161917,161920],{"class":38,"line":46},[36,161908,35917],{"class":49},[36,161910,54],{"class":53},[36,161912,707],{"class":49},[36,161914,14958],{"class":53},[36,161916,1134],{"class":49},[36,161918,161919],{"class":53},")       ",[36,161921,161922],{"class":42},"# 1,2,3,4\n",[36,161924,161925,161927,161929,161931,161933,161935,161937,161939,161941],{"class":38,"line":82},[36,161926,35917],{"class":49},[36,161928,54],{"class":53},[36,161930,707],{"class":49},[36,161932,14958],{"class":53},[36,161934,1317],{"class":49},[36,161936,14958],{"class":53},[36,161938,1188],{"class":49},[36,161940,736],{"class":53},[36,161942,161943],{"class":42},"# 1,3,5,7,9\n",[19,161945,161946,161947,27135],{},"配合 ",[33,161948,5556],{},[26,161950,161952],{"className":28,"code":161951,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,161953,161954,161974],{"__ignoreMap":31},[36,161955,161956,161958,161960,161962,161964,161966,161968,161970,161972],{"class":38,"line":39},[36,161957,5556],{"class":114},[36,161959,11964],{"class":53},[36,161961,28556],{"class":114},[36,161963,34946],{"class":49},[36,161965,54],{"class":53},[36,161967,707],{"class":49},[36,161969,14958],{"class":53},[36,161971,3025],{"class":49},[36,161973,33290],{"class":53},[36,161975,161976,161978],{"class":38,"line":46},[36,161977,33803],{"class":49},[36,161979,161352],{"class":53},[19,161981,695,161982,161984],{},[33,161983,35917],{}," 的结束值不包含在内。",[14,161986,161988],{"id":161987},"_48-for循环求和","4.8 for循环求和",[26,161990,161992],{"className":28,"code":161991,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,161993,161994,162002,162006,162026,162034,162038],{"__ignoreMap":31},[36,161995,161996,161998,162000],{"class":38,"line":39},[36,161997,2399],{"class":53},[36,161999,115],{"class":114},[36,162001,49830],{"class":49},[36,162003,162004],{"class":38,"line":46},[36,162005,546],{"emptyLinePlaceholder":545},[36,162007,162008,162010,162012,162014,162016,162018,162020,162022,162024],{"class":38,"line":82},[36,162009,5556],{"class":114},[36,162011,11964],{"class":53},[36,162013,28556],{"class":114},[36,162015,34946],{"class":49},[36,162017,54],{"class":53},[36,162019,707],{"class":49},[36,162021,14958],{"class":53},[36,162023,3018],{"class":49},[36,162025,33290],{"class":53},[36,162027,162028,162030,162032],{"class":38,"line":88},[36,162029,161429],{"class":53},[36,162031,1224],{"class":114},[36,162033,161434],{"class":53},[36,162035,162036],{"class":38,"line":195},[36,162037,546],{"emptyLinePlaceholder":545},[36,162039,162040,162042],{"class":38,"line":1517},[36,162041,50],{"class":49},[36,162043,161453],{"class":53},[19,162045,162046],{},"求偶数和：",[26,162048,162050],{"className":28,"code":162049,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,162051,162052,162060,162064,162084,162100,162109,162113],{"__ignoreMap":31},[36,162053,162054,162056,162058],{"class":38,"line":39},[36,162055,2399],{"class":53},[36,162057,115],{"class":114},[36,162059,49830],{"class":49},[36,162061,162062],{"class":38,"line":46},[36,162063,546],{"emptyLinePlaceholder":545},[36,162065,162066,162068,162070,162072,162074,162076,162078,162080,162082],{"class":38,"line":82},[36,162067,5556],{"class":114},[36,162069,11964],{"class":53},[36,162071,28556],{"class":114},[36,162073,34946],{"class":49},[36,162075,54],{"class":53},[36,162077,707],{"class":49},[36,162079,14958],{"class":53},[36,162081,3018],{"class":49},[36,162083,33290],{"class":53},[36,162085,162086,162088,162090,162092,162094,162096,162098],{"class":38,"line":88},[36,162087,5632],{"class":114},[36,162089,11964],{"class":53},[36,162091,1095],{"class":114},[36,162093,1140],{"class":49},[36,162095,1351],{"class":114},[36,162097,6624],{"class":49},[36,162099,6270],{"class":53},[36,162101,162102,162105,162107],{"class":38,"line":195},[36,162103,162104],{"class":53},"        total ",[36,162106,1224],{"class":114},[36,162108,161434],{"class":53},[36,162110,162111],{"class":38,"line":1517},[36,162112,546],{"emptyLinePlaceholder":545},[36,162114,162115,162117],{"class":38,"line":2421},[36,162116,50],{"class":49},[36,162118,161453],{"class":53},[19,162120,162121],{},"也可以：",[26,162123,162125],{"className":28,"code":162124,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,162126,162127,162135,162139,162163,162171,162175],{"__ignoreMap":31},[36,162128,162129,162131,162133],{"class":38,"line":39},[36,162130,2399],{"class":53},[36,162132,115],{"class":114},[36,162134,49830],{"class":49},[36,162136,162137],{"class":38,"line":46},[36,162138,546],{"emptyLinePlaceholder":545},[36,162140,162141,162143,162145,162147,162149,162151,162153,162155,162157,162159,162161],{"class":38,"line":82},[36,162142,5556],{"class":114},[36,162144,11964],{"class":53},[36,162146,28556],{"class":114},[36,162148,34946],{"class":49},[36,162150,54],{"class":53},[36,162152,1188],{"class":49},[36,162154,14958],{"class":53},[36,162156,3018],{"class":49},[36,162158,14958],{"class":53},[36,162160,1188],{"class":49},[36,162162,33290],{"class":53},[36,162164,162165,162167,162169],{"class":38,"line":88},[36,162166,161429],{"class":53},[36,162168,1224],{"class":114},[36,162170,161434],{"class":53},[36,162172,162173],{"class":38,"line":195},[36,162174,546],{"emptyLinePlaceholder":545},[36,162176,162177,162179],{"class":38,"line":1517},[36,162178,50],{"class":49},[36,162180,161453],{"class":53},[14,162182,162184],{"id":162183},"_49-循环嵌套","4.9 循环嵌套",[19,162186,162187],{},"嵌套循环就是循环里面再写循环。",[26,162189,162191],{"className":28,"code":162190,"language":30,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,162192,162193,162213,162233],{"__ignoreMap":31},[36,162194,162195,162197,162199,162201,162203,162205,162207,162209,162211],{"class":38,"line":39},[36,162196,5556],{"class":114},[36,162198,11964],{"class":53},[36,162200,28556],{"class":114},[36,162202,34946],{"class":49},[36,162204,54],{"class":53},[36,162206,707],{"class":49},[36,162208,14958],{"class":53},[36,162210,2977],{"class":49},[36,162212,33290],{"class":53},[36,162214,162215,162217,162219,162221,162223,162225,162227,162229,162231],{"class":38,"line":46},[36,162216,5732],{"class":114},[36,162218,12025],{"class":53},[36,162220,28556],{"class":114},[36,162222,34946],{"class":49},[36,162224,54],{"class":53},[36,162226,707],{"class":49},[36,162228,14958],{"class":53},[36,162230,2977],{"class":49},[36,162232,33290],{"class":53},[36,162234,162235,162237,162239,162241,162244,162246,162248,162250,162253,162255,162257,162259,162261],{"class":38,"line":82},[36,162236,34954],{"class":49},[36,162238,54],{"class":53},[36,162240,2060],{"class":114},[36,162242,162243],{"class":57},"\"i=",[36,162245,2065],{"class":49},[36,162247,3122],{"class":53},[36,162249,2070],{"class":49},[36,162251,162252],{"class":57},", j=",[36,162254,2065],{"class":49},[36,162256,3146],{"class":53},[36,162258,2070],{"class":49},[36,162260,1822],{"class":57},[36,162262,61],{"class":53},[19,162264,162265],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162267,162269],{"id":162268},"_410-九九乘法表","4.10 九九乘法表",[26,162271,162273],{"className":28,"code":162272,"language":30,"meta":31,"style":31},"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",[33,162274,162275,162295,162318,162370],{"__ignoreMap":31},[36,162276,162277,162279,162281,162283,162285,162287,162289,162291,162293],{"class":38,"line":39},[36,162278,5556],{"class":114},[36,162280,11964],{"class":53},[36,162282,28556],{"class":114},[36,162284,34946],{"class":49},[36,162286,54],{"class":53},[36,162288,707],{"class":49},[36,162290,14958],{"class":53},[36,162292,1317],{"class":49},[36,162294,33290],{"class":53},[36,162296,162297,162299,162301,162303,162305,162307,162309,162312,162314,162316],{"class":38,"line":46},[36,162298,5732],{"class":114},[36,162300,12025],{"class":53},[36,162302,28556],{"class":114},[36,162304,34946],{"class":49},[36,162306,54],{"class":53},[36,162308,707],{"class":49},[36,162310,162311],{"class":53},", i ",[36,162313,121],{"class":114},[36,162315,733],{"class":49},[36,162317,33290],{"class":53},[36,162319,162320,162322,162324,162326,162328,162330,162332,162334,162336,162338,162340,162342,162344,162346,162348,162350,162352,162354,162356,162358,162360,162362,162364,162366,162368],{"class":38,"line":82},[36,162321,34954],{"class":49},[36,162323,54],{"class":53},[36,162325,2060],{"class":114},[36,162327,1822],{"class":57},[36,162329,2065],{"class":49},[36,162331,3146],{"class":53},[36,162333,2070],{"class":49},[36,162335,1050],{"class":57},[36,162337,2065],{"class":49},[36,162339,3122],{"class":53},[36,162341,2070],{"class":49},[36,162343,115],{"class":57},[36,162345,2065],{"class":49},[36,162347,102624],{"class":53},[36,162349,1050],{"class":114},[36,162351,5941],{"class":53},[36,162353,2070],{"class":49},[36,162355,1822],{"class":57},[36,162357,14958],{"class":53},[36,162359,48299],{"class":1997},[36,162361,115],{"class":114},[36,162363,1822],{"class":57},[36,162365,1654],{"class":49},[36,162367,1822],{"class":57},[36,162369,61],{"class":53},[36,162371,162372,162374],{"class":38,"line":88},[36,162373,33803],{"class":49},[36,162375,4513],{"class":53},[19,162377,162378],{},"关键点：",[433,162380,162381,162387,162393,162399],{},[436,162382,162383,162384,162386],{},"外层 ",[33,162385,3122],{}," 控制行。",[436,162388,162389,162390,162392],{},"内层 ",[33,162391,3146],{}," 控制列。",[436,162394,162395,162396,162398],{},"每行结束后用 ",[33,162397,148932],{}," 换行。",[436,162400,162401,162404],{},[33,162402,162403],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162406,162408],{"id":162407},"_411-循环else","4.11 循环else",[19,162410,162411,162412,162414,162415,162417,162418,162420],{},"Python 的循环可以带 ",[33,162413,4239],{},"。当循环正常结束时执行 ",[33,162416,4239],{},"，如果被 ",[33,162419,4589],{}," 打断，则不执行。",[26,162422,162424],{"className":28,"code":162423,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,162425,162426,162446,162458,162469,162473,162479],{"__ignoreMap":31},[36,162427,162428,162430,162432,162434,162436,162438,162440,162442,162444],{"class":38,"line":39},[36,162429,5556],{"class":114},[36,162431,11964],{"class":53},[36,162433,28556],{"class":114},[36,162435,34946],{"class":49},[36,162437,54],{"class":53},[36,162439,707],{"class":49},[36,162441,14958],{"class":53},[36,162443,3025],{"class":49},[36,162445,33290],{"class":53},[36,162447,162448,162450,162452,162454,162456],{"class":38,"line":46},[36,162449,5632],{"class":114},[36,162451,11964],{"class":53},[36,162453,1377],{"class":114},[36,162455,931],{"class":49},[36,162457,6270],{"class":53},[36,162459,162460,162462,162464,162467],{"class":38,"line":82},[36,162461,34954],{"class":49},[36,162463,54],{"class":53},[36,162465,162466],{"class":57},"\"找到了\"",[36,162468,61],{"class":53},[36,162470,162471],{"class":38,"line":88},[36,162472,34130],{"class":114},[36,162474,162475,162477],{"class":38,"line":195},[36,162476,4239],{"class":114},[36,162478,6270],{"class":53},[36,162480,162481,162483,162485,162488],{"class":38,"line":1517},[36,162482,33803],{"class":49},[36,162484,54],{"class":53},[36,162486,162487],{"class":57},"\"没找到\"",[36,162489,61],{"class":53},[19,162491,162492],{},"常用于搜索。",[26,162494,162496],{"className":28,"code":162495,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,162497,162498,162519,162528,162532,162544,162555,162565,162569,162575],{"__ignoreMap":31},[36,162499,162500,162503,162505,162507,162509,162511,162513,162515,162517],{"class":38,"line":39},[36,162501,162502],{"class":53},"names ",[36,162504,115],{"class":114},[36,162506,54720],{"class":53},[36,162508,152338],{"class":57},[36,162510,14958],{"class":53},[36,162512,153385],{"class":57},[36,162514,14958],{"class":53},[36,162516,161853],{"class":57},[36,162518,35748],{"class":53},[36,162520,162521,162523,162525],{"class":38,"line":46},[36,162522,114047],{"class":53},[36,162524,115],{"class":114},[36,162526,162527],{"class":57}," \"小李\"\n",[36,162529,162530],{"class":38,"line":82},[36,162531,546],{"emptyLinePlaceholder":545},[36,162533,162534,162536,162539,162541],{"class":38,"line":88},[36,162535,5556],{"class":114},[36,162537,162538],{"class":53}," name ",[36,162540,28556],{"class":114},[36,162542,162543],{"class":53}," names:\n",[36,162545,162546,162548,162550,162552],{"class":38,"line":195},[36,162547,5632],{"class":114},[36,162549,162538],{"class":53},[36,162551,1377],{"class":114},[36,162553,162554],{"class":53}," target:\n",[36,162556,162557,162559,162561,162563],{"class":38,"line":1517},[36,162558,34954],{"class":49},[36,162560,54],{"class":53},[36,162562,162466],{"class":57},[36,162564,61],{"class":53},[36,162566,162567],{"class":38,"line":2421},[36,162568,34130],{"class":114},[36,162570,162571,162573],{"class":38,"line":2446},[36,162572,4239],{"class":114},[36,162574,6270],{"class":53},[36,162576,162577,162579,162581,162583],{"class":38,"line":2469},[36,162578,33803],{"class":49},[36,162580,54],{"class":53},[36,162582,162487],{"class":57},[36,162584,61],{"class":53},[14,162586,162588],{"id":162587},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162590,2310],{},[433,162592,162593,162596,162599],{},[436,162594,162595],{},"用户最多输入 3 次密码。",[436,162597,162598],{},"密码正确则登录成功。",[436,162600,162601],{},"3 次都错误则锁定账号。",[19,162603,2327],{},[26,162605,162607],{"className":28,"code":162606,"language":30,"meta":31,"style":31},"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",[33,162608,162609,162619,162623,162639,162655,162659,162671,162682,162686,162692,162717,162723],{"__ignoreMap":31},[36,162610,162611,162614,162616],{"class":38,"line":39},[36,162612,162613],{"class":53},"password ",[36,162615,115],{"class":114},[36,162617,162618],{"class":57}," \"123456\"\n",[36,162620,162621],{"class":38,"line":46},[36,162622,546],{"emptyLinePlaceholder":545},[36,162624,162625,162627,162629,162631,162633,162635,162637],{"class":38,"line":82},[36,162626,5556],{"class":114},[36,162628,11964],{"class":53},[36,162630,28556],{"class":114},[36,162632,34946],{"class":49},[36,162634,54],{"class":53},[36,162636,2767],{"class":49},[36,162638,33290],{"class":53},[36,162640,162641,162644,162646,162648,162650,162653],{"class":38,"line":88},[36,162642,162643],{"class":53},"    user_password ",[36,162645,115],{"class":114},[36,162647,871],{"class":49},[36,162649,54],{"class":53},[36,162651,162652],{"class":57},"\"请输入密码:\"",[36,162654,61],{"class":53},[36,162656,162657],{"class":38,"line":195},[36,162658,546],{"emptyLinePlaceholder":545},[36,162660,162661,162663,162666,162668],{"class":38,"line":1517},[36,162662,5632],{"class":114},[36,162664,162665],{"class":53}," user_password ",[36,162667,1377],{"class":114},[36,162669,162670],{"class":53}," password:\n",[36,162672,162673,162675,162677,162680],{"class":38,"line":2421},[36,162674,34954],{"class":49},[36,162676,54],{"class":53},[36,162678,162679],{"class":57},"\"登录成功\"",[36,162681,61],{"class":53},[36,162683,162684],{"class":38,"line":2446},[36,162685,34130],{"class":114},[36,162687,162688,162690],{"class":38,"line":2469},[36,162689,160144],{"class":114},[36,162691,6270],{"class":53},[36,162693,162694,162696,162698,162700,162703,162706,162708,162710,162712,162715],{"class":38,"line":2492},[36,162695,34954],{"class":49},[36,162697,54],{"class":53},[36,162699,2060],{"class":114},[36,162701,162702],{"class":57},"\"密码错误，还剩",[36,162704,162705],{"class":49},"{2",[36,162707,54765],{"class":114},[36,162709,5563],{"class":53},[36,162711,2070],{"class":49},[36,162713,162714],{"class":57},"次机会\"",[36,162716,61],{"class":53},[36,162718,162719,162721],{"class":38,"line":4150},[36,162720,4239],{"class":114},[36,162722,6270],{"class":53},[36,162724,162725,162727,162729,162732],{"class":38,"line":4155},[36,162726,33803],{"class":49},[36,162728,54],{"class":53},[36,162730,162731],{"class":57},"\"账号已锁定\"",[36,162733,61],{"class":53},[14,162735,162737],{"id":162736},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,162739,162741],{"className":28,"code":162740,"language":30,"meta":31,"style":31},"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",[33,162742,162743,162751,162762,162773,162784,162795,162806,162810,162825,162829,162841,162852,162864,162875,162887,162898,162910,162920,162924,162930],{"__ignoreMap":31},[36,162744,162745,162747,162749],{"class":38,"line":39},[36,162746,111133],{"class":114},[36,162748,97770],{"class":49},[36,162750,6270],{"class":53},[36,162752,162753,162755,162757,162760],{"class":38,"line":46},[36,162754,33803],{"class":49},[36,162756,54],{"class":53},[36,162758,162759],{"class":57},"\"====== 菜单 ======\"",[36,162761,61],{"class":53},[36,162763,162764,162766,162768,162771],{"class":38,"line":82},[36,162765,33803],{"class":49},[36,162767,54],{"class":53},[36,162769,162770],{"class":57},"\"1. 查询余额\"",[36,162772,61],{"class":53},[36,162774,162775,162777,162779,162782],{"class":38,"line":88},[36,162776,33803],{"class":49},[36,162778,54],{"class":53},[36,162780,162781],{"class":57},"\"2. 存款\"",[36,162783,61],{"class":53},[36,162785,162786,162788,162790,162793],{"class":38,"line":195},[36,162787,33803],{"class":49},[36,162789,54],{"class":53},[36,162791,162792],{"class":57},"\"3. 取款\"",[36,162794,61],{"class":53},[36,162796,162797,162799,162801,162804],{"class":38,"line":1517},[36,162798,33803],{"class":49},[36,162800,54],{"class":53},[36,162802,162803],{"class":57},"\"0. 退出\"",[36,162805,61],{"class":53},[36,162807,162808],{"class":38,"line":2421},[36,162809,546],{"emptyLinePlaceholder":545},[36,162811,162812,162815,162817,162819,162821,162823],{"class":38,"line":2446},[36,162813,162814],{"class":53},"    choice ",[36,162816,115],{"class":114},[36,162818,871],{"class":49},[36,162820,54],{"class":53},[36,162822,155520],{"class":57},[36,162824,61],{"class":53},[36,162826,162827],{"class":38,"line":2469},[36,162828,546],{"emptyLinePlaceholder":545},[36,162830,162831,162833,162835,162837,162839],{"class":38,"line":2492},[36,162832,5632],{"class":114},[36,162834,155533],{"class":53},[36,162836,1377],{"class":114},[36,162838,155538],{"class":57},[36,162840,6270],{"class":53},[36,162842,162843,162845,162847,162850],{"class":38,"line":4150},[36,162844,34954],{"class":49},[36,162846,54],{"class":53},[36,162848,162849],{"class":57},"\"余额为1000元\"",[36,162851,61],{"class":53},[36,162853,162854,162856,162858,162860,162862],{"class":38,"line":4155},[36,162855,41793],{"class":114},[36,162857,155533],{"class":53},[36,162859,1377],{"class":114},[36,162861,155557],{"class":57},[36,162863,6270],{"class":53},[36,162865,162866,162868,162870,162873],{"class":38,"line":4161},[36,162867,34954],{"class":49},[36,162869,54],{"class":53},[36,162871,162872],{"class":57},"\"存款功能\"",[36,162874,61],{"class":53},[36,162876,162877,162879,162881,162883,162885],{"class":38,"line":4166},[36,162878,41793],{"class":114},[36,162880,155533],{"class":53},[36,162882,1377],{"class":114},[36,162884,155575],{"class":57},[36,162886,6270],{"class":53},[36,162888,162889,162891,162893,162896],{"class":38,"line":4180},[36,162890,34954],{"class":49},[36,162892,54],{"class":53},[36,162894,162895],{"class":57},"\"取款功能\"",[36,162897,61],{"class":53},[36,162899,162900,162902,162904,162906,162908],{"class":38,"line":4185},[36,162901,41793],{"class":114},[36,162903,155533],{"class":53},[36,162905,1377],{"class":114},[36,162907,155629],{"class":57},[36,162909,6270],{"class":53},[36,162911,162912,162914,162916,162918],{"class":38,"line":4191},[36,162913,34954],{"class":49},[36,162915,54],{"class":53},[36,162917,155640],{"class":57},[36,162919,61],{"class":53},[36,162921,162922],{"class":38,"line":4212},[36,162923,34130],{"class":114},[36,162925,162926,162928],{"class":38,"line":4217},[36,162927,160144],{"class":114},[36,162929,6270],{"class":53},[36,162931,162932,162934,162936,162938],{"class":38,"line":4231},[36,162933,34954],{"class":49},[36,162935,54],{"class":53},[36,162937,155661],{"class":57},[36,162939,61],{"class":53},[19,162941,162942,162943,162945,162946,1296],{},"菜单类程序通常使用 ",[33,162944,161644],{},"，用户选择退出时 ",[33,162947,4589],{},[14,162949,162951],{"id":162950},"_414-易错点","4.14 易错点",[433,162953,162954,162959,162965,162973,162979],{},[436,162955,162956,162958],{},[33,162957,111133],{}," 循环必须更新控制变量。",[436,162960,162961,162964],{},[33,162962,162963],{},"range(1, 10)"," 不包含 10。",[436,162966,162967,162969,162970,162972],{},[33,162968,4589],{}," 结束整个循环，",[33,162971,157117],{}," 只跳过本轮。",[436,162974,162975,162976,162978],{},"嵌套循环中，",[33,162977,4589],{}," 只跳出当前所在的一层循环。",[436,162980,162981],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162983,162985],{"id":162984},"_415-本章练习","4.15 本章练习",[433,162987,162988,162991,162994,162997,163000],{},[436,162989,162990],{},"输出 1 到 100。",[436,162992,162993],{},"计算 1 到 100 的偶数和。",[436,162995,162996],{},"输出 100 以内能被 3 和 5 同时整除的数。",[436,162998,162999],{},"编写猜数字游戏，限制最多猜 7 次。",[436,163001,163002],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2602,163004,163005],{},"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":31,"searchDepth":46,"depth":46,"links":163007},[163008,163009,163010,163011,163012,163016,163017,163018,163019,163020,163021,163022,163023,163024,163025],{"id":161264,"depth":46,"text":161265},{"id":161294,"depth":46,"text":161295},{"id":161383,"depth":46,"text":161384},{"id":161477,"depth":46,"text":161478},{"id":161651,"depth":46,"text":161652,"children":163013},[163014,163015],{"id":161655,"depth":82,"text":161656},{"id":161719,"depth":82,"text":161720},{"id":161783,"depth":46,"text":161784},{"id":161878,"depth":46,"text":161879},{"id":161987,"depth":46,"text":161988},{"id":162183,"depth":46,"text":162184},{"id":162268,"depth":46,"text":162269},{"id":162407,"depth":46,"text":162408},{"id":162587,"depth":46,"text":162588},{"id":162736,"depth":46,"text":162737},{"id":162950,"depth":46,"text":162951},{"id":162984,"depth":46,"text":162985},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161256,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163032,"title":163033,"body":163034,"description":2630,"extension":2631,"meta":165039,"navigation":545,"path":165040,"seo":165041,"stem":165042,"__hash__":165043},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163035,"toc":165019},[163036,163039,163043,163046,163049,163063,163066,163080,163084,163086,163105,163107,163154,163156,163170,163174,163248,163251,163255,163258,163317,163325,163328,163381,163384,163388,163393,163448,163456,163506,163510,163515,163523,163622,163628,163632,163637,163640,163651,163692,163705,163709,163712,163748,163751,163764,163767,163827,163831,163835,163838,163889,163893,163896,163943,163949,164015,164018,164022,164025,164141,164144,164148,164151,164257,164261,164264,164302,164305,164347,164350,164410,164413,164417,164881,164884,164888,164915,164921,164982,164986,165016],[10,163037,163033],{"id":163038},"_5-函数基础",[14,163040,163042],{"id":163041},"_51-为什么需要函数","5.1 为什么需要函数",[19,163044,163045],{},"函数用于封装一段可以重复使用的代码。",[19,163047,163048],{},"不使用函数的问题：",[433,163050,163051,163054,163057,163060],{},[436,163052,163053],{},"重复代码多。",[436,163055,163056],{},"修改逻辑时容易漏改。",[436,163058,163059],{},"主流程不清晰。",[436,163061,163062],{},"程序越写越长，难以维护。",[19,163064,163065],{},"使用函数后的好处：",[433,163067,163068,163071,163074,163077],{},[436,163069,163070],{},"提高复用性。",[436,163072,163073],{},"提高可读性。",[436,163075,163076],{},"便于调试。",[436,163078,163079],{},"便于分工。",[14,163081,163083],{"id":163082},"_52-函数定义","5.2 函数定义",[19,163085,7712],{},[26,163087,163089],{"className":28,"code":163088,"language":30,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,163090,163091,163100],{"__ignoreMap":31},[36,163092,163093,163095,163098],{"class":38,"line":39},[36,163094,34450],{"class":114},[36,163096,163097],{"class":4500}," 函数名",[36,163099,34456],{"class":53},[36,163101,163102],{"class":38,"line":46},[36,163103,163104],{"class":53},"    函数体\n",[19,163106,814],{},[26,163108,163110],{"className":28,"code":163109,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,163111,163112,163121,163131,163141,163145,163149],{"__ignoreMap":31},[36,163113,163114,163116,163119],{"class":38,"line":39},[36,163115,34450],{"class":114},[36,163117,163118],{"class":4500}," say_hello",[36,163120,34456],{"class":53},[36,163122,163123,163125,163127,163129],{"class":38,"line":46},[36,163124,33803],{"class":49},[36,163126,54],{"class":53},[36,163128,58],{"class":57},[36,163130,61],{"class":53},[36,163132,163133,163135,163137,163139],{"class":38,"line":82},[36,163134,33803],{"class":49},[36,163136,54],{"class":53},[36,163138,149094],{"class":57},[36,163140,61],{"class":53},[36,163142,163143],{"class":38,"line":88},[36,163144,546],{"emptyLinePlaceholder":545},[36,163146,163147],{"class":38,"line":195},[36,163148,546],{"emptyLinePlaceholder":545},[36,163150,163151],{"class":38,"line":1517},[36,163152,163153],{"class":53},"say_hello()\n",[19,163155,695],{},[433,163157,163158,163161,163164,163167],{},[436,163159,163160],{},"函数必须先定义，再调用。",[436,163162,163163],{},"函数名遵循变量命名规则。",[436,163165,163166],{},"函数体需要缩进。",[436,163168,163169],{},"函数不调用就不会执行。",[14,163171,163173],{"id":163172},"_53-函数调用","5.3 函数调用",[26,163175,163177],{"className":28,"code":163176,"language":30,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,163178,163179,163188,163199,163210,163221,163231,163235,163239,163244],{"__ignoreMap":31},[36,163180,163181,163183,163186],{"class":38,"line":39},[36,163182,34450],{"class":114},[36,163184,163185],{"class":4500}," print_menu",[36,163187,34456],{"class":53},[36,163189,163190,163192,163194,163197],{"class":38,"line":46},[36,163191,33803],{"class":49},[36,163193,54],{"class":53},[36,163195,163196],{"class":57},"\"1. 查询\"",[36,163198,61],{"class":53},[36,163200,163201,163203,163205,163208],{"class":38,"line":82},[36,163202,33803],{"class":49},[36,163204,54],{"class":53},[36,163206,163207],{"class":57},"\"2. 添加\"",[36,163209,61],{"class":53},[36,163211,163212,163214,163216,163219],{"class":38,"line":88},[36,163213,33803],{"class":49},[36,163215,54],{"class":53},[36,163217,163218],{"class":57},"\"3. 删除\"",[36,163220,61],{"class":53},[36,163222,163223,163225,163227,163229],{"class":38,"line":195},[36,163224,33803],{"class":49},[36,163226,54],{"class":53},[36,163228,162803],{"class":57},[36,163230,61],{"class":53},[36,163232,163233],{"class":38,"line":1517},[36,163234,546],{"emptyLinePlaceholder":545},[36,163236,163237],{"class":38,"line":2421},[36,163238,546],{"emptyLinePlaceholder":545},[36,163240,163241],{"class":38,"line":2446},[36,163242,163243],{"class":53},"print_menu()\n",[36,163245,163246],{"class":38,"line":2469},[36,163247,163243],{"class":53},[19,163249,163250],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163252,163254],{"id":163253},"_54-参数","5.4 参数",[19,163256,163257],{},"参数用于向函数传递数据。",[26,163259,163261],{"className":28,"code":163260,"language":30,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,163262,163263,163272,163292,163296,163300,163309],{"__ignoreMap":31},[36,163264,163265,163267,163269],{"class":38,"line":39},[36,163266,34450],{"class":114},[36,163268,163118],{"class":4500},[36,163270,163271],{"class":53},"(name):\n",[36,163273,163274,163276,163278,163280,163282,163284,163286,163288,163290],{"class":38,"line":46},[36,163275,33803],{"class":49},[36,163277,54],{"class":53},[36,163279,2060],{"class":114},[36,163281,2188],{"class":57},[36,163283,2065],{"class":49},[36,163285,1998],{"class":53},[36,163287,2070],{"class":49},[36,163289,1822],{"class":57},[36,163291,61],{"class":53},[36,163293,163294],{"class":38,"line":82},[36,163295,546],{"emptyLinePlaceholder":545},[36,163297,163298],{"class":38,"line":88},[36,163299,546],{"emptyLinePlaceholder":545},[36,163301,163302,163305,163307],{"class":38,"line":195},[36,163303,163304],{"class":53},"say_hello(",[36,163306,152338],{"class":57},[36,163308,61],{"class":53},[36,163310,163311,163313,163315],{"class":38,"line":1517},[36,163312,163304],{"class":53},[36,163314,153385],{"class":57},[36,163316,61],{"class":53},[19,163318,163319,163321,163322,163324],{},[33,163320,1998],{}," 是形参，",[33,163323,152338],{}," 是实参。",[19,163326,163327],{},"多个参数：",[26,163329,163331],{"className":28,"code":163330,"language":30,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,163332,163333,163341,163354,163360,163364,163368],{"__ignoreMap":31},[36,163334,163335,163337,163339],{"class":38,"line":39},[36,163336,34450],{"class":114},[36,163338,7738],{"class":4500},[36,163340,153542],{"class":53},[36,163342,163343,163346,163348,163350,163352],{"class":38,"line":46},[36,163344,163345],{"class":53},"    result ",[36,163347,115],{"class":114},[36,163349,13392],{"class":53},[36,163351,121],{"class":114},[36,163353,153553],{"class":53},[36,163355,163356,163358],{"class":38,"line":82},[36,163357,33803],{"class":49},[36,163359,79070],{"class":53},[36,163361,163362],{"class":38,"line":88},[36,163363,546],{"emptyLinePlaceholder":545},[36,163365,163366],{"class":38,"line":195},[36,163367,546],{"emptyLinePlaceholder":545},[36,163369,163370,163373,163375,163377,163379],{"class":38,"line":1517},[36,163371,163372],{"class":53},"add(",[36,163374,1317],{"class":49},[36,163376,14958],{"class":53},[36,163378,3376],{"class":49},[36,163380,61],{"class":53},[19,163382,163383],{},"调用时参数数量必须匹配。",[14,163385,163387],{"id":163386},"_55-返回值","5.5 返回值",[19,163389,163390,163392],{},[33,163391,19564],{}," 用于把函数内部的结果返回给调用者。",[26,163394,163396],{"className":28,"code":163395,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,163397,163398,163406,163416,163420,163424,163442],{"__ignoreMap":31},[36,163399,163400,163402,163404],{"class":38,"line":39},[36,163401,34450],{"class":114},[36,163403,7738],{"class":4500},[36,163405,153542],{"class":53},[36,163407,163408,163410,163412,163414],{"class":38,"line":46},[36,163409,6621],{"class":114},[36,163411,13392],{"class":53},[36,163413,121],{"class":114},[36,163415,153553],{"class":53},[36,163417,163418],{"class":38,"line":82},[36,163419,546],{"emptyLinePlaceholder":545},[36,163421,163422],{"class":38,"line":88},[36,163423,546],{"emptyLinePlaceholder":545},[36,163425,163426,163429,163431,163434,163436,163438,163440],{"class":38,"line":195},[36,163427,163428],{"class":53},"result ",[36,163430,115],{"class":114},[36,163432,163433],{"class":53}," add(",[36,163435,1317],{"class":49},[36,163437,14958],{"class":53},[36,163439,3376],{"class":49},[36,163441,61],{"class":53},[36,163443,163444,163446],{"class":38,"line":1517},[36,163445,50],{"class":49},[36,163447,79070],{"class":53},[19,163449,163450,163451,163453,163454,1296],{},"如果函数没有写 ",[33,163452,19564],{},"，默认返回 ",[33,163455,198],{},[26,163457,163459],{"className":28,"code":163458,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,163460,163461,163469,163479,163483,163487,163496],{"__ignoreMap":31},[36,163462,163463,163465,163467],{"class":38,"line":39},[36,163464,34450],{"class":114},[36,163466,163118],{"class":4500},[36,163468,34456],{"class":53},[36,163470,163471,163473,163475,163477],{"class":38,"line":46},[36,163472,33803],{"class":49},[36,163474,54],{"class":53},[36,163476,58],{"class":57},[36,163478,61],{"class":53},[36,163480,163481],{"class":38,"line":82},[36,163482,546],{"emptyLinePlaceholder":545},[36,163484,163485],{"class":38,"line":88},[36,163486,546],{"emptyLinePlaceholder":545},[36,163488,163489,163491,163493],{"class":38,"line":195},[36,163490,163428],{"class":53},[36,163492,115],{"class":114},[36,163494,163495],{"class":53}," say_hello()\n",[36,163497,163498,163500,163503],{"class":38,"line":1517},[36,163499,50],{"class":49},[36,163501,163502],{"class":53},"(result)  ",[36,163504,163505],{"class":42},"# None\n",[14,163507,163509],{"id":163508},"_56-return的作用","5.6 return的作用",[19,163511,163512,163514],{},[33,163513,19564],{}," 有两个作用：",[433,163516,163517,163520],{},[436,163518,163519],{},"返回结果。",[436,163521,163522],{},"结束函数。",[26,163524,163526],{"className":28,"code":163525,"language":30,"meta":31,"style":31},"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",[33,163527,163528,163538,163550,163557,163561,163573,163580,163584,163591,163595,163599,163610],{"__ignoreMap":31},[36,163529,163530,163532,163535],{"class":38,"line":39},[36,163531,34450],{"class":114},[36,163533,163534],{"class":4500}," check_age",[36,163536,163537],{"class":53},"(age):\n",[36,163539,163540,163542,163544,163546,163548],{"class":38,"line":46},[36,163541,5632],{"class":114},[36,163543,118],{"class":53},[36,163545,1507],{"class":114},[36,163547,6624],{"class":49},[36,163549,6270],{"class":53},[36,163551,163552,163554],{"class":38,"line":82},[36,163553,17273],{"class":114},[36,163555,163556],{"class":57}," \"年龄不合法\"\n",[36,163558,163559],{"class":38,"line":88},[36,163560,546],{"emptyLinePlaceholder":545},[36,163562,163563,163565,163567,163569,163571],{"class":38,"line":195},[36,163564,5632],{"class":114},[36,163566,118],{"class":53},[36,163568,1490],{"class":114},[36,163570,1394],{"class":49},[36,163572,6270],{"class":53},[36,163574,163575,163577],{"class":38,"line":1517},[36,163576,17273],{"class":114},[36,163578,163579],{"class":57}," \"成年人\"\n",[36,163581,163582],{"class":38,"line":2421},[36,163583,546],{"emptyLinePlaceholder":545},[36,163585,163586,163588],{"class":38,"line":2446},[36,163587,6621],{"class":114},[36,163589,163590],{"class":57}," \"未成年人\"\n",[36,163592,163593],{"class":38,"line":2469},[36,163594,546],{"emptyLinePlaceholder":545},[36,163596,163597],{"class":38,"line":2492},[36,163598,546],{"emptyLinePlaceholder":545},[36,163600,163601,163603,163606,163608],{"class":38,"line":4150},[36,163602,50],{"class":49},[36,163604,163605],{"class":53},"(check_age(",[36,163607,3376],{"class":49},[36,163609,625],{"class":53},[36,163611,163612,163614,163616,163618,163620],{"class":38,"line":4155},[36,163613,50],{"class":49},[36,163615,163605],{"class":53},[36,163617,508],{"class":114},[36,163619,707],{"class":49},[36,163621,625],{"class":53},[19,163623,163624,163625,163627],{},"函数执行到 ",[33,163626,19564],{}," 后，后面的代码不会继续执行。",[14,163629,163631],{"id":163630},"_57-none","5.7 None",[19,163633,163634,163636],{},[33,163635,198],{}," 表示空值或没有结果。",[19,163638,163639],{},"常见使用场景：",[433,163641,163642,163645,163648],{},[436,163643,163644],{},"函数没有返回值。",[436,163646,163647],{},"变量暂时没有具体值。",[436,163649,163650],{},"表示查询不到结果。",[26,163652,163654],{"className":28,"code":163653,"language":30,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,163655,163656,163664,163668,163681],{"__ignoreMap":31},[36,163657,163658,163660,163662],{"class":38,"line":39},[36,163659,163428],{"class":53},[36,163661,115],{"class":114},[36,163663,154621],{"class":49},[36,163665,163666],{"class":38,"line":46},[36,163667,546],{"emptyLinePlaceholder":545},[36,163669,163670,163672,163675,163677,163679],{"class":38,"line":82},[36,163671,4069],{"class":114},[36,163673,163674],{"class":53}," result ",[36,163676,41427],{"class":114},[36,163678,41433],{"class":49},[36,163680,6270],{"class":53},[36,163682,163683,163685,163687,163690],{"class":38,"line":88},[36,163684,33803],{"class":49},[36,163686,54],{"class":53},[36,163688,163689],{"class":57},"\"没有数据\"",[36,163691,61],{"class":53},[19,163693,163694,163695,163697,163698,163701,163702,1296],{},"判断 ",[33,163696,198],{}," 推荐使用 ",[33,163699,163700],{},"is None","，不要写成 ",[33,163703,163704],{},"== None",[14,163706,163708],{"id":163707},"_58-函数文档字符串","5.8 函数文档字符串",[19,163710,163711],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,163713,163715],{"className":28,"code":163714,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,163716,163717,163727,163732],{"__ignoreMap":31},[36,163718,163719,163721,163724],{"class":38,"line":39},[36,163720,34450],{"class":114},[36,163722,163723],{"class":4500}," calculate_bmi",[36,163725,163726],{"class":53},"(weight, height):\n",[36,163728,163729],{"class":38,"line":46},[36,163730,163731],{"class":57},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,163733,163734,163736,163739,163741,163744,163746],{"class":38,"line":82},[36,163735,6621],{"class":114},[36,163737,163738],{"class":53}," weight ",[36,163740,1065],{"class":114},[36,163742,163743],{"class":53}," height ",[36,163745,1110],{"class":114},[36,163747,1237],{"class":49},[19,163749,163750],{},"查看说明：",[26,163752,163754],{"className":28,"code":163753,"language":30,"meta":31,"style":31},"help(calculate_bmi)\n",[33,163755,163756],{"__ignoreMap":31},[36,163757,163758,163761],{"class":38,"line":39},[36,163759,163760],{"class":49},"help",[36,163762,163763],{"class":53},"(calculate_bmi)\n",[19,163765,163766],{},"较完整的写法：",[26,163768,163770],{"className":28,"code":163769,"language":30,"meta":31,"style":31},"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",[33,163771,163772,163780,163785,163790,163794,163799,163804,163809,163813],{"__ignoreMap":31},[36,163773,163774,163776,163778],{"class":38,"line":39},[36,163775,34450],{"class":114},[36,163777,163723],{"class":4500},[36,163779,163726],{"class":53},[36,163781,163782],{"class":38,"line":46},[36,163783,163784],{"class":57},"    \"\"\"\n",[36,163786,163787],{"class":38,"line":82},[36,163788,163789],{"class":57},"    计算BMI。\n",[36,163791,163792],{"class":38,"line":88},[36,163793,546],{"emptyLinePlaceholder":545},[36,163795,163796],{"class":38,"line":195},[36,163797,163798],{"class":57},"    :param weight: 体重，单位kg\n",[36,163800,163801],{"class":38,"line":1517},[36,163802,163803],{"class":57},"    :param height: 身高，单位m\n",[36,163805,163806],{"class":38,"line":2421},[36,163807,163808],{"class":57},"    :return: BMI数值\n",[36,163810,163811],{"class":38,"line":2446},[36,163812,163784],{"class":57},[36,163814,163815,163817,163819,163821,163823,163825],{"class":38,"line":2469},[36,163816,6621],{"class":114},[36,163818,163738],{"class":53},[36,163820,1065],{"class":114},[36,163822,163743],{"class":53},[36,163824,1110],{"class":114},[36,163826,1237],{"class":49},[14,163828,163830],{"id":163829},"_59-变量作用域","5.9 变量作用域",[997,163832,163834],{"id":163833},"_591-局部变量","5.9.1 局部变量",[19,163836,163837],{},"在函数内部定义的变量，只能在函数内部使用。",[26,163839,163841],{"className":28,"code":163840,"language":30,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,163842,163843,163852,163860,163866,163870,163874,163879],{"__ignoreMap":31},[36,163844,163845,163847,163850],{"class":38,"line":39},[36,163846,34450],{"class":114},[36,163848,163849],{"class":4500}," test",[36,163851,34456],{"class":53},[36,163853,163854,163856,163858],{"class":38,"line":46},[36,163855,48092],{"class":53},[36,163857,115],{"class":114},[36,163859,1217],{"class":49},[36,163861,163862,163864],{"class":38,"line":82},[36,163863,33803],{"class":49},[36,163865,2715],{"class":53},[36,163867,163868],{"class":38,"line":88},[36,163869,546],{"emptyLinePlaceholder":545},[36,163871,163872],{"class":38,"line":195},[36,163873,546],{"emptyLinePlaceholder":545},[36,163875,163876],{"class":38,"line":1517},[36,163877,163878],{"class":53},"test()\n",[36,163880,163881,163883,163886],{"class":38,"line":2421},[36,163882,50],{"class":49},[36,163884,163885],{"class":53},"(num)  ",[36,163887,163888],{"class":42},"# 报错\n",[997,163890,163892],{"id":163891},"_592-全局变量","5.9.2 全局变量",[19,163894,163895],{},"在函数外部定义的变量，可以在函数内部读取。",[26,163897,163899],{"className":28,"code":163898,"language":30,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,163900,163901,163909,163913,163917,163925,163931,163935,163939],{"__ignoreMap":31},[36,163902,163903,163905,163907],{"class":38,"line":39},[36,163904,360],{"class":53},[36,163906,115],{"class":114},[36,163908,365],{"class":57},[36,163910,163911],{"class":38,"line":46},[36,163912,546],{"emptyLinePlaceholder":545},[36,163914,163915],{"class":38,"line":82},[36,163916,546],{"emptyLinePlaceholder":545},[36,163918,163919,163921,163923],{"class":38,"line":88},[36,163920,34450],{"class":114},[36,163922,163118],{"class":4500},[36,163924,34456],{"class":53},[36,163926,163927,163929],{"class":38,"line":195},[36,163928,33803],{"class":49},[36,163930,153109],{"class":53},[36,163932,163933],{"class":38,"line":1517},[36,163934,546],{"emptyLinePlaceholder":545},[36,163936,163937],{"class":38,"line":2421},[36,163938,546],{"emptyLinePlaceholder":545},[36,163940,163941],{"class":38,"line":2446},[36,163942,163153],{"class":53},[19,163944,163945,163946,1296],{},"如果要在函数内部修改全局变量，需要 ",[33,163947,163948],{},"global",[26,163950,163952],{"className":28,"code":163951,"language":30,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,163953,163954,163962,163966,163970,163979,163987,163995,163999,164003,164008],{"__ignoreMap":31},[36,163955,163956,163958,163960],{"class":38,"line":39},[36,163957,2116],{"class":53},[36,163959,115],{"class":114},[36,163961,49830],{"class":49},[36,163963,163964],{"class":38,"line":46},[36,163965,546],{"emptyLinePlaceholder":545},[36,163967,163968],{"class":38,"line":82},[36,163969,546],{"emptyLinePlaceholder":545},[36,163971,163972,163974,163977],{"class":38,"line":88},[36,163973,34450],{"class":114},[36,163975,163976],{"class":4500}," add_count",[36,163978,34456],{"class":53},[36,163980,163981,163984],{"class":38,"line":195},[36,163982,163983],{"class":114},"    global",[36,163985,163986],{"class":53}," count\n",[36,163988,163989,163991,163993],{"class":38,"line":1517},[36,163990,161555],{"class":53},[36,163992,1224],{"class":114},[36,163994,124],{"class":49},[36,163996,163997],{"class":38,"line":2421},[36,163998,546],{"emptyLinePlaceholder":545},[36,164000,164001],{"class":38,"line":2446},[36,164002,546],{"emptyLinePlaceholder":545},[36,164004,164005],{"class":38,"line":2469},[36,164006,164007],{"class":53},"add_count()\n",[36,164009,164010,164012],{"class":38,"line":2492},[36,164011,50],{"class":49},[36,164013,164014],{"class":53},"(count)\n",[19,164016,164017],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164019,164021],{"id":164020},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164023,164024],{},"一个函数中可以调用另一个函数。",[26,164026,164028],{"className":28,"code":164027,"language":30,"meta":31,"style":31},"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",[33,164029,164030,164039,164053,164057,164061,164070,164075,164095,164116,164120,164124,164128],{"__ignoreMap":31},[36,164031,164032,164034,164037],{"class":38,"line":39},[36,164033,34450],{"class":114},[36,164035,164036],{"class":4500}," print_line",[36,164038,34456],{"class":53},[36,164040,164041,164043,164045,164047,164049,164051],{"class":38,"line":46},[36,164042,33803],{"class":49},[36,164044,54],{"class":53},[36,164046,34985],{"class":57},[36,164048,9045],{"class":114},[36,164050,81148],{"class":49},[36,164052,61],{"class":53},[36,164054,164055],{"class":38,"line":82},[36,164056,546],{"emptyLinePlaceholder":545},[36,164058,164059],{"class":38,"line":88},[36,164060,546],{"emptyLinePlaceholder":545},[36,164062,164063,164065,164068],{"class":38,"line":195},[36,164064,34450],{"class":114},[36,164066,164067],{"class":4500}," print_info",[36,164069,151826],{"class":53},[36,164071,164072],{"class":38,"line":1517},[36,164073,164074],{"class":53},"    print_line()\n",[36,164076,164077,164079,164081,164083,164085,164087,164089,164091,164093],{"class":38,"line":2421},[36,164078,33803],{"class":49},[36,164080,54],{"class":53},[36,164082,2060],{"class":114},[36,164084,1804],{"class":57},[36,164086,2065],{"class":49},[36,164088,1998],{"class":53},[36,164090,2070],{"class":49},[36,164092,1822],{"class":57},[36,164094,61],{"class":53},[36,164096,164097,164099,164101,164103,164106,164108,164110,164112,164114],{"class":38,"line":2446},[36,164098,33803],{"class":49},[36,164100,54],{"class":53},[36,164102,2060],{"class":114},[36,164104,164105],{"class":57},"\"年龄:",[36,164107,2065],{"class":49},[36,164109,2006],{"class":53},[36,164111,2070],{"class":49},[36,164113,1822],{"class":57},[36,164115,61],{"class":53},[36,164117,164118],{"class":38,"line":2469},[36,164119,164074],{"class":53},[36,164121,164122],{"class":38,"line":2492},[36,164123,546],{"emptyLinePlaceholder":545},[36,164125,164126],{"class":38,"line":4150},[36,164127,546],{"emptyLinePlaceholder":545},[36,164129,164130,164133,164135,164137,164139],{"class":38,"line":4155},[36,164131,164132],{"class":53},"print_info(",[36,164134,152338],{"class":57},[36,164136,14958],{"class":53},[36,164138,3326],{"class":49},[36,164140,61],{"class":53},[19,164142,164143],{},"这种方式可以把小功能组合成大功能。",[14,164145,164147],{"id":164146},"_511-参数检查","5.11 参数检查",[19,164149,164150],{},"函数内部可以检查参数是否合法。",[26,164152,164154],{"className":28,"code":164153,"language":30,"meta":31,"style":31},"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",[33,164155,164156,164165,164177,164183,164193,164197,164201,164218,164222,164234,164245,164251],{"__ignoreMap":31},[36,164157,164158,164160,164163],{"class":38,"line":39},[36,164159,34450],{"class":114},[36,164161,164162],{"class":4500}," divide",[36,164164,153542],{"class":53},[36,164166,164167,164169,164171,164173,164175],{"class":38,"line":46},[36,164168,5632],{"class":114},[36,164170,13405],{"class":53},[36,164172,1377],{"class":114},[36,164174,6624],{"class":49},[36,164176,6270],{"class":53},[36,164178,164179,164181],{"class":38,"line":82},[36,164180,17273],{"class":114},[36,164182,154621],{"class":49},[36,164184,164185,164187,164189,164191],{"class":38,"line":88},[36,164186,6621],{"class":114},[36,164188,13392],{"class":53},[36,164190,1065],{"class":114},[36,164192,153553],{"class":53},[36,164194,164195],{"class":38,"line":195},[36,164196,546],{"emptyLinePlaceholder":545},[36,164198,164199],{"class":38,"line":1517},[36,164200,546],{"emptyLinePlaceholder":545},[36,164202,164203,164205,164207,164210,164212,164214,164216],{"class":38,"line":2421},[36,164204,163428],{"class":53},[36,164206,115],{"class":114},[36,164208,164209],{"class":53}," divide(",[36,164211,1317],{"class":49},[36,164213,14958],{"class":53},[36,164215,713],{"class":49},[36,164217,61],{"class":53},[36,164219,164220],{"class":38,"line":2446},[36,164221,546],{"emptyLinePlaceholder":545},[36,164223,164224,164226,164228,164230,164232],{"class":38,"line":2469},[36,164225,4069],{"class":114},[36,164227,163674],{"class":53},[36,164229,41427],{"class":114},[36,164231,41433],{"class":49},[36,164233,6270],{"class":53},[36,164235,164236,164238,164240,164243],{"class":38,"line":2492},[36,164237,33803],{"class":49},[36,164239,54],{"class":53},[36,164241,164242],{"class":57},"\"除数不能为0\"",[36,164244,61],{"class":53},[36,164246,164247,164249],{"class":38,"line":4150},[36,164248,4239],{"class":114},[36,164250,6270],{"class":53},[36,164252,164253,164255],{"class":38,"line":4155},[36,164254,33803],{"class":49},[36,164256,79070],{"class":53},[14,164258,164260],{"id":164259},"_512-类型提示","5.12 类型提示",[19,164262,164263],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,164265,164267],{"className":28,"code":164266,"language":30,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,164268,164269,164292],{"__ignoreMap":31},[36,164270,164271,164273,164275,164278,164280,164283,164285,164288,164290],{"class":38,"line":39},[36,164272,34450],{"class":114},[36,164274,7738],{"class":4500},[36,164276,164277],{"class":53},"(a: ",[36,164279,232],{"class":49},[36,164281,164282],{"class":53},", b: ",[36,164284,232],{"class":49},[36,164286,164287],{"class":53},") -> ",[36,164289,232],{"class":49},[36,164291,6270],{"class":53},[36,164293,164294,164296,164298,164300],{"class":38,"line":46},[36,164295,6621],{"class":114},[36,164297,13392],{"class":53},[36,164299,121],{"class":114},[36,164301,153553],{"class":53},[19,164303,164304],{},"字符串参数：",[26,164306,164308],{"className":28,"code":164307,"language":30,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,164309,164310,164327],{"__ignoreMap":31},[36,164311,164312,164314,164316,164319,164321,164323,164325],{"class":38,"line":39},[36,164313,34450],{"class":114},[36,164315,163118],{"class":4500},[36,164317,164318],{"class":53},"(name: ",[36,164320,256],{"class":49},[36,164322,164287],{"class":53},[36,164324,198],{"class":49},[36,164326,6270],{"class":53},[36,164328,164329,164331,164333,164335,164337,164339,164341,164343,164345],{"class":38,"line":46},[36,164330,33803],{"class":49},[36,164332,54],{"class":53},[36,164334,2060],{"class":114},[36,164336,2188],{"class":57},[36,164338,2065],{"class":49},[36,164340,1998],{"class":53},[36,164342,2070],{"class":49},[36,164344,1822],{"class":57},[36,164346,61],{"class":53},[19,164348,164349],{},"列表参数：",[26,164351,164353],{"className":28,"code":164352,"language":30,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,164354,164355,164374,164382,164394,164403],{"__ignoreMap":31},[36,164356,164357,164359,164362,164365,164367,164370,164372],{"class":38,"line":39},[36,164358,34450],{"class":114},[36,164360,164361],{"class":4500}," get_total",[36,164363,164364],{"class":53},"(numbers: list[",[36,164366,232],{"class":49},[36,164368,164369],{"class":53},"]) -> ",[36,164371,232],{"class":49},[36,164373,6270],{"class":53},[36,164375,164376,164378,164380],{"class":38,"line":46},[36,164377,161429],{"class":53},[36,164379,115],{"class":114},[36,164381,49830],{"class":49},[36,164383,164384,164386,164389,164391],{"class":38,"line":82},[36,164385,5732],{"class":114},[36,164387,164388],{"class":53}," number ",[36,164390,28556],{"class":114},[36,164392,164393],{"class":53}," numbers:\n",[36,164395,164396,164398,164400],{"class":38,"line":88},[36,164397,162104],{"class":53},[36,164399,1224],{"class":114},[36,164401,164402],{"class":53}," number\n",[36,164404,164405,164407],{"class":38,"line":195},[36,164406,6621],{"class":114},[36,164408,164409],{"class":53}," total\n",[19,164411,164412],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164414,164416],{"id":164415},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,164418,164420],{"className":28,"code":164419,"language":30,"meta":31,"style":31},"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",[33,164421,164422,164432,164436,164440,164448,164459,164469,164479,164489,164499,164503,164507,164516,164538,164542,164546,164555,164561,164581,164593,164604,164608,164617,164628,164633,164637,164641,164650,164656,164675,164687,164697,164701,164712,164722,164726,164734,164745,164749,164753,164757,164765,164770,164784,164788,164800,164805,164817,164822,164834,164839,164851,164861,164865,164871],{"__ignoreMap":31},[36,164423,164424,164427,164429],{"class":38,"line":39},[36,164425,164426],{"class":53},"balance ",[36,164428,115],{"class":114},[36,164430,164431],{"class":49}," 1000\n",[36,164433,164434],{"class":38,"line":46},[36,164435,546],{"emptyLinePlaceholder":545},[36,164437,164438],{"class":38,"line":82},[36,164439,546],{"emptyLinePlaceholder":545},[36,164441,164442,164444,164446],{"class":38,"line":88},[36,164443,34450],{"class":114},[36,164445,154482],{"class":4500},[36,164447,34456],{"class":53},[36,164449,164450,164452,164454,164457],{"class":38,"line":195},[36,164451,33803],{"class":49},[36,164453,54],{"class":53},[36,164455,164456],{"class":57},"\"====== ATM ======\"",[36,164458,61],{"class":53},[36,164460,164461,164463,164465,164467],{"class":38,"line":1517},[36,164462,33803],{"class":49},[36,164464,54],{"class":53},[36,164466,162770],{"class":57},[36,164468,61],{"class":53},[36,164470,164471,164473,164475,164477],{"class":38,"line":2421},[36,164472,33803],{"class":49},[36,164474,54],{"class":53},[36,164476,162781],{"class":57},[36,164478,61],{"class":53},[36,164480,164481,164483,164485,164487],{"class":38,"line":2446},[36,164482,33803],{"class":49},[36,164484,54],{"class":53},[36,164486,162792],{"class":57},[36,164488,61],{"class":53},[36,164490,164491,164493,164495,164497],{"class":38,"line":2469},[36,164492,33803],{"class":49},[36,164494,54],{"class":53},[36,164496,162803],{"class":57},[36,164498,61],{"class":53},[36,164500,164501],{"class":38,"line":2492},[36,164502,546],{"emptyLinePlaceholder":545},[36,164504,164505],{"class":38,"line":4150},[36,164506,546],{"emptyLinePlaceholder":545},[36,164508,164509,164511,164514],{"class":38,"line":4155},[36,164510,34450],{"class":114},[36,164512,164513],{"class":4500}," show_balance",[36,164515,34456],{"class":53},[36,164517,164518,164520,164522,164524,164527,164529,164532,164534,164536],{"class":38,"line":4161},[36,164519,33803],{"class":49},[36,164521,54],{"class":53},[36,164523,2060],{"class":114},[36,164525,164526],{"class":57},"\"当前余额:",[36,164528,2065],{"class":49},[36,164530,164531],{"class":53},"balance",[36,164533,2070],{"class":49},[36,164535,2145],{"class":57},[36,164537,61],{"class":53},[36,164539,164540],{"class":38,"line":4166},[36,164541,546],{"emptyLinePlaceholder":545},[36,164543,164544],{"class":38,"line":4180},[36,164545,546],{"emptyLinePlaceholder":545},[36,164547,164548,164550,164553],{"class":38,"line":4185},[36,164549,34450],{"class":114},[36,164551,164552],{"class":4500}," save_money",[36,164554,34456],{"class":53},[36,164556,164557,164559],{"class":38,"line":4191},[36,164558,163983],{"class":114},[36,164560,152549],{"class":53},[36,164562,164563,164566,164568,164570,164572,164574,164576,164579],{"class":38,"line":4212},[36,164564,164565],{"class":53},"    money ",[36,164567,115],{"class":114},[36,164569,985],{"class":49},[36,164571,54],{"class":53},[36,164573,913],{"class":49},[36,164575,54],{"class":53},[36,164577,164578],{"class":57},"\"请输入存款金额:\"",[36,164580,625],{"class":53},[36,164582,164583,164585,164587,164589,164591],{"class":38,"line":4217},[36,164584,5632],{"class":114},[36,164586,152592],{"class":53},[36,164588,4126],{"class":114},[36,164590,6624],{"class":49},[36,164592,6270],{"class":53},[36,164594,164595,164597,164599,164602],{"class":38,"line":4231},[36,164596,34954],{"class":49},[36,164598,54],{"class":53},[36,164600,164601],{"class":57},"\"金额必须大于0\"",[36,164603,61],{"class":53},[36,164605,164606],{"class":38,"line":4236},[36,164607,154810],{"class":114},[36,164609,164610,164613,164615],{"class":38,"line":4264},[36,164611,164612],{"class":53},"    balance ",[36,164614,1224],{"class":114},[36,164616,152625],{"class":53},[36,164618,164619,164621,164623,164626],{"class":38,"line":4269},[36,164620,33803],{"class":49},[36,164622,54],{"class":53},[36,164624,164625],{"class":57},"\"存款成功\"",[36,164627,61],{"class":53},[36,164629,164630],{"class":38,"line":4286},[36,164631,164632],{"class":53},"    show_balance()\n",[36,164634,164635],{"class":38,"line":4291},[36,164636,546],{"emptyLinePlaceholder":545},[36,164638,164639],{"class":38,"line":4296},[36,164640,546],{"emptyLinePlaceholder":545},[36,164642,164643,164645,164648],{"class":38,"line":4301},[36,164644,34450],{"class":114},[36,164646,164647],{"class":4500}," withdraw_money",[36,164649,34456],{"class":53},[36,164651,164652,164654],{"class":38,"line":4315},[36,164653,163983],{"class":114},[36,164655,152549],{"class":53},[36,164657,164658,164660,164662,164664,164666,164668,164670,164673],{"class":38,"line":4320},[36,164659,164565],{"class":53},[36,164661,115],{"class":114},[36,164663,985],{"class":49},[36,164665,54],{"class":53},[36,164667,913],{"class":49},[36,164669,54],{"class":53},[36,164671,164672],{"class":57},"\"请输入取款金额:\"",[36,164674,625],{"class":53},[36,164676,164677,164679,164681,164683,164685],{"class":38,"line":5109},[36,164678,5632],{"class":114},[36,164680,152592],{"class":53},[36,164682,4126],{"class":114},[36,164684,6624],{"class":49},[36,164686,6270],{"class":53},[36,164688,164689,164691,164693,164695],{"class":38,"line":5123},[36,164690,34954],{"class":49},[36,164692,54],{"class":53},[36,164694,164601],{"class":57},[36,164696,61],{"class":53},[36,164698,164699],{"class":38,"line":5131},[36,164700,154810],{"class":114},[36,164702,164703,164705,164707,164709],{"class":38,"line":5136},[36,164704,5632],{"class":114},[36,164706,152592],{"class":53},[36,164708,3633],{"class":114},[36,164710,164711],{"class":53}," balance:\n",[36,164713,164714,164716,164718,164720],{"class":38,"line":5142},[36,164715,34954],{"class":49},[36,164717,54],{"class":53},[36,164719,152687],{"class":57},[36,164721,61],{"class":53},[36,164723,164724],{"class":38,"line":5148},[36,164725,154810],{"class":114},[36,164727,164728,164730,164732],{"class":38,"line":5153},[36,164729,164612],{"class":53},[36,164731,1234],{"class":114},[36,164733,152625],{"class":53},[36,164735,164736,164738,164740,164743],{"class":38,"line":10475},[36,164737,33803],{"class":49},[36,164739,54],{"class":53},[36,164741,164742],{"class":57},"\"取款成功\"",[36,164744,61],{"class":53},[36,164746,164747],{"class":38,"line":10499},[36,164748,164632],{"class":53},[36,164750,164751],{"class":38,"line":10504},[36,164752,546],{"emptyLinePlaceholder":545},[36,164754,164755],{"class":38,"line":10510},[36,164756,546],{"emptyLinePlaceholder":545},[36,164758,164759,164761,164763],{"class":38,"line":10537},[36,164760,111133],{"class":114},[36,164762,97770],{"class":49},[36,164764,6270],{"class":53},[36,164766,164767],{"class":38,"line":10542},[36,164768,164769],{"class":53},"    show_menu()\n",[36,164771,164772,164774,164776,164778,164780,164782],{"class":38,"line":10548},[36,164773,162814],{"class":53},[36,164775,115],{"class":114},[36,164777,871],{"class":49},[36,164779,54],{"class":53},[36,164781,155520],{"class":57},[36,164783,61],{"class":53},[36,164785,164786],{"class":38,"line":10560},[36,164787,546],{"emptyLinePlaceholder":545},[36,164789,164790,164792,164794,164796,164798],{"class":38,"line":10572},[36,164791,5632],{"class":114},[36,164793,155533],{"class":53},[36,164795,1377],{"class":114},[36,164797,155538],{"class":57},[36,164799,6270],{"class":53},[36,164801,164802],{"class":38,"line":10584},[36,164803,164804],{"class":53},"        show_balance()\n",[36,164806,164807,164809,164811,164813,164815],{"class":38,"line":12241},[36,164808,41793],{"class":114},[36,164810,155533],{"class":53},[36,164812,1377],{"class":114},[36,164814,155557],{"class":57},[36,164816,6270],{"class":53},[36,164818,164819],{"class":38,"line":12266},[36,164820,164821],{"class":53},"        save_money()\n",[36,164823,164824,164826,164828,164830,164832],{"class":38,"line":12289},[36,164825,41793],{"class":114},[36,164827,155533],{"class":53},[36,164829,1377],{"class":114},[36,164831,155575],{"class":57},[36,164833,6270],{"class":53},[36,164835,164836],{"class":38,"line":12313},[36,164837,164838],{"class":53},"        withdraw_money()\n",[36,164840,164841,164843,164845,164847,164849],{"class":38,"line":12318},[36,164842,41793],{"class":114},[36,164844,155533],{"class":53},[36,164846,1377],{"class":114},[36,164848,155629],{"class":57},[36,164850,6270],{"class":53},[36,164852,164853,164855,164857,164859],{"class":38,"line":12323},[36,164854,34954],{"class":49},[36,164856,54],{"class":53},[36,164858,155640],{"class":57},[36,164860,61],{"class":53},[36,164862,164863],{"class":38,"line":12328},[36,164864,34130],{"class":114},[36,164866,164867,164869],{"class":38,"line":12337},[36,164868,160144],{"class":114},[36,164870,6270],{"class":53},[36,164872,164873,164875,164877,164879],{"class":38,"line":12342},[36,164874,34954],{"class":49},[36,164876,54],{"class":53},[36,164878,155661],{"class":57},[36,164880,61],{"class":53},[19,164882,164883],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164885,164887],{"id":164886},"_514-易错点","5.14 易错点",[433,164889,164890,164893,164896,164901,164906,164909],{},[436,164891,164892],{},"函数定义后必须调用才会执行。",[436,164894,164895],{},"函数名后面有括号才是调用。",[436,164897,164898,164900],{},[33,164899,19564],{}," 后面的代码不会执行。",[436,164902,164903,164904,1296],{},"没有返回值的函数默认返回 ",[33,164905,198],{},[436,164907,164908],{},"局部变量不能在函数外部访问。",[436,164910,164911,164912,164914],{},"不要滥用 ",[33,164913,163948],{},"，更好的方式是让函数返回新值。",[19,164916,164917,164918,164920],{},"例如不用 ",[33,164919,163948],{}," 改写存款：",[26,164922,164924],{"className":28,"code":164923,"language":30,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,164925,164926,164935,164946,164950,164954,164962,164975],{"__ignoreMap":31},[36,164927,164928,164930,164932],{"class":38,"line":39},[36,164929,34450],{"class":114},[36,164931,164552],{"class":4500},[36,164933,164934],{"class":53},"(balance, money):\n",[36,164936,164937,164939,164942,164944],{"class":38,"line":46},[36,164938,6621],{"class":114},[36,164940,164941],{"class":53}," balance ",[36,164943,121],{"class":114},[36,164945,152625],{"class":53},[36,164947,164948],{"class":38,"line":82},[36,164949,546],{"emptyLinePlaceholder":545},[36,164951,164952],{"class":38,"line":88},[36,164953,546],{"emptyLinePlaceholder":545},[36,164955,164956,164958,164960],{"class":38,"line":195},[36,164957,164426],{"class":53},[36,164959,115],{"class":114},[36,164961,164431],{"class":49},[36,164963,164964,164966,164968,164971,164973],{"class":38,"line":1517},[36,164965,164426],{"class":53},[36,164967,115],{"class":114},[36,164969,164970],{"class":53}," save_money(balance, ",[36,164972,4259],{"class":49},[36,164974,61],{"class":53},[36,164976,164977,164979],{"class":38,"line":2421},[36,164978,50],{"class":49},[36,164980,164981],{"class":53},"(balance)\n",[14,164983,164985],{"id":164984},"_515-本章练习","5.15 本章练习",[433,164987,164988,164995,165001,165007,165013],{},[436,164989,164990,164991,164994],{},"定义函数 ",[33,164992,164993],{},"print_student(name, age)","，输出学生信息。",[436,164996,164990,164997,165000],{},[33,164998,164999],{},"get_max(a, b, c)","，返回三个数中的最大值。",[436,165002,164990,165003,165006],{},[33,165004,165005],{},"is_even(num)","，判断一个数是否为偶数。",[436,165008,164990,165009,165012],{},[33,165010,165011],{},"calculate_bmi(weight, height)","，返回 BMI。",[436,165014,165015],{},"把第 4 章的菜单程序拆分成多个函数。",[2602,165017,165018],{},"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":31,"searchDepth":46,"depth":46,"links":165020},[165021,165022,165023,165024,165025,165026,165027,165028,165029,165033,165034,165035,165036,165037,165038],{"id":163041,"depth":46,"text":163042},{"id":163082,"depth":46,"text":163083},{"id":163172,"depth":46,"text":163173},{"id":163253,"depth":46,"text":163254},{"id":163386,"depth":46,"text":163387},{"id":163508,"depth":46,"text":163509},{"id":163630,"depth":46,"text":163631},{"id":163707,"depth":46,"text":163708},{"id":163829,"depth":46,"text":163830,"children":165030},[165031,165032],{"id":163833,"depth":82,"text":163834},{"id":163891,"depth":82,"text":163892},{"id":164020,"depth":46,"text":164021},{"id":164146,"depth":46,"text":164147},{"id":164259,"depth":46,"text":164260},{"id":164415,"depth":46,"text":164416},{"id":164886,"depth":46,"text":164887},{"id":164984,"depth":46,"text":164985},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163033,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165045,"title":165046,"body":165047,"description":2630,"extension":2631,"meta":168091,"navigation":545,"path":168092,"seo":168093,"stem":168094,"__hash__":168095},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165048,"toc":168072},[165049,165052,165056,165059,165062,165166,165169,165173,165176,165256,165259,165263,165266,165326,165329,165365,165368,165383,165387,165460,165463,165518,165521,165591,165594,165678,165688,165746,165750,165795,165798,165824,165827,165933,165937,165940,165982,165985,166049,166052,166056,166059,166120,166123,166153,166156,166194,166198,166201,166210,166213,166337,166340,166381,166385,166388,166399,166439,166442,166457,166462,166465,166532,166535,166625,166629,166632,166680,166683,166710,166712,166742,166745,166765,166768,166799,166802,166835,166839,166842,166866,166869,166893,166896,166920,166924,166927,167057,167060,167140,167143,167218,167222,167225,167275,167278,167320,167323,167347,167349,167373,167376,167431,167434,167500,167504,167507,167510,167548,167551,167604,167607,167653,167656,167689,167692,167696,168015,168019,168048,168052,168069],[10,165050,165046],{"id":165051},"_6-数据容器",[14,165053,165055],{"id":165054},"_61-什么是数据容器","6.1 什么是数据容器",[19,165057,165058],{},"数据容器用于一次保存多个数据。",[19,165060,165061],{},"常见容器：",[206,165063,165064,165081],{},[209,165065,165066],{},[212,165067,165068,165070,165073,165076,165079],{},[215,165069,28285],{},[215,165071,165072],{},"是否有序",[215,165074,165075],{},"是否可变",[215,165077,165078],{},"是否允许重复",[215,165080,220],{},[225,165082,165083,165101,165117,165132,165149],{},[212,165084,165085,165088,165091,165094,165097],{},[230,165086,165087],{},"list列表",[230,165089,165090],{},"有序",[230,165092,165093],{},"可变",[230,165095,165096],{},"允许",[230,165098,165099],{},[33,165100,301],{},[212,165102,165103,165106,165108,165111,165113],{},[230,165104,165105],{},"tuple元组",[230,165107,165090],{},[230,165109,165110],{},"不可变",[230,165112,165096],{},[230,165114,165115],{},[33,165116,314],{},[212,165118,165119,165122,165124,165126,165128],{},[230,165120,165121],{},"str字符串",[230,165123,165090],{},[230,165125,165110],{},[230,165127,165096],{},[230,165129,165130],{},[33,165131,963],{},[212,165133,165134,165137,165140,165142,165145],{},[230,165135,165136],{},"set集合",[230,165138,165139],{},"无序",[230,165141,165093],{},[230,165143,165144],{},"不允许",[230,165146,165147],{},[33,165148,340],{},[212,165150,165151,165154,165156,165158,165161],{},[230,165152,165153],{},"dict字典",[230,165155,165090],{},[230,165157,165093],{},[230,165159,165160],{},"key不允许重复",[230,165162,165163],{},[33,165164,165165],{},"{\"name\": \"小明\"}",[19,165167,165168],{},"Python 3.7 之后，字典保持插入顺序。",[14,165170,165172],{"id":165171},"_62-列表list","6.2 列表list",[19,165174,165175],{},"列表用于保存一组有顺序的数据。",[26,165177,165179],{"className":28,"code":165178,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,165180,165181,165201,165226,165247],{"__ignoreMap":31},[36,165182,165183,165185,165187,165189,165191,165193,165195,165197,165199],{"class":38,"line":39},[36,165184,162502],{"class":53},[36,165186,115],{"class":114},[36,165188,54720],{"class":53},[36,165190,152338],{"class":57},[36,165192,14958],{"class":53},[36,165194,153385],{"class":57},[36,165196,14958],{"class":53},[36,165198,161853],{"class":57},[36,165200,35748],{"class":53},[36,165202,165203,165206,165208,165210,165212,165214,165216,165218,165220,165222,165224],{"class":38,"line":46},[36,165204,165205],{"class":53},"numbers ",[36,165207,115],{"class":114},[36,165209,54720],{"class":53},[36,165211,707],{"class":49},[36,165213,14958],{"class":53},[36,165215,1188],{"class":49},[36,165217,14958],{"class":53},[36,165219,2767],{"class":49},[36,165221,14958],{"class":53},[36,165223,2977],{"class":49},[36,165225,35748],{"class":53},[36,165227,165228,165231,165233,165235,165237,165239,165241,165243,165245],{"class":38,"line":82},[36,165229,165230],{"class":53},"mixed ",[36,165232,115],{"class":114},[36,165234,54720],{"class":53},[36,165236,152338],{"class":57},[36,165238,14958],{"class":53},[36,165240,3326],{"class":49},[36,165242,14958],{"class":53},[36,165244,189],{"class":49},[36,165246,35748],{"class":53},[36,165248,165249,165252,165254],{"class":38,"line":88},[36,165250,165251],{"class":53},"empty ",[36,165253,115],{"class":114},[36,165255,54332],{"class":53},[19,165257,165258],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165260,165262],{"id":165261},"_63-列表索引","6.3 列表索引",[19,165264,165265],{},"正向索引从 0 开始：",[26,165267,165269],{"className":28,"code":165268,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,165270,165271,165291,165295,165306,165316],{"__ignoreMap":31},[36,165272,165273,165275,165277,165279,165281,165283,165285,165287,165289],{"class":38,"line":39},[36,165274,162502],{"class":53},[36,165276,115],{"class":114},[36,165278,54720],{"class":53},[36,165280,152338],{"class":57},[36,165282,14958],{"class":53},[36,165284,153385],{"class":57},[36,165286,14958],{"class":53},[36,165288,161853],{"class":57},[36,165290,35748],{"class":53},[36,165292,165293],{"class":38,"line":46},[36,165294,546],{"emptyLinePlaceholder":545},[36,165296,165297,165299,165302,165304],{"class":38,"line":82},[36,165298,50],{"class":49},[36,165300,165301],{"class":53},"(names[",[36,165303,713],{"class":49},[36,165305,7188],{"class":53},[36,165307,165308,165310,165312,165314],{"class":38,"line":88},[36,165309,50],{"class":49},[36,165311,165301],{"class":53},[36,165313,707],{"class":49},[36,165315,7188],{"class":53},[36,165317,165318,165320,165322,165324],{"class":38,"line":195},[36,165319,50],{"class":49},[36,165321,165301],{"class":53},[36,165323,1188],{"class":49},[36,165325,7188],{"class":53},[19,165327,165328],{},"反向索引从 -1 开始：",[26,165330,165332],{"className":28,"code":165331,"language":30,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,165333,165334,165350],{"__ignoreMap":31},[36,165335,165336,165338,165340,165342,165344,165347],{"class":38,"line":39},[36,165337,50],{"class":49},[36,165339,165301],{"class":53},[36,165341,508],{"class":114},[36,165343,707],{"class":49},[36,165345,165346],{"class":53},"])  ",[36,165348,165349],{"class":42},"# 小刚\n",[36,165351,165352,165354,165356,165358,165360,165362],{"class":38,"line":46},[36,165353,50],{"class":49},[36,165355,165301],{"class":53},[36,165357,508],{"class":114},[36,165359,1188],{"class":49},[36,165361,165346],{"class":53},[36,165363,165364],{"class":42},"# 小红\n",[19,165366,165367],{},"索引越界会报错：",[26,165369,165371],{"className":28,"code":165370,"language":30,"meta":31,"style":31},"print(names[3])\n",[33,165372,165373],{"__ignoreMap":31},[36,165374,165375,165377,165379,165381],{"class":38,"line":39},[36,165376,50],{"class":49},[36,165378,165301],{"class":53},[36,165380,2767],{"class":49},[36,165382,7188],{"class":53},[14,165384,165386],{"id":165385},"_64-列表常用方法","6.4 列表常用方法",[26,165388,165390],{"className":28,"code":165389,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,165391,165392,165408,165412,165421,165435,165449,165453],{"__ignoreMap":31},[36,165393,165394,165396,165398,165400,165402,165404,165406],{"class":38,"line":39},[36,165395,162502],{"class":53},[36,165397,115],{"class":114},[36,165399,54720],{"class":53},[36,165401,152338],{"class":57},[36,165403,14958],{"class":53},[36,165405,153385],{"class":57},[36,165407,35748],{"class":53},[36,165409,165410],{"class":38,"line":46},[36,165411,546],{"emptyLinePlaceholder":545},[36,165413,165414,165417,165419],{"class":38,"line":82},[36,165415,165416],{"class":53},"names.append(",[36,165418,161853],{"class":57},[36,165420,61],{"class":53},[36,165422,165423,165426,165428,165430,165433],{"class":38,"line":88},[36,165424,165425],{"class":53},"names.insert(",[36,165427,707],{"class":49},[36,165429,14958],{"class":53},[36,165431,165432],{"class":57},"\"小李\"",[36,165434,61],{"class":53},[36,165436,165437,165440,165442,165444,165447],{"class":38,"line":195},[36,165438,165439],{"class":53},"names.extend([",[36,165441,11210],{"class":57},[36,165443,14958],{"class":53},[36,165445,165446],{"class":57},"\"小赵\"",[36,165448,7188],{"class":53},[36,165450,165451],{"class":38,"line":1517},[36,165452,546],{"emptyLinePlaceholder":545},[36,165454,165455,165457],{"class":38,"line":2421},[36,165456,50],{"class":49},[36,165458,165459],{"class":53},"(names)\n",[19,165461,165462],{},"删除元素：",[26,165464,165466],{"className":28,"code":165465,"language":30,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,165467,165468,165477,165487,165501,165513],{"__ignoreMap":31},[36,165469,165470,165473,165475],{"class":38,"line":39},[36,165471,165472],{"class":53},"names.remove(",[36,165474,153385],{"class":57},[36,165476,61],{"class":53},[36,165478,165479,165482,165484],{"class":38,"line":46},[36,165480,165481],{"class":53},"last ",[36,165483,115],{"class":114},[36,165485,165486],{"class":53}," names.pop()\n",[36,165488,165489,165492,165494,165497,165499],{"class":38,"line":82},[36,165490,165491],{"class":53},"first ",[36,165493,115],{"class":114},[36,165495,165496],{"class":53}," names.pop(",[36,165498,713],{"class":49},[36,165500,61],{"class":53},[36,165502,165503,165506,165509,165511],{"class":38,"line":88},[36,165504,165505],{"class":114},"del",[36,165507,165508],{"class":53}," names[",[36,165510,713],{"class":49},[36,165512,35748],{"class":53},[36,165514,165515],{"class":38,"line":195},[36,165516,165517],{"class":53},"names.clear()\n",[19,165519,165520],{},"查询和统计：",[26,165522,165524],{"className":28,"code":165523,"language":30,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,165525,165526,165554,165558,165569,165580],{"__ignoreMap":31},[36,165527,165528,165530,165532,165534,165536,165538,165540,165542,165544,165546,165548,165550,165552],{"class":38,"line":39},[36,165529,165205],{"class":53},[36,165531,115],{"class":114},[36,165533,54720],{"class":53},[36,165535,707],{"class":49},[36,165537,14958],{"class":53},[36,165539,1188],{"class":49},[36,165541,14958],{"class":53},[36,165543,2767],{"class":49},[36,165545,14958],{"class":53},[36,165547,1188],{"class":49},[36,165549,14958],{"class":53},[36,165551,2977],{"class":49},[36,165553,35748],{"class":53},[36,165555,165556],{"class":38,"line":46},[36,165557,546],{"emptyLinePlaceholder":545},[36,165559,165560,165562,165565,165567],{"class":38,"line":82},[36,165561,50],{"class":49},[36,165563,165564],{"class":53},"(numbers.index(",[36,165566,2767],{"class":49},[36,165568,625],{"class":53},[36,165570,165571,165573,165576,165578],{"class":38,"line":88},[36,165572,50],{"class":49},[36,165574,165575],{"class":53},"(numbers.count(",[36,165577,1188],{"class":49},[36,165579,625],{"class":53},[36,165581,165582,165584,165586,165588],{"class":38,"line":195},[36,165583,50],{"class":49},[36,165585,54],{"class":53},[36,165587,9885],{"class":49},[36,165589,165590],{"class":53},"(numbers))\n",[19,165592,165593],{},"排序：",[26,165595,165597],{"className":28,"code":165596,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,165598,165599,165623,165627,165632,165639,165643,165657,165663,165667,165672],{"__ignoreMap":31},[36,165600,165601,165603,165605,165607,165609,165611,165613,165615,165617,165619,165621],{"class":38,"line":39},[36,165602,165205],{"class":53},[36,165604,115],{"class":114},[36,165606,54720],{"class":53},[36,165608,2767],{"class":49},[36,165610,14958],{"class":53},[36,165612,707],{"class":49},[36,165614,14958],{"class":53},[36,165616,1134],{"class":49},[36,165618,14958],{"class":53},[36,165620,1188],{"class":49},[36,165622,35748],{"class":53},[36,165624,165625],{"class":38,"line":46},[36,165626,546],{"emptyLinePlaceholder":545},[36,165628,165629],{"class":38,"line":82},[36,165630,165631],{"class":53},"numbers.sort()\n",[36,165633,165634,165636],{"class":38,"line":88},[36,165635,50],{"class":49},[36,165637,165638],{"class":53},"(numbers)\n",[36,165640,165641],{"class":38,"line":195},[36,165642,546],{"emptyLinePlaceholder":545},[36,165644,165645,165648,165651,165653,165655],{"class":38,"line":1517},[36,165646,165647],{"class":53},"numbers.sort(",[36,165649,165650],{"class":1997},"reverse",[36,165652,115],{"class":114},[36,165654,189],{"class":49},[36,165656,61],{"class":53},[36,165658,165659,165661],{"class":38,"line":2421},[36,165660,50],{"class":49},[36,165662,165638],{"class":53},[36,165664,165665],{"class":38,"line":2446},[36,165666,546],{"emptyLinePlaceholder":545},[36,165668,165669],{"class":38,"line":2469},[36,165670,165671],{"class":53},"numbers.reverse()\n",[36,165673,165674,165676],{"class":38,"line":2492},[36,165675,50],{"class":49},[36,165677,165638],{"class":53},[19,165679,165680,165683,165684,165687],{},[33,165681,165682],{},"sort()"," 会修改原列表，",[33,165685,165686],{},"sorted()"," 返回新列表。",[26,165689,165691],{"className":28,"code":165690,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,165692,165693,165717,165729,165733,165739],{"__ignoreMap":31},[36,165694,165695,165697,165699,165701,165703,165705,165707,165709,165711,165713,165715],{"class":38,"line":39},[36,165696,165205],{"class":53},[36,165698,115],{"class":114},[36,165700,54720],{"class":53},[36,165702,2767],{"class":49},[36,165704,14958],{"class":53},[36,165706,707],{"class":49},[36,165708,14958],{"class":53},[36,165710,1134],{"class":49},[36,165712,14958],{"class":53},[36,165714,1188],{"class":49},[36,165716,35748],{"class":53},[36,165718,165719,165722,165724,165727],{"class":38,"line":46},[36,165720,165721],{"class":53},"new_numbers ",[36,165723,115],{"class":114},[36,165725,165726],{"class":49}," sorted",[36,165728,165638],{"class":53},[36,165730,165731],{"class":38,"line":82},[36,165732,546],{"emptyLinePlaceholder":545},[36,165734,165735,165737],{"class":38,"line":88},[36,165736,50],{"class":49},[36,165738,165638],{"class":53},[36,165740,165741,165743],{"class":38,"line":195},[36,165742,50],{"class":49},[36,165744,165745],{"class":53},"(new_numbers)\n",[14,165747,165749],{"id":165748},"_65-列表遍历","6.5 列表遍历",[26,165751,165753],{"className":28,"code":165752,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,165754,165755,165775,165779,165789],{"__ignoreMap":31},[36,165756,165757,165759,165761,165763,165765,165767,165769,165771,165773],{"class":38,"line":39},[36,165758,162502],{"class":53},[36,165760,115],{"class":114},[36,165762,54720],{"class":53},[36,165764,152338],{"class":57},[36,165766,14958],{"class":53},[36,165768,153385],{"class":57},[36,165770,14958],{"class":53},[36,165772,161853],{"class":57},[36,165774,35748],{"class":53},[36,165776,165777],{"class":38,"line":46},[36,165778,546],{"emptyLinePlaceholder":545},[36,165780,165781,165783,165785,165787],{"class":38,"line":82},[36,165782,5556],{"class":114},[36,165784,162538],{"class":53},[36,165786,28556],{"class":114},[36,165788,162543],{"class":53},[36,165790,165791,165793],{"class":38,"line":88},[36,165792,33803],{"class":49},[36,165794,153109],{"class":53},[19,165796,165797],{},"需要索引时：",[26,165799,165801],{"className":28,"code":165800,"language":30,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,165802,165803,165817],{"__ignoreMap":31},[36,165804,165805,165807,165810,165812,165814],{"class":38,"line":39},[36,165806,5556],{"class":114},[36,165808,165809],{"class":53}," index, name ",[36,165811,28556],{"class":114},[36,165813,34109],{"class":49},[36,165815,165816],{"class":53},"(names):\n",[36,165818,165819,165821],{"class":38,"line":46},[36,165820,33803],{"class":49},[36,165822,165823],{"class":53},"(index, name)\n",[19,165825,165826],{},"统计总分：",[26,165828,165830],{"className":28,"code":165829,"language":30,"meta":31,"style":31},"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",[33,165831,165832,165857,165865,165869,165880,165888,165892,165909],{"__ignoreMap":31},[36,165833,165834,165837,165839,165841,165843,165845,165847,165849,165851,165853,165855],{"class":38,"line":39},[36,165835,165836],{"class":53},"scores ",[36,165838,115],{"class":114},[36,165840,54720],{"class":53},[36,165842,3538],{"class":49},[36,165844,14958],{"class":53},[36,165846,3412],{"class":49},[36,165848,14958],{"class":53},[36,165850,2938],{"class":49},[36,165852,14958],{"class":53},[36,165854,3238],{"class":49},[36,165856,35748],{"class":53},[36,165858,165859,165861,165863],{"class":38,"line":46},[36,165860,2399],{"class":53},[36,165862,115],{"class":114},[36,165864,49830],{"class":49},[36,165866,165867],{"class":38,"line":82},[36,165868,546],{"emptyLinePlaceholder":545},[36,165870,165871,165873,165875,165877],{"class":38,"line":88},[36,165872,5556],{"class":114},[36,165874,159905],{"class":53},[36,165876,28556],{"class":114},[36,165878,165879],{"class":53}," scores:\n",[36,165881,165882,165884,165886],{"class":38,"line":195},[36,165883,161429],{"class":53},[36,165885,1224],{"class":114},[36,165887,4117],{"class":53},[36,165889,165890],{"class":38,"line":1517},[36,165891,546],{"emptyLinePlaceholder":545},[36,165893,165894,165897,165899,165902,165904,165906],{"class":38,"line":2421},[36,165895,165896],{"class":53},"avg ",[36,165898,115],{"class":114},[36,165900,165901],{"class":53}," total ",[36,165903,1065],{"class":114},[36,165905,9858],{"class":49},[36,165907,165908],{"class":53},"(scores)\n",[36,165910,165911,165913,165915,165917,165920,165922,165925,165927,165929,165931],{"class":38,"line":2446},[36,165912,50],{"class":49},[36,165914,54],{"class":53},[36,165916,2060],{"class":114},[36,165918,165919],{"class":57},"\"平均分:",[36,165921,2065],{"class":49},[36,165923,165924],{"class":53},"avg",[36,165926,2296],{"class":114},[36,165928,2070],{"class":49},[36,165930,1822],{"class":57},[36,165932,61],{"class":53},[14,165934,165936],{"id":165935},"_66-元组tuple","6.6 元组tuple",[19,165938,165939],{},"元组和列表类似，但不可修改。",[26,165941,165943],{"className":28,"code":165942,"language":30,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,165944,165945,165962],{"__ignoreMap":31},[36,165946,165947,165950,165952,165954,165956,165958,165960],{"class":38,"line":39},[36,165948,165949],{"class":53},"point ",[36,165951,115],{"class":114},[36,165953,4196],{"class":53},[36,165955,1317],{"class":49},[36,165957,14958],{"class":53},[36,165959,3376],{"class":49},[36,165961,61],{"class":53},[36,165963,165964,165966,165968,165970,165972,165974,165976,165978,165980],{"class":38,"line":46},[36,165965,118780],{"class":53},[36,165967,115],{"class":114},[36,165969,4196],{"class":53},[36,165971,152338],{"class":57},[36,165973,14958],{"class":53},[36,165975,3326],{"class":49},[36,165977,14958],{"class":53},[36,165979,71756],{"class":57},[36,165981,61],{"class":53},[19,165983,165984],{},"单元素元组必须加逗号：",[26,165986,165988],{"className":28,"code":165987,"language":30,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,165989,165990,166004,166017,166021,166035],{"__ignoreMap":31},[36,165991,165992,165995,165997,165999,166001],{"class":38,"line":39},[36,165993,165994],{"class":53},"t1 ",[36,165996,115],{"class":114},[36,165998,4196],{"class":53},[36,166000,1317],{"class":49},[36,166002,166003],{"class":53},",)\n",[36,166005,166006,166009,166011,166013,166015],{"class":38,"line":46},[36,166007,166008],{"class":53},"t2 ",[36,166010,115],{"class":114},[36,166012,4196],{"class":53},[36,166014,1317],{"class":49},[36,166016,61],{"class":53},[36,166018,166019],{"class":38,"line":82},[36,166020,546],{"emptyLinePlaceholder":545},[36,166022,166023,166025,166027,166029,166032],{"class":38,"line":88},[36,166024,50],{"class":49},[36,166026,54],{"class":53},[36,166028,618],{"class":49},[36,166030,166031],{"class":53},"(t1))  ",[36,166033,166034],{"class":42},"# tuple\n",[36,166036,166037,166039,166041,166043,166046],{"class":38,"line":195},[36,166038,50],{"class":49},[36,166040,54],{"class":53},[36,166042,618],{"class":49},[36,166044,166045],{"class":53},"(t2))  ",[36,166047,166048],{"class":42},"# int\n",[19,166050,166051],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166053,166055],{"id":166054},"_67-字符串str","6.7 字符串str",[19,166057,166058],{},"字符串也是序列，可以索引、切片和遍历。",[26,166060,166062],{"className":28,"code":166061,"language":30,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,166063,166064,166072,166076,166087,166099,166103,166114],{"__ignoreMap":31},[36,166065,166066,166068,166070],{"class":38,"line":39},[36,166067,1561],{"class":53},[36,166069,115],{"class":114},[36,166071,161803],{"class":57},[36,166073,166074],{"class":38,"line":46},[36,166075,546],{"emptyLinePlaceholder":545},[36,166077,166078,166080,166083,166085],{"class":38,"line":82},[36,166079,50],{"class":49},[36,166081,166082],{"class":53},"(text[",[36,166084,713],{"class":49},[36,166086,7188],{"class":53},[36,166088,166089,166091,166093,166095,166097],{"class":38,"line":88},[36,166090,50],{"class":49},[36,166092,166082],{"class":53},[36,166094,508],{"class":114},[36,166096,707],{"class":49},[36,166098,7188],{"class":53},[36,166100,166101],{"class":38,"line":195},[36,166102,546],{"emptyLinePlaceholder":545},[36,166104,166105,166107,166109,166111],{"class":38,"line":1517},[36,166106,5556],{"class":114},[36,166108,161814],{"class":53},[36,166110,28556],{"class":114},[36,166112,166113],{"class":53}," text:\n",[36,166115,166116,166118],{"class":38,"line":2421},[36,166117,33803],{"class":49},[36,166119,161825],{"class":53},[19,166121,166122],{},"字符串不可变：",[26,166124,166126],{"className":28,"code":166125,"language":30,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,166127,166128,166136],{"__ignoreMap":31},[36,166129,166130,166132,166134],{"class":38,"line":39},[36,166131,1561],{"class":53},[36,166133,115],{"class":114},[36,166135,161803],{"class":57},[36,166137,166138,166141,166143,166145,166147,166150],{"class":38,"line":46},[36,166139,166140],{"class":53},"text[",[36,166142,713],{"class":49},[36,166144,6974],{"class":53},[36,166146,115],{"class":114},[36,166148,166149],{"class":57}," \"P\"",[36,166151,166152],{"class":42},"  # 报错\n",[19,166154,166155],{},"如果要得到新字符串：",[26,166157,166159],{"className":28,"code":166158,"language":30,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,166160,166161,166169,166187],{"__ignoreMap":31},[36,166162,166163,166165,166167],{"class":38,"line":39},[36,166164,1561],{"class":53},[36,166166,115],{"class":114},[36,166168,161803],{"class":57},[36,166170,166171,166173,166175,166177,166179,166182,166184],{"class":38,"line":46},[36,166172,1561],{"class":53},[36,166174,115],{"class":114},[36,166176,166149],{"class":57},[36,166178,730],{"class":114},[36,166180,166181],{"class":53}," text[",[36,166183,707],{"class":49},[36,166185,166186],{"class":53},":]\n",[36,166188,166189,166191],{"class":38,"line":82},[36,166190,50],{"class":49},[36,166192,166193],{"class":53},"(text)\n",[14,166195,166197],{"id":166196},"_68-切片","6.8 切片",[19,166199,166200],{},"切片用于从序列中取一部分。",[26,166202,166204],{"className":28,"code":166203,"language":30,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,166205,166206],{"__ignoreMap":31},[36,166207,166208],{"class":38,"line":39},[36,166209,166203],{"class":53},[19,166211,166212],{},"结束位置不包含。",[26,166214,166216],{"className":28,"code":166215,"language":30,"meta":31,"style":31},"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",[33,166217,166218,166255,166259,166278,166293,166307,166321],{"__ignoreMap":31},[36,166219,166220,166223,166225,166227,166229,166231,166233,166235,166237,166239,166241,166243,166245,166247,166249,166251,166253],{"class":38,"line":39},[36,166221,166222],{"class":53},"nums ",[36,166224,115],{"class":114},[36,166226,54720],{"class":53},[36,166228,713],{"class":49},[36,166230,14958],{"class":53},[36,166232,707],{"class":49},[36,166234,14958],{"class":53},[36,166236,1188],{"class":49},[36,166238,14958],{"class":53},[36,166240,2767],{"class":49},[36,166242,14958],{"class":53},[36,166244,2977],{"class":49},[36,166246,14958],{"class":53},[36,166248,1134],{"class":49},[36,166250,14958],{"class":53},[36,166252,3025],{"class":49},[36,166254,35748],{"class":53},[36,166256,166257],{"class":38,"line":46},[36,166258,546],{"emptyLinePlaceholder":545},[36,166260,166261,166263,166266,166268,166270,166272,166275],{"class":38,"line":82},[36,166262,50],{"class":49},[36,166264,166265],{"class":53},"(nums[",[36,166267,707],{"class":49},[36,166269,3535],{"class":53},[36,166271,2977],{"class":49},[36,166273,166274],{"class":53},"])    ",[36,166276,166277],{"class":42},"# [1, 2, 3]\n",[36,166279,166280,166282,166285,166287,166290],{"class":38,"line":88},[36,166281,50],{"class":49},[36,166283,166284],{"class":53},"(nums[:",[36,166286,2767],{"class":49},[36,166288,166289],{"class":53},"])     ",[36,166291,166292],{"class":42},"# [0, 1, 2]\n",[36,166294,166295,166297,166299,166301,166304],{"class":38,"line":195},[36,166296,50],{"class":49},[36,166298,166265],{"class":53},[36,166300,2767],{"class":49},[36,166302,166303],{"class":53},":])     ",[36,166305,166306],{"class":42},"# [3, 4, 5, 6]\n",[36,166308,166309,166311,166314,166316,166318],{"class":38,"line":1517},[36,166310,50],{"class":49},[36,166312,166313],{"class":53},"(nums[::",[36,166315,1188],{"class":49},[36,166317,166274],{"class":53},[36,166319,166320],{"class":42},"# [0, 2, 4, 6]\n",[36,166322,166323,166325,166327,166329,166331,166334],{"class":38,"line":2421},[36,166324,50],{"class":49},[36,166326,166313],{"class":53},[36,166328,508],{"class":114},[36,166330,707],{"class":49},[36,166332,166333],{"class":53},"])   ",[36,166335,166336],{"class":42},"# 反转\n",[19,166338,166339],{},"字符串切片：",[26,166341,166343],{"className":28,"code":166342,"language":30,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,166344,166345,166354,166368],{"__ignoreMap":31},[36,166346,166347,166349,166351],{"class":38,"line":39},[36,166348,1561],{"class":53},[36,166350,115],{"class":114},[36,166352,166353],{"class":57}," \"abcdef\"\n",[36,166355,166356,166358,166360,166362,166364,166366],{"class":38,"line":46},[36,166357,50],{"class":49},[36,166359,166082],{"class":53},[36,166361,707],{"class":49},[36,166363,3535],{"class":53},[36,166365,2977],{"class":49},[36,166367,7188],{"class":53},[36,166369,166370,166372,166375,166377,166379],{"class":38,"line":82},[36,166371,50],{"class":49},[36,166373,166374],{"class":53},"(text[::",[36,166376,508],{"class":114},[36,166378,707],{"class":49},[36,166380,7188],{"class":53},[14,166382,166384],{"id":166383},"_69-集合set","6.9 集合set",[19,166386,166387],{},"集合特点：",[433,166389,166390,166393,166396],{},[436,166391,166392],{},"无序。",[436,166394,166395],{},"元素不重复。",[436,166397,166398],{},"可以做交集、并集、差集。",[26,166400,166402],{"className":28,"code":166401,"language":30,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,166403,166404,166432],{"__ignoreMap":31},[36,166405,166406,166408,166410,166412,166414,166416,166418,166420,166422,166424,166426,166428,166430],{"class":38,"line":39},[36,166407,166222],{"class":53},[36,166409,115],{"class":114},[36,166411,6979],{"class":53},[36,166413,707],{"class":49},[36,166415,14958],{"class":53},[36,166417,1188],{"class":49},[36,166419,14958],{"class":53},[36,166421,2767],{"class":49},[36,166423,14958],{"class":53},[36,166425,2767],{"class":49},[36,166427,14958],{"class":53},[36,166429,2977],{"class":49},[36,166431,4103],{"class":53},[36,166433,166434,166436],{"class":38,"line":46},[36,166435,50],{"class":49},[36,166437,166438],{"class":53},"(nums)\n",[19,166440,166441],{},"创建空集合：",[26,166443,166445],{"className":28,"code":166444,"language":30,"meta":31,"style":31},"s = set()\n",[33,166446,166447],{"__ignoreMap":31},[36,166448,166449,166451,166453,166455],{"class":38,"line":39},[36,166450,13103],{"class":53},[36,166452,115],{"class":114},[36,166454,122188],{"class":49},[36,166456,4513],{"class":53},[19,166458,695,166459,166461],{},[33,166460,1944],{}," 是空字典，不是空集合。",[19,166463,166464],{},"集合常用操作：",[26,166466,166468],{"className":28,"code":166467,"language":30,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,166469,166470,166490,166494,166503,166512,166521],{"__ignoreMap":31},[36,166471,166472,166474,166476,166478,166480,166482,166484,166486,166488],{"class":38,"line":39},[36,166473,13103],{"class":53},[36,166475,115],{"class":114},[36,166477,6979],{"class":53},[36,166479,707],{"class":49},[36,166481,14958],{"class":53},[36,166483,1188],{"class":49},[36,166485,14958],{"class":53},[36,166487,2767],{"class":49},[36,166489,4103],{"class":53},[36,166491,166492],{"class":38,"line":46},[36,166493,546],{"emptyLinePlaceholder":545},[36,166495,166496,166499,166501],{"class":38,"line":82},[36,166497,166498],{"class":53},"s.add(",[36,166500,2977],{"class":49},[36,166502,61],{"class":53},[36,166504,166505,166508,166510],{"class":38,"line":88},[36,166506,166507],{"class":53},"s.remove(",[36,166509,1188],{"class":49},[36,166511,61],{"class":53},[36,166513,166514,166517,166519],{"class":38,"line":195},[36,166515,166516],{"class":53},"s.discard(",[36,166518,1317],{"class":49},[36,166520,61],{"class":53},[36,166522,166523,166525,166527,166529],{"class":38,"line":1517},[36,166524,50],{"class":49},[36,166526,54],{"class":53},[36,166528,9885],{"class":49},[36,166530,166531],{"class":53},"(s))\n",[19,166533,166534],{},"交并差：",[26,166536,166538],{"className":28,"code":166537,"language":30,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,166539,166540,166560,166580,166584,166599,166612],{"__ignoreMap":31},[36,166541,166542,166544,166546,166548,166550,166552,166554,166556,166558],{"class":38,"line":39},[36,166543,13442],{"class":53},[36,166545,115],{"class":114},[36,166547,6979],{"class":53},[36,166549,707],{"class":49},[36,166551,14958],{"class":53},[36,166553,1188],{"class":49},[36,166555,14958],{"class":53},[36,166557,2767],{"class":49},[36,166559,4103],{"class":53},[36,166561,166562,166564,166566,166568,166570,166572,166574,166576,166578],{"class":38,"line":46},[36,166563,13468],{"class":53},[36,166565,115],{"class":114},[36,166567,6979],{"class":53},[36,166569,2767],{"class":49},[36,166571,14958],{"class":53},[36,166573,2977],{"class":49},[36,166575,14958],{"class":53},[36,166577,1134],{"class":49},[36,166579,4103],{"class":53},[36,166581,166582],{"class":38,"line":82},[36,166583,546],{"emptyLinePlaceholder":545},[36,166585,166586,166588,166591,166593,166596],{"class":38,"line":88},[36,166587,50],{"class":49},[36,166589,166590],{"class":53},"(a ",[36,166592,3034],{"class":114},[36,166594,166595],{"class":53}," b)  ",[36,166597,166598],{"class":42},"# 交集\n",[36,166600,166601,166603,166605,166607,166609],{"class":38,"line":195},[36,166602,50],{"class":49},[36,166604,166590],{"class":53},[36,166606,3595],{"class":114},[36,166608,166595],{"class":53},[36,166610,166611],{"class":42},"# 并集\n",[36,166613,166614,166616,166618,166620,166622],{"class":38,"line":1517},[36,166615,50],{"class":49},[36,166617,166590],{"class":53},[36,166619,508],{"class":114},[36,166621,166595],{"class":53},[36,166623,166624],{"class":42},"# 差集\n",[14,166626,166628],{"id":166627},"_610-字典dict","6.10 字典dict",[19,166630,166631],{},"字典通过 key-value 保存数据。",[26,166633,166635],{"className":28,"code":166634,"language":30,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,166636,166637,166645,166655,166666,166676],{"__ignoreMap":31},[36,166638,166639,166641,166643],{"class":38,"line":39},[36,166640,151931],{"class":53},[36,166642,115],{"class":114},[36,166644,18091],{"class":53},[36,166646,166647,166649,166651,166653],{"class":38,"line":46},[36,166648,149472],{"class":57},[36,166650,53931],{"class":53},[36,166652,152338],{"class":57},[36,166654,33970],{"class":53},[36,166656,166657,166660,166662,166664],{"class":38,"line":82},[36,166658,166659],{"class":57},"    \"age\"",[36,166661,53931],{"class":53},[36,166663,3326],{"class":49},[36,166665,33970],{"class":53},[36,166667,166668,166671,166673],{"class":38,"line":88},[36,166669,166670],{"class":57},"    \"score\"",[36,166672,53931],{"class":53},[36,166674,166675],{"class":49},"95\n",[36,166677,166678],{"class":38,"line":195},[36,166679,4103],{"class":53},[19,166681,166682],{},"获取值：",[26,166684,166686],{"className":28,"code":166685,"language":30,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,166687,166688,166699],{"__ignoreMap":31},[36,166689,166690,166692,166695,166697],{"class":38,"line":39},[36,166691,50],{"class":49},[36,166693,166694],{"class":53},"(student[",[36,166696,65167],{"class":57},[36,166698,7188],{"class":53},[36,166700,166701,166703,166706,166708],{"class":38,"line":46},[36,166702,50],{"class":49},[36,166704,166705],{"class":53},"(student.get(",[36,166707,65167],{"class":57},[36,166709,625],{"class":53},[19,166711,17907],{},[26,166713,166715],{"className":28,"code":166714,"language":30,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,166716,166717,166730],{"__ignoreMap":31},[36,166718,166719,166721,166724,166727],{"class":38,"line":39},[36,166720,155306],{"class":53},[36,166722,166723],{"class":57},"\"address\"",[36,166725,166726],{"class":53},"]     ",[36,166728,166729],{"class":42},"# key不存在会报错\n",[36,166731,166732,166735,166737,166739],{"class":38,"line":46},[36,166733,166734],{"class":53},"student.get(",[36,166736,166723],{"class":57},[36,166738,16236],{"class":53},[36,166740,166741],{"class":42},"# key不存在返回None\n",[19,166743,166744],{},"设置默认值：",[26,166746,166748],{"className":28,"code":166747,"language":30,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,166749,166750],{"__ignoreMap":31},[36,166751,166752,166754,166756,166758,166760,166763],{"class":38,"line":39},[36,166753,50],{"class":49},[36,166755,166705],{"class":53},[36,166757,166723],{"class":57},[36,166759,14958],{"class":53},[36,166761,166762],{"class":57},"\"未知\"",[36,166764,625],{"class":53},[19,166766,166767],{},"新增和修改：",[26,166769,166771],{"className":28,"code":166770,"language":30,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,166772,166773,166786],{"__ignoreMap":31},[36,166774,166775,166777,166779,166781,166783],{"class":38,"line":39},[36,166776,155306],{"class":53},[36,166778,71611],{"class":57},[36,166780,6974],{"class":53},[36,166782,115],{"class":114},[36,166784,166785],{"class":49}," 19\n",[36,166787,166788,166790,166792,166794,166796],{"class":38,"line":46},[36,166789,155306],{"class":53},[36,166791,166723],{"class":57},[36,166793,6974],{"class":53},[36,166795,115],{"class":114},[36,166797,166798],{"class":57}," \"北京\"\n",[19,166800,166801],{},"删除：",[26,166803,166805],{"className":28,"code":166804,"language":30,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,166806,166807,166820,166830],{"__ignoreMap":31},[36,166808,166809,166811,166813,166816,166818],{"class":38,"line":39},[36,166810,407],{"class":53},[36,166812,115],{"class":114},[36,166814,166815],{"class":53}," student.pop(",[36,166817,153921],{"class":57},[36,166819,61],{"class":53},[36,166821,166822,166824,166826,166828],{"class":38,"line":46},[36,166823,165505],{"class":114},[36,166825,154598],{"class":53},[36,166827,71611],{"class":57},[36,166829,35748],{"class":53},[36,166831,166832],{"class":38,"line":82},[36,166833,166834],{"class":53},"student.clear()\n",[14,166836,166838],{"id":166837},"_611-字典遍历","6.11 字典遍历",[19,166840,166841],{},"遍历 key：",[26,166843,166845],{"className":28,"code":166844,"language":30,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,166846,166847,166859],{"__ignoreMap":31},[36,166848,166849,166851,166854,166856],{"class":38,"line":39},[36,166850,5556],{"class":114},[36,166852,166853],{"class":53}," key ",[36,166855,28556],{"class":114},[36,166857,166858],{"class":53}," student:\n",[36,166860,166861,166863],{"class":38,"line":46},[36,166862,33803],{"class":49},[36,166864,166865],{"class":53},"(key, student[key])\n",[19,166867,166868],{},"遍历 value：",[26,166870,166872],{"className":28,"code":166871,"language":30,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,166873,166874,166886],{"__ignoreMap":31},[36,166875,166876,166878,166881,166883],{"class":38,"line":39},[36,166877,5556],{"class":114},[36,166879,166880],{"class":53}," value ",[36,166882,28556],{"class":114},[36,166884,166885],{"class":53}," student.values():\n",[36,166887,166888,166890],{"class":38,"line":46},[36,166889,33803],{"class":49},[36,166891,166892],{"class":53},"(value)\n",[19,166894,166895],{},"遍历 key 和 value：",[26,166897,166899],{"className":28,"code":166898,"language":30,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,166900,166901,166913],{"__ignoreMap":31},[36,166902,166903,166905,166908,166910],{"class":38,"line":39},[36,166904,5556],{"class":114},[36,166906,166907],{"class":53}," key, value ",[36,166909,28556],{"class":114},[36,166911,166912],{"class":53}," student.items():\n",[36,166914,166915,166917],{"class":38,"line":46},[36,166916,33803],{"class":49},[36,166918,166919],{"class":53},"(key, value)\n",[14,166921,166923],{"id":166922},"_612-嵌套容器","6.12 嵌套容器",[19,166925,166926],{},"列表中保存字典，是项目中最常见的结构之一。",[26,166928,166930],{"className":28,"code":166929,"language":30,"meta":31,"style":31},"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",[33,166931,166932,166940,166968,166996,167024,167028,167032,167042],{"__ignoreMap":31},[36,166933,166934,166936,166938],{"class":38,"line":39},[36,166935,161838],{"class":53},[36,166937,115],{"class":114},[36,166939,57938],{"class":53},[36,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958,166960,166962,166964,166966],{"class":38,"line":46},[36,166943,150837],{"class":53},[36,166945,65167],{"class":57},[36,166947,53931],{"class":53},[36,166949,152338],{"class":57},[36,166951,14958],{"class":53},[36,166953,71611],{"class":57},[36,166955,53931],{"class":53},[36,166957,3326],{"class":49},[36,166959,14958],{"class":53},[36,166961,153921],{"class":57},[36,166963,53931],{"class":53},[36,166965,3662],{"class":49},[36,166967,7461],{"class":53},[36,166969,166970,166972,166974,166976,166978,166980,166982,166984,166986,166988,166990,166992,166994],{"class":38,"line":82},[36,166971,150837],{"class":53},[36,166973,65167],{"class":57},[36,166975,53931],{"class":53},[36,166977,153385],{"class":57},[36,166979,14958],{"class":53},[36,166981,71611],{"class":57},[36,166983,53931],{"class":53},[36,166985,3301],{"class":49},[36,166987,14958],{"class":53},[36,166989,153921],{"class":57},[36,166991,53931],{"class":53},[36,166993,3487],{"class":49},[36,166995,7461],{"class":53},[36,166997,166998,167000,167002,167004,167006,167008,167010,167012,167014,167016,167018,167020,167022],{"class":38,"line":88},[36,166999,150837],{"class":53},[36,167001,65167],{"class":57},[36,167003,53931],{"class":53},[36,167005,161853],{"class":57},[36,167007,14958],{"class":53},[36,167009,71611],{"class":57},[36,167011,53931],{"class":53},[36,167013,3351],{"class":49},[36,167015,14958],{"class":53},[36,167017,153921],{"class":57},[36,167019,53931],{"class":53},[36,167021,3087],{"class":49},[36,167023,7461],{"class":53},[36,167025,167026],{"class":38,"line":195},[36,167027,35748],{"class":53},[36,167029,167030],{"class":38,"line":1517},[36,167031,546],{"emptyLinePlaceholder":545},[36,167033,167034,167036,167038,167040],{"class":38,"line":2421},[36,167035,5556],{"class":114},[36,167037,154586],{"class":53},[36,167039,28556],{"class":114},[36,167041,154591],{"class":53},[36,167043,167044,167046,167048,167050,167053,167055],{"class":38,"line":2446},[36,167045,33803],{"class":49},[36,167047,166694],{"class":53},[36,167049,65167],{"class":57},[36,167051,167052],{"class":53},"], student[",[36,167054,153921],{"class":57},[36,167056,7188],{"class":53},[19,167058,167059],{},"统计平均分：",[26,167061,167063],{"className":28,"code":167062,"language":30,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,167064,167065,167073,167077,167087,167099,167103,167118],{"__ignoreMap":31},[36,167066,167067,167069,167071],{"class":38,"line":39},[36,167068,2399],{"class":53},[36,167070,115],{"class":114},[36,167072,49830],{"class":49},[36,167074,167075],{"class":38,"line":46},[36,167076,546],{"emptyLinePlaceholder":545},[36,167078,167079,167081,167083,167085],{"class":38,"line":82},[36,167080,5556],{"class":114},[36,167082,154586],{"class":53},[36,167084,28556],{"class":114},[36,167086,154591],{"class":53},[36,167088,167089,167091,167093,167095,167097],{"class":38,"line":88},[36,167090,161429],{"class":53},[36,167092,1224],{"class":114},[36,167094,154598],{"class":53},[36,167096,153921],{"class":57},[36,167098,35748],{"class":53},[36,167100,167101],{"class":38,"line":195},[36,167102,546],{"emptyLinePlaceholder":545},[36,167104,167105,167107,167109,167111,167113,167115],{"class":38,"line":1517},[36,167106,165896],{"class":53},[36,167108,115],{"class":114},[36,167110,165901],{"class":53},[36,167112,1065],{"class":114},[36,167114,9858],{"class":49},[36,167116,167117],{"class":53},"(students)\n",[36,167119,167120,167122,167124,167126,167128,167130,167132,167134,167136,167138],{"class":38,"line":2421},[36,167121,50],{"class":49},[36,167123,54],{"class":53},[36,167125,2060],{"class":114},[36,167127,165919],{"class":57},[36,167129,2065],{"class":49},[36,167131,165924],{"class":53},[36,167133,2296],{"class":114},[36,167135,2070],{"class":49},[36,167137,1822],{"class":57},[36,167139,61],{"class":53},[19,167141,167142],{},"查找学生：",[26,167144,167146],{"className":28,"code":167145,"language":30,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,167147,167148,167163,167167,167177,167191,167197,167201,167207],{"__ignoreMap":31},[36,167149,167150,167152,167154,167156,167158,167161],{"class":38,"line":39},[36,167151,114047],{"class":53},[36,167153,115],{"class":114},[36,167155,871],{"class":49},[36,167157,54],{"class":53},[36,167159,167160],{"class":57},"\"请输入学生姓名:\"",[36,167162,61],{"class":53},[36,167164,167165],{"class":38,"line":46},[36,167166,546],{"emptyLinePlaceholder":545},[36,167168,167169,167171,167173,167175],{"class":38,"line":82},[36,167170,5556],{"class":114},[36,167172,154586],{"class":53},[36,167174,28556],{"class":114},[36,167176,154591],{"class":53},[36,167178,167179,167181,167183,167185,167187,167189],{"class":38,"line":88},[36,167180,5632],{"class":114},[36,167182,154598],{"class":53},[36,167184,65167],{"class":57},[36,167186,6974],{"class":53},[36,167188,1377],{"class":114},[36,167190,162554],{"class":53},[36,167192,167193,167195],{"class":38,"line":195},[36,167194,34954],{"class":49},[36,167196,152492],{"class":53},[36,167198,167199],{"class":38,"line":1517},[36,167200,34130],{"class":114},[36,167202,167203,167205],{"class":38,"line":2421},[36,167204,4239],{"class":114},[36,167206,6270],{"class":53},[36,167208,167209,167211,167213,167216],{"class":38,"line":2446},[36,167210,33803],{"class":49},[36,167212,54],{"class":53},[36,167214,167215],{"class":57},"\"没有找到\"",[36,167217,61],{"class":53},[14,167219,167221],{"id":167220},"_613-容器通用操作","6.13 容器通用操作",[19,167223,167224],{},"长度：",[26,167226,167228],{"className":28,"code":167227,"language":30,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,167229,167230,167249,167259],{"__ignoreMap":31},[36,167231,167232,167234,167237,167239,167241,167243,167245,167247],{"class":38,"line":39},[36,167233,9885],{"class":49},[36,167235,167236],{"class":53},"([",[36,167238,707],{"class":49},[36,167240,14958],{"class":53},[36,167242,1188],{"class":49},[36,167244,14958],{"class":53},[36,167246,2767],{"class":49},[36,167248,7188],{"class":53},[36,167250,167251,167253,167255,167257],{"class":38,"line":46},[36,167252,9885],{"class":49},[36,167254,54],{"class":53},[36,167256,963],{"class":57},[36,167258,61],{"class":53},[36,167260,167261,167263,167266,167268,167270,167272],{"class":38,"line":82},[36,167262,9885],{"class":49},[36,167264,167265],{"class":53},"({",[36,167267,65167],{"class":57},[36,167269,53931],{"class":53},[36,167271,152338],{"class":57},[36,167273,167274],{"class":53},"})\n",[19,167276,167277],{},"最大最小：",[26,167279,167281],{"className":28,"code":167280,"language":30,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,167282,167283,167301],{"__ignoreMap":31},[36,167284,167285,167287,167289,167291,167293,167295,167297,167299],{"class":38,"line":39},[36,167286,8542],{"class":49},[36,167288,167236],{"class":53},[36,167290,707],{"class":49},[36,167292,14958],{"class":53},[36,167294,1188],{"class":49},[36,167296,14958],{"class":53},[36,167298,2767],{"class":49},[36,167300,7188],{"class":53},[36,167302,167303,167306,167308,167310,167312,167314,167316,167318],{"class":38,"line":46},[36,167304,167305],{"class":49},"min",[36,167307,167236],{"class":53},[36,167309,707],{"class":49},[36,167311,14958],{"class":53},[36,167313,1188],{"class":49},[36,167315,14958],{"class":53},[36,167317,2767],{"class":49},[36,167319,7188],{"class":53},[19,167321,167322],{},"求和：",[26,167324,167326],{"className":28,"code":167325,"language":30,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,167327,167328],{"__ignoreMap":31},[36,167329,167330,167333,167335,167337,167339,167341,167343,167345],{"class":38,"line":39},[36,167331,167332],{"class":49},"sum",[36,167334,167236],{"class":53},[36,167336,707],{"class":49},[36,167338,14958],{"class":53},[36,167340,1188],{"class":49},[36,167342,14958],{"class":53},[36,167344,2767],{"class":49},[36,167346,7188],{"class":53},[19,167348,165593],{},[26,167350,167352],{"className":28,"code":167351,"language":30,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,167353,167354],{"__ignoreMap":31},[36,167355,167356,167359,167361,167363,167365,167367,167369,167371],{"class":38,"line":39},[36,167357,167358],{"class":49},"sorted",[36,167360,167236],{"class":53},[36,167362,2767],{"class":49},[36,167364,14958],{"class":53},[36,167366,707],{"class":49},[36,167368,14958],{"class":53},[36,167370,1188],{"class":49},[36,167372,7188],{"class":53},[19,167374,167375],{},"类型转换：",[26,167377,167379],{"className":28,"code":167378,"language":30,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,167380,167381,167391,167409],{"__ignoreMap":31},[36,167382,167383,167385,167387,167389],{"class":38,"line":39},[36,167384,296],{"class":49},[36,167386,54],{"class":53},[36,167388,963],{"class":57},[36,167390,61],{"class":53},[36,167392,167393,167395,167397,167399,167401,167403,167405,167407],{"class":38,"line":46},[36,167394,309],{"class":49},[36,167396,167236],{"class":53},[36,167398,707],{"class":49},[36,167400,14958],{"class":53},[36,167402,1188],{"class":49},[36,167404,14958],{"class":53},[36,167406,2767],{"class":49},[36,167408,7188],{"class":53},[36,167410,167411,167413,167415,167417,167419,167421,167423,167425,167427,167429],{"class":38,"line":82},[36,167412,335],{"class":49},[36,167414,167236],{"class":53},[36,167416,707],{"class":49},[36,167418,14958],{"class":53},[36,167420,707],{"class":49},[36,167422,14958],{"class":53},[36,167424,1188],{"class":49},[36,167426,14958],{"class":53},[36,167428,2767],{"class":49},[36,167430,7188],{"class":53},[19,167432,167433],{},"成员判断：",[26,167435,167437],{"className":28,"code":167436,"language":30,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,167438,167439,167456,167480],{"__ignoreMap":31},[36,167440,167441,167443,167445,167448,167451,167454],{"class":38,"line":39},[36,167442,50],{"class":49},[36,167444,54],{"class":53},[36,167446,167447],{"class":57},"\"a\"",[36,167449,167450],{"class":114}," in",[36,167452,167453],{"class":57}," \"abc\"",[36,167455,61],{"class":53},[36,167457,167458,167460,167462,167464,167466,167468,167470,167472,167474,167476,167478],{"class":38,"line":46},[36,167459,50],{"class":49},[36,167461,54],{"class":53},[36,167463,707],{"class":49},[36,167465,167450],{"class":114},[36,167467,54720],{"class":53},[36,167469,707],{"class":49},[36,167471,14958],{"class":53},[36,167473,1188],{"class":49},[36,167475,14958],{"class":53},[36,167477,2767],{"class":49},[36,167479,7188],{"class":53},[36,167481,167482,167484,167486,167488,167490,167492,167494,167496,167498],{"class":38,"line":82},[36,167483,50],{"class":49},[36,167485,54],{"class":53},[36,167487,65167],{"class":57},[36,167489,167450],{"class":114},[36,167491,6979],{"class":53},[36,167493,65167],{"class":57},[36,167495,53931],{"class":53},[36,167497,152338],{"class":57},[36,167499,167274],{"class":53},[14,167501,167503],{"id":167502},"_614-推导式","6.14 推导式",[19,167505,167506],{},"推导式用于快速生成容器。",[19,167508,167509],{},"列表推导式：",[26,167511,167513],{"className":28,"code":167512,"language":30,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,167514,167515,167542],{"__ignoreMap":31},[36,167516,167517,167519,167521,167524,167526,167528,167530,167532,167534,167536,167538,167540],{"class":38,"line":39},[36,167518,166222],{"class":53},[36,167520,115],{"class":114},[36,167522,167523],{"class":53}," [i ",[36,167525,5556],{"class":114},[36,167527,11964],{"class":53},[36,167529,28556],{"class":114},[36,167531,34946],{"class":49},[36,167533,54],{"class":53},[36,167535,707],{"class":49},[36,167537,14958],{"class":53},[36,167539,3025],{"class":49},[36,167541,99776],{"class":53},[36,167543,167544,167546],{"class":38,"line":46},[36,167545,50],{"class":49},[36,167547,166438],{"class":53},[19,167549,167550],{},"带条件：",[26,167552,167554],{"className":28,"code":167553,"language":30,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,167555,167556,167597],{"__ignoreMap":31},[36,167557,167558,167561,167563,167565,167567,167569,167571,167573,167575,167577,167579,167581,167583,167585,167587,167589,167591,167593,167595],{"class":38,"line":39},[36,167559,167560],{"class":53},"even_nums ",[36,167562,115],{"class":114},[36,167564,167523],{"class":53},[36,167566,5556],{"class":114},[36,167568,11964],{"class":53},[36,167570,28556],{"class":114},[36,167572,34946],{"class":49},[36,167574,54],{"class":53},[36,167576,707],{"class":49},[36,167578,14958],{"class":53},[36,167580,3018],{"class":49},[36,167582,16236],{"class":53},[36,167584,4069],{"class":114},[36,167586,11964],{"class":53},[36,167588,1095],{"class":114},[36,167590,1140],{"class":49},[36,167592,1351],{"class":114},[36,167594,6624],{"class":49},[36,167596,35748],{"class":53},[36,167598,167599,167601],{"class":38,"line":46},[36,167600,50],{"class":49},[36,167602,167603],{"class":53},"(even_nums)\n",[19,167605,167606],{},"字典推导式：",[26,167608,167610],{"className":28,"code":167609,"language":30,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,167611,167612,167646],{"__ignoreMap":31},[36,167613,167614,167617,167619,167622,167624,167626,167629,167631,167633,167635,167637,167639,167641,167643],{"class":38,"line":39},[36,167615,167616],{"class":53},"squares ",[36,167618,115],{"class":114},[36,167620,167621],{"class":53}," {i: i ",[36,167623,1110],{"class":114},[36,167625,1140],{"class":49},[36,167627,167628],{"class":114}," for",[36,167630,11964],{"class":53},[36,167632,28556],{"class":114},[36,167634,34946],{"class":49},[36,167636,54],{"class":53},[36,167638,707],{"class":49},[36,167640,14958],{"class":53},[36,167642,3025],{"class":49},[36,167644,167645],{"class":53},")}\n",[36,167647,167648,167650],{"class":38,"line":46},[36,167649,50],{"class":49},[36,167651,167652],{"class":53},"(squares)\n",[19,167654,167655],{},"集合推导式：",[26,167657,167659],{"className":28,"code":167658,"language":30,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,167660,167661,167682],{"__ignoreMap":31},[36,167662,167663,167666,167668,167671,167673,167675,167677,167680],{"class":38,"line":39},[36,167664,167665],{"class":53},"chars ",[36,167667,115],{"class":114},[36,167669,167670],{"class":53}," {ch ",[36,167672,5556],{"class":114},[36,167674,161814],{"class":53},[36,167676,28556],{"class":114},[36,167678,167679],{"class":57}," \"hello\"",[36,167681,4103],{"class":53},[36,167683,167684,167686],{"class":38,"line":46},[36,167685,50],{"class":49},[36,167687,167688],{"class":53},"(chars)\n",[19,167690,167691],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167693,167695],{"id":167694},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,167697,167699],{"className":28,"code":167698,"language":30,"meta":31,"style":31},"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",[33,167700,167701,167709,167729,167749,167769,167789,167793,167797,167805,167819,167828,167832,167842,167854,167858,167878,167887,167891,167907,167912,167916,167930,167934,167956,167992],{"__ignoreMap":31},[36,167702,167703,167705,167707],{"class":38,"line":39},[36,167704,161838],{"class":53},[36,167706,115],{"class":114},[36,167708,57938],{"class":53},[36,167710,167711,167713,167715,167717,167719,167721,167723,167725,167727],{"class":38,"line":46},[36,167712,150837],{"class":53},[36,167714,65167],{"class":57},[36,167716,53931],{"class":53},[36,167718,152338],{"class":57},[36,167720,14958],{"class":53},[36,167722,153921],{"class":57},[36,167724,53931],{"class":53},[36,167726,3662],{"class":49},[36,167728,7461],{"class":53},[36,167730,167731,167733,167735,167737,167739,167741,167743,167745,167747],{"class":38,"line":82},[36,167732,150837],{"class":53},[36,167734,65167],{"class":57},[36,167736,53931],{"class":53},[36,167738,153385],{"class":57},[36,167740,14958],{"class":53},[36,167742,153921],{"class":57},[36,167744,53931],{"class":53},[36,167746,3487],{"class":49},[36,167748,7461],{"class":53},[36,167750,167751,167753,167755,167757,167759,167761,167763,167765,167767],{"class":38,"line":88},[36,167752,150837],{"class":53},[36,167754,65167],{"class":57},[36,167756,53931],{"class":53},[36,167758,161853],{"class":57},[36,167760,14958],{"class":53},[36,167762,153921],{"class":57},[36,167764,53931],{"class":53},[36,167766,3087],{"class":49},[36,167768,7461],{"class":53},[36,167770,167771,167773,167775,167777,167779,167781,167783,167785,167787],{"class":38,"line":195},[36,167772,150837],{"class":53},[36,167774,65167],{"class":57},[36,167776,53931],{"class":53},[36,167778,165432],{"class":57},[36,167780,14958],{"class":53},[36,167782,153921],{"class":57},[36,167784,53931],{"class":53},[36,167786,3558],{"class":49},[36,167788,7461],{"class":53},[36,167790,167791],{"class":38,"line":1517},[36,167792,35748],{"class":53},[36,167794,167795],{"class":38,"line":2421},[36,167796,546],{"emptyLinePlaceholder":545},[36,167798,167799,167801,167803],{"class":38,"line":2446},[36,167800,2399],{"class":53},[36,167802,115],{"class":114},[36,167804,49830],{"class":49},[36,167806,167807,167810,167812,167815,167817],{"class":38,"line":2469},[36,167808,167809],{"class":53},"max_student ",[36,167811,115],{"class":114},[36,167813,167814],{"class":53}," students[",[36,167816,713],{"class":49},[36,167818,35748],{"class":53},[36,167820,167821,167824,167826],{"class":38,"line":2492},[36,167822,167823],{"class":53},"passed ",[36,167825,115],{"class":114},[36,167827,54332],{"class":53},[36,167829,167830],{"class":38,"line":4150},[36,167831,546],{"emptyLinePlaceholder":545},[36,167833,167834,167836,167838,167840],{"class":38,"line":4155},[36,167835,5556],{"class":114},[36,167837,154586],{"class":53},[36,167839,28556],{"class":114},[36,167841,154591],{"class":53},[36,167843,167844,167846,167848,167850,167852],{"class":38,"line":4161},[36,167845,161429],{"class":53},[36,167847,1224],{"class":114},[36,167849,154598],{"class":53},[36,167851,153921],{"class":57},[36,167853,35748],{"class":53},[36,167855,167856],{"class":38,"line":4166},[36,167857,546],{"emptyLinePlaceholder":545},[36,167859,167860,167862,167864,167866,167868,167870,167873,167875],{"class":38,"line":4180},[36,167861,5632],{"class":114},[36,167863,154598],{"class":53},[36,167865,153921],{"class":57},[36,167867,6974],{"class":53},[36,167869,3633],{"class":114},[36,167871,167872],{"class":53}," max_student[",[36,167874,153921],{"class":57},[36,167876,167877],{"class":53},"]:\n",[36,167879,167880,167883,167885],{"class":38,"line":4185},[36,167881,167882],{"class":53},"        max_student ",[36,167884,115],{"class":114},[36,167886,154614],{"class":53},[36,167888,167889],{"class":38,"line":4191},[36,167890,546],{"emptyLinePlaceholder":545},[36,167892,167893,167895,167897,167899,167901,167903,167905],{"class":38,"line":4212},[36,167894,5632],{"class":114},[36,167896,154598],{"class":53},[36,167898,153921],{"class":57},[36,167900,6974],{"class":53},[36,167902,1490],{"class":114},[36,167904,159959],{"class":49},[36,167906,6270],{"class":53},[36,167908,167909],{"class":38,"line":4217},[36,167910,167911],{"class":53},"        passed.append(student)\n",[36,167913,167914],{"class":38,"line":4231},[36,167915,546],{"emptyLinePlaceholder":545},[36,167917,167918,167920,167922,167924,167926,167928],{"class":38,"line":4236},[36,167919,165896],{"class":53},[36,167921,115],{"class":114},[36,167923,165901],{"class":53},[36,167925,1065],{"class":114},[36,167927,9858],{"class":49},[36,167929,167117],{"class":53},[36,167931,167932],{"class":38,"line":4264},[36,167933,546],{"emptyLinePlaceholder":545},[36,167935,167936,167938,167940,167942,167944,167946,167948,167950,167952,167954],{"class":38,"line":4269},[36,167937,50],{"class":49},[36,167939,54],{"class":53},[36,167941,2060],{"class":114},[36,167943,165919],{"class":57},[36,167945,2065],{"class":49},[36,167947,165924],{"class":53},[36,167949,2296],{"class":114},[36,167951,2070],{"class":49},[36,167953,1822],{"class":57},[36,167955,61],{"class":53},[36,167957,167958,167960,167962,167964,167967,167969,167972,167974,167976,167978,167980,167982,167984,167986,167988,167990],{"class":38,"line":4286},[36,167959,50],{"class":49},[36,167961,54],{"class":53},[36,167963,2060],{"class":114},[36,167965,167966],{"class":57},"\"最高分学生:",[36,167968,2065],{"class":49},[36,167970,167971],{"class":53},"max_student[",[36,167973,155329],{"class":57},[36,167975,3614],{"class":53},[36,167977,2070],{"class":49},[36,167979,6979],{"class":49},[36,167981,167971],{"class":53},[36,167983,155367],{"class":57},[36,167985,3614],{"class":53},[36,167987,2070],{"class":49},[36,167989,1822],{"class":57},[36,167991,61],{"class":53},[36,167993,167994,167996,167998,168000,168003,168006,168009,168011,168013],{"class":38,"line":4291},[36,167995,50],{"class":49},[36,167997,54],{"class":53},[36,167999,2060],{"class":114},[36,168001,168002],{"class":57},"\"及格人数:",[36,168004,168005],{"class":49},"{len",[36,168007,168008],{"class":53},"(passed)",[36,168010,2070],{"class":49},[36,168012,1822],{"class":57},[36,168014,61],{"class":53},[14,168016,168018],{"id":168017},"_616-易错点","6.16 易错点",[433,168020,168021,168024,168027,168030,168036,168045],{},[436,168022,168023],{},"列表可变，元组和字符串不可变。",[436,168025,168026],{},"切片结束位置不包含。",[436,168028,168029],{},"字典通过 key 取值，不是通过索引。",[436,168031,168032,168033,1296],{},"空集合要用 ",[33,168034,168035],{},"set()",[436,168037,600,168038,168041,168042,1296],{},[33,168039,168040],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,168043,168044],{},"get()",[436,168046,168047],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168049,168051],{"id":168050},"_617-本章练习","6.17 本章练习",[433,168053,168054,168057,168060,168063,168066],{},[436,168055,168056],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[436,168058,168059],{},"输入一句话，统计每个字符出现次数。",[436,168061,168062],{},"使用集合去除列表中的重复元素。",[436,168064,168065],{},"使用字典保存一个学生的信息，并实现修改成绩。",[436,168067,168068],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2602,168070,168071],{},"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":31,"searchDepth":46,"depth":46,"links":168073},[168074,168075,168076,168077,168078,168079,168080,168081,168082,168083,168084,168085,168086,168087,168088,168089,168090],{"id":165054,"depth":46,"text":165055},{"id":165171,"depth":46,"text":165172},{"id":165261,"depth":46,"text":165262},{"id":165385,"depth":46,"text":165386},{"id":165748,"depth":46,"text":165749},{"id":165935,"depth":46,"text":165936},{"id":166054,"depth":46,"text":166055},{"id":166196,"depth":46,"text":166197},{"id":166383,"depth":46,"text":166384},{"id":166627,"depth":46,"text":166628},{"id":166837,"depth":46,"text":166838},{"id":166922,"depth":46,"text":166923},{"id":167220,"depth":46,"text":167221},{"id":167502,"depth":46,"text":167503},{"id":167694,"depth":46,"text":167695},{"id":168017,"depth":46,"text":168018},{"id":168050,"depth":46,"text":168051},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165046,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168097,"title":168098,"body":168099,"description":2630,"extension":2631,"meta":170271,"navigation":545,"path":170272,"seo":170273,"stem":170274,"__hash__":170275},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168100,"toc":170246},[168101,168104,168108,168111,168191,168194,168215,168218,168222,168225,168287,168290,168307,168311,168314,168359,168361,168369,168373,168376,168458,168461,168464,168489,168492,168515,168519,168522,168524,168586,168589,168591,168642,168646,168650,168656,168761,168765,168771,168842,168846,168849,168917,168920,169000,169004,169010,169046,169049,169052,169162,169168,169172,169175,169247,169250,169254,169258,169263,169325,169329,169334,169402,169406,169411,169527,169531,169534,169614,169617,169621,169624,169728,169730,169745,169748,169752,169890,169898,169902,169904,169915,169917,170175,170179,170211,170215,170243],[10,168102,168098],{"id":168103},"_7-函数进阶",[14,168105,168107],{"id":168106},"_71-多返回值","7.1 多返回值",[19,168109,168110],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,168112,168114],{"className":28,"code":168113,"language":30,"meta":31,"style":31},"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",[33,168115,168116,168125,168133,168141,168150,168157,168161,168165,168174,168180],{"__ignoreMap":31},[36,168117,168118,168120,168123],{"class":38,"line":39},[36,168119,34450],{"class":114},[36,168121,168122],{"class":4500}," get_info",[36,168124,34456],{"class":53},[36,168126,168127,168129,168131],{"class":38,"line":46},[36,168128,154819],{"class":53},[36,168130,115],{"class":114},[36,168132,365],{"class":57},[36,168134,168135,168137,168139],{"class":38,"line":82},[36,168136,154834],{"class":53},[36,168138,115],{"class":114},[36,168140,374],{"class":49},[36,168142,168143,168145,168147],{"class":38,"line":88},[36,168144,154848],{"class":53},[36,168146,115],{"class":114},[36,168148,168149],{"class":49}," 95\n",[36,168151,168152,168154],{"class":38,"line":195},[36,168153,6621],{"class":114},[36,168155,168156],{"class":53}," name, age, score\n",[36,168158,168159],{"class":38,"line":1517},[36,168160,546],{"emptyLinePlaceholder":545},[36,168162,168163],{"class":38,"line":2421},[36,168164,546],{"emptyLinePlaceholder":545},[36,168166,168167,168169,168171],{"class":38,"line":2446},[36,168168,163428],{"class":53},[36,168170,115],{"class":114},[36,168172,168173],{"class":53}," get_info()\n",[36,168175,168176,168178],{"class":38,"line":2469},[36,168177,50],{"class":49},[36,168179,79070],{"class":53},[36,168181,168182,168184,168186,168188],{"class":38,"line":2492},[36,168183,50],{"class":49},[36,168185,54],{"class":53},[36,168187,618],{"class":49},[36,168189,168190],{"class":53},"(result))\n",[19,168192,168193],{},"可以直接解包：",[26,168195,168197],{"className":28,"code":168196,"language":30,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,168198,168199,168208],{"__ignoreMap":31},[36,168200,168201,168204,168206],{"class":38,"line":39},[36,168202,168203],{"class":53},"name, age, score ",[36,168205,115],{"class":114},[36,168207,168173],{"class":53},[36,168209,168210,168212],{"class":38,"line":46},[36,168211,50],{"class":49},[36,168213,168214],{"class":53},"(name, age, score)\n",[19,168216,168217],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168219,168221],{"id":168220},"_72-位置参数","7.2 位置参数",[19,168223,168224],{},"位置参数按顺序传递。",[26,168226,168228],{"className":28,"code":168227,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,168229,168230,168238,168266,168270,168274],{"__ignoreMap":31},[36,168231,168232,168234,168236],{"class":38,"line":39},[36,168233,34450],{"class":114},[36,168235,151823],{"class":4500},[36,168237,151826],{"class":53},[36,168239,168240,168242,168244,168246,168248,168250,168252,168254,168256,168258,168260,168262,168264],{"class":38,"line":46},[36,168241,33803],{"class":49},[36,168243,54],{"class":53},[36,168245,2060],{"class":114},[36,168247,151837],{"class":57},[36,168249,2065],{"class":49},[36,168251,1998],{"class":53},[36,168253,2070],{"class":49},[36,168255,151846],{"class":57},[36,168257,2065],{"class":49},[36,168259,2006],{"class":53},[36,168261,2070],{"class":49},[36,168263,2248],{"class":57},[36,168265,61],{"class":53},[36,168267,168268],{"class":38,"line":82},[36,168269,546],{"emptyLinePlaceholder":545},[36,168271,168272],{"class":38,"line":88},[36,168273,546],{"emptyLinePlaceholder":545},[36,168275,168276,168279,168281,168283,168285],{"class":38,"line":195},[36,168277,168278],{"class":53},"introduce(",[36,168280,152338],{"class":57},[36,168282,14958],{"class":53},[36,168284,3326],{"class":49},[36,168286,61],{"class":53},[19,168288,168289],{},"顺序错了就会得到错误含义：",[26,168291,168293],{"className":28,"code":168292,"language":30,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,168294,168295],{"__ignoreMap":31},[36,168296,168297,168299,168301,168303,168305],{"class":38,"line":39},[36,168298,168278],{"class":53},[36,168300,3326],{"class":49},[36,168302,14958],{"class":53},[36,168304,152338],{"class":57},[36,168306,61],{"class":53},[14,168308,168310],{"id":168309},"_73-关键字参数","7.3 关键字参数",[19,168312,168313],{},"关键字参数按参数名传递。",[26,168315,168317],{"className":28,"code":168316,"language":30,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,168318,168319,168339],{"__ignoreMap":31},[36,168320,168321,168323,168325,168327,168329,168331,168333,168335,168337],{"class":38,"line":39},[36,168322,168278],{"class":53},[36,168324,1998],{"class":1997},[36,168326,115],{"class":114},[36,168328,152338],{"class":57},[36,168330,14958],{"class":53},[36,168332,2006],{"class":1997},[36,168334,115],{"class":114},[36,168336,3326],{"class":49},[36,168338,61],{"class":53},[36,168340,168341,168343,168345,168347,168349,168351,168353,168355,168357],{"class":38,"line":46},[36,168342,168278],{"class":53},[36,168344,2006],{"class":1997},[36,168346,115],{"class":114},[36,168348,3326],{"class":49},[36,168350,14958],{"class":53},[36,168352,1998],{"class":1997},[36,168354,115],{"class":114},[36,168356,152338],{"class":57},[36,168358,61],{"class":53},[19,168360,120400],{},[433,168362,168363,168366],{},[436,168364,168365],{},"顺序不容易错。",[436,168367,168368],{},"调用时可读性更强。",[14,168370,168372],{"id":168371},"_74-默认参数","7.4 默认参数",[19,168374,168375],{},"默认参数给参数设置默认值。",[26,168377,168379],{"className":28,"code":168378,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,168380,168381,168397,168427,168431,168435,168445],{"__ignoreMap":31},[36,168382,168383,168385,168387,168390,168392,168395],{"class":38,"line":39},[36,168384,34450],{"class":114},[36,168386,124557],{"class":4500},[36,168388,168389],{"class":53},"(host, port",[36,168391,115],{"class":114},[36,168393,168394],{"class":49},"3306",[36,168396,33290],{"class":53},[36,168398,168399,168401,168403,168405,168408,168410,168412,168414,168416,168418,168421,168423,168425],{"class":38,"line":46},[36,168400,33803],{"class":49},[36,168402,54],{"class":53},[36,168404,2060],{"class":114},[36,168406,168407],{"class":57},"\"连接",[36,168409,2065],{"class":49},[36,168411,29907],{"class":53},[36,168413,2070],{"class":49},[36,168415,3535],{"class":57},[36,168417,2065],{"class":49},[36,168419,168420],{"class":53},"port",[36,168422,2070],{"class":49},[36,168424,1822],{"class":57},[36,168426,61],{"class":53},[36,168428,168429],{"class":38,"line":82},[36,168430,546],{"emptyLinePlaceholder":545},[36,168432,168433],{"class":38,"line":88},[36,168434,546],{"emptyLinePlaceholder":545},[36,168436,168437,168440,168443],{"class":38,"line":195},[36,168438,168439],{"class":53},"connect(",[36,168441,168442],{"class":57},"\"localhost\"",[36,168444,61],{"class":53},[36,168446,168447,168449,168451,168453,168456],{"class":38,"line":1517},[36,168448,168439],{"class":53},[36,168450,168442],{"class":57},[36,168452,14958],{"class":53},[36,168454,168455],{"class":49},"6379",[36,168457,61],{"class":53},[19,168459,168460],{},"注意：默认参数必须放在非默认参数后面。",[19,168462,168463],{},"错误：",[26,168465,168467],{"className":28,"code":168466,"language":30,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,168468,168469,168485],{"__ignoreMap":31},[36,168470,168471,168473,168475,168478,168480,168482],{"class":38,"line":39},[36,168472,34450],{"class":114},[36,168474,124557],{"class":4500},[36,168476,168477],{"class":53},"(port",[36,168479,115],{"class":114},[36,168481,168394],{"class":49},[36,168483,168484],{"class":53},", host):\n",[36,168486,168487],{"class":38,"line":46},[36,168488,151987],{"class":114},[19,168490,168491],{},"正确：",[26,168493,168495],{"className":28,"code":168494,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,168496,168497,168511],{"__ignoreMap":31},[36,168498,168499,168501,168503,168505,168507,168509],{"class":38,"line":39},[36,168500,34450],{"class":114},[36,168502,124557],{"class":4500},[36,168504,168389],{"class":53},[36,168506,115],{"class":114},[36,168508,168394],{"class":49},[36,168510,33290],{"class":53},[36,168512,168513],{"class":38,"line":46},[36,168514,151987],{"class":114},[14,168516,168518],{"id":168517},"_75-默认参数的坑","7.5 默认参数的坑",[19,168520,168521],{},"不要使用可变对象作为默认参数。",[19,168523,159745],{},[26,168525,168527],{"className":28,"code":168526,"language":30,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,168528,168529,168544,168549,168556,168560,168564,168575],{"__ignoreMap":31},[36,168530,168531,168533,168536,168539,168541],{"class":38,"line":39},[36,168532,34450],{"class":114},[36,168534,168535],{"class":4500}," add_item",[36,168537,168538],{"class":53},"(item, items",[36,168540,115],{"class":114},[36,168542,168543],{"class":53},"[]):\n",[36,168545,168546],{"class":38,"line":46},[36,168547,168548],{"class":53},"    items.append(item)\n",[36,168550,168551,168553],{"class":38,"line":82},[36,168552,6621],{"class":114},[36,168554,168555],{"class":53}," items\n",[36,168557,168558],{"class":38,"line":88},[36,168559,546],{"emptyLinePlaceholder":545},[36,168561,168562],{"class":38,"line":195},[36,168563,546],{"emptyLinePlaceholder":545},[36,168565,168566,168568,168571,168573],{"class":38,"line":1517},[36,168567,50],{"class":49},[36,168569,168570],{"class":53},"(add_item(",[36,168572,167447],{"class":57},[36,168574,625],{"class":53},[36,168576,168577,168579,168581,168584],{"class":38,"line":2421},[36,168578,50],{"class":49},[36,168580,168570],{"class":53},[36,168582,168583],{"class":57},"\"b\"",[36,168585,625],{"class":53},[19,168587,168588],{},"第二次调用会复用第一次的列表。",[19,168590,971],{},[26,168592,168594],{"className":28,"code":168593,"language":30,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,168595,168596,168610,168623,168632,168636],{"__ignoreMap":31},[36,168597,168598,168600,168602,168604,168606,168608],{"class":38,"line":39},[36,168599,34450],{"class":114},[36,168601,168535],{"class":4500},[36,168603,168538],{"class":53},[36,168605,115],{"class":114},[36,168607,198],{"class":49},[36,168609,33290],{"class":53},[36,168611,168612,168614,168617,168619,168621],{"class":38,"line":46},[36,168613,5632],{"class":114},[36,168615,168616],{"class":53}," items ",[36,168618,41427],{"class":114},[36,168620,41433],{"class":49},[36,168622,6270],{"class":53},[36,168624,168625,168628,168630],{"class":38,"line":82},[36,168626,168627],{"class":53},"        items ",[36,168629,115],{"class":114},[36,168631,54332],{"class":53},[36,168633,168634],{"class":38,"line":88},[36,168635,168548],{"class":53},[36,168637,168638,168640],{"class":38,"line":195},[36,168639,6621],{"class":114},[36,168641,168555],{"class":53},[14,168643,168645],{"id":168644},"_76-不定长参数","7.6 不定长参数",[997,168647,168649],{"id":168648},"_761-args","7.6.1 *args",[19,168651,168652,168655],{},[33,168653,168654],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,168657,168659],{"className":28,"code":168658,"language":30,"meta":31,"style":31},"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",[33,168660,168661,168674,168682,168693,168702,168708,168712,168716,168735],{"__ignoreMap":31},[36,168662,168663,168665,168667,168669,168671],{"class":38,"line":39},[36,168664,34450],{"class":114},[36,168666,7738],{"class":4500},[36,168668,54],{"class":53},[36,168670,1050],{"class":114},[36,168672,168673],{"class":53},"args):\n",[36,168675,168676,168678,168680],{"class":38,"line":46},[36,168677,161429],{"class":53},[36,168679,115],{"class":114},[36,168681,49830],{"class":49},[36,168683,168684,168686,168688,168690],{"class":38,"line":82},[36,168685,5732],{"class":114},[36,168687,1281],{"class":53},[36,168689,28556],{"class":114},[36,168691,168692],{"class":53}," args:\n",[36,168694,168695,168697,168699],{"class":38,"line":88},[36,168696,162104],{"class":53},[36,168698,1224],{"class":114},[36,168700,168701],{"class":53}," num\n",[36,168703,168704,168706],{"class":38,"line":195},[36,168705,6621],{"class":114},[36,168707,164409],{"class":53},[36,168709,168710],{"class":38,"line":1517},[36,168711,546],{"emptyLinePlaceholder":545},[36,168713,168714],{"class":38,"line":2421},[36,168715,546],{"emptyLinePlaceholder":545},[36,168717,168718,168720,168723,168725,168727,168729,168731,168733],{"class":38,"line":2446},[36,168719,50],{"class":49},[36,168721,168722],{"class":53},"(add(",[36,168724,707],{"class":49},[36,168726,14958],{"class":53},[36,168728,1188],{"class":49},[36,168730,14958],{"class":53},[36,168732,2767],{"class":49},[36,168734,625],{"class":53},[36,168736,168737,168739,168741,168743,168745,168747,168749,168751,168753,168755,168757,168759],{"class":38,"line":2469},[36,168738,50],{"class":49},[36,168740,168722],{"class":53},[36,168742,707],{"class":49},[36,168744,14958],{"class":53},[36,168746,1188],{"class":49},[36,168748,14958],{"class":53},[36,168750,2767],{"class":49},[36,168752,14958],{"class":53},[36,168754,2977],{"class":49},[36,168756,14958],{"class":53},[36,168758,1134],{"class":49},[36,168760,625],{"class":53},[997,168762,168764],{"id":168763},"_762-kwargs","7.6.2 **kwargs",[19,168766,168767,168770],{},[33,168768,168769],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,168772,168774],{"className":28,"code":168773,"language":30,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,168775,168776,168789,168800,168806,168810,168814],{"__ignoreMap":31},[36,168777,168778,168780,168782,168784,168786],{"class":38,"line":39},[36,168779,34450],{"class":114},[36,168781,164067],{"class":4500},[36,168783,54],{"class":53},[36,168785,1110],{"class":114},[36,168787,168788],{"class":53},"kwargs):\n",[36,168790,168791,168793,168795,168797],{"class":38,"line":46},[36,168792,5732],{"class":114},[36,168794,166907],{"class":53},[36,168796,28556],{"class":114},[36,168798,168799],{"class":53}," kwargs.items():\n",[36,168801,168802,168804],{"class":38,"line":82},[36,168803,34954],{"class":49},[36,168805,166919],{"class":53},[36,168807,168808],{"class":38,"line":88},[36,168809,546],{"emptyLinePlaceholder":545},[36,168811,168812],{"class":38,"line":195},[36,168813,546],{"emptyLinePlaceholder":545},[36,168815,168816,168818,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838,168840],{"class":38,"line":1517},[36,168817,164132],{"class":53},[36,168819,1998],{"class":1997},[36,168821,115],{"class":114},[36,168823,152338],{"class":57},[36,168825,14958],{"class":53},[36,168827,2006],{"class":1997},[36,168829,115],{"class":114},[36,168831,3326],{"class":49},[36,168833,14958],{"class":53},[36,168835,72758],{"class":1997},[36,168837,115],{"class":114},[36,168839,71756],{"class":57},[36,168841,61],{"class":53},[14,168843,168845],{"id":168844},"_77-参数解包","7.7 参数解包",[19,168847,168848],{},"列表或元组解包为位置参数：",[26,168850,168852],{"className":28,"code":168851,"language":30,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,168853,168854,168863,168878,168882,168886,168906],{"__ignoreMap":31},[36,168855,168856,168858,168860],{"class":38,"line":39},[36,168857,34450],{"class":114},[36,168859,7738],{"class":4500},[36,168861,168862],{"class":53},"(a, b, c):\n",[36,168864,168865,168867,168869,168871,168873,168875],{"class":38,"line":46},[36,168866,6621],{"class":114},[36,168868,13392],{"class":53},[36,168870,121],{"class":114},[36,168872,13405],{"class":53},[36,168874,121],{"class":114},[36,168876,168877],{"class":53}," c\n",[36,168879,168880],{"class":38,"line":82},[36,168881,546],{"emptyLinePlaceholder":545},[36,168883,168884],{"class":38,"line":88},[36,168885,546],{"emptyLinePlaceholder":545},[36,168887,168888,168890,168892,168894,168896,168898,168900,168902,168904],{"class":38,"line":195},[36,168889,166222],{"class":53},[36,168891,115],{"class":114},[36,168893,54720],{"class":53},[36,168895,707],{"class":49},[36,168897,14958],{"class":53},[36,168899,1188],{"class":49},[36,168901,14958],{"class":53},[36,168903,2767],{"class":49},[36,168905,35748],{"class":53},[36,168907,168908,168910,168912,168914],{"class":38,"line":1517},[36,168909,50],{"class":49},[36,168911,168722],{"class":53},[36,168913,1050],{"class":114},[36,168915,168916],{"class":53},"nums))\n",[19,168918,168919],{},"字典解包为关键字参数：",[26,168921,168923],{"className":28,"code":168922,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,168924,168925,168933,168959,168963,168967,168991],{"__ignoreMap":31},[36,168926,168927,168929,168931],{"class":38,"line":39},[36,168928,34450],{"class":114},[36,168930,151823],{"class":4500},[36,168932,151826],{"class":53},[36,168934,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953,168955,168957],{"class":38,"line":46},[36,168936,33803],{"class":49},[36,168938,54],{"class":53},[36,168940,2060],{"class":114},[36,168942,1822],{"class":57},[36,168944,2065],{"class":49},[36,168946,1998],{"class":53},[36,168948,2070],{"class":49},[36,168950,6979],{"class":49},[36,168952,2006],{"class":53},[36,168954,2070],{"class":49},[36,168956,1822],{"class":57},[36,168958,61],{"class":53},[36,168960,168961],{"class":38,"line":82},[36,168962,546],{"emptyLinePlaceholder":545},[36,168964,168965],{"class":38,"line":88},[36,168966,546],{"emptyLinePlaceholder":545},[36,168968,168969,168971,168973,168975,168977,168979,168981,168983,168985,168987,168989],{"class":38,"line":195},[36,168970,118780],{"class":53},[36,168972,115],{"class":114},[36,168974,6979],{"class":53},[36,168976,65167],{"class":57},[36,168978,53931],{"class":53},[36,168980,152338],{"class":57},[36,168982,14958],{"class":53},[36,168984,71611],{"class":57},[36,168986,53931],{"class":53},[36,168988,3326],{"class":49},[36,168990,4103],{"class":53},[36,168992,168993,168995,168997],{"class":38,"line":1517},[36,168994,168278],{"class":53},[36,168996,1110],{"class":114},[36,168998,168999],{"class":53},"info)\n",[14,169001,169003],{"id":169002},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169005,169006,169009],{},[33,169007,169008],{},"lambda"," 用于定义简单匿名函数。",[26,169011,169013],{"className":28,"code":169012,"language":30,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,169014,169015,169032],{"__ignoreMap":31},[36,169016,169017,169020,169022,169025,169028,169030],{"class":38,"line":39},[36,169018,169019],{"class":53},"add ",[36,169021,115],{"class":114},[36,169023,169024],{"class":114}," lambda",[36,169026,169027],{"class":53}," a, b: a ",[36,169029,121],{"class":114},[36,169031,153553],{"class":53},[36,169033,169034,169036,169038,169040,169042,169044],{"class":38,"line":46},[36,169035,50],{"class":49},[36,169037,168722],{"class":53},[36,169039,707],{"class":49},[36,169041,14958],{"class":53},[36,169043,1188],{"class":49},[36,169045,625],{"class":53},[19,169047,169048],{},"常和排序、过滤等函数一起使用。",[19,169050,169051],{},"按分数排序：",[26,169053,169055],{"className":28,"code":169054,"language":30,"meta":31,"style":31},"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",[33,169056,169057,169065,169085,169105,169125,169129,169133,169156],{"__ignoreMap":31},[36,169058,169059,169061,169063],{"class":38,"line":39},[36,169060,161838],{"class":53},[36,169062,115],{"class":114},[36,169064,57938],{"class":53},[36,169066,169067,169069,169071,169073,169075,169077,169079,169081,169083],{"class":38,"line":46},[36,169068,150837],{"class":53},[36,169070,65167],{"class":57},[36,169072,53931],{"class":53},[36,169074,152338],{"class":57},[36,169076,14958],{"class":53},[36,169078,153921],{"class":57},[36,169080,53931],{"class":53},[36,169082,3662],{"class":49},[36,169084,7461],{"class":53},[36,169086,169087,169089,169091,169093,169095,169097,169099,169101,169103],{"class":38,"line":82},[36,169088,150837],{"class":53},[36,169090,65167],{"class":57},[36,169092,53931],{"class":53},[36,169094,153385],{"class":57},[36,169096,14958],{"class":53},[36,169098,153921],{"class":57},[36,169100,53931],{"class":53},[36,169102,3487],{"class":49},[36,169104,7461],{"class":53},[36,169106,169107,169109,169111,169113,169115,169117,169119,169121,169123],{"class":38,"line":88},[36,169108,150837],{"class":53},[36,169110,65167],{"class":57},[36,169112,53931],{"class":53},[36,169114,161853],{"class":57},[36,169116,14958],{"class":53},[36,169118,153921],{"class":57},[36,169120,53931],{"class":53},[36,169122,3087],{"class":49},[36,169124,7461],{"class":53},[36,169126,169127],{"class":38,"line":195},[36,169128,35748],{"class":53},[36,169130,169131],{"class":38,"line":1517},[36,169132,546],{"emptyLinePlaceholder":545},[36,169134,169135,169138,169140,169142,169144,169146,169148,169150,169152,169154],{"class":38,"line":2421},[36,169136,169137],{"class":53},"students.sort(",[36,169139,156392],{"class":1997},[36,169141,156395],{"class":114},[36,169143,156398],{"class":53},[36,169145,153921],{"class":57},[36,169147,114671],{"class":53},[36,169149,165650],{"class":1997},[36,169151,115],{"class":114},[36,169153,189],{"class":49},[36,169155,61],{"class":53},[36,169157,169158,169160],{"class":38,"line":2446},[36,169159,50],{"class":49},[36,169161,167117],{"class":53},[19,169163,169164,169165,169167],{},"如果逻辑复杂，不要硬写 ",[33,169166,169008],{},"，定义普通函数更清晰。",[14,169169,169171],{"id":169170},"_79-函数作为参数","7.9 函数作为参数",[19,169173,169174],{},"函数可以作为参数传给另一个函数。",[26,169176,169178],{"className":28,"code":169177,"language":30,"meta":31,"style":31},"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",[33,169179,169180,169188,169198,169202,169206,169216,169223,169227,169231],{"__ignoreMap":31},[36,169181,169182,169184,169186],{"class":38,"line":39},[36,169183,34450],{"class":114},[36,169185,7738],{"class":4500},[36,169187,153542],{"class":53},[36,169189,169190,169192,169194,169196],{"class":38,"line":46},[36,169191,6621],{"class":114},[36,169193,13392],{"class":53},[36,169195,121],{"class":114},[36,169197,153553],{"class":53},[36,169199,169200],{"class":38,"line":82},[36,169201,546],{"emptyLinePlaceholder":545},[36,169203,169204],{"class":38,"line":88},[36,169205,546],{"emptyLinePlaceholder":545},[36,169207,169208,169210,169213],{"class":38,"line":195},[36,169209,34450],{"class":114},[36,169211,169212],{"class":4500}," calculate",[36,169214,169215],{"class":53},"(a, b, func):\n",[36,169217,169218,169220],{"class":38,"line":1517},[36,169219,6621],{"class":114},[36,169221,169222],{"class":53}," func(a, b)\n",[36,169224,169225],{"class":38,"line":2421},[36,169226,546],{"emptyLinePlaceholder":545},[36,169228,169229],{"class":38,"line":2446},[36,169230,546],{"emptyLinePlaceholder":545},[36,169232,169233,169235,169238,169240,169242,169244],{"class":38,"line":2469},[36,169234,50],{"class":49},[36,169236,169237],{"class":53},"(calculate(",[36,169239,1317],{"class":49},[36,169241,14958],{"class":53},[36,169243,3376],{"class":49},[36,169245,169246],{"class":53},", add))\n",[19,169248,169249],{},"这种思想在排序、回调、框架中经常出现。",[14,169251,169253],{"id":169252},"_710-mapfiltersorted","7.10 map、filter、sorted",[997,169255,169257],{"id":169256},"_7101-map","7.10.1 map",[19,169259,169260,169262],{},[33,169261,76529],{}," 对每个元素执行函数。",[26,169264,169266],{"className":28,"code":169265,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,169267,169268,169292,169315],{"__ignoreMap":31},[36,169269,169270,169272,169274,169276,169278,169280,169282,169284,169286,169288,169290],{"class":38,"line":39},[36,169271,166222],{"class":53},[36,169273,115],{"class":114},[36,169275,54720],{"class":53},[36,169277,707],{"class":49},[36,169279,14958],{"class":53},[36,169281,1188],{"class":49},[36,169283,14958],{"class":53},[36,169285,2767],{"class":49},[36,169287,14958],{"class":53},[36,169289,2977],{"class":49},[36,169291,35748],{"class":53},[36,169293,169294,169296,169298,169301,169303,169305,169308,169310,169312],{"class":38,"line":46},[36,169295,163428],{"class":53},[36,169297,115],{"class":114},[36,169299,169300],{"class":49}," map",[36,169302,54],{"class":53},[36,169304,169008],{"class":114},[36,169306,169307],{"class":53}," x: x ",[36,169309,1050],{"class":114},[36,169311,1140],{"class":49},[36,169313,169314],{"class":53},", nums)\n",[36,169316,169317,169319,169321,169323],{"class":38,"line":82},[36,169318,50],{"class":49},[36,169320,54],{"class":53},[36,169322,296],{"class":49},[36,169324,168190],{"class":53},[997,169326,169328],{"id":169327},"_7102-filter","7.10.2 filter",[19,169330,169331,169333],{},[33,169332,82532],{}," 保留满足条件的元素。",[26,169335,169337],{"className":28,"code":169336,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,169338,169339,169367,169392],{"__ignoreMap":31},[36,169340,169341,169343,169345,169347,169349,169351,169353,169355,169357,169359,169361,169363,169365],{"class":38,"line":39},[36,169342,166222],{"class":53},[36,169344,115],{"class":114},[36,169346,54720],{"class":53},[36,169348,707],{"class":49},[36,169350,14958],{"class":53},[36,169352,1188],{"class":49},[36,169354,14958],{"class":53},[36,169356,2767],{"class":49},[36,169358,14958],{"class":53},[36,169360,2977],{"class":49},[36,169362,14958],{"class":53},[36,169364,1134],{"class":49},[36,169366,35748],{"class":53},[36,169368,169369,169371,169373,169376,169378,169380,169382,169384,169386,169388,169390],{"class":38,"line":46},[36,169370,163428],{"class":53},[36,169372,115],{"class":114},[36,169374,169375],{"class":49}," filter",[36,169377,54],{"class":53},[36,169379,169008],{"class":114},[36,169381,169307],{"class":53},[36,169383,1095],{"class":114},[36,169385,1140],{"class":49},[36,169387,1351],{"class":114},[36,169389,6624],{"class":49},[36,169391,169314],{"class":53},[36,169393,169394,169396,169398,169400],{"class":38,"line":82},[36,169395,50],{"class":49},[36,169397,54],{"class":53},[36,169399,296],{"class":49},[36,169401,168190],{"class":53},[997,169403,169405],{"id":169404},"_7103-sorted","7.10.3 sorted",[19,169407,169408,169410],{},[33,169409,167358],{}," 返回排序后的新列表。",[26,169412,169414],{"className":28,"code":169413,"language":30,"meta":31,"style":31},"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",[33,169415,169416,169424,169444,169464,169484,169488,169492,169521],{"__ignoreMap":31},[36,169417,169418,169420,169422],{"class":38,"line":39},[36,169419,161838],{"class":53},[36,169421,115],{"class":114},[36,169423,57938],{"class":53},[36,169425,169426,169428,169430,169432,169434,169436,169438,169440,169442],{"class":38,"line":46},[36,169427,150837],{"class":53},[36,169429,65167],{"class":57},[36,169431,53931],{"class":53},[36,169433,152338],{"class":57},[36,169435,14958],{"class":53},[36,169437,153921],{"class":57},[36,169439,53931],{"class":53},[36,169441,3662],{"class":49},[36,169443,7461],{"class":53},[36,169445,169446,169448,169450,169452,169454,169456,169458,169460,169462],{"class":38,"line":82},[36,169447,150837],{"class":53},[36,169449,65167],{"class":57},[36,169451,53931],{"class":53},[36,169453,153385],{"class":57},[36,169455,14958],{"class":53},[36,169457,153921],{"class":57},[36,169459,53931],{"class":53},[36,169461,3487],{"class":49},[36,169463,7461],{"class":53},[36,169465,169466,169468,169470,169472,169474,169476,169478,169480,169482],{"class":38,"line":88},[36,169467,150837],{"class":53},[36,169469,65167],{"class":57},[36,169471,53931],{"class":53},[36,169473,161853],{"class":57},[36,169475,14958],{"class":53},[36,169477,153921],{"class":57},[36,169479,53931],{"class":53},[36,169481,3087],{"class":49},[36,169483,7461],{"class":53},[36,169485,169486],{"class":38,"line":195},[36,169487,35748],{"class":53},[36,169489,169490],{"class":38,"line":1517},[36,169491,546],{"emptyLinePlaceholder":545},[36,169493,169494,169496,169498,169500,169503,169505,169507,169509,169511,169513,169515,169517,169519],{"class":38,"line":2421},[36,169495,163428],{"class":53},[36,169497,115],{"class":114},[36,169499,165726],{"class":49},[36,169501,169502],{"class":53},"(students, ",[36,169504,156392],{"class":1997},[36,169506,156395],{"class":114},[36,169508,156398],{"class":53},[36,169510,153921],{"class":57},[36,169512,114671],{"class":53},[36,169514,165650],{"class":1997},[36,169516,115],{"class":114},[36,169518,189],{"class":49},[36,169520,61],{"class":53},[36,169522,169523,169525],{"class":38,"line":2446},[36,169524,50],{"class":49},[36,169526,79070],{"class":53},[14,169528,169530],{"id":169529},"_711-闭包入门","7.11 闭包入门",[19,169532,169533],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,169535,169537],{"className":28,"code":169536,"language":30,"meta":31,"style":31},"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",[33,169538,169539,169549,169559,169570,169574,169581,169585,169589,169603],{"__ignoreMap":31},[36,169540,169541,169543,169546],{"class":38,"line":39},[36,169542,34450],{"class":114},[36,169544,169545],{"class":4500}," outer",[36,169547,169548],{"class":53},"(base):\n",[36,169550,169551,169553,169556],{"class":38,"line":46},[36,169552,33305],{"class":114},[36,169554,169555],{"class":4500}," inner",[36,169557,169558],{"class":53},"(num):\n",[36,169560,169561,169563,169566,169568],{"class":38,"line":82},[36,169562,17273],{"class":114},[36,169564,169565],{"class":53}," base ",[36,169567,121],{"class":114},[36,169569,168701],{"class":53},[36,169571,169572],{"class":38,"line":88},[36,169573,546],{"emptyLinePlaceholder":545},[36,169575,169576,169578],{"class":38,"line":195},[36,169577,6621],{"class":114},[36,169579,169580],{"class":53}," inner\n",[36,169582,169583],{"class":38,"line":1517},[36,169584,546],{"emptyLinePlaceholder":545},[36,169586,169587],{"class":38,"line":2421},[36,169588,546],{"emptyLinePlaceholder":545},[36,169590,169591,169594,169596,169599,169601],{"class":38,"line":2446},[36,169592,169593],{"class":53},"add_10 ",[36,169595,115],{"class":114},[36,169597,169598],{"class":53}," outer(",[36,169600,1317],{"class":49},[36,169602,61],{"class":53},[36,169604,169605,169607,169610,169612],{"class":38,"line":2469},[36,169606,50],{"class":49},[36,169608,169609],{"class":53},"(add_10(",[36,169611,1134],{"class":49},[36,169613,625],{"class":53},[19,169615,169616],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169618,169620],{"id":169619},"_712-装饰器入门","7.12 装饰器入门",[19,169622,169623],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,169625,169627],{"className":28,"code":169626,"language":30,"meta":31,"style":31},"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",[33,169628,169629,169638,169647,169658,169663,169674,169678,169685,169689,169693,169698,169706,169716,169720,169724],{"__ignoreMap":31},[36,169630,169631,169633,169635],{"class":38,"line":39},[36,169632,34450],{"class":114},[36,169634,89670],{"class":4500},[36,169636,169637],{"class":53},"(func):\n",[36,169639,169640,169642,169645],{"class":38,"line":46},[36,169641,33305],{"class":114},[36,169643,169644],{"class":4500}," wrapper",[36,169646,34456],{"class":53},[36,169648,169649,169651,169653,169656],{"class":38,"line":82},[36,169650,34954],{"class":49},[36,169652,54],{"class":53},[36,169654,169655],{"class":57},"\"函数开始执行\"",[36,169657,61],{"class":53},[36,169659,169660],{"class":38,"line":88},[36,169661,169662],{"class":53},"        func()\n",[36,169664,169665,169667,169669,169672],{"class":38,"line":195},[36,169666,34954],{"class":49},[36,169668,54],{"class":53},[36,169670,169671],{"class":57},"\"函数执行结束\"",[36,169673,61],{"class":53},[36,169675,169676],{"class":38,"line":1517},[36,169677,546],{"emptyLinePlaceholder":545},[36,169679,169680,169682],{"class":38,"line":2421},[36,169681,6621],{"class":114},[36,169683,169684],{"class":53}," wrapper\n",[36,169686,169687],{"class":38,"line":2446},[36,169688,546],{"emptyLinePlaceholder":545},[36,169690,169691],{"class":38,"line":2469},[36,169692,546],{"emptyLinePlaceholder":545},[36,169694,169695],{"class":38,"line":2492},[36,169696,169697],{"class":4500},"@log\n",[36,169699,169700,169702,169704],{"class":38,"line":4150},[36,169701,34450],{"class":114},[36,169703,163118],{"class":4500},[36,169705,34456],{"class":53},[36,169707,169708,169710,169712,169714],{"class":38,"line":4155},[36,169709,33803],{"class":49},[36,169711,54],{"class":53},[36,169713,58],{"class":57},[36,169715,61],{"class":53},[36,169717,169718],{"class":38,"line":4161},[36,169719,546],{"emptyLinePlaceholder":545},[36,169721,169722],{"class":38,"line":4166},[36,169723,546],{"emptyLinePlaceholder":545},[36,169725,169726],{"class":38,"line":4180},[36,169727,163153],{"class":53},[19,169729,160396],{},[26,169731,169733],{"className":28,"code":169732,"language":30,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,169734,169735],{"__ignoreMap":31},[36,169736,169737,169740,169742],{"class":38,"line":39},[36,169738,169739],{"class":53},"say_hello ",[36,169741,115],{"class":114},[36,169743,169744],{"class":53}," log(say_hello)\n",[19,169746,169747],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169749,169751],{"id":169750},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,169753,169755],{"className":28,"code":169754,"language":30,"meta":31,"style":31},"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",[33,169756,169757,169765,169782,169792,169811,169821,169828,169832,169838,169842,169846,169850,169858,169868,169872,169876],{"__ignoreMap":31},[36,169758,169759,169761,169763],{"class":38,"line":39},[36,169760,34450],{"class":114},[36,169762,89670],{"class":4500},[36,169764,169637],{"class":53},[36,169766,169767,169769,169771,169773,169775,169778,169780],{"class":38,"line":46},[36,169768,33305],{"class":114},[36,169770,169644],{"class":4500},[36,169772,54],{"class":53},[36,169774,1050],{"class":114},[36,169776,169777],{"class":53},"args, ",[36,169779,1110],{"class":114},[36,169781,168788],{"class":53},[36,169783,169784,169786,169788,169790],{"class":38,"line":82},[36,169785,34954],{"class":49},[36,169787,54],{"class":53},[36,169789,169655],{"class":57},[36,169791,61],{"class":53},[36,169793,169794,169797,169799,169802,169804,169806,169808],{"class":38,"line":88},[36,169795,169796],{"class":53},"        result ",[36,169798,115],{"class":114},[36,169800,169801],{"class":53}," func(",[36,169803,1050],{"class":114},[36,169805,169777],{"class":53},[36,169807,1110],{"class":114},[36,169809,169810],{"class":53},"kwargs)\n",[36,169812,169813,169815,169817,169819],{"class":38,"line":195},[36,169814,34954],{"class":49},[36,169816,54],{"class":53},[36,169818,169671],{"class":57},[36,169820,61],{"class":53},[36,169822,169823,169825],{"class":38,"line":1517},[36,169824,17273],{"class":114},[36,169826,169827],{"class":53}," result\n",[36,169829,169830],{"class":38,"line":2421},[36,169831,546],{"emptyLinePlaceholder":545},[36,169833,169834,169836],{"class":38,"line":2446},[36,169835,6621],{"class":114},[36,169837,169684],{"class":53},[36,169839,169840],{"class":38,"line":2469},[36,169841,546],{"emptyLinePlaceholder":545},[36,169843,169844],{"class":38,"line":2492},[36,169845,546],{"emptyLinePlaceholder":545},[36,169847,169848],{"class":38,"line":4150},[36,169849,169697],{"class":4500},[36,169851,169852,169854,169856],{"class":38,"line":4155},[36,169853,34450],{"class":114},[36,169855,7738],{"class":4500},[36,169857,153542],{"class":53},[36,169859,169860,169862,169864,169866],{"class":38,"line":4161},[36,169861,6621],{"class":114},[36,169863,13392],{"class":53},[36,169865,121],{"class":114},[36,169867,153553],{"class":53},[36,169869,169870],{"class":38,"line":4166},[36,169871,546],{"emptyLinePlaceholder":545},[36,169873,169874],{"class":38,"line":4180},[36,169875,546],{"emptyLinePlaceholder":545},[36,169877,169878,169880,169882,169884,169886,169888],{"class":38,"line":4185},[36,169879,50],{"class":49},[36,169881,168722],{"class":53},[36,169883,1317],{"class":49},[36,169885,14958],{"class":53},[36,169887,3376],{"class":49},[36,169889,625],{"class":53},[19,169891,169892,169893,1292,169895,169897],{},"这个写法使用 ",[33,169894,168654],{},[33,169896,168769],{}," 接收原函数的所有参数。",[14,169899,169901],{"id":169900},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169903,2310],{},[433,169905,169906,169909,169912],{},[436,169907,169908],{},"给定一组学生数据。",[436,169910,169911],{},"封装函数，根据传入规则筛选学生。",[436,169913,169914],{},"筛选及格、优秀、未成年学生。",[19,169916,2327],{},[26,169918,169920],{"className":28,"code":169919,"language":30,"meta":31,"style":31},"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",[33,169921,169922,169930,169958,169986,170014,170018,170022,170026,170036,170044,170054,170061,170066,170072,170076,170080,170104,170127,170150,170154,170161,170168],{"__ignoreMap":31},[36,169923,169924,169926,169928],{"class":38,"line":39},[36,169925,161838],{"class":53},[36,169927,115],{"class":114},[36,169929,57938],{"class":53},[36,169931,169932,169934,169936,169938,169940,169942,169944,169946,169948,169950,169952,169954,169956],{"class":38,"line":46},[36,169933,150837],{"class":53},[36,169935,65167],{"class":57},[36,169937,53931],{"class":53},[36,169939,152338],{"class":57},[36,169941,14958],{"class":53},[36,169943,71611],{"class":57},[36,169945,53931],{"class":53},[36,169947,3326],{"class":49},[36,169949,14958],{"class":53},[36,169951,153921],{"class":57},[36,169953,53931],{"class":53},[36,169955,3662],{"class":49},[36,169957,7461],{"class":53},[36,169959,169960,169962,169964,169966,169968,169970,169972,169974,169976,169978,169980,169982,169984],{"class":38,"line":82},[36,169961,150837],{"class":53},[36,169963,65167],{"class":57},[36,169965,53931],{"class":53},[36,169967,153385],{"class":57},[36,169969,14958],{"class":53},[36,169971,71611],{"class":57},[36,169973,53931],{"class":53},[36,169975,3301],{"class":49},[36,169977,14958],{"class":53},[36,169979,153921],{"class":57},[36,169981,53931],{"class":53},[36,169983,3487],{"class":49},[36,169985,7461],{"class":53},[36,169987,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006,170008,170010,170012],{"class":38,"line":88},[36,169989,150837],{"class":53},[36,169991,65167],{"class":57},[36,169993,53931],{"class":53},[36,169995,161853],{"class":57},[36,169997,14958],{"class":53},[36,169999,71611],{"class":57},[36,170001,53931],{"class":53},[36,170003,3351],{"class":49},[36,170005,14958],{"class":53},[36,170007,153921],{"class":57},[36,170009,53931],{"class":53},[36,170011,3558],{"class":49},[36,170013,7461],{"class":53},[36,170015,170016],{"class":38,"line":195},[36,170017,35748],{"class":53},[36,170019,170020],{"class":38,"line":1517},[36,170021,546],{"emptyLinePlaceholder":545},[36,170023,170024],{"class":38,"line":2421},[36,170025,546],{"emptyLinePlaceholder":545},[36,170027,170028,170030,170033],{"class":38,"line":2446},[36,170029,34450],{"class":114},[36,170031,170032],{"class":4500}," filter_students",[36,170034,170035],{"class":53},"(students, condition):\n",[36,170037,170038,170040,170042],{"class":38,"line":2469},[36,170039,163345],{"class":53},[36,170041,115],{"class":114},[36,170043,54332],{"class":53},[36,170045,170046,170048,170050,170052],{"class":38,"line":2492},[36,170047,5732],{"class":114},[36,170049,154586],{"class":53},[36,170051,28556],{"class":114},[36,170053,154591],{"class":53},[36,170055,170056,170058],{"class":38,"line":4150},[36,170057,5029],{"class":114},[36,170059,170060],{"class":53}," condition(student):\n",[36,170062,170063],{"class":38,"line":4155},[36,170064,170065],{"class":53},"            result.append(student)\n",[36,170067,170068,170070],{"class":38,"line":4161},[36,170069,6621],{"class":114},[36,170071,169827],{"class":53},[36,170073,170074],{"class":38,"line":4166},[36,170075,546],{"emptyLinePlaceholder":545},[36,170077,170078],{"class":38,"line":4180},[36,170079,546],{"emptyLinePlaceholder":545},[36,170081,170082,170084,170086,170089,170091,170094,170096,170098,170100,170102],{"class":38,"line":4185},[36,170083,167823],{"class":53},[36,170085,115],{"class":114},[36,170087,170088],{"class":53}," filter_students(students, ",[36,170090,169008],{"class":114},[36,170092,170093],{"class":53}," s: s[",[36,170095,153921],{"class":57},[36,170097,6974],{"class":53},[36,170099,1490],{"class":114},[36,170101,159959],{"class":49},[36,170103,61],{"class":53},[36,170105,170106,170109,170111,170113,170115,170117,170119,170121,170123,170125],{"class":38,"line":4191},[36,170107,170108],{"class":53},"excellent ",[36,170110,115],{"class":114},[36,170112,170088],{"class":53},[36,170114,169008],{"class":114},[36,170116,170093],{"class":53},[36,170118,153921],{"class":57},[36,170120,6974],{"class":53},[36,170122,1490],{"class":114},[36,170124,159910],{"class":49},[36,170126,61],{"class":53},[36,170128,170129,170132,170134,170136,170138,170140,170142,170144,170146,170148],{"class":38,"line":4212},[36,170130,170131],{"class":53},"under_age ",[36,170133,115],{"class":114},[36,170135,170088],{"class":53},[36,170137,169008],{"class":114},[36,170139,170093],{"class":53},[36,170141,71611],{"class":57},[36,170143,6974],{"class":53},[36,170145,1507],{"class":114},[36,170147,1394],{"class":49},[36,170149,61],{"class":53},[36,170151,170152],{"class":38,"line":4217},[36,170153,546],{"emptyLinePlaceholder":545},[36,170155,170156,170158],{"class":38,"line":4231},[36,170157,50],{"class":49},[36,170159,170160],{"class":53},"(passed)\n",[36,170162,170163,170165],{"class":38,"line":4236},[36,170164,50],{"class":49},[36,170166,170167],{"class":53},"(excellent)\n",[36,170169,170170,170172],{"class":38,"line":4264},[36,170171,50],{"class":49},[36,170173,170174],{"class":53},"(under_age)\n",[14,170176,170178],{"id":170177},"_715-易错点","7.15 易错点",[433,170180,170181,170184,170192,170197,170208],{},[436,170182,170183],{},"默认参数不要写可变对象。",[436,170185,170186,170188,170189,170191],{},[33,170187,168654],{}," 是元组，",[33,170190,168769],{}," 是字典。",[436,170193,170194,170196],{},[33,170195,169008],{}," 只适合简单表达式。",[436,170198,170199,1292,170201,170203,170204,170207],{},[33,170200,76529],{},[33,170202,82532],{}," 的结果是迭代器，常用 ",[33,170205,170206],{},"list()"," 转换查看。",[436,170209,170210],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170212,170214],{"id":170213},"_716-本章练习","7.16 本章练习",[433,170216,170217,170224,170230,170235,170240],{},[436,170218,170219,170220,170223],{},"写函数 ",[33,170221,170222],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[436,170225,170219,170226,170229],{},[33,170227,170228],{},"print_user(**kwargs)","，输出用户所有字段。",[436,170231,600,170232,170234],{},[33,170233,169008],{}," 对学生列表按年龄排序。",[436,170236,600,170237,170239],{},[33,170238,82532],{}," 找出成绩不及格的学生。",[436,170241,170242],{},"写一个装饰器，统计函数执行前后的提示信息。",[2602,170244,170245],{},"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":31,"searchDepth":46,"depth":46,"links":170247},[170248,170249,170250,170251,170252,170253,170257,170258,170259,170260,170265,170266,170267,170268,170269,170270],{"id":168106,"depth":46,"text":168107},{"id":168220,"depth":46,"text":168221},{"id":168309,"depth":46,"text":168310},{"id":168371,"depth":46,"text":168372},{"id":168517,"depth":46,"text":168518},{"id":168644,"depth":46,"text":168645,"children":170254},[170255,170256],{"id":168648,"depth":82,"text":168649},{"id":168763,"depth":82,"text":168764},{"id":168844,"depth":46,"text":168845},{"id":169002,"depth":46,"text":169003},{"id":169170,"depth":46,"text":169171},{"id":169252,"depth":46,"text":169253,"children":170261},[170262,170263,170264],{"id":169256,"depth":82,"text":169257},{"id":169327,"depth":82,"text":169328},{"id":169404,"depth":82,"text":169405},{"id":169529,"depth":46,"text":169530},{"id":169619,"depth":46,"text":169620},{"id":169750,"depth":46,"text":169751},{"id":169900,"depth":46,"text":169901},{"id":170177,"depth":46,"text":170178},{"id":170213,"depth":46,"text":170214},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168098,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170277,"title":170278,"body":170279,"description":2630,"extension":2631,"meta":172798,"navigation":545,"path":172799,"seo":172800,"stem":172801,"__hash__":172802},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170280,"toc":172773},[170281,170284,170288,170291,170294,170325,170329,170333,170336,170363,170367,170370,170421,170424,170439,170442,170477,170481,170483,170507,170510,170570,170574,170578,170581,170638,170641,170661,170665,170668,170731,170735,170738,170794,170801,170825,170829,170832,170895,170899,170904,170955,170958,170962,170967,171034,171037,171119,171123,171128,171179,171182,171186,171189,171192,171200,171203,171249,171252,171298,171302,171308,171352,171355,171401,171404,171444,171447,171508,171512,171515,171605,171608,171750,171753,171820,171824,171827,171830,171971,171974,172052,172055,172231,172235,172237,172248,172250,172449,172453,172697,172701,172735,172739,172770],[10,170282,170278],{"id":170283},"_8-文件操作",[14,170285,170287],{"id":170286},"_81-文件操作的意义","8.1 文件操作的意义",[19,170289,170290],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170292,170293],{},"常见文件类型：",[433,170295,170296,170302,170308,170314,170320],{},[436,170297,170298,170301],{},[33,170299,170300],{},".txt","：普通文本。",[436,170303,170304,170307],{},[33,170305,170306],{},".csv","：表格文本。",[436,170309,170310,170313],{},[33,170311,170312],{},".json","：结构化数据。",[436,170315,170316,170319],{},[33,170317,170318],{},".log","：日志文件。",[436,170321,170322,170324],{},[33,170323,148812],{},"：Python 源代码。",[14,170326,170328],{"id":170327},"_82-路径","8.2 路径",[997,170330,170332],{"id":170331},"_821-相对路径","8.2.1 相对路径",[19,170334,170335],{},"相对当前运行目录：",[26,170337,170339],{"className":28,"code":170338,"language":30,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,170340,170341],{"__ignoreMap":31},[36,170342,170343,170345,170347,170349,170351,170353,170355,170357,170359,170361],{"class":38,"line":39},[36,170344,89394],{"class":49},[36,170346,54],{"class":53},[36,170348,149248],{"class":57},[36,170350,14958],{"class":53},[36,170352,149253],{"class":57},[36,170354,14958],{"class":53},[36,170356,149258],{"class":1997},[36,170358,115],{"class":114},[36,170360,149263],{"class":57},[36,170362,61],{"class":53},[997,170364,170366],{"id":170365},"_822-绝对路径","8.2.2 绝对路径",[19,170368,170369],{},"从根目录或盘符开始：",[26,170371,170373],{"className":28,"code":170372,"language":30,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,170374,170375,170398],{"__ignoreMap":31},[36,170376,170377,170379,170381,170384,170386,170388,170390,170392,170394,170396],{"class":38,"line":39},[36,170378,89394],{"class":49},[36,170380,54],{"class":53},[36,170382,170383],{"class":57},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,170385,14958],{"class":53},[36,170387,149253],{"class":57},[36,170389,14958],{"class":53},[36,170391,149258],{"class":1997},[36,170393,115],{"class":114},[36,170395,149263],{"class":57},[36,170397,61],{"class":53},[36,170399,170400,170402,170404,170407,170409,170411,170413,170415,170417,170419],{"class":38,"line":46},[36,170401,89394],{"class":49},[36,170403,54],{"class":53},[36,170405,170406],{"class":57},"\"D:\u002Fdata\u002Fdata.txt\"",[36,170408,14958],{"class":53},[36,170410,149253],{"class":57},[36,170412,14958],{"class":53},[36,170414,149258],{"class":1997},[36,170416,115],{"class":114},[36,170418,149263],{"class":57},[36,170420,61],{"class":53},[19,170422,170423],{},"Windows 路径建议写成：",[26,170425,170427],{"className":28,"code":170426,"language":30,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,170428,170429],{"__ignoreMap":31},[36,170430,170431,170434,170436],{"class":38,"line":39},[36,170432,170433],{"class":53},"path ",[36,170435,115],{"class":114},[36,170437,170438],{"class":57}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170440,170441],{},"或原始字符串：",[26,170443,170445],{"className":28,"code":170444,"language":30,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,170446,170447],{"__ignoreMap":31},[36,170448,170449,170451,170453,170455,170457,170460,170463,170466,170468,170470,170472,170475],{"class":38,"line":39},[36,170450,170433],{"class":53},[36,170452,115],{"class":114},[36,170454,19639],{"class":114},[36,170456,1822],{"class":57},[36,170458,170459],{"class":50473},"D:",[36,170461,170462],{"class":49},"\\d",[36,170464,170465],{"class":50473},"ata",[36,170467,170462],{"class":49},[36,170469,170465],{"class":50473},[36,170471,3235],{"class":49},[36,170473,170474],{"class":50473},"txt",[36,170476,1620],{"class":57},[14,170478,170480],{"id":170479},"_83-open函数","8.3 open函数",[19,170482,7712],{},[26,170484,170486],{"className":28,"code":170485,"language":30,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,170487,170488],{"__ignoreMap":31},[36,170489,170490,170492,170494,170496,170499,170501,170503,170505],{"class":38,"line":39},[36,170491,47854],{"class":1997},[36,170493,498],{"class":114},[36,170495,149243],{"class":49},[36,170497,170498],{"class":53},"(文件路径, 打开模式, ",[36,170500,149258],{"class":1997},[36,170502,115],{"class":114},[36,170504,149263],{"class":57},[36,170506,61],{"class":53},[19,170508,170509],{},"常见模式：",[206,170511,170512,170521],{},[209,170513,170514],{},[212,170515,170516,170519],{},[215,170517,170518],{},"模式",[215,170520,223],{},[225,170522,170523,170532,170541,170550,170560],{},[212,170524,170525,170529],{},[230,170526,170527],{},[33,170528,3346],{},[230,170530,170531],{},"只读，文件不存在会报错",[212,170533,170534,170538],{},[230,170535,170536],{},[33,170537,3471],{},[230,170539,170540],{},"只写，文件不存在会创建，存在会清空",[212,170542,170543,170547],{},[230,170544,170545],{},[33,170546,2923],{},[230,170548,170549],{},"追加，文件不存在会创建",[212,170551,170552,170557],{},[230,170553,170554],{},[33,170555,170556],{},"rb",[230,170558,170559],{},"二进制只读",[212,170561,170562,170567],{},[230,170563,170564],{},[33,170565,170566],{},"wb",[230,170568,170569],{},"二进制只写",[14,170571,170573],{"id":170572},"_84-读取文件","8.4 读取文件",[997,170575,170577],{"id":170576},"_841-read","8.4.1 read",[19,170579,170580],{},"一次读取全部内容：",[26,170582,170584],{"className":28,"code":170583,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,170585,170586,170612,170624,170631],{"__ignoreMap":31},[36,170587,170588,170590,170592,170594,170596,170598,170600,170602,170604,170606,170608,170610],{"class":38,"line":39},[36,170589,47854],{"class":1997},[36,170591,498],{"class":114},[36,170593,149243],{"class":49},[36,170595,54],{"class":53},[36,170597,149248],{"class":57},[36,170599,14958],{"class":53},[36,170601,149253],{"class":57},[36,170603,14958],{"class":53},[36,170605,149258],{"class":1997},[36,170607,115],{"class":114},[36,170609,149263],{"class":57},[36,170611,61],{"class":53},[36,170613,170614,170617,170619,170621],{"class":38,"line":46},[36,170615,170616],{"class":53},"content ",[36,170618,115],{"class":114},[36,170620,150605],{"class":1997},[36,170622,170623],{"class":53},".read()\n",[36,170625,170626,170628],{"class":38,"line":82},[36,170627,50],{"class":49},[36,170629,170630],{"class":53},"(content)\n",[36,170632,170633,170635],{"class":38,"line":88},[36,170634,47854],{"class":1997},[36,170636,170637],{"class":53},".close()\n",[19,170639,170640],{},"可以指定读取字符数：",[26,170642,170644],{"className":28,"code":170643,"language":30,"meta":31,"style":31},"content = file.read(10)\n",[33,170645,170646],{"__ignoreMap":31},[36,170647,170648,170650,170652,170654,170657,170659],{"class":38,"line":39},[36,170649,170616],{"class":53},[36,170651,115],{"class":114},[36,170653,150605],{"class":1997},[36,170655,170656],{"class":53},".read(",[36,170658,1317],{"class":49},[36,170660,61],{"class":53},[997,170662,170664],{"id":170663},"_842-readline","8.4.2 readline",[19,170666,170667],{},"一次读取一行：",[26,170669,170671],{"className":28,"code":170670,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,170672,170673,170699,170703,170714,170721,170725],{"__ignoreMap":31},[36,170674,170675,170677,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697],{"class":38,"line":39},[36,170676,47854],{"class":1997},[36,170678,498],{"class":114},[36,170680,149243],{"class":49},[36,170682,54],{"class":53},[36,170684,149248],{"class":57},[36,170686,14958],{"class":53},[36,170688,149253],{"class":57},[36,170690,14958],{"class":53},[36,170692,149258],{"class":1997},[36,170694,115],{"class":114},[36,170696,149263],{"class":57},[36,170698,61],{"class":53},[36,170700,170701],{"class":38,"line":46},[36,170702,546],{"emptyLinePlaceholder":545},[36,170704,170705,170707,170709,170711],{"class":38,"line":82},[36,170706,149704],{"class":53},[36,170708,115],{"class":114},[36,170710,150605],{"class":1997},[36,170712,170713],{"class":53},".readline()\n",[36,170715,170716,170718],{"class":38,"line":88},[36,170717,50],{"class":49},[36,170719,170720],{"class":53},"(line)\n",[36,170722,170723],{"class":38,"line":195},[36,170724,546],{"emptyLinePlaceholder":545},[36,170726,170727,170729],{"class":38,"line":1517},[36,170728,47854],{"class":1997},[36,170730,170637],{"class":53},[997,170732,170734],{"id":170733},"_843-readlines","8.4.3 readlines",[19,170736,170737],{},"读取所有行，返回列表：",[26,170739,170741],{"className":28,"code":170740,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,170742,170743,170769,170781,170788],{"__ignoreMap":31},[36,170744,170745,170747,170749,170751,170753,170755,170757,170759,170761,170763,170765,170767],{"class":38,"line":39},[36,170746,47854],{"class":1997},[36,170748,498],{"class":114},[36,170750,149243],{"class":49},[36,170752,54],{"class":53},[36,170754,149248],{"class":57},[36,170756,14958],{"class":53},[36,170758,149253],{"class":57},[36,170760,14958],{"class":53},[36,170762,149258],{"class":1997},[36,170764,115],{"class":114},[36,170766,149263],{"class":57},[36,170768,61],{"class":53},[36,170770,170771,170774,170776,170778],{"class":38,"line":46},[36,170772,170773],{"class":53},"lines ",[36,170775,115],{"class":114},[36,170777,150605],{"class":1997},[36,170779,170780],{"class":53},".readlines()\n",[36,170782,170783,170785],{"class":38,"line":82},[36,170784,50],{"class":49},[36,170786,170787],{"class":53},"(lines)\n",[36,170789,170790,170792],{"class":38,"line":88},[36,170791,47854],{"class":1997},[36,170793,170637],{"class":53},[19,170795,170796,170797,170800],{},"每一行通常带有换行符，可以用 ",[33,170798,170799],{},"strip()"," 去掉：",[26,170802,170804],{"className":28,"code":170803,"language":30,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,170805,170806,170818],{"__ignoreMap":31},[36,170807,170808,170810,170813,170815],{"class":38,"line":39},[36,170809,5556],{"class":114},[36,170811,170812],{"class":53}," line ",[36,170814,28556],{"class":114},[36,170816,170817],{"class":53}," lines:\n",[36,170819,170820,170822],{"class":38,"line":46},[36,170821,33803],{"class":49},[36,170823,170824],{"class":53},"(line.strip())\n",[997,170826,170828],{"id":170827},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170830,170831],{},"推荐读取大文件时使用：",[26,170833,170835],{"className":28,"code":170834,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,170836,170837,170863,170867,170879,170885,170889],{"__ignoreMap":31},[36,170838,170839,170841,170843,170845,170847,170849,170851,170853,170855,170857,170859,170861],{"class":38,"line":39},[36,170840,47854],{"class":1997},[36,170842,498],{"class":114},[36,170844,149243],{"class":49},[36,170846,54],{"class":53},[36,170848,149248],{"class":57},[36,170850,14958],{"class":53},[36,170852,149253],{"class":57},[36,170854,14958],{"class":53},[36,170856,149258],{"class":1997},[36,170858,115],{"class":114},[36,170860,149263],{"class":57},[36,170862,61],{"class":53},[36,170864,170865],{"class":38,"line":46},[36,170866,546],{"emptyLinePlaceholder":545},[36,170868,170869,170871,170873,170875,170877],{"class":38,"line":82},[36,170870,5556],{"class":114},[36,170872,170812],{"class":53},[36,170874,28556],{"class":114},[36,170876,150605],{"class":1997},[36,170878,6270],{"class":53},[36,170880,170881,170883],{"class":38,"line":88},[36,170882,33803],{"class":49},[36,170884,170824],{"class":53},[36,170886,170887],{"class":38,"line":195},[36,170888,546],{"emptyLinePlaceholder":545},[36,170890,170891,170893],{"class":38,"line":1517},[36,170892,47854],{"class":1997},[36,170894,170637],{"class":53},[14,170896,170898],{"id":170897},"_85-with语句","8.5 with语句",[19,170900,170901,170903],{},[33,170902,110303],{}," 会自动关闭文件，推荐使用。",[26,170905,170907],{"className":28,"code":170906,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,170908,170909,170939,170949],{"__ignoreMap":31},[36,170910,170911,170913,170915,170917,170919,170921,170923,170925,170927,170929,170931,170933,170935,170937],{"class":38,"line":39},[36,170912,110303],{"class":114},[36,170914,149243],{"class":49},[36,170916,54],{"class":53},[36,170918,149248],{"class":57},[36,170920,14958],{"class":53},[36,170922,149253],{"class":57},[36,170924,14958],{"class":53},[36,170926,149258],{"class":1997},[36,170928,115],{"class":114},[36,170930,149263],{"class":57},[36,170932,16236],{"class":53},[36,170934,33887],{"class":114},[36,170936,150605],{"class":1997},[36,170938,6270],{"class":53},[36,170940,170941,170943,170945,170947],{"class":38,"line":46},[36,170942,149275],{"class":53},[36,170944,115],{"class":114},[36,170946,150605],{"class":1997},[36,170948,170623],{"class":53},[36,170950,170951,170953],{"class":38,"line":82},[36,170952,33803],{"class":49},[36,170954,170630],{"class":53},[19,170956,170957],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170959,170961],{"id":170960},"_86-写入文件","8.6 写入文件",[19,170963,170964,170966],{},[33,170965,3471],{}," 模式会清空原文件。",[26,170968,170970],{"className":28,"code":170969,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,170971,170972,171002,171019],{"__ignoreMap":31},[36,170973,170974,170976,170978,170980,170982,170984,170986,170988,170990,170992,170994,170996,170998,171000],{"class":38,"line":39},[36,170975,110303],{"class":114},[36,170977,149243],{"class":49},[36,170979,54],{"class":53},[36,170981,149248],{"class":57},[36,170983,14958],{"class":53},[36,170985,154425],{"class":57},[36,170987,14958],{"class":53},[36,170989,149258],{"class":1997},[36,170991,115],{"class":114},[36,170993,149263],{"class":57},[36,170995,16236],{"class":53},[36,170997,33887],{"class":114},[36,170999,150605],{"class":1997},[36,171001,6270],{"class":53},[36,171003,171004,171007,171010,171013,171015,171017],{"class":38,"line":46},[36,171005,171006],{"class":1997},"    file",[36,171008,171009],{"class":53},".write(",[36,171011,171012],{"class":57},"\"hello",[36,171014,1644],{"class":49},[36,171016,1822],{"class":57},[36,171018,61],{"class":53},[36,171020,171021,171023,171025,171028,171030,171032],{"class":38,"line":82},[36,171022,171006],{"class":1997},[36,171024,171009],{"class":53},[36,171026,171027],{"class":57},"\"python",[36,171029,1644],{"class":49},[36,171031,1822],{"class":57},[36,171033,61],{"class":53},[19,171035,171036],{},"写入多行：",[26,171038,171040],{"className":28,"code":171039,"language":30,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,171041,171042,171077,171081,171112],{"__ignoreMap":31},[36,171043,171044,171046,171048,171050,171053,171055,171057,171059,171062,171064,171066,171068,171071,171073,171075],{"class":38,"line":39},[36,171045,170773],{"class":53},[36,171047,115],{"class":114},[36,171049,54720],{"class":53},[36,171051,171052],{"class":57},"\"小明,18",[36,171054,1644],{"class":49},[36,171056,1822],{"class":57},[36,171058,14958],{"class":53},[36,171060,171061],{"class":57},"\"小红,17",[36,171063,1644],{"class":49},[36,171065,1822],{"class":57},[36,171067,14958],{"class":53},[36,171069,171070],{"class":57},"\"小刚,19",[36,171072,1644],{"class":49},[36,171074,1822],{"class":57},[36,171076,35748],{"class":53},[36,171078,171079],{"class":38,"line":46},[36,171080,546],{"emptyLinePlaceholder":545},[36,171082,171083,171085,171087,171089,171092,171094,171096,171098,171100,171102,171104,171106,171108,171110],{"class":38,"line":82},[36,171084,110303],{"class":114},[36,171086,149243],{"class":49},[36,171088,54],{"class":53},[36,171090,171091],{"class":57},"\"students.txt\"",[36,171093,14958],{"class":53},[36,171095,154425],{"class":57},[36,171097,14958],{"class":53},[36,171099,149258],{"class":1997},[36,171101,115],{"class":114},[36,171103,149263],{"class":57},[36,171105,16236],{"class":53},[36,171107,33887],{"class":114},[36,171109,150605],{"class":1997},[36,171111,6270],{"class":53},[36,171113,171114,171116],{"class":38,"line":88},[36,171115,171006],{"class":1997},[36,171117,171118],{"class":53},".writelines(lines)\n",[14,171120,171122],{"id":171121},"_87-追加文件","8.7 追加文件",[19,171124,171125,171127],{},[33,171126,2923],{}," 模式不会清空原内容，而是在末尾追加。",[26,171129,171131],{"className":28,"code":171130,"language":30,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,171132,171133,171164],{"__ignoreMap":31},[36,171134,171135,171137,171139,171141,171144,171146,171148,171150,171152,171154,171156,171158,171160,171162],{"class":38,"line":39},[36,171136,110303],{"class":114},[36,171138,149243],{"class":49},[36,171140,54],{"class":53},[36,171142,171143],{"class":57},"\"log.txt\"",[36,171145,14958],{"class":53},[36,171147,167447],{"class":57},[36,171149,14958],{"class":53},[36,171151,149258],{"class":1997},[36,171153,115],{"class":114},[36,171155,149263],{"class":57},[36,171157,16236],{"class":53},[36,171159,33887],{"class":114},[36,171161,150605],{"class":1997},[36,171163,6270],{"class":53},[36,171165,171166,171168,171170,171173,171175,171177],{"class":38,"line":46},[36,171167,171006],{"class":1997},[36,171169,171009],{"class":53},[36,171171,171172],{"class":57},"\"程序启动",[36,171174,1644],{"class":49},[36,171176,1822],{"class":57},[36,171178,61],{"class":53},[19,171180,171181],{},"日志类文件常用追加模式。",[14,171183,171185],{"id":171184},"_88-文件编码","8.8 文件编码",[19,171187,171188],{},"编码决定文字如何保存为字节。",[19,171190,171191],{},"常见编码：",[433,171193,171194,171197],{},[436,171195,171196],{},"UTF-8：推荐。",[436,171198,171199],{},"GBK：部分 Windows 中文文件常见。",[19,171201,171202],{},"读取文件乱码时，可以尝试：",[26,171204,171206],{"className":28,"code":171205,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,171207,171208,171239],{"__ignoreMap":31},[36,171209,171210,171212,171214,171216,171218,171220,171222,171224,171226,171228,171231,171233,171235,171237],{"class":38,"line":39},[36,171211,110303],{"class":114},[36,171213,149243],{"class":49},[36,171215,54],{"class":53},[36,171217,149248],{"class":57},[36,171219,14958],{"class":53},[36,171221,149253],{"class":57},[36,171223,14958],{"class":53},[36,171225,149258],{"class":1997},[36,171227,115],{"class":114},[36,171229,171230],{"class":57},"\"gbk\"",[36,171232,16236],{"class":53},[36,171234,33887],{"class":114},[36,171236,150605],{"class":1997},[36,171238,6270],{"class":53},[36,171240,171241,171243,171245,171247],{"class":38,"line":46},[36,171242,149275],{"class":53},[36,171244,115],{"class":114},[36,171246,150605],{"class":1997},[36,171248,170623],{"class":53},[19,171250,171251],{},"写文件时建议统一 UTF-8：",[26,171253,171255],{"className":28,"code":171254,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,171256,171257,171287],{"__ignoreMap":31},[36,171258,171259,171261,171263,171265,171267,171269,171271,171273,171275,171277,171279,171281,171283,171285],{"class":38,"line":39},[36,171260,110303],{"class":114},[36,171262,149243],{"class":49},[36,171264,54],{"class":53},[36,171266,149248],{"class":57},[36,171268,14958],{"class":53},[36,171270,154425],{"class":57},[36,171272,14958],{"class":53},[36,171274,149258],{"class":1997},[36,171276,115],{"class":114},[36,171278,149263],{"class":57},[36,171280,16236],{"class":53},[36,171282,33887],{"class":114},[36,171284,150605],{"class":1997},[36,171286,6270],{"class":53},[36,171288,171289,171291,171293,171296],{"class":38,"line":46},[36,171290,171006],{"class":1997},[36,171292,171009],{"class":53},[36,171294,171295],{"class":57},"\"中文内容\"",[36,171297,61],{"class":53},[14,171299,171301],{"id":171300},"_89-pathlib","8.9 pathlib",[19,171303,171304,171307],{},[33,171305,171306],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,171309,171311],{"className":28,"code":171310,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,171312,171313,171323,171327,171345],{"__ignoreMap":31},[36,171314,171315,171317,171319,171321],{"class":38,"line":39},[36,171316,33241],{"class":114},[36,171318,110781],{"class":53},[36,171320,537],{"class":114},[36,171322,110786],{"class":53},[36,171324,171325],{"class":38,"line":46},[36,171326,546],{"emptyLinePlaceholder":545},[36,171328,171329,171331,171333,171335,171338,171340,171342],{"class":38,"line":82},[36,171330,170433],{"class":53},[36,171332,115],{"class":114},[36,171334,111015],{"class":53},[36,171336,171337],{"class":57},"\"data\"",[36,171339,16236],{"class":53},[36,171341,1065],{"class":114},[36,171343,171344],{"class":57}," \"students.txt\"\n",[36,171346,171347,171349],{"class":38,"line":88},[36,171348,50],{"class":49},[36,171350,171351],{"class":53},"(path)\n",[19,171353,171354],{},"创建目录：",[26,171356,171358],{"className":28,"code":171357,"language":30,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,171359,171360,171370,171374,171387],{"__ignoreMap":31},[36,171361,171362,171364,171366,171368],{"class":38,"line":39},[36,171363,33241],{"class":114},[36,171365,110781],{"class":53},[36,171367,537],{"class":114},[36,171369,110786],{"class":53},[36,171371,171372],{"class":38,"line":46},[36,171373,546],{"emptyLinePlaceholder":545},[36,171375,171376,171379,171381,171383,171385],{"class":38,"line":82},[36,171377,171378],{"class":53},"data_dir ",[36,171380,115],{"class":114},[36,171382,111015],{"class":53},[36,171384,171337],{"class":57},[36,171386,61],{"class":53},[36,171388,171389,171392,171395,171397,171399],{"class":38,"line":88},[36,171390,171391],{"class":53},"data_dir.mkdir(",[36,171393,171394],{"class":1997},"exist_ok",[36,171396,115],{"class":114},[36,171398,189],{"class":49},[36,171400,61],{"class":53},[19,171402,171403],{},"判断文件是否存在：",[26,171405,171407],{"className":28,"code":171406,"language":30,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,171408,171409,171422,171426,171433],{"__ignoreMap":31},[36,171410,171411,171413,171415,171417,171420],{"class":38,"line":39},[36,171412,170433],{"class":53},[36,171414,115],{"class":114},[36,171416,111015],{"class":53},[36,171418,171419],{"class":57},"\"data\u002Fstudents.txt\"",[36,171421,61],{"class":53},[36,171423,171424],{"class":38,"line":46},[36,171425,546],{"emptyLinePlaceholder":545},[36,171427,171428,171430],{"class":38,"line":82},[36,171429,4069],{"class":114},[36,171431,171432],{"class":53}," path.exists():\n",[36,171434,171435,171437,171439,171442],{"class":38,"line":88},[36,171436,33803],{"class":49},[36,171438,54],{"class":53},[36,171440,171441],{"class":57},"\"文件存在\"",[36,171443,61],{"class":53},[19,171445,171446],{},"读写文本：",[26,171448,171450],{"className":28,"code":171449,"language":30,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,171451,171452,171464,171468,171485,171502],{"__ignoreMap":31},[36,171453,171454,171456,171458,171460,171462],{"class":38,"line":39},[36,171455,170433],{"class":53},[36,171457,115],{"class":114},[36,171459,111015],{"class":53},[36,171461,149248],{"class":57},[36,171463,61],{"class":53},[36,171465,171466],{"class":38,"line":46},[36,171467,546],{"emptyLinePlaceholder":545},[36,171469,171470,171473,171475,171477,171479,171481,171483],{"class":38,"line":82},[36,171471,171472],{"class":53},"path.write_text(",[36,171474,148336],{"class":57},[36,171476,14958],{"class":53},[36,171478,149258],{"class":1997},[36,171480,115],{"class":114},[36,171482,149263],{"class":57},[36,171484,61],{"class":53},[36,171486,171487,171489,171491,171494,171496,171498,171500],{"class":38,"line":88},[36,171488,170616],{"class":53},[36,171490,115],{"class":114},[36,171492,171493],{"class":53}," path.read_text(",[36,171495,149258],{"class":1997},[36,171497,115],{"class":114},[36,171499,149263],{"class":57},[36,171501,61],{"class":53},[36,171503,171504,171506],{"class":38,"line":195},[36,171505,50],{"class":49},[36,171507,170630],{"class":53},[14,171509,171511],{"id":171510},"_810-json文件","8.10 JSON文件",[19,171513,171514],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,171516,171518],{"className":28,"code":171517,"language":30,"meta":31,"style":31},"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",[33,171519,171520,171526,171530,171538,171548,171558,171566,171570,171574,171599],{"__ignoreMap":31},[36,171521,171522,171524],{"class":38,"line":39},[36,171523,537],{"class":114},[36,171525,149543],{"class":53},[36,171527,171528],{"class":38,"line":46},[36,171529,546],{"emptyLinePlaceholder":545},[36,171531,171532,171534,171536],{"class":38,"line":82},[36,171533,151931],{"class":53},[36,171535,115],{"class":114},[36,171537,18091],{"class":53},[36,171539,171540,171542,171544,171546],{"class":38,"line":88},[36,171541,149472],{"class":57},[36,171543,53931],{"class":53},[36,171545,152338],{"class":57},[36,171547,33970],{"class":53},[36,171549,171550,171552,171554,171556],{"class":38,"line":195},[36,171551,166659],{"class":57},[36,171553,53931],{"class":53},[36,171555,3326],{"class":49},[36,171557,33970],{"class":53},[36,171559,171560,171562,171564],{"class":38,"line":1517},[36,171561,166670],{"class":57},[36,171563,53931],{"class":53},[36,171565,166675],{"class":49},[36,171567,171568],{"class":38,"line":2421},[36,171569,4103],{"class":53},[36,171571,171572],{"class":38,"line":2446},[36,171573,546],{"emptyLinePlaceholder":545},[36,171575,171576,171578,171580,171583,171585,171587,171589,171591,171593,171595,171597],{"class":38,"line":2469},[36,171577,1561],{"class":53},[36,171579,115],{"class":114},[36,171581,171582],{"class":53}," json.dumps(student, ",[36,171584,149589],{"class":1997},[36,171586,115],{"class":114},[36,171588,276],{"class":49},[36,171590,14958],{"class":53},[36,171592,154461],{"class":1997},[36,171594,115],{"class":114},[36,171596,1188],{"class":49},[36,171598,61],{"class":53},[36,171600,171601,171603],{"class":38,"line":2492},[36,171602,50],{"class":49},[36,171604,166193],{"class":53},[19,171606,171607],{},"写入 JSON 文件：",[26,171609,171611],{"className":28,"code":171610,"language":30,"meta":31,"style":31},"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",[33,171612,171613,171619,171623,171631,171659,171687,171691,171695,171725],{"__ignoreMap":31},[36,171614,171615,171617],{"class":38,"line":39},[36,171616,537],{"class":114},[36,171618,149543],{"class":53},[36,171620,171621],{"class":38,"line":46},[36,171622,546],{"emptyLinePlaceholder":545},[36,171624,171625,171627,171629],{"class":38,"line":82},[36,171626,161838],{"class":53},[36,171628,115],{"class":114},[36,171630,57938],{"class":53},[36,171632,171633,171635,171637,171639,171641,171643,171645,171647,171649,171651,171653,171655,171657],{"class":38,"line":88},[36,171634,150837],{"class":53},[36,171636,65167],{"class":57},[36,171638,53931],{"class":53},[36,171640,152338],{"class":57},[36,171642,14958],{"class":53},[36,171644,71611],{"class":57},[36,171646,53931],{"class":53},[36,171648,3326],{"class":49},[36,171650,14958],{"class":53},[36,171652,153921],{"class":57},[36,171654,53931],{"class":53},[36,171656,3662],{"class":49},[36,171658,7461],{"class":53},[36,171660,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679,171681,171683,171685],{"class":38,"line":195},[36,171662,150837],{"class":53},[36,171664,65167],{"class":57},[36,171666,53931],{"class":53},[36,171668,153385],{"class":57},[36,171670,14958],{"class":53},[36,171672,71611],{"class":57},[36,171674,53931],{"class":53},[36,171676,3301],{"class":49},[36,171678,14958],{"class":53},[36,171680,153921],{"class":57},[36,171682,53931],{"class":53},[36,171684,3487],{"class":49},[36,171686,7461],{"class":53},[36,171688,171689],{"class":38,"line":1517},[36,171690,35748],{"class":53},[36,171692,171693],{"class":38,"line":2421},[36,171694,546],{"emptyLinePlaceholder":545},[36,171696,171697,171699,171701,171703,171705,171707,171709,171711,171713,171715,171717,171719,171721,171723],{"class":38,"line":2446},[36,171698,110303],{"class":114},[36,171700,149243],{"class":49},[36,171702,54],{"class":53},[36,171704,154280],{"class":57},[36,171706,14958],{"class":53},[36,171708,154425],{"class":57},[36,171710,14958],{"class":53},[36,171712,149258],{"class":1997},[36,171714,115],{"class":114},[36,171716,149263],{"class":57},[36,171718,16236],{"class":53},[36,171720,33887],{"class":114},[36,171722,150605],{"class":1997},[36,171724,6270],{"class":53},[36,171726,171727,171730,171732,171734,171736,171738,171740,171742,171744,171746,171748],{"class":38,"line":2469},[36,171728,171729],{"class":53},"    json.dump(students, ",[36,171731,47854],{"class":1997},[36,171733,14958],{"class":53},[36,171735,149589],{"class":1997},[36,171737,115],{"class":114},[36,171739,276],{"class":49},[36,171741,14958],{"class":53},[36,171743,154461],{"class":1997},[36,171745,115],{"class":114},[36,171747,1188],{"class":49},[36,171749,61],{"class":53},[19,171751,171752],{},"读取 JSON 文件：",[26,171754,171756],{"className":28,"code":171755,"language":30,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,171757,171758,171764,171768,171798,171810,171814],{"__ignoreMap":31},[36,171759,171760,171762],{"class":38,"line":39},[36,171761,537],{"class":114},[36,171763,149543],{"class":53},[36,171765,171766],{"class":38,"line":46},[36,171767,546],{"emptyLinePlaceholder":545},[36,171769,171770,171772,171774,171776,171778,171780,171782,171784,171786,171788,171790,171792,171794,171796],{"class":38,"line":82},[36,171771,110303],{"class":114},[36,171773,149243],{"class":49},[36,171775,54],{"class":53},[36,171777,154280],{"class":57},[36,171779,14958],{"class":53},[36,171781,149253],{"class":57},[36,171783,14958],{"class":53},[36,171785,149258],{"class":1997},[36,171787,115],{"class":114},[36,171789,149263],{"class":57},[36,171791,16236],{"class":53},[36,171793,33887],{"class":114},[36,171795,150605],{"class":1997},[36,171797,6270],{"class":53},[36,171799,171800,171802,171804,171806,171808],{"class":38,"line":88},[36,171801,155484],{"class":53},[36,171803,115],{"class":114},[36,171805,150616],{"class":53},[36,171807,47854],{"class":1997},[36,171809,61],{"class":53},[36,171811,171812],{"class":38,"line":195},[36,171813,546],{"emptyLinePlaceholder":545},[36,171815,171816,171818],{"class":38,"line":1517},[36,171817,50],{"class":49},[36,171819,167117],{"class":53},[14,171821,171823],{"id":171822},"_811-csv文件","8.11 CSV文件",[19,171825,171826],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171828,171829],{},"写入 CSV：",[26,171831,171833],{"className":28,"code":171832,"language":30,"meta":31,"style":31},"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",[33,171834,171835,171842,171846,171854,171872,171888,171904,171908,171912,171952,171966],{"__ignoreMap":31},[36,171836,171837,171839],{"class":38,"line":39},[36,171838,537],{"class":114},[36,171840,171841],{"class":53}," csv\n",[36,171843,171844],{"class":38,"line":46},[36,171845,546],{"emptyLinePlaceholder":545},[36,171847,171848,171850,171852],{"class":38,"line":82},[36,171849,161838],{"class":53},[36,171851,115],{"class":114},[36,171853,57938],{"class":53},[36,171855,171856,171859,171861,171863,171865,171867,171870],{"class":38,"line":88},[36,171857,171858],{"class":53},"    [",[36,171860,75585],{"class":57},[36,171862,14958],{"class":53},[36,171864,75618],{"class":57},[36,171866,14958],{"class":53},[36,171868,171869],{"class":57},"\"成绩\"",[36,171871,90315],{"class":53},[36,171873,171874,171876,171878,171880,171882,171884,171886],{"class":38,"line":195},[36,171875,171858],{"class":53},[36,171877,152338],{"class":57},[36,171879,14958],{"class":53},[36,171881,3326],{"class":49},[36,171883,14958],{"class":53},[36,171885,3662],{"class":49},[36,171887,90315],{"class":53},[36,171889,171890,171892,171894,171896,171898,171900,171902],{"class":38,"line":1517},[36,171891,171858],{"class":53},[36,171893,153385],{"class":57},[36,171895,14958],{"class":53},[36,171897,3301],{"class":49},[36,171899,14958],{"class":53},[36,171901,3487],{"class":49},[36,171903,90315],{"class":53},[36,171905,171906],{"class":38,"line":2421},[36,171907,35748],{"class":53},[36,171909,171910],{"class":38,"line":2446},[36,171911,546],{"emptyLinePlaceholder":545},[36,171913,171914,171916,171918,171920,171923,171925,171927,171929,171931,171933,171935,171937,171940,171942,171944,171946,171948,171950],{"class":38,"line":2469},[36,171915,110303],{"class":114},[36,171917,149243],{"class":49},[36,171919,54],{"class":53},[36,171921,171922],{"class":57},"\"students.csv\"",[36,171924,14958],{"class":53},[36,171926,154425],{"class":57},[36,171928,14958],{"class":53},[36,171930,149258],{"class":1997},[36,171932,115],{"class":114},[36,171934,149263],{"class":57},[36,171936,14958],{"class":53},[36,171938,171939],{"class":1997},"newline",[36,171941,115],{"class":114},[36,171943,10179],{"class":57},[36,171945,16236],{"class":53},[36,171947,33887],{"class":114},[36,171949,150605],{"class":1997},[36,171951,6270],{"class":53},[36,171953,171954,171957,171959,171962,171964],{"class":38,"line":2492},[36,171955,171956],{"class":53},"    writer ",[36,171958,115],{"class":114},[36,171960,171961],{"class":53}," csv.writer(",[36,171963,47854],{"class":1997},[36,171965,61],{"class":53},[36,171967,171968],{"class":38,"line":4150},[36,171969,171970],{"class":53},"    writer.writerows(students)\n",[19,171972,171973],{},"读取 CSV：",[26,171975,171977],{"className":28,"code":171976,"language":30,"meta":31,"style":31},"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",[33,171978,171979,171985,171989,172019,172033,172045],{"__ignoreMap":31},[36,171980,171981,171983],{"class":38,"line":39},[36,171982,537],{"class":114},[36,171984,171841],{"class":53},[36,171986,171987],{"class":38,"line":46},[36,171988,546],{"emptyLinePlaceholder":545},[36,171990,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011,172013,172015,172017],{"class":38,"line":82},[36,171992,110303],{"class":114},[36,171994,149243],{"class":49},[36,171996,54],{"class":53},[36,171998,171922],{"class":57},[36,172000,14958],{"class":53},[36,172002,149253],{"class":57},[36,172004,14958],{"class":53},[36,172006,149258],{"class":1997},[36,172008,115],{"class":114},[36,172010,149263],{"class":57},[36,172012,16236],{"class":53},[36,172014,33887],{"class":114},[36,172016,150605],{"class":1997},[36,172018,6270],{"class":53},[36,172020,172021,172024,172026,172029,172031],{"class":38,"line":88},[36,172022,172023],{"class":53},"    reader ",[36,172025,115],{"class":114},[36,172027,172028],{"class":53}," csv.reader(",[36,172030,47854],{"class":1997},[36,172032,61],{"class":53},[36,172034,172035,172037,172040,172042],{"class":38,"line":195},[36,172036,5732],{"class":114},[36,172038,172039],{"class":53}," row ",[36,172041,28556],{"class":114},[36,172043,172044],{"class":53}," reader:\n",[36,172046,172047,172049],{"class":38,"line":1517},[36,172048,34954],{"class":49},[36,172050,172051],{"class":53},"(row)\n",[19,172053,172054],{},"使用字典写入：",[26,172056,172058],{"className":28,"code":172057,"language":30,"meta":31,"style":31},"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",[33,172059,172060,172066,172070,172078,172106,172134,172138,172142,172180,172201,172222,172227],{"__ignoreMap":31},[36,172061,172062,172064],{"class":38,"line":39},[36,172063,537],{"class":114},[36,172065,171841],{"class":53},[36,172067,172068],{"class":38,"line":46},[36,172069,546],{"emptyLinePlaceholder":545},[36,172071,172072,172074,172076],{"class":38,"line":82},[36,172073,161838],{"class":53},[36,172075,115],{"class":114},[36,172077,57938],{"class":53},[36,172079,172080,172082,172084,172086,172088,172090,172092,172094,172096,172098,172100,172102,172104],{"class":38,"line":88},[36,172081,150837],{"class":53},[36,172083,65167],{"class":57},[36,172085,53931],{"class":53},[36,172087,152338],{"class":57},[36,172089,14958],{"class":53},[36,172091,71611],{"class":57},[36,172093,53931],{"class":53},[36,172095,3326],{"class":49},[36,172097,14958],{"class":53},[36,172099,153921],{"class":57},[36,172101,53931],{"class":53},[36,172103,3662],{"class":49},[36,172105,7461],{"class":53},[36,172107,172108,172110,172112,172114,172116,172118,172120,172122,172124,172126,172128,172130,172132],{"class":38,"line":195},[36,172109,150837],{"class":53},[36,172111,65167],{"class":57},[36,172113,53931],{"class":53},[36,172115,153385],{"class":57},[36,172117,14958],{"class":53},[36,172119,71611],{"class":57},[36,172121,53931],{"class":53},[36,172123,3301],{"class":49},[36,172125,14958],{"class":53},[36,172127,153921],{"class":57},[36,172129,53931],{"class":53},[36,172131,3487],{"class":49},[36,172133,7461],{"class":53},[36,172135,172136],{"class":38,"line":1517},[36,172137,35748],{"class":53},[36,172139,172140],{"class":38,"line":2421},[36,172141,546],{"emptyLinePlaceholder":545},[36,172143,172144,172146,172148,172150,172152,172154,172156,172158,172160,172162,172164,172166,172168,172170,172172,172174,172176,172178],{"class":38,"line":2446},[36,172145,110303],{"class":114},[36,172147,149243],{"class":49},[36,172149,54],{"class":53},[36,172151,171922],{"class":57},[36,172153,14958],{"class":53},[36,172155,154425],{"class":57},[36,172157,14958],{"class":53},[36,172159,149258],{"class":1997},[36,172161,115],{"class":114},[36,172163,149263],{"class":57},[36,172165,14958],{"class":53},[36,172167,171939],{"class":1997},[36,172169,115],{"class":114},[36,172171,10179],{"class":57},[36,172173,16236],{"class":53},[36,172175,33887],{"class":114},[36,172177,150605],{"class":1997},[36,172179,6270],{"class":53},[36,172181,172182,172185,172187,172189,172191,172193,172195,172197,172199],{"class":38,"line":2469},[36,172183,172184],{"class":53},"    fieldnames ",[36,172186,115],{"class":114},[36,172188,54720],{"class":53},[36,172190,65167],{"class":57},[36,172192,14958],{"class":53},[36,172194,71611],{"class":57},[36,172196,14958],{"class":53},[36,172198,153921],{"class":57},[36,172200,35748],{"class":53},[36,172202,172203,172205,172207,172210,172212,172214,172217,172219],{"class":38,"line":2492},[36,172204,171956],{"class":53},[36,172206,115],{"class":114},[36,172208,172209],{"class":53}," csv.DictWriter(",[36,172211,47854],{"class":1997},[36,172213,14958],{"class":53},[36,172215,172216],{"class":1997},"fieldnames",[36,172218,115],{"class":114},[36,172220,172221],{"class":53},"fieldnames)\n",[36,172223,172224],{"class":38,"line":4150},[36,172225,172226],{"class":53},"    writer.writeheader()\n",[36,172228,172229],{"class":38,"line":4155},[36,172230,171970],{"class":53},[14,172232,172234],{"id":172233},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172236,2310],{},[433,172238,172239,172242,172245],{},[436,172240,172241],{},"读取文本文件。",[436,172243,172244],{},"统计每个单词出现次数。",[436,172246,172247],{},"输出出现次数最多的前 10 个单词。",[19,172249,2327],{},[26,172251,172253],{"className":28,"code":172252,"language":30,"meta":31,"style":31},"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",[33,172254,172255,172265,172269,172282,172298,172302,172312,172321,172325,172337,172357,172366,172370,172388,172392,172422,172426,172442],{"__ignoreMap":31},[36,172256,172257,172259,172261,172263],{"class":38,"line":39},[36,172258,33241],{"class":114},[36,172260,110781],{"class":53},[36,172262,537],{"class":114},[36,172264,110786],{"class":53},[36,172266,172267],{"class":38,"line":46},[36,172268,546],{"emptyLinePlaceholder":545},[36,172270,172271,172273,172275,172277,172280],{"class":38,"line":82},[36,172272,170433],{"class":53},[36,172274,115],{"class":114},[36,172276,111015],{"class":53},[36,172278,172279],{"class":57},"\"article.txt\"",[36,172281,61],{"class":53},[36,172283,172284,172286,172288,172290,172292,172294,172296],{"class":38,"line":88},[36,172285,170616],{"class":53},[36,172287,115],{"class":114},[36,172289,171493],{"class":53},[36,172291,149258],{"class":1997},[36,172293,115],{"class":114},[36,172295,149263],{"class":57},[36,172297,61],{"class":53},[36,172299,172300],{"class":38,"line":195},[36,172301,546],{"emptyLinePlaceholder":545},[36,172303,172304,172307,172309],{"class":38,"line":1517},[36,172305,172306],{"class":53},"words ",[36,172308,115],{"class":114},[36,172310,172311],{"class":53}," content.lower().split()\n",[36,172313,172314,172317,172319],{"class":38,"line":2421},[36,172315,172316],{"class":53},"counter ",[36,172318,115],{"class":114},[36,172320,90347],{"class":53},[36,172322,172323],{"class":38,"line":2446},[36,172324,546],{"emptyLinePlaceholder":545},[36,172326,172327,172329,172332,172334],{"class":38,"line":2469},[36,172328,5556],{"class":114},[36,172330,172331],{"class":53}," word ",[36,172333,28556],{"class":114},[36,172335,172336],{"class":53}," words:\n",[36,172338,172339,172342,172344,172347,172350,172352,172355],{"class":38,"line":2492},[36,172340,172341],{"class":53},"    word ",[36,172343,115],{"class":114},[36,172345,172346],{"class":53}," word.strip(",[36,172348,172349],{"class":57},"\".,!?;:",[36,172351,1612],{"class":49},[36,172353,172354],{"class":57},"'()[]\"",[36,172356,61],{"class":53},[36,172358,172359,172361,172363],{"class":38,"line":4150},[36,172360,5632],{"class":114},[36,172362,41430],{"class":114},[36,172364,172365],{"class":53}," word:\n",[36,172367,172368],{"class":38,"line":4155},[36,172369,150964],{"class":114},[36,172371,172372,172375,172377,172380,172382,172384,172386],{"class":38,"line":4161},[36,172373,172374],{"class":53},"    counter[word] ",[36,172376,115],{"class":114},[36,172378,172379],{"class":53}," counter.get(word, ",[36,172381,713],{"class":49},[36,172383,16236],{"class":53},[36,172385,121],{"class":114},[36,172387,124],{"class":49},[36,172389,172390],{"class":38,"line":4166},[36,172391,546],{"emptyLinePlaceholder":545},[36,172393,172394,172397,172399,172401,172404,172406,172408,172410,172412,172414,172416,172418,172420],{"class":38,"line":4180},[36,172395,172396],{"class":53},"items ",[36,172398,115],{"class":114},[36,172400,165726],{"class":49},[36,172402,172403],{"class":53},"(counter.items(), ",[36,172405,156392],{"class":1997},[36,172407,156395],{"class":114},[36,172409,156398],{"class":53},[36,172411,707],{"class":49},[36,172413,114671],{"class":53},[36,172415,165650],{"class":1997},[36,172417,115],{"class":114},[36,172419,189],{"class":49},[36,172421,61],{"class":53},[36,172423,172424],{"class":38,"line":4185},[36,172425,546],{"emptyLinePlaceholder":545},[36,172427,172428,172430,172433,172435,172438,172440],{"class":38,"line":4191},[36,172429,5556],{"class":114},[36,172431,172432],{"class":53}," word, count ",[36,172434,28556],{"class":114},[36,172436,172437],{"class":53}," items[:",[36,172439,1317],{"class":49},[36,172441,167877],{"class":53},[36,172443,172444,172446],{"class":38,"line":4212},[36,172445,33803],{"class":49},[36,172447,172448],{"class":53},"(word, count)\n",[14,172450,172452],{"id":172451},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,172454,172456],{"className":28,"code":172455,"language":30,"meta":31,"style":31},"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",[33,172457,172458,172464,172474,172478,172490,172494,172498,172506,172516,172522,172526,172556,172566,172570,172574,172582,172612,172636,172640,172644,172652,172681,172686],{"__ignoreMap":31},[36,172459,172460,172462],{"class":38,"line":39},[36,172461,537],{"class":114},[36,172463,149543],{"class":53},[36,172465,172466,172468,172470,172472],{"class":38,"line":46},[36,172467,33241],{"class":114},[36,172469,110781],{"class":53},[36,172471,537],{"class":114},[36,172473,110786],{"class":53},[36,172475,172476],{"class":38,"line":82},[36,172477,546],{"emptyLinePlaceholder":545},[36,172479,172480,172482,172484,172486,172488],{"class":38,"line":88},[36,172481,154273],{"class":49},[36,172483,498],{"class":114},[36,172485,111015],{"class":53},[36,172487,154280],{"class":57},[36,172489,61],{"class":53},[36,172491,172492],{"class":38,"line":195},[36,172493,546],{"emptyLinePlaceholder":545},[36,172495,172496],{"class":38,"line":1517},[36,172497,546],{"emptyLinePlaceholder":545},[36,172499,172500,172502,172504],{"class":38,"line":2421},[36,172501,34450],{"class":114},[36,172503,154297],{"class":4500},[36,172505,34456],{"class":53},[36,172507,172508,172510,172512,172514],{"class":38,"line":2446},[36,172509,5632],{"class":114},[36,172511,41430],{"class":114},[36,172513,154308],{"class":49},[36,172515,154311],{"class":53},[36,172517,172518,172520],{"class":38,"line":2469},[36,172519,17273],{"class":114},[36,172521,54332],{"class":53},[36,172523,172524],{"class":38,"line":2492},[36,172525,546],{"emptyLinePlaceholder":545},[36,172527,172528,172530,172532,172534,172536,172538,172540,172542,172544,172546,172548,172550,172552,172554],{"class":38,"line":4150},[36,172529,36678],{"class":114},[36,172531,149243],{"class":49},[36,172533,54],{"class":53},[36,172535,154273],{"class":49},[36,172537,14958],{"class":53},[36,172539,149253],{"class":57},[36,172541,14958],{"class":53},[36,172543,149258],{"class":1997},[36,172545,115],{"class":114},[36,172547,149263],{"class":57},[36,172549,16236],{"class":53},[36,172551,33887],{"class":114},[36,172553,150605],{"class":1997},[36,172555,6270],{"class":53},[36,172557,172558,172560,172562,172564],{"class":38,"line":4155},[36,172559,17273],{"class":114},[36,172561,150616],{"class":53},[36,172563,47854],{"class":1997},[36,172565,61],{"class":53},[36,172567,172568],{"class":38,"line":4161},[36,172569,546],{"emptyLinePlaceholder":545},[36,172571,172572],{"class":38,"line":4166},[36,172573,546],{"emptyLinePlaceholder":545},[36,172575,172576,172578,172580],{"class":38,"line":4180},[36,172577,34450],{"class":114},[36,172579,154407],{"class":4500},[36,172581,154410],{"class":53},[36,172583,172584,172586,172588,172590,172592,172594,172596,172598,172600,172602,172604,172606,172608,172610],{"class":38,"line":4185},[36,172585,36678],{"class":114},[36,172587,149243],{"class":49},[36,172589,54],{"class":53},[36,172591,154273],{"class":49},[36,172593,14958],{"class":53},[36,172595,154425],{"class":57},[36,172597,14958],{"class":53},[36,172599,149258],{"class":1997},[36,172601,115],{"class":114},[36,172603,149263],{"class":57},[36,172605,16236],{"class":53},[36,172607,33887],{"class":114},[36,172609,150605],{"class":1997},[36,172611,6270],{"class":53},[36,172613,172614,172616,172618,172620,172622,172624,172626,172628,172630,172632,172634],{"class":38,"line":4191},[36,172615,154446],{"class":53},[36,172617,47854],{"class":1997},[36,172619,14958],{"class":53},[36,172621,149589],{"class":1997},[36,172623,115],{"class":114},[36,172625,276],{"class":49},[36,172627,14958],{"class":53},[36,172629,154461],{"class":1997},[36,172631,115],{"class":114},[36,172633,1188],{"class":49},[36,172635,61],{"class":53},[36,172637,172638],{"class":38,"line":4212},[36,172639,546],{"emptyLinePlaceholder":545},[36,172641,172642],{"class":38,"line":4217},[36,172643,546],{"emptyLinePlaceholder":545},[36,172645,172646,172648,172650],{"class":38,"line":4231},[36,172647,161838],{"class":53},[36,172649,115],{"class":114},[36,172651,155489],{"class":53},[36,172653,172654,172657,172659,172661,172663,172665,172667,172669,172671,172673,172675,172677,172679],{"class":38,"line":4236},[36,172655,172656],{"class":53},"students.append({",[36,172658,65167],{"class":57},[36,172660,53931],{"class":53},[36,172662,152338],{"class":57},[36,172664,14958],{"class":53},[36,172666,71611],{"class":57},[36,172668,53931],{"class":53},[36,172670,3326],{"class":49},[36,172672,14958],{"class":53},[36,172674,153921],{"class":57},[36,172676,53931],{"class":53},[36,172678,3662],{"class":49},[36,172680,167274],{"class":53},[36,172682,172683],{"class":38,"line":4264},[36,172684,172685],{"class":53},"save_students(students)\n",[36,172687,172688,172690,172692,172695],{"class":38,"line":4269},[36,172689,50],{"class":49},[36,172691,54],{"class":53},[36,172693,172694],{"class":57},"\"保存成功\"",[36,172696,61],{"class":53},[14,172698,172700],{"id":172699},"_814-易错点","8.14 易错点",[433,172702,172703,172707,172713,172718,172725,172732],{},[436,172704,172705,170966],{},[33,172706,3471],{},[436,172708,172709,172710,1296],{},"读写中文要指定 ",[33,172711,172712],{},"encoding=\"utf-8\"",[436,172714,172715,172716,1296],{},"打开文件后要关闭，推荐使用 ",[33,172717,110303],{},[436,172719,172720,172721,172724],{},"读取大文件不要直接 ",[33,172722,172723],{},"read()"," 全部内容。",[436,172726,172727,172728,172731],{},"Windows 写 CSV 时建议加 ",[33,172729,172730],{},"newline=\"\"","，避免空行。",[436,172733,172734],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172736,172738],{"id":172737},"_815-本章练习","8.15 本章练习",[433,172740,172741,172748,172753,172756,172759],{},[436,172742,172743,172744,172747],{},"写入一个 ",[33,172745,172746],{},"students.txt","，每行保存一个学生姓名。",[436,172749,106827,172750,172752],{},[33,172751,172746],{}," 并输出所有学生。",[436,172754,172755],{},"把学生列表保存为 JSON 文件。",[436,172757,172758],{},"从 JSON 文件读取学生数据，计算平均分。",[436,172760,172761,172762,172765,172766,172769],{},"写一个日志函数 ",[33,172763,172764],{},"write_log(message)","，每次调用向 ",[33,172767,172768],{},"app.log"," 追加一行。",[2602,172771,172772],{},"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":31,"searchDepth":46,"depth":46,"links":172774},[172775,172776,172780,172781,172787,172788,172789,172790,172791,172792,172793,172794,172795,172796,172797],{"id":170286,"depth":46,"text":170287},{"id":170327,"depth":46,"text":170328,"children":172777},[172778,172779],{"id":170331,"depth":82,"text":170332},{"id":170365,"depth":82,"text":170366},{"id":170479,"depth":46,"text":170480},{"id":170572,"depth":46,"text":170573,"children":172782},[172783,172784,172785,172786],{"id":170576,"depth":82,"text":170577},{"id":170663,"depth":82,"text":170664},{"id":170733,"depth":82,"text":170734},{"id":170827,"depth":82,"text":170828},{"id":170897,"depth":46,"text":170898},{"id":170960,"depth":46,"text":170961},{"id":171121,"depth":46,"text":171122},{"id":171184,"depth":46,"text":171185},{"id":171300,"depth":46,"text":171301},{"id":171510,"depth":46,"text":171511},{"id":171822,"depth":46,"text":171823},{"id":172233,"depth":46,"text":172234},{"id":172451,"depth":46,"text":172452},{"id":172699,"depth":46,"text":172700},{"id":172737,"depth":46,"text":172738},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170278,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172804,"title":172805,"body":172806,"description":2630,"extension":2631,"meta":174992,"navigation":545,"path":174993,"seo":174994,"stem":174995,"__hash__":174996},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172807,"toc":174959},[172808,172811,172815,172818,172821,172913,172915,172934,172939,172943,172946,172949,172978,172985,172988,172992,172995,173024,173026,173078,173084,173137,173141,173239,173242,173309,173313,173370,173372,173378,173382,173387,173393,173484,173489,173493,173496,173574,173577,173615,173619,173737,173740,173744,173747,173792,173795,173799,173804,173810,173860,173863,173894,173898,173902,173932,173936,173971,173975,174010,174050,174054,174070,174073,174077,174081,174160,174164,174205,174209,174264,174268,174302,174306,174336,174345,174352,174358,174415,174418,174426,174429,174433,174440,174443,174449,174452,174469,174474,174478,174484,174497,174500,174537,174540,174551,174554,174568,174571,174585,174589,174596,174629,174632,174634,174640,174643,174647,174649,174655,174660,174833,174837,174900,174904,174928,174932,174956],[10,172809,172805],{"id":172810},"_9-异常模块与包",[14,172812,172814],{"id":172813},"_91-什么是异常","9.1 什么是异常",[19,172816,172817],{},"异常是程序运行过程中出现的错误。",[19,172819,172820],{},"常见异常：",[206,172822,172823,172832],{},[209,172824,172825],{},[212,172826,172827,172830],{},[215,172828,172829],{},"异常",[215,172831,223],{},[225,172833,172834,172844,172854,172863,172873,172883,172893,172903],{},[212,172835,172836,172841],{},[230,172837,172838],{},[33,172839,172840],{},"NameError",[230,172842,172843],{},"使用了未定义变量",[212,172845,172846,172851],{},[230,172847,172848],{},[33,172849,172850],{},"TypeError",[230,172852,172853],{},"类型不匹配",[212,172855,172856,172860],{},[230,172857,172858],{},[33,172859,157279],{},[230,172861,172862],{},"值不合法",[212,172864,172865,172870],{},[230,172866,172867],{},[33,172868,172869],{},"IndexError",[230,172871,172872],{},"列表索引越界",[212,172874,172875,172880],{},[230,172876,172877],{},[33,172878,172879],{},"KeyError",[230,172881,172882],{},"字典 key 不存在",[212,172884,172885,172890],{},[230,172886,172887],{},[33,172888,172889],{},"FileNotFoundError",[230,172891,172892],{},"文件不存在",[212,172894,172895,172900],{},[230,172896,172897],{},[33,172898,172899],{},"ZeroDivisionError",[230,172901,172902],{},"除数为 0",[212,172904,172905,172910],{},[230,172906,172907],{},[33,172908,172909],{},"ImportError",[230,172911,172912],{},"导入失败",[19,172914,814],{},[26,172916,172918],{"className":28,"code":172917,"language":30,"meta":31,"style":31},"num = int(\"abc\")\n",[33,172919,172920],{"__ignoreMap":31},[36,172921,172922,172924,172926,172928,172930,172932],{"class":38,"line":39},[36,172923,866],{"class":53},[36,172925,115],{"class":114},[36,172927,837],{"class":49},[36,172929,54],{"class":53},[36,172931,963],{"class":57},[36,172933,61],{"class":53},[19,172935,172936,172937,1296],{},"会触发 ",[33,172938,157279],{},[14,172940,172942],{"id":172941},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172944,172945],{},"如果不处理异常，程序会直接终止。",[19,172947,172948],{},"例如用户输入年龄：",[26,172950,172952],{"className":28,"code":172951,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,172953,172954,172972],{"__ignoreMap":31},[36,172955,172956,172958,172960,172962,172964,172966,172968,172970],{"class":38,"line":39},[36,172957,111],{"class":53},[36,172959,115],{"class":114},[36,172961,837],{"class":49},[36,172963,54],{"class":53},[36,172965,913],{"class":49},[36,172967,54],{"class":53},[36,172969,2223],{"class":57},[36,172971,625],{"class":53},[36,172973,172974,172976],{"class":38,"line":46},[36,172975,50],{"class":49},[36,172977,840],{"class":53},[19,172979,172980,172981,172984],{},"用户输入 ",[33,172982,172983],{},"abc","，程序就会报错退出。",[19,172986,172987],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172989,172991],{"id":172990},"_93-try-except","9.3 try except",[19,172993,172994],{},"基础语法：",[26,172996,172998],{"className":28,"code":172997,"language":30,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,172999,173000,173007,173012,173019],{"__ignoreMap":31},[36,173001,173002,173005],{"class":38,"line":39},[36,173003,173004],{"class":114},"try",[36,173006,6270],{"class":53},[36,173008,173009],{"class":38,"line":46},[36,173010,173011],{"class":53},"    可能出错的代码\n",[36,173013,173014,173017],{"class":38,"line":82},[36,173015,173016],{"class":114},"except",[36,173018,6270],{"class":53},[36,173020,173021],{"class":38,"line":88},[36,173022,173023],{"class":53},"    出错后的处理代码\n",[19,173025,814],{},[26,173027,173029],{"className":28,"code":173028,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,173030,173031,173037,173055,173061,173067],{"__ignoreMap":31},[36,173032,173033,173035],{"class":38,"line":39},[36,173034,173004],{"class":114},[36,173036,6270],{"class":53},[36,173038,173039,173041,173043,173045,173047,173049,173051,173053],{"class":38,"line":46},[36,173040,154834],{"class":53},[36,173042,115],{"class":114},[36,173044,837],{"class":49},[36,173046,54],{"class":53},[36,173048,913],{"class":49},[36,173050,54],{"class":53},[36,173052,2223],{"class":57},[36,173054,625],{"class":53},[36,173056,173057,173059],{"class":38,"line":82},[36,173058,33803],{"class":49},[36,173060,840],{"class":53},[36,173062,173063,173065],{"class":38,"line":88},[36,173064,173016],{"class":114},[36,173066,6270],{"class":53},[36,173068,173069,173071,173073,173076],{"class":38,"line":195},[36,173070,33803],{"class":49},[36,173072,54],{"class":53},[36,173074,173075],{"class":57},"\"年龄必须是数字\"",[36,173077,61],{"class":53},[19,173079,173080,173081,173083],{},"不建议裸写 ",[33,173082,173016],{},"，最好指定异常类型。",[26,173085,173087],{"className":28,"code":173086,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,173088,173089,173095,173113,173119,173127],{"__ignoreMap":31},[36,173090,173091,173093],{"class":38,"line":39},[36,173092,173004],{"class":114},[36,173094,6270],{"class":53},[36,173096,173097,173099,173101,173103,173105,173107,173109,173111],{"class":38,"line":46},[36,173098,154834],{"class":53},[36,173100,115],{"class":114},[36,173102,837],{"class":49},[36,173104,54],{"class":53},[36,173106,913],{"class":49},[36,173108,54],{"class":53},[36,173110,2223],{"class":57},[36,173112,625],{"class":53},[36,173114,173115,173117],{"class":38,"line":82},[36,173116,33803],{"class":49},[36,173118,840],{"class":53},[36,173120,173121,173123,173125],{"class":38,"line":88},[36,173122,173016],{"class":114},[36,173124,154675],{"class":49},[36,173126,6270],{"class":53},[36,173128,173129,173131,173133,173135],{"class":38,"line":195},[36,173130,33803],{"class":49},[36,173132,54],{"class":53},[36,173134,173075],{"class":57},[36,173136,61],{"class":53},[14,173138,173140],{"id":173139},"_94-捕获多个异常","9.4 捕获多个异常",[26,173142,173144],{"className":28,"code":173143,"language":30,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,173145,173146,173152,173173,173193,173200,173208,173219,173228],{"__ignoreMap":31},[36,173147,173148,173150],{"class":38,"line":39},[36,173149,173004],{"class":114},[36,173151,6270],{"class":53},[36,173153,173154,173157,173159,173161,173163,173165,173167,173169,173171],{"class":38,"line":46},[36,173155,173156],{"class":53},"    nums ",[36,173158,115],{"class":114},[36,173160,54720],{"class":53},[36,173162,707],{"class":49},[36,173164,14958],{"class":53},[36,173166,1188],{"class":49},[36,173168,14958],{"class":53},[36,173170,2767],{"class":49},[36,173172,35748],{"class":53},[36,173174,173175,173178,173180,173182,173184,173186,173188,173191],{"class":38,"line":82},[36,173176,173177],{"class":53},"    index ",[36,173179,115],{"class":114},[36,173181,837],{"class":49},[36,173183,54],{"class":53},[36,173185,913],{"class":49},[36,173187,54],{"class":53},[36,173189,173190],{"class":57},"\"请输入索引:\"",[36,173192,625],{"class":53},[36,173194,173195,173197],{"class":38,"line":88},[36,173196,33803],{"class":49},[36,173198,173199],{"class":53},"(nums[index])\n",[36,173201,173202,173204,173206],{"class":38,"line":195},[36,173203,173016],{"class":114},[36,173205,154675],{"class":49},[36,173207,6270],{"class":53},[36,173209,173210,173212,173214,173217],{"class":38,"line":1517},[36,173211,33803],{"class":49},[36,173213,54],{"class":53},[36,173215,173216],{"class":57},"\"索引必须是整数\"",[36,173218,61],{"class":53},[36,173220,173221,173223,173226],{"class":38,"line":2421},[36,173222,173016],{"class":114},[36,173224,173225],{"class":49}," IndexError",[36,173227,6270],{"class":53},[36,173229,173230,173232,173234,173237],{"class":38,"line":2446},[36,173231,33803],{"class":49},[36,173233,54],{"class":53},[36,173235,173236],{"class":57},"\"索引越界\"",[36,173238,61],{"class":53},[19,173240,173241],{},"多个异常使用相同处理逻辑：",[26,173243,173245],{"className":28,"code":173244,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,173246,173247,173253,173271,173284,173298],{"__ignoreMap":31},[36,173248,173249,173251],{"class":38,"line":39},[36,173250,173004],{"class":114},[36,173252,6270],{"class":53},[36,173254,173255,173257,173259,173261,173263,173265,173267,173269],{"class":38,"line":46},[36,173256,48092],{"class":53},[36,173258,115],{"class":114},[36,173260,837],{"class":49},[36,173262,54],{"class":53},[36,173264,913],{"class":49},[36,173266,54],{"class":53},[36,173268,876],{"class":57},[36,173270,625],{"class":53},[36,173272,173273,173275,173277,173279,173281],{"class":38,"line":82},[36,173274,33803],{"class":49},[36,173276,54],{"class":53},[36,173278,1317],{"class":49},[36,173280,1137],{"class":114},[36,173282,173283],{"class":53}," num)\n",[36,173285,173286,173288,173290,173292,173294,173296],{"class":38,"line":88},[36,173287,173016],{"class":114},[36,173289,4196],{"class":53},[36,173291,157279],{"class":49},[36,173293,14958],{"class":53},[36,173295,172899],{"class":49},[36,173297,33290],{"class":53},[36,173299,173300,173302,173304,173307],{"class":38,"line":195},[36,173301,33803],{"class":49},[36,173303,54],{"class":53},[36,173305,173306],{"class":57},"\"输入不合法\"",[36,173308,61],{"class":53},[14,173310,173312],{"id":173311},"_95-获取异常信息","9.5 获取异常信息",[26,173314,173316],{"className":28,"code":173315,"language":30,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,173317,173318,173324,173338,173349],{"__ignoreMap":31},[36,173319,173320,173322],{"class":38,"line":39},[36,173321,173004],{"class":114},[36,173323,6270],{"class":53},[36,173325,173326,173328,173330,173332,173334,173336],{"class":38,"line":46},[36,173327,48092],{"class":53},[36,173329,115],{"class":114},[36,173331,837],{"class":49},[36,173333,54],{"class":53},[36,173335,963],{"class":57},[36,173337,61],{"class":53},[36,173339,173340,173342,173344,173346],{"class":38,"line":82},[36,173341,173016],{"class":114},[36,173343,154675],{"class":49},[36,173345,67092],{"class":114},[36,173347,173348],{"class":53}," e:\n",[36,173350,173351,173353,173355,173357,173360,173362,173364,173366,173368],{"class":38,"line":88},[36,173352,33803],{"class":49},[36,173354,54],{"class":53},[36,173356,2060],{"class":114},[36,173358,173359],{"class":57},"\"出错了:",[36,173361,2065],{"class":49},[36,173363,2770],{"class":53},[36,173365,2070],{"class":49},[36,173367,1822],{"class":57},[36,173369,61],{"class":53},[19,173371,148917],{},[26,173373,173376],{"className":173374,"code":173375,"language":690,"meta":31},[688],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,173377,173375],{"__ignoreMap":31},[14,173379,173381],{"id":173380},"_96-else和finally","9.6 else和finally",[19,173383,173384,173386],{},[33,173385,4239],{},"：没有异常时执行。",[19,173388,173389,173392],{},[33,173390,173391],{},"finally","：无论是否异常都会执行。",[26,173394,173396],{"className":28,"code":173395,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,173397,173398,173404,173422,173430,173440,173446,173467,173473],{"__ignoreMap":31},[36,173399,173400,173402],{"class":38,"line":39},[36,173401,173004],{"class":114},[36,173403,6270],{"class":53},[36,173405,173406,173408,173410,173412,173414,173416,173418,173420],{"class":38,"line":46},[36,173407,48092],{"class":53},[36,173409,115],{"class":114},[36,173411,837],{"class":49},[36,173413,54],{"class":53},[36,173415,913],{"class":49},[36,173417,54],{"class":53},[36,173419,876],{"class":57},[36,173421,625],{"class":53},[36,173423,173424,173426,173428],{"class":38,"line":82},[36,173425,173016],{"class":114},[36,173427,154675],{"class":49},[36,173429,6270],{"class":53},[36,173431,173432,173434,173436,173438],{"class":38,"line":88},[36,173433,33803],{"class":49},[36,173435,54],{"class":53},[36,173437,155661],{"class":57},[36,173439,61],{"class":53},[36,173441,173442,173444],{"class":38,"line":195},[36,173443,4239],{"class":114},[36,173445,6270],{"class":53},[36,173447,173448,173450,173452,173454,173457,173459,173461,173463,173465],{"class":38,"line":1517},[36,173449,33803],{"class":49},[36,173451,54],{"class":53},[36,173453,2060],{"class":114},[36,173455,173456],{"class":57},"\"输入正确:",[36,173458,2065],{"class":49},[36,173460,4203],{"class":53},[36,173462,2070],{"class":49},[36,173464,1822],{"class":57},[36,173466,61],{"class":53},[36,173468,173469,173471],{"class":38,"line":2421},[36,173470,173391],{"class":114},[36,173472,6270],{"class":53},[36,173474,173475,173477,173479,173482],{"class":38,"line":2446},[36,173476,33803],{"class":49},[36,173478,54],{"class":53},[36,173480,173481],{"class":57},"\"程序结束\"",[36,173483,61],{"class":53},[19,173485,173486,173488],{},[33,173487,173391],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173490,173492],{"id":173491},"_97-抛出异常","9.7 抛出异常",[19,173494,173495],{},"程序可以主动抛出异常。",[26,173497,173499],{"className":28,"code":173498,"language":30,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,173500,173501,173510,173522,173535,173555,173559,173563],{"__ignoreMap":31},[36,173502,173503,173505,173508],{"class":38,"line":39},[36,173504,34450],{"class":114},[36,173506,173507],{"class":4500}," set_age",[36,173509,163537],{"class":53},[36,173511,173512,173514,173516,173518,173520],{"class":38,"line":46},[36,173513,5632],{"class":114},[36,173515,118],{"class":53},[36,173517,1507],{"class":114},[36,173519,6624],{"class":49},[36,173521,6270],{"class":53},[36,173523,173524,173526,173528,173530,173533],{"class":38,"line":82},[36,173525,105904],{"class":114},[36,173527,154675],{"class":49},[36,173529,54],{"class":53},[36,173531,173532],{"class":57},"\"年龄不能为负数\"",[36,173534,61],{"class":53},[36,173536,173537,173539,173541,173543,173545,173547,173549,173551,173553],{"class":38,"line":88},[36,173538,33803],{"class":49},[36,173540,54],{"class":53},[36,173542,2060],{"class":114},[36,173544,164105],{"class":57},[36,173546,2065],{"class":49},[36,173548,2006],{"class":53},[36,173550,2070],{"class":49},[36,173552,1822],{"class":57},[36,173554,61],{"class":53},[36,173556,173557],{"class":38,"line":195},[36,173558,546],{"emptyLinePlaceholder":545},[36,173560,173561],{"class":38,"line":1517},[36,173562,546],{"emptyLinePlaceholder":545},[36,173564,173565,173568,173570,173572],{"class":38,"line":2421},[36,173566,173567],{"class":53},"set_age(",[36,173569,508],{"class":114},[36,173571,707],{"class":49},[36,173573,61],{"class":53},[19,173575,173576],{},"调用者可以捕获：",[26,173578,173580],{"className":28,"code":173579,"language":30,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,173581,173582,173588,173599,173609],{"__ignoreMap":31},[36,173583,173584,173586],{"class":38,"line":39},[36,173585,173004],{"class":114},[36,173587,6270],{"class":53},[36,173589,173590,173593,173595,173597],{"class":38,"line":46},[36,173591,173592],{"class":53},"    set_age(",[36,173594,508],{"class":114},[36,173596,707],{"class":49},[36,173598,61],{"class":53},[36,173600,173601,173603,173605,173607],{"class":38,"line":82},[36,173602,173016],{"class":114},[36,173604,154675],{"class":49},[36,173606,67092],{"class":114},[36,173608,173348],{"class":53},[36,173610,173611,173613],{"class":38,"line":88},[36,173612,33803],{"class":49},[36,173614,69486],{"class":53},[14,173616,173618],{"id":173617},"_98-自定义异常","9.8 自定义异常",[26,173620,173622],{"className":28,"code":173621,"language":30,"meta":31,"style":31},"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",[33,173623,173624,173638,173642,173646,173650,173658,173668,173679,173689,173693,173697,173703,173720,173731],{"__ignoreMap":31},[36,173625,173626,173628,173631,173633,173636],{"class":38,"line":39},[36,173627,519],{"class":114},[36,173629,173630],{"class":4500}," BalanceNotEnoughError",[36,173632,54],{"class":53},[36,173634,173635],{"class":49},"Exception",[36,173637,33290],{"class":53},[36,173639,173640],{"class":38,"line":46},[36,173641,151987],{"class":114},[36,173643,173644],{"class":38,"line":82},[36,173645,546],{"emptyLinePlaceholder":545},[36,173647,173648],{"class":38,"line":88},[36,173649,546],{"emptyLinePlaceholder":545},[36,173651,173652,173654,173656],{"class":38,"line":195},[36,173653,34450],{"class":114},[36,173655,152636],{"class":4500},[36,173657,164934],{"class":53},[36,173659,173660,173662,173664,173666],{"class":38,"line":1517},[36,173661,5632],{"class":114},[36,173663,152592],{"class":53},[36,173665,3633],{"class":114},[36,173667,164711],{"class":53},[36,173669,173670,173672,173675,173677],{"class":38,"line":2421},[36,173671,105904],{"class":114},[36,173673,173674],{"class":53}," BalanceNotEnoughError(",[36,173676,152687],{"class":57},[36,173678,61],{"class":53},[36,173680,173681,173683,173685,173687],{"class":38,"line":2446},[36,173682,6621],{"class":114},[36,173684,164941],{"class":53},[36,173686,508],{"class":114},[36,173688,152625],{"class":53},[36,173690,173691],{"class":38,"line":2469},[36,173692,546],{"emptyLinePlaceholder":545},[36,173694,173695],{"class":38,"line":2492},[36,173696,546],{"emptyLinePlaceholder":545},[36,173698,173699,173701],{"class":38,"line":4150},[36,173700,173004],{"class":114},[36,173702,6270],{"class":53},[36,173704,173705,173707,173709,173712,173714,173716,173718],{"class":38,"line":4155},[36,173706,164612],{"class":53},[36,173708,115],{"class":114},[36,173710,173711],{"class":53}," withdraw(",[36,173713,166],{"class":49},[36,173715,14958],{"class":53},[36,173717,4259],{"class":49},[36,173719,61],{"class":53},[36,173721,173722,173724,173727,173729],{"class":38,"line":4161},[36,173723,173016],{"class":114},[36,173725,173726],{"class":53}," BalanceNotEnoughError ",[36,173728,33887],{"class":114},[36,173730,173348],{"class":53},[36,173732,173733,173735],{"class":38,"line":4166},[36,173734,33803],{"class":49},[36,173736,69486],{"class":53},[19,173738,173739],{},"入门阶段大多数情况使用内置异常即可。",[14,173741,173743],{"id":173742},"_99-traceback","9.9 traceback",[19,173745,173746],{},"调试时可以输出完整异常堆栈。",[26,173748,173750],{"className":28,"code":173749,"language":30,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,173751,173752,173759,173763,173769,173779,173787],{"__ignoreMap":31},[36,173753,173754,173756],{"class":38,"line":39},[36,173755,537],{"class":114},[36,173757,173758],{"class":53}," traceback\n",[36,173760,173761],{"class":38,"line":46},[36,173762,546],{"emptyLinePlaceholder":545},[36,173764,173765,173767],{"class":38,"line":82},[36,173766,173004],{"class":114},[36,173768,6270],{"class":53},[36,173770,173771,173773,173775,173777],{"class":38,"line":88},[36,173772,4522],{"class":49},[36,173774,54],{"class":53},[36,173776,963],{"class":57},[36,173778,61],{"class":53},[36,173780,173781,173783,173785],{"class":38,"line":195},[36,173782,173016],{"class":114},[36,173784,154675],{"class":49},[36,173786,6270],{"class":53},[36,173788,173789],{"class":38,"line":1517},[36,173790,173791],{"class":53},"    traceback.print_exc()\n",[19,173793,173794],{},"日志系统中常把异常堆栈记录到文件。",[14,173796,173798],{"id":173797},"_910-什么是模块","9.10 什么是模块",[19,173800,173801,173802,128445],{},"模块就是一个 ",[33,173803,148812],{},[19,173805,173806,173807,27135],{},"例如创建 ",[33,173808,173809],{},"my_math.py",[26,173811,173813],{"className":28,"code":173812,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,173814,173815,173823,173833,173837,173841,173850],{"__ignoreMap":31},[36,173816,173817,173819,173821],{"class":38,"line":39},[36,173818,34450],{"class":114},[36,173820,7738],{"class":4500},[36,173822,153542],{"class":53},[36,173824,173825,173827,173829,173831],{"class":38,"line":46},[36,173826,6621],{"class":114},[36,173828,13392],{"class":53},[36,173830,121],{"class":114},[36,173832,153553],{"class":53},[36,173834,173835],{"class":38,"line":82},[36,173836,546],{"emptyLinePlaceholder":545},[36,173838,173839],{"class":38,"line":88},[36,173840,546],{"emptyLinePlaceholder":545},[36,173842,173843,173845,173848],{"class":38,"line":195},[36,173844,34450],{"class":114},[36,173846,173847],{"class":4500}," sub",[36,173849,153542],{"class":53},[36,173851,173852,173854,173856,173858],{"class":38,"line":1517},[36,173853,6621],{"class":114},[36,173855,13392],{"class":53},[36,173857,508],{"class":114},[36,173859,153553],{"class":53},[19,173861,173862],{},"在另一个文件中导入：",[26,173864,173866],{"className":28,"code":173865,"language":30,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,173867,173868,173875,173879],{"__ignoreMap":31},[36,173869,173870,173872],{"class":38,"line":39},[36,173871,537],{"class":114},[36,173873,173874],{"class":53}," my_math\n",[36,173876,173877],{"class":38,"line":46},[36,173878,546],{"emptyLinePlaceholder":545},[36,173880,173881,173883,173886,173888,173890,173892],{"class":38,"line":82},[36,173882,50],{"class":49},[36,173884,173885],{"class":53},"(my_math.add(",[36,173887,707],{"class":49},[36,173889,14958],{"class":53},[36,173891,1188],{"class":49},[36,173893,625],{"class":53},[14,173895,173897],{"id":173896},"_911-import导入","9.11 import导入",[997,173899,173901],{"id":173900},"_9111-导入模块","9.11.1 导入模块",[26,173903,173905],{"className":28,"code":173904,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,173906,173907,173913,173917],{"__ignoreMap":31},[36,173908,173909,173911],{"class":38,"line":39},[36,173910,537],{"class":114},[36,173912,47828],{"class":53},[36,173914,173915],{"class":38,"line":46},[36,173916,546],{"emptyLinePlaceholder":545},[36,173918,173919,173921,173924,173926,173928,173930],{"class":38,"line":82},[36,173920,50],{"class":49},[36,173922,173923],{"class":53},"(random.randint(",[36,173925,707],{"class":49},[36,173927,14958],{"class":53},[36,173929,1317],{"class":49},[36,173931,625],{"class":53},[997,173933,173935],{"id":173934},"_9112-导入指定内容","9.11.2 导入指定内容",[26,173937,173939],{"className":28,"code":173938,"language":30,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,173940,173941,173952,173956],{"__ignoreMap":31},[36,173942,173943,173945,173947,173949],{"class":38,"line":39},[36,173944,33241],{"class":114},[36,173946,60286],{"class":53},[36,173948,537],{"class":114},[36,173950,173951],{"class":53}," randint\n",[36,173953,173954],{"class":38,"line":46},[36,173955,546],{"emptyLinePlaceholder":545},[36,173957,173958,173960,173963,173965,173967,173969],{"class":38,"line":82},[36,173959,50],{"class":49},[36,173961,173962],{"class":53},"(randint(",[36,173964,707],{"class":49},[36,173966,14958],{"class":53},[36,173968,1317],{"class":49},[36,173970,625],{"class":53},[997,173972,173974],{"id":173973},"_9113-起别名","9.11.3 起别名",[26,173976,173978],{"className":28,"code":173977,"language":30,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,173979,173980,173991,173995],{"__ignoreMap":31},[36,173981,173982,173984,173986,173988],{"class":38,"line":39},[36,173983,537],{"class":114},[36,173985,60286],{"class":53},[36,173987,33887],{"class":114},[36,173989,173990],{"class":53}," rd\n",[36,173992,173993],{"class":38,"line":46},[36,173994,546],{"emptyLinePlaceholder":545},[36,173996,173997,173999,174002,174004,174006,174008],{"class":38,"line":82},[36,173998,50],{"class":49},[36,174000,174001],{"class":53},"(rd.randint(",[36,174003,707],{"class":49},[36,174005,14958],{"class":53},[36,174007,1317],{"class":49},[36,174009,625],{"class":53},[26,174011,174013],{"className":28,"code":174012,"language":30,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,174014,174015,174031,174035],{"__ignoreMap":31},[36,174016,174017,174019,174021,174023,174026,174028],{"class":38,"line":39},[36,174018,33241],{"class":114},[36,174020,60286],{"class":53},[36,174022,537],{"class":114},[36,174024,174025],{"class":53}," randint ",[36,174027,33887],{"class":114},[36,174029,174030],{"class":53}," rint\n",[36,174032,174033],{"class":38,"line":46},[36,174034,546],{"emptyLinePlaceholder":545},[36,174036,174037,174039,174042,174044,174046,174048],{"class":38,"line":82},[36,174038,50],{"class":49},[36,174040,174041],{"class":53},"(rint(",[36,174043,707],{"class":49},[36,174045,14958],{"class":53},[36,174047,1317],{"class":49},[36,174049,625],{"class":53},[997,174051,174053],{"id":174052},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,174055,174057],{"className":28,"code":174056,"language":30,"meta":31,"style":31},"from random import *\n",[33,174058,174059],{"__ignoreMap":31},[36,174060,174061,174063,174065,174067],{"class":38,"line":39},[36,174062,33241],{"class":114},[36,174064,60286],{"class":53},[36,174066,537],{"class":114},[36,174068,174069],{"class":114}," *\n",[19,174071,174072],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174074,174076],{"id":174075},"_912-常用内置模块","9.12 常用内置模块",[997,174078,174080],{"id":174079},"_9121-random","9.12.1 random",[26,174082,174084],{"className":28,"code":174083,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,174085,174086,174092,174096,174110,174129],{"__ignoreMap":31},[36,174087,174088,174090],{"class":38,"line":39},[36,174089,537],{"class":114},[36,174091,47828],{"class":53},[36,174093,174094],{"class":38,"line":46},[36,174095,546],{"emptyLinePlaceholder":545},[36,174097,174098,174100,174102,174104,174106,174108],{"class":38,"line":82},[36,174099,50],{"class":49},[36,174101,173923],{"class":53},[36,174103,707],{"class":49},[36,174105,14958],{"class":53},[36,174107,1317],{"class":49},[36,174109,625],{"class":53},[36,174111,174112,174114,174117,174119,174121,174123,174125,174127],{"class":38,"line":88},[36,174113,50],{"class":49},[36,174115,174116],{"class":53},"(random.choice([",[36,174118,152338],{"class":57},[36,174120,14958],{"class":53},[36,174122,153385],{"class":57},[36,174124,14958],{"class":53},[36,174126,161853],{"class":57},[36,174128,35645],{"class":53},[36,174130,174131,174133,174136,174138,174140,174142,174144,174146,174148,174150,174152,174154,174156,174158],{"class":38,"line":195},[36,174132,50],{"class":49},[36,174134,174135],{"class":53},"(random.sample([",[36,174137,707],{"class":49},[36,174139,14958],{"class":53},[36,174141,1188],{"class":49},[36,174143,14958],{"class":53},[36,174145,2767],{"class":49},[36,174147,14958],{"class":53},[36,174149,2977],{"class":49},[36,174151,14958],{"class":53},[36,174153,1134],{"class":49},[36,174155,114671],{"class":53},[36,174157,1188],{"class":49},[36,174159,625],{"class":53},[997,174161,174163],{"id":174162},"_9122-time","9.12.2 time",[26,174165,174167],{"className":28,"code":174166,"language":30,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,174168,174169,174175,174179,174186,174194],{"__ignoreMap":31},[36,174170,174171,174173],{"class":38,"line":39},[36,174172,537],{"class":114},[36,174174,34332],{"class":53},[36,174176,174177],{"class":38,"line":46},[36,174178,546],{"emptyLinePlaceholder":545},[36,174180,174181,174183],{"class":38,"line":82},[36,174182,50],{"class":49},[36,174184,174185],{"class":53},"(time.time())\n",[36,174187,174188,174190,174192],{"class":38,"line":88},[36,174189,97549],{"class":53},[36,174191,707],{"class":49},[36,174193,61],{"class":53},[36,174195,174196,174198,174200,174203],{"class":38,"line":195},[36,174197,50],{"class":49},[36,174199,54],{"class":53},[36,174201,174202],{"class":57},"\"1秒后执行\"",[36,174204,61],{"class":53},[997,174206,174208],{"id":174207},"_9123-datetime","9.12.3 datetime",[26,174210,174212],{"className":28,"code":174211,"language":30,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,174213,174214,174226,174230,174240,174247],{"__ignoreMap":31},[36,174215,174216,174218,174221,174223],{"class":38,"line":39},[36,174217,33241],{"class":114},[36,174219,174220],{"class":53}," datetime ",[36,174222,537],{"class":114},[36,174224,174225],{"class":53}," datetime\n",[36,174227,174228],{"class":38,"line":46},[36,174229,546],{"emptyLinePlaceholder":545},[36,174231,174232,174235,174237],{"class":38,"line":82},[36,174233,174234],{"class":53},"now ",[36,174236,115],{"class":114},[36,174238,174239],{"class":53}," datetime.now()\n",[36,174241,174242,174244],{"class":38,"line":88},[36,174243,50],{"class":49},[36,174245,174246],{"class":53},"(now)\n",[36,174248,174249,174251,174254,174257,174259,174262],{"class":38,"line":195},[36,174250,50],{"class":49},[36,174252,174253],{"class":53},"(now.strftime(",[36,174255,174256],{"class":57},"\"%Y-%m-",[36,174258,1813],{"class":49},[36,174260,174261],{"class":57}," %H:%M:%S\"",[36,174263,625],{"class":53},[997,174265,174267],{"id":174266},"_9124-os","9.12.4 os",[26,174269,174271],{"className":28,"code":174270,"language":30,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,174272,174273,174279,174283,174290],{"__ignoreMap":31},[36,174274,174275,174277],{"class":38,"line":39},[36,174276,537],{"class":114},[36,174278,47805],{"class":53},[36,174280,174281],{"class":38,"line":46},[36,174282,546],{"emptyLinePlaceholder":545},[36,174284,174285,174287],{"class":38,"line":82},[36,174286,50],{"class":49},[36,174288,174289],{"class":53},"(os.getcwd())\n",[36,174291,174292,174294,174297,174300],{"class":38,"line":88},[36,174293,50],{"class":49},[36,174295,174296],{"class":53},"(os.listdir(",[36,174298,174299],{"class":57},"\".\"",[36,174301,625],{"class":53},[997,174303,174305],{"id":174304},"_9125-sys","9.12.5 sys",[26,174307,174309],{"className":28,"code":174308,"language":30,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,174310,174311,174318,174322,174329],{"__ignoreMap":31},[36,174312,174313,174315],{"class":38,"line":39},[36,174314,537],{"class":114},[36,174316,174317],{"class":53}," sys\n",[36,174319,174320],{"class":38,"line":46},[36,174321,546],{"emptyLinePlaceholder":545},[36,174323,174324,174326],{"class":38,"line":82},[36,174325,50],{"class":49},[36,174327,174328],{"class":53},"(sys.version)\n",[36,174330,174331,174333],{"class":38,"line":88},[36,174332,50],{"class":49},[36,174334,174335],{"class":53},"(sys.path)\n",[14,174337,174339,174340,174342,174343,1822],{"id":174338},"_913-if-name-main","9.13 if ",[2839,174341,1998],{}," == \"",[2839,174344,104531],{},[19,174346,174347,174348,174351],{},"模块被直接运行和被导入时，",[33,174349,174350],{},"__name__"," 的值不同。",[19,174353,174354,174355,27135],{},"创建 ",[33,174356,174357],{},"my_module.py",[26,174359,174361],{"className":28,"code":174360,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,174362,174363,174371,174381,174385,174389,174401],{"__ignoreMap":31},[36,174364,174365,174367,174369],{"class":38,"line":39},[36,174366,34450],{"class":114},[36,174368,7738],{"class":4500},[36,174370,153542],{"class":53},[36,174372,174373,174375,174377,174379],{"class":38,"line":46},[36,174374,6621],{"class":114},[36,174376,13392],{"class":53},[36,174378,121],{"class":114},[36,174380,153553],{"class":53},[36,174382,174383],{"class":38,"line":82},[36,174384,546],{"emptyLinePlaceholder":545},[36,174386,174387],{"class":38,"line":88},[36,174388,546],{"emptyLinePlaceholder":545},[36,174390,174391,174393,174395,174397,174399],{"class":38,"line":195},[36,174392,4069],{"class":114},[36,174394,33724],{"class":49},[36,174396,1351],{"class":114},[36,174398,104035],{"class":57},[36,174400,6270],{"class":53},[36,174402,174403,174405,174407,174409,174411,174413],{"class":38,"line":1517},[36,174404,33803],{"class":49},[36,174406,168722],{"class":53},[36,174408,707],{"class":49},[36,174410,14958],{"class":53},[36,174412,1188],{"class":49},[36,174414,625],{"class":53},[19,174416,174417],{},"作用：",[433,174419,174420,174423],{},[436,174421,174422],{},"直接运行该文件时，执行测试代码。",[436,174424,174425],{},"被其他文件导入时，不执行测试代码。",[19,174427,174428],{},"这是写模块时很常用的习惯。",[14,174430,174432],{"id":174431},"_914-包","9.14 包",[19,174434,174435,174436,174439],{},"包是包含 ",[33,174437,174438],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174441,174442],{},"目录结构：",[26,174444,174447],{"className":174445,"code":174446,"language":690,"meta":31},[688],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,174448,174446],{"__ignoreMap":31},[19,174450,174451],{},"导入：",[26,174453,174455],{"className":28,"code":174454,"language":30,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,174456,174457],{"__ignoreMap":31},[36,174458,174459,174461,174464,174466],{"class":38,"line":39},[36,174460,33241],{"class":114},[36,174462,174463],{"class":53}," utils.file_utils ",[36,174465,537],{"class":114},[36,174467,174468],{"class":53}," read_file\n",[19,174470,174471,174473],{},[33,174472,174438],{}," 可以为空，也可以写包初始化逻辑。",[14,174475,174477],{"id":174476},"_915-第三方包","9.15 第三方包",[19,174479,174480,174481,174483],{},"第三方包通过 ",[33,174482,26347],{}," 安装。",[26,174485,174487],{"className":26338,"code":174486,"language":26340,"meta":31,"style":31},"pip install requests\n",[33,174488,174489],{"__ignoreMap":31},[36,174490,174491,174493,174495],{"class":38,"line":39},[36,174492,26347],{"class":4500},[36,174494,26350],{"class":57},[36,174496,148558],{"class":57},[19,174498,174499],{},"使用：",[26,174501,174503],{"className":28,"code":174502,"language":30,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,174504,174505,174511,174515,174530],{"__ignoreMap":31},[36,174506,174507,174509],{"class":38,"line":39},[36,174508,537],{"class":114},[36,174510,148558],{"class":53},[36,174512,174513],{"class":38,"line":46},[36,174514,546],{"emptyLinePlaceholder":545},[36,174516,174517,174520,174522,174525,174528],{"class":38,"line":82},[36,174518,174519],{"class":53},"response ",[36,174521,115],{"class":114},[36,174523,174524],{"class":53}," requests.get(",[36,174526,174527],{"class":57},"\"https:\u002F\u002Fwww.example.com\"",[36,174529,61],{"class":53},[36,174531,174532,174534],{"class":38,"line":88},[36,174533,50],{"class":49},[36,174535,174536],{"class":53},"(response.status_code)\n",[19,174538,174539],{},"查看已安装包：",[26,174541,174543],{"className":26338,"code":174542,"language":26340,"meta":31,"style":31},"pip list\n",[33,174544,174545],{"__ignoreMap":31},[36,174546,174547,174549],{"class":38,"line":39},[36,174548,26347],{"class":4500},[36,174550,121421],{"class":57},[19,174552,174553],{},"导出项目依赖：",[26,174555,174556],{"className":26338,"code":148753,"language":26340,"meta":31,"style":31},[33,174557,174558],{"__ignoreMap":31},[36,174559,174560,174562,174564,174566],{"class":38,"line":39},[36,174561,26347],{"class":4500},[36,174563,148762],{"class":57},[36,174565,1320],{"class":114},[36,174567,148767],{"class":57},[19,174569,174570],{},"安装项目依赖：",[26,174572,174573],{"className":26338,"code":148773,"language":26340,"meta":31,"style":31},[33,174574,174575],{"__ignoreMap":31},[36,174576,174577,174579,174581,174583],{"class":38,"line":39},[36,174578,26347],{"class":4500},[36,174580,26350],{"class":57},[36,174582,122105],{"class":49},[36,174584,148767],{"class":57},[14,174586,174588],{"id":174587},"_916-模块搜索路径","9.16 模块搜索路径",[19,174590,174591,174592,174595],{},"Python 导入模块时会在 ",[33,174593,174594],{},"sys.path"," 中查找。",[26,174597,174599],{"className":28,"code":174598,"language":30,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,174600,174601,174607,174611,174623],{"__ignoreMap":31},[36,174602,174603,174605],{"class":38,"line":39},[36,174604,537],{"class":114},[36,174606,174317],{"class":53},[36,174608,174609],{"class":38,"line":46},[36,174610,546],{"emptyLinePlaceholder":545},[36,174612,174613,174615,174618,174620],{"class":38,"line":82},[36,174614,5556],{"class":114},[36,174616,174617],{"class":53}," path ",[36,174619,28556],{"class":114},[36,174621,174622],{"class":53}," sys.path:\n",[36,174624,174625,174627],{"class":38,"line":88},[36,174626,33803],{"class":49},[36,174628,171351],{"class":53},[19,174630,174631],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174633,159745],{},[26,174635,174638],{"className":174636,"code":174637,"language":690,"meta":31},[688],"random.py\njson.py\ntime.py\n",[33,174639,174637],{"__ignoreMap":31},[19,174641,174642],{},"这些文件名可能导致导入异常。",[14,174644,174646],{"id":174645},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174648,174442],{},[26,174650,174653],{"className":174651,"code":174652,"language":690,"meta":31},[688],"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",[33,174654,174652],{"__ignoreMap":31},[19,174656,174657,27135],{},[33,174658,174659],{},"utils\u002Ffile_utils.py",[26,174661,174663],{"className":28,"code":174662,"language":30,"meta":31,"style":31},"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",[33,174664,174665,174671,174681,174685,174689,174699,174709,174717,174723,174727,174754,174764,174768,174772,174782,174808],{"__ignoreMap":31},[36,174666,174667,174669],{"class":38,"line":39},[36,174668,537],{"class":114},[36,174670,149543],{"class":53},[36,174672,174673,174675,174677,174679],{"class":38,"line":46},[36,174674,33241],{"class":114},[36,174676,110781],{"class":53},[36,174678,537],{"class":114},[36,174680,110786],{"class":53},[36,174682,174683],{"class":38,"line":82},[36,174684,546],{"emptyLinePlaceholder":545},[36,174686,174687],{"class":38,"line":88},[36,174688,546],{"emptyLinePlaceholder":545},[36,174690,174691,174693,174696],{"class":38,"line":195},[36,174692,34450],{"class":114},[36,174694,174695],{"class":4500}," read_json",[36,174697,174698],{"class":53},"(path):\n",[36,174700,174701,174704,174706],{"class":38,"line":1517},[36,174702,174703],{"class":53},"    path ",[36,174705,115],{"class":114},[36,174707,174708],{"class":53}," Path(path)\n",[36,174710,174711,174713,174715],{"class":38,"line":2421},[36,174712,5632],{"class":114},[36,174714,41430],{"class":114},[36,174716,171432],{"class":53},[36,174718,174719,174721],{"class":38,"line":2446},[36,174720,17273],{"class":114},[36,174722,54332],{"class":53},[36,174724,174725],{"class":38,"line":2469},[36,174726,546],{"emptyLinePlaceholder":545},[36,174728,174729,174731,174733,174736,174738,174740,174742,174744,174746,174748,174750,174752],{"class":38,"line":2492},[36,174730,36678],{"class":114},[36,174732,149243],{"class":49},[36,174734,174735],{"class":53},"(path, ",[36,174737,149253],{"class":57},[36,174739,14958],{"class":53},[36,174741,149258],{"class":1997},[36,174743,115],{"class":114},[36,174745,149263],{"class":57},[36,174747,16236],{"class":53},[36,174749,33887],{"class":114},[36,174751,150605],{"class":1997},[36,174753,6270],{"class":53},[36,174755,174756,174758,174760,174762],{"class":38,"line":4150},[36,174757,17273],{"class":114},[36,174759,150616],{"class":53},[36,174761,47854],{"class":1997},[36,174763,61],{"class":53},[36,174765,174766],{"class":38,"line":4155},[36,174767,546],{"emptyLinePlaceholder":545},[36,174769,174770],{"class":38,"line":4161},[36,174771,546],{"emptyLinePlaceholder":545},[36,174773,174774,174776,174779],{"class":38,"line":4166},[36,174775,34450],{"class":114},[36,174777,174778],{"class":4500}," write_json",[36,174780,174781],{"class":53},"(path, data):\n",[36,174783,174784,174786,174788,174790,174792,174794,174796,174798,174800,174802,174804,174806],{"class":38,"line":4180},[36,174785,36678],{"class":114},[36,174787,149243],{"class":49},[36,174789,174735],{"class":53},[36,174791,154425],{"class":57},[36,174793,14958],{"class":53},[36,174795,149258],{"class":1997},[36,174797,115],{"class":114},[36,174799,149263],{"class":57},[36,174801,16236],{"class":53},[36,174803,33887],{"class":114},[36,174805,150605],{"class":1997},[36,174807,6270],{"class":53},[36,174809,174810,174813,174815,174817,174819,174821,174823,174825,174827,174829,174831],{"class":38,"line":4185},[36,174811,174812],{"class":53},"        json.dump(data, ",[36,174814,47854],{"class":1997},[36,174816,14958],{"class":53},[36,174818,149589],{"class":1997},[36,174820,115],{"class":114},[36,174822,276],{"class":49},[36,174824,14958],{"class":53},[36,174826,154461],{"class":1997},[36,174828,115],{"class":114},[36,174830,1188],{"class":49},[36,174832,61],{"class":53},[19,174834,174835,27135],{},[33,174836,157052],{},[26,174838,174840],{"className":28,"code":174839,"language":30,"meta":31,"style":31},"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",[33,174841,174842,174853,174857,174870,174890],{"__ignoreMap":31},[36,174843,174844,174846,174848,174850],{"class":38,"line":39},[36,174845,33241],{"class":114},[36,174847,174463],{"class":53},[36,174849,537],{"class":114},[36,174851,174852],{"class":53}," read_json, write_json\n",[36,174854,174855],{"class":38,"line":46},[36,174856,546],{"emptyLinePlaceholder":545},[36,174858,174859,174861,174863,174866,174868],{"class":38,"line":82},[36,174860,161838],{"class":53},[36,174862,115],{"class":114},[36,174864,174865],{"class":53}," read_json(",[36,174867,154280],{"class":57},[36,174869,61],{"class":53},[36,174871,174872,174874,174876,174878,174880,174882,174884,174886,174888],{"class":38,"line":88},[36,174873,172656],{"class":53},[36,174875,65167],{"class":57},[36,174877,53931],{"class":53},[36,174879,152338],{"class":57},[36,174881,14958],{"class":53},[36,174883,153921],{"class":57},[36,174885,53931],{"class":53},[36,174887,3662],{"class":49},[36,174889,167274],{"class":53},[36,174891,174892,174895,174897],{"class":38,"line":195},[36,174893,174894],{"class":53},"write_json(",[36,174896,154280],{"class":57},[36,174898,174899],{"class":53},", students)\n",[14,174901,174903],{"id":174902},"_918-易错点","9.18 易错点",[433,174905,174906,174909,174914,174919,174922,174925],{},[436,174907,174908],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[436,174910,174911,174912,1296],{},"能指定异常类型就不要裸写 ",[33,174913,173016],{},[436,174915,174916,174918],{},[33,174917,173391],{}," 无论是否出错都会执行。",[436,174920,174921],{},"模块文件名不要和标准库重名。",[436,174923,174924],{},"导入自己写的模块时，要注意运行目录。",[436,174926,174927],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174929,174931],{"id":174930},"_919-本章练习","9.19 本章练习",[433,174933,174934,174937,174940,174946,174953],{},[436,174935,174936],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[436,174938,174939],{},"写函数读取文件，如果文件不存在则返回空字符串。",[436,174941,174354,174942,174945],{},[33,174943,174944],{},"math_utils.py","，实现加减乘除函数并导入使用。",[436,174947,174948,174949,174952],{},"创建一个 ",[33,174950,174951],{},"utils"," 包，把 JSON 读写函数放进去。",[436,174954,174955],{},"写一个程序，捕获除零异常和输入格式异常。",[2602,174957,174958],{},"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":31,"searchDepth":46,"depth":46,"links":174960},[174961,174962,174963,174964,174965,174966,174967,174968,174969,174970,174971,174977,174984,174986,174987,174988,174989,174990,174991],{"id":172813,"depth":46,"text":172814},{"id":172941,"depth":46,"text":172942},{"id":172990,"depth":46,"text":172991},{"id":173139,"depth":46,"text":173140},{"id":173311,"depth":46,"text":173312},{"id":173380,"depth":46,"text":173381},{"id":173491,"depth":46,"text":173492},{"id":173617,"depth":46,"text":173618},{"id":173742,"depth":46,"text":173743},{"id":173797,"depth":46,"text":173798},{"id":173896,"depth":46,"text":173897,"children":174972},[174973,174974,174975,174976],{"id":173900,"depth":82,"text":173901},{"id":173934,"depth":82,"text":173935},{"id":173973,"depth":82,"text":173974},{"id":174052,"depth":82,"text":174053},{"id":174075,"depth":46,"text":174076,"children":174978},[174979,174980,174981,174982,174983],{"id":174079,"depth":82,"text":174080},{"id":174162,"depth":82,"text":174163},{"id":174207,"depth":82,"text":174208},{"id":174266,"depth":82,"text":174267},{"id":174304,"depth":82,"text":174305},{"id":174338,"depth":46,"text":174985},"9.13 if name == \"main\"",{"id":174431,"depth":46,"text":174432},{"id":174476,"depth":46,"text":174477},{"id":174587,"depth":46,"text":174588},{"id":174645,"depth":46,"text":174646},{"id":174902,"depth":46,"text":174903},{"id":174930,"depth":46,"text":174931},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172805,"description":2630},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174998,"title":174999,"body":175000,"description":175163,"extension":2631,"meta":175164,"navigation":545,"path":175165,"seo":175166,"stem":175167,"__hash__":175168},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175001,"toc":175158},[175002,175005,175008,175011,175022,175024,175098,175101,175104,175107,175110,175113,175116,175119,175122,175125,175128],[10,175003,174999],{"id":175004},"python教程",[19,175006,175007],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175009,175010],{},"建议学习环境：",[433,175012,175013,175016,175019],{},[436,175014,175015],{},"Python 版本：Python 3.10 及以上。",[436,175017,175018],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[436,175020,175021],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175023,119544],{"id":119544},[433,175025,175026,175032,175038,175044,175050,175056,175062,175068,175074,175080,175086,175092],{},[436,175027,175028],{},[2923,175029,175031],{"href":175030},".\u002Fch1-Python","Python环境与第一个程序",[436,175033,175034],{},[2923,175035,175037],{"href":175036},".\u002Fch2","基础语法、变量与字符串",[436,175039,175040],{},[2923,175041,175043],{"href":175042},".\u002Fch3","判断语句",[436,175045,175046],{},[2923,175047,175049],{"href":175048},".\u002Fch4","循环语句",[436,175051,175052],{},[2923,175053,175055],{"href":175054},".\u002Fch5","函数基础",[436,175057,175058],{},[2923,175059,175061],{"href":175060},".\u002Fch6","数据容器",[436,175063,175064],{},[2923,175065,175067],{"href":175066},".\u002Fch7","函数进阶",[436,175069,175070],{},[2923,175071,175073],{"href":175072},".\u002Fch8","文件操作",[436,175075,175076],{},[2923,175077,175079],{"href":175078},".\u002Fch9","异常、模块与包",[436,175081,175082],{},[2923,175083,175085],{"href":175084},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[436,175087,175088],{},[2923,175089,175091],{"href":175090},".\u002Fch11","面向对象基础",[436,175093,175094],{},[2923,175095,175097],{"href":175096},".\u002Fch12","综合案例与复习路线",[14,175099,175100],{"id":175100},"学习路线",[19,175102,175103],{},"第一阶段：能运行程序。",[19,175105,175106],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175108,175109],{},"第二阶段：能组织数据。",[19,175111,175112],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175114,175115],{},"第三阶段：能封装逻辑。",[19,175117,175118],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175120,175121],{},"第四阶段：能做小项目。",[19,175123,175124],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175126,175127],{"id":175127},"参考资料",[433,175129,175130,175137,175144,175151],{},[436,175131,175132,175133],{},"黑马程序员 Python 入门教程推荐：",[2923,175134,175135],{"href":175135,"rel":175136},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26381],[436,175138,175139,175140],{},"Python 官方中文教程：",[2923,175141,175142],{"href":175142,"rel":175143},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26381],[436,175145,175146,175147],{},"Python 标准库文档：",[2923,175148,175149],{"href":175149,"rel":175150},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26381],[436,175152,175153,175154],{},"pyecharts 文档：",[2923,175155,175156],{"href":175156,"rel":175157},"https:\u002F\u002Fpyecharts.org\u002F",[26381],{"title":31,"searchDepth":46,"depth":46,"links":175159},[175160,175161,175162],{"id":119544,"depth":46,"text":119544},{"id":175100,"depth":46,"text":175100},{"id":175127,"depth":46,"text":175127},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25895},"\u002Fwiki\u002F2024-10-10-python",{"title":174999,"description":175163},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331477869]